<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse.org Software User Agreement";
	$pageKeywords	= "legal, about";
	$pageAuthor		= "M. Milinkovich Nov 21/05";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<h1>$pageTitle</h1>
	<div id="midcolumn">
	
	<p>ECLIPSE.ORG MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
   	(COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
   	CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
   	OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
   	NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
   	CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
   
	<h3>Applicable Licenses</h3>   
   
	<p>Unless otherwise indicated, all Content made available by Eclipse.org is provided to you under the terms and conditions of the Common Public License Version 1.0
   	(&quot;CPL&quot;).  A copy of the CPL is provided with this Content and is also available at <a href="../cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
   	For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>

	<p>Content includes, but is not limited to, source code, object code, documentation and other files 
	maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
   	modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>

	<p>Content may be apportioned into plug-ins (&quot;Plug-ins&quot;), plug-in fragments 
	(&quot;Fragments&quot;), and features (&quot;Features&quot;). A Feature is a bundle of one or more 
	Plug-ins and/or Fragments and associated material. Files named &quot;feature.xml&quot; may contain a list 
	of the names and version numbers of  the Plug-ins and/or Fragments associated with a Feature.   Plug-ins 
	and Fragments are located in directories
   	named &quot;plugins&quot; and Features are located in directories named &quot;features&quot;.</p>
  
	<p>Features may also include other Features (&quot;Included Features&quot;). Files named 
	&quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</p>
  
	<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named 
	&quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
	Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). 
	Abouts and Feature Licenses may be located in any directory of a Download or Module
	including, but not limited to the following locations:</p>

	<ul>
		<li>The top-level (root) directory</li>
		<li>Plug-in and Fragment directories</li>
		<li>Subdirectories of the directory named &quot;src&quot; of certain Plug-ins</li>
		<li>Feature directories</li>
	</ul>
		
	<p>Note: if a Feature made available by Eclipse.org is installed using the Eclipse Update Manager, you 
	must agree to a license (&quot;Feature Update License&quot;) during the
	installation process. If the Feature contains Included Features, the Feature Update License should either 
	provide you with the terms and conditions governing the Included Features or
	inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; 
	property of files named &quot;feature.properties&quot;.
	Such Abouts, Feature Licenses and Feature Update Licenses contain the terms and conditions (or references 
	to such terms and conditions) that govern your use of the associated Content in that directory.</p>

	<p>THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER TO THE CPL OR OTHER LICENSE 
	AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT 
	ARE NOT LIMITED TO):</p>

	<ul>
		<li>Eclipse Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)</li>
		<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
		<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
  		<li>IBM Public License 1.0 (available at <a href="http://www-128.ibm.com/developerworks/opensource/library/os-ipl.html">http://www-128.ibm.com/developerworks/opensource/library/os-ipl.html</a>)</li>	
		<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
		<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
	</ul>

	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  
	If no About, Feature License or Feature Update License is provided, please
	contact Eclipse.org to determine what terms and conditions govern that particular Content.</p>

	<h3>Cryptography</h3>

	<p>Content may contain encryption software. The country in which you are currently may have restrictions 
	on the import, possession, and use, and/or re-export to
   	another country, of encryption software. BEFORE using any encryption software, please check the countrys 
   	laws, regulations and policies concerning the import,
   	possession, or use, and re-export of encryption software, to see if this is permitted.</p> 
   	
	</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Related Links</h6>
			<ul>
			<li><a href="notice.html">CPL Software User Agreement in plain HTML</a></li>
			<li><a href="index.php">CPL to EPL conversion</a></li>
			<li><a href="../guidetolegaldoc.php">Guide to legal documents</a></li>
			</ul>
		</div>
	</div>
	
EOHTML;

	$App->setOutDated('now');
	# Generate the web page
	$App->generatePage('solstice', $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
