<!DOCTYPE html>
## 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.
##
#parse( "site-macros.vm" )
#set ( $skipGenerationDate = 'true' == $decoration.getCustomValue( 'fluidoSkin.skipGenerationDate' ) )
<!--
 | Generated by #generatedBy()
#if( $docRenderingContext && ( $docRenderingContext.generator || $docRenderingContext.doxiaSource ) ) from##
#**##if( $docRenderingContext.generator ) $docRenderingContext.generator#end##
#**##if( $docRenderingContext.doxiaSource ) $docRenderingContext.doxiaSourcePath#end##
#end
#if ( !$skipGenerationDate ) at $dateFormat.format( $currentDate )#end

 | Rendered using Apache Maven Fluido Skin @project.version@
-->
##
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) lang="$locale.language"#end>
  <head>
    <meta charset="${outputEncoding}" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
## put meta together
    <meta name="generator" content="#generatedBy()" />
#foreach( $author in $authors )
    <meta name="author" content="$author" />
#end
#if ( $documentDate )
    <meta name="date" content="$documentDate" />
#end
    <title>$title</title>
    <link rel="stylesheet" href="$relativePath/css/apache-maven-fluido-@project.version@.min.css" />
    <link rel="stylesheet" href="$relativePath/css/site.css" />
    <link rel="stylesheet" href="$relativePath/css/print.css" media="print" />
#**##prjProfile()
    <script src="$relativePath/js/apache-maven-fluido-@project.version@.min.js"></script>
#**##if( $decoration.body.head )
#*  *#$render.eval( $decoration.body.head )
#**##end
#**##if( $headContent )$headContent#end
#**##googleAnalytics( $decoration.googleAnalyticsAccountId )
#**##flattrHead()
  </head>
#**##set ( $topBarEnabled = 'true' == $decoration.getCustomValue( 'fluidoSkin.topBarEnabled' ) )
#**##if ( $topBarEnabled )
  <body class="topBarEnabled">
#**##else
  <body class="topBarDisabled">
#**##end
#**##forkMeOnGitHub()
##
#**##set ( $sideBarEnabled = 'false' != $decoration.getCustomValue( 'fluidoSkin.sideBarEnabled' ) )
#**##set ( $searchEnabled = $decoration.getCustomChild( 'fluidoSkin.googleSearch' )
             && ( $decoration.getCustomValue( 'fluidoSkin.googleSearch.sitesearch' ) || $project.url ) )
##
#**##if ( $topBarEnabled )
#*  *##set ( $navBarStyle = $decoration.getCustomValue( 'fluidoSkin.navBarStyle', '' ) )
    <header id="topbar" class="navbar navbar-fixed-top $navBarStyle">
      <div class="navbar-inner">
#*    *##if ( $sideBarEnabled )
        <div class="container-fluid">
        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </a>
#*    *##else
#*      *##if ( $decoration.getCustomValue( 'fluidoSkin.topBarContainerStyle' ) )
            <div class="container" style="$decoration.getCustomValue( 'fluidoSkin.topBarContainerStyle' )">
              <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
              </a>
          <nav class="nav-collapse">
#*      *##else
            <div class="container">
              <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
              </a>
          <nav class="nav-collapse">
#*      *##end
#*    *##end
#*    *##if ( $decoration.getCustomChild( 'fluidoSkin.topBarIcon' ) )
#*      *##set ( $topBarIcon = $decoration.getCustomChild( 'fluidoSkin.topBarIcon' ) )
##
#*      *##if ( $topBarIcon.getChild( 'href' ) )
#*        *##set ( $hrf = $topBarIcon.getChild( 'href' ).getValue() )
#*        *##if ( !$decoration.isLink( $hrf ) )
#*          *##set ( $hrf = $PathTool.calculateLink( $hrf, $relativePath ) )
#*          *##set ( $hrf = $hrf.replaceAll( '\\', '/' ) )
#*          *##if ( ( $hrf == '' ) )
#*            *##set ( $hrf = './' )
#*          *##end
#*        *##end
#*        *#<a class="brand" href="$hrf" #if( $topBarIcon.getChild( 'alt' ) ) title="$topBarIcon.getChild( 'alt' ).getValue()"#end>##
##
#*        *##set ( $topBarIconName = $decoration.getCustomValue( 'fluidoSkin.topBarIcon.name', $project.name ) )
##
#*        *##if( $topBarIcon.getChild( 'src' ) )
#*          *##set ( $src = $topBarIcon.getChild( 'src' ).getValue() )
#*          *##if ( !$decoration.isLink( $src ) )
#*            *##set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
#*            *##set ( $src = $src.replaceAll( '\\', '/' ) )
#*          *##end
#*          *##set ( $alt = $decoration.getCustomValue( 'fluidoSkin.topBarIcon.alt', $topBarIconName ) )
#*          *#<img src="$src" alt="$alt" />
#*        *##else
#*          *#$topBarIconName
#*        *##end
##
#*        *#</a>
#*      *##end
#*    *##end
##
##      ## MSKINS-31
#*      *##if( $decoration.body && $decoration.body.menus )
            <ul class="nav">
#*          *##topMenu( $decoration.body.menus )
            </ul>
#*      *##end
##
#*      *##if (!$sideBarEnabled)
          </nav>
          <div class="nav-collapse">
#*      *##end
##
#*      *##if ( $searchEnabled && !$sideBarEnabled )
#*        *##googleSearch(true)
#*      *##end
##
#*      *##if ( !$sideBarEnabled )
#*        *##facebookLike( $sideBarEnabled )
#*        *##followTwitter( $sideBarEnabled )
#*        *##flattrBody( $sideBarEnabled )
#*      *##end
##
##        ## MSKINS-31
#*      *##if( $decoration.body
              && $decoration.body.links
              && $decoration.body.links.size() > 0 )
            <ul class="nav pull-right">
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
                <ul class="dropdown-menu">
#*            *##topLinks( $decoration.body.links )
                </ul>
              </li>
            </ul>
#*      *##end
##
#*      *##if (!$sideBarEnabled)
          </div>
#*      *##end
##
        </div>
      </div>
    </header>
#**##end
##
#**##if ( $sideBarEnabled )
    <div class="container-fluid">
#**##else
    <div class="container">
#**##end
      <header>
        <div id="banner">
          <div class="pull-left">##
#*        *##if( $decoration.bannerLeft )
#*          *##banner( $decoration.bannerLeft "bannerLeft" )
#*        *##else
#*        *### MSKINS-32
            <h1>##
#*          *##if( $project.name && $project.name != '' )
#*            *#$project.name
#*          *##else
#*            *#$project.artifactId
#*          *##end
#*        *#</h1>##
#*        *##end
#*      *#</div>
          <div class="pull-right">#banner( $decoration.bannerRight "bannerRight" )</div>
          <div class="clear"><hr/></div>
        </div>

        <div id="breadcrumbs">
          <ul class="breadcrumb">
#*        *##publishDate( "left" $decoration.publishDate $decoration.version )
#*        *##publishDate( "right" $decoration.publishDate $decoration.version )
##
#*        *### MSITE-44
#*        *##if ( !$topBarEnabled
                && $decoration.body.links
                && $decoration.body.links.size() > 0 )
#*          *##links( $decoration.body.links )
#*        *##end
          </ul>
        </div>
      </header>
##
#*    *##if ( $sideBarEnabled )
#*      *##set ( $leftColumnClass = $decoration.getCustomValue( 'fluidoSkin.leftColumnClass', 'span2' ) )
##
      <div class="row-fluid">
        <header id="leftColumn" class="$leftColumnClass">
          <nav class="well sidebar-nav">
#*      *##publishDate( "navigation-top" $decoration.publishDate $decoration.version )
#*      *##mainMenu( $decoration.body.menus )
#*      *##publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
          </nav>
          <div class="well sidebar-nav">
#*      *##if ( $searchEnabled )
#*        *##googleSearch( false )
#*      *##end
            <hr />
            <div id="poweredBy">
#*        *##facebookLike( $sideBarEnabled )
              <div class="clear"></div>
#*        *##followTwitter( $sideBarEnabled )
              <div class="clear"></div>
#*        *##flattrBody( $sideBarEnabled )
              <div class="clear"></div>
#*        *##builtByLogo( $decoration.poweredBy )
            </div>
          </div>
        </header>
#*    *##end
##
#*    *##set ( $bodyColumnClass = $decoration.getCustomValue( 'fluidoSkin.bodyColumnClass', 'span10' ) )
##
        <main id="bodyColumn" #if ( $sideBarEnabled ) class="$bodyColumnClass" #end>
#*      *##if ( $title && $title.endsWith( "Project License" ) )
#*        *#$bodyContent
#*      *##else
#*        *##if ( 'true' == $decoration.getCustomValue( 'fluidoSkin.sourceLineNumbersEnabled' ) )
#*          *##set ( $sourceStyle = "prettyprint linenums" )
#*        *##else
#*          *##set ( $sourceStyle = "prettyprint" )
#*        *##end
##
#*        *#$bodyContent.replaceAll( "<div class=${esc.q}source${esc.q}>(\r?\n)?<pre>", "<div class=${esc.q}source${esc.q}><pre class=${esc.q}$sourceStyle${esc.q}>" ).replaceAll( "class=${esc.q}bodyTable${esc.q}", "class=${esc.q}table table-striped${esc.q}" )
#*      *##end
        </main>
#*    *##if ( $sideBarEnabled )
      </div>
#*    *##end
    </div>
    <hr/>
    <footer>
#*  *##if ( $sideBarEnabled )
      <div class="container-fluid">
#*  *##else
      <div class="container">
#*  *##end
#*    *##if ( $sideBarEnabled )
        <div class="row-fluid">
#*    *##else
        <div class="row">
#*    *##end
#*    *##if ( $decoration.body.footer )
#*      *#$render.eval( $decoration.body.footer )
#*    *##else
#*      *##if ( $decoration.getCustomChild( 'fluidoSkin.copyrightClass' ) )
#*        *##set ( $copyrightClass = ' class="' + $decoration.getCustomValue( 'fluidoSkin.copyrightClass' ) + '"' )
#*      *##end
            <p$!copyrightClass>Copyright &#169;#copyright().#publishDate( "bottom" $decoration.publishDate $decoration.version )</p>
#*    *##end
        </div>
##
#*    *##if ( !$sideBarEnabled )
        <p id="poweredBy" class="pull-right">##
#*      *##builtByLogo( $decoration.poweredBy )
#*    *#</p>
#*    *##end
##
#*    *##ohloh()
      </div>
    </footer>
#**##piwik()
  </body>
</html>
