Apache Felix Dependency Manager
Copyright 2011-2015 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
Licensed under the Apache License 2.0.

This product includes software developed at The OSGi 
Alliance (http://www.osgi.org/).
Copyright: (c) OSGi Alliance (2000, 2015)
Copyright (c) 2000 Gatespace AB. All Rights Reserved.
Licensed under the Apache License 2.0.

This product includes software from http://www.json.org.
Copyright (c) 2002 JSON.org
Licensed under the JSON License

This product includes software from (http://junit.org),
Licensed under the Eclipse Public License - v 1.0.

This product includes software from http://bndtools.org
Licensed under the Apache License 2.0.

This product includes software developed at
Hamcrest (http://www.hamcrest.org)
Copyright (c) 2000-2006, www.hamcrest.org
Licensed under BSD License
