/*
Theme Name: Full Circle Health Network
Author: Pikalabs
*/

*, *::before, *::after {
  box-sizing: border-box;
}

* {
  margin: 0;
  padding: 0;
  text-wrap: pretty;
  overflow-wrap: break-word;
  font: inherit;
}

strong {
  font-weight: 700;
}

em {
  font-style: italic;
}

body {
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

img, picture, video, canvas, svg {
  display: block;
  max-width: 100%;
}

a {
  text-decoration: none;
}

button {
  background-color: transparent;
  border: none;
  cursor: pointer;
}

:root{
  --color-blue: #6f8ccb;
  --color-purple: #726eb8;
  --color-orange: #ffb800;
  --color-green: #afbd20;
  
  --color-black: #19181c;

  --color-white-1: #ffffff;
  --color-white-2: #fbfbfa;
  --color-white-3: #f6f6f4;

  --color-gray-1: #eeeeec;
  --color-gray-2: #d9d9d7;
  --color-gray-3: #636362;
  --color-gray-4: #444443;

  --font: "Open Sans", sans-serif;

  /* left/right padding on outer blocks (prevents content from touching the edge of the screen) */
  --spacing-outer: 30px;

  /* spacing for Section.php top and bottom padding */
  --spacing-section: 60px;
  --spacing-section-small: 20px;
  --spacing-section-large: 60px;
  
  /* gap between items within sections */
  --spacing-items: 30px;
  --spacing-columns: 40px;
  --spacing-rows: 40px;

  /* non-heading sizes */
  --text-size-xs: 14px;
  --text-size-s: calc(var(--text-size-xs) * 1.15); /* 16.1px (16px)*/
  --text-size-m: calc(var(--text-size-s) * 1.15); /* 18.515px (18px)*/
  --text-size-l: calc(var(--text-size-m) * 1.15); /* 21.29225px (21px)*/
  --text-size-xl: calc(var(--text-size-l) * 1.15); /* 24.4860875px (24px)*/

  /* heading sizes */
  --heading-size-s: calc(var(--text-size-xl) * 1.15); /* 28.159000625px (28px) */
  --heading-size-m: 32px;
  --heading-size-l: 52px;

  /* Leading-trim margins for Open Sans, computed via Capsize at line-height: 1.
     For a taller line-height, subtract (line-height - 1) * 0.5em from each. */
  --text-trim-cap: -0.1741em;
  --text-trim-baseline: -0.1121em;

  /* max width of outer blocks */
  --width-outer: 1200px;
  --width-outer-wide: 1600px;

  font-size: var(--text-size-s);
}

body {
  font-family: var(--font);
  color: var(--color-black);
  background-color: var(--color-white-1);
  margin: 0;
  width: 100%;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

main {
  flex-grow: 1;
}

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

input[type="checkbox"],
input[type="radio"] {
  appearance: none;
  -webkit-appearance: none;
  width: 16px;
  height: 16px;
  margin: 0;
  flex-shrink: 0;
  position: relative;
  border: 1px solid #bbb;
  background-color: var(--color-white-1);
}

input[type="checkbox"] {
  border-radius: 4px;
}

input[type="radio"] {
  border-radius: 50%;
}

input[type="checkbox"]:checked,
input[type="radio"]:checked {
  background-color: var(--color-blue);
  border-color: var(--color-blue);
}

input[type="checkbox"]:checked::after {
  content: '';
  position: absolute;
  left: 5px;
  top: 2px;
  width: 4px;
  height: 8px;
  border: solid var(--color-white-1);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

input[type="radio"]:checked::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 6px;
  height: 6px;
  background-color: var(--color-white-1);
  border-radius: 50%;
  transform: translate(-50%, -50%);
}

/* visually hides content while keeping it available to screen readers,
   e.g. for aria-live status regions or extra context on icon-only controls */

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

header {
    position: sticky;
    top: 0;
    z-index: 10;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
}

/* Sticky is what makes the header eat a growing share of the viewport at
   high browser zoom — zoom doesn't shrink the header's own CSS px height
   (padding/font-size stay the same), only how many CSS px fit in the
   viewport, so a fixed-height sticky header becomes a bigger and bigger
   fraction of a shrinking one. Below this viewport height (whether from
   zoom or an actually-short window) it's not worth keeping pinned — let it
   scroll away like normal content instead. Doesn't conflict with Menu.php
   setting header.style.position = 'static' inline while the mobile menu is
   open (that's about the menu specifically, at any viewport size; this is
   about the header's default, unrelated to whether the menu is open). */

@media (max-height: 500px) {
    header {
        position: static;
    }
}

/* Mobile nav popup (Menu.php block). Styled globally, not in the block's
   own scoped CSS, because it's moved in js() to be a direct sibling of
   <header> while open (see openPopup) — plain in-flow content directly
   below the header at full page width, unaffected by whatever layout the
   header's own inner content (logo, etc.) uses. Scoped block CSS only
   reaches descendants of the block's own wrapper, so once it's moved out,
   rules there wouldn't apply to it — hence duplicating the .menu styling
   here rather than sharing it with the desktop nav in Menu.php. */

.mobile-nav {
    display: none;
    width: 100%;
    box-sizing: border-box;
    padding: 10px 20px 30px;
    background-color: var(--section-background, var(--color-white-1));
}

.mobile-nav.-open {
    display: block;
}

.mobile-nav .menu {
    display: flex;
    flex-direction: column;
    margin: 0;
    padding: 0;
}

.mobile-nav .menu li {
    display: flex;
    flex-direction: column;
    list-style: none;
    margin: 0;
    padding: 5px 0;
}

.mobile-nav .menu > li:not(:last-child) {
    border-bottom: 1px solid var(--color-gray-1);
}

.mobile-nav .menu a {
    color: var(--color-black);
    text-decoration: none;
    white-space: nowrap;
    font-size: var(--text-size-m);
    display: block;
    padding: 12px 10px;
}

.mobile-nav .menu > li.current-menu-item > a,
.mobile-nav .menu > li.current-menu-ancestor > a,
.mobile-nav .menu .sub-menu li.current-menu-item > a {
    font-weight: 700;
    color: var(--color-blue);
}

.mobile-nav .menu li.menu-item-has-children {
    position: relative;
}

/* Only ever opened by tap here, so .-submenu-open reliably matches what's
   actually showing — chevron-right ("›") rotates 90deg into chevron-down's
   shape (same glyph, just rotated, so it can animate smoothly — unlike
   swapping between two different `content` glyphs, which can't
   transition). */

.mobile-nav .menu li.menu-item-has-children > a::after {
    content: '\f054';
    font: var(--fa-font-solid);
    font-size: 0.9em;
    margin-left: 6px;
    display: inline-block;
    transition: transform 0.3s; /* matches the hamburger-to-X timing */
}

.mobile-nav .menu li.menu-item-has-children.-submenu-open > a::after {
    transform: rotate(90deg);
}

.mobile-nav .menu .sub-menu {
    display: none;
    flex-direction: column;
    margin: 4px 0 8px;
    padding: 8px 0;
    list-style: none;
    background-color: var(--color-white-1);
    border-radius: 8px;
}

.mobile-nav .menu li.menu-item-has-children.-submenu-open > .sub-menu {
    display: flex;
}

.mobile-nav .menu .sub-menu a {
    padding: 8px 10px 8px 24px;
    font-size: var(--text-size-s);
}

footer {
    background-color: var(--color-blue);
    padding: var(--spacing-section) var(--spacing-outer) calc(var(--spacing-section) / 2);
}

.footer-container {
    display: flex;
    justify-content: space-between;
    gap: var(--spacing-columns);
    max-width: var(--width-outer);
    margin: 0 auto;
}

.footer-column {
    flex: 1;
    min-width: 0;
}

.footer-column:not(.footer-logo) {
    flex: 0 0 auto;
    white-space: nowrap;
}

.footer-logo {
    flex: 0 1 auto;
    max-width: 300px;
    align-self: center;
}

.footer-logo img {
    display: block;
    max-width: 100%;
    height: auto;
}

.footer-heading {
    color: var(--color-white-1);
    font-weight: 700;
    margin-bottom: 16px;
}

.footer-links {
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.footer-links a {
    color: var(--color-white-1);
    text-decoration: none;
}

.footer-links a:hover {
    text-decoration: underline;
}

.footer-copyright {
    max-width: var(--width-outer);
    margin: calc(var(--spacing-items) * 2) auto 0;
    color: var(--color-white-1);
    font-size: var(--text-size-xs);
    text-align: center;
}

@media (max-width: 900px) {
    .footer-container {
        flex-wrap: wrap;
        justify-content: space-between;
    }

    .footer-logo {
        flex: 1 1 100%;
        max-width: none;
        align-self: center;
    }

    .footer-logo img {
        max-width: min(320px, 100%);
        margin: 0 auto;
    }
}

@media (max-width: 600px) {
    .footer-container {
        flex-direction: column;
        flex-wrap: nowrap;
        justify-content: flex-start;
        align-items: flex-start;
    }

    .footer-logo {
        align-self: flex-start;
    }

    .footer-logo img {
        margin: 0;
    }

    .footer-copyright {
        text-align: left;
    }
}

.button {
        background-color: var(--color-blue);
        color: var(--color-white-1);
        border: none;
        padding: 12px 24px;
        font-size: var(--text-size-s);
        font-weight: 500;
        cursor: pointer;
        text-decoration: none;
        text-transform: uppercase;
        border-radius: 100px; 
    }

.button.-arrow {
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 8px;
    }

.button.-arrow::after {
        content: '\f061';
        font: var(--fa-font-solid);
        position: relative;
        top: 0.5px;
    }

.button.-arrow:hover::after {
        animation: button-arrow-nudge 0.4s ease;
    }

@keyframes button-arrow-nudge {
        0% { transform: translateX(0); }
        50% { transform: translateX(4px); }
        100% { transform: translateX(0); }
    }

.custom-select {
    position: relative;
    display: inline-block;
    min-width: 200px;
    font-size: var(--text-size-s);
}

.custom-select-native {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    opacity: 0;
    pointer-events: none;
}

.custom-select-trigger {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 10px 16px;
    border: 1px solid var(--color-gray-3);
    border-radius: 8px;
    background-color: var(--section-background, var(--color-white-1));
    color: var(--color-black);
    font: inherit;
    text-align: left;
    cursor: pointer;
}

.custom-select-trigger::after {
    content: '\f078';
    font: var(--fa-font-solid);
    font-size: 0.75em;
    flex-shrink: 0;
    transition: transform 0.15s ease;
}

.custom-select-trigger[aria-expanded="true"]::after {
    transform: rotate(180deg);
}

.custom-select-trigger:focus-visible {
    outline: 2px solid var(--color-blue);
    outline-offset: 2px;
}

.custom-select-panel {
    /* positioned via inline top/left/width, set in JS (positionPanel) —
       the panel is portaled to <body> when opened so it can escape any
       ancestor block's stacking context (container-type:inline-size implies
       CSS containment, which traps a plain absolute+z-index here) */
    position: fixed;
    z-index: 20;
    background-color: var(--section-background, var(--color-white-1));
    border: 1px solid var(--color-gray-3);
    border-radius: 8px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    /* clips the listbox's scrollbar to the rounded corners below, since a
       scrollbar drawn by an element that also has border-radius doesn't
       reliably get clipped by that same element's own radius */
    overflow: hidden;
}

.custom-select-panel[hidden] {
    display: none;
}

.custom-select-options {
    margin: 0;
    padding: 4px;
    list-style: none;
    max-height: 260px;
    overflow-y: auto;
}

.custom-select-options li {
    display: flex;
    align-items: center;
    padding: 8px 12px;
    border-radius: 6px;
    cursor: pointer;
}

.custom-select-options li:hover {
    background-color: var(--color-gray-2);
}

.custom-select-options li:focus {
    outline: none;
    background-color: var(--color-blue);
    color: var(--color-white-1);
}

.custom-select-options li[aria-selected="true"] {
    font-weight: 600;
}

/* Multi-select mode only (see custom-select.js) — styled to match the
   site's real checkboxes (core.css) so it fits in visually. */

.custom-select-checkbox {
    flex-shrink: 0;
    width: 16px;
    height: 16px;
    margin-right: 10px;
    position: relative;
    border: 1px solid #bbb;
    border-radius: 4px;
    background-color: var(--color-white-1);
}

li[aria-selected="true"] .custom-select-checkbox {
    background-color: var(--color-blue);
    border-color: var(--color-blue);
}

li[aria-selected="true"] .custom-select-checkbox::after {
    content: '';
    position: absolute;
    left: 5px;
    top: 2px;
    width: 4px;
    height: 8px;
    border: solid var(--color-white-1);
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}

/* :focus above already gives the whole row a blue background — keep the
   checkbox's own selected-state colors from disappearing into it */

.custom-select-options li:focus .custom-select-checkbox {
    border-color: var(--color-white-1);
}

table {
    border-collapse: collapse;
}

table td, table th {
        border: 1px solid var(--color-gray-3);
        padding: 10px;
    }

table th {
        font-weight: bold;
        text-align: left;
    }

.singlepost-outer {
    padding: var(--spacing-section) var(--spacing-outer);
    color: var(--color-black);
    background-color: var(--color-white-3);
    overflow: hidden;
}

.singlepost {
    display: flex;
    align-items: flex-start;
    gap: var(--spacing-columns);
    max-width: 800px;
    margin: 0 auto;
    container-type: inline-size;
}

.singlepost-main {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--spacing-items);
}

.post-heading {
    display: flex;
    justify-content: center;
    padding-bottom: 30px;
    margin-bottom: var(--spacing-items);
    border-bottom: 1px solid var(--color-gray-2);
}

.post-heading-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 16px;
    max-width: 800px;
    width: 100%;
}

.post-heading .post-title {
    font-size: var(--heading-size-l);
    font-weight: 700;
    /* leading-trim, same technique as .heading-text in Heading.php — pulls
       the text up/down to its cap-height/baseline instead of the extra
       whitespace line-height normally adds above/below it. --text-trim-cap
       and --text-trim-baseline (core.css, on :root) are already available
       here globally, no block-scoping issue to work around. */
    --lh: 1.1;
    line-height: var(--lh);
    margin-top: calc(var(--text-trim-cap) - (var(--lh) - 1) * 0.5em);
    margin-bottom: calc(var(--text-trim-baseline) - (var(--lh) - 1) * 0.5em);
}

.post-heading .post-meta {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--spacing-items);
}

