{{!--
  This template is used both in our TypeDoc theme (for API reference) and in 11ty (for the rest of the site).
  Therefore: only use plain Handlebars code, no custom helpers etc.
--}}
    <footer class="ui bottom attached segment">
      <div class="ui container">
        <div class="ui equal height divided stackable grid">
          <div class="four wide column">
            <a class="ui left floated medium image" href="https://apache.org/" target="_blank">
              <img src="https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png" alt="logo of the Apache Incubator" />
            </a>
            <p>
              <em>Copyright © 2016-2018 The Apache Software Foundation, Licensed under
              the <a href="https://www.apache.org/licenses/LICENSE-2.0" rel="license external">Apache License, Version 2.0</a>.
              |
              <a rel="external" href="https://www.apache.org/foundation/policies/privacy.html">Privacy Policy</a>
              </em>
            </p>
          </div>
          <div class="nine wide column">
            <p>
              <em>Apache Annotator is an effort undergoing incubation at <a target="_blank" href="https://apache.org/">The Apache Software Foundation (ASF)</a> sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</em></p>
            <p><em>Apache®, the names of Apache projects, and the feather logo are either <a rel="external" href="https://www.apache.org/foundation/marks/list/">registered trademarks or trademarks</a> of the Apache Software Foundation in the United States and/or other countries.</em></p>
          </div>
          <div class="three wide column">
            <h4 class="header">The <abbr title="Apache Software Foundation">ASF</abbr></h4>
            <div class="ui link list">
              <a class="item" rel="external" href="https://incubator.apache.org/">Apache Incubator</a>
              <a class="item" rel="external" href="https://www.apache.org/">About the ASF</a>
              <a class="item" rel="external" href="https://www.apache.org/events/current-event">Events</a>
              <a class="item" rel="external" href="https://www.apache.org/foundation/thanks.html">Thanks</a>
              <a class="item" rel="external" href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a>
              <a class="item" rel="external" href="https://www.apache.org/security/">Security</a>
              <a class="item" rel="external" href="https://www.apache.org/licenses/">License</a>
            </div>
          </div>
        </div>
      </div>
    </footer>
