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

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

    <custom>
        <fluidoSkin>
            <project>Apache Atlas</project>
            <topBarEnabled>true</topBarEnabled>
            <topBarContainerStyle>width: 68%;</topBarContainerStyle>
            <sideBarEnabled>false</sideBarEnabled>
            <leftColumnClass>span2</leftColumnClass>
            <bodyColumnClass>span10</bodyColumnClass>
            <googleSearch>
                <sitesearch>http://atlas.incubator.apache.org</sitesearch>
            </googleSearch>
            <facebookLike/>
            <googlePlusOne/>
        </fluidoSkin>
    </custom>

    <bannerLeft>
        <name>Apache Atlas</name>
        <src>./images/atlas-logo.png</src>
        <href>http://atlas.incubator.apache.org</href>
        <width>200px</width>
        <height>45px</height>
    </bannerLeft>

    <bannerRight>
        <name>Apache Incubator</name>
        <src>./images/apache-incubator-logo.png</src>
        <href>http://incubator.apache.org</href>
    </bannerRight>

    <publishDate position="right"/>
    <version position="right"/>

    <body>
        <head>
            <script type="text/javascript">
                $( document ).ready( function() { $( '.carousel' ).carousel( { interval: 3500 } ) } );
            </script>
        </head>

        <breadcrumbs>
            <item name="Apache" href="http://www.apache.org"/>
            <item name="Atlas" title="Apache Atlas" href="index.html"/>
        </breadcrumbs>

        <menu name="Atlas">
            <item name="About" href="index.html"/>
            <item name="Wiki" href="https://cwiki.apache.org/confluence/display/ATLAS"/>
            <item name="News" href="https://cwiki.apache.org/confluence/display/ATLAS"/>
            <item name="Git" href="https://git-wip-us.apache.org/repos/asf/incubator-atlas.git" />
            <item name="Jira" href="https://issues.apache.org/jira/browse/ATLAS" />
            <item name="Powered by" href="https://cwiki.apache.org/confluence/display/ATLAS/PoweredBy" />
            <item name="Blog" href="http://blogs.apache.org/atlas/" />
        </menu>

        <menu name="Project Information">
            <item name="Summary" href="project-info.html" />
            <item name="Mailing Lists" href="mail-lists.html" />
            <item name="IRC" href="http://webchat.freenode.net?channels=apacheatlas&amp;uio=d4" />
            <item name="Team" href="team-list.html" />
            <item name="Issue Tracking" href="issue-tracking.html" />
            <item name="Source Repository" href="source-repository.html" />
            <item name="License" href="license.html" />
        </menu>

        <menu name="Releases">
            <item name="0.8-incubating"
                  href="http://www.apache.org/dyn/closer.cgi/incubator/atlas/0.8.0-incubating/"/>
            <item name="0.7.1-incubating"
                  href="http://archive.apache.org/dist/incubator/atlas/0.7.1-incubating/"/>
            <item name="0.7-incubating"
                  href="http://archive.apache.org/dist/incubator/atlas/0.7.0-incubating/"/>
            <item name="0.6-incubating"
                  href="http://archive.apache.org/dist/incubator/atlas/0.6.0-incubating/"/>
            <item name="0.5-incubating"
                  href="http://archive.apache.org/dist/incubator/atlas/0.5.0-incubating/"/>
        </menu>

        <menu name="Documentation">
            <item name="0.8-incubating" href="./0.8.0-incubating/index.html"/>
            <item name="0.7.1-incubating" href="./0.7.1-incubating/index.html"/>
            <item name="0.7-incubating" href="./0.7.0-incubating/index.html"/>
            <item name="0.6-incubating" href="./0.6.0-incubating/index.html"/>
            <item name="0.5-incubating" href="./0.5.0-incubating/index.html"/>
        </menu>

        <menu name="ASF">
            <item name="How Apache Works" href="http://www.apache.org/foundation/how-it-works.html"/>
            <item name="Foundation" href="http://www.apache.org/foundation/"/>
            <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
            <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
        </menu>

        <footer>
            Â© 2011-2012 The Apache Software Foundation. Apache Atlas, Atlas, Apache,
            the Apache feather logo, and the Apache Metadata and Governance project logo are
            trademarks of The Apache Software Foundation.
        </footer>
    </body>
</project>