.post-heading .post-date {
    font-size: var(--text-size-xs);
    font-weight: 700;
    color: var(--color-gray-3);
}

.post-heading .post-terms {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.post-heading .post-term {
    display: inline-block;
    font-size: var(--text-size-xs);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    padding: 4px 10px;
    border-radius: 100px;
    background-color: var(--color-gray-2);
    color: var(--color-black);
}

.post-heading .post-term.-category {
    background-color: var(--color-green);
    color: var(--color-white-1);
}

/* The site-wide CSS reset zeroes margin/padding and sizing on every element,
   which also strips normal formatting out of post content (headings collapse
   to body text size, lists lose their indent/bullets, spacing disappears).
   Restore just enough of that here, scoped to post content specifically. */

.singlepost .post-text h1,
.singlepost .post-text h2,
.singlepost .post-text h3,
.singlepost .post-text h4 {
    font-weight: 600;
    /* leading-trim, same technique as .post-title/.heading-text (Heading.php)
       above — but layered on top of the 30px/15px designed spacing rather
       than replacing it outright: unlike those two, this margin is the
       actual spacing mechanism between headings and surrounding paragraphs
       here (freeform content, no flex gap to fall back on), not just
       cosmetic cleanup on top of one. --lh matches the line-height these
       already had (1.5, inherited from body — never set explicitly here). */
    --lh: 1.5;
    line-height: var(--lh);
    margin-top: calc(30px + var(--text-trim-cap) - (var(--lh) - 1) * 0.5em);
    margin-bottom: calc(15px + var(--text-trim-baseline) - (var(--lh) - 1) * 0.5em);
}

/* h1 kept for existing post content only — the classic editor no longer
   offers it (block_formats in theme.php), since the post title itself is
   the page's one H1. New content should start at h2. */

.singlepost .post-text h1 { font-size: var(--text-size-xl); }

.singlepost .post-text h2 { font-size: var(--text-size-l); }

.singlepost .post-text h3 { font-size: var(--text-size-m); }

.singlepost .post-text h4 { font-size: var(--text-size-s); }

.singlepost .post-text p {
    margin-bottom: 20px;
}

.singlepost .post-text ul,
.singlepost .post-text ol {
    margin-bottom: 20px;
    padding-left: 24px;
}

.singlepost .post-text ul { list-style: disc; }

.singlepost .post-text ol { list-style: decimal; }

.singlepost .post-text li {
    margin-bottom: 8px;
}

.singlepost .post-text blockquote {
    margin-bottom: 20px;
    padding-left: 20px;
    border-left: 3px solid var(--color-gray-3);
    font-style: italic;
}

.singlepost .post-text a {
    text-decoration: underline;
}

/* Default/fallback: centered. Also what .aligncenter and any image with no
   recognized alignment class end up as, since nothing more specific below
   overrides these two properties for them. */

.singlepost .post-text img {
    max-height: 600px;
    width: auto;
    height: auto; /* an image wider than the content column gets shrunk by
        the global reset's img{max-width:100%} — without this, its height
        stays pinned to its full-size HTML height attribute instead of
        scaling down to match, stretching/squashing it out of proportion */
    margin-left: auto;
    margin-right: auto;
}

/* Classic editor's own native image alignment. Two shapes depending on
   whether a caption was set:
     no caption:   <img class="alignleft|aligncenter|alignright|alignnone ...">
     with caption: <div class="wp-caption alignleft|aligncenter|alignright|alignnone" style="width:Xpx">
                       <img ...>
                       <p class="wp-caption-text">...</p>
                   </div>
   None of these four classes had any effect before this: every <img> was
   unconditionally centered by the rule above regardless of its own align
   class, and .wp-caption had no styling at all — so a captioned image's
   chosen alignment did nothing (it just sat in normal flow, reading as
   left-aligned), while an uncaptioned image was always forced to center
   regardless of what alignment was actually picked. */

.singlepost .post-text img.alignnone {
    margin-left: 0;
    margin-right: 0;
}

.singlepost .post-text img.alignleft {
    float: left;
    margin: 4px 20px 20px 0;
}

.singlepost .post-text img.alignright {
    float: right;
    margin: 4px 0 20px 20px;
}

.singlepost .post-text .wp-caption {
    max-width: 100%;
    margin-bottom: 20px;
}

.singlepost .post-text .wp-caption.aligncenter {
    margin-left: auto;
    margin-right: auto;
}

.singlepost .post-text .wp-caption.alignleft {
    float: left;
    margin: 4px 20px 20px 0;
}

.singlepost .post-text .wp-caption.alignright {
    float: right;
    margin: 4px 0 20px 20px;
}

/* Floated images (left/right) render at their natural width (capped only
   by the global reset's img{max-width:100%}, same as any other image) —
   no longer artificially shrunk to fit beside text. Instead, js/
   post-image-float.js measures whether that leaves enough room for text
   to wrap beside it (container width minus image width) and adds -fullfix
   when it doesn't, which drops the float and centers the image full-width
   with text below instead — reevaluated on load/resize since it depends
   on each image's own actual rendered size, not a fixed breakpoint. */

.singlepost .post-text img.alignleft.-fullfix,
.singlepost .post-text img.alignright.-fullfix {
    float: none;
    display: block;
    margin-left: auto;
    margin-right: auto;
}

.singlepost .post-text .wp-caption.alignleft.-fullfix,
.singlepost .post-text .wp-caption.alignright.-fullfix {
    float: none;
    margin-left: auto;
    margin-right: auto;
}

/* No .wp-caption img rule needed — WordPress already sizes the wrapping
   .wp-caption div (inline style="width:...") to match the image itself, so
   it just falls back to the plain img rule above (width:auto + max-height,
   which already preserves aspect ratio correctly) rather than needing its
   own override. An earlier version of this rule set width:100% without
   height:auto, which stretched images out of proportion — easier to avoid
   entirely here since nothing actually required overriding img sizing for
   this case in the first place. */

.singlepost .post-text .wp-caption-text {
    margin-top: 8px;
    font-size: var(--text-size-xs);
    font-style: italic;
    color: var(--color-gray-4);
    text-align: center;
}

.singlepost .post-text .wp-caption.alignleft .wp-caption-text {
    text-align: center;
}

.singlepost .post-text .wp-caption.alignright .wp-caption-text {
    text-align: center;
}

.singlepost .post-text > *:last-child {
    margin-bottom: 0;
}

.post-footer {
    display: flex;
    justify-content: center;
    margin-top: var(--spacing-items);
    padding-top: 55px;
    border-top: 1px solid var(--color-gray-2);
}

dialog.modal {
    padding: 0;
    border: none;
    max-width: min(90vw, 800px);
    width: 100%;
    margin: auto;
}

dialog.modal::backdrop {
        background: rgba(0, 0, 0, 0.5);
    }

.modal-content {
    padding: var(--spacing-outer);
}

.modal-close {
    position: absolute;
    top: 4px;
    right: 6px;
    background: none;
    border: none;
    font-size: 28px;
    cursor: pointer;
    line-height: 1;
}

/* 
extend the background color of the last section all the way to the bottom
this fills a potential awkward-looking whitespace below the last section
*/

main {
    overflow: hidden;
}

main .block-section:last-child {
    position: relative;
}

main .block-section:last-child::after {
    position: absolute;
    top: 100%;
    left: 0;
    height: 90vh;
    width: 100vw;
    content: '';
    background-color: var(--section-background, var(--color-white-1));
}

/* dark gray heading, except when inside hero (then don't change) */

.block-section:first-child .block-heading .root {
    color: var(--color-black) !important;
}

/* top up the gap above Boxes/Team/IconBoxes so it matches their own internal
   row-gap, since the default gap above a block runs on --spacing-items. only
   applies when there's a preceding block, since the first block needs no
   top-up. */

.block + .block-boxes,
.block + .block-team,
.block + .block-iconboxes {
    margin-top: max(0px, calc(var(--spacing-rows) - var(--spacing-items)));
}
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy9zdHlsZS5jc3MiLCJjc3MvcmVzZXQuY3NzIiwiY3NzL2NvcmUuY3NzIiwiY3NzL2hlYWRlci5jc3MiLCJjc3MvZm9vdGVyLmNzcyIsImNzcy9idXR0b24uY3NzIiwiY3NzL2N1c3RvbS1zZWxlY3QuY3NzIiwiY3NzL3RhYmxlLmNzcyIsImNzcy9zaW5nbGVwb3N0LmNzcyIsImNzcy9tb2RhbC5jc3MiLCJjc3MvYm9kZ2UuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQzs7QUNIRDtFQUNFLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLFNBQVM7RUFDVCxVQUFVO0VBQ1YsaUJBQWlCO0VBQ2pCLHlCQUF5QjtFQUN6QixhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxnQkFBZ0I7RUFDaEIsbUNBQW1DO0FBQ3JDOztBQUVBO0VBQ0UsY0FBYztFQUNkLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSw2QkFBNkI7RUFDN0IsWUFBWTtFQUNaLGVBQWU7QUFDakI7O0FDdENBO0VBQ0UscUJBQXFCO0VBQ3JCLHVCQUF1QjtFQUN2Qix1QkFBdUI7RUFDdkIsc0JBQXNCOztFQUV0QixzQkFBc0I7O0VBRXRCLHdCQUF3QjtFQUN4Qix3QkFBd0I7RUFDeEIsd0JBQXdCOztFQUV4Qix1QkFBdUI7RUFDdkIsdUJBQXVCO0VBQ3ZCLHVCQUF1QjtFQUN2Qix1QkFBdUI7O0VBRXZCLCtCQUErQjs7RUFFL0IsK0ZBQStGO0VBQy9GLHFCQUFxQjs7RUFFckIsbURBQW1EO0VBQ25ELHVCQUF1QjtFQUN2Qiw2QkFBNkI7RUFDN0IsNkJBQTZCOztFQUU3QixzQ0FBc0M7RUFDdEMscUJBQXFCO0VBQ3JCLHVCQUF1QjtFQUN2QixvQkFBb0I7O0VBRXBCLHNCQUFzQjtFQUN0QixvQkFBb0I7RUFDcEIsK0NBQStDLEVBQUUsaUJBQWlCO0VBQ2xFLDhD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QUFjO0FBQ2xCOztBQ3pCQTs7O0NBR0M7O0FBQ0Q7SUFDSSxnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsU0FBUztJQUNULE9BQU87SUFDUCxZQUFZO0lBQ1osWUFBWTtJQUNaLFdBQVc7SUFDWCxpRUFBaUU7QUFDckU7O0FBRUEsbUVBQW1FOztBQUNuRTtJQUNJLG9DQUFvQztBQUN4Qzs7QUFFQTs7O1lBR1k7O0FBQ1o7OztJQUdJLHNFQUFzRTtBQUMxRSIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuVGhlbWUgTmFtZTogRnVsbCBDaXJjbGUgSGVhbHRoIE5ldHdvcmtcbkF1dGhvcjogUGlrYWxhYnNcbiovXG5cbkBpbXBvcnQgJ3Jlc2V0LmNzcyc7XG5AaW1wb3J0ICdjb3JlLmNzcyc7XG5AaW1wb3J0ICdoZWFkZXIuY3NzJztcbkBpbXBvcnQgJ2Zvb3Rlci5jc3MnO1xuQGltcG9ydCAnYnV0dG9uLmNzcyc7XG5AaW1wb3J0ICdjdXN0b20tc2VsZWN0LmNzcyc7XG5AaW1wb3J0ICd0YWJsZS5jc3MnO1xuQGltcG9ydCAnc2luZ2xlcG9zdC5jc3MnO1xuQGltcG9ydCAnbW9kYWwuY3NzJztcbkBpbXBvcnQgJ2JvZGdlLmNzcyc7IiwiKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbioge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHRleHQtd3JhcDogcHJldHR5O1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBmb250OiBpbmhlcml0O1xufVxuXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuXG5lbSB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuYm9keSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xufVxuXG5pbWcsIHBpY3R1cmUsIHZpZGVvLCBjYW52YXMsIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbmEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbmJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn0iLCI6cm9vdHtcbiAgLS1jb2xvci1ibHVlOiAjNmY4Y2NiO1xuICAtLWNvbG9yLXB1cnBsZTogIzcyNmViODtcbiAgLS1jb2xvci1vcmFuZ2U6ICNmZmI4MDA7XG4gIC0tY29sb3ItZ3JlZW46ICNhZmJkMjA7XG4gIFxuICAtLWNvbG9yLWJsYWNrOiAjMTkxODFjO1xuXG4gIC0tY29sb3Itd2hpdGUtMTogI2ZmZmZmZjtcbiAgLS1jb2xvci13aGl0ZS0yOiAjZmJmYmZhO1xuICAtLWNvbG9yLXdoaXRlLTM6ICNmNmY2ZjQ7XG5cbiAgLS1jb2xvci1ncmF5LTE6ICNlZWVlZWM7XG4gIC0tY29sb3ItZ3JheS0yOiAjZDlkOWQ3O1xuICAtLWNvbG9yLWdyYXktMzogIzYzNjM2MjtcbiAgLS1jb2xvci1ncmF5LTQ6ICM0NDQ0NDM7XG5cbiAgLS1mb250OiBcIk9wZW4gU2Fuc1wiLCBzYW5zLXNlcmlmO1xuXG4gIC8qIGxlZnQvcmlnaHQgcGFkZGluZyBvbiBvdXRlciBibG9ja3MgKHByZXZlbnRzIGNvbnRlbnQgZnJvbSB0b3VjaGluZyB0aGUgZWRnZSBvZiB0aGUgc2NyZWVuKSAqL1xuICAtLXNwYWNpbmctb3V0ZXI6IDMwcHg7XG5cbiAgLyogc3BhY2luZyBmb3IgU2VjdGlvbi5waHAgdG9wIGFuZCBib3R0b20gcGFkZGluZyAqL1xuICAtLXNwYWNpbmctc2VjdGlvbjogNjBweDtcbiAgLS1zcGFjaW5nLXNlY3Rpb24tc21hbGw6IDIwcHg7XG4gIC0tc3BhY2luZy1zZWN0aW9uLWxhcmdlOiA2MHB4O1xuICBcbiAgLyogZ2FwIGJldHdlZW4gaXRlbXMgd2l0aGluIHNlY3Rpb25zICovXG4gIC0tc3BhY2luZy1pdGVtczogMzBweDtcbiAgLS1zcGFjaW5nLWNvbHVtbnM6IDQwcHg7XG4gIC0tc3BhY2luZy1yb3dzOiA0MHB4O1xuXG4gIC8qIG5vbi1oZWFkaW5nIHNpemVzICovXG4gIC0tdGV4dC1zaXplLXhzOiAxNHB4O1xuICAtLXRleHQtc2l6ZS1zOiBjYWxjKHZhcigtLXRleHQtc2l6ZS14cykgKiAxLjE1KTsgLyogMTYuMXB4ICgxNnB4KSovXG4gIC0tdGV4dC1zaXplLW06IGNhbGModmFyKC0tdGV4dC1zaXplLXMpICogMS4xNSk7IC8qIDE4LjUxNXB4ICgxOHB4KSovXG4gIC0tdGV4dC1zaXplLWw6IGNhbGModmFyKC0tdGV4dC1zaXplLW0pICogMS4xNSk7IC8qIDIxLjI5MjI1cHggKDIxcHgpKi9cbiAgLS10ZXh0LXNpemUteGw6IGNhbGModmFyKC0tdGV4dC1zaXplLWwpICogMS4xNSk7IC8qIDI0LjQ4NjA4NzVweCAoMjRweCkqL1xuXG4gIC8qIGhlYWRpbmcgc2l6ZXMgKi9cbiAgLS1oZWFkaW5nLXNpemUtczogY2FsYyh2YXIoLS10ZXh0LXNpemUteGwpICogMS4xNSk7IC8qIDI4LjE1OTAwMDYyNXB4ICgyOHB4KSAqL1xuICAtLWhlYWRpbmctc2l6ZS1tOiAzMnB4O1xuICAtLWhlYWRpbmctc2l6ZS1sOiA1MnB4O1xuXG4gIC8qIExlYWRpbmctdHJpbSBtYXJnaW5zIGZvciBPcGVuIFNhbnMsIGNvbXB1dGVkIHZpYSBDYXBzaXplIGF0IGxpbmUtaGVpZ2h0OiAxLlxuICAgICBGb3IgYSB0YWxsZXIgbGluZS1oZWlnaHQsIHN1YnRyYWN0IChsaW5lLWhlaWdodCAtIDEpICogMC41ZW0gZnJvbSBlYWNoLiAqL1xuICAtLXRleHQtdHJpbS1jYXA6IC0wLjE3NDFlbTtcbiAgLS10ZXh0LXRyaW0tYmFzZWxpbmU6IC0wLjExMjFlbTtcblxuICAvKiBtYXggd2lkdGggb2Ygb3V0ZXIgYmxvY2tzICovXG4gIC0td2lkdGgtb3V0ZXI6IDEyMDBweDtcbiAgLS13aWR0aC1vdXRlci13aWRlOiAxNjAwcHg7XG5cbiAgZm9udC1zaXplOiB2YXIoLS10ZXh0LXNpemUtcyk7XG59XG5cbmJvZHkge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ibGFjayk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlLTEpO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbn1cblxubWFpbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cblxuYSB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKTtcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICB3aWR0aDogMTZweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBtYXJnaW46IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNiYmI7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlLTEpO1xufVxuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbmlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQsXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJsdWUpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWJsdWUpO1xufVxuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1cHg7XG4gIHRvcDogMnB4O1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDhweDtcbiAgYm9yZGVyOiBzb2xpZCB2YXIoLS1jb2xvci13aGl0ZS0xKTtcbiAgYm9yZGVyLXdpZHRoOiAwIDJweCAycHggMDtcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZDo6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itd2hpdGUtMSk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8qIHZpc3VhbGx5IGhpZGVzIGNvbnRlbnQgd2hpbGUga2VlcGluZyBpdCBhdmFpbGFibGUgdG8gc2NyZWVuIHJlYWRlcnMsXG4gICBlLmcuIGZvciBhcmlhLWxpdmUgc3RhdHVzIHJlZ2lvbnMgb3IgZXh0cmEgY29udGV4dCBvbiBpY29uLW9ubHkgY29udHJvbHMgKi9cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAtMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBib3JkZXI6IDA7XG59IiwiaGVhZGVyIHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHRvcDogMDtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4vKiBTdGlja3kgaXMgd2hhdCBtYWtlcyB0aGUgaGVhZGVyIGVhdCBhIGdyb3dpbmcgc2hhcmUgb2YgdGhlIHZpZXdwb3J0IGF0XG4gICBoaWdoIGJyb3dzZXIgem9vbSDigJQgem9vbSBkb2Vzbid0IHNocmluayB0aGUgaGVhZGVyJ3Mgb3duIENTUyBweCBoZWlnaHRcbiAgIChwYWRkaW5nL2ZvbnQtc2l6ZSBzdGF5IHRoZSBzYW1lKSwgb25seSBob3cgbWFueSBDU1MgcHggZml0IGluIHRoZVxuICAgdmlld3BvcnQsIHNvIGEgZml4ZWQtaGVpZ2h0IHN0aWNreSBoZWFkZXIgYmVjb21lcyBhIGJpZ2dlciBhbmQgYmlnZ2VyXG4gICBmcmFjdGlvbiBvZiBhIHNocmlua2luZyBvbmUuIEJlbG93IHRoaXMgdmlld3BvcnQgaGVpZ2h0ICh3aGV0aGVyIGZyb21cbiAgIHpvb20gb3IgYW4gYWN0dWFsbHktc2hvcnQgd2luZG93KSBpdCdzIG5vdCB3b3J0aCBrZWVwaW5nIHBpbm5lZCDigJQgbGV0IGl0XG4gICBzY3JvbGwgYXdheSBsaWtlIG5vcm1hbCBjb250ZW50IGluc3RlYWQuIERvZXNuJ3QgY29uZmxpY3Qgd2l0aCBNZW51LnBocFxuICAgc2V0dGluZyBoZWFkZXIuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJyBpbmxpbmUgd2hpbGUgdGhlIG1vYmlsZSBtZW51IGlzXG4gICBvcGVuICh0aGF0J3MgYWJvdXQgdGhlIG1lbnUgc3BlY2lmaWNhbGx5LCBhdCBhbnkgdmlld3BvcnQgc2l6ZTsgdGhpcyBpc1xuICAgYWJvdXQgdGhlIGhlYWRlcidzIGRlZmF1bHQsIHVucmVsYXRlZCB0byB3aGV0aGVyIHRoZSBtZW51IGlzIG9wZW4pLiAqL1xuQG1lZGlhIChtYXgtaGVpZ2h0OiA1MDBweCkge1xuICAgIGhlYWRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgfVxufVxuXG4vKiBNb2JpbGUgbmF2IHBvcHVwIChNZW51LnBocCBibG9jaykuIFN0eWxlZCBnbG9iYWxseSwgbm90IGluIHRoZSBibG9jaydzXG4gICBvd24gc2NvcGVkIENTUywgYmVjYXVzZSBpdCdzIG1vdmVkIGluIGpzKCkgdG8gYmUgYSBkaXJlY3Qgc2libGluZyBvZlxuICAgPGhlYWRlcj4gd2hpbGUgb3BlbiAoc2VlIG9wZW5Qb3B1cCkg4oCUIHBsYWluIGluLWZsb3cgY29udGVudCBkaXJlY3RseVxuICAgYmVsb3cgdGhlIGhlYWRlciBhdCBmdWxsIHBhZ2Ugd2lkdGgsIHVuYWZmZWN0ZWQgYnkgd2hhdGV2ZXIgbGF5b3V0IHRoZVxuICAgaGVhZGVyJ3Mgb3duIGlubmVyIGNvbnRlbnQgKGxvZ28sIGV0Yy4pIHVzZXMuIFNjb3BlZCBibG9jayBDU1Mgb25seVxuICAgcmVhY2hlcyBkZXNjZW5kYW50cyBvZiB0aGUgYmxvY2sncyBvd24gd3JhcHBlciwgc28gb25jZSBpdCdzIG1vdmVkIG91dCxcbiAgIHJ1bGVzIHRoZXJlIHdvdWxkbid0IGFwcGx5IHRvIGl0IOKAlCBoZW5jZSBkdXBsaWNhdGluZyB0aGUgLm1lbnUgc3R5bGluZ1xuICAgaGVyZSByYXRoZXIgdGhhbiBzaGFyaW5nIGl0IHdpdGggdGhlIGRlc2t0b3AgbmF2IGluIE1lbnUucGhwLiAqL1xuLm1vYmlsZS1uYXYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHggMzBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWN0aW9uLWJhY2tncm91bmQsIHZhcigtLWNvbG9yLXdoaXRlLTEpKTtcbn1cblxuLm1vYmlsZS1uYXYuLW9wZW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubW9iaWxlLW5hdiAubWVudSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4ubW9iaWxlLW5hdiAubWVudSBsaSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDVweCAwO1xufVxuXG4ubW9iaWxlLW5hdiAubWVudSA+IGxpOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTEpO1xufVxuXG4ubW9iaWxlLW5hdiAubWVudSBhIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmxhY2spO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zaXplLW0pO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDEycHggMTBweDtcbn1cblxuLm1vYmlsZS1uYXYgLm1lbnUgPiBsaS5jdXJyZW50LW1lbnUtaXRlbSA+IGEsXG4ubW9iaWxlLW5hdiAubWVudSA+IGxpLmN1cnJlbnQtbWVudS1hbmNlc3RvciA+IGEsXG4ubW9iaWxlLW5hdiAubWVudSAuc3ViLW1lbnUgbGkuY3VycmVudC1tZW51LWl0ZW0gPiBhIHtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKTtcbn1cblxuLm1vYmlsZS1uYXYgLm1lbnUgbGkubWVudS1pdGVtLWhhcy1jaGlsZHJlbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4vKiBPbmx5IGV2ZXIgb3BlbmVkIGJ5IHRhcCBoZXJlLCBzbyAuLXN1Ym1lbnUtb3BlbiByZWxpYWJseSBtYXRjaGVzIHdoYXQnc1xuICAgYWN0dWFsbHkgc2hvd2luZyDigJQgY2hldnJvbi1yaWdodCAoXCLigLpcIikgcm90YXRlcyA5MGRlZyBpbnRvIGNoZXZyb24tZG93bidzXG4gICBzaGFwZSAoc2FtZSBnbHlwaCwganVzdCByb3RhdGVkLCBzbyBpdCBjYW4gYW5pbWF0ZSBzbW9vdGhseSDigJQgdW5saWtlXG4gICBzd2FwcGluZyBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgYGNvbnRlbnRgIGdseXBocywgd2hpY2ggY2FuJ3RcbiAgIHRyYW5zaXRpb24pLiAqL1xuLm1vYmlsZS1uYXYgLm1lbnUgbGkubWVudS1pdGVtLWhhcy1jaGlsZHJlbiA+IGE6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnXFxmMDU0JztcbiAgICBmb250OiB2YXIoLS1mYS1mb250LXNvbGlkKTtcbiAgICBmb250LXNpemU6IDAuOWVtO1xuICAgIG1hcmdpbi1sZWZ0OiA2cHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzOyAvKiBtYXRjaGVzIHRoZSBoYW1idXJnZXItdG8tWCB0aW1pbmcgKi9cbn1cblxuLm1vYmlsZS1uYXYgLm1lbnUgbGkubWVudS1pdGVtLWhhcy1jaGlsZHJlbi4tc3VibWVudS1vcGVuID4gYTo6YWZ0ZXIge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cblxuLm1vYmlsZS1uYXYgLm1lbnUgLnN1Yi1tZW51IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWFyZ2luOiA0cHggMCA4cHg7XG4gICAgcGFkZGluZzogOHB4IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci13aGl0ZS0xKTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG59XG5cbi5tb2JpbGUtbmF2IC5tZW51IGxpLm1lbnUtaXRlbS1oYXMtY2hpbGRyZW4uLXN1Ym1lbnUtb3BlbiA+IC5zdWItbWVudSB7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuLm1vYmlsZS1uYXYgLm1lbnUgLnN1Yi1tZW51IGEge1xuICAgIHBhZGRpbmc6IDhweCAxMHB4IDhweCAyNHB4O1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zaXplLXMpO1xufSIsImZvb3RlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmx1ZSk7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1zZWN0aW9uKSB2YXIoLS1zcGFjaW5nLW91dGVyKSBjYWxjKHZhcigtLXNwYWNpbmctc2VjdGlvbikgLyAyKTtcbn1cblxuLmZvb3Rlci1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy1jb2x1bW5zKTtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLW91dGVyKTtcbiAgICBtYXJnaW46IDAgYXV0bztcbn1cblxuLmZvb3Rlci1jb2x1bW4ge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xufVxuXG4uZm9vdGVyLWNvbHVtbjpub3QoLmZvb3Rlci1sb2dvKSB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmZvb3Rlci1sb2dvIHtcbiAgICBmbGV4OiAwIDEgYXV0bztcbiAgICBtYXgtd2lkdGg6IDMwMHB4O1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLmZvb3Rlci1sb2dvIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbn1cblxuLmZvb3Rlci1oZWFkaW5nIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itd2hpdGUtMSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuXG4uZm9vdGVyLWxpbmtzIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDEwcHg7XG59XG5cbi5mb290ZXItbGlua3MgYSB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlLTEpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmZvb3Rlci1saW5rcyBhOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmZvb3Rlci1jb3B5cmlnaHQge1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgtb3V0ZXIpO1xuICAgIG1hcmdpbjogY2FsYyh2YXIoLS1zcGFjaW5nLWl0ZW1zKSAqIDIpIGF1dG8gMDtcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itd2hpdGUtMSk7XG4gICAgZm9udC1zaXplOiB2YXIoLS10ZXh0LXNpemUteHMpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XG4gICAgLmZvb3Rlci1jb250YWluZXIge1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG5cbiAgICAuZm9vdGVyLWxvZ28ge1xuICAgICAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLmZvb3Rlci1sb2dvIGltZyB7XG4gICAgICAgIG1heC13aWR0aDogbWluKDMyMHB4LCAxMDAlKTtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICAuZm9vdGVyLWNvbnRhaW5lciB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIH1cblxuICAgIC5mb290ZXItbG9nbyB7XG4gICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgfVxuXG4gICAgLmZvb3Rlci1sb2dvIGltZyB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAuZm9vdGVyLWNvcHlyaWdodCB7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxufVxuIiwiICAgIC5idXR0b24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXdoaXRlLTEpO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMjRweDtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10ZXh0LXNpemUtcyk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDBweDsgXG4gICAgfVxuICAgIFxuICAgIC5idXR0b24uLWFycm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgIH1cblxuICAgIC5idXR0b24uLWFycm93OjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICdcXGYwNjEnO1xuICAgICAgICBmb250OiB2YXIoLS1mYS1mb250LXNvbGlkKTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDAuNXB4O1xuICAgIH1cblxuICAgIC5idXR0b24uLWFycm93OmhvdmVyOjphZnRlciB7XG4gICAgICAgIGFuaW1hdGlvbjogYnV0dG9uLWFycm93LW51ZGdlIDAuNHMgZWFzZTtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIGJ1dHRvbi1hcnJvdy1udWRnZSB7XG4gICAgICAgIDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XG4gICAgICAgIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0cHgpOyB9XG4gICAgICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cbiAgICB9IiwiLmN1c3RvbS1zZWxlY3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICBmb250LXNpemU6IHZhcigtLXRleHQtc2l6ZS1zKTtcbn1cblxuLmN1c3RvbS1zZWxlY3QtbmF0aXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5jdXN0b20tc2VsZWN0LXRyaWdnZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZ2FwOiA4cHg7XG4gICAgcGFkZGluZzogMTBweCAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktMyk7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlY3Rpb24tYmFja2dyb3VuZCwgdmFyKC0tY29sb3Itd2hpdGUtMSkpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ibGFjayk7XG4gICAgZm9udDogaW5oZXJpdDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmN1c3RvbS1zZWxlY3QtdHJpZ2dlcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdcXGYwNzgnO1xuICAgIGZvbnQ6IHZhcigtLWZhLWZvbnQtc29saWQpO1xuICAgIGZvbnQtc2l6ZTogMC43NWVtO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlO1xufVxuXG4uY3VzdG9tLXNlbGVjdC10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cblxuLmN1c3RvbS1zZWxlY3QtdHJpZ2dlcjpmb2N1cy12aXNpYmxlIHtcbiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tY29sb3ItYmx1ZSk7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLmN1c3RvbS1zZWxlY3QtcGFuZWwge1xuICAgIC8qIHBvc2l0aW9uZWQgdmlhIGlubGluZSB0b3AvbGVmdC93aWR0aCwgc2V0IGluIEpTIChwb3NpdGlvblBhbmVsKSDigJRcbiAgICAgICB0aGUgcGFuZWwgaXMgcG9ydGFsZWQgdG8gPGJvZHk+IHdoZW4gb3BlbmVkIHNvIGl0IGNhbiBlc2NhcGUgYW55XG4gICAgICAgYW5jZXN0b3IgYmxvY2sncyBzdGFja2luZyBjb250ZXh0IChjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZSBpbXBsaWVzXG4gICAgICAgQ1NTIGNvbnRhaW5tZW50LCB3aGljaCB0cmFwcyBhIHBsYWluIGFic29sdXRlK3otaW5kZXggaGVyZSkgKi9cbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogMjA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2VjdGlvbi1iYWNrZ3JvdW5kLCB2YXIoLS1jb2xvci13aGl0ZS0xKSk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS0zKTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgIC8qIGNsaXBzIHRoZSBsaXN0Ym94J3Mgc2Nyb2xsYmFyIHRvIHRoZSByb3VuZGVkIGNvcm5lcnMgYmVsb3csIHNpbmNlIGFcbiAgICAgICBzY3JvbGxiYXIgZHJhd24gYnkgYW4gZWxlbWVudCB0aGF0IGFsc28gaGFzIGJvcmRlci1yYWRpdXMgZG9lc24ndFxuICAgICAgIHJlbGlhYmx5IGdldCBjbGlwcGVkIGJ5IHRoYXQgc2FtZSBlbGVtZW50J3Mgb3duIHJhZGl1cyAqL1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5jdXN0b20tc2VsZWN0LXBhbmVsW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jdXN0b20tc2VsZWN0LW9wdGlvbnMge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiA0cHg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXgtaGVpZ2h0OiAyNjBweDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uY3VzdG9tLXNlbGVjdC1vcHRpb25zIGxpIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmN1c3RvbS1zZWxlY3Qtb3B0aW9ucyBsaTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0yKTtcbn1cblxuLmN1c3RvbS1zZWxlY3Qtb3B0aW9ucyBsaTpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itd2hpdGUtMSk7XG59XG5cbi5jdXN0b20tc2VsZWN0LW9wdGlvbnMgbGlbYXJpYS1zZWxlY3RlZD1cInRydWVcIl0ge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qIE11bHRpLXNlbGVjdCBtb2RlIG9ubHkgKHNlZSBjdXN0b20tc2VsZWN0LmpzKSDigJQgc3R5bGVkIHRvIG1hdGNoIHRoZVxuICAgc2l0ZSdzIHJlYWwgY2hlY2tib3hlcyAoY29yZS5jc3MpIHNvIGl0IGZpdHMgaW4gdmlzdWFsbHkuICovXG4uY3VzdG9tLXNlbGVjdC1jaGVja2JveCB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2JiYjtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itd2hpdGUtMSk7XG59XG5cbmxpW2FyaWEtc2VsZWN0ZWQ9XCJ0cnVlXCJdIC5jdXN0b20tc2VsZWN0LWNoZWNrYm94IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWJsdWUpO1xufVxuXG5saVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXSAuY3VzdG9tLXNlbGVjdC1jaGVja2JveDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiA1cHg7XG4gICAgdG9wOiAycHg7XG4gICAgd2lkdGg6IDRweDtcbiAgICBoZWlnaHQ6IDhweDtcbiAgICBib3JkZXI6IHNvbGlkIHZhcigtLWNvbG9yLXdoaXRlLTEpO1xuICAgIGJvcmRlci13aWR0aDogMCAycHggMnB4IDA7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xufVxuXG4vKiA6Zm9jdXMgYWJvdmUgYWxyZWFkeSBnaXZlcyB0aGUgd2hvbGUgcm93IGEgYmx1ZSBiYWNrZ3JvdW5kIOKAlCBrZWVwIHRoZVxuICAgY2hlY2tib3gncyBvd24gc2VsZWN0ZWQtc3RhdGUgY29sb3JzIGZyb20gZGlzYXBwZWFyaW5nIGludG8gaXQgKi9cbi5jdXN0b20tc2VsZWN0LW9wdGlvbnMgbGk6Zm9jdXMgLmN1c3RvbS1zZWxlY3QtY2hlY2tib3gge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3Itd2hpdGUtMSk7XG59XG4iLCJ0YWJsZSB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcblxuICAgIHRkLCB0aCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktMyk7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgfVxuXG4gICAgdGgge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG59IiwiLnNpbmdsZXBvc3Qtb3V0ZXIge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctc2VjdGlvbikgdmFyKC0tc3BhY2luZy1vdXRlcik7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci13aGl0ZS0zKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uc2luZ2xlcG9zdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctY29sdW1ucyk7XG4gICAgbWF4LXdpZHRoOiA4MDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7XG59XG5cbi5zaW5nbGVwb3N0LW1haW4ge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctaXRlbXMpO1xufVxuXG4ucG9zdC1oZWFkaW5nIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmctYm90dG9tOiAzMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmctaXRlbXMpO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTIpO1xufVxuLnBvc3QtaGVhZGluZy1pbm5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGdhcDogMTZweDtcbiAgICBtYXgtd2lkdGg6IDgwMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuLnBvc3QtaGVhZGluZyAucG9zdC10aXRsZSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1oZWFkaW5nLXNpemUtbCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAvKiBsZWFkaW5nLXRyaW0sIHNhbWUgdGVjaG5pcXVlIGFzIC5oZWFkaW5nLXRleHQgaW4gSGVhZGluZy5waHAg4oCUIHB1bGxzXG4gICAgICAgdGhlIHRleHQgdXAvZG93biB0byBpdHMgY2FwLWhlaWdodC9iYXNlbGluZSBpbnN0ZWFkIG9mIHRoZSBleHRyYVxuICAgICAgIHdoaXRlc3BhY2UgbGluZS1oZWlnaHQgbm9ybWFsbHkgYWRkcyBhYm92ZS9iZWxvdyBpdC4gLS10ZXh0LXRyaW0tY2FwXG4gICAgICAgYW5kIC0tdGV4dC10cmltLWJhc2VsaW5lIChjb3JlLmNzcywgb24gOnJvb3QpIGFyZSBhbHJlYWR5IGF2YWlsYWJsZVxuICAgICAgIGhlcmUgZ2xvYmFsbHksIG5vIGJsb2NrLXNjb3BpbmcgaXNzdWUgdG8gd29yayBhcm91bmQuICovXG4gICAgLS1saDogMS4xO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saCk7XG4gICAgbWFyZ2luLXRvcDogY2FsYyh2YXIoLS10ZXh0LXRyaW0tY2FwKSAtICh2YXIoLS1saCkgLSAxKSAqIDAuNWVtKTtcbiAgICBtYXJnaW4tYm90dG9tOiBjYWxjKHZhcigtLXRleHQtdHJpbS1iYXNlbGluZSkgLSAodmFyKC0tbGgpIC0gMSkgKiAwLjVlbSk7XG59XG4ucG9zdC1oZWFkaW5nIC5wb3N0LW1ldGEge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctaXRlbXMpO1xufVxuLnBvc3QtaGVhZGluZyAucG9zdC1kYXRlIHtcbiAgICBmb250LXNpemU6IHZhcigtLXRleHQtc2l6ZS14cyk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0zKTtcbn1cbi5wb3N0LWhlYWRpbmcgLnBvc3QtdGVybXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogNnB4O1xufVxuLnBvc3QtaGVhZGluZyAucG9zdC10ZXJtIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiB2YXIoLS10ZXh0LXNpemUteHMpO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMik7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcbn1cbi5wb3N0LWhlYWRpbmcgLnBvc3QtdGVybS4tY2F0ZWdvcnkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyZWVuKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itd2hpdGUtMSk7XG59XG4vKiBUaGUgc2l0ZS13aWRlIENTUyByZXNldCB6ZXJvZXMgbWFyZ2luL3BhZGRpbmcgYW5kIHNpemluZyBvbiBldmVyeSBlbGVtZW50LFxuICAgd2hpY2ggYWxzbyBzdHJpcHMgbm9ybWFsIGZvcm1hdHRpbmcgb3V0IG9mIHBvc3QgY29udGVudCAoaGVhZGluZ3MgY29sbGFwc2VcbiAgIHRvIGJvZHkgdGV4dCBzaXplLCBsaXN0cyBsb3NlIHRoZWlyIGluZGVudC9idWxsZXRzLCBzcGFjaW5nIGRpc2FwcGVhcnMpLlxuICAgUmVzdG9yZSBqdXN0IGVub3VnaCBvZiB0aGF0IGhlcmUsIHNjb3BlZCB0byBwb3N0IGNvbnRlbnQgc3BlY2lmaWNhbGx5LiAqL1xuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCBoMSxcbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgaDIsXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IGgzLFxuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCBoNCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAvKiBsZWFkaW5nLXRyaW0sIHNhbWUgdGVjaG5pcXVlIGFzIC5wb3N0LXRpdGxlLy5oZWFkaW5nLXRleHQgKEhlYWRpbmcucGhwKVxuICAgICAgIGFib3ZlIOKAlCBidXQgbGF5ZXJlZCBvbiB0b3Agb2YgdGhlIDMwcHgvMTVweCBkZXNpZ25lZCBzcGFjaW5nIHJhdGhlclxuICAgICAgIHRoYW4gcmVwbGFjaW5nIGl0IG91dHJpZ2h0OiB1bmxpa2UgdGhvc2UgdHdvLCB0aGlzIG1hcmdpbiBpcyB0aGVcbiAgICAgICBhY3R1YWwgc3BhY2luZyBtZWNoYW5pc20gYmV0d2VlbiBoZWFkaW5ncyBhbmQgc3Vycm91bmRpbmcgcGFyYWdyYXBoc1xuICAgICAgIGhlcmUgKGZyZWVmb3JtIGNvbnRlbnQsIG5vIGZsZXggZ2FwIHRvIGZhbGwgYmFjayBvbiksIG5vdCBqdXN0XG4gICAgICAgY29zbWV0aWMgY2xlYW51cCBvbiB0b3Agb2Ygb25lLiAtLWxoIG1hdGNoZXMgdGhlIGxpbmUtaGVpZ2h0IHRoZXNlXG4gICAgICAgYWxyZWFkeSBoYWQgKDEuNSwgaW5oZXJpdGVkIGZyb20gYm9keSDigJQgbmV2ZXIgc2V0IGV4cGxpY2l0bHkgaGVyZSkuICovXG4gICAgLS1saDogMS41O1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saCk7XG4gICAgbWFyZ2luLXRvcDogY2FsYygzMHB4ICsgdmFyKC0tdGV4dC10cmltLWNhcCkgLSAodmFyKC0tbGgpIC0gMSkgKiAwLjVlbSk7XG4gICAgbWFyZ2luLWJvdHRvbTogY2FsYygxNXB4ICsgdmFyKC0tdGV4dC10cmltLWJhc2VsaW5lKSAtICh2YXIoLS1saCkgLSAxKSAqIDAuNWVtKTtcbn1cbi8qIGgxIGtlcHQgZm9yIGV4aXN0aW5nIHBvc3QgY29udGVudCBvbmx5IOKAlCB0aGUgY2xhc3NpYyBlZGl0b3Igbm8gbG9uZ2VyXG4gICBvZmZlcnMgaXQgKGJsb2NrX2Zvcm1hdHMgaW4gdGhlbWUucGhwKSwgc2luY2UgdGhlIHBvc3QgdGl0bGUgaXRzZWxmIGlzXG4gICB0aGUgcGFnZSdzIG9uZSBIMS4gTmV3IGNvbnRlbnQgc2hvdWxkIHN0YXJ0IGF0IGgyLiAqL1xuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCBoMSB7IGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zaXplLXhsKTsgfVxuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCBoMiB7IGZvbnQtc2l6ZTogdmFyKC0tdGV4dC1zaXplLWwpOyB9XG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IGgzIHsgZm9udC1zaXplOiB2YXIoLS10ZXh0LXNpemUtbSk7IH1cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgaDQgeyBmb250LXNpemU6IHZhcigtLXRleHQtc2l6ZS1zKTsgfVxuXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IHAge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgdWwsXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IG9sIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIHBhZGRpbmctbGVmdDogMjRweDtcbn1cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgdWwgeyBsaXN0LXN0eWxlOiBkaXNjOyB9XG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IG9sIHsgbGlzdC1zdHlsZTogZGVjaW1hbDsgfVxuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCBsaSB7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS0zKTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIERlZmF1bHQvZmFsbGJhY2s6IGNlbnRlcmVkLiBBbHNvIHdoYXQgLmFsaWduY2VudGVyIGFuZCBhbnkgaW1hZ2Ugd2l0aCBub1xuICAgcmVjb2duaXplZCBhbGlnbm1lbnQgY2xhc3MgZW5kIHVwIGFzLCBzaW5jZSBub3RoaW5nIG1vcmUgc3BlY2lmaWMgYmVsb3dcbiAgIG92ZXJyaWRlcyB0aGVzZSB0d28gcHJvcGVydGllcyBmb3IgdGhlbS4gKi9cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgaW1nIHtcbiAgICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IGF1dG87IC8qIGFuIGltYWdlIHdpZGVyIHRoYW4gdGhlIGNvbnRlbnQgY29sdW1uIGdldHMgc2hydW5rIGJ5XG4gICAgICAgIHRoZSBnbG9iYWwgcmVzZXQncyBpbWd7bWF4LXdpZHRoOjEwMCV9IOKAlCB3aXRob3V0IHRoaXMsIGl0cyBoZWlnaHRcbiAgICAgICAgc3RheXMgcGlubmVkIHRvIGl0cyBmdWxsLXNpemUgSFRNTCBoZWlnaHQgYXR0cmlidXRlIGluc3RlYWQgb2ZcbiAgICAgICAgc2NhbGluZyBkb3duIHRvIG1hdGNoLCBzdHJldGNoaW5nL3NxdWFzaGluZyBpdCBvdXQgb2YgcHJvcG9ydGlvbiAqL1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLyogQ2xhc3NpYyBlZGl0b3IncyBvd24gbmF0aXZlIGltYWdlIGFsaWdubWVudC4gVHdvIHNoYXBlcyBkZXBlbmRpbmcgb25cbiAgIHdoZXRoZXIgYSBjYXB0aW9uIHdhcyBzZXQ6XG4gICAgIG5vIGNhcHRpb246ICAgPGltZyBjbGFzcz1cImFsaWdubGVmdHxhbGlnbmNlbnRlcnxhbGlnbnJpZ2h0fGFsaWdubm9uZSAuLi5cIj5cbiAgICAgd2l0aCBjYXB0aW9uOiA8ZGl2IGNsYXNzPVwid3AtY2FwdGlvbiBhbGlnbmxlZnR8YWxpZ25jZW50ZXJ8YWxpZ25yaWdodHxhbGlnbm5vbmVcIiBzdHlsZT1cIndpZHRoOlhweFwiPlxuICAgICAgICAgICAgICAgICAgICAgICA8aW1nIC4uLj5cbiAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3cC1jYXB0aW9uLXRleHRcIj4uLi48L3A+XG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICBOb25lIG9mIHRoZXNlIGZvdXIgY2xhc3NlcyBoYWQgYW55IGVmZmVjdCBiZWZvcmUgdGhpczogZXZlcnkgPGltZz4gd2FzXG4gICB1bmNvbmRpdGlvbmFsbHkgY2VudGVyZWQgYnkgdGhlIHJ1bGUgYWJvdmUgcmVnYXJkbGVzcyBvZiBpdHMgb3duIGFsaWduXG4gICBjbGFzcywgYW5kIC53cC1jYXB0aW9uIGhhZCBubyBzdHlsaW5nIGF0IGFsbCDigJQgc28gYSBjYXB0aW9uZWQgaW1hZ2Unc1xuICAgY2hvc2VuIGFsaWdubWVudCBkaWQgbm90aGluZyAoaXQganVzdCBzYXQgaW4gbm9ybWFsIGZsb3csIHJlYWRpbmcgYXNcbiAgIGxlZnQtYWxpZ25lZCksIHdoaWxlIGFuIHVuY2FwdGlvbmVkIGltYWdlIHdhcyBhbHdheXMgZm9yY2VkIHRvIGNlbnRlclxuICAgcmVnYXJkbGVzcyBvZiB3aGF0IGFsaWdubWVudCB3YXMgYWN0dWFsbHkgcGlja2VkLiAqL1xuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCBpbWcuYWxpZ25ub25lIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgaW1nLmFsaWdubGVmdCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luOiA0cHggMjBweCAyMHB4IDA7XG59XG5cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgaW1nLmFsaWducmlnaHQge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW46IDRweCAwIDIwcHggMjBweDtcbn1cblxuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCAud3AtY2FwdGlvbiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgLndwLWNhcHRpb24uYWxpZ25jZW50ZXIge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCAud3AtY2FwdGlvbi5hbGlnbmxlZnQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbjogNHB4IDIwcHggMjBweCAwO1xufVxuXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IC53cC1jYXB0aW9uLmFsaWducmlnaHQge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW46IDRweCAwIDIwcHggMjBweDtcbn1cblxuLyogRmxvYXRlZCBpbWFnZXMgKGxlZnQvcmlnaHQpIHJlbmRlciBhdCB0aGVpciBuYXR1cmFsIHdpZHRoIChjYXBwZWQgb25seVxuICAgYnkgdGhlIGdsb2JhbCByZXNldCdzIGltZ3ttYXgtd2lkdGg6MTAwJX0sIHNhbWUgYXMgYW55IG90aGVyIGltYWdlKSDigJRcbiAgIG5vIGxvbmdlciBhcnRpZmljaWFsbHkgc2hydW5rIHRvIGZpdCBiZXNpZGUgdGV4dC4gSW5zdGVhZCwganMvXG4gICBwb3N0LWltYWdlLWZsb2F0LmpzIG1lYXN1cmVzIHdoZXRoZXIgdGhhdCBsZWF2ZXMgZW5vdWdoIHJvb20gZm9yIHRleHRcbiAgIHRvIHdyYXAgYmVzaWRlIGl0IChjb250YWluZXIgd2lkdGggbWludXMgaW1hZ2Ugd2lkdGgpIGFuZCBhZGRzIC1mdWxsZml4XG4gICB3aGVuIGl0IGRvZXNuJ3QsIHdoaWNoIGRyb3BzIHRoZSBmbG9hdCBhbmQgY2VudGVycyB0aGUgaW1hZ2UgZnVsbC13aWR0aFxuICAgd2l0aCB0ZXh0IGJlbG93IGluc3RlYWQg4oCUIHJlZXZhbHVhdGVkIG9uIGxvYWQvcmVzaXplIHNpbmNlIGl0IGRlcGVuZHNcbiAgIG9uIGVhY2ggaW1hZ2UncyBvd24gYWN0dWFsIHJlbmRlcmVkIHNpemUsIG5vdCBhIGZpeGVkIGJyZWFrcG9pbnQuICovXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IGltZy5hbGlnbmxlZnQuLWZ1bGxmaXgsXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IGltZy5hbGlnbnJpZ2h0Li1mdWxsZml4IHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG5cbi5zaW5nbGVwb3N0IC5wb3N0LXRleHQgLndwLWNhcHRpb24uYWxpZ25sZWZ0Li1mdWxsZml4LFxuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCAud3AtY2FwdGlvbi5hbGlnbnJpZ2h0Li1mdWxsZml4IHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG5cbi8qIE5vIC53cC1jYXB0aW9uIGltZyBydWxlIG5lZWRlZCDigJQgV29yZFByZXNzIGFscmVhZHkgc2l6ZXMgdGhlIHdyYXBwaW5nXG4gICAud3AtY2FwdGlvbiBkaXYgKGlubGluZSBzdHlsZT1cIndpZHRoOi4uLlwiKSB0byBtYXRjaCB0aGUgaW1hZ2UgaXRzZWxmLCBzb1xuICAgaXQganVzdCBmYWxscyBiYWNrIHRvIHRoZSBwbGFpbiBpbWcgcnVsZSBhYm92ZSAod2lkdGg6YXV0byArIG1heC1oZWlnaHQsXG4gICB3aGljaCBhbHJlYWR5IHByZXNlcnZlcyBhc3BlY3QgcmF0aW8gY29ycmVjdGx5KSByYXRoZXIgdGhhbiBuZWVkaW5nIGl0c1xuICAgb3duIG92ZXJyaWRlLiBBbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBydWxlIHNldCB3aWR0aDoxMDAlIHdpdGhvdXRcbiAgIGhlaWdodDphdXRvLCB3aGljaCBzdHJldGNoZWQgaW1hZ2VzIG91dCBvZiBwcm9wb3J0aW9uIOKAlCBlYXNpZXIgdG8gYXZvaWRcbiAgIGVudGlyZWx5IGhlcmUgc2luY2Ugbm90aGluZyBhY3R1YWxseSByZXF1aXJlZCBvdmVycmlkaW5nIGltZyBzaXppbmcgZm9yXG4gICB0aGlzIGNhc2UgaW4gdGhlIGZpcnN0IHBsYWNlLiAqL1xuXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IC53cC1jYXB0aW9uLXRleHQge1xuICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICBmb250LXNpemU6IHZhcigtLXRleHQtc2l6ZS14cyk7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNpbmdsZXBvc3QgLnBvc3QtdGV4dCAud3AtY2FwdGlvbi5hbGlnbmxlZnQgLndwLWNhcHRpb24tdGV4dCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0IC53cC1jYXB0aW9uLmFsaWducmlnaHQgLndwLWNhcHRpb24tdGV4dCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc2luZ2xlcG9zdCAucG9zdC10ZXh0ID4gKjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnBvc3QtZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNpbmctaXRlbXMpO1xuICAgIHBhZGRpbmctdG9wOiA1NXB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTIpO1xufVxuIiwiZGlhbG9nLm1vZGFsIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBtYXgtd2lkdGg6IG1pbig5MHZ3LCA4MDBweCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiBhdXRvO1xuXG4gICAgJjo6YmFja2Ryb3Age1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgfVxufVxuXG4ubW9kYWwtY29udGVudCB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy1vdXRlcik7XG59XG5cbi5tb2RhbC1jbG9zZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNHB4O1xuICAgIHJpZ2h0OiA2cHg7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZm9udC1zaXplOiAyOHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMTtcbn1cbiIsIi8qIFxuZXh0ZW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBsYXN0IHNlY3Rpb24gYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbVxudGhpcyBmaWxscyBhIHBvdGVudGlhbCBhd2t3YXJkLWxvb2tpbmcgd2hpdGVzcGFjZSBiZWxvdyB0aGUgbGFzdCBzZWN0aW9uXG4qL1xubWFpbiB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxubWFpbiAuYmxvY2stc2VjdGlvbjpsYXN0LWNoaWxkIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbm1haW4gLmJsb2NrLXNlY3Rpb246bGFzdC1jaGlsZDo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDkwdmg7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlY3Rpb24tYmFja2dyb3VuZCwgdmFyKC0tY29sb3Itd2hpdGUtMSkpO1xufVxuXG4vKiBkYXJrIGdyYXkgaGVhZGluZywgZXhjZXB0IHdoZW4gaW5zaWRlIGhlcm8gKHRoZW4gZG9uJ3QgY2hhbmdlKSAqL1xuLmJsb2NrLXNlY3Rpb246Zmlyc3QtY2hpbGQgLmJsb2NrLWhlYWRpbmcgLnJvb3Qge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ibGFjaykgIWltcG9ydGFudDtcbn1cblxuLyogdG9wIHVwIHRoZSBnYXAgYWJvdmUgQm94ZXMvVGVhbS9JY29uQm94ZXMgc28gaXQgbWF0Y2hlcyB0aGVpciBvd24gaW50ZXJuYWxcbiAgIHJvdy1nYXAsIHNpbmNlIHRoZSBkZWZhdWx0IGdhcCBhYm92ZSBhIGJsb2NrIHJ1bnMgb24gLS1zcGFjaW5nLWl0ZW1zLiBvbmx5XG4gICBhcHBsaWVzIHdoZW4gdGhlcmUncyBhIHByZWNlZGluZyBibG9jaywgc2luY2UgdGhlIGZpcnN0IGJsb2NrIG5lZWRzIG5vXG4gICB0b3AtdXAuICovXG4uYmxvY2sgKyAuYmxvY2stYm94ZXMsXG4uYmxvY2sgKyAuYmxvY2stdGVhbSxcbi5ibG9jayArIC5ibG9jay1pY29uYm94ZXMge1xuICAgIG1hcmdpbi10b3A6IG1heCgwcHgsIGNhbGModmFyKC0tc3BhY2luZy1yb3dzKSAtIHZhcigtLXNwYWNpbmctaXRlbXMpKSk7XG59Il19 */