Apache Directory Daemon
Copyright 2007 The Apache Software Foundation

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

This product uses JUnit (http://junit.org/).

This product includes a distribution of NLOG4J 
(http://www.slf4j.org/nlog4j/).
