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

<!--[if lt IE 7]>
<html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>
<html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>
<html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js"> <!--<![endif]-->
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="shortcut icon" href="/console/themes/theme0/images/favicon.png">
    <link rel="stylesheet" href="/console/themes/theme0/css/web-fonts/open_sans.css" type="text/css">
    <link rel="stylesheet" href="/console/themes/theme0/css/bootstrap-3.2.0/bootstrap.min.css" type="text/css">
    <link rel="stylesheet" href="/console/themes/theme0/css/custom.css" type="text/css">
    <link rel="stylesheet" href="/console/themes/theme0/css/font-awesome-4.2.0/font-awesome.min.css" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <!--[if lte IE 8]>
    <script language="javascript" type="text/javascript" src="/console/themes/theme0/ui/js/excanvas.min.js"></script>
    <![endif]-->
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
    <div class="container-fluid">
        <!-- toggle navigation -->
        <div class="navbar-header main-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span
                    class="icon-bar"></span><span class="icon-bar"></span>
            </button>
            <a class="navbar-brand logo" href="/console"><img src="/console/themes/theme0/images/stratos-logo.png"></a>
        </div>

    </div>
</nav>
<div class="container-fluid">
    <div class="row title">
        <div class="title-main text-center">
            <h1>Oooops - 500</h1>
        </div>
    </div>
    <div class="container content">
        <div class="row text-center error-page">

            <div class="col-md-12">
                <div class="alert alert-danger alert-dismissable">

                    <strong>Looks like something went wrong on server end..!</strong>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->

<script type="text/javascript" src="/console/themes/theme0/js/bootstrap-3.2.0/bootstrap.min.js"></script>
</body>
</html>