Apache MINA
Copyright 2007 The Apache Software Foundation.

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Please refer to each LICENSE.<component>.txt file for the
license terms of the components that Apache MINA depends on.

Message logging is provided by the SLF4J library package,
which is open source software, written by Ceki Gülcü, and
copyright by SLF4J.ORG and QOS.ch.  The original software is
available from

   http://www.slf4j.org/

Data compression support is provided by the JZLib library package,
which is open source software, written by JCraft, and copyright
by JCraft.  The original software is available from

   http://www.jcraft.com/jzlib/

Spring framework is provided by the Spring framework library
package, which is open source software, written by Rod Johnson
et al, and copyright by Springframework.org.  The original
software is available from

   http://www.springframework.org/

OGNL is provided by the OGNL library package, which is open source
software, written by Drew Davidson and Luke Blanshard.  The original
software is available from

   http://www.ognl.org/

