<?php
/**
 * Copyright (c) 2005, 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *   Denis Roy (Eclipse Foundation) - Initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<div id="midcolumn">
  <h1>Copyright Agent</h1>
  <p>We respect the intellectual property rights of others, and require that the
    people who use the Site do the same. We also maintain a policy under which
    the Web Site use privileges of users who are repeat infringers of
    intellectual property rights are terminated in appropriate circumstances. If
    you believe that your work has been copied in a way that constitutes
    copyright infringement, please forward the following information to
    Eclipse's Copyright Agent, designated as such pursuant to the Digital
    Millennium Copyright Act, 17 U.S.C. &#167; 512(c)(2), named below:</p>

  <ul>
    <li>Your address, telephone number, and email address;</li>
    <li>A description of the copyrighted work that you claim has been infringed;
    </li>
    <li>A description of where the alleged infringing material is located;</li>
    <li>A statement by you that you have a good faith belief that the disputed
      use is not authorized by the copyright owner, its agent, or the law;</li>
    <li>An electronic or physical signature of the person authorized to act on
      behalf of the owner of the copyright interest; and</li>
    <li>A statement by you, made under penalty of perjury, that the above
      information in your Notice is accurate and that you are the copyright
      owner or authorized to act on the copyright owner's behalf.</li>
  </ul>

  <h3>Copyright Agent:</h3>
  <p>Manager, Intellectual Property<br /> Eclipse Foundation, Inc.<br /> 102
  Centrepointe Drive<br /> Ottawa, Ontario<br /> Canada<br /> K2G 6B1<br /> <br />
  Phone: +1.613.224.9461<br /> Fax: +1.212.918.1619<br /> Email:
  license@eclipse.org
  </p>
  <br />
</div>
<div id="rightcolumn">
  <div class="sideitem">
    <h6>Related Links</h6>
    <ul>
      <li><a href="index.php">Legal resources</a></li>
      <li><a href="guidetolegaldoc.php">Guide to legal documents</a></li>
    </ul>
  </div>
</div>