<!--
 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.
-->

<li class="side-nav-title">Quick Links</li>
<li>
    <i class="fab fa-fw fa-github mr-2"></i><a target="github" href="https://github.com/apache/incubator-nlpcraft/tree/master/nlpcraft-examples">Examples</a>
</li>
<li>
    <i class="fas fa-fw fa-book mr-2"></i><a target="_" href="/apis/latest/index.html">Scaladoc</a>
</li>
<li>
    <i class="fas fa-fw fa-download mr-2"></i><a href="/download.html">Download</a>
</li>
<li class="side-nav-title">Support</li>
<li>
    <nobr>
        <i class="fab fa-fw fa-jira mr-2"></i><a href="https://issues.apache.org/jira/projects/NLPCRAFT/issues">JIRA</a>
    </nobr>
</li>
<li>
    <nobr>
        <i class="far fa-fw fa-envelope mr-2"></i><a href="https://mail-archives.apache.org/mod_mbox/nlpcraft-dev/">Dev List</a>
    </nobr>
</li>
<li>
    <nobr>
        <i class="fab fa-fw fa-stack-overflow mr-2"></i><a target="so" href="https://stackoverflow.com/questions/ask">Stack Overflow</a>
    </nobr>
</li>
<li>
    <nobr>
        <i class="fab fa-fw fa-github mr-2"></i><a target="github" href="https://github.com/apache/incubator-nlpcraft">GitHub</a>
    </nobr>
</li>
<li>
    <nobr>
        <i class="fab fa-fw fa-gitter mr-2"></i><a target="gitter" href="https://gitter.im/apache-nlpcraft/community">Gitter</a>
    </nobr>
</li>
<li>
    <nobr>
        <i class="fab fa-fw fa-twitter mr-2"></i><a target="twitter" href="https://twitter.com/ApacheNLPCraft">Twitter</a>
    </nobr>
</li>


