    <div class="footer-tools">
        {{ with .File }}
            <a title="Improve this document, receive free virtual hugs &hearts;" href="https://github.com/apache/camel-website/edit/master/content/{{ .Path | replaceRE "^/" "" }}">Edit this Page</a>
        {{ end }}
        <a href="#top" title="Reach the top of the page">Back to top</a>
    </div>
    <footer>
        <div class="footer">
            <figure class="logo">
                <img class="logo" src="/_/img/logo-d.svg" alt="Apache Camel Logo" aria-label="white silhouette of a camel in front of a sand dune">
            </figure>

            <dl>
                <dt>Overview</dt>
                <dd><a href="/blog/">Blog</a></dd>
                <dd><a href="/components/latest/">Components</a></dd>
                <dd><a href="/download/">Download</a></dd>
                <dd><a href="/manual/latest/getting-started.html">Getting started</a></dd>
                <dd><a href="/manual/latest/faq/index.html">FAQ</a></dd>
            </dl>

            <dl>
                <dt>Community</dt>
                <dd><a href="https://www.apache.org/foundation/policies/conduct">Code of conduct</a></d>
                <dd><a href="/community/support/">Support</a></dd>
                <dd><a href="/manual/latest/contributing.html">Contributing</a></dd>
                <dd><a href="/community/user-stories/">User stories</a></dd>
                <dd><a href="/community/articles/">Articles</a></dd>
                <dd><a href="/community/books/">Books</a></dd>
                <dd><a href="/community/team/">Team</a></dd>
            </dl>

            <dl>
                <dt>About</dt>
                <dd><a href="/acknowledgments/">Acknowledgments</a></d>
                <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/events/current-event.html" title="Apache Events">Apache Events</a></dd>
                <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/licenses/" title="License">License</a></dd>
                <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/security/" title="Security">Security</a></dd>
                <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></dd>
                <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></dd>
            </dl>

            <p>
                &copy; 2004-{{ now.Format "2006" }} The <a href="https://apache.org">Apache Software Foundation</a>.<br>
                Apache Camel, Camel, Apache, the Apache feather logo, and the Apache Camel project logo are trademarks of
                The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of
                their respective owners.
                {{ if and (not .Page.Section) (eq (getenv "CAMEL_ENV") "netlify") }}
                    <a href="https://netlify.com">This site is powered by Netlify</a>
                {{ end }}
            </p>

        </div>
    </footer>
    <script src="{{ path.Join "_" (index .Site.Data "rev-manifest" "js/vendor/algoliasearch.js") | relURL }}"></script>
    <script src="{{ path.Join "_" (index .Site.Data "rev-manifest" "js/site.js") | relURL }}"></script>
    <script async src="{{ path.Join "_" (index .Site.Data "rev-manifest" "js/vendor/highlight.js") | relURL }}"></script>
    <script async src="{{ path.Join "_" (index .Site.Data "rev-manifest" "js/vendor/svg4everybody.js") | relURL }}"></script>
    {{ partial "seo/main" . }}

</body>
</html>
