---
# 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.

# layout for most website pages, inheriting base for the menu bar, and providing a main column of content and a menu column
# (not used for the landing page, and not used for the guide)
#
# menu_customizations can be used, including force_inactive to prevent highlighting
layout: website-base
---
<div class="container" id="main_container">
    <div class="row">
        <div class="col-md-9" id="content_container">
            <div id="page_notes"></div>
            <h1>{{ page.title }}</h1>
            {{ content }}
        </div>

        <div class="col-md-3">
            {% include sidemenu.html %}
        </div>
    </div>
</div>

{% include footer.html %}
