---
license: |
    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: post
---

<section>
    <div class="container timeline mt-n3">
        <div class="row">
            <div class="col-12">
            <br>
            </div>
        </div>
    {% for pub in site.publications reversed %}
        <div class="row">
            <div class="col-12 pl-0 mb-2">
                <i class="fas fa-caret-right"></i>
                {{pub.year}} - {{pub.month}} - {{pub.day}}
            </div>
        </div>
        <div class="row">
            <div class="col-12 ml-2 mb-5">
                <h4>
                    {{pub.subtitle}}
                </h4>
                <p>{{pub.link-name}}</p>

                <p><strong>Authors: </strong>{{pub.authors}}</p>
                <a class="btn btn-outline-secondary" href="{{pub.url | absolute_url}}">
                    <i class="fas fa-glasses"></i> Read more...
                </a>
                {% if pub.link-external == false %}
                <a class="btn btn-outline-info" href="{{ pub.link-paper | absolute_url }}">
                    <i class="fas fa-download"></i> Download
                </a>
                {% else %}
                <a class="btn btn-outline-info" href="{{ pub.link-paper}}">
                    <i class="fas fa-external-link-alt"></i> External Link
                </a>
                {% endif %}
            </div>
        </div>
    {% endfor %}
    </div>
</section>




