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

-->
<project name="Log4j_Kotlin"
         xmlns="http://maven.apache.org/DECORATION/1.4.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd">
  <body>
    <links>
      <item name="Logging Wiki" href="https://cwiki.apache.org/confluence/display/LOGGING/Home"/>
      <item name="Apache" href="https://www.apache.org/"/>
      <item name="Logging Services" href="https://logging.apache.org/"/>
      <item name="GitHub" href="https://github.com/apache/logging-log4j-kotlin"/>
    </links>

    <menu name="Apache Log4j Kotlin" inherit="top" img="icon-home">
      <item name="About" href="/index.html"/>
      <item name="Download" href="/download.html"/>
      <item name="Usage" href="/usage.html"/>
    </menu>

    <menu name="For Contributors" inherit="top" img="icon-pencil">
      <item name="Building Log4j Kotlin from Source" href="/build.html"/>
      <item name="Contributing" href="/contributing.html"/>
    </menu>

    <menu name="Component Reports" inherit="top" img="icon-cog">
      <item name="Log4j Kotlin API" href="log4j-api-kotlin/index.html"/>
      <item name="Log4j Kotlin Samples" href="log4j-api-kotlin-sample/index.html"/>
    </menu>

    <menu name="Project Information" img="icon-info-sign">
      <item name="Dependency Convergence" href="/dependency-convergence.html" />
      <item name="Dependency Management" href="/dependency-management.html" />
      <item name="Project Team" href="/team-list.html" />
      <item name="Mailing Lists" href="/mail-lists.html" />
      <item name="Issue Tracking" href="/issue-tracking.html" />
      <item name="Project License" href="/license.html" />
      <item name="Source Repository" href="/source-repository.html" />
      <item name="Project Summary" href="/project-summary.html" />
    </menu>

    <menu name="Project Reports" img="icon-cog">
      <item name="Changes Report" href="/changes-report.html" />
      <item name="JIRA Report" href="/jira-report.html" />
      <item name="RAT Report" href="/rat-report.html" />
    </menu>
  </body>
</project>