<!DOCTYPE html>
<!--
    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.
-->
<html lang="en">
<head>
    <title>{{ .Title }} &mdash; Apache MINA</title>

    <link href="/assets/css/common.css" rel="stylesheet" type="text/css"/>
    <link href="/assets/css/mina.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="container">
    {{ partial "header.html" (dict "context" . "project" "home") }}

    <div id="content">
        <div id="leftColumn">
            <div id="navigation">
                <h5>Latest Downloads</h5>
                <ul>
                    <li><a href="/downloads-mina_2_0.html">Mina {{ .Site.Params.version_mina_2_0 }}</a></li>
                    <li><a href="/downloads-mina_2_1.html">Mina {{ .Site.Params.version_mina_2_1 }}</a></li>
                    <li><a href="/downloads-ftpserver.html">FtpServer {{ .Site.Params.version_ftpserver }}</a></li>
                    <li><a href="/downloads-sshd.html">SSHD {{ .Site.Params.version_sshd }}</a></li>
                    <li><a href="/downloads-vysper.html">Vysper {{ .Site.Params.version_vysper }}</a></li>
                </ul>
                <h5>Projects</h5>
                <ul>
                    <li><a href="/mina-project/index.html">MINA</a></li>
                    <li><a href="/asyncweb-project/index.html">AsyncWeb</a></li>
                    <li><a href="/ftpserver-project/index.html">FtpServer</a></li>
                    <li><a href="/sshd-project/index.html">SSHD</a></li>
                    <li><a href="/vysper-project/index.html">Vysper</a></li>
                </ul>

                <h5>Community</h5>
                <ul>
                    <li><a href="/contributors.html" class="external-link" rel="nofollow">Team</a></li>
                    <li><a href="https://www.apache.org/licenses/" class="external-link" rel="nofollow">License</a></li>
                    <li><a href="https://www.apache.org/foundation/contributing.html" class="external-link" rel="nofollow">Contributing</a></li>
                    <li><a href="https://www.apache.org/" title="Apache Software Foundation" class="external-link" rel="nofollow">ASF main site</a></li>
                    <li><a href="https://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</a></li>
                    <li><a href="https://www.apache.org/foundation/sponsorship.html" title="The ASF sponsorship program" class="external-link" rel="nofollow">Sponsorship program</a></li>
                    <li><a href="https://www.apache.org/security/" class="external-link" rel="nofollow">Security</a></li>
                </ul>

                <h3><a name="Navigation-Upcoming"></a>Upcoming</h3>
            </div><!-- navigation -->
        </div><!-- leftColumn -->
        <div id="rightColumn">
            {{ partial "nav-headers.html" . }}
            {{ block "main" . }}{{ end }}
            {{ partial "nav-headers.html" . }}
        </div><!-- rightColumn -->
        <div id="endContent"></div>
    </div><!-- content -->

    {{ partial "footer.html" . }}
</div><!-- container -->

{{ partial "google-analytics.html" . }}

</body>

</html>
