<?xml version="1.0"?>
<!--
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.
-->
<document>
  <properties>
    <title>Home</title>
    <author email="dev@commons.apache.org">Commons Documentation Team</author>
  </properties>
  <body>
    <!-- ================================================== -->
    <section name="Commons RNG Release History">
      <p><em>Note.</em> For older release javadocs see the individual artifact sub-sites.</p>
      <table>
        <tr><th>Version</th><th>Release date (YYYY-MM-DD)</th><th>Required Java Version</th><th>Release notes</th></tr>
        <tr>
          <td>1.4</td><td>2021-09-13</td><td>8+</td><td><a href="release-notes/RELEASE-NOTES-1.4.txt">release notes for 1.4</a></td>
        </tr>
        <tr>
          <td>1.3</td><td>2019-11-08</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.3.txt">release notes for 1.3</a></td>
        </tr>
        <tr>
          <td>1.2</td><td>2018-12-07</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.2.txt">release notes for 1.2</a></td>
        </tr>
        <tr>
          <td>1.1</td><td>2018-08-14</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.1.txt">release notes for 1.1</a></td>
        </tr>
        <tr>
          <td>1.0</td><td>2016-12-13</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.0.txt">release notes for 1.0</a></td>
        </tr>
      </table>

    </section>
    <!-- ================================================== -->
  </body>
</document>
