<?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 name="Apache Whisker&trade;">
  <bannerRight>
    <title>The Apache Software Foundation</title>
    <name>The Apache Software Foundation</name>
    <src>http://www.apache.org/images/asf_logo_wide.jpg</src>
    <href>http://www.apache.org/</href>
  </bannerRight>

  <poweredBy>
      <logo name="Maven"
            href="http://maven.apache.org/"
            img="http://maven.apache.org/images/logos/maven-feather.png"/>

  </poweredBy>

  <body>
    <head>
        <link
            href='http://fonts.googleapis.com/css?family=Mate+SC'
            rel='stylesheet'
            type='text/css'/>
    </head>
    <breadcrumbs>
      <item name="Apache" href="http://www.apache.org/"/>
      <item name="Creadur" href="http://creadur.apache.org/"/>
      <item name="Whisker" href="http://creadur.apache.org/whisker/"/>
    </breadcrumbs>

    <menu name='Apache Whisker&trade;' inherit="bottom">
       <item name='Introducing Whisker' href='index.html'/>
       <item name='Meta Data' href='meta-data.html'/>
       <item name='Maven Plugin' href='apache-whisker-maven-plugin/index.html'/>
       <item name='Command Line' href='apache-whisker-cli/index.html'/>
       <item name='Javadocs' href='apidocs/index.html'/>
       <item name='Source Cross-ref' href='xref/index.html'/>
       <item name="FAQ" href="faq.html"/>
    </menu>

    <menu name='Examples'>
        <item name="In 5 Minutes" href="examples/in-5-mins.html"/>
        <item name="3rd Party (Individual)" href="examples/3rd-party-individual.html"/>
        <item name="3rd Party (Corporate)" href="examples/3rd-party-corporate.html"/>
        <item name="3rd Party (Group)" href="examples/3rd-party-group.html"/>
        <item name="License Family" href="examples/license-family.html"/>
        <item name="Copyright Notices" href="examples/copyright-notices.html"/>
    </menu>

    <menu name='Sample Meta Data'>
        <item name="Apache James" href="examples/james.xml"/>
        <item name="Public Domain" href="examples/public-domain.xml"/>
        <item name="Template License" href="examples/template-license.xml"/>
        <item name='License Family' href='examples/license-family-sample.xml'/>
        <item name="3rd Party (Individual)" href="examples/3rd-party-individual-sample.xml"/>
        <item name="3rd Party (Corporate)" href="examples/3rd-party-corporate-sample.xml"/>
        <item name="3rd Party (Group)" href="examples/3rd-party-group-sample.xml"/>
        <item name="MIT License" href="examples/in-5-mins-sample.xml"/>
        <item name='Copyright Notices' href='examples/copyright-notices-sample.xml'/>
    </menu>

    <menu name="Apache Creadur &trade;" inherit="bottom">
		<item name='Creadur Project Home' href="http://creadur.apache.org"/>
		<item name='Apache Rat' href="http://creadur.apache.org/rat"/>
		<item name='Apache Tentacles' href="http://creadur.apache.org/tentacles"/>
		<item name='Security' href='http://www.apache.org/security/'/>
		<item name='License' href='http://www.apache.org/licenses/'/>
		<item name='Sponsorship' href='http://www.apache.org/foundation/sponsorship.html'/>
		<item name='Thanks' href='http://www.apache.org/foundation/thanks.html'/>
	</menu>

    <menu name="The Apache Software Foundation" inherit="bottom">
        <item name='About the Foundation'
            href="http://www.apache.org/foundation"/>
        <item name='The projects'
            href="http://projects.apache.org"/>
        <item name='The people'
            href="http://people.apache.org"/>
        <item name='How we work'
            href='http://www.apache.org/foundation/how-it-works.html'/>
        <item name='Our history'
            href='http://www.apache.org/foundation/how-it-works.html#history'/>
        <item name='News'
            href='http://blogs.apache.org/foundation/'/>
    </menu>

    <menu name="Contribute" inherit="bottom">
      <item name="Get Involved" href='http://www.apache.org/foundation/getinvolved.html'/>
    </menu>

    <menu name="Committer Info" inherit="bottom">
      <item name="Committers' FAQ" href='http://www.apache.org/dev/committers.html'/>
      <item name='New Committers Guide' href='http://www.apache.org/dev/new-committers-guide.html'/>
      <item name='Plant Apache' href='http://planet.apache.org/committers/'/>
      <item name='Community' href='http://community.apache.org/'/>
      <item name='Legal' href='http://www.apache.org/legal/'/>
      <item name='Branding' href='http://www.apache.org/foundation/marks/'/>
      <item name='Media Relations' href='http://www.apache.org/press/'/>
    </menu>


    <menu ref='reports'/>

    <footer>Copyright &#169; 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
      Apache Creadur, Creadur, Apache Rat, Apache Tentacles, Apache Whisker, Apache and the Apache feather logo are trademarks
      of The Apache Software Foundation.
      All other marks mentioned may be trademarks or registered trademarks of their respective owners.
      This is user documentation, not legal advice.
      </footer>

  </body>

</project>