<?xml version="1.0" encoding="UTF-8"?>

<!--
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 xmlns="http://maven.apache.org/DECORATION/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">

  <bannerLeft>
    <name>${project.name}</name>
    <src>https://maven.apache.org/images/apache-maven-project.png</src>
    <href>https://www.apache.org/</href>
  </bannerLeft>

  <bannerRight>
    <src>https://maven.apache.org/images/maven-logo-black-on-white.png</src>
    <href>https://maven.apache.org/</href>
  </bannerRight>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.7</version>
  </skin>

  <edit>${project.scm.url}</edit>
  <googleAnalyticsAccountId>UA-140879-1</googleAnalyticsAccountId>

  <custom>
    <fluidoSkin>
      <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
      <twitter>
        <user>ASFMavenProject</user>
        <showUser>true</showUser>
      </twitter>
      <googleSearch />
    </fluidoSkin>
  </custom>

  <publishDate format="yyyy-MM-dd" position="right" />
  <version position="right" />

  <body>

    <!-- Breadcrumbs that every project will inherit -->
    <breadcrumbs>
      <item name="Apache" href="https://www.apache.org/" />
      <item name="Maven"  href="https://maven.apache.org/index.html" />
    </breadcrumbs>

    <!-- Menus that every project will inherit -->
    <menu ref="reports" inherit="bottom" />

    <menu name="Maven Projects" inherit="bottom">
      <item name="Archetype"         href="https://maven.apache.org/archetype/index.html" />
      <item name="Artifact Resolver" href="https://maven.apache.org/resolver/index.html" />
      <item name="Doxia"             href="https://maven.apache.org/doxia/index.html" />
      <item name="JXR"               href="https://maven.apache.org/jxr/index.html" />
      <item name="Maven"             href="https://maven.apache.org/ref/current" />
      <item name="Parent POMs"       href="https://maven.apache.org/pom/index.html" />
      <item name="Plugins"           href="https://maven.apache.org/plugins/index.html" />
      <item name="Plugin Testing"    href="https://maven.apache.org/plugin-testing/index.html" />
      <item name="Plugin Tools"      href="https://maven.apache.org/plugin-tools/index.html" />
      <item name="Resource Bundles"  href="https://maven.apache.org/apache-resource-bundles/index.html" />
      <item name="SCM"               href="https://maven.apache.org/scm/index.html" />
      <item name="Shared Components" href="https://maven.apache.org/shared/index.html" />
      <item name="Skins"             href="https://maven.apache.org/skins/index.html" />
      <item name="Surefire"          href="https://maven.apache.org/surefire/index.html" />
      <item name="Wagon"             href="https://maven.apache.org/wagon/index.html" />
    </menu>
    <menu name="ASF" inherit="bottom">
      <item name="How Apache Works"  href="https://www.apache.org/foundation/how-it-works.html"/> 
      <item name="Foundation"        href="https://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="https://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks"            href="https://www.apache.org/foundation/thanks.html"/>
    </menu>

  </body>
</project>
