<!--
  ~  Licensed to the Apache Software Foundation (ASF) under one
  ~  or more contributor license agreements.  See the NOTICE file
  ~  distributed with this work for additional information
  ~  regarding copyright ownership.  The ASF licenses this file
  ~  to you under the Apache License, Version 2.0 (the
  ~  "License"); you may not use this file except in compliance
  ~  with the License.  You may obtain a copy of the License at
  ~
  ~       http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~  Unless required by applicable law or agreed to in writing, software
  ~  distributed under the License is distributed on an "AS IS" BASIS,
  ~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~  See the License for the specific language governing permissions and
  ~  limitations under the License.
  ~
  ~
  -->
<authorgroup>
  <corpauthor>The Polygene™ Community
  </corpauthor>
</authorgroup>

<copyright>
  <year>2011</year>
  <holder>Polygene™ Community</holder>
</copyright>

<legalnotice>
  <title>License: Apache License 2.0</title>
  <simpara>This book is presented in open source and licensed through
    Apache License 2.0.
    You are free to copy, distribute, transmit, and/or adapt the work. This license is based upon the following
    conditions:
  </simpara>
  <formalpara>
    <title>Attribution</title>
    <para>You must attribute the work in the manner specified by the
      author or licensor (but not in any way that suggests that they
      endorse you or your use of the work).</para>
  </formalpara>
  <simpara>
    Any of the above conditions can be waived only if you get permission from the copyright holder.
  </simpara>
  <simpara>
    In no way are any of the following rights affected by the license:
  </simpara>
  <itemizedlist>
    <listitem>
      <simpara>
        Your fair dealing or fair use rights
      </simpara>
    </listitem>
    <listitem>
      <simpara>
        The author&#8217;s moral rights
      </simpara>
    </listitem>
    <listitem>
      <simpara>
        Rights other persons may have either in the work itself or in how the work is used, such as publicity or
        privacy rights
      </simpara>
    </listitem>
  </itemizedlist>
  <note>
    <simpara>
      For any reuse or distribution, you must make clear to the others the license terms of this work. The best way
      to do this is with a direct link to this page:
      <ulink url="http://apache.org/licenses/LICENSE-2.0">http://apache.org/licenses/LICENSE-2.0</ulink>
    </simpara>
  </note>
</legalnotice>

