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

{% extends "main.html" %}

{% block content %}
<h1>Page not found</h1>
<img src="https://media.giphy.com/media/PibODdY9C5xiKzmRhW/giphy.gif" alt="Page not found">
<p>Oops! Looks like you took a wrong turn.</p>
<p>But don't worry, we're here to help:</p>
<ul>
    <li><a href="/">🔙 Return to docs main page</a></li>
    <li><a href="https://github.com/apache/streampipes/issues/new/choose">🐛 Report an issue (e.g., broken links) with our documentation</a></li>
</ul>
</body>
{% endblock %}