/*!**************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js!./runestone/common/css/runestone-custom-sphinx-bootstrap.css ***!
  \**************************************************************************************************************/
/* Variables holding theme colors */
:root {
    --background: #ffffff;
    --outerBackground: #eeeeee;
    --links: #0645ad;
    --bodyFont: #000000;
    --tooltip: #ffffff;
    --grayToWhite: #333333;
    --navbar: #f8f8f8;
    --navbarFont: #707070;
    --navbarFontHover: #000000;
    --alerts: #d9edf7;
    --completionButton: #ffaa2b;
    --completionButtonHover: #ff9f19;
    --admonition: #fcf8e3;
    --admonitionBorder: #fbeed5;
    --codeButtons: #474949;
    --codeButtonsBorder: #474949;
    --dangerAlerts: #f2dede;
    --successAlerts: #dff0d8;
    --contentWidthRegular: 660px;
    --contentWidthWide: 1060px;
    --componentBgColor: #f0f8ff;
    --componentBorderColor: #000000;
    --questionBgColor: rgb(217, 233, 235);
}

[data-theme="dark"] {
    --background: #2c2f33;
    --outerBackground: #23272a;
    --links: #7289da;
    --bodyFont: #99aab5;
    --tooltip: #000000;
    --grayToWhite: #ffffff;
    --navbar: #3d3d3d;
    --navbarFont: #ffffff;
    --navbarFontHover: #d6d6d6;
    --alerts: #714082;
    --completionButton: #650087;
    --completionButtonHover: #560073;
    --admonition: #3d3d3d;
    --admonitionBorder: #262626;
    --codeButtons: #7289da;
    --codeButtonsBorder: #ffffff;
    --dangerAlerts: #8c2626;
    --successAlerts: #217300;
    --componentBgColor: #07467d;
    --componentBorderColor: #939090;
    --questionBgColor: rgb(23, 85, 93);    
}

/* custom modification of basic.css for color-contrast (AA compliant) */
td.linenos pre {
    color: #6b6b6b;
}

/* custom modification of prettify.css for color-contrast (AA compliant) */
.str {
    color: #006b00;
}

/* custom modification of parsons.css for color-contrast (AA compliant) */
.parsons .block {
    background-color: #fafafa;
}

/* custom modification of pygments.css for color-contrast (AA compliant) */
.highlight .c1 {
    color: #376a7b;
}

.highlight .nn {
    color: #0f6c95;
}

.highlight .gp {
    color: #a14c08;
}

.highlight .si {
    color: #3c773d;
}

.highlight .nc {
    color: #0b719d;
}

/* `Search` functionality's result custom modification for color-contrast (AA compliant) */
ul.search li div.context {
    color: #6b6b6b;
}

span.highlighted {
    color: #4d4d4d;
}

/* ActiveCode gutter custom modification for color-contrast (AA compliant) */

.CodeMirror-linenumber {
    color: #6b6b6b;
}

.alert-warning {
    background-color: var(--admonition);
    border-color: var(--admonitionBorder);
}

/* Python code output custom modification for color-contrast (AA compliant) */
div.ExecutionVisualizer table#pyCodeOutput .lineNo {
    color: #6b6b6b;
}

/* Runestone custom modifications */

body {
    counter-reset: rscomponent;
    padding-top: 60px;
    background-color: var(--outerBackground);
}

pre {
    margin: 0 0 1em;
}

h5 {
    font-weight: bold;
    padding: 10px 0;
}

/* table-of-contents related styles for color-contrast (AA compliant) */
#table-of-contents a {
    color: var(--links);
}

#table-of-contents a:hover {
    color: var(--links);
    text-decoration: underline;
}

#table-of-contents.section {
    font-size: 16px;
}

/* navbar-brand color contrast (AA compliant) */
.navbar-default {
    background-color: var(--navbar);
}

.navbar-default .navbar-nav > li {
    color: var(--navbarFont);
}

.navbar-default .navbar-nav > li > a {
    color: var(--navbarFont);
}

.navbar-default .navbar-nav > li > a:hover {
    color: var(--navbarFontHover);
}

.navbar-default .navbar-brand {
    color: var(--navbarFont);
}

/* acknowledgement related styles for color-contrast (AA compliant) */
.toctree-wrapper {
    font-size: 16px;
}

.toctree-wrapper a {
    color: var(--links);
}

.toctree-wrapper a:hover {
    color: var(--links);
    text-decoration: underline;
}

/* index and search related styles for color-contrast (AA compliant) */
#index-and-search.section {
    font-size: 16px;
}

#index-and-search.section a {
    color: var(--links);
}

#index-and-search.section a:hover {
    color: var(--links);
    text-decoration: underline;
}

/* custom style for `a` tag for color-contrast (AA compliant) */

a {
    color: var(--links);
}

/* navbar and menu related styles */
@media (max-width: 768px) {
    /* Remove top padding when top navbar goes collapsed in narrow viewports */
    body {
        padding-top: 0;
    }

    .navbar-fixed-top {
        position: static;
    }
}

@media (min-width: 768px) {
    /* when navbar is collapsed we don't want any vertical dividers taking up space */
    .navbar .divider-vertical {
        margin: 0 3px;
        border-left: 1px solid #f2f2f2;
    }

    .navbar-fixed-top .container {
        padding: 0;
    }
}

div.container {
    background-color: var(--background);
}

.container {
    padding-left: 10px;
    padding-right: 10px;
}

.runestone {
    clear: both;
    background-color: var(--componentBgColor);
    padding: 10px;
    border-style: solid;
    border-color: var(--componentBorderColor);
    border-radius: 10px;
    margin-bottom: 20px;
    margin-top: 20px;
    }

/* Sets width of content "column" */
#main-content section > *:not(section) {
    max-width: var(--contentWidthRegular);
    margin-left: auto;
    margin-right: auto;
    
}

/* Handle content in nested sections by allowing them to grow*/
#main-content section > section,                
/* And then make sure a few items are wider by default */
#main-content section > .runestone.ac_section,
#main-content section > .runestone.codelens,
#main-content section > .question,
#main-content section > .runestone.parsons-container,
#main-content section > .runestone.parsons-problems,
#main-content section > .codelens,
#main-content section > .timedAssessment
{
    max-width: var(--contentWidthWide);
    margin-left: auto;
    margin-right: auto;
}

/* Allow individual elements to request being larger */
#main-content section > .full-width {
    max-width: var(--contentWidthWide);
}

.container section > img {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

.container-fluid > .navbar-collapse,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container > .navbar-header {
    margin-left: 0;
    margin-right: 0;
}

.navbar > .container .navbar-brand {
    margin-left: 0;
}

.navbar > .container {
    background-color: var(--navbar);
}

.navbar-toggle {
    margin-right: 0px;
}

.footer > .container {
    background-color: var(--outerBackground);
}

.footer > .container p > a {
    color: var(--links);
}

.brand-logo {
    float: left;
    display: block;
    margin-top: 4px;
}

.brand-logo img {
    height: 40px;
}

.social-menu {
    width: 220px;
    padding: 10px 10px 15px 20px;
}

.fb-like {
    margin-top: 7px;
}

.fb_iframe_widget span,
.fb_iframe_widget iframe {
    height: 20px !important;
    width: 82px !important;
}

.twitter-follow-button {
    margin-top: 10px;
}

.gittip {
    margin-top: 8px;
}

.gittip-button {
    margin-bottom: -6px;
}

.dropdown-menu > li > span {
    display: block;
    padding: 3px 20px;
    clear: both;
    font-weight: bold;
    line-height: 20px;
    color: var(--grayToWhite);
    white-space: nowrap;
}

.dropdown-menu > li > a {
    color: var(--grayToWhite);
}

.loggedinuser {
    font-weight: bold;
}

/* end navbar and menu related styles */

.CodeMirror {
    margin: 0 0 1em 0;
    background-color: var(--background);
    height: auto;
    clear: both;
}

.CodeMirror-scroll {
    /* this allows CM elements to be resized to (almost) any
     * height while still relying on max-height (which keeps
     * the CM editors to no more than the size needed
     * unless resized) */
    max-height: 60em;
    min-width: 30em;
}

.ac_section .CodeMirror pre {
    -moz-border-radius: 0;
    -webkit-border-radius: 0;
    -o-border-radius: 0;
    border-radius: 0;
    border-width: 0;
    margin: 0;
    padding: 0;
    background: transparent;
    font-family: Monaco, Courier New, monospace;
    font-size: inherit;
    padding: 0;
    margin: 0;
    white-space: pre;
    word-wrap: normal;
}

button.btn,
btn.btn-sm,
input[type="submit"].btn.btn-sm,
input[type="button"].btn.btn-sm {
    font-size: 1em;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}

.btn {
    margin: 5px;
}

.btn.disabled {
    /* needed in Bootstrap 3 to allow tooltips on disabled buttons */
    pointer-events: auto;
}

.btn-default,
.btn-default.disabled,
.btn-default[disabled],
.btn-default.disabled:hover,
.btn-default[disabled]:hover {
    color: #ffffff;
    background-color: var(--codeButtons);
    border-color: var(codeButtonsBorder);
}

.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active {
    background-color: #3a3c3c;
    border-color: #2e2f2f;
    color: #ffffff;
}

input[type="radio"],
input[type="checkbox"] {
    margin-right: 5px;
}

.tooltip {
    z-index: 2000 !important;
}

.tooltip.in {
    opacity: 0.8;
    filter: alpha(opacity=80);
}

h2 {
    margin-top: 20px;
}

.alert form {
    margin-bottom: 0;
}

/* default bookstrap alert color is hard to read (low contrast). */
.alert {
    color: var(--grayToWhite);
    padding: 10px;
}

.alert-info {
    background-color: var(--alerts);
}

.alert-danger {
    background-color: var(--dangerAlerts);
}

/* override the color styles applied by Skulpt to the unittest results divs */
.unittest-results.alert-danger {
    background-color: var(--dangerAlerts) !important;
}

.unittest-results.alert-success {
    background-color: var(--successAlerts) !important;
}

.alert label {
    font-weight: normal;
}

/*
Missing brackets
================
The default styling from Sphinx's ``basic.css`` doesn't style multiple references to the same reference with brackets. Here's the relevant snippet of CSS:

.. code-block:: CSS
    :number-lines:

    a.brackets:before,
    span.brackets > a:before{
        content: "[";
    }

    a.brackets:after,
    span.brackets > a:after {
        content: "]";
    }

The HTML for a footnote reference is:

.. code-block:: HTML
    :number-lines:

    <a class="footnote-reference brackets" href="#assembled" id="id1">2</a>

The HTML for a typical footnote is:

.. code-block:: HTML
    :number-lines:

    <dl class="footnote brackets">
        <dt class="label" id="xxx">
            <span class="brackets">
                <a class="fn-backref" href="#id2">1</a>
            </span>
        </dt>
        <dd>Omitted this...</dd>
    </dl>

The HTML for a footnote referenced multiple times is:

.. code-block:: HTML
    :number-lines:

    <dl class="footnote brackets">
        <dt class="label" id="xxx">
            <span class="brackets">1</span>
            <span class="fn-backref">
                (<a href="#id1">1</a>,<a href="#id2">2</a>,<a href="#id3">3</a>)
            </span>
        </dt>
        <dd>Omitted this...</dd>
    </dl>

However, there's no (current) CSS selector that will add a ``content`` to the multiply-referenced footnote without adding an additional ``content`` to the typical footnote: we want to select ``dt.label > span.brackets > text-only content`` or ``dt.label > span.brackets > :not(:has a)`` (see the unsupported `:has selector <https://css-tricks.com/did-you-know-about-the-has-css-selector/>`_. So, I see no solution for this (outside JS).


Incorrect color
===============
Second, the Bootstrap theme (v3.4.1) contains the following CSS, from ``node_modules/bootstrap/dist/css/less/labels.less``:

.. code-block:: CSS
    :number-lines:

    .label {
        display: inline;
        padding: .2em .6em .3em;
        font-size: 75%;
        font-weight: 700;
        line-height: 1;
        color: @label-color;
        text-align: center;
        white-space: nowrap;
        vertical-align: baseline;
        border-radius: .25em;

        ...more here omitted...
    }

ALL this therefore gets applied to footnotes, since they have the ``label`` class. Because the ``@label-color`` is white, this CSS makes the reference invisible against the default (light mode) white background. I like the rest of the styling changes (even though they differ from the standard Sphinx settings), so only the color is changed.
*/
dt.label > span.brackets:not(span.brackets > a),
dt.label > span.fn-backref:not(span.fn-backref > a) {
    color: black;
}

/* These admonition styles styles are copied from the Bootstrap .alert classes.
 Most of the !important declarations are to override the Sphinx basic.css styles */
.admonition {
    padding: 8px 35px 8px 14px !important;
    margin-bottom: 20px !important;
    margin-top: 20px !important;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
    background-color: var(--admonition);
    border: 1px solid #fbeed5;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;
}

/* .alert-danger */
.admonition.caution {
    color: #a33f3e;
    background-color: #f2dede;
    border-color: #eed3d7;
}

/* .alert-info */
.admonition.tip,
.admonition.note {
    color: #333;
    background-color: #d9edf7;
    border-color: #bce8f1;
}

/* from web2py.css */
div.flash {
    font-weight: bold;
    position: fixed;
    padding: 10px;
    top: 55px;
    right: 45px;
    opacity: 0.95;
    margin: 0 0 10px 10px;
    vertical-align: middle;
    cursor: pointer;
    color: #ffffff;
    background-color: #000;
    border: 2px solid #fff;
    border-radius: 8px;
    -moz-border-radius: 8px;
    -webkit-border-radius: 8px;
    background-image: -webkit-linear-gradient(top, #222, #000);
    background-image: -o-linear-gradient(top, #222, #000);
    background-image: -moz-linear-gradient(90deg, #222, #000);
    background-image: linear-gradient(top, #222, #000);
    background-repeat: repeat-x;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    z-index: 2000;
}

/* Styles for the login, registration, and Janrain forms */
#web2py_user_form {
    margin-top: 10px;
}

#web2py_user_form form {
    float: left;
    margin-right: 150px;
    padding-top: 3px;
}

#web2py_user_form td {
    padding-bottom: 15px;
}

#web2py_user_form td.w2p_fw {
    width: 299px;
}

#auth-actions {
    margin-top: 50px;
}

#sign_in_text td {
    font-size: 17px;
    color: #333;
    font-family: "lucida grande", Verdana, sans-serif;
    padding-bottom: 13px;
}

#auth_user_remember {
    margin-top: -20px;
}

/* End login, registration, Janrain styles */

/* end-of-chapter exercises styles */
#exercises > ol > li,
#programming-exercises > ol > li {
    margin-bottom: 30px;
}

#exercises > ol > li:nth-child(even),
#programming-exercises > ol > li:nth-child(even) {
    padding: 1.2em 1.4em;
    background: #faf7df;
    border: 1px solid #fbeed5;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;
}

/* End chapter exercises styles */

/* Modal dialog styles (scratch activecode, compare me, etc) */
.scratch-ac-modal {
    width: 90%;
}

.compare-modal .progress {
    margin-bottom: 0;
}

.compare-me-progress {
    width: 100%;
}

.compare-me-progress .progress-bar,
.unittest-results-progress .progress-bar {
    color: #333;
}

.modal-body {
    background-color: var(--background);
}

.modal-header {
    background-color: var(--background);
}

.unittest-results-progress {
    width: 25%;
}

.compare-modal {
    width: 350px;
}

.compare-modal table {
    border-collapse: separate;
    border-spacing: 10px 5px;
}

.codelens-modal {
    /* we set some custom position styles so that the modal doesn't obscure the codelens visualizer */
    top: 20%;
    right: 20%;
    left: auto;
    bottom: auto;
}

@media (max-width: 768px) {
    /* remove any custom position styles when the screen is small (mobile devices)
    to prevent the modal from being partially off the screen */
    .codelens-modal {
        top: 0 !important;
        right: 0 !important;
        bottom: 0 !important;
        left: 0 !important;
    }
}

.codelens-modal > .modal-dialog {
    width: 400px;
}

/* End modal dialog styles */

.footnote.table {
    width: auto;
    margin-bottom: 10px;
}

.footnote.table td.label {
    padding: 2px 5px 2px 5px;
    background-color: #d9edf7;
}

.ac-canvas {
    background-color: white;
    display: inline-block;
}

.video-play-overlay {
    position: relative;
    top: -150px;
    left: 44%;
    height: 85px;
    width: 130px;
    background-position: center;
    background-repeat: no-repeat;
}

.video_popup video {
    width: var(--contentWidthRegular);
    cursor: pointer;
}

.ui-sortable-helper {
    height: auto !important;
    width: auto !important;
}

.navLink {
    z-index: 2;
    display: inline;
    bottom: 65px;
    position: fixed;
    opacity: 0.4;
}

.navLink:hover {
    opacity: 1;
}

.navLink a {
    display: inline-block;
    background-color: white;
    border-style: solid;
    border-color: lightgrey;
    border-width: 2px;
    width: 100px;
    height: 50px;
}

#relations-next {
    right: 35px;
}

#relations-prev {
    left: 35px;
}

.nextprev-list {
    margin: 10px;
    padding-left: 0;
    height: 50px;
}

@media (max-width: 600px) {
    .navLink {
        display: inline-block;
        bottom: auto;
        position: absolute;
    }

    #relations-next,
    #relations-prev {
        width: 25%;
        padding: 0 20px;
        display: inline;
    }
}

#completionButton {
    margin-top: 25px;
    margin-bottom: 15px;
    padding-left: 70px;
    padding-right: 70px;
    color: #ffffff;
    font-weight: bold;
}

.buttonAskCompletion {
    background-color: var(--completionButton);
    border-color: var(--completionButtonHover);
    font-weight: bold;
}

.buttonAskCompletion:hover {
    background-color: var(--completionButtonHover);
    border-color: var(--completionButtonHover);
}

.buttonConfirmCompletion {
    background-color: #50d392;
    border-color: #3dc682;
}

.buttonConfirmCompletion:hover {
    background-color: #3dc682;
    border-color: #3dc682;
}

.navLinkBg {
    height: 40px;
    background-color: #ffffff;
    z-index: 1;
    position: fixed;
    bottom: 55px;
    color: #999;
    font-weight: bold;
    -webkit-box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);
    -moz-box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);
    box-shadow: 0px 0px 3px rgba(50, 50, 50, 0.5);
}

.navLinkBg:hover {
    color: #999;
}

#navLinkBgRight {
    right: -1000px;
    padding: 10px 15px 0 65px;
}

#navLinkBgLeft {
    left: -65px;
    padding-left: 15px;
    padding-right: 50px;
}

.activehtml {
    width: 100%;
    height: 400px;
    background-color: #ffffff;
}

.container section > div.sidebar {
    margin: 0 0 0.5em 1em;
}

a.disqus_thread_link {
    display: block;
}

.reveal_button {
    display: block;
    margin-left: 0;
}

iframe[seamless] {
    display: block;
}

@media (min-width: 768px) {
    .container section > div.sidebar {
        margin: 0 3em 0.5em 1em;
    }
}

@media (min-width: 992px) {
    .container section > div.sidebar {
        margin: 0 11em 0.5em 1em;
    }
}

@media (min-width: 1200px) {
    .container section > div.sidebar {
        margin: 0 18em 0.5em 1em;
    }
}

div.ExecutionVisualizer table.visualizer {
    width: auto;
    margin-left: auto;
    margin-right: auto;
    background-color: #ffffff;
}

.sltooltip {
    position: absolute;
    z-index: 1020;
    display: block;
    padding-bottom: 5px;
    font-size: 11px;
    visibility: visible;
    margin-top: -2px;
    bottom: 120%;
    margin-left: -2em;
}

.sltooltip .sltooltip-arrow {
    bottom: 0;
    left: 50%;
    margin-left: -5px;
    border-top: 5px solid #000000;
    border-right: 5px solid transparent;
    border-left: 5px solid transparent;
    position: absolute;
    width: 0;
    height: 0;
}

.sltooltip-inner {
    max-width: 200px;
    padding: 3px 8px;
    color: var(--tooltip);
    text-align: center;
    text-decoration: none;
    background-color: #000000;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;
}

ul.dropdown-menu.globaltoc {
    max-height: 700px;
    overflow: auto;
}

.globaltoc span.caption-text {
    display: inline-block;
    font-weight: bold;
    font-size: large;
}

/* Style lp textareas. */
textarea.lp-result {
    width: 100%;
    height: 10em;
    font-family: monospace;
}

/*
 * Hide only visually, but have it available for screen readers:
 * https://snook.ca/archives/html_and_css/hiding-content-for-accessibility
 *
 * 1. For long content, line feeds are not interpreted as spaces and small width
 *    causes content to wrap 1 word per line:
 *    https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe
 */

.visuallyhidden {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
    white-space: nowrap;
    /* 1 */
}

/*
 * Extends the .visuallyhidden class to allow the element
 * to be focusable when navigated to via the keyboard:
 * https://www.drupal.org/node/897638
 */

.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus {
    clip: auto;
    height: auto;
    margin: 0;
    overflow: visible;
    position: static;
    width: auto;
    white-space: inherit;
}

.blockquote {
    text-align: center;
    font-size: large;
    font-style: italic;
    padding-left: 2em;
    padding-right: 2em;
}

#scprogresscontainer {
    width: 100%;
    max-width: 500px;
    margin: 10px auto;
}

#subchapterprogress.ui-progressbar .ui-progressbar-value {
    margin: 0;
    border-radius: 0px;
}

#subchapterprogress > div {
    background: green;
}

#subchapterprogress > div.loggedout {
    background: lightgray;
}

.runestone_caption {
    text-align: center;
}

.runestone_caption_divid {
    opacity: 50%;
}

#questions .runestone_caption:before {
    counter-increment: rscomponent;
    content: "Problem: " counter(rscomponent) " -- ";
}

body {
    color: var(--bodyFont);
}

.jupyter_container .output {
    margin-top: 10px;
}

.jupyter_container .output td {
    padding-left: 5px;
    padding-right: 5px;
}

.jupyter_container .output th {
    padding-left: 5px;
    padding-right: 5px;
}

/*Theme toggle*/
.theme-switch-wrapper {
    display: flex;
    align-items: center;
}

.theme-switch-wrapper em {
    margin-left: 10px;
    font-size: 1rem;
}

.theme-switch {
    display: inline-block;
    height: 34px;
    position: relative;
    width: 60px;
}

.theme-switch input {
    display: none;
}

.slider {
    background-color: #ccc;
    bottom: 0;
    cursor: pointer;
    left: 0;
    position: absolute;
    right: 0;
    top: 0;
    transition: 0.4s;
}

.slider:before {
    background-color: #fff;
    bottom: 4px;
    content: "";
    height: 26px;
    left: 4px;
    position: absolute;
    transition: 0.4s;
    width: 26px;
}

input:checked + .slider {
    background-color: #66bb6a;
}

input:checked + .slider:before {
    transform: translateX(26px);
}

.slider.round {
    border-radius: 34px;
}

.slider.round:before {
    border-radius: 50%;
}

/*End theme toggle*/

/*!********************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js!./runestone/common/css/user-highlights.css ***!
  \********************************************************************************************/
/* Variables holding theme colors */
:root {
	--menu: #FFFFFF;
}

[data-theme="dark"] {
	--menu: #000000;
}

.my-highlighted-text{
	background-color:#FFFF99;
}
.social-highlighted-text{
	background-color:#FFCCCC;
}
.highlight-option-box{
	position:absolute;
	top:0px;
	left:0px;
}
.highlight-option-box li{ 
	height:24px;
}
#continue-reading{
	padding-top:20px;
	display: none;
}
#continue-reading a{
	float:right;
	margin-right:20px;
}
li.completed
{
list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO5JREFUeNpi/P//PwMlgImBQjAwBthc4osH4skgNguJGrmA1BQgjgPiUJIMAGpWBVKrgNgAiL2P6H3aRrQBQM12QGo1EIsBcQxMM0oYABXxAjETFs2+QGobVHM9UPNSjEAEKgoEUjeBuBhNcwDUZm4gXg/U3IRuAcwLSkAsCcRdQE16QDoRiG2BGGQbOxA/BOIcbN5jhKVEoMYiINULFT8PxCJALAvlhwBtX4vXAKghpSBXoKlZCtQcQ1RCAirsBlJVSEIfgLiRpJQINKQdSNVCuTOB/Nt44xjkBWzY+iJvGRBr4pKHYUZKszNAgAEAln9yGpx/ZXMAAAAASUVORK5CYII=);
}
li.active
{
list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIlJREFUeNpi/P//PwMlgImBQjAMDGCBsxZIkaYz4RmaAZhAHYjNoOxTQHwTvwsQgAeIe4E4DU18FhAXAPF3QgbMB+IQLOIgA4WAOBRfIOri0AwDIDktfAbYEBF89jRNB0eI0HMEnwGXgXgNHs1roGrweiERGmUMWKIxkZh08AWI04G4j5iEBBBgAPddF58mobqdAAAAAElFTkSuQmCC);
}
.infoTextCompleted{
	margin-left:10px;
	font-size:0.9em;
	color:#3dc682;
	display:none;
	font-style:italic;
	opacity: 0.7;
}
.infoTextActive{
	margin-left:10px;
	font-size:0.9em;
	color:#ff9f19;
	display:none;
	font-style:italic;
	opacity: 0.7;
}
.dropdown-menu{
	background-clip: padding-box;
    background-color: var(--menu);
    border: 1px solid rgba(0, 0, 0, 0.2);
    border-radius: 5px 5px 5px 5px;
    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
    display: none;
    float: left;
    left: 0;
    list-style: none outside none;
    margin: 1px 0 0;
    min-width: 160px;
    padding: 4px 0;
    position: absolute;
    top: 100%;
    z-index: 1000;
}
.dropdown-menu ul {
    list-style: disc outside none;
    margin: 0 0 9px 25px;
    padding: 0;
}

.sidebar-highlights{
    background-color:#FFFF99;
}
div.documentwrapper {
	border : 0 none;
}
div.bodywrapper {
	border-right: 0 none;
}
div.sphinxsidebar {
	border-left: 1px solid #CCCCCC;
	padding-left: 10px;
}
.body>.section .section{
	padding-top: 1px;
}
#jump-to-chapter{
    border: 1px solid #CCCCCC;
    letter-spacing: 0.015em;
    line-height: 120%;
    padding: 0.5em;
	width: 80%;
	margin-left: auto;
	margin-right: auto;
}
#navigation-links{
	background-color: #F8F8F8;
    border: 1px solid #CCCCCC;
	padding:10px;
	margin:10px;
}

/*!***************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js!./runestone/matrixeq/css/matrixeq.css ***!
  \***************************************************************************************/
.matrixeq_container {
  padding: 6px 6px 6px 6px;
  margin: 0px 0px 6px 0px;
}

span.matrix_table {
  display: inline-table;
  background-color: inherit;
  border-width: 2px 2px;
  border-style: solid;
  border-color: black;
  text-align: center;
  padding: 0px 1px;
  margin: 0px 0px 4px 0px;
  overflow: visible;
}

span.matrix_column {
  display: inline-table;
  background-color: inherit;
  padding: 2px 8px 2px 8px;
  margin: 0px 1px;
  border-width: 0px 0px 0px 0px;
  font-family: monospace;
  font-size: 12px;
  vertical-align: middle;
}

span.matrix_column div {
  display: block;
  margin: 1px;
  padding: 2px;
  background-color: inherit;
}

span.matrix_table .matrix_column {
  border-style: none;
  margin-left: 5px;
  margin-right: 5px;
}

span.matrix_table:before {
  content: " ";
  background-color: inherit;
  width: 85%;
  text-align: center;
  height: 2px;
  position: relative;
  top: -2px;
  z-index: 100;
  display: block;
  margin: 0px auto;
}

span.matrix_table:after {
  content: " ";
  background-color: inherit;
  width: 85%;
  text-align: center;
  height: 2px;
  position: relative;
  top: 2px;
  z-index: 100;
  display: block;
  margin: 0px auto;
}

span.matrix_column:before {
  content: " ";
  width: 85%;
  height: 2px;
  position: relative;
  top: -2px;
  z-index: 100;
  display: block;
}

span.matrix_column:after {
  content: " ";
  width: 85%;
  height: 2px;
  position: relative;
  top: 2px;
  z-index: 100;
  display: block;
}

span.matrix_table span.matrix_column:before {
  height: 0px;
}

span.matrix_table span.matrix_column:after {
  height: 0px;
}

span input[type="text"] {
  display: block;
  margin: 0;
  width: 50px;
  height: 24px;
  font-family: sans-serif;
  font-size: 12px;
  appearance: none;
  box-shadow: none;
  text-align: right;
  background-color: inherit;
}

span.matrix_operator {
  display: inline-table;
  padding: 0px;
  margin: 0px 4px 0px 4px;
  font-family: monospace;
  font-size: 18px;
  vertical-align: middle;
}

span.matrix_label {
  display: inline-table;
  padding: 0px 0px 0px 20px;
  margin: 0px 1px;
  font-family: sans-serif;
  font-size: 12px;
  vertical-align: middle;
}

/* Colors for matrix highlighting */

.lightcyanColor {
  background-color: lightcyan;
}

.lightgreyColor {
  background-color: lightgrey;
}

.purpleColor {
  background-color: #DFB5E8;
}

.yellowColor {
  background-color: #FDFF9D;
}




/*!************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js!./runestone/webgldemo/css/webglinteractive.css ***!
  \************************************************************************************************/
/********************* Colour reference chart****************
elememt ********* property ********* colour ********

webgl_container  background-color    #fcf8e3

*/

/* Major sections */
.webgl_container {
  background-color: #fcf8e3;
  box-sizing: border-box;
  width: 100%;
  display: block;
  margin-bottom: 1em;
}

.webgl_cmds {
  box-sizing: border-box;
  width: 100%;
  text-align: center;
  padding: 6px;
}

.webgl_row2 {
  box-sizing: border-box;
  width: 100%;
  padding: 0px 4px 0px 4px;
  display: block;
  height: 550px;
}

.webgl_editors {
  box-sizing: border-box;
  float: left;
  display: block;
  visibility: visible;
  width: 50%;
}

.webgl_canvas {
  box-sizing: border-box;
  float: left;
  display: block;
  visibility: visible;
  font-size: 12px;
  font-weight: normal;
  padding-left: 5px;
  width: 50%;
}

.webgl_output {
  box-sizing: border-box;
  width: 100%;
  padding: 4px;
  margin-top: 6px;
  float: left;
}

/* Details within each section */
/* Tabbed titles, ul horizontal list */
.webgl_nav_tabs {
  height: 31px;
  width: 100%;
  margin: 0px;
  padding: 6px 0px 0px 0px;
  background-color: #CFCCB8;
  border-color: #fbeed5;
  border-top-left-radius: 4px;
  border-top-right-radius: 4px;
  list-style-type: none;
  overflow: hidden;
  display: inline-flex;
}

.webgl_nav_tabs li {
  border-top-left-radius: 4px;
  border-top-right-radius: 4px;
  margin: 0px 0px 0px 4px;
  padding: 4px 1px 4px 4px;
  list-style-type: none;
  position: relative;
  float: left;
  background-color: #E6E2CC;
  font-size: 9pt;
}

.webgl_nav_tabs li > a {
  padding: 8px 8px 8px 8px;
  color: #555;
  text-decoration: none;
}

.webgl_nav_tabs > li > a:hover {
  border-color: #b4b19d;
  border-bottom-width: 0;
}

.webgl_nav_tabs li.active {
  background-color: #ffffff;
  list-style-type: none;
  list-style-image: none;
}

/* Webgl editors */
.webgl_tab_content {
  width: 100%;
  position: absolute;
  clear: both;
  margin: 0px 0px 20px 0px;
  border: 0px;
  color: #c09853;
  background-color: #fcf8e3;
  z-index: 1;
}

.webgl_tab_content.active {
  z-index: 2;
}

.webgl_tab_content > * {
  margin-left: auto;
  margin-right: auto;
  /*	position:relative; */
}

.webgl_tab_content .clearfix {
  position: initial;
}

.webgl_tab_editor {
  width: 100%;
  position: absolute;
  clear: both;
  padding: 10px 4px 10px 4px;
  margin: 0px 0px 20px 0px;
  border: 0px;
  color: #c09853;
  background-color: #fcf8e3;
}

/* span that contains the tabbed text editors */
.webgl_code {
  width: 100%;
  float: left;
}

.webgl_tab_contents_text {
  width: 100%;
  position: absolute;
  clear: both;
  padding: 10px 4px 10px 4px;
  margin: 0px 0px 20px 0px;
  border: 0px;
  color: #c09853;
  background-color: #fcf8e3;
  z-index: 1;
}

.webgl_errorMessages {
  color: red;
}

.webgl_warningMessages {
  color: rgb(170, 34, 164);
}

.webgl_infoMessages {
  color: rgb(24, 144, 64);
}

.webgl_output_div {
  width: 100%;
  margin: 2px;
  border: 1px solid lightgrey;
  padding-bottom: 4px;
  padding-top: 4px;
  padding-left: 4px;
  background-color: white;
  overflow: auto;
  height: 14em;
  font-size: 12px;
  font-weight: normal;
}

.webgl_editor_highlight {
  background-color: #EEEEEE; /* very light grey */
}

/* To always show the scroll bar in a div */
::-webkit-scrollbar {
    -webkit-appearance: none;
    width: 7px;
}
::-webkit-scrollbar-thumb {
    border-radius: 4px;
    background-color: rgba(0,0,0,.5);
    -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);
}

.webgl_btn {
  display: inline-block;
  padding: 3px 6px;
  margin-bottom: 0;
  background-color: thistle;
  font-size: 12px;
  font-weight: normal;
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
  cursor: pointer;
  border: 1px solid transparent;
  border-radius: 4px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  user-select: none;
}

.webgl_checkbox {
}

.webgl_tabbed_editor {
  width: 100%;
  resize: none;
  font-family: monospace, sans-serif;
  font-size: 9pt;
  font-style: normal;
}

.canvas3D {
  width: 100%;
  height: 100%;
}

.CodeMirror.webgl-default {
  border: 1px solid #eee;
  font-family: monospace, sans-serif;
  font-size: 8pt;
  font-style: normal;
}

button.btn.webgl-default {
  font-size: 8pt;
}



/*!*******************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js!./runestone/common/css/presenter_mode.css ***!
  \*******************************************************************************************/
.hidden{
  display: none;
}

.view-toggle{
  padding: 0.85em;
}

.presentation-mode .section *{
  display: none;
}

.presentation-mode .section .runestone, .presentation-mode .section .runestone *{
  display: initial;
}

.present{
    height: 100vh;
}

.full-height{
    height: 100vh;
}

.bottom{
    position: absolute;
    bottom: 0;
}

#codeDisplayDiv{
  width: auto!important;
}

div.ExecutionVisualizer #dataViz{
  margin: 0;  
}

div.ExecutionVisualizer div#stackHeader {
  text-align: center;
}

#stackFrame{
  display: block!important;
}

#stackHeapTable {
  width: 100%;
}

#stackHeapTable tr {
  justify-content: space-around;
}

div.ExecutionVisualizer td#stack_td, div.ExecutionVisualizer td#heap_td {
  flex: 1;
}

.presentation-title {
  display: none;
}

.present .presentation-title {
  display: block;
}

div.ExecutionVisualizer div#heap {
  float: none;
  padding-left: 0;
}

#stack_td tr {
  display: table-row;
}

#heap_td tr {
  display: table-row;
}

#codeDisplayDiv{
  margin: 0 auto;
}

/*  bnm -- comment this out for now as it breaks codelens indentation and arrows
.visualizer tr{
  display: flex;
}
*/

#vizLayoutTd{
  flex: 1;
}

#vizLayoutTdFirst {
  flex: 2;
}

#vizLayoutTdSecond {
  flex: 1;
}

#vizLayoutTdThird {
  flex: 2;
}

#progOutputs {
  display: block!important;
  margin: 0 20px;
  width: 60%;
}

#pyStdout {
  width: 100%!important;
}

div.ExecutionVisualizer #pyStdout {
  margin-bottom: 1em;
}

div.ExecutionVisualizer table.visualizer {
  width: 100%;
}

.present #vizLayoutTdThird{
  text-align: left;
}

.ac-block{
  display: flex;
  margin-bottom: 1em;
}

.row-mode .ac-block{
  display: block;
  margin-bottom: 0;
}

.row-mode .ac_output, .row-mode .ac_code_div{
  float: none;
  display: block;
  width: auto;
  max-width: none;
}

.row-mode .ac_code_div{
  margin-bottom: 1em;
}

.ac_section>* {
  max-width: 100%;
}

.ac_output{
  display: block;
  max-width: 100%;
}

.ac_output pre {
  visibility: visible!important;
  min-height: 60px;
}

.CodeMirror{
  margin: 0;
  max-width: 100%;
  border-radius: 3px;
  min-height: 60px;
}

.container .section > runestone:not(.ac_section){
  max-width:none;
  margin: 0;
}

.presentation-options {
  display: flex;
  align-items: center;
  justify-content: flex-end;
}

.layout-btn {
  background-color: #FBEED5;
  border: 2px solid #DFD4BE;
  border-radius: 2px;
  padding: .25rem;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0 .5rem;
  transition: all .2s ease;
}

.layout-btn.active-layout, .layout-btn:focus {
  border: 2px solid #979797;
  outline: none;
}

.sketchpad-container {
  min-width: 50%;
  min-height: 300px;
  padding: 0 15px;
}

.card-mode .sketchpad-container {
  width: 50%;
  margin: 0;
  display: inline-block;
  /*margin: 0 -15px;*/
  vertical-align: top;
}

.row-mode .error {
  margin: 20px 15px;
}

.card-mode .error {
  margin: 28px 0 0;
  width: 50%;
  display: inline-block;
  padding: 0 15px;
  vertical-align: top;
  margin-top: 28px;
}

.sketchpad {
  background: white;
  border: 2px solid grey;
  border-radius: 3px;
  width: 100%;
  min-height: 300px;
  display: block;
}

.btn-presenter {
  padding: .5rem 1rem;
  border-radius: 3px;
  font-weight: 500;
  margin: 1.5rem 0 1.5rem 1.5rem;
}

.btn-grey-outline {
  border: 2px solid grey;
  color: grey;
  background: white;
}

.btn-grey-solid {
  border: 2px solid grey;
  color: white;
  background: grey;
}

body.present .ac_section>* {
  max-width: none;
}
body.present iframe {
  width: 100%;
}

body.present {
  /* font-size: 2.0em; */
}

body.present #relations-prev, body.present #relations-next, body.present .navLinkBg {
  display: none;
}

body.present .btn-presenter {
  position: absolute;
}
body.present .btn-presenter.prev-exercise { left: 0px; }
body.present .btn-presenter.next-exercise { right: 0px; }

