<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>About</title>
</head>
<body lang="EN-US">
	<h2>About This Content</h2>

	<p>November 30, 2017</p>
	<h3>License</h3>

	<p>
		The Eclipse Foundation makes available all content in this plug-in
		(&quot;Content&quot;). Unless otherwise indicated below, the Content
		is provided to you under the terms and conditions of the Eclipse
		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
		For purposes of the EPL, &quot;Program&quot; will mean the Content.
	</p>

	<p>
		If you did not receive this Content directly from the Eclipse
		Foundation, the Content is being redistributed by another party
		(&quot;Redistributor&quot;) and different terms and conditions may
		apply to your use of any object code in the Content. Check the
		Redistributor's license that was provided with the Content. If no such
		license exists, contact the Redistributor. Unless otherwise indicated
		below, the terms and conditions of the EPL still apply to any source
		code in the Content and such source code may be obtained at <a
			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
	</p>


<h3>Third Party Content</h3>

<p>The Content includes items that have been sourced from third parties as set out below. If you 
did not receive this Content directly from the Eclipse Foundation, the following is provided 
for informational purposes only, and you should look to the Redistributor's license for 
terms and conditions of use.</p>

<h4>OSGi Materials</h4>

<p>All files in the following sub-directories (and their sub-directories):</p>

<ul>
	<li>org/osgi</li>
</ul>

<p>and the following files (which may not be present in all cases):</p>

<ul>
	<li>osgi/ee.foundation.jar</li>
	<li>osgi/ee.minimum.jar</li>
	<li>osgi/osgi.jar</li>
</ul>

<p>shall be defined as the &quot;OSGi Materials.&quot;  The OSGi Materials are:</p>

<blockquote>
Copyright (c) 2000, 2006
<br /><br />
OSGi Alliance
Bishop Ranch 6<br/>
2400 Camino Ramon, Suite 375<br/>
San Ramon, CA 94583 USA
<br /><br />
All Rights Reserved.
</blockquote>

<p>The OSGi Materials are provided to you under the terms and conditions of the Apache License, Version 2.0.  A copy of the license is contained
in the file <a href="about_files/LICENSE-2.0.txt" target="_blank">LICENSE-2.0.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.</p>

<p>Implementation of certain elements of the OSGi Materials may be subject to third party intellectual property rights, including without limitation, patent rights (such a third party may
or may not be a member of the OSGi Alliance).  The OSGi Alliance and its members are not responsible and shall not be held responsible in any manner for identifying or failing to identify any or all such third party
intellectual property rights.</p>

<h4>Apache Felix Resolver</h4>
  
<p>This bundle includes software developed by The Apache Software Foundation as part of the Felix project.
this includes all files in the following sub-directories (and their sub-directories):</p>
<ul>
	<li>org/apache/felix/resolver</li>
</ul>
  
<p>Your use of the Resolver code is subject to the terms and conditions of the Apache Software License 2.0. A copy of the license is contained
  in the file <a href="about_files/LICENSE-2.0.txt">LICENSE-2.0.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
  
<p>The names &quot;Felix Resolver&quot; and &quot;Apache Software Foundation&quot; must not be used to endorse or promote products derived from this
  software without prior written permission. For written permission, please contact <a href="mailto:apache@apache.org">apache@apache.org</a>.</p>
  
<p>
  Original binaries and source are available from the <a href="http://felix.apache.org/">Apache Felix website</a>.</p>

<small>OSGi&trade; is a trademark, registered trademark, or service mark of The OSGi Alliance in the US and other countries. Java is a trademark,
registered trademark, or service mark of Sun Microsystems, Inc. in the US and other countries. All other trademarks, registered trademarks, or
service marks used in the Content are the property of their respective owners and are hereby recognized.</small>
</body>
</html>