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

<!DOCTYPE html>
<html>

  {% include head.html %}

  <body>

    {% include home_header.html %}
<main id="main" >
  <div >
    <div id="zero" class=" main home" >

    <div class="page-content">
      <div class="wrapper">
        {{ content }}
      </div>
    </div>

    </div>
  </div>
</main>

    {% include footer.html %}

  <script src="/assets/js/jquery-1.9.1.min.js"></script> 
  <script src="/assets/js/bootstrap.min.js"></script> 
  <script src="/assets/js/main.js"></script>
  </body>

</html>