/* .col-md-12 {
  width: 58.333333333333336%;
}

.card-mode .col-md-7 {
  width: 50%;
} */


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGFBQWE7RUFDYix1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLGVBQWU7RUFDZix3QkFBd0I7QUFDMUI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsYUFBYTtBQUNmOztBQUVBO0VBQ0UsY0FBYztFQUNkLGlCQUFpQjtFQUNqQixlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsVUFBVTtFQUNWLFNBQVM7RUFDVCxxQkFBcUI7RUFDckIsbUJBQW1CO0VBQ25CLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixVQUFVO0VBQ1YscUJBQXFCO0VBQ3JCLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsV0FBVztFQUNYLGlCQUFpQjtFQUNqQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsOEJBQThCO0FBQ2hDOztBQUVBO0VBQ0Usc0JBQXNCO0VBQ3RCLFdBQVc7RUFDWCxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxzQkFBc0I7RUFDdEIsWUFBWTtFQUNaLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGVBQWU7QUFDakI7QUFDQTtFQUNFLFdBQVc7QUFDYjs7QUFFQTtFQUNFLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLGFBQWE7QUFDZjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjtBQUNBLDRDQUE0QyxTQUFTLEVBQUU7QUFDdkQsNENBQTRDLFVBQVUsRUFBRTs7QUFFeEQ7Ozs7OztHQU1HIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vV2ViQ29tcG9uZW50cy8uL3J1bmVzdG9uZS9jb21tb24vY3NzL3J1bmVzdG9uZS1jdXN0b20tc3BoaW54LWJvb3RzdHJhcC5jc3MiLCJ3ZWJwYWNrOi8vV2ViQ29tcG9uZW50cy8uL3J1bmVzdG9uZS9jb21tb24vY3NzL3VzZXItaGlnaGxpZ2h0cy5jc3MiLCJ3ZWJwYWNrOi8vV2ViQ29tcG9uZW50cy8uL3J1bmVzdG9uZS9tYXRyaXhlcS9jc3MvbWF0cml4ZXEuY3NzIiwid2VicGFjazovL1dlYkNvbXBvbmVudHMvLi9ydW5lc3RvbmUvd2ViZ2xkZW1vL2Nzcy93ZWJnbGludGVyYWN0aXZlLmNzcyIsIndlYnBhY2s6Ly9XZWJDb21wb25lbnRzLy4vcnVuZXN0b25lL2NvbW1vbi9jc3MvcHJlc2VudGVyX21vZGUuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFZhcmlhYmxlcyBob2xkaW5nIHRoZW1lIGNvbG9ycyAqL1xuOnJvb3Qge1xuICAgIC0tYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAtLW91dGVyQmFja2dyb3VuZDogI2VlZWVlZTtcbiAgICAtLWxpbmtzOiAjMDY0NWFkO1xuICAgIC0tYm9keUZvbnQ6ICMwMDAwMDA7XG4gICAgLS10b29sdGlwOiAjZmZmZmZmO1xuICAgIC0tZ3JheVRvV2hpdGU6ICMzMzMzMzM7XG4gICAgLS1uYXZiYXI6ICNmOGY4Zjg7XG4gICAgLS1uYXZiYXJGb250OiAjNzA3MDcwO1xuICAgIC0tbmF2YmFyRm9udEhvdmVyOiAjMDAwMDAwO1xuICAgIC0tYWxlcnRzOiAjZDllZGY3O1xuICAgIC0tY29tcGxldGlvbkJ1dHRvbjogI2ZmYWEyYjtcbiAgICAtLWNvbXBsZXRpb25CdXR0b25Ib3ZlcjogI2ZmOWYxOTtcbiAgICAtLWFkbW9uaXRpb246ICNmY2Y4ZTM7XG4gICAgLS1hZG1vbml0aW9uQm9yZGVyOiAjZmJlZWQ1O1xuICAgIC0tY29kZUJ1dHRvbnM6ICM0NzQ5NDk7XG4gICAgLS1jb2RlQnV0dG9uc0JvcmRlcjogIzQ3NDk0OTtcbiAgICAtLWRhbmdlckFsZXJ0czogI2YyZGVkZTtcbiAgICAtLXN1Y2Nlc3NBbGVydHM6ICNkZmYwZDg7XG4gICAgLS1jb250ZW50V2lkdGhSZWd1bGFyOiA2NjBweDtcbiAgICAtLWNvbnRlbnRXaWR0aFdpZGU6IDEwNjBweDtcbiAgICAtLWNvbXBvbmVudEJnQ29sb3I6ICNmMGY4ZmY7XG4gICAgLS1jb21wb25lbnRCb3JkZXJDb2xvcjogIzAwMDAwMDtcbiAgICAtLXF1ZXN0aW9uQmdDb2xvcjogcmdiKDIxNywgMjMzLCAyMzUpO1xufVxuXG5bZGF0YS10aGVtZT1cImRhcmtcIl0ge1xuICAgIC0tYmFja2dyb3VuZDogIzJjMmYzMztcbiAgICAtLW91dGVyQmFja2dyb3VuZDogIzIzMjcyYTtcbiAgICAtLWxpbmtzOiAjNzI4OWRhO1xuICAgIC0tYm9keUZvbnQ6ICM5OWFhYjU7XG4gICAgLS10b29sdGlwOiAjMDAwMDAwO1xuICAgIC0tZ3JheVRvV2hpdGU6ICNmZmZmZmY7XG4gICAgLS1uYXZiYXI6ICMzZDNkM2Q7XG4gICAgLS1uYXZiYXJGb250OiAjZmZmZmZmO1xuICAgIC0tbmF2YmFyRm9udEhvdmVyOiAjZDZkNmQ2O1xuICAgIC0tYWxlcnRzOiAjNzE0MDgyO1xuICAgIC0tY29tcGxldGlvbkJ1dHRvbjogIzY1MDA4NztcbiAgICAtLWNvbXBsZXRpb25CdXR0b25Ib3ZlcjogIzU2MDA3MztcbiAgICAtLWFkbW9uaXRpb246ICMzZDNkM2Q7XG4gICAgLS1hZG1vbml0aW9uQm9yZGVyOiAjMjYyNjI2O1xuICAgIC0tY29kZUJ1dHRvbnM6ICM3Mjg5ZGE7XG4gICAgLS1jb2RlQnV0dG9uc0JvcmRlcjogI2ZmZmZmZjtcbiAgICAtLWRhbmdlckFsZXJ0czogIzhjMjYyNjtcbiAgICAtLXN1Y2Nlc3NBbGVydHM6ICMyMTczMDA7XG4gICAgLS1jb21wb25lbnRCZ0NvbG9yOiAjMDc0NjdkO1xuICAgIC0tY29tcG9uZW50Qm9yZGVyQ29sb3I6ICM5MzkwOTA7XG4gICAgLS1xdWVzdGlvbkJnQ29sb3I6IHJnYigyMywgODUsIDkzKTsgICAgXG59XG5cbi8qIGN1c3RvbSBtb2RpZmljYXRpb24gb2YgYmFzaWMuY3NzIGZvciBjb2xvci1jb250cmFzdCAoQUEgY29tcGxpYW50KSAqL1xudGQubGluZW5vcyBwcmUge1xuICAgIGNvbG9yOiAjNmI2YjZiO1xufVxuXG4vKiBjdXN0b20gbW9kaWZpY2F0aW9uIG9mIHByZXR0aWZ5LmNzcyBmb3IgY29sb3ItY29udHJhc3QgKEFBIGNvbXBsaWFudCkgKi9cbi5zdHIge1xuICAgIGNvbG9yOiAjMDA2YjAwO1xufVxuXG4vKiBjdXN0b20gbW9kaWZpY2F0aW9uIG9mIHBhcnNvbnMuY3NzIGZvciBjb2xvci1jb250cmFzdCAoQUEgY29tcGxpYW50KSAqL1xuLnBhcnNvbnMgLmJsb2NrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xufVxuXG4vKiBjdXN0b20gbW9kaWZpY2F0aW9uIG9mIHB5Z21lbnRzLmNzcyBmb3IgY29sb3ItY29udHJhc3QgKEFBIGNvbXBsaWFudCkgKi9cbi5oaWdobGlnaHQgLmMxIHtcbiAgICBjb2xvcjogIzM3NmE3Yjtcbn1cblxuLmhpZ2hsaWdodCAubm4ge1xuICAgIGNvbG9yOiAjMGY2Yzk1O1xufVxuXG4uaGlnaGxpZ2h0IC5ncCB7XG4gICAgY29sb3I6ICNhMTRjMDg7XG59XG5cbi5oaWdobGlnaHQgLnNpIHtcbiAgICBjb2xvcjogIzNjNzczZDtcbn1cblxuLmhpZ2hsaWdodCAubmMge1xuICAgIGNvbG9yOiAjMGI3MTlkO1xufVxuXG4vKiBgU2VhcmNoYCBmdW5jdGlvbmFsaXR5J3MgcmVzdWx0IGN1c3RvbSBtb2RpZmljYXRpb24gZm9yIGNvbG9yLWNvbnRyYXN0IChBQSBjb21wbGlhbnQpICovXG51bC5zZWFyY2ggbGkgZGl2LmNvbnRleHQge1xuICAgIGNvbG9yOiAjNmI2YjZiO1xufVxuXG5zcGFuLmhpZ2hsaWdodGVkIHtcbiAgICBjb2xvcjogIzRkNGQ0ZDtcbn1cblxuLyogQWN0aXZlQ29kZSBndXR0ZXIgY3VzdG9tIG1vZGlmaWNhdGlvbiBmb3IgY29sb3ItY29udHJhc3QgKEFBIGNvbXBsaWFudCkgKi9cblxuLkNvZGVNaXJyb3ItbGluZW51bWJlciB7XG4gICAgY29sb3I6ICM2YjZiNmI7XG59XG5cbi5hbGVydC13YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZG1vbml0aW9uKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWFkbW9uaXRpb25Cb3JkZXIpO1xufVxuXG4vKiBQeXRob24gY29kZSBvdXRwdXQgY3VzdG9tIG1vZGlmaWNhdGlvbiBmb3IgY29sb3ItY29udHJhc3QgKEFBIGNvbXBsaWFudCkgKi9cbmRpdi5FeGVjdXRpb25WaXN1YWxpemVyIHRhYmxlI3B5Q29kZU91dHB1dCAubGluZU5vIHtcbiAgICBjb2xvcjogIzZiNmI2Yjtcbn1cblxuLyogUnVuZXN0b25lIGN1c3RvbSBtb2RpZmljYXRpb25zICovXG5cbmJvZHkge1xuICAgIGNvdW50ZXItcmVzZXQ6IHJzY29tcG9uZW50O1xuICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW91dGVyQmFja2dyb3VuZCk7XG59XG5cbnByZSB7XG4gICAgbWFyZ2luOiAwIDAgMWVtO1xufVxuXG5oNSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgcGFkZGluZzogMTBweCAwO1xufVxuXG4vKiB0YWJsZS1vZi1jb250ZW50cyByZWxhdGVkIHN0eWxlcyBmb3IgY29sb3ItY29udHJhc3QgKEFBIGNvbXBsaWFudCkgKi9cbiN0YWJsZS1vZi1jb250ZW50cyBhIHtcbiAgICBjb2xvcjogdmFyKC0tbGlua3MpO1xufVxuXG4jdGFibGUtb2YtY29udGVudHMgYTpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWxpbmtzKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuI3RhYmxlLW9mLWNvbnRlbnRzLnNlY3Rpb24ge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbn1cblxuLyogbmF2YmFyLWJyYW5kIGNvbG9yIGNvbnRyYXN0IChBQSBjb21wbGlhbnQpICovXG4ubmF2YmFyLWRlZmF1bHQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW5hdmJhcik7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpIHtcbiAgICBjb2xvcjogdmFyKC0tbmF2YmFyRm9udCk7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gICAgY29sb3I6IHZhcigtLW5hdmJhckZvbnQpO1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1uYXZiYXJGb250SG92ZXIpO1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZCB7XG4gICAgY29sb3I6IHZhcigtLW5hdmJhckZvbnQpO1xufVxuXG4vKiBhY2tub3dsZWRnZW1lbnQgcmVsYXRlZCBzdHlsZXMgZm9yIGNvbG9yLWNvbnRyYXN0IChBQSBjb21wbGlhbnQpICovXG4udG9jdHJlZS13cmFwcGVyIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG59XG5cbi50b2N0cmVlLXdyYXBwZXIgYSB7XG4gICAgY29sb3I6IHZhcigtLWxpbmtzKTtcbn1cblxuLnRvY3RyZWUtd3JhcHBlciBhOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tbGlua3MpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBpbmRleCBhbmQgc2VhcmNoIHJlbGF0ZWQgc3R5bGVzIGZvciBjb2xvci1jb250cmFzdCAoQUEgY29tcGxpYW50KSAqL1xuI2luZGV4LWFuZC1zZWFyY2guc2VjdGlvbiB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xufVxuXG4jaW5kZXgtYW5kLXNlYXJjaC5zZWN0aW9uIGEge1xuICAgIGNvbG9yOiB2YXIoLS1saW5rcyk7XG59XG5cbiNpbmRleC1hbmQtc2VhcmNoLnNlY3Rpb24gYTpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWxpbmtzKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogY3VzdG9tIHN0eWxlIGZvciBgYWAgdGFnIGZvciBjb2xvci1jb250cmFzdCAoQUEgY29tcGxpYW50KSAqL1xuXG5hIHtcbiAgICBjb2xvcjogdmFyKC0tbGlua3MpO1xufVxuXG4vKiBuYXZiYXIgYW5kIG1lbnUgcmVsYXRlZCBzdHlsZXMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC8qIFJlbW92ZSB0b3AgcGFkZGluZyB3aGVuIHRvcCBuYXZiYXIgZ29lcyBjb2xsYXBzZWQgaW4gbmFycm93IHZpZXdwb3J0cyAqL1xuICAgIGJvZHkge1xuICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICB9XG5cbiAgICAubmF2YmFyLWZpeGVkLXRvcCB7XG4gICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAvKiB3aGVuIG5hdmJhciBpcyBjb2xsYXBzZWQgd2UgZG9uJ3Qgd2FudCBhbnkgdmVydGljYWwgZGl2aWRlcnMgdGFraW5nIHVwIHNwYWNlICovXG4gICAgLm5hdmJhciAuZGl2aWRlci12ZXJ0aWNhbCB7XG4gICAgICAgIG1hcmdpbjogMCAzcHg7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2YyZjJmMjtcbiAgICB9XG5cbiAgICAubmF2YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICB9XG59XG5cbmRpdi5jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQpO1xufVxuXG4uY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLnJ1bmVzdG9uZSB7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29tcG9uZW50QmdDb2xvcik7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29tcG9uZW50Qm9yZGVyQ29sb3IpO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIH1cblxuLyogU2V0cyB3aWR0aCBvZiBjb250ZW50IFwiY29sdW1uXCIgKi9cbiNtYWluLWNvbnRlbnQgc2VjdGlvbiA+ICo6bm90KHNlY3Rpb24pIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLWNvbnRlbnRXaWR0aFJlZ3VsYXIpO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBcbn1cblxuLyogSGFuZGxlIGNvbnRlbnQgaW4gbmVzdGVkIHNlY3Rpb25zIGJ5IGFsbG93aW5nIHRoZW0gdG8gZ3JvdyovXG4jbWFpbi1jb250ZW50IHNlY3Rpb24gPiBzZWN0aW9uLCAgICAgICAgICAgICAgICBcbi8qIEFuZCB0aGVuIG1ha2Ugc3VyZSBhIGZldyBpdGVtcyBhcmUgd2lkZXIgYnkgZGVmYXVsdCAqL1xuI21haW4tY29udGVudCBzZWN0aW9uID4gLnJ1bmVzdG9uZS5hY19zZWN0aW9uLFxuI21haW4tY29udGVudCBzZWN0aW9uID4gLnJ1bmVzdG9uZS5jb2RlbGVucyxcbiNtYWluLWNvbnRlbnQgc2VjdGlvbiA+IC5xdWVzdGlvbixcbiNtYWluLWNvbnRlbnQgc2VjdGlvbiA+IC5ydW5lc3RvbmUucGFyc29ucy1jb250YWluZXIsXG4jbWFpbi1jb250ZW50IHNlY3Rpb24gPiAucnVuZXN0b25lLnBhcnNvbnMtcHJvYmxlbXMsXG4jbWFpbi1jb250ZW50IHNlY3Rpb24gPiAuY29kZWxlbnMsXG4jbWFpbi1jb250ZW50IHNlY3Rpb24gPiAudGltZWRBc3Nlc3NtZW50XG57XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1jb250ZW50V2lkdGhXaWRlKTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG5cbi8qIEFsbG93IGluZGl2aWR1YWwgZWxlbWVudHMgdG8gcmVxdWVzdCBiZWluZyBsYXJnZXIgKi9cbiNtYWluLWNvbnRlbnQgc2VjdGlvbiA+IC5mdWxsLXdpZHRoIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLWNvbnRlbnRXaWR0aFdpZGUpO1xufVxuXG4uY29udGFpbmVyIHNlY3Rpb24gPiBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItY29sbGFwc2UsXG4uY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1oZWFkZXIsXG4uY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSxcbi5jb250YWluZXIgPiAubmF2YmFyLWhlYWRlciB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuXG4ubmF2YmFyID4gLmNvbnRhaW5lciAubmF2YmFyLWJyYW5kIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLm5hdmJhciA+IC5jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW5hdmJhcik7XG59XG5cbi5uYXZiYXItdG9nZ2xlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDBweDtcbn1cblxuLmZvb3RlciA+IC5jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW91dGVyQmFja2dyb3VuZCk7XG59XG5cbi5mb290ZXIgPiAuY29udGFpbmVyIHAgPiBhIHtcbiAgICBjb2xvcjogdmFyKC0tbGlua3MpO1xufVxuXG4uYnJhbmQtbG9nbyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xufVxuXG4uYnJhbmQtbG9nbyBpbWcge1xuICAgIGhlaWdodDogNDBweDtcbn1cblxuLnNvY2lhbC1tZW51IHtcbiAgICB3aWR0aDogMjIwcHg7XG4gICAgcGFkZGluZzogMTBweCAxMHB4IDE1cHggMjBweDtcbn1cblxuLmZiLWxpa2Uge1xuICAgIG1hcmdpbi10b3A6IDdweDtcbn1cblxuLmZiX2lmcmFtZV93aWRnZXQgc3Bhbixcbi5mYl9pZnJhbWVfd2lkZ2V0IGlmcmFtZSB7XG4gICAgaGVpZ2h0OiAyMHB4ICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDgycHggIWltcG9ydGFudDtcbn1cblxuLnR3aXR0ZXItZm9sbG93LWJ1dHRvbiB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLmdpdHRpcCB7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xufVxuXG4uZ2l0dGlwLWJ1dHRvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogLTZweDtcbn1cblxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IHNwYW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDNweCAyMHB4O1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIGNvbG9yOiB2YXIoLS1ncmF5VG9XaGl0ZSk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGNvbG9yOiB2YXIoLS1ncmF5VG9XaGl0ZSk7XG59XG5cbi5sb2dnZWRpbnVzZXIge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vKiBlbmQgbmF2YmFyIGFuZCBtZW51IHJlbGF0ZWQgc3R5bGVzICovXG5cbi5Db2RlTWlycm9yIHtcbiAgICBtYXJnaW46IDAgMCAxZW0gMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iYWNrZ3JvdW5kKTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgY2xlYXI6IGJvdGg7XG59XG5cbi5Db2RlTWlycm9yLXNjcm9sbCB7XG4gICAgLyogdGhpcyBhbGxvd3MgQ00gZWxlbWVudHMgdG8gYmUgcmVzaXplZCB0byAoYWxtb3N0KSBhbnlcbiAgICAgKiBoZWlnaHQgd2hpbGUgc3RpbGwgcmVseWluZyBvbiBtYXgtaGVpZ2h0ICh3aGljaCBrZWVwc1xuICAgICAqIHRoZSBDTSBlZGl0b3JzIHRvIG5vIG1vcmUgdGhhbiB0aGUgc2l6ZSBuZWVkZWRcbiAgICAgKiB1bmxlc3MgcmVzaXplZCkgKi9cbiAgICBtYXgtaGVpZ2h0OiA2MGVtO1xuICAgIG1pbi13aWR0aDogMzBlbTtcbn1cblxuLmFjX3NlY3Rpb24gLkNvZGVNaXJyb3IgcHJlIHtcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwO1xuICAgIC1vLWJvcmRlci1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3JkZXItd2lkdGg6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgZm9udC1mYW1pbHk6IE1vbmFjbywgQ291cmllciBOZXcsIG1vbm9zcGFjZTtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbn1cblxuYnV0dG9uLmJ0bixcbmJ0bi5idG4tc20sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdLmJ0bi5idG4tc20sXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdLmJ0bi5idG4tc20ge1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG5cbi5idG4ge1xuICAgIG1hcmdpbjogNXB4O1xufVxuXG4uYnRuLmRpc2FibGVkIHtcbiAgICAvKiBuZWVkZWQgaW4gQm9vdHN0cmFwIDMgdG8gYWxsb3cgdG9vbHRpcHMgb24gZGlzYWJsZWQgYnV0dG9ucyAqL1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG4uYnRuLWRlZmF1bHQsXG4uYnRuLWRlZmF1bHQuZGlzYWJsZWQsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTpob3ZlciB7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29kZUJ1dHRvbnMpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKGNvZGVCdXR0b25zQm9yZGVyKTtcbn1cblxuLmJ0bi1kZWZhdWx0OmhvdmVyLFxuLmJ0bi1kZWZhdWx0OmZvY3VzLFxuLmJ0bi1kZWZhdWx0OmFjdGl2ZSxcbi5idG4tZGVmYXVsdC5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzYTNjM2M7XG4gICAgYm9yZGVyLWNvbG9yOiAjMmUyZjJmO1xuICAgIGNvbG9yOiAjZmZmZmZmO1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgIG1hcmdpbi1yaWdodDogNXB4O1xufVxuXG4udG9vbHRpcCB7XG4gICAgei1pbmRleDogMjAwMCAhaW1wb3J0YW50O1xufVxuXG4udG9vbHRpcC5pbiB7XG4gICAgb3BhY2l0eTogMC44O1xuICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT04MCk7XG59XG5cbmgyIHtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4uYWxlcnQgZm9ybSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLyogZGVmYXVsdCBib29rc3RyYXAgYWxlcnQgY29sb3IgaXMgaGFyZCB0byByZWFkIChsb3cgY29udHJhc3QpLiAqL1xuLmFsZXJ0IHtcbiAgICBjb2xvcjogdmFyKC0tZ3JheVRvV2hpdGUpO1xuICAgIHBhZGRpbmc6IDEwcHg7XG59XG5cbi5hbGVydC1pbmZvIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hbGVydHMpO1xufVxuXG4uYWxlcnQtZGFuZ2VyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kYW5nZXJBbGVydHMpO1xufVxuXG4vKiBvdmVycmlkZSB0aGUgY29sb3Igc3R5bGVzIGFwcGxpZWQgYnkgU2t1bHB0IHRvIHRoZSB1bml0dGVzdCByZXN1bHRzIGRpdnMgKi9cbi51bml0dGVzdC1yZXN1bHRzLmFsZXJ0LWRhbmdlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGFuZ2VyQWxlcnRzKSAhaW1wb3J0YW50O1xufVxuXG4udW5pdHRlc3QtcmVzdWx0cy5hbGVydC1zdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdWNjZXNzQWxlcnRzKSAhaW1wb3J0YW50O1xufVxuXG4uYWxlcnQgbGFiZWwge1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbi8qXG5NaXNzaW5nIGJyYWNrZXRzXG49PT09PT09PT09PT09PT09XG5UaGUgZGVmYXVsdCBzdHlsaW5nIGZyb20gU3BoaW54J3MgYGBiYXNpYy5jc3NgYCBkb2Vzbid0IHN0eWxlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgcmVmZXJlbmNlIHdpdGggYnJhY2tldHMuIEhlcmUncyB0aGUgcmVsZXZhbnQgc25pcHBldCBvZiBDU1M6XG5cbi4uIGNvZGUtYmxvY2s6OiBDU1NcbiAgICA6bnVtYmVyLWxpbmVzOlxuXG4gICAgYS5icmFja2V0czpiZWZvcmUsXG4gICAgc3Bhbi5icmFja2V0cyA+IGE6YmVmb3Jle1xuICAgICAgICBjb250ZW50OiBcIltcIjtcbiAgICB9XG5cbiAgICBhLmJyYWNrZXRzOmFmdGVyLFxuICAgIHNwYW4uYnJhY2tldHMgPiBhOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCJdXCI7XG4gICAgfVxuXG5UaGUgSFRNTCBmb3IgYSBmb290bm90ZSByZWZlcmVuY2UgaXM6XG5cbi4uIGNvZGUtYmxvY2s6OiBIVE1MXG4gICAgOm51bWJlci1saW5lczpcblxuICAgIDxhIGNsYXNzPVwiZm9vdG5vdGUtcmVmZXJlbmNlIGJyYWNrZXRzXCIgaHJlZj1cIiNhc3NlbWJsZWRcIiBpZD1cImlkMVwiPjI8L2E+XG5cblRoZSBIVE1MIGZvciBhIHR5cGljYWwgZm9vdG5vdGUgaXM6XG5cbi4uIGNvZGUtYmxvY2s6OiBIVE1MXG4gICAgOm51bWJlci1saW5lczpcblxuICAgIDxkbCBjbGFzcz1cImZvb3Rub3RlIGJyYWNrZXRzXCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImxhYmVsXCIgaWQ9XCJ4eHhcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhY2tldHNcIj5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZuLWJhY2tyZWZcIiBocmVmPVwiI2lkMlwiPjE8L2E+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZHQ+XG4gICAgICAgIDxkZD5PbWl0dGVkIHRoaXMuLi48L2RkPlxuICAgIDwvZGw+XG5cblRoZSBIVE1MIGZvciBhIGZvb3Rub3RlIHJlZmVyZW5jZWQgbXVsdGlwbGUgdGltZXMgaXM6XG5cbi4uIGNvZGUtYmxvY2s6OiBIVE1MXG4gICAgOm51bWJlci1saW5lczpcblxuICAgIDxkbCBjbGFzcz1cImZvb3Rub3RlIGJyYWNrZXRzXCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImxhYmVsXCIgaWQ9XCJ4eHhcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhY2tldHNcIj4xPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbi1iYWNrcmVmXCI+XG4gICAgICAgICAgICAgICAgKDxhIGhyZWY9XCIjaWQxXCI+MTwvYT4sPGEgaHJlZj1cIiNpZDJcIj4yPC9hPiw8YSBocmVmPVwiI2lkM1wiPjM8L2E+KVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQ+T21pdHRlZCB0aGlzLi4uPC9kZD5cbiAgICA8L2RsPlxuXG5Ib3dldmVyLCB0aGVyZSdzIG5vIChjdXJyZW50KSBDU1Mgc2VsZWN0b3IgdGhhdCB3aWxsIGFkZCBhIGBgY29udGVudGBgIHRvIHRoZSBtdWx0aXBseS1yZWZlcmVuY2VkIGZvb3Rub3RlIHdpdGhvdXQgYWRkaW5nIGFuIGFkZGl0aW9uYWwgYGBjb250ZW50YGAgdG8gdGhlIHR5cGljYWwgZm9vdG5vdGU6IHdlIHdhbnQgdG8gc2VsZWN0IGBgZHQubGFiZWwgPiBzcGFuLmJyYWNrZXRzID4gdGV4dC1vbmx5IGNvbnRlbnRgYCBvciBgYGR0LmxhYmVsID4gc3Bhbi5icmFja2V0cyA+IDpub3QoOmhhcyBhKWBgIChzZWUgdGhlIHVuc3VwcG9ydGVkIGA6aGFzIHNlbGVjdG9yIDxodHRwczovL2Nzcy10cmlja3MuY29tL2RpZC15b3Uta25vdy1hYm91dC10aGUtaGFzLWNzcy1zZWxlY3Rvci8+YF8uIFNvLCBJIHNlZSBubyBzb2x1dGlvbiBmb3IgdGhpcyAob3V0c2lkZSBKUykuXG5cblxuSW5jb3JyZWN0IGNvbG9yXG49PT09PT09PT09PT09PT1cblNlY29uZCwgdGhlIEJvb3RzdHJhcCB0aGVtZSAodjMuNC4xKSBjb250YWlucyB0aGUgZm9sbG93aW5nIENTUywgZnJvbSBgYG5vZGVfbW9kdWxlcy9ib290c3RyYXAvZGlzdC9jc3MvbGVzcy9sYWJlbHMubGVzc2BgOlxuXG4uLiBjb2RlLWJsb2NrOjogQ1NTXG4gICAgOm51bWJlci1saW5lczpcblxuICAgIC5sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgcGFkZGluZzogLjJlbSAuNmVtIC4zZW07XG4gICAgICAgIGZvbnQtc2l6ZTogNzUlO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgY29sb3I6IEBsYWJlbC1jb2xvcjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IC4yNWVtO1xuXG4gICAgICAgIC4uLm1vcmUgaGVyZSBvbWl0dGVkLi4uXG4gICAgfVxuXG5BTEwgdGhpcyB0aGVyZWZvcmUgZ2V0cyBhcHBsaWVkIHRvIGZvb3Rub3Rlcywgc2luY2UgdGhleSBoYXZlIHRoZSBgYGxhYmVsYGAgY2xhc3MuIEJlY2F1c2UgdGhlIGBgQGxhYmVsLWNvbG9yYGAgaXMgd2hpdGUsIHRoaXMgQ1NTIG1ha2VzIHRoZSByZWZlcmVuY2UgaW52aXNpYmxlIGFnYWluc3QgdGhlIGRlZmF1bHQgKGxpZ2h0IG1vZGUpIHdoaXRlIGJhY2tncm91bmQuIEkgbGlrZSB0aGUgcmVzdCBvZiB0aGUgc3R5bGluZyBjaGFuZ2VzIChldmVuIHRob3VnaCB0aGV5IGRpZmZlciBmcm9tIHRoZSBzdGFuZGFyZCBTcGhpbnggc2V0dGluZ3MpLCBzbyBvbmx5IHRoZSBjb2xvciBpcyBjaGFuZ2VkLlxuKi9cbmR0LmxhYmVsID4gc3Bhbi5icmFja2V0czpub3Qoc3Bhbi5icmFja2V0cyA+IGEpLFxuZHQubGFiZWwgPiBzcGFuLmZuLWJhY2tyZWY6bm90KHNwYW4uZm4tYmFja3JlZiA+IGEpIHtcbiAgICBjb2xvcjogYmxhY2s7XG59XG5cbi8qIFRoZXNlIGFkbW9uaXRpb24gc3R5bGVzIHN0eWxlcyBhcmUgY29waWVkIGZyb20gdGhlIEJvb3RzdHJhcCAuYWxlcnQgY2xhc3Nlcy5cbiBNb3N0IG9mIHRoZSAhaW1wb3J0YW50IGRlY2xhcmF0aW9ucyBhcmUgdG8gb3ZlcnJpZGUgdGhlIFNwaGlueCBiYXNpYy5jc3Mgc3R5bGVzICovXG4uYWRtb25pdGlvbiB7XG4gICAgcGFkZGluZzogOHB4IDM1cHggOHB4IDE0cHggIWltcG9ydGFudDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50O1xuICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hZG1vbml0aW9uKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZmJlZWQ1O1xuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLyogLmFsZXJ0LWRhbmdlciAqL1xuLmFkbW9uaXRpb24uY2F1dGlvbiB7XG4gICAgY29sb3I6ICNhMzNmM2U7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZGVkZTtcbiAgICBib3JkZXItY29sb3I6ICNlZWQzZDc7XG59XG5cbi8qIC5hbGVydC1pbmZvICovXG4uYWRtb25pdGlvbi50aXAsXG4uYWRtb25pdGlvbi5ub3RlIHtcbiAgICBjb2xvcjogIzMzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xuICAgIGJvcmRlci1jb2xvcjogI2JjZThmMTtcbn1cblxuLyogZnJvbSB3ZWIycHkuY3NzICovXG5kaXYuZmxhc2gge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICAgIHRvcDogNTVweDtcbiAgICByaWdodDogNDVweDtcbiAgICBvcGFjaXR5OiAwLjk1O1xuICAgIG1hcmdpbjogMCAwIDEwcHggMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIC1tb3otYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzIyMiwgIzAwMCk7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzIyMiwgIzAwMCk7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQoOTBkZWcsICMyMjIsICMwMDApO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICMyMjIsICMwMDApO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIHotaW5kZXg6IDIwMDA7XG59XG5cbi8qIFN0eWxlcyBmb3IgdGhlIGxvZ2luLCByZWdpc3RyYXRpb24sIGFuZCBKYW5yYWluIGZvcm1zICovXG4jd2ViMnB5X3VzZXJfZm9ybSB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuI3dlYjJweV91c2VyX2Zvcm0gZm9ybSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAxNTBweDtcbiAgICBwYWRkaW5nLXRvcDogM3B4O1xufVxuXG4jd2ViMnB5X3VzZXJfZm9ybSB0ZCB7XG4gICAgcGFkZGluZy1ib3R0b206IDE1cHg7XG59XG5cbiN3ZWIycHlfdXNlcl9mb3JtIHRkLncycF9mdyB7XG4gICAgd2lkdGg6IDI5OXB4O1xufVxuXG4jYXV0aC1hY3Rpb25zIHtcbiAgICBtYXJnaW4tdG9wOiA1MHB4O1xufVxuXG4jc2lnbl9pbl90ZXh0IHRkIHtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgZm9udC1mYW1pbHk6IFwibHVjaWRhIGdyYW5kZVwiLCBWZXJkYW5hLCBzYW5zLXNlcmlmO1xuICAgIHBhZGRpbmctYm90dG9tOiAxM3B4O1xufVxuXG4jYXV0aF91c2VyX3JlbWVtYmVyIHtcbiAgICBtYXJnaW4tdG9wOiAtMjBweDtcbn1cblxuLyogRW5kIGxvZ2luLCByZWdpc3RyYXRpb24sIEphbnJhaW4gc3R5bGVzICovXG5cbi8qIGVuZC1vZi1jaGFwdGVyIGV4ZXJjaXNlcyBzdHlsZXMgKi9cbiNleGVyY2lzZXMgPiBvbCA+IGxpLFxuI3Byb2dyYW1taW5nLWV4ZXJjaXNlcyA+IG9sID4gbGkge1xuICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG59XG5cbiNleGVyY2lzZXMgPiBvbCA+IGxpOm50aC1jaGlsZChldmVuKSxcbiNwcm9ncmFtbWluZy1leGVyY2lzZXMgPiBvbCA+IGxpOm50aC1jaGlsZChldmVuKSB7XG4gICAgcGFkZGluZzogMS4yZW0gMS40ZW07XG4gICAgYmFja2dyb3VuZDogI2ZhZjdkZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZmJlZWQ1O1xuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLyogRW5kIGNoYXB0ZXIgZXhlcmNpc2VzIHN0eWxlcyAqL1xuXG4vKiBNb2RhbCBkaWFsb2cgc3R5bGVzIChzY3JhdGNoIGFjdGl2ZWNvZGUsIGNvbXBhcmUgbWUsIGV0YykgKi9cbi5zY3JhdGNoLWFjLW1vZGFsIHtcbiAgICB3aWR0aDogOTAlO1xufVxuXG4uY29tcGFyZS1tb2RhbCAucHJvZ3Jlc3Mge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5jb21wYXJlLW1lLXByb2dyZXNzIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmNvbXBhcmUtbWUtcHJvZ3Jlc3MgLnByb2dyZXNzLWJhcixcbi51bml0dGVzdC1yZXN1bHRzLXByb2dyZXNzIC5wcm9ncmVzcy1iYXIge1xuICAgIGNvbG9yOiAjMzMzO1xufVxuXG4ubW9kYWwtYm9keSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZCk7XG59XG5cbi5tb2RhbC1oZWFkZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQpO1xufVxuXG4udW5pdHRlc3QtcmVzdWx0cy1wcm9ncmVzcyB7XG4gICAgd2lkdGg6IDI1JTtcbn1cblxuLmNvbXBhcmUtbW9kYWwge1xuICAgIHdpZHRoOiAzNTBweDtcbn1cblxuLmNvbXBhcmUtbW9kYWwgdGFibGUge1xuICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gICAgYm9yZGVyLXNwYWNpbmc6IDEwcHggNXB4O1xufVxuXG4uY29kZWxlbnMtbW9kYWwge1xuICAgIC8qIHdlIHNldCBzb21lIGN1c3RvbSBwb3NpdGlvbiBzdHlsZXMgc28gdGhhdCB0aGUgbW9kYWwgZG9lc24ndCBvYnNjdXJlIHRoZSBjb2RlbGVucyB2aXN1YWxpemVyICovXG4gICAgdG9wOiAyMCU7XG4gICAgcmlnaHQ6IDIwJTtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIGJvdHRvbTogYXV0bztcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLyogcmVtb3ZlIGFueSBjdXN0b20gcG9zaXRpb24gc3R5bGVzIHdoZW4gdGhlIHNjcmVlbiBpcyBzbWFsbCAobW9iaWxlIGRldmljZXMpXG4gICAgdG8gcHJldmVudCB0aGUgbW9kYWwgZnJvbSBiZWluZyBwYXJ0aWFsbHkgb2ZmIHRoZSBzY3JlZW4gKi9cbiAgICAuY29kZWxlbnMtbW9kYWwge1xuICAgICAgICB0b3A6IDAgIWltcG9ydGFudDtcbiAgICAgICAgcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5jb2RlbGVucy1tb2RhbCA+IC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiA0MDBweDtcbn1cblxuLyogRW5kIG1vZGFsIGRpYWxvZyBzdHlsZXMgKi9cblxuLmZvb3Rub3RlLnRhYmxlIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uZm9vdG5vdGUudGFibGUgdGQubGFiZWwge1xuICAgIHBhZGRpbmc6IDJweCA1cHggMnB4IDVweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xufVxuXG4uYWMtY2FudmFzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi52aWRlby1wbGF5LW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xNTBweDtcbiAgICBsZWZ0OiA0NCU7XG4gICAgaGVpZ2h0OiA4NXB4O1xuICAgIHdpZHRoOiAxMzBweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuLnZpZGVvX3BvcHVwIHZpZGVvIHtcbiAgICB3aWR0aDogdmFyKC0tY29udGVudFdpZHRoUmVndWxhcik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udWktc29ydGFibGUtaGVscGVyIHtcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuXG4ubmF2TGluayB7XG4gICAgei1pbmRleDogMjtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgYm90dG9tOiA2NXB4O1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBvcGFjaXR5OiAwLjQ7XG59XG5cbi5uYXZMaW5rOmhvdmVyIHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4ubmF2TGluayBhIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IGxpZ2h0Z3JleTtcbiAgICBib3JkZXItd2lkdGg6IDJweDtcbiAgICB3aWR0aDogMTAwcHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xufVxuXG4jcmVsYXRpb25zLW5leHQge1xuICAgIHJpZ2h0OiAzNXB4O1xufVxuXG4jcmVsYXRpb25zLXByZXYge1xuICAgIGxlZnQ6IDM1cHg7XG59XG5cbi5uZXh0cHJldi1saXN0IHtcbiAgICBtYXJnaW46IDEwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIGhlaWdodDogNTBweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgLm5hdkxpbmsge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGJvdHRvbTogYXV0bztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cblxuICAgICNyZWxhdGlvbnMtbmV4dCxcbiAgICAjcmVsYXRpb25zLXByZXYge1xuICAgICAgICB3aWR0aDogMjUlO1xuICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICB9XG59XG5cbiNjb21wbGV0aW9uQnV0dG9uIHtcbiAgICBtYXJnaW4tdG9wOiAyNXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgcGFkZGluZy1sZWZ0OiA3MHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDcwcHg7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5idXR0b25Bc2tDb21wbGV0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb21wbGV0aW9uQnV0dG9uKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbXBsZXRpb25CdXR0b25Ib3Zlcik7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5idXR0b25Bc2tDb21wbGV0aW9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb21wbGV0aW9uQnV0dG9uSG92ZXIpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29tcGxldGlvbkJ1dHRvbkhvdmVyKTtcbn1cblxuLmJ1dHRvbkNvbmZpcm1Db21wbGV0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTBkMzkyO1xuICAgIGJvcmRlci1jb2xvcjogIzNkYzY4Mjtcbn1cblxuLmJ1dHRvbkNvbmZpcm1Db21wbGV0aW9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2RjNjgyO1xuICAgIGJvcmRlci1jb2xvcjogIzNkYzY4Mjtcbn1cblxuLm5hdkxpbmtCZyB7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgei1pbmRleDogMTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgYm90dG9tOiA1NXB4O1xuICAgIGNvbG9yOiAjOTk5O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCAzcHggcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICAgIC1tb3otYm94LXNoYWRvdzogMHB4IDBweCAzcHggcmdiYSg1MCwgNTAsIDUwLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4IHJnYmEoNTAsIDUwLCA1MCwgMC41KTtcbn1cblxuLm5hdkxpbmtCZzpob3ZlciB7XG4gICAgY29sb3I6ICM5OTk7XG59XG5cbiNuYXZMaW5rQmdSaWdodCB7XG4gICAgcmlnaHQ6IC0xMDAwcHg7XG4gICAgcGFkZGluZzogMTBweCAxNXB4IDAgNjVweDtcbn1cblxuI25hdkxpbmtCZ0xlZnQge1xuICAgIGxlZnQ6IC02NXB4O1xuICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1MHB4O1xufVxuXG4uYWN0aXZlaHRtbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA0MDBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuXG4uY29udGFpbmVyIHNlY3Rpb24gPiBkaXYuc2lkZWJhciB7XG4gICAgbWFyZ2luOiAwIDAgMC41ZW0gMWVtO1xufVxuXG5hLmRpc3F1c190aHJlYWRfbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5yZXZlYWxfYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogMDtcbn1cblxuaWZyYW1lW3NlYW1sZXNzXSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgIC5jb250YWluZXIgc2VjdGlvbiA+IGRpdi5zaWRlYmFyIHtcbiAgICAgICAgbWFyZ2luOiAwIDNlbSAwLjVlbSAxZW07XG4gICAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAuY29udGFpbmVyIHNlY3Rpb24gPiBkaXYuc2lkZWJhciB7XG4gICAgICAgIG1hcmdpbjogMCAxMWVtIDAuNWVtIDFlbTtcbiAgICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgICAuY29udGFpbmVyIHNlY3Rpb24gPiBkaXYuc2lkZWJhciB7XG4gICAgICAgIG1hcmdpbjogMCAxOGVtIDAuNWVtIDFlbTtcbiAgICB9XG59XG5cbmRpdi5FeGVjdXRpb25WaXN1YWxpemVyIHRhYmxlLnZpc3VhbGl6ZXIge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuXG4uc2x0b29sdGlwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTAyMDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLWJvdHRvbTogNXB4O1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgYm90dG9tOiAxMjAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtMmVtO1xufVxuXG4uc2x0b29sdGlwIC5zbHRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gICAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMDAwMDA7XG4gICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xufVxuXG4uc2x0b29sdGlwLWlubmVyIHtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDNweCA4cHg7XG4gICAgY29sb3I6IHZhcigtLXRvb2x0aXApO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDtcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbnVsLmRyb3Bkb3duLW1lbnUuZ2xvYmFsdG9jIHtcbiAgICBtYXgtaGVpZ2h0OiA3MDBweDtcbiAgICBvdmVyZmxvdzogYXV0bztcbn1cblxuLmdsb2JhbHRvYyBzcGFuLmNhcHRpb24tdGV4dCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogbGFyZ2U7XG59XG5cbi8qIFN0eWxlIGxwIHRleHRhcmVhcy4gKi9cbnRleHRhcmVhLmxwLXJlc3VsdCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMGVtO1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG5cbi8qXG4gKiBIaWRlIG9ubHkgdmlzdWFsbHksIGJ1dCBoYXZlIGl0IGF2YWlsYWJsZSBmb3Igc2NyZWVuIHJlYWRlcnM6XG4gKiBodHRwczovL3Nub29rLmNhL2FyY2hpdmVzL2h0bWxfYW5kX2Nzcy9oaWRpbmctY29udGVudC1mb3ItYWNjZXNzaWJpbGl0eVxuICpcbiAqIDEuIEZvciBsb25nIGNvbnRlbnQsIGxpbmUgZmVlZHMgYXJlIG5vdCBpbnRlcnByZXRlZCBhcyBzcGFjZXMgYW5kIHNtYWxsIHdpZHRoXG4gKiAgICBjYXVzZXMgY29udGVudCB0byB3cmFwIDEgd29yZCBwZXIgbGluZTpcbiAqICAgIGh0dHBzOi8vbWVkaXVtLmNvbS9AamVzc2ViZWFjaC9iZXdhcmUtc211c2hlZC1vZmYtc2NyZWVuLWFjY2Vzc2libGUtdGV4dC01OTUyYTRjMmNiZmVcbiAqL1xuXG4udmlzdWFsbHloaWRkZW4ge1xuICAgIGJvcmRlcjogMDtcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICAgIGhlaWdodDogMXB4O1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAvKiAxICovXG59XG5cbi8qXG4gKiBFeHRlbmRzIHRoZSAudmlzdWFsbHloaWRkZW4gY2xhc3MgdG8gYWxsb3cgdGhlIGVsZW1lbnRcbiAqIHRvIGJlIGZvY3VzYWJsZSB3aGVuIG5hdmlnYXRlZCB0byB2aWEgdGhlIGtleWJvYXJkOlxuICogaHR0cHM6Ly93d3cuZHJ1cGFsLm9yZy9ub2RlLzg5NzYzOFxuICovXG5cbi52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6YWN0aXZlLFxuLnZpc3VhbGx5aGlkZGVuLmZvY3VzYWJsZTpmb2N1cyB7XG4gICAgY2xpcDogYXV0bztcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7XG59XG5cbi5ibG9ja3F1b3RlIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiBsYXJnZTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgcGFkZGluZy1sZWZ0OiAyZW07XG4gICAgcGFkZGluZy1yaWdodDogMmVtO1xufVxuXG4jc2Nwcm9ncmVzc2NvbnRhaW5lciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgICBtYXJnaW46IDEwcHggYXV0bztcbn1cblxuI3N1YmNoYXB0ZXJwcm9ncmVzcy51aS1wcm9ncmVzc2JhciAudWktcHJvZ3Jlc3NiYXItdmFsdWUge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXItcmFkaXVzOiAwcHg7XG59XG5cbiNzdWJjaGFwdGVycHJvZ3Jlc3MgPiBkaXYge1xuICAgIGJhY2tncm91bmQ6IGdyZWVuO1xufVxuXG4jc3ViY2hhcHRlcnByb2dyZXNzID4gZGl2LmxvZ2dlZG91dCB7XG4gICAgYmFja2dyb3VuZDogbGlnaHRncmF5O1xufVxuXG4ucnVuZXN0b25lX2NhcHRpb24ge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnJ1bmVzdG9uZV9jYXB0aW9uX2RpdmlkIHtcbiAgICBvcGFjaXR5OiA1MCU7XG59XG5cbiNxdWVzdGlvbnMgLnJ1bmVzdG9uZV9jYXB0aW9uOmJlZm9yZSB7XG4gICAgY291bnRlci1pbmNyZW1lbnQ6IHJzY29tcG9uZW50O1xuICAgIGNvbnRlbnQ6IFwiUHJvYmxlbTogXCIgY291bnRlcihyc2NvbXBvbmVudCkgXCIgLS0gXCI7XG59XG5cbmJvZHkge1xuICAgIGNvbG9yOiB2YXIoLS1ib2R5Rm9udCk7XG59XG5cbi5qdXB5dGVyX2NvbnRhaW5lciAub3V0cHV0IHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuXG4uanVweXRlcl9jb250YWluZXIgLm91dHB1dCB0ZCB7XG4gICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xufVxuXG4uanVweXRlcl9jb250YWluZXIgLm91dHB1dCB0aCB7XG4gICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgcGFkZGluZy1yaWdodDogNXB4O1xufVxuXG4vKlRoZW1lIHRvZ2dsZSovXG4udGhlbWUtc3dpdGNoLXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnRoZW1lLXN3aXRjaC13cmFwcGVyIGVtIHtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICBmb250LXNpemU6IDFyZW07XG59XG5cbi50aGVtZS1zd2l0Y2gge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IDM0cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiA2MHB4O1xufVxuXG4udGhlbWUtc3dpdGNoIGlucHV0IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uc2xpZGVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICAgIGJvdHRvbTogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbGVmdDogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHRyYW5zaXRpb246IDAuNHM7XG59XG5cbi5zbGlkZXI6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGJvdHRvbTogNHB4O1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgaGVpZ2h0OiAyNnB4O1xuICAgIGxlZnQ6IDRweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdHJhbnNpdGlvbjogMC40cztcbiAgICB3aWR0aDogMjZweDtcbn1cblxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM2NmJiNmE7XG59XG5cbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyOmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI2cHgpO1xufVxuXG4uc2xpZGVyLnJvdW5kIHtcbiAgICBib3JkZXItcmFkaXVzOiAzNHB4O1xufVxuXG4uc2xpZGVyLnJvdW5kOmJlZm9yZSB7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4vKkVuZCB0aGVtZSB0b2dnbGUqL1xuIiwiLyogVmFyaWFibGVzIGhvbGRpbmcgdGhlbWUgY29sb3JzICovXG46cm9vdCB7XG5cdC0tbWVudTogI0ZGRkZGRjtcbn1cblxuW2RhdGEtdGhlbWU9XCJkYXJrXCJdIHtcblx0LS1tZW51OiAjMDAwMDAwO1xufVxuXG4ubXktaGlnaGxpZ2h0ZWQtdGV4dHtcblx0YmFja2dyb3VuZC1jb2xvcjojRkZGRjk5O1xufVxuLnNvY2lhbC1oaWdobGlnaHRlZC10ZXh0e1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiNGRkNDQ0M7XG59XG4uaGlnaGxpZ2h0LW9wdGlvbi1ib3h7XG5cdHBvc2l0aW9uOmFic29sdXRlO1xuXHR0b3A6MHB4O1xuXHRsZWZ0OjBweDtcbn1cbi5oaWdobGlnaHQtb3B0aW9uLWJveCBsaXsgXG5cdGhlaWdodDoyNHB4O1xufVxuI2NvbnRpbnVlLXJlYWRpbmd7XG5cdHBhZGRpbmctdG9wOjIwcHg7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4jY29udGludWUtcmVhZGluZyBhe1xuXHRmbG9hdDpyaWdodDtcblx0bWFyZ2luLXJpZ2h0OjIwcHg7XG59XG5saS5jb21wbGV0ZWRcbntcbmxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgnY29tcGxldGVkLnBuZycpO1xufVxubGkuYWN0aXZlXG57XG5saXN0LXN0eWxlLWltYWdlOiB1cmwoJ2FjdGl2ZS5wbmcnKTtcbn1cbi5pbmZvVGV4dENvbXBsZXRlZHtcblx0bWFyZ2luLWxlZnQ6MTBweDtcblx0Zm9udC1zaXplOjAuOWVtO1xuXHRjb2xvcjojM2RjNjgyO1xuXHRkaXNwbGF5Om5vbmU7XG5cdGZvbnQtc3R5bGU6aXRhbGljO1xuXHRvcGFjaXR5OiAwLjc7XG59XG4uaW5mb1RleHRBY3RpdmV7XG5cdG1hcmdpbi1sZWZ0OjEwcHg7XG5cdGZvbnQtc2l6ZTowLjllbTtcblx0Y29sb3I6I2ZmOWYxOTtcblx0ZGlzcGxheTpub25lO1xuXHRmb250LXN0eWxlOml0YWxpYztcblx0b3BhY2l0eTogMC43O1xufVxuLmRyb3Bkb3duLW1lbnV7XG5cdGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWVudSk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweCA1cHggNXB4IDVweDtcbiAgICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGxlZnQ6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZSBvdXRzaWRlIG5vbmU7XG4gICAgbWFyZ2luOiAxcHggMCAwO1xuICAgIG1pbi13aWR0aDogMTYwcHg7XG4gICAgcGFkZGluZzogNHB4IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgICB6LWluZGV4OiAxMDAwO1xufVxuLmRyb3Bkb3duLW1lbnUgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2Mgb3V0c2lkZSBub25lO1xuICAgIG1hcmdpbjogMCAwIDlweCAyNXB4O1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbi5zaWRlYmFyLWhpZ2hsaWdodHN7XG4gICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRjk5O1xufVxuZGl2LmRvY3VtZW50d3JhcHBlciB7XG5cdGJvcmRlciA6IDAgbm9uZTtcbn1cbmRpdi5ib2R5d3JhcHBlciB7XG5cdGJvcmRlci1yaWdodDogMCBub25lO1xufVxuZGl2LnNwaGlueHNpZGViYXIge1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNDQ0NDQ0M7XG5cdHBhZGRpbmctbGVmdDogMTBweDtcbn1cbi5ib2R5Pi5zZWN0aW9uIC5zZWN0aW9ue1xuXHRwYWRkaW5nLXRvcDogMXB4O1xufVxuI2p1bXAtdG8tY2hhcHRlcntcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjQ0NDQ0NDO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjAxNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxMjAlO1xuICAgIHBhZGRpbmc6IDAuNWVtO1xuXHR3aWR0aDogODAlO1xuXHRtYXJnaW4tbGVmdDogYXV0bztcblx0bWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuI25hdmlnYXRpb24tbGlua3N7XG5cdGJhY2tncm91bmQtY29sb3I6ICNGOEY4Rjg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI0NDQ0NDQztcblx0cGFkZGluZzoxMHB4O1xuXHRtYXJnaW46MTBweDtcbn1cbiIsIi5tYXRyaXhlcV9jb250YWluZXIge1xuICBwYWRkaW5nOiA2cHggNnB4IDZweCA2cHg7XG4gIG1hcmdpbjogMHB4IDBweCA2cHggMHB4O1xufVxuXG5zcGFuLm1hdHJpeF90YWJsZSB7XG4gIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgYm9yZGVyLXdpZHRoOiAycHggMnB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDBweCAxcHg7XG4gIG1hcmdpbjogMHB4IDBweCA0cHggMHB4O1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuc3Bhbi5tYXRyaXhfY29sdW1uIHtcbiAgZGlzcGxheTogaW5saW5lLXRhYmxlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBwYWRkaW5nOiAycHggOHB4IDJweCA4cHg7XG4gIG1hcmdpbjogMHB4IDFweDtcbiAgYm9yZGVyLXdpZHRoOiAwcHggMHB4IDBweCAwcHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuc3Bhbi5tYXRyaXhfY29sdW1uIGRpdiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDFweDtcbiAgcGFkZGluZzogMnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xufVxuXG5zcGFuLm1hdHJpeF90YWJsZSAubWF0cml4X2NvbHVtbiB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG5cbnNwYW4ubWF0cml4X3RhYmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICB3aWR0aDogODUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGhlaWdodDogMnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTJweDtcbiAgei1pbmRleDogMTAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwcHggYXV0bztcbn1cblxuc3Bhbi5tYXRyaXhfdGFibGU6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgd2lkdGg6IDg1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBoZWlnaHQ6IDJweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDJweDtcbiAgei1pbmRleDogMTAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwcHggYXV0bztcbn1cblxuc3Bhbi5tYXRyaXhfY29sdW1uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogODUlO1xuICBoZWlnaHQ6IDJweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0ycHg7XG4gIHotaW5kZXg6IDEwMDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbnNwYW4ubWF0cml4X2NvbHVtbjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogODUlO1xuICBoZWlnaHQ6IDJweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDJweDtcbiAgei1pbmRleDogMTAwO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuc3Bhbi5tYXRyaXhfdGFibGUgc3Bhbi5tYXRyaXhfY29sdW1uOmJlZm9yZSB7XG4gIGhlaWdodDogMHB4O1xufVxuXG5zcGFuLm1hdHJpeF90YWJsZSBzcGFuLm1hdHJpeF9jb2x1bW46YWZ0ZXIge1xuICBoZWlnaHQ6IDBweDtcbn1cblxuc3BhbiBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDEycHg7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xufVxuXG5zcGFuLm1hdHJpeF9vcGVyYXRvciB7XG4gIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgcGFkZGluZzogMHB4O1xuICBtYXJnaW46IDBweCA0cHggMHB4IDRweDtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG5zcGFuLm1hdHJpeF9sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgcGFkZGluZzogMHB4IDBweCAwcHggMjBweDtcbiAgbWFyZ2luOiAwcHggMXB4O1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4vKiBDb2xvcnMgZm9yIG1hdHJpeCBoaWdobGlnaHRpbmcgKi9cblxuLmxpZ2h0Y3lhbkNvbG9yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRjeWFuO1xufVxuXG4ubGlnaHRncmV5Q29sb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZXk7XG59XG5cbi5wdXJwbGVDb2xvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNERkI1RTg7XG59XG5cbi55ZWxsb3dDb2xvciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGREZGOUQ7XG59XG5cblxuXG4iLCIvKioqKioqKioqKioqKioqKioqKioqIENvbG91ciByZWZlcmVuY2UgY2hhcnQqKioqKioqKioqKioqKioqXG5lbGVtZW10ICoqKioqKioqKiBwcm9wZXJ0eSAqKioqKioqKiogY29sb3VyICoqKioqKioqXG5cbndlYmdsX2NvbnRhaW5lciAgYmFja2dyb3VuZC1jb2xvciAgICAjZmNmOGUzXG5cbiovXG5cbi8qIE1ham9yIHNlY3Rpb25zICovXG4ud2ViZ2xfY29udGFpbmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG59XG5cbi53ZWJnbF9jbWRzIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogNnB4O1xufVxuXG4ud2ViZ2xfcm93MiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwcHggNHB4IDBweCA0cHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDU1MHB4O1xufVxuXG4ud2ViZ2xfZWRpdG9ycyB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZsb2F0OiBsZWZ0O1xuICBkaXNwbGF5OiBibG9jaztcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLndlYmdsX2NhbnZhcyB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZsb2F0OiBsZWZ0O1xuICBkaXNwbGF5OiBibG9jaztcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLndlYmdsX291dHB1dCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiA0cHg7XG4gIG1hcmdpbi10b3A6IDZweDtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi8qIERldGFpbHMgd2l0aGluIGVhY2ggc2VjdGlvbiAqL1xuLyogVGFiYmVkIHRpdGxlcywgdWwgaG9yaXpvbnRhbCBsaXN0ICovXG4ud2ViZ2xfbmF2X3RhYnMge1xuICBoZWlnaHQ6IDMxcHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDBweDtcbiAgcGFkZGluZzogNnB4IDBweCAwcHggMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0ZDQ0I4O1xuICBib3JkZXItY29sb3I6ICNmYmVlZDU7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbn1cblxuLndlYmdsX25hdl90YWJzIGxpIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICBtYXJnaW46IDBweCAwcHggMHB4IDRweDtcbiAgcGFkZGluZzogNHB4IDFweCA0cHggNHB4O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFNkUyQ0M7XG4gIGZvbnQtc2l6ZTogOXB0O1xufVxuXG4ud2ViZ2xfbmF2X3RhYnMgbGkgPiBhIHtcbiAgcGFkZGluZzogOHB4IDhweCA4cHggOHB4O1xuICBjb2xvcjogIzU1NTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4ud2ViZ2xfbmF2X3RhYnMgPiBsaSA+IGE6aG92ZXIge1xuICBib3JkZXItY29sb3I6ICNiNGIxOWQ7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG59XG5cbi53ZWJnbF9uYXZfdGFicyBsaS5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7XG59XG5cbi8qIFdlYmdsIGVkaXRvcnMgKi9cbi53ZWJnbF90YWJfY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNsZWFyOiBib3RoO1xuICBtYXJnaW46IDBweCAwcHggMjBweCAwcHg7XG4gIGJvcmRlcjogMHB4O1xuICBjb2xvcjogI2MwOTg1MztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgei1pbmRleDogMTtcbn1cblxuLndlYmdsX3RhYl9jb250ZW50LmFjdGl2ZSB7XG4gIHotaW5kZXg6IDI7XG59XG5cbi53ZWJnbF90YWJfY29udGVudCA+ICoge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAvKlx0cG9zaXRpb246cmVsYXRpdmU7ICovXG59XG5cbi53ZWJnbF90YWJfY29udGVudCAuY2xlYXJmaXgge1xuICBwb3NpdGlvbjogaW5pdGlhbDtcbn1cblxuLndlYmdsX3RhYl9lZGl0b3Ige1xuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjbGVhcjogYm90aDtcbiAgcGFkZGluZzogMTBweCA0cHggMTBweCA0cHg7XG4gIG1hcmdpbjogMHB4IDBweCAyMHB4IDBweDtcbiAgYm9yZGVyOiAwcHg7XG4gIGNvbG9yOiAjYzA5ODUzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xufVxuXG4vKiBzcGFuIHRoYXQgY29udGFpbnMgdGhlIHRhYmJlZCB0ZXh0IGVkaXRvcnMgKi9cbi53ZWJnbF9jb2RlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4ud2ViZ2xfdGFiX2NvbnRlbnRzX3RleHQge1xuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjbGVhcjogYm90aDtcbiAgcGFkZGluZzogMTBweCA0cHggMTBweCA0cHg7XG4gIG1hcmdpbjogMHB4IDBweCAyMHB4IDBweDtcbiAgYm9yZGVyOiAwcHg7XG4gIGNvbG9yOiAjYzA5ODUzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmOGUzO1xuICB6LWluZGV4OiAxO1xufVxuXG4ud2ViZ2xfZXJyb3JNZXNzYWdlcyB7XG4gIGNvbG9yOiByZWQ7XG59XG5cbi53ZWJnbF93YXJuaW5nTWVzc2FnZXMge1xuICBjb2xvcjogcmdiKDE3MCwgMzQsIDE2NCk7XG59XG5cbi53ZWJnbF9pbmZvTWVzc2FnZXMge1xuICBjb2xvcjogcmdiKDI0LCAxNDQsIDY0KTtcbn1cblxuLndlYmdsX291dHB1dF9kaXYge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAycHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JleTtcbiAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgcGFkZGluZy10b3A6IDRweDtcbiAgcGFkZGluZy1sZWZ0OiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgaGVpZ2h0OiAxNGVtO1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbi53ZWJnbF9lZGl0b3JfaGlnaGxpZ2h0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVFRTsgLyogdmVyeSBsaWdodCBncmV5ICovXG59XG5cbi8qIFRvIGFsd2F5cyBzaG93IHRoZSBzY3JvbGwgYmFyIGluIGEgZGl2ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgd2lkdGg6IDdweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLC41KTtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuNSk7XG59XG5cbi53ZWJnbF9idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweCA2cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRoaXN0bGU7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW8tdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ud2ViZ2xfY2hlY2tib3gge1xufVxuXG4ud2ViZ2xfdGFiYmVkX2VkaXRvciB7XG4gIHdpZHRoOiAxMDAlO1xuICByZXNpemU6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogOXB0O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbi5jYW52YXMzRCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5Db2RlTWlycm9yLndlYmdsLWRlZmF1bHQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDhwdDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG5idXR0b24uYnRuLndlYmdsLWRlZmF1bHQge1xuICBmb250LXNpemU6IDhwdDtcbn1cblxuXG4iLCIuaGlkZGVue1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4udmlldy10b2dnbGV7XG4gIHBhZGRpbmc6IDAuODVlbTtcbn1cblxuLnByZXNlbnRhdGlvbi1tb2RlIC5zZWN0aW9uICp7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5wcmVzZW50YXRpb24tbW9kZSAuc2VjdGlvbiAucnVuZXN0b25lLCAucHJlc2VudGF0aW9uLW1vZGUgLnNlY3Rpb24gLnJ1bmVzdG9uZSAqe1xuICBkaXNwbGF5OiBpbml0aWFsO1xufVxuXG4ucHJlc2VudHtcbiAgICBoZWlnaHQ6IDEwMHZoO1xufVxuXG4uZnVsbC1oZWlnaHR7XG4gICAgaGVpZ2h0OiAxMDB2aDtcbn1cblxuLmJvdHRvbXtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xufVxuXG4jY29kZURpc3BsYXlEaXZ7XG4gIHdpZHRoOiBhdXRvIWltcG9ydGFudDtcbn1cblxuZGl2LkV4ZWN1dGlvblZpc3VhbGl6ZXIgI2RhdGFWaXp7XG4gIG1hcmdpbjogMDsgIFxufVxuXG5kaXYuRXhlY3V0aW9uVmlzdWFsaXplciBkaXYjc3RhY2tIZWFkZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbiNzdGFja0ZyYW1le1xuICBkaXNwbGF5OiBibG9jayFpbXBvcnRhbnQ7XG59XG5cbiNzdGFja0hlYXBUYWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4jc3RhY2tIZWFwVGFibGUgdHIge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbn1cblxuZGl2LkV4ZWN1dGlvblZpc3VhbGl6ZXIgdGQjc3RhY2tfdGQsIGRpdi5FeGVjdXRpb25WaXN1YWxpemVyIHRkI2hlYXBfdGQge1xuICBmbGV4OiAxO1xufVxuXG4ucHJlc2VudGF0aW9uLXRpdGxlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnByZXNlbnQgLnByZXNlbnRhdGlvbi10aXRsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5kaXYuRXhlY3V0aW9uVmlzdWFsaXplciBkaXYjaGVhcCB7XG4gIGZsb2F0OiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG5cbiNzdGFja190ZCB0ciB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cblxuI2hlYXBfdGQgdHIge1xuICBkaXNwbGF5OiB0YWJsZS1yb3c7XG59XG5cbiNjb2RlRGlzcGxheURpdntcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbi8qICBibm0gLS0gY29tbWVudCB0aGlzIG91dCBmb3Igbm93IGFzIGl0IGJyZWFrcyBjb2RlbGVucyBpbmRlbnRhdGlvbiBhbmQgYXJyb3dzXG4udmlzdWFsaXplciB0cntcbiAgZGlzcGxheTogZmxleDtcbn1cbiovXG5cbiN2aXpMYXlvdXRUZHtcbiAgZmxleDogMTtcbn1cblxuI3ZpekxheW91dFRkRmlyc3Qge1xuICBmbGV4OiAyO1xufVxuXG4jdml6TGF5b3V0VGRTZWNvbmQge1xuICBmbGV4OiAxO1xufVxuXG4jdml6TGF5b3V0VGRUaGlyZCB7XG4gIGZsZXg6IDI7XG59XG5cbiNwcm9nT3V0cHV0cyB7XG4gIGRpc3BsYXk6IGJsb2NrIWltcG9ydGFudDtcbiAgbWFyZ2luOiAwIDIwcHg7XG4gIHdpZHRoOiA2MCU7XG59XG5cbiNweVN0ZG91dCB7XG4gIHdpZHRoOiAxMDAlIWltcG9ydGFudDtcbn1cblxuZGl2LkV4ZWN1dGlvblZpc3VhbGl6ZXIgI3B5U3Rkb3V0IHtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG5kaXYuRXhlY3V0aW9uVmlzdWFsaXplciB0YWJsZS52aXN1YWxpemVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5wcmVzZW50ICN2aXpMYXlvdXRUZFRoaXJke1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uYWMtYmxvY2t7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cblxuLnJvdy1tb2RlIC5hYy1ibG9ja3tcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5yb3ctbW9kZSAuYWNfb3V0cHV0LCAucm93LW1vZGUgLmFjX2NvZGVfZGl2e1xuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG5cbi5yb3ctbW9kZSAuYWNfY29kZV9kaXZ7XG4gIG1hcmdpbi1ib3R0b206IDFlbTtcbn1cblxuLmFjX3NlY3Rpb24+KiB7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLmFjX291dHB1dHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLmFjX291dHB1dCBwcmUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlIWltcG9ydGFudDtcbiAgbWluLWhlaWdodDogNjBweDtcbn1cblxuLkNvZGVNaXJyb3J7XG4gIG1hcmdpbjogMDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIG1pbi1oZWlnaHQ6IDYwcHg7XG59XG5cbi5jb250YWluZXIgLnNlY3Rpb24gPiBydW5lc3RvbmU6bm90KC5hY19zZWN0aW9uKXtcbiAgbWF4LXdpZHRoOm5vbmU7XG4gIG1hcmdpbjogMDtcbn1cblxuLnByZXNlbnRhdGlvbi1vcHRpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cblxuLmxheW91dC1idG4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJFRUQ1O1xuICBib3JkZXI6IDJweCBzb2xpZCAjREZENEJFO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIHBhZGRpbmc6IC4yNXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbjogMCAuNXJlbTtcbiAgdHJhbnNpdGlvbjogYWxsIC4ycyBlYXNlO1xufVxuXG4ubGF5b3V0LWJ0bi5hY3RpdmUtbGF5b3V0LCAubGF5b3V0LWJ0bjpmb2N1cyB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICM5Nzk3OTc7XG4gIG91dGxpbmU6IG5vbmU7XG59XG5cbi5za2V0Y2hwYWQtY29udGFpbmVyIHtcbiAgbWluLXdpZHRoOiA1MCU7XG4gIG1pbi1oZWlnaHQ6IDMwMHB4O1xuICBwYWRkaW5nOiAwIDE1cHg7XG59XG5cbi5jYXJkLW1vZGUgLnNrZXRjaHBhZC1jb250YWluZXIge1xuICB3aWR0aDogNTAlO1xuICBtYXJnaW46IDA7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgLyptYXJnaW46IDAgLTE1cHg7Ki9cbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLnJvdy1tb2RlIC5lcnJvciB7XG4gIG1hcmdpbjogMjBweCAxNXB4O1xufVxuXG4uY2FyZC1tb2RlIC5lcnJvciB7XG4gIG1hcmdpbjogMjhweCAwIDA7XG4gIHdpZHRoOiA1MCU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMCAxNXB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBtYXJnaW4tdG9wOiAyOHB4O1xufVxuXG4uc2tldGNocGFkIHtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIGJvcmRlcjogMnB4IHNvbGlkIGdyZXk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDMwMHB4O1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmJ0bi1wcmVzZW50ZXIge1xuICBwYWRkaW5nOiAuNXJlbSAxcmVtO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIG1hcmdpbjogMS41cmVtIDAgMS41cmVtIDEuNXJlbTtcbn1cblxuLmJ0bi1ncmV5LW91dGxpbmUge1xuICBib3JkZXI6IDJweCBzb2xpZCBncmV5O1xuICBjb2xvcjogZ3JleTtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG59XG5cbi5idG4tZ3JleS1zb2xpZCB7XG4gIGJvcmRlcjogMnB4IHNvbGlkIGdyZXk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYmFja2dyb3VuZDogZ3JleTtcbn1cblxuYm9keS5wcmVzZW50IC5hY19zZWN0aW9uPioge1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG5ib2R5LnByZXNlbnQgaWZyYW1lIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbmJvZHkucHJlc2VudCB7XG4gIC8qIGZvbnQtc2l6ZTogMi4wZW07ICovXG59XG5cbmJvZHkucHJlc2VudCAjcmVsYXRpb25zLXByZXYsIGJvZHkucHJlc2VudCAjcmVsYXRpb25zLW5leHQsIGJvZHkucHJlc2VudCAubmF2TGlua0JnIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuYm9keS5wcmVzZW50IC5idG4tcHJlc2VudGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuYm9keS5wcmVzZW50IC5idG4tcHJlc2VudGVyLnByZXYtZXhlcmNpc2UgeyBsZWZ0OiAwcHg7IH1cbmJvZHkucHJlc2VudCAuYnRuLXByZXNlbnRlci5uZXh0LWV4ZXJjaXNlIHsgcmlnaHQ6IDBweDsgfVxuXG4vKiAuY29sLW1kLTEyIHtcbiAgd2lkdGg6IDU4LjMzMzMzMzMzMzMzMzMzNiU7XG59XG5cbi5jYXJkLW1vZGUgLmNvbC1tZC03IHtcbiAgd2lkdGg6IDUwJTtcbn0gKi9cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/