/* Colors */
/* even rows in list or tables, subtle shade of $c-bg-high */
/* Primary: blue */
/* text over primary background */
/* Secondary: green */
/* text over secondary background */
/* Accent: orange */
/* text over accent background */
/* Brag: gold */
/* text over brag background */
/* Error: red */
/* text over brag background */
/* Good: green */
/* Warn: orange */
/* Bad: red */
/* Fancy: pink */
/* text over brag background */
/* Borders */
/* Shadows */
/* Custom */
/* Common imports for all CSS modules */
/* Widths */
/* Heights */
/* Orientations */
/* Capabilities */
/* Aliases */
/* Uniboard: keep the same page layout accross pages */
/* when the width is appropriate for col1, but landscape prevents it */
/* atm only chrome supports min-content, max-content */
.learn-stages .categ > h2, .learn__side-map .stage {
  font-family: 'Roboto';
}

/* text printed directly on the page background deserves special treatment (transp theme) */
#trainer group.radio input:checked + label {
  background: #0456bc;
}

.learn__main #promotion-choice .explanation, .learn__screen {
  box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
}

.learn__screen-overlay {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.6);
  z-index: 109;
}

#promotion-choice {
  position: absolute;
  width: 100%;
  height: 100%;
}

.learn__table .goal, .learn__table .result, .learn__table .progress a, .learn__side-map .stage {
  /* extends %flex-wrap */
  display: flex;
  flex-flow: row wrap;
  align-items: center;
}

.learn-stages .stage, .learn__table .progress {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
}

.learn__table .wrap, .learn__side-home, .learn-stages .stage, .learn__screen, .learn__screen .buttons a {
  border-radius: 3px;
}

.learn__table .wrap {
  overflow: hidden;
  /* helps with clipping background into border-radius */
}

.learn__table .wrap, .learn__side-home {
  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
}

coords {
  /* handle hidden coords */
  /* handle inner coords */
  position: absolute;
  display: flex;
  pointer-events: none;
  user-select: none;
  color: #fff;
  text-shadow: 0 1px 2px #000;
  font-weight: bold;
  /* negate inner coords colors */
}

.coords-no coords {
  display: none;
}

coords {
  font-size: 8px;
}

@media (min-width: 320px) {
  coords {
    font-size: calc(8px + 4 * ((100vw - 320px) / 880));
  }
}

@media (min-width: 1200px) {
  coords {
    font-size: 12px;
  }
}

coords.ranks {
  flex-flow: column-reverse;
  top: 1px;
  right: 0;
  height: 100%;
  width: .8em;
}

coords.ranks.black {
  flex-flow: column;
}

coords.files {
  bottom: 0px;
  left: 0;
  text-align: left;
  flex-flow: row;
  width: 100%;
  height: 1.4em;
}

coords.files.black {
  flex-flow: row-reverse;
}

coords.files coord {
  padding-left: 4px;
}

coords coord {
  flex: 1 1 auto;
}

coords .is3d .cg-wrap coords coord {
  color: #fff !important;
  text-shadow: 0 1px 2px #000 !important;
}

coords .is3d .cg-wrap coords.files {
  bottom: calc(1px - 2.5%);
}

coords .is3d .cg-wrap coords.files coord {
  padding-left: 3px;
}

:root {
  --cg-coord-color-white: #fff;
  --cg-coord-color-black: #fff;
  --cg-coord-shadow: 0 1px 2px #000;
}

coords {
  text-shadow: var(--cg-coord-shadow);
}

.orientation-white .files coord:nth-child(2n+1),
.orientation-white .ranks coord:nth-child(2n),
.orientation-black .files coord:nth-child(2n),
.orientation-black .ranks coord:nth-child(2n+1) {
  color: var(--cg-coord-color-white);
}

.orientation-white .files coord:nth-child(2n),
.orientation-white .ranks coord:nth-child(2n+1),
.orientation-black .files coord:nth-child(2n+1),
.orientation-black .ranks coord:nth-child(2n) {
  color: var(--cg-coord-color-black);
}

/* handle outer coords */
@media (min-width: 800px), (orientation: landscape) {
  .coords-out coords {
    text-shadow: none;
  }
  .coords-out coords.ranks {
    right: -15px;
    top: 0;
    width: 12px;
  }
  .coords-out coords.ranks coord {
    transform: translateY(42%);
  }
  .coords-out coords.files {
    bottom: -15px;
    left: 0;
    text-align: center;
  }
  .coords-out coords coord {
    color: #5e5e5e !important;
  }
}

body {
  --board-scale: 1;
}

@media (min-width: 800px) and (min-height: 500px) {
  body {
    --board-scale: calc((var(--zoom) / 100) * 0.7 + 0.3);
  }
}

@media (max-width: 799px) and (orientation: portrait) {
  body {
    --col1: 1;
  }
  .main-board cg-board {
    border-radius: 0;
  }
}

#promotion-choice {
  background: rgba(255, 255, 255, 0.7);
  z-index: 205;
}

#promotion-choice square {
  cursor: pointer;
  border-radius: 50%;
  background-color: #b0b0b0;
  box-shadow: inset 0 0 25px 3px #808080;
  transition: all 150ms;
}

#promotion-choice piece {
  pointer-events: auto;
  opacity: 1;
  /* cancels blindfold */
}

.is2d #promotion-choice piece {
  width: 100%;
  height: 100%;
  transition: all 150ms;
  transform: scale(0.8);
}

#promotion-choice square:hover {
  box-shadow: inset 0 0 48px 8px #bd111f;
  border-radius: 0%;
}

.is2d #promotion-choice square:hover piece {
  transform: none;
}

#main-wrap {
  --main-max-width: calc(100vh - calc(var(--site-header-height) + var(--site-header-margin)) - 3rem);
}

@media (min-width: 800px), (orientation: landscape) {
  #main-wrap {
    --main-max-width: auto;
  }
}

.learn {
  grid-area: main;
  display: grid;
  grid-gap: 2vmin;
}

.learn__side {
  grid-area: side;
}

.learn__main {
  grid-area: main;
}

.learn__table {
  grid-area: table;
}

.learn--run {
  grid-template-areas: 'main' 'table' 'side';
}

.learn--map {
  grid-template-areas: 'side' 'main';
}

@media (min-width: 800px), (orientation: landscape) {
  .learn--run {
    grid-template-columns: minmax(calc(70vmin * var(--board-scale)), calc(100vh * var(--board-scale) - calc(var(--site-header-height) + var(--site-header-margin)) - 3rem)) minmax(240px, 400px);
    grid-template-rows: fit-content(0);
    grid-template-areas: 'main table' 'side .';
  }
  .learn--map {
    grid-template-areas: 'side main';
    grid-template-columns: 240px auto;
  }
}

@media (min-width: 800px) and (min-width: 1260px), (orientation: landscape) and (min-width: 1260px) {
  .learn--map {
    grid-template-columns: 240px 960px;
  }
}

@media (min-width: 1260px) {
  .learn--run {
    grid-template-columns: minmax(230px, 20vw) minmax(calc(70vmin * var(--board-scale)), calc(100vh * var(--board-scale) - calc(var(--site-header-height) + var(--site-header-margin)) - 3rem)) minmax(240px, 400px);
    grid-template-areas: 'side main table';
  }
}

.learn-stages {
  padding-top: 10px;
}

.learn-stages .categ > h2 {
  font-size: 2em;
  letter-spacing: 8px;
  text-transform: uppercase;
  color: #999;
  text-shadow: 0 1px 0 white;
  text-align: center;
}

.learn-stages .categ_stages {
  --min-width: 100vw;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(var(--min-width), 1fr));
  grid-gap: 1em;
  margin: .8em 0 3em 0;
}

@media (min-width: 500px) {
  .learn-stages .categ_stages {
    --min-width: 400px;
  }
}

.learn-stages .stage {
  transition: all 150ms;
  position: relative;
  height: 90px;
  color: #fff;
  margin-top: 13px;
  box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.3), 0 1px 1px 0 rgba(0, 0, 0, 0.2);
  font-size: 1.2em;
}

.learn-stages .stage img {
  width: 80px;
  height: 80px;
  margin: 0 13px;
  opacity: 0.9;
}

.learn-stages .stage h3 {
  font-size: 2em;
  letter-spacing: 3px;
  margin: 0 0 1px -1px;
}

.learn-stages .stage h3 {
  font-size: 1.6em;
  letter-spacing: 2px;
}

.learn-stages .stage.vvv h3 {
  font-size: 1.4em;
  letter-spacing: 1px;
}

.learn-stages .stage p {
  margin: 0;
}

@keyframes soft-bright {
  50% {
    filter: brightness(0.97);
  }
}

.learn-stages .stage.ongoing {
  background: #ed1c24;
  filter: brightness(0.9);
  animation: 1.7s soft-bright ease-in-out infinite;
}

.learn-stages .stage.ongoing:hover {
  filter: brightness(1.2);
}

.learn-stages .stage.done {
  background: #8a000b;
}

.learn-stages .stage.future {
  opacity: 0.7;
  background: #0456bc;
}

.learn-stages .stage.future img {
  opacity: 0.7;
}

.learn-stages .stage.active, .learn-stages .stage:hover {
  filter: brightness(1.08);
  transform: scale(1.02);
  opacity: 1;
}

.learn-stages .stage .ribbon-wrapper {
  display: block;
  width: 85px;
  height: 88px;
  overflow: hidden;
  position: absolute;
  top: -3px;
  right: -3px;
}

.learn-stages .ribbon {
  display: block;
  font-size: 15px;
  font-weight: bold;
  color: #333;
  text-align: center;
  text-shadow: rgba(255, 255, 255, 0.5) 0px 1px 0px;
  transform: rotate(45deg);
  position: relative;
  padding: 7px 0;
  left: -5px;
  top: 15px;
  width: 120px;
  color: #6a6340;
  box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
}

.learn-stages .ribbon i {
  color: #d59020;
  animation: 0.6s soft-hue ease-in-out infinite;
  text-shadow: 0 -0.5px 1px rgba(0, 0, 0, 0.5);
}

.learn-stages .ribbon i:nth-child(2) {
  animation-delay: 0.2s;
}

.learn-stages .ribbon i:nth-child(3) {
  animation-delay: 0.4s;
}

.learn-stages .ribbon:before, .learn-stages .ribbon:after {
  content: "";
  border-left: 3px solid transparent;
  border-right: 3px solid transparent;
  position: absolute;
  bottom: -3px;
}

.learn-stages .ribbon:before {
  left: 0;
}

.learn-stages .ribbon:after {
  right: 0;
}

.learn-stages .ribbon.done {
  background-color: #BFDC7A;
}

.learn-stages .ribbon.done:before, .learn-stages .ribbon.done:after {
  border-top: 3px solid #6e8900;
}

.learn-stages .ribbon.ongoing {
  background-color: #B3E5FC;
}

.learn-stages .ribbon.ongoing:before, .learn-stages .ribbon.ongoing:after {
  border-top: 3px solid #536DFE;
}

.learn-stages .what_next > p {
  width: 100%;
  text-align: center;
  margin: 20px 0;
  font-size: 1.2em;
}

.learn__table {
  align-self: center;
}

.learn__table .title {
  display: flex;
  background: #bd111f;
  color: #fff;
}

.learn__table .title h2,
.learn__table .title h3 {
  font-size: 2.3em;
  margin: 15px 0 5px -3px;
  white-space: nowrap;
}

.learn__table .title img {
  width: 80px;
  height: 80px;
  margin: 5px 8px 5px 5px;
}

.learn__table .subtitle {
  margin-bottom: 1em;
}

.learn__table .goal {
  background: white;
  border: 1px solid #d9d9d9;
  border-top: none;
  padding: 2vmin;
  text-align: center;
  justify-content: center;
}

.learn__table .result {
  justify-content: center;
  flex-flow: column nowrap;
  border: 1px solid #d9d9d9;
  border-top: none;
  text-align: center;
  cursor: pointer;
  transition: all 150ms;
  min-height: 135px;
  padding: 0;
  font-size: 1.7em;
}

@keyframes shadow-glow {
  50% {
    box-shadow: 0 0 10px 10px rgba(255, 255, 255, 0.5);
    transform: scale(1.05);
  }
}

@keyframes text-shadow-glow {
  50% {
    text-shadow: 0 0 10px #fff;
    transform: scale(1.05);
  }
}

.learn__table .result h2 {
  animation: text-shadow-glow 1s 1;
}

.learn__table .result.failed h2,
.learn__table .result.next h2 {
  margin-top: 15px;
}

.learn__table .result:hover {
  filter: brightness(1.1);
}

.learn__table .result .stars {
  margin-top: 4px;
}

.learn__table .result .stars i {
  margin: 3px;
  animation: text-shadow-glow 1s 1;
}

.learn__table .result button {
  margin: 15px auto 15px auto;
  font-size: 30px;
  font-weight: bold;
  text-transform: uppercase;
  background: #fff;
  border: none;
  border-radius: 5px;
  padding: 5px 10px;
  box-shadow: 0 0 5px 5px rgba(255, 255, 255, 0.5);
  animation: shadow-glow 1s infinite;
}

.learn__table .result.completed {
  background: #629924;
  color: #fff;
}

.learn__table .result.completed button {
  color: #629924;
}

.learn__table .result.failed {
  background: #cc3333;
  color: #fff;
}

.learn__table .result.failed button {
  color: #cc3333;
}

@keyframes go-home {
  from {
    opacity: 1;
  }
  to {
    opacity: 0.1;
  }
}

.learn__table .result.completed:not(.no-go-home) piece {
  animation: 0.7s ease-in-out 0.7s go-home;
}

.learn__table .progress {
  text-align: center;
  border: 1px solid #d9d9d9;
  border-top: 0;
}

.learn__table .progress a {
  align-content: center;
  flex: 1 1 100%;
  text-align: center;
  background: white;
  height: 3em;
  font-size: .9em;
  border-left: 1px solid #d9d9d9;
  opacity: .8;
  transition: all 150ms;
}

.learn__table .progress a:first-child {
  border-left: 0;
}

.learn__table .progress a:hover {
  opacity: 1;
}

.learn__table .progress a span {
  margin: auto;
}

.learn__table .progress .st3 i:first-child {
  display: block;
}

.learn__table .progress a.done {
  color: #fff;
  background: #629924;
}

.learn__table .progress a.active {
  opacity: 1;
  color: #fff;
  background: #bd111f;
}

.learn__main item {
  width: 70%;
  height: 70%;
  bottom: 15%;
  left: 15%;
  background-size: cover;
  position: absolute;
  transform: translate3d(0, 0, 0);
  z-index: 1;
  transition: all 1s;
}

@keyframes soft-hue {
  50% {
    filter: hue-rotate(-20deg);
  }
}

@keyframes soft-grow {
  50% {
    transform: scale(1.08);
  }
}

@keyframes apple-appear {
  0% {
    opacity: 0.5;
    transform: scale(0) rotate(-360deg);
  }
  100% {
    opacity: 1;
    transform: scale(1) rotate(0);
  }
}

.learn__main .apple {
  background-image: url(../images/learn/star.png);
  animation: 0.6s ease-in-out 0s 1 forwards apple-appear, 1.7s ease-in-out 0.7s infinite none soft-grow, 0.7s ease-in-out 0.7s infinite none soft-hue;
}

.learn__main square.has-item.move-dest {
  background: radial-gradient(transparent 0%, transparent 80%, rgba(20, 85, 0, 0.3) 80%);
}

.learn__main .cg-board square.move-dest.drag-over,
.learn__main .cg-board square.move-dest:hover {
  background: rgba(20, 85, 30, 0.3);
}

@keyframes slideIn {
  0% {
    opacity: 0;
    filter: blur(15px);
  }
  100% {
    opacity: 1;
    filter: blur(0px);
  }
}

@keyframes rankGlow {
  50% {
    background-color: rgba(255, 255, 255, 0.5);
    box-shadow: 0 0 40px rgba(255, 255, 255, 0.7);
  }
}

.highlight-2nd-rank .learn__main .cg-board::after,
.highlight-5th-rank .learn__main .cg-board::after,
.highlight-7th-rank .learn__main .cg-board::after {
  width: 100%;
  height: 12.5%;
  content: '';
  position: absolute;
  bottom: 12.5%;
  left: 0;
  box-shadow: 0 0 15px rgba(255, 255, 255, 0.2);
  background-color: rgba(255, 255, 255, 0.2);
  animation: 1s rankGlow ease-in-out infinite;
}

.highlight-7th-rank .learn__main .cg-board::after {
  top: 12.5%;
}

.highlight-5th-rank .learn__main .cg-board::after {
  top: 37.5%;
}

.learn__main #promotion-choice .explanation {
  background: white;
  position: absolute;
  top: 25%;
  left: 25%;
  width: 50%;
  height: 50%;
  padding: 20px;
}

.learn__main #promotion-choice .explanation h2 {
  font-size: 2em;
}

.learn__main #promotion-choice .explanation p {
  font-size: 1.3em;
  margin-top: 15px;
}

.learn__main .cg-board piece.wriggle::after {
  content: '!';
}

.learn__main .cg-board piece.wriggle::after {
  content: '!';
  font-size: 40px;
  font-weight: bold;
  color: #fff;
  text-shadow: rgba(0, 0, 0, 0.8) 0 0 3px;
}

.learn__main .piece-values .cg-board piece::before {
  position: absolute;
  top: 14px;
  right: 4px;
  color: #fff;
  text-shadow: 0 0 9px black, 0 0 4px black;
  font-size: 30px;
  font-weight: bold;
}

.learn__main .piece-values .cg-board piece.queen::before {
  content: '9';
}

.learn__main .piece-values .cg-board piece.rook::before {
  content: '5';
}

.learn__main .piece-values .cg-board piece.bishop::before,
.learn__main .piece-values .cg-board piece.knight::before {
  content: '3';
}

.learn__main .piece-values .cg-board piece.pawn::before {
  content: '1';
}

.learn__screen-overlay {
  background: rgba(79, 195, 247, 0.9);
  cursor: pointer;
}

.learn__screen {
  margin: 150px auto;
  background-color: #fff;
  width: 350px;
  overflow: hidden;
  text-align: center;
  padding-top: 36px;
}

.learn__screen > :nth-child(1) {
  animation: slideIn 1s cubic-bezier(0.37, 0.82, 0.2, 1);
}

.learn__screen > :nth-child(2) {
  animation: slideIn 1.5s cubic-bezier(0.37, 0.82, 0.2, 1);
}

.learn__screen > :nth-child(3) {
  animation: slideIn 2s cubic-bezier(0.37, 0.82, 0.2, 1);
}

.learn__screen > :nth-child(4) {
  animation: slideIn 2.5s cubic-bezier(0.37, 0.82, 0.2, 1);
}

.learn__screen > :nth-child(5) {
  animation: slideIn 3s cubic-bezier(0.37, 0.82, 0.2, 1);
}

.learn__screen .stars {
  margin-bottom: 20px;
}

@keyframes star-appear {
  0% {
    filter: saturate(1);
    opacity: 0.5;
    transform: scale(0) rotate(-360deg);
  }
  85% {
    filter: saturate(1);
    opacity: 1;
    transform: scale(1.3) rotate(10deg);
  }
  100% {
    filter: saturate(1);
    opacity: 1;
    transform: scale(1) rotate(0);
  }
}

.learn__screen .stars .star-wrap {
  display: inline-block;
  width: 55px;
  height: 55px;
  margin: 0 5px;
  position: relative;
}

.learn__screen .stars .star-wrap::before {
  position: absolute;
  top: 5px;
  left: 5px;
  display: block;
  width: 45px;
  height: 45px;
  content: '';
  background-image: url(../images/learn/star.png);
  background-size: cover;
  filter: saturate(0);
  opacity: 0.2;
}

.learn__screen .stars .star {
  display: inline-block;
  background-image: url(../images/learn/star.png);
  background-size: cover;
  width: 55px;
  height: 55px;
  opacity: 0;
  animation: star-appear 2.5s ease-in-out;
  animation-delay: 0.1s;
  animation-fill-mode: forwards;
}

.learn__screen .stars .star-wrap:nth-child(2) .star {
  animation-delay: 0.8s;
}

.learn__screen .stars .star-wrap:nth-child(3) .star {
  animation-delay: 1.6s;
}

.learn__screen .no-square {
  width: 100px;
  height: 100px;
  position: relative;
  margin: 0 auto 22px auto;
}

.learn__screen h1 {
  font-weight: bold;
  color: #181818;
  font-size: 24px;
  margin-bottom: 22px;
}

.learn__screen .round-svg {
  width: 240px;
  height: 240px;
  padding: 0px;
  background: #f57c00;
  border-radius: 50%;
  margin: 0 auto 10px auto;
}

.learn__screen .round-svg img {
  width: 240px;
  height: 240px;
  padding: 20px;
}

.learn__screen .score {
  text-transform: uppercase;
  color: #0288d1;
  font-size: .85em;
  display: block;
  letter-spacing: 1px;
  margin-bottom: 17px;
}

.learn__screen .score span {
  font-weight: bold;
  font-family: 'Roboto Mono';
}

.learn__screen p {
  color: #999999;
  padding: 0 15%;
  line-height: 24px;
  margin-bottom: 17px;
}

.learn__screen .buttons {
  width: 100%;
  text-align: center;
  margin-bottom: 23px;
}

.learn__screen .buttons a {
  display: block;
  text-decoration: none;
  text-transform: uppercase;
  line-height: 48px;
  margin: 8px 10% 0 10%;
  height: 48px;
  color: #fff;
  transition: all 0.3s;
}

.learn__screen .buttons a {
  margin-top: 8px;
}

.learn__screen .buttons .next {
  font-size: .9em;
  background: #4fc3f7;
}

.learn__screen .buttons .back {
  font-size: .85em;
  background: #f57c00;
}

.learn__screen .buttons a:hover {
  filter: brightness(0.9);
}

.learn__screen piece {
  width: 100%;
  height: 100%;
}

.learn__side-map {
  user-select: none;
}

.learn__side-map .back,
.learn__side-map .categ > h2 {
  display: block;
  font-size: 1.3em;
  height: 50px;
  line-height: 50px;
  text-indent: 15px;
  cursor: pointer;
  opacity: 0.81;
}

.learn__side-map .back {
  display: flex;
  color: #4d4d4d;
}

.learn__side-map .back img {
  width: 50px;
  height: 50px;
  opacity: 0.9;
  margin-right: 10px;
  padding: 10px;
  background: #787878;
  display: block;
}

.learn__side-map .back:hover {
  background: rgba(120, 120, 120, 0.2);
}

.learn__side-map .categ > h2 {
  border-top: 1px solid #d9d9d9;
}

.learn__side-map .categ > h2:hover {
  background: rgba(189, 17, 31, 0.2);
}

.learn__side-map .categ.active {
  border: 1px solid #d9d9d9;
  border-width: 0 1px;
}

.learn__side-map .categ.active:last-child {
  border-bottom-width: 1px;
}

.learn__side-map .categ.active > h2 {
  cursor: default;
  background: #bd111f;
  color: #fff;
}

.learn__side-map .categ:not(.active) .categ_stages {
  display: none;
}

.learn__side-map .stage {
  transition: all 150ms;
  font-size: 1.1em;
  opacity: .9;
  color: #4d4d4d;
}

.learn__side-map .stage img,
.learn__side-map .stage i {
  width: 50px;
  height: 50px;
  opacity: 0.9;
  margin-right: 10px;
  padding: 10px;
}

.learn__side-map .stage i::before {
  font-size: 30px;
}

.learn__side-map .stage.active {
  background: rgba(189, 17, 31, 0.2);
}

.learn__side-map .stage.active img {
  background: #bd111f;
}

.learn__side-map .stage.done:hover {
  background: rgba(98, 153, 36, 0.2);
}

.learn__side-map .stage.done img {
  background: #629924;
}

.learn__side-map .stage.future:hover {
  background: rgba(189, 17, 31, 0.2);
}

.learn__side-map .stage.future img {
  opacity: 0.7;
  background: #bd111f;
}

.learn__side-map .stage:hover {
  filter: brightness(0.9);
  color: black;
}

.learn__side-home {
  background: #bd111f;
  color: #fff;
  text-align: center;
  padding: 1em 0;
}

.learn__side-home h1 {
  font-size: 2.5em;
  margin: 0;
}

.learn__side-home h2 {
  font-size: 1.8em;
  margin: .4em 0 1em 0;
}

@keyframes fat-glide {
  50% {
    transform: translateY(-4px);
  }
}

.learn__side-home i.fat {
  display: block;
  width: 200px;
  height: 200px;
  background: url("../images/learn/brutal-helm.svg");
  margin: auto;
  opacity: 0.8;
}

.learn__side-home:hover i.fat {
  animation: 1.2s fat-glide ease-in-out infinite;
}

.learn__side-home .progress {
  position: relative;
  width: 100%;
  height: 30px;
  /* border-top: 3px solid #1566b2; */
  background: #ed1c24;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
  overflow: hidden;
}

@keyframes animatedBackground {
  from {
    background-position: 0 0;
  }
  to {
    background-position: 0 1000%;
  }
}

@keyframes animatedBar {
  from {
    transform: translateX(-100px);
  }
  to {
    transform: translateX(0px);
  }
}

.learn__side-home .progress .bar {
  height: 100%;
  background: #8a000b;
  border-radius: 0 5px 5px 0;
  background-image: url("../images/grain.png");
  transform: translateX(-100px);
  animation: animatedBackground 50s linear infinite, animatedBar 1s forwards;
}

.learn__side-home .progress .text {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  line-height: 30px;
  z-index: 3;
}

.learn__side-home .actions {
  padding: 20px 10px;
  text-align: left;
}

.learn__side-home a {
  opacity: 0.6;
  color: #fff;
}

.learn__side-home a:hover {
  opacity: 1;
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhcm4vY3NzL2J1aWxkL2xlYXJuLmxpZ2h0LmNzcyIsInNvdXJjZXMiOlsibGVhcm4vY3NzL2J1aWxkL2xlYXJuLmxpZ2h0LnNjc3MiLCJjb21tb24vY3NzL3RoZW1lL19saWdodC5zY3NzIiwiY29tbW9uL2Nzcy90aGVtZS9fZGVmYXVsdC5zY3NzIiwiY29tbW9uL2Nzcy9hYnN0cmFjdC9fZnVuY3Rpb25zLnNjc3MiLCJsZWFybi9jc3MvYnVpbGQvX2xlYXJuLnNjc3MiLCJjb21tb24vY3NzL19wbHVnaW4uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvX2JyZWFrcG9pbnQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9fc2V0dGluZ3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9fY29udGV4dC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19oZWxwZXJzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvX3BhcnNlcnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL19xdWVyeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvX3NpbmdsZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvc2luZ2xlL19kZWZhdWx0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9fZG91YmxlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9kb3VibGUvX2RlZmF1bHQtcGFpci5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvZG91YmxlL19kb3VibGUtc3RyaW5nLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9kb3VibGUvX2RlZmF1bHQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL190cmlwbGUuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL3RyaXBsZS9fZGVmYXVsdC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvX3Jlc29sdXRpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL3Jlc29sdXRpb24vX3Jlc29sdXRpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9fbm8tcXVlcnkuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9fcmVzcG9uZC10by5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19sZWdhY3ktc2V0dGluZ3Muc2NzcyIsImNvbW1vbi9jc3MvYWJzdHJhY3QvX2FsbC5zY3NzIiwiY29tbW9uL2Nzcy9hYnN0cmFjdC9fei1pbmRleC5zY3NzIiwiY29tbW9uL2Nzcy9hYnN0cmFjdC9fbWVkaWEtcXVlcmllcy5zY3NzIiwiY29tbW9uL2Nzcy9hYnN0cmFjdC9fdmFyaWFibGVzLnNjc3MiLCJjb21tb24vY3NzL2Fic3RyYWN0L191bmlib2FyZC5zY3NzIiwiY29tbW9uL2Nzcy9hYnN0cmFjdC9fbWl4aW5zLnNjc3MiLCJjb21tb24vY3NzL2Fic3RyYWN0L19leHRlbmRzLnNjc3MiLCJjb21tb24vY3NzL2Fic3RyYWN0L19mbGV4LnNjc3MiLCJjb21tb24vY3NzL2Fic3RyYWN0L19ib3guc2NzcyIsImNvbW1vbi9jc3MvYWJzdHJhY3QvX2ZsdWlkLXNpemUuc2NzcyIsImNvbW1vbi9jc3MvdmVuZG9yL2NoZXNzZ3JvdW5kL19jb29yZHMuc2NzcyIsImNvbW1vbi9jc3MvdmVuZG9yL2NoZXNzZ3JvdW5kL19jb29yZHMtY29sb3JzLnNjc3MiLCJjb21tb24vY3NzL2xheW91dC9fdW5pYm9hcmQuc2NzcyIsImNoZXNzL2Nzcy9fcHJvbW90aW9uLnNjc3MiLCJsZWFybi9jc3MvX2xlYXJuLnNjc3MiLCJsZWFybi9jc3MvX2xheW91dC5zY3NzIiwibGVhcm4vY3NzL19tYXAuc2NzcyIsImxlYXJuL2Nzcy9fcnVuLnNjc3MiLCJsZWFybi9jc3MvX3RhYmxlLnNjc3MiLCJsZWFybi9jc3MvX2JvYXJkLnNjc3MiLCJsZWFybi9jc3MvX3NjcmVlbi5zY3NzIiwibGVhcm4vY3NzL19zaWRlLW1hcC5zY3NzIiwibGVhcm4vY3NzL19zaWRlLWhvbWUuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0IFwiLi4vLi4vLi4vY29tbW9uL2Nzcy90aGVtZS9saWdodFwiO1xuQGltcG9ydCBcImxlYXJuXCI7XG4iLCJAaW1wb3J0IFwiZGVmYXVsdFwiO1xuXG4kdGhlbWU6IFwibGlnaHRcIjtcbiR0aGVtZS1saWdodDogdHJ1ZTtcbiR0aGVtZS1kYXJrOiBmYWxzZTtcblxuJGMtYmctcGFnZTogaHNsKDAsIDAlLCAxMDAlKTtcbiRjLWJnLXBhZ2UtaW1nOiB1cmwoLi4vaW1hZ2VzL21vc2Nvdy1jaGVzc19wYXR0ZXJuX2xpZ2h0X2FuZ2xlZC0wMS5wbmcpO1xuJGMtYmctcGFnZS1iczogMTAlO1xuXG5AbWl4aW4gbWV0YWwtYmcge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBoc2woMCwgMCwgOTYpIDAlLCBoc2woMCwgMCwgOTMpIDEwMCUpO1xufVxuXG5AbWl4aW4gbWV0YWwge1xuICBAaW5jbHVkZSBtZXRhbC1iZztcblxuICB0ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xufVxuXG5AbWl4aW4gbWV0YWwtaG92ZXIge1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBoc2woMCwgMCwgOTgpIDAlLCBoc2woMCwgMCwgOTUpIDEwMCUpO1xuICB0ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xufVxuXG5AbWl4aW4gcGFnZS1tZXRhbCB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIG1peCgkYy1saW5rLCBoc2woMCwgMCUsIDEwMCUpLCAyMCUpIDAlLCBtaXgoJGMtbGluaywgaHNsKDAsIDAlLCA5NCUpLCAyMCUpIDEwMCUpO1xuICB0ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xufVxuXG5AbWl4aW4gcGFnZS1tZXRhbC1ob3ZlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIG1peCgkYy1saW5rLCAjZmZmLCAyNSUpIDAlLCBtaXgoJGMtbGluaywgYy1saWdodCgkYy1iZy1wYWdlLCA5MCUpLCAyNSUpIDEwMCUpO1xuICB0ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xufVxuXG5AbWl4aW4gdGhlbWUtc3R5bGUge31cbiIsIkBpbXBvcnQgXCIuLi9hYnN0cmFjdC9mdW5jdGlvbnNcIjtcblxuLyogQ29sb3JzICovXG5cbkBmdW5jdGlvbiBjLWRpbW1lcigkY29sb3IsICR3ZWlnaHQ6IDE3JSkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICR3ZWlnaHQpO1xufVxuXG5AZnVuY3Rpb24gYy1jbGVhcmVyKCRjb2xvciwgJHdlaWdodDogMTclKSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHdlaWdodCk7XG59XG5cbiRjLXNpdGUtaHVlOiAzNztcblxuJGMtYmctcGFnZTogaHNsKCRjLXNpdGUtaHVlLCAxMCUsIDkyJSk7XG5cbiRjLWJnLXBhZ2UtaW1nOiBub25lO1xuJGMtYmctcGFnZS1iczogYXV0bztcblxuLy8gaHNsKDIxMCwgMTclLCA5NSUpXG4kYy1iZy1oaWdoOiBoc2woMCwgMCUsIDEwMCUpO1xuJGMtYmctbG93OiBoc2woMCwgMCUsIDg5JSk7XG5cbi8qIGV2ZW4gcm93cyBpbiBsaXN0IG9yIHRhYmxlcywgc3VidGxlIHNoYWRlIG9mICRjLWJnLWhpZ2ggKi9cbiRjLWJnLXplYnJhOiBoc2woJGMtc2l0ZS1odWUsIDEyJSwgOTYuNSUpO1xuJGMtYmctemVicmEyOiBoc2woJGMtc2l0ZS1odWUsIDEyJSwgOTIlKTtcblxuJGMtYm9keS1ncmFkaWVudDogaHNsKCRjLXNpdGUtaHVlLCAxMiUsIDg0JSk7XG5cbiRjLWZvbnQ6IGhzbCgwLCAwJSwgMzAlKTtcbiRjLWZvbnQtZGltOiBjLWxpZ2h0KCRjLWZvbnQsIDQ3JSk7XG4kYy1mb250LWRpbW1lcjogYy1saWdodCgkYy1mb250LCA3MCUpO1xuJGMtZm9udC1jbGVhcjogYy1saWdodCgkYy1mb250LCAxMiUpO1xuJGMtZm9udC1jbGVhcmVyOiBjLWxpZ2h0KCRjLWZvbnQsIDAlKTtcbiRjLXNoYWRlOiBjLWRpbW1lcigkYy1mb250LCA4MCUpO1xuJGMtZm9udC1wYWdlOiBjLWxpZ2h0KCRjLWZvbnQsIDM3JSk7XG5cbi8qIFByaW1hcnk6IGJsdWUgKi9cbiRjLXByaW1hcnk6ICNiZDExMWY7XG4kYy1wcmltYXJ5LWRpbTogYy1kaW1tZXIoJGMtcHJpbWFyeSk7XG4kYy1wcmltYXJ5LWNsZWFyOiBjLWNsZWFyZXIoJGMtcHJpbWFyeSk7XG4kYy1wcmltYXJ5LW92ZXI6ICNmZmY7XG5cbi8qIHRleHQgb3ZlciBwcmltYXJ5IGJhY2tncm91bmQgKi9cblxuLyogU2Vjb25kYXJ5OiBncmVlbiAqL1xuJGMtc2Vjb25kYXJ5OiBoc2woODgsIDYyJSwgMzclKTtcbiRjLXNlY29uZGFyeS1kaW06IGMtZGltbWVyKCRjLXNlY29uZGFyeSk7XG4kYy1zZWNvbmRhcnktZGltbWVyOiBjLWRpbW1lcigkYy1zZWNvbmRhcnksIDQwJSk7XG4kYy1zZWNvbmRhcnktb3ZlcjogI2ZmZjtcblxuLyogdGV4dCBvdmVyIHNlY29uZGFyeSBiYWNrZ3JvdW5kICovXG5cbi8qIEFjY2VudDogb3JhbmdlICovXG4kYy1hY2NlbnQ6ICNiZDExMWY7XG4kYy1hY2NlbnQtZGltOiBjLWRpbW1lcigkYy1hY2NlbnQpO1xuJGMtYWNjZW50LWNsZWFyOiBjLWNsZWFyZXIoJGMtYWNjZW50KTtcbiRjLWFjY2VudC1vdmVyOiAjZmZmO1xuXG4vKiB0ZXh0IG92ZXIgYWNjZW50IGJhY2tncm91bmQgKi9cblxuLyogQnJhZzogZ29sZCAqL1xuJGMtYnJhZzogaHNsKDM3LCA3NCUsIDQ4JSk7XG4kYy1icmFnLW92ZXI6ICNmZmY7XG5cbi8qIHRleHQgb3ZlciBicmFnIGJhY2tncm91bmQgKi9cblxuLyogRXJyb3I6IHJlZCAqL1xuJGMtcmVkOiBoc2woMCwgNjAlLCA1MCUpO1xuJGMtZXJyb3I6ICRjLXJlZDtcbiRjLWVycm9yLW92ZXI6ICNmZmY7XG5cbi8qIHRleHQgb3ZlciBicmFnIGJhY2tncm91bmQgKi9cblxuLyogR29vZDogZ3JlZW4gKi9cbiRjLWdvb2Q6ICRjLXNlY29uZGFyeTtcbiRjLWdvb2Qtb3ZlcjogJGMtc2Vjb25kYXJ5LW92ZXI7XG5cbi8qIFdhcm46IG9yYW5nZSAqL1xuJGMtd2FybjogJGMtYnJhZztcbiRjLXdhcm4tb3ZlcjogJGMtYnJhZy1vdmVyO1xuXG4vKiBCYWQ6IHJlZCAqL1xuJGMtYmFkOiAkYy1lcnJvcjtcbiRjLWJhZC1vdmVyOiAkYy1lcnJvci1vdmVyO1xuXG4vKiBGYW5jeTogcGluayAqL1xuJGMtZmFuY3k6IGhzbCgyOTQsIDYxJSwgNjIlKTtcbiRjLWZhbmN5LW92ZXI6IHdoaXRlO1xuXG4vKiB0ZXh0IG92ZXIgYnJhZyBiYWNrZ3JvdW5kICovXG5cbiRjLWxpbms6ICRjLXByaW1hcnk7XG4kYy1saW5rLWRpbTogJGMtcHJpbWFyeS1kaW07XG4kYy1saW5rLWNsZWFyOiAkYy1wcmltYXJ5LWNsZWFyO1xuJGMtbGluay1ob3ZlcjogYy1jbGVhcmVyKHNhdHVyYXRlKCRjLXByaW1hcnksIDEwMCUpLCAzNSUpO1xuJGMtbGluay1vdmVyOiAkYy1wcmltYXJ5LW92ZXI7XG5cbiRjLWJnLWJveDogJGMtYmctaGlnaDtcbiRjLWJnLWJveC1vcGFxdWU6ICRjLWJnLWJveDtcbiRjLWJnLWlucHV0OiBjLWxpZ2h0KCRjLWJnLXBhZ2UsIDk4JSk7XG5cbiRjLWJvcmRlcjogaHNsKDAsIDAlLCA4NSUpO1xuJGMtYm9yZGVyLXBhZ2U6IGhzbCgwLCAwJSwgODAlKTtcblxuJGMtcGFnZS1tYXNrOiBoc2xhKDAsIDAsIDAlLCAwLjYpO1xuXG4kYy1iZy1wb3B1cDogJGMtYmctaGlnaDtcbiRjLXBvcHVwOiAkYy1mb250O1xuXG4kYy1iZy1oZWFkZXItZHJvcGRvd246ICRjLWJnLXBvcHVwO1xuJGMtaGVhZGVyLWRyb3Bkb3duOiAkYy1wb3B1cDtcblxuJGMtZm9udC1zaGFkb3c6IHdoaXRlO1xuJHRleHQtc2hhZG93OiAwIDFweCAwICRjLWZvbnQtc2hhZG93O1xuXG4kYy1ib3Q6ICRjLWZhbmN5O1xuXG4kYy1wYWdlLWlucHV0OiAkYy1iZy1sb3c7XG5cbi8qIEJvcmRlcnMgKi9cblxuJGJvcmRlci13aWR0aDogMXB4O1xuJGJvcmRlci1zdHlsZTogc29saWQ7XG4kYm9yZGVyOiAkYm9yZGVyLXdpZHRoICRib3JkZXItc3R5bGUgJGMtYm9yZGVyO1xuXG4vKiBTaGFkb3dzICovXG5cbiRib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xMik7XG5cbi8vICRib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsMCwwLC4xNTcpO1xuXG4vKiBDdXN0b20gKi9cbiR3YXJuaW5nLWljb24tY29sb3I6IGhzbCg0NCwgMTAwJSwgNDYlKTtcbiIsIkBmdW5jdGlvbiBjLWxpZ2h0KCRjb2xvciwgJHZhbHVlKSB7XG4gIEByZXR1cm4gY2hhbmdlLWNvbG9yKCRjb2xvciwgJGxpZ2h0bmVzczogJHZhbHVlKTtcbn1cblxuQGZ1bmN0aW9uIGltZy11cmwoJHBhdGgpIHtcbiAgQHJldHVybiB1cmwoXCIjeyRpbWctcGF0aH0vI3skcGF0aH1cIik7XG59XG4iLCJAaW1wb3J0IFwiLi4vLi4vLi4vY29tbW9uL2Nzcy9wbHVnaW5cIjtcbkBpbXBvcnQgXCIuLi8uLi8uLi9jb21tb24vY3NzL3ZlbmRvci9jaGVzc2dyb3VuZC9jb29yZHNcIjtcbkBpbXBvcnQgXCIuLi8uLi8uLi9jb21tb24vY3NzL2xheW91dC91bmlib2FyZFwiO1xuQGltcG9ydCBcIi4uLy4uLy4uL2NoZXNzL2Nzcy9wcm9tb3Rpb25cIjtcbkBpbXBvcnQgXCIuLi9sZWFyblwiO1xuIiwiLyogQ29tbW9uIGltcG9ydHMgZm9yIGFsbCBDU1MgbW9kdWxlcyAqL1xuXG5AaW1wb3J0IFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50XCI7XG5cbkBpbXBvcnQgXCJhYnN0cmFjdC9hbGxcIjtcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGVmYXVsdCBWYXJpYWJsZXNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuJEJyZWFrcG9pbnQtU2V0dGluZ3M6IChcbiAgJ2RlZmF1bHQgbWVkaWEnOiBhbGwsXG4gICdkZWZhdWx0IGZlYXR1cmUnOiBtaW4td2lkdGgsXG4gICdkZWZhdWx0IHBhaXInOiB3aWR0aCxcblxuICAnZm9yY2UgYWxsIG1lZGlhIHR5cGUnOiBmYWxzZSxcbiAgJ3RvIGVtcyc6IGZhbHNlLFxuICAndHJhbnNmb3JtIHJlc29sdXRpb25zJzogdHJ1ZSxcblxuICAnbm8gcXVlcmllcyc6IGZhbHNlLFxuICAnbm8gcXVlcnkgZmFsbGJhY2tzJzogZmFsc2UsXG5cbiAgJ2Jhc2UgZm9udCBzaXplJzogMTZweCxcblxuICAnbGVnYWN5IHN5bnRheCc6IGZhbHNlXG4pO1xuXG4kYnJlYWtwb2ludDogKCkgIWRlZmF1bHQ7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW1wb3J0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AaW1wb3J0IFwiYnJlYWtwb2ludC9zZXR0aW5nc1wiO1xuQGltcG9ydCAnYnJlYWtwb2ludC9jb250ZXh0JztcbkBpbXBvcnQgJ2JyZWFrcG9pbnQvaGVscGVycyc7XG5AaW1wb3J0ICdicmVha3BvaW50L3BhcnNlcnMnO1xuQGltcG9ydCAnYnJlYWtwb2ludC9uby1xdWVyeSc7XG5cbkBpbXBvcnQgJ2JyZWFrcG9pbnQvcmVzcG9uZC10byc7XG5cbkBpbXBvcnQgXCJicmVha3BvaW50L2xlZ2FjeS1zZXR0aW5nc1wiO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEJyZWFrcG9pbnQgTWl4aW5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5AbWl4aW4gYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeTogZmFsc2UpIHtcbiAgQGluY2x1ZGUgbGVnYWN5LXNldHRpbmdzLXdhcm5pbmc7XG5cbiAgLy8gUmVzZXQgY29udGV4dHNcbiAgQGluY2x1ZGUgcHJpdmF0ZS1icmVha3BvaW50LXJlc2V0LWNvbnRleHRzKCk7XG5cbiAgJGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQoJHF1ZXJ5LCBmYWxzZSk7XG5cbiAgJHF1ZXJ5LXN0cmluZzogbWFwLWdldCgkYnJlYWtwb2ludCwgJ3F1ZXJ5Jyk7XG4gICRxdWVyeS1mYWxsYmFjazogbWFwLWdldCgkYnJlYWtwb2ludCwgJ2ZhbGxiYWNrJyk7XG5cbiAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogbWFwLWdldCgkYnJlYWtwb2ludCwgJ2NvbnRleHQgaG9sZGVyJykgIWdsb2JhbDtcbiAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogbWFwLWdldCgkYnJlYWtwb2ludCwgJ3F1ZXJ5IGNvdW50JykgIWdsb2JhbDtcblxuICAvLyBBbGxvdyBmb3IgYW4gYXMtbmVlZGVkIG92ZXJyaWRlIG9yIHVzYWdlIG9mIG5vIHF1ZXJ5IGZhbGxiYWNrLlxuICBAaWYgJG5vLXF1ZXJ5ICE9IGZhbHNlIHtcbiAgICAkcXVlcnktZmFsbGJhY2s6ICRuby1xdWVyeTtcbiAgfVxuXG4gIEBpZiAkcXVlcnktZmFsbGJhY2sgIT0gZmFsc2Uge1xuICAgICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCduby1xdWVyeScsICRxdWVyeS1mYWxsYmFjayk7XG4gIH1cblxuICAvLyBQcmludCBPdXQgUXVlcnkgU3RyaW5nXG4gIEBpZiBub3QgYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJpZXMnKSB7XG4gICAgQG1lZGlhICN7JHF1ZXJ5LXN0cmluZ30ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSAhPSBmYWxzZSBvciBicmVha3BvaW50LWdldCgnbm8gcXVlcmllcycpID09IHRydWUge1xuXG4gICAgJHR5cGU6IHR5cGUtb2YoYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpKTtcbiAgICAkcHJpbnQ6IGZhbHNlO1xuXG4gICAgQGlmICgkdHlwZSA9PSAnYm9vbCcpIHtcbiAgICAgICRwcmludDogdHJ1ZTtcbiAgICB9XG4gICAgQGVsc2UgaWYgKCR0eXBlID09ICdzdHJpbmcnKSB7XG4gICAgICBAaWYgJHF1ZXJ5LWZhbGxiYWNrID09IGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSB7XG4gICAgICAgICRwcmludDogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2UgaWYgKCR0eXBlID09ICdsaXN0Jykge1xuICAgICAgQGVhY2ggJHdyYXBwZXIgaW4gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpIHtcbiAgICAgICAgQGlmICRxdWVyeS1mYWxsYmFjayA9PSAkd3JhcHBlciB7XG4gICAgICAgICAgJHByaW50OiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgRmFsbGJhY2tcbiAgICBAaWYgKCRxdWVyeS1mYWxsYmFjayAhPSBmYWxzZSkgYW5kICgkcHJpbnQgPT0gdHJ1ZSkge1xuICAgICAgJHR5cGUtZmFsbGJhY2s6IHR5cGUtb2YoJHF1ZXJ5LWZhbGxiYWNrKTtcblxuICAgICAgQGlmICgkdHlwZS1mYWxsYmFjayAhPSAnYm9vbCcpIHtcbiAgICAgICAgI3skcXVlcnktZmFsbGJhY2t9ICYge1xuICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHByaXZhdGUtYnJlYWtwb2ludC1yZXNldC1jb250ZXh0cygpO1xufVxuXG5cbkBtaXhpbiBtcSgkcXVlcnksICRuby1xdWVyeTogZmFsc2UpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeSkge1xuICAgIEBjb250ZW50O1xuICB9XG59XG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEhhcyBTZXR0aW5nXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LWhhcygkc2V0dGluZykge1xuICBAaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnQsICRzZXR0aW5nKSB7XG4gICAgQHJldHVybiB0cnVlO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gR2V0IFNldHRpbmdzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LWdldCgkc2V0dGluZykge1xuICBAaWYgYnJlYWtwb2ludC1oYXMoJHNldHRpbmcpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJGJyZWFrcG9pbnQsICRzZXR0aW5nKTtcbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KCRCcmVha3BvaW50LVNldHRpbmdzLCAkc2V0dGluZyk7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBTZXQgU2V0dGluZ3Ncbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtc2V0KCRzZXR0aW5nLCAkdmFsdWUpIHtcbiAgQGlmIChzdHItaW5kZXgoJHNldHRpbmcsICctJykgb3Igc3RyLWluZGV4KCRzZXR0aW5nLCAnXycpKSBhbmQgc3RyLWluZGV4KCRzZXR0aW5nLCAnICcpID09IG51bGwge1xuICAgIEB3YXJuIFwiV29yZHMgaW4gQnJlYWtwb2ludCBzZXR0aW5ncyBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5IHNwYWNlcywgbm90IGRhc2hlcyBvciB1bmRlcnNjb3Jlcy4gUGxlYXNlIHJlcGxhY2UgZGFzaGVzIGFuZCB1bmRlcnNjb3JlcyBiZXR3ZWVuIHdvcmRzIHdpdGggc3BhY2VzLiBTZXR0aW5ncyB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIHVudGlsIGNoYW5nZWQuXCI7XG4gIH1cbiAgJGJyZWFrcG9pbnQ6IG1hcC1tZXJnZSgkYnJlYWtwb2ludCwgKCRzZXR0aW5nOiAkdmFsdWUpKSAhZ2xvYmFsO1xuICBAcmV0dXJuIHRydWU7XG59XG5cbkBtaXhpbiBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKSB7XG4gICRicmVha3BvaW50LWNoYW5nZTogYnJlYWtwb2ludC1zZXQoJHNldHRpbmcsICR2YWx1ZSk7XG59XG5cbkBtaXhpbiBicmVha3BvaW50LXNldCgkc2V0dGluZywgJHZhbHVlKSB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQtY2hhbmdlKCRzZXR0aW5nLCAkdmFsdWUpO1xufVxuXG5AbWl4aW4gYmtwdC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSkge1xuICBAaW5jbHVkZSBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKTtcbn1cbkBtaXhpbiBia3B0LXNldCgkc2V0dGluZywgJHZhbHVlKSB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQtY2hhbmdlKCRzZXR0aW5nLCAkdmFsdWUpO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFJlbW92ZSBTZXR0aW5nXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncy4uLikge1xuICBAaWYgbGVuZ3RoKCRzZXR0aW5ncykgPT0gMSB7XG4gICAgJHNldHRpbmdzOiBudGgoJHNldHRpbmdzLCAxKTtcbiAgfVxuXG4gIEBlYWNoICRzZXR0aW5nIGluICRzZXR0aW5ncyB7XG4gICAgJGJyZWFrcG9pbnQ6IG1hcC1yZW1vdmUoJGJyZWFrcG9pbnQsICRzZXR0aW5nKSAhZ2xvYmFsO1xuICB9XG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuQG1peGluIGJyZWFrcG9pbnQtcmVzZXQoJHNldHRpbmdzLi4uKSB7XG4gICRicmVha3BvaW50LXJlc2V0OiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncyk7XG59XG5cbkBtaXhpbiBia3B0LXJlc2V0KCRzZXR0aW5ncy4uLikge1xuICAkYnJlYWtwb2ludC1yZXNldDogYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MpO1xufSIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUHJpdmF0ZSBCcmVha3BvaW50IFZhcmlhYmxlc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4kcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiAoKTtcbiRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6IDAgIWRlZmF1bHQ7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQnJlYWtwb2ludCBIYXMgQ29udGV4dFxuLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB5b3UgYXJlIGluc2lkZSBhIEJyZWFrcG9pbnQgcXVlcnlcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaGFzLWNvbnRleHQoKSB7XG4gIEBpZiBsZW5ndGgoJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCkge1xuICAgIEByZXR1cm4gdHJ1ZTtcbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEJyZWFrcG9pbnQgR2V0IENvbnRleHRcbi8vICRmZWF0dXJlOiBJbnB1dCBmZWF0dXJlIHRvIGdldCBpdCdzIGN1cnJlbnQgTVEgY29udGV4dC4gUmV0dXJucyBmYWxzZSBpZiBubyBjb250ZXh0XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LWdldC1jb250ZXh0KCRmZWF0dXJlKSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSkge1xuICAgICRnZXQ6IG1hcC1nZXQoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpO1xuICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgb2Ygbm8tcXVlcnkgZnJvbSBnZXQgc2lkZSBzbyAvZmFsc2UvIHByZXBlbmRzIGFyZW4ndCByZXR1cm5lZFxuICAgIEBpZiAkZmVhdHVyZSA9PSAnbm8tcXVlcnknIHtcbiAgICAgIEBpZiB0eXBlLW9mKCRnZXQpID09ICdsaXN0JyBhbmQgbGVuZ3RoKCRnZXQpID4gMSBhbmQgbnRoKCRnZXQsIDEpID09IGZhbHNlIHtcbiAgICAgICAgJGdldDogbnRoKCRnZXQsIGxlbmd0aCgkZ2V0KSk7XG4gICAgICB9XG4gICAgfVxuICAgIEByZXR1cm4gJGdldDtcbiAgfVxuICBAZWxzZSB7XG4gICAgQGlmIGJyZWFrcG9pbnQtaGFzLWNvbnRleHQoKSBhbmQgJGZlYXR1cmUgPT0gJ21lZGlhJyB7XG4gICAgICBAcmV0dXJuIGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJyk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUHJpdmF0ZSBmdW5jdGlvbiB0byBzZXQgY29udGV4dFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkdmFsdWUpIHtcbiAgQGlmICR2YWx1ZSA9PSAnbW9ub2Nocm9tZScge1xuICAgICRmZWF0dXJlOiAnbW9ub2Nocm9tZSc7XG4gIH1cblxuICAkY3VycmVudDogbWFwLWdldCgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSk7XG4gIEBpZiAkY3VycmVudCBhbmQgbGVuZ3RoKCRjdXJyZW50KSA9PSAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50IHtcbiAgICBAd2FybiBcIllvdSBoYXZlIGFscmVhZHkgcXVlcmllZCBhZ2FpbnN0IGAjeyRmZWF0dXJlfWAuIFVuZXhwZWN0ZWQgdGhpbmdzIG1heSBoYXBwZW4gaWYgeW91IHF1ZXJ5IGFnYWluc3QgdGhlIHNhbWUgZmVhdHVyZSBtb3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBgYW5kYCBxdWVyeS4gQnJlYWtwb2ludCBpcyBvdmVyd3JpdGluZyB0aGUgY3VycmVudCBjb250ZXh0IHdpdGggYCN7JHZhbHVlfWBcIjtcbiAgfVxuXG4gIEBpZiBub3QgbWFwLWhhcy1rZXkoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpIHtcbiAgICAkdi1ob2xkZXI6ICgpO1xuICAgIEBmb3IgJGkgZnJvbSAxIHRvICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQge1xuICAgICAgQGlmICRmZWF0dXJlID09ICdtZWRpYScge1xuICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCAkdmFsdWUpO1xuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6IG1hcC1tZXJnZSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAoJGZlYXR1cmU6ICR2LWhvbGRlcikpICFnbG9iYWw7XG4gIH1cbiAgQGVsc2Uge1xuICAgICR2LWhvbGRlcjogbWFwLWdldCgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSk7XG4gICAgJGxlbmd0aDogbGVuZ3RoKCR2LWhvbGRlcik7XG4gICAgQGZvciAkaSBmcm9tICRsZW5ndGggdG8gJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCAtIDEge1xuICAgICAgQGlmICRmZWF0dXJlID09ICdtZWRpYScge1xuICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCAkdmFsdWUpO1xuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6IG1hcC1tZXJnZSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAoJGZlYXR1cmU6ICR2LWhvbGRlcikpICFnbG9iYWw7XG4gIH1cblxuICBAcmV0dXJuIHRydWU7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUHJpdmF0ZSBmdW5jdGlvbiB0byByZXNldCBjb250ZXh0XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBtaXhpbiBwcml2YXRlLWJyZWFrcG9pbnQtcmVzZXQtY29udGV4dHMge1xuICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiAoKSAhZ2xvYmFsO1xuICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAwICFnbG9iYWw7XG59IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb252ZXJ0cyB0aGUgaW5wdXQgdmFsdWUgdG8gQmFzZSBFTXNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkdmFsdWUpIHtcbiAgJHZhbHVlLXVuaXQ6IHVuaXQoJHZhbHVlKTtcblxuICAvLyBXaWxsIGNvbnZlcnQgcmVsYXRpdmUgRU1zIGludG8gcm9vdCBFTXMuXG4gIEBpZiBicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSBhbmQgdHlwZS1vZihicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSkgPT0gJ251bWJlcicgYW5kICR2YWx1ZS11bml0ID09ICdlbScge1xuICAgICRiYXNlLXVuaXQ6IHVuaXQoYnJlYWtwb2ludC1nZXQoJ2Jhc2UgZm9udCBzaXplJykpO1xuXG4gICAgQGlmICRiYXNlLXVuaXQgPT0gJ3B4JyBvciAkYmFzZS11bml0ID09ICclJyBvciAkYmFzZS11bml0ID09ICdlbScgb3IgJGJhc2UtdW5pdCA9PSAncHQnIHtcbiAgICAgIEByZXR1cm4gYmFzZS1jb252ZXJzaW9uKCR2YWx1ZSkgLyBiYXNlLWNvbnZlcnNpb24oYnJlYWtwb2ludC1nZXQoJ2Jhc2UgZm9udCBzaXplJykpICogMWVtO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAd2FybiAnI3ticmVha3BvaW50LWdldChcXCdiYXNlIGZvbnQgc2l6ZVxcJyl9IGlzIG5vdCBzZXQgaW4gdmFsaWQgdW5pdHMgZm9yIGZvbnQgc2l6ZSEnO1xuICAgICAgQHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gYmFzZS1jb252ZXJzaW9uKCR2YWx1ZSk7XG4gIH1cbn1cblxuQGZ1bmN0aW9uIGJhc2UtY29udmVyc2lvbigkdmFsdWUpIHtcbiAgJHVuaXQ6IHVuaXQoJHZhbHVlKTtcblxuICBAaWYgJHVuaXQgPT0gJ3B4JyB7XG4gICAgQHJldHVybiAkdmFsdWUgLyAxNnB4ICogMWVtO1xuICB9XG4gIEBlbHNlIGlmICR1bml0ID09ICclJyB7XG4gICAgQHJldHVybiAkdmFsdWUgLyAxMDAlICogMWVtO1xuICB9XG4gIEBlbHNlIGlmICR1bml0ID09ICdlbScge1xuICAgIEByZXR1cm4gJHZhbHVlO1xuICB9XG4gIEBlbHNlIGlmICR1bml0ID09ICdwdCcge1xuICAgIEByZXR1cm4gJHZhbHVlIC8gMTJwdCAqIDFlbTtcbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiAkdmFsdWU7XG4vLyAgICBAd2FybiAnRXZlcnl0aGluZyBpcyB0ZXJyaWJsZSEgV2hhdCBoYXZlIHlvdSBkb25lPyEnO1xuICB9XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGNhbiBoYXZlIGEgbWluL21heCBwYWlyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiRicmVha3BvaW50LW1pbi1tYXgtZmVhdHVyZXM6ICdjb2xvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3ItaW5kZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzcGVjdC1yYXRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlLWFzcGVjdC1yYXRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlLWhlaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlLXdpZHRoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vbm9jaHJvbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc29sdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJztcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWluLW1heCgkZmVhdHVyZSkge1xuICBAZWFjaCAkaXRlbSBpbiAkYnJlYWtwb2ludC1taW4tbWF4LWZlYXR1cmVzIHtcbiAgICBAaWYgJGZlYXR1cmUgPT0gJGl0ZW0ge1xuICAgICAgQHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBAcmV0dXJuIGZhbHNlO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFJldHVybnMgd2hldGhlciB0aGUgZmVhdHVyZSBjYW4gaGF2ZSBhIHN0cmluZyB2YWx1ZVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4kYnJlYWtwb2ludC1zdHJpbmctZmVhdHVyZXM6ICAnb3JpZW50YXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3BlY3QtcmF0aW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RldmljZS1hc3BlY3QtcmF0aW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x1bWlub3NpdHknO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1zdHJpbmctdmFsdWUoJGZlYXR1cmUpIHtcbiAgQGVhY2ggJGl0ZW0gaW4gJGJyZWFrcG9pbnQtc3RyaW5nLWZlYXR1cmVzIHtcbiAgICBAaWYgYnJlYWtwb2ludC1taW4tbWF4KCRpdGVtKSB7XG4gICAgICBAaWYgJGZlYXR1cmUgPT0gJ21pbi0jeyRpdGVtfScgb3IgJGZlYXR1cmUgPT0gJ21heC0jeyRpdGVtfScge1xuICAgICAgICBAcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIGlmICRmZWF0dXJlID09ICRpdGVtIHtcbiAgICAgIEByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiBmYWxzZTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmUgaXMgYSBtZWRpYSB0eXBlXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiRicmVha3BvaW50LW1lZGlhLXR5cGVzOiAgJ2FsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdicmFpbGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYm9zc2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbmRoZWxkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NyZWVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwZWVjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0dHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAndHYnO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1pcy1tZWRpYSgkZmVhdHVyZSkge1xuICBAZWFjaCAkbWVkaWEgaW4gJGJyZWFrcG9pbnQtbWVkaWEtdHlwZXMge1xuICAgIEBpZiAoJGZlYXR1cmUgPT0gJG1lZGlhKSBvciAoJGZlYXR1cmUgPT0gJ25vdCAjeyRtZWRpYX0nKSBvciAoJGZlYXR1cmUgPT0gJ29ubHkgI3skbWVkaWF9Jykge1xuICAgICAgQHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gZmFsc2U7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGNhbiBzdGFuZCBhbG9uZVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4kYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nLWZlYXR1cmVzOiAnY29sb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yLWluZGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncmlkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb25vY2hyb21lJztcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZygkZmVhdHVyZSkge1xuICBAZWFjaCAkaXRlbSBpbiAkYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nLWZlYXR1cmVzIHtcbiAgICBAaWYgJGZlYXR1cmUgPT0gJGl0ZW0ge1xuICAgICAgQHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBAcmV0dXJuIGZhbHNlO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFJldHVybnMgd2hldGhlciB0aGUgZmVhdHVyZVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1pcy1yZXNvbHV0aW9uKCRmZWF0dXJlKSB7XG4gICRyZXNvbHV0aW9uczogJ2RldmljZS1waXhlbC1yYXRpbycsICdkcHInO1xuXG4gIEBpZiBicmVha3BvaW50LWdldCgndHJhbnNmb3JtIHJlc29sdXRpb25zJykge1xuICAgICRyZXNvbHV0aW9uczogYXBwZW5kKCRyZXNvbHV0aW9ucywgJ3Jlc29sdXRpb24nKTtcbiAgfVxuXG4gIEBlYWNoICRyZXNvIGluICRyZXNvbHV0aW9ucyB7XG4gICAgQGlmIGluZGV4KCRmZWF0dXJlLCAkcmVzbykgb3IgaW5kZXgoJGZlYXR1cmUsICdtaW4tI3skcmVzb30nKSBvciBpbmRleCgkZmVhdHVyZSwgJ21heC0jeyRyZXNvfScpIHtcbiAgICAgIEByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIGZhbHNlO1xufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJbXBvcnQgUGFyc2VyIFBpZWNlc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AaW1wb3J0IFwicGFyc2Vycy9xdWVyeVwiO1xuQGltcG9ydCBcInBhcnNlcnMvc2luZ2xlXCI7XG5AaW1wb3J0IFwicGFyc2Vycy9kb3VibGVcIjtcbkBpbXBvcnQgXCJwYXJzZXJzL3RyaXBsZVwiO1xuQGltcG9ydCBcInBhcnNlcnMvcmVzb2x1dGlvblwiO1xuXG4kTWVtby1FeGlzdHM6IGZ1bmN0aW9uLWV4aXN0cyhtZW1vLWdldCkgYW5kIGZ1bmN0aW9uLWV4aXN0cyhtZW1vLXNldCk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQnJlYWtwb2ludCBGdW5jdGlvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludCgkcXVlcnksICRjb250ZXh0cy4uLikge1xuICAkcnVuOiB0cnVlO1xuICAkcmV0dXJuOiAoKTtcblxuICAvLyBHcmFiIHRoZSBNZW1vIE91dHB1dCBpZiBNZW1vaXphdGlvbiBjYW4gYmUgYSB0aGluZ1xuICBAaWYgJE1lbW8tRXhpc3RzIHtcbiAgICAkcmV0dXJuOiBtZW1vLWdldChicmVha3BvaW50LCBicmVha3BvaW50ICRxdWVyeSAkY29udGV4dHMpO1xuXG4gICAgQGlmICRyZXR1cm4gIT0gbnVsbCB7XG4gICAgICAkcnVuOiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBAaWYgbm90ICRNZW1vLUV4aXN0cyBvciAkcnVuIHtcbiAgICAvLyBJbnRlcm5hbCBWYXJpYWJsZXNcbiAgICAkcXVlcnktc3RyaW5nOiAnJztcbiAgICAkcXVlcnktZmFsbGJhY2s6IGZhbHNlO1xuICAgICRyZXR1cm46ICgpO1xuXG4gICAgLy8gUmVzZXJ2ZSBHbG9iYWwgUHJpdmF0ZSBCcmVha3BvaW50IENvbnRleHRcbiAgICAkaG9sZGVyLWNvbnRleHQ6ICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI7XG4gICAgJGhvbGRlci1xdWVyeS1jb3VudDogJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDtcblxuICAgIC8vIFJlc2V0IEdsb2JhbCBQcml2YXRlIEJyZWFrcG9pbnQgQ29udGV4dFxuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpICFnbG9iYWw7XG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogMCAhZ2xvYmFsO1xuXG5cbiAgICAvLyBUZXN0IHRvIHNlZSBpZiBpdCdzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3RcbiAgICAkb3ItbGlzdDogaWYobGlzdC1zZXBhcmF0b3IoJHF1ZXJ5KSA9PSAnY29tbWEnLCB0cnVlLCBmYWxzZSk7XG5cblxuICAgIEBpZiAoJG9yLWxpc3QgPT0gZmFsc2UgYW5kIGJyZWFrcG9pbnQtZ2V0KCdsZWdhY3kgc3ludGF4JykgPT0gZmFsc2UpIHtcbiAgICAgICRxdWVyeS1zdHJpbmc6IGJyZWFrcG9pbnQtcGFyc2UoJHF1ZXJ5KTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgJGxlbmd0aDogbGVuZ3RoKCRxdWVyeSk7XG5cbiAgICAgICRsYXN0OiBudGgoJHF1ZXJ5LCAkbGVuZ3RoKTtcbiAgICAgICRxdWVyeS1mYWxsYmFjazogYnJlYWtwb2ludC1uby1xdWVyeSgkbGFzdCk7XG5cbiAgICAgIEBpZiAoJHF1ZXJ5LWZhbGxiYWNrICE9IGZhbHNlKSB7XG4gICAgICAgICRsZW5ndGg6ICRsZW5ndGggLSAxO1xuICAgICAgfVxuXG4gICAgICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCdsZWdhY3kgc3ludGF4JykgPT0gdHJ1ZSkge1xuICAgICAgICAkbXE6ICgpO1xuXG4gICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICAgICAgJG1xOiBhcHBlbmQoJG1xLCBudGgoJHF1ZXJ5LCAkaSksIGNvbW1hKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRxdWVyeS1zdHJpbmc6IGJyZWFrcG9pbnQtcGFyc2UoJG1xKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJHF1ZXJ5LXN0cmluZzogJyc7XG4gICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICAgICAgJHF1ZXJ5LXN0cmluZzogJHF1ZXJ5LXN0cmluZyArIGlmKCRpID09IDEsICcnLCAnLCAnKSArIGJyZWFrcG9pbnQtcGFyc2UobnRoKCRxdWVyeSwgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRyZXR1cm46ICgncXVlcnknOiAkcXVlcnktc3RyaW5nLFxuICAgICAgICAnZmFsbGJhY2snOiAkcXVlcnktZmFsbGJhY2ssXG4gICAgICAgICdjb250ZXh0IGhvbGRlcic6ICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsXG4gICAgICAgICdxdWVyeSBjb3VudCc6ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnRcbiAgICApO1xuICAgIEBpZiBsZW5ndGgoJGNvbnRleHRzKSA+IDAgYW5kIG50aCgkY29udGV4dHMsIDEpICE9IGZhbHNlIHtcbiAgICAgIEBpZiAkcXVlcnktZmFsbGJhY2sgIT0gZmFsc2Uge1xuICAgICAgICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgnbm8tcXVlcnknLCAkcXVlcnktZmFsbGJhY2spO1xuICAgICAgfVxuICAgICAgJGNvbnRleHQtbWFwOiAoKTtcbiAgICAgIEBlYWNoICRjb250ZXh0IGluICRjb250ZXh0cyB7XG4gICAgICAgICRjb250ZXh0LW1hcDogbWFwLW1lcmdlKCRjb250ZXh0LW1hcCwgKCRjb250ZXh0OiBicmVha3BvaW50LWdldC1jb250ZXh0KCRjb250ZXh0KSkpO1xuICAgICAgfVxuICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sIChjb250ZXh0OiAkY29udGV4dC1tYXApKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBHbG9iYWwgUHJpdmF0ZSBCcmVha3BvaW50IENvbnRleHRcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiAoKSAhZ2xvYmFsO1xuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6IDAgIWdsb2JhbDtcblxuICAgIEBpZiAkTWVtby1FeGlzdHMge1xuICAgICAgJGhvbGRlcjogbWVtby1zZXQoYnJlYWtwb2ludCwgYnJlYWtwb2ludCAkcXVlcnkgJGNvbnRleHRzLCAkcmV0dXJuKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gR2VuZXJhbCBCcmVha3BvaW50IFBhcnNlclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZSgkcXVlcnkpIHtcbiAgLy8gSW5jcmVhc2UgbnVtYmVyIG9mICdhbmQnIHF1ZXJpZXNcbiAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCArIDEgIWdsb2JhbDtcblxuICAvLyBTZXQgdXAgTWVkaWEgVHlwZVxuICAkcXVlcnktcHJpbnQ6ICcnO1xuXG4gICRmb3JjZS1hbGw6ICgoYnJlYWtwb2ludC1nZXQoJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJykgPT0gdHJ1ZSkgYW5kIChicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpID09ICdhbGwnKSk7XG4gICRlbXB0eS1tZWRpYTogdHJ1ZTtcbiAgQGlmICgkZm9yY2UtYWxsID09IHRydWUpIG9yIChicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpICE9ICdhbGwnKSB7XG4gICAgLy8gRm9yY2UgdGhlIHByaW50IG9mIHRoZSBkZWZhdWx0IG1lZGlhIHR5cGUgaWYgKGZvcmNlIGFsbCBpcyB0cnVlIGFuZCBkZWZhdWx0IG1lZGlhIHR5cGUgaXMgYWxsKSBvciAoZGVmYXVsdCBtZWRpYSB0eXBlIGlzIG5vdCBhbGwpXG4gICAgJHF1ZXJ5LXByaW50OiBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpO1xuICAgICRlbXB0eS1tZWRpYTogZmFsc2U7XG4gIH1cblxuXG4gICRxdWVyeS1yZXNvbHV0aW9uOiBmYWxzZTtcblxuICAkcXVlcnktaG9sZGVyOiBicmVha3BvaW50LXBhcnNlLXF1ZXJ5KCRxdWVyeSk7XG5cblxuXG4gIC8vIExvb3Agb3ZlciBlYWNoIHBhcnNlZCBvdXQgcXVlcnkgYW5kIHdyaXRlIGl0IHRvICRxdWVyeS1wcmludFxuICAkZmlyc3Q6IHRydWU7XG5cbiAgQGVhY2ggJGZlYXR1cmUgaW4gJHF1ZXJ5LWhvbGRlciB7XG4gICAgJGxlbmd0aDogbGVuZ3RoKCRmZWF0dXJlKTtcblxuICAgIC8vIFBhcnNlIGEgc2luZ2xlIGZlYXR1cmVcbiAgICBAaWYgKCRsZW5ndGggPT0gMSkge1xuICAgICAgLy8gRmVhdHVyZSBpcyBjdXJyZW50bHkgYSBsaXN0LCBncmFiIHRoZSBhY3R1YWwgdmFsdWVcbiAgICAgICRmZWF0dXJlOiBudGgoJGZlYXR1cmUsIDEpO1xuXG4gICAgICAvLyBNZWRpYSBUeXBlIG11c3QgYnkgY29udmVudGlvbiBiZSB0aGUgZmlyc3QgaXRlbSwgc28gaXQncyBzYWZlIHRvIGZsYXQgb3ZlcnJpZGUgJHF1ZXJ5LXByaW50LCB3aGljaCByaWdodCBub3cgc2hvdWxkIG9ubHkgYmUgdGhlIGRlZmF1bHQgbWVkaWEgdHlwZVxuICAgICAgQGlmIChicmVha3BvaW50LWlzLW1lZGlhKCRmZWF0dXJlKSkge1xuICAgICAgICBAaWYgKCRmb3JjZS1hbGwgPT0gdHJ1ZSkgb3IgKCRmZWF0dXJlICE9ICdhbGwnKSB7XG4gICAgICAgICAgLy8gRm9yY2UgdGhlIHByaW50IG9mIHRoZSBkZWZhdWx0IG1lZGlhIHR5cGUgaWYgKGZvcmNlIGFsbCBpcyB0cnVlIGFuZCBkZWZhdWx0IG1lZGlhIHR5cGUgaXMgYWxsKSBvciAoZGVmYXVsdCBtZWRpYSB0eXBlIGlzIG5vdCBhbGwpXG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAkZmVhdHVyZTtcbiAgICAgICAgICAkZW1wdHktbWVkaWE6IGZhbHNlO1xuXG4gICAgICAgICAgLy8gU2V0IENvbnRleHRcbiAgICAgICAgICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtZWRpYSwgJHF1ZXJ5LXByaW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xuICAgICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XG4gICAgICAgICRmaXJzdDogZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFBhcnNlIGEgZG91YmxlIGZlYXR1cmVcbiAgICBAZWxzZSBpZiAoJGxlbmd0aCA9PSAyKSB7XG4gICAgICBAaWYgKGJyZWFrcG9pbnQtaXMtcmVzb2x1dGlvbigkZmVhdHVyZSkgIT0gZmFsc2UpIHtcbiAgICAgICAgJHF1ZXJ5LXJlc29sdXRpb246ICRmZWF0dXJlO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkcGFyc2VkOiBudWxsO1xuICAgICAgICAvLyBJZiBpdCdzIGEgc3RyaW5nL251bWJlciBwYWlyLFxuICAgICAgICAvLyB3ZSBjaGVjayB0byBzZWUgaWYgb25lIGlzIGEgc2luZ2xlLXN0cmluZyB2YWx1ZSxcbiAgICAgICAgLy8gdGhlbiB3ZSBwYXJzZSBpdCBhcyBhIG5vcm1hbCBkb3VibGVcbiAgICAgICAgJGFscGhhOiBudGgoJGZlYXR1cmUsIDEpO1xuICAgICAgICAkYmV0YTogbnRoKCRmZWF0dXJlLCAyKTtcbiAgICAgICAgQGlmIGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZygkYWxwaGEpIG9yIGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZygkYmV0YSkge1xuICAgICAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2Utc2luZ2xlKCRhbHBoYSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xuICAgICAgICAgICRxdWVyeS1wcmludDogJyN7JHF1ZXJ5LXByaW50fSAjeyRwYXJzZWR9JztcbiAgICAgICAgICAkZmlyc3Q6IGZhbHNlO1xuICAgICAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2Utc2luZ2xlKCRiZXRhLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRvdWJsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xuICAgICAgICAgICRxdWVyeS1wcmludDogJyN7JHF1ZXJ5LXByaW50fSAjeyRwYXJzZWR9JztcbiAgICAgICAgICAkZmlyc3Q6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFBhcnNlIGEgdHJpcGxlIGZlYXR1cmVcbiAgICBAZWxzZSBpZiAoJGxlbmd0aCA9PSAzKSB7XG4gICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXRyaXBsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xuICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xuICAgICAgJGZpcnN0OiBmYWxzZTtcbiAgICB9XG5cbiAgfVxuXG4gIEBpZiAoJHF1ZXJ5LXJlc29sdXRpb24gIT0gZmFsc2UpIHtcbiAgICAkcXVlcnktcHJpbnQ6IGJyZWFrcG9pbnQtYnVpbGQtcmVzb2x1dGlvbigkcXVlcnktcHJpbnQsICRxdWVyeS1yZXNvbHV0aW9uLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XG4gIH1cblxuICAvLyBMb29wIHRocm91Z2ggZWFjaCBmZWF0dXJlIHRoYXQncyBiZWVuIGRldGVjdGVkIHNvIGZhciBhbmQgYXBwZW5kICdmYWxzZScgdG8gdGhlIHRoZSB2YWx1ZSBsaXN0IHRvIGluY3JlbWVudCB0aGVpciBjb3VudGVyc1xuICBAZWFjaCAkZiwgJHYgaW4gJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciB7XG4gICAgJHYtaG9sZGVyOiAkdjtcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJHYtaG9sZGVyKTtcbiAgICBAaWYgbGVuZ3RoKCR2LWhvbGRlcikgPCAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50IHtcbiAgICAgIEBmb3IgJGkgZnJvbSAkbGVuZ3RoIHRvICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQge1xuICAgICAgICBAaWYgJGYgPT0gJ21lZGlhJyB7XG4gICAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpKTtcbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogbWFwLW1lcmdlKCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICgkZjogJHYtaG9sZGVyKSkgIWdsb2JhbDtcbiAgfVxuXG4gIEByZXR1cm4gJHF1ZXJ5LXByaW50O1xufVxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtcXVlcnkoJHF1ZXJ5KSB7XG4gIC8vIFBhcnNlIGZlYXR1cmVzIG91dCBvZiBhbiBpbmRpdmlkdWFsIHF1ZXJ5XG4gICRmZWF0dXJlLWhvbGRlcjogKCk7XG4gICRxdWVyeS1ob2xkZXI6ICgpO1xuICAkbGVuZ3RoOiBsZW5ndGgoJHF1ZXJ5KTtcblxuICBAaWYgJGxlbmd0aCA9PSAyIHtcbiAgICAvLyBJZiB3ZSd2ZSBnb3QgYSBzdHJpbmcvbnVtYmVyLCBudW1iZXIvc3RyaW5nLCBjaGVjayB0byBzZWUgaWYgaXQncyBhIHZhbGlkIHN0cmluZy9udW1iZXIgcGFpciBvciB0d28gc2luZ2xlc1xuICAgIEBpZiAodHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ3N0cmluZycgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMikpID09ICdudW1iZXInKSBvciAodHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ251bWJlcicgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMikpID09ICdzdHJpbmcnKSB7XG5cbiAgICAgICRudW1iZXI6ICcnO1xuICAgICAgJHZhbHVlOiAnJztcblxuICAgICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdzdHJpbmcnIHtcbiAgICAgICAgJG51bWJlcjogbnRoKCRxdWVyeSwgMik7XG4gICAgICAgICR2YWx1ZTogbnRoKCRxdWVyeSwgMSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICRudW1iZXI6IG50aCgkcXVlcnksIDEpO1xuICAgICAgICAkdmFsdWU6IG50aCgkcXVlcnksIDIpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBhIHNpbmdsZSB2YWx1ZSwgY2hlY2sgdG8gc2VlIGlmIHRoZSBudW1iZXIgcGFzc2VkIGluIGlzIGEgdmFsaWQgaW5wdXQgZm9yIHNhaWQgc2luZ2xlIHZhbHVlLiBGb3J0dW5hdGVseSwgYWxsIGN1cnJlbnQgc2luZ2xlLXZhbHVlIG9wdGlvbnMgb25seSBhY2NlcHQgdW5pdGxlc3MgbnVtYmVycywgc28gdGhpcyBjaGVjayBpcyBlYXN5LlxuICAgICAgQGlmIGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZygkdmFsdWUpIHtcbiAgICAgICAgQGlmIHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZCgkdmFsdWUsICRudW1iZXIsIHNwYWNlKTtcbiAgICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XG4gICAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEgbWVkaWEgdHlwZSwgc3BsaXQgdGhlIHF1ZXJ5XG4gICAgICBAaWYgYnJlYWtwb2ludC1pcy1tZWRpYSgkdmFsdWUpIHtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsIG50aCgkcXVlcnksIDEpKTtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsIG50aCgkcXVlcnksIDIpKTtcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICAgICAgfVxuICAgICAgLy8gSWYgaXQncyBub3QgYSBzaW5nbGUgZmVhdHVyZSwgd2UncmUganVzdCBnb2luZyB0byBhc3N1bWUgaXQncyBhIHByb3BlciBzdHJpbmcvdmFsdWUgcGFpciwgYW5kIHJvbGwgd2l0aCBpdC5cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQoJHZhbHVlLCAkbnVtYmVyLCBzcGFjZSk7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICAgICAgfVxuXG4gICAgfVxuICAgIC8vIElmIHRoZXkncmUgYm90aCBudW1iZXJzLCB3ZSBhc3N1bWUgaXQncyBhIGRvdWJsZSBhbmQgcm9sbCB3aXRoIHRoYXRcbiAgICBAZWxzZSBpZiAodHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ251bWJlcicgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMikpID09ICdudW1iZXInKSB7XG4gICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZChudGgoJHF1ZXJ5LCAxKSwgbnRoKCRxdWVyeSwgMiksIHNwYWNlKTtcbiAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcbiAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgICB9XG4gICAgLy8gSWYgdGhleSdyZSBib3RoIHN0cmluZ3MgYW5kIG5laXRoZXIgYXJlIHNpbmdsZXMsIHdlIHJvbGwgd2l0aCB0aGF0LlxuICAgIEBlbHNlIGlmICh0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnc3RyaW5nJyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgPT0gJ3N0cmluZycpIHtcbiAgICAgIEBpZiBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDEpKSBhbmQgbm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAyKSkge1xuICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZChudGgoJHF1ZXJ5LCAxKSwgbnRoKCRxdWVyeSwgMiksIHNwYWNlKTtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIGlmICRsZW5ndGggPT0gMyB7XG4gICAgLy8gSWYgd2UndmUgZ290IHRocmVlIGl0ZW1zIGFuZCBub25lIGlzIGEgbGlzdCwgd2UgY2hlY2sgdG8gc2VlXG4gICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpICE9ICdsaXN0JyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgIT0gJ2xpc3QnIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDMpKSAhPSAnbGlzdCcge1xuICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgaXRlbXMgYXJlIHNpbmdsZSBzdHJpbmcgdmFsdWVzIGFuZCBub25lIG9mIHRoZSB2YWx1ZXMgYXJlIG1lZGlhIHZhbHVlcywgd2UncmUgZ29vZC5cbiAgICAgIEBpZiAobm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAxKSkgYW5kIG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMikpIGFuZCBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDMpKSkgYW5kICAoKG5vdCBicmVha3BvaW50LWlzLW1lZGlhKG50aCgkcXVlcnksIDEpKSBhbmQgbm90IGJyZWFrcG9pbnQtaXMtbWVkaWEobnRoKCRxdWVyeSwgMikpIGFuZCBub3QgYnJlYWtwb2ludC1pcy1tZWRpYShudGgoJHF1ZXJ5LCAzKSkpKSB7XG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKG50aCgkcXVlcnksIDEpLCBudGgoJHF1ZXJ5LCAyKSwgc3BhY2UpO1xuICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZCgkZmVhdHVyZS1ob2xkZXIsIG50aCgkcXVlcnksIDMpLCBzcGFjZSk7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICAgICAgfVxuICAgICAgLy8gbGV0J3MgY2hlY2sgdG8gc2VlIGlmIHRoZSBmaXJzdCBpdGVtIGlzIGEgbWVkaWEgdHlwZVxuICAgICAgQGVsc2UgaWYgYnJlYWtwb2ludC1pcy1tZWRpYShudGgoJHF1ZXJ5LCAxKSkge1xuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgbnRoKCRxdWVyeSwgMSkpO1xuICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZChudGgoJHF1ZXJ5LCAyKSwgbnRoKCRxdWVyeSwgMyksIHNwYWNlKTtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlcik7XG4gICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiBpdCdzIGEgc2luZ2xlIGl0ZW0sIG9yIGlmIGl0J3Mgbm90IGEgc3BlY2lhbCBjYXNlIGRvdWJsZSBvciB0cmlwbGUsIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBxdWVyeS5cbiAgQHJldHVybiAkcXVlcnk7XG59XG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEltcG9ydCBQaWVjZXNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGltcG9ydCBcInNpbmdsZS9kZWZhdWx0XCI7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpIHtcbiAgJHBhcnNlZDogJyc7XG4gICRsZWFkZXI6ICcnO1xuICAvLyBJZiB3ZSdyZSBmb3JjaW5nXG4gIEBpZiBub3QgKCRlbXB0eS1tZWRpYSkgb3Igbm90ICgkZmlyc3QpIHtcbiAgICAkbGVhZGVyOiAnYW5kICc7XG4gIH1cblxuICAvLyBJZiBpdCdzIGEgc2luZ2xlIGZlYXR1cmUgdGhhdCBjYW4gc3RhbmQgYWxvbmUsIHdlIGxldCBpdFxuICBAaWYgKGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZygkZmVhdHVyZSkpIHtcbiAgICAkcGFyc2VkOiAkZmVhdHVyZTtcbiAgICAvLyBTZXQgQ29udGV4dFxuICAgICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkZmVhdHVyZSk7XG4gIH1cbiAgLy8gSWYgaXQncyBub3QgYSBzdGFuZCBhbG9uZSBmZWF0dXJlLCB3ZSBwYXNzIGl0IG9mZiB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLlxuICBAZWxzZSB7XG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0KCRmZWF0dXJlKTtcbiAgfVxuXG4gIEByZXR1cm4gJGxlYWRlciArICcoJyArICRwYXJzZWQgKyAnKSc7XG59XG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0KCRmZWF0dXJlKSB7XG4gICRkZWZhdWx0OiBicmVha3BvaW50LWdldCgnZGVmYXVsdCBmZWF0dXJlJyk7XG5cbiAgLy8gU2V0IENvbnRleHRcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGRlZmF1bHQsICRmZWF0dXJlKTtcblxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSBhbmQgKHR5cGUtb2YoJGZlYXR1cmUpID09ICdudW1iZXInKSB7XG4gICAgQHJldHVybiAnI3skZGVmYXVsdH06ICN7YnJlYWtwb2ludC10by1iYXNlLWVtKCRmZWF0dXJlKX0nO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuICcjeyRkZWZhdWx0fTogI3skZmVhdHVyZX0nO1xuICB9XG59XG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEltcG9ydCBQaWVjZXNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGltcG9ydCBcImRvdWJsZS9kZWZhdWx0LXBhaXJcIjtcbkBpbXBvcnQgXCJkb3VibGUvZG91YmxlLXN0cmluZ1wiO1xuQGltcG9ydCBcImRvdWJsZS9kZWZhdWx0XCI7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLWRvdWJsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpIHtcbiAgJHBhcnNlZDogJyc7XG4gICRsZWFkZXI6ICcnO1xuICAvLyBJZiB3ZSdyZSBmb3JjaW5nXG4gIEBpZiBub3QgKCRlbXB0eS1tZWRpYSkgb3Igbm90ICgkZmlyc3QpIHtcbiAgICAkbGVhZGVyOiAnYW5kICc7XG4gIH1cblxuICAkZmlyc3Q6IG50aCgkZmVhdHVyZSwgMSk7XG4gICRzZWNvbmQ6IG50aCgkZmVhdHVyZSwgMik7XG5cbiAgLy8gSWYgd2UndmUgZ290IHR3byBudW1iZXJzLCB3ZSBrbm93IHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IHBhaXIgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbWVkaWEgcXVlcmllcyB0aGF0IGhhcyBhIG1lZGlhIGZlYXR1cmUgdGhhdCBpcyBhIG51bWJlclxuICBAaWYgdHlwZS1vZigkZmlyc3QpID09ICdudW1iZXInIGFuZCB0eXBlLW9mKCRzZWNvbmQpID09ICdudW1iZXInIHtcbiAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRlZmF1bHQtcGFpcigkZmlyc3QsICRzZWNvbmQpO1xuICB9XG4gIC8vIElmIHRoZXkgYXJlIGJvdGggc3RyaW5ncywgd2Ugc2VuZCBpdCB0aHJvdWdoIHRoZSBzdHJpbmcgcGFyc2VyXG4gIEBlbHNlIGlmIHR5cGUtb2YoJGZpcnN0KSA9PSAnc3RyaW5nJyBhbmQgdHlwZS1vZigkc2Vjb25kKSA9PSAnc3RyaW5nJyB7XG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kb3VibGUtc3RyaW5nKCRmaXJzdCwgJHNlY29uZCk7XG4gIH1cbiAgLy8gSWYgaXQncyBhIHN0cmluZy9udW1iZXIgcGFpciwgd2UgcGFyc2UgaXQgYXMgYSBub3JtYWwgZG91YmxlXG4gIEBlbHNlIHtcbiAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRvdWJsZS1kZWZhdWx0KCRmaXJzdCwgJHNlY29uZCk7XG4gIH1cblxuICBAcmV0dXJuICRsZWFkZXIgKyAkcGFyc2VkO1xufVxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZGVmYXVsdC1wYWlyKCRmaXJzdCwgJHNlY29uZCkge1xuICAkZGVmYXVsdDogYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgcGFpcicpO1xuICAkbWluOiAnJztcbiAgJG1heDogJyc7XG5cbiAgLy8gU29ydCBpbnRvIG1pbiBhbmQgbWF4XG4gICRtaW46IG1pbigkZmlyc3QsICRzZWNvbmQpO1xuICAkbWF4OiBtYXgoJGZpcnN0LCAkc2Vjb25kKTtcblxuICAvLyBTZXQgQ29udGV4dFxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtaW4tI3skZGVmYXVsdH0sICRtaW4pO1xuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtYXgtI3skZGVmYXVsdH0sICRtYXgpO1xuXG4gIC8vIE1ha2UgdGhlbSBFTXMgaWYgbmVlZCBiZVxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSB7XG4gICAgJG1pbjogYnJlYWtwb2ludC10by1iYXNlLWVtKCRtaW4pO1xuICAgICRtYXg6IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkbWF4KTtcbiAgfVxuXG4gIEByZXR1cm4gJyhtaW4tI3skZGVmYXVsdH06ICN7JG1pbn0pIGFuZCAobWF4LSN7JGRlZmF1bHR9OiAjeyRtYXh9KSc7XG59XG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kb3VibGUtc3RyaW5nKCRmaXJzdCwgJHNlY29uZCkge1xuICAkZmVhdHVyZTogJyc7XG4gICR2YWx1ZTogJyc7XG5cbiAgLy8gVGVzdCB0byBzZWUgd2hpY2ggaXMgdGhlIGZlYXR1cmUgYW5kIHdoaWNoIGlzIHRoZSB2YWx1ZVxuICBAaWYgKGJyZWFrcG9pbnQtc3RyaW5nLXZhbHVlKCRmaXJzdCkgPT0gdHJ1ZSkge1xuICAgICRmZWF0dXJlOiAkZmlyc3Q7XG4gICAgJHZhbHVlOiAkc2Vjb25kO1xuICB9XG4gIEBlbHNlIGlmIChicmVha3BvaW50LXN0cmluZy12YWx1ZSgkc2Vjb25kKSA9PSB0cnVlKSB7XG4gICAgJGZlYXR1cmU6ICRzZWNvbmQ7XG4gICAgJHZhbHVlOiAkZmlyc3Q7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEB3YXJuIFwiTmVpdGhlciAjeyRmaXJzdH0gbm9yICN7JHNlY29uZH0gaXMgYSB2YWxpZCBtZWRpYSBxdWVyeSBuYW1lLlwiO1xuICB9XG5cbiAgLy8gU2V0IENvbnRleHRcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGZlYXR1cmUsICR2YWx1ZSk7XG5cbiAgQHJldHVybiAnKCN7JGZlYXR1cmV9OiAjeyR2YWx1ZX0pJztcbn0iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kb3VibGUtZGVmYXVsdCgkZmlyc3QsICRzZWNvbmQpIHtcbiAgJGZlYXR1cmU6ICcnO1xuICAkdmFsdWU6ICcnO1xuXG4gIEBpZiB0eXBlLW9mKCRmaXJzdCkgPT0gJ3N0cmluZycge1xuICAgICRmZWF0dXJlOiAkZmlyc3Q7XG4gICAgJHZhbHVlOiAkc2Vjb25kO1xuICB9XG4gIEBlbHNlIHtcbiAgICAkZmVhdHVyZTogJHNlY29uZDtcbiAgICAkdmFsdWU6ICRmaXJzdDtcbiAgfVxuXG4gIC8vIFNldCBDb250ZXh0XG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkdmFsdWUpO1xuXG4gIEBpZiAoYnJlYWtwb2ludC1nZXQoJ3RvIGVtcycpID09IHRydWUpIHtcbiAgICAkdmFsdWU6IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkdmFsdWUpO1xuICB9XG5cbiAgQHJldHVybiAnKCN7JGZlYXR1cmV9OiAjeyR2YWx1ZX0pJ1xufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJbXBvcnQgUGllY2VzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBpbXBvcnQgXCJ0cmlwbGUvZGVmYXVsdFwiO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS10cmlwbGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KSB7XG4gICRwYXJzZWQ6ICcnO1xuICAkbGVhZGVyOiAnJztcblxuICAvLyBJZiB3ZSdyZSBmb3JjaW5nXG4gIEBpZiBub3QgKCRlbXB0eS1tZWRpYSkgb3Igbm90ICgkZmlyc3QpIHtcbiAgICAkbGVhZGVyOiAnYW5kICc7XG4gIH1cblxuICAvLyBzZXBhcmF0ZSB0aGUgc3RyaW5nIGZlYXR1cmVzIGZyb20gdGhlIHZhbHVlIG51bWJlcnNcbiAgJHN0cmluZzogbnVsbDtcbiAgJG51bWJlcnM6IG51bGw7XG4gIEBlYWNoICR2YWwgaW4gJGZlYXR1cmUge1xuICAgIEBpZiB0eXBlLW9mKCR2YWwpID09IHN0cmluZyB7XG4gICAgICAkc3RyaW5nOiAkdmFsO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgdHlwZS1vZigkbnVtYmVycykgPT0gJ251bGwnIHtcbiAgICAgICAgJG51bWJlcnM6ICR2YWw7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICRudW1iZXJzOiBhcHBlbmQoJG51bWJlcnMsICR2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtdHJpcGxlLWRlZmF1bHQoJHN0cmluZywgbnRoKCRudW1iZXJzLCAxKSwgbnRoKCRudW1iZXJzLCAyKSk7XG5cbiAgQHJldHVybiAkbGVhZGVyICsgJHBhcnNlZDtcblxufVxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtdHJpcGxlLWRlZmF1bHQoJGZlYXR1cmUsICRmaXJzdCwgJHNlY29uZCkge1xuXG4gIC8vIFNvcnQgaW50byBtaW4gYW5kIG1heFxuICAkbWluOiBtaW4oJGZpcnN0LCAkc2Vjb25kKTtcbiAgJG1heDogbWF4KCRmaXJzdCwgJHNlY29uZCk7XG5cbiAgLy8gU2V0IENvbnRleHRcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWluLSN7JGZlYXR1cmV9LCAkbWluKTtcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWF4LSN7JGZlYXR1cmV9LCAkbWF4KTtcblxuICAvLyBNYWtlIHRoZW0gRU1zIGlmIG5lZWQgYmVcbiAgQGlmIChicmVha3BvaW50LWdldCgndG8gZW1zJykgPT0gdHJ1ZSkge1xuICAgICRtaW46IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkbWluKTtcbiAgICAkbWF4OiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1heCk7XG4gIH1cblxuICBAcmV0dXJuICcobWluLSN7JGZlYXR1cmV9OiAjeyRtaW59KSBhbmQgKG1heC0jeyRmZWF0dXJlfTogI3skbWF4fSknO1xufVxuIiwiQGltcG9ydCBcInJlc29sdXRpb24vcmVzb2x1dGlvblwiO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1idWlsZC1yZXNvbHV0aW9uKCRxdWVyeS1wcmludCwgJHF1ZXJ5LXJlc29sdXRpb24sICRlbXB0eS1tZWRpYSwgJGZpcnN0KSB7XG4gICRsZWFkZXI6ICcnO1xuICAvLyBJZiB3ZSdyZSBmb3JjaW5nXG4gIEBpZiBub3QgKCRlbXB0eS1tZWRpYSkgb3Igbm90ICgkZmlyc3QpIHtcbiAgICAkbGVhZGVyOiAnYW5kICc7XG4gIH1cblxuICBAaWYgYnJlYWtwb2ludC1nZXQoJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycpIGFuZCAkcXVlcnktcmVzb2x1dGlvbiB7XG4gICAgJHJlc29sdXRpb25zOiBicmVha3BvaW50LW1ha2UtcmVzb2x1dGlvbnMoJHF1ZXJ5LXJlc29sdXRpb24pO1xuICAgICRsZW5ndGg6IGxlbmd0aCgkcmVzb2x1dGlvbnMpO1xuICAgICRxdWVyeS1ob2xkZXI6ICcnO1xuXG4gICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgICRxdWVyeTogJyN7JHF1ZXJ5LXByaW50fSAjeyRsZWFkZXJ9I3tudGgoJHJlc29sdXRpb25zLCAkaSl9JztcbiAgICAgIEBpZiAkaSA9PSAxIHtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogJHF1ZXJ5O1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkcXVlcnktaG9sZGVyOiAnI3skcXVlcnktaG9sZGVyfSwgI3skcXVlcnl9JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gIH1cbiAgQGVsc2Uge1xuICAgIC8vIFJldHVybiB3aXRoIGF0dGFjaGVkIHJlc29sdXRpb25cbiAgICBAcmV0dXJuICRxdWVyeS1wcmludDtcbiAgfVxufVxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWFrZS1yZXNvbHV0aW9ucygkcmVzb2x1dGlvbikge1xuICAkbGVuZ3RoOiBsZW5ndGgoJHJlc29sdXRpb24pO1xuXG4gICRvdXRwdXQ6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID09IDIge1xuICAgICRmZWF0dXJlOiAnJztcbiAgICAkdmFsdWU6ICcnO1xuXG4gICAgLy8gRmluZCB3aGljaCBpcyBudW1iZXJcbiAgICBAaWYgdHlwZS1vZihudGgoJHJlc29sdXRpb24sIDEpKSA9PSAnbnVtYmVyJyB7XG4gICAgICAkdmFsdWU6IG50aCgkcmVzb2x1dGlvbiwgMSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgICR2YWx1ZTogbnRoKCRyZXNvbHV0aW9uLCAyKTtcbiAgICB9XG5cbiAgICAvLyBEZXRlcm1pbmUgbWluL21heC9zdGFuZGFyZFxuICAgIEBpZiBpbmRleCgkcmVzb2x1dGlvbiwgJ21pbi1yZXNvbHV0aW9uJykge1xuICAgICAgJGZlYXR1cmU6ICdtaW4tJztcbiAgICB9XG4gICAgQGVsc2UgaWYgaW5kZXgoJHJlc29sdXRpb24sICdtYXgtcmVzb2x1dGlvbicpIHtcbiAgICAgICRmZWF0dXJlOiAnbWF4LSc7XG4gICAgfVxuXG4gICAgJHN0YW5kYXJkOiAnKCN7JGZlYXR1cmV9cmVzb2x1dGlvbjogI3skdmFsdWV9KSc7XG5cbiAgICAvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGRwcHgsXG4gICAgQGlmIHVuaXQoJHZhbHVlKSAhPSAnZHBweCcge1xuICAgICAgJGJhc2U6IDk2ZHBpO1xuICAgICAgQGlmIHVuaXQoJHZhbHVlKSA9PSAnZHBjbScge1xuICAgICAgICAkYmFzZTogMjQzLjg0ZHBjbTtcbiAgICAgIH1cbiAgICAgIC8vIFdyaXRlIG91dCBmZWF0dXJlIHRlc3RzXG4gICAgICAkd2Via2l0OiAnJztcbiAgICAgICRtb3o6ICcnO1xuICAgICAgJHdlYmtpdDogJygtd2Via2l0LSN7JGZlYXR1cmV9ZGV2aWNlLXBpeGVsLXJhdGlvOiAjeyR2YWx1ZSAvICRiYXNlfSknO1xuICAgICAgJG1vejogJygjeyRmZWF0dXJlfS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAjeyR2YWx1ZSAvICRiYXNlfSknO1xuICAgICAgLy8gQXBwZW5kIHRvIG91dHB1dFxuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICRzdGFuZGFyZCwgc3BhY2UpO1xuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICR3ZWJraXQsIHNwYWNlKTtcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkbW96LCBzcGFjZSk7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgICR3ZWJraXQ6ICcnO1xuICAgICAgJG1vejogJyc7XG4gICAgICAkd2Via2l0OiAnKC13ZWJraXQtI3skZmVhdHVyZX1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHZhbHVlIC8gMWRwcHh9KSc7XG4gICAgICAkbW96OiAnKCN7JGZlYXR1cmV9LW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHZhbHVlIC8gMWRwcHh9KSc7XG4gICAgICAkZmFsbGJhY2s6ICcoI3skZmVhdHVyZX1yZXNvbHV0aW9uOiAjeyR2YWx1ZSAvIDFkcHB4ICogOTZkcGl9KSc7XG4gICAgICAvLyBBcHBlbmQgdG8gb3V0cHV0XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHN0YW5kYXJkLCBzcGFjZSk7XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHdlYmtpdCwgc3BhY2UpO1xuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICRtb3osIHNwYWNlKTtcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkZmFsbGJhY2ssIHNwYWNlKTtcbiAgICB9XG5cbiAgfVxuXG4gIEByZXR1cm4gJG91dHB1dDtcbn1cbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LW5vLXF1ZXJ5KCRxdWVyeSkge1xuICBAaWYgdHlwZS1vZigkcXVlcnkpID09ICdsaXN0JyB7XG4gICAgJGtleXdvcmQ6IG50aCgkcXVlcnksIDEpO1xuXG4gICAgQGlmIHR5cGUtb2YoJGtleXdvcmQpID09ICdzdHJpbmcnIGFuZCAoJGtleXdvcmQgPT0gJ25vLXF1ZXJ5JyBvciAka2V5d29yZCA9PSAnbm8gcXVlcnknIG9yICRrZXl3b3JkID09ICdmYWxsYmFjaycpIHtcbiAgICAgIEByZXR1cm4gbnRoKCRxdWVyeSwgMik7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIERlZmF1bHQgdGhlIEJyZWFrcG9pbnRzIHZhcmlhYmxlXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiRicmVha3BvaW50czogKCkgIWRlZmF1bHQ7XG4kQlJFQUtQT0lOVFM6ICgpICFkZWZhdWx0O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFJlc3BvbmQtdG8gQVBJIE1peGluXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBtaXhpbiByZXNwb25kLXRvKCRjb250ZXh0LCAkbm8tcXVlcnk6IGZhbHNlKSB7XG4gIEBpZiBsZW5ndGgoJGJyZWFrcG9pbnRzKSA+IDAgYW5kIGxlbmd0aCgkQlJFQUtQT0lOVFMpID09IDAge1xuICAgIEB3YXJuIFwiSW4gb3JkZXIgdG8gYXZvaWQgdmFyaWFibGUgbmFtZXNwYWNlIGNvbGxpc2lvbnMsIHdlIGhhdmUgdXBkYXRlZCB0aGUgd2F5IHRvIGFkZCBicmVha3BvaW50cyBmb3IgcmVzcG9uZC10by4gUGxlYXNlIGNoYW5nZSBhbGwgaW5zdGFuY2VzIG9mIGAkYnJlYWtwb2ludHM6IGFkZC1icmVha3BvaW50KClgIHRvIGBAaW5jbHVkZSBhZGQtYnJlYWtwb2ludCgpYC4gVGhlIGBhZGQtYnJlYWtwb2ludCgpYCBmdW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIjtcbiAgICAkQlJFQUtQT0lOVFM6ICRicmVha3BvaW50cyAhZ2xvYmFsO1xuICAgICRicmVha3BvaW50czogKCkgIWdsb2JhbDtcbiAgfVxuXG4gIEBpZiB0eXBlLW9mKCRCUkVBS1BPSU5UUykgIT0gJ21hcCcge1xuICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lb25lIHdyaXRlcyBnaWJiZXJpc2ggdG8gdGhlICRicmVha3BvaW50cyB2YXJpYWJsZS5cbiAgICBAd2FybiBcIllvdXIgYnJlYWtwb2ludHMgYXJlbid0IGEgbWFwISBgcmVzcG9uZC10b2AgZXhwZWN0cyBhIG1hcC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBvZiAkQlJFQUtQT0lOVFMgdmFyaWFibGUuXCI7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJEJSRUFLUE9JTlRTLCAkY29udGV4dCkge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWFwLWdldCgkQlJFQUtQT0lOVFMsICRjb250ZXh0KSwgJG5vLXF1ZXJ5KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgbm90IG1hcC1oYXMta2V5KCRCUkVBS1BPSU5UUywgJGNvbnRleHQpIHtcbiAgICBAd2FybiBcImAjeyRjb250ZXh0fWAgaXNuJ3QgYSBkZWZpbmVkIGJyZWFrcG9pbnQhIFBsZWFzZSBhZGQgaXQgdXNpbmcgYCRicmVha3BvaW50czogYWRkLWJyZWFrcG9pbnQoYCN7JGNvbnRleHR9YCwgJHZhbHVlKTtgXCI7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEB3YXJuIFwiWW91IGhhdmVuJ3QgY3JlYXRlZCBhbnkgYnJlYWtwb2ludHMgeWV0ISBNYWtlIHNvbWUgYWxyZWFkeSEgYEBpbmNsdWRlIGFkZC1icmVha3BvaW50KCRuYW1lLCAkYmtwdClgXCI7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBBZGQgQnJlYWtwb2ludCB0byBCcmVha3BvaW50c1xuLy8gVE9ETzogUmVtb3ZlIGZ1bmN0aW9uIGluIG5leHQgcmVsZWFzZVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYWRkLWJyZWFrcG9pbnQoJG5hbWUsICRia3B0LCAkb3ZlcndyaXRlOiBmYWxzZSkge1xuICAkb3V0cHV0OiAoJG5hbWU6ICRia3B0KTtcblxuICBAaWYgbGVuZ3RoKCRicmVha3BvaW50cykgPT0gMCB7XG4gICAgQHJldHVybiAkb3V0cHV0O1xuICB9XG4gIEBlbHNlIHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkbmFtZSkgYW5kICRvdmVyd3JpdGUgIT0gdHJ1ZSB7XG4gICAgICBAd2FybiBcIllvdSBhbHJlYWR5IGhhdmUgYSBicmVha3BvaW50IG5hbWVkIGAjeyRuYW1lfWAsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBicmVha3BvaW50IG5hbWUsIG9yIHBhc3MgaW4gYCRvdmVyd3JpdGU6IHRydWVgIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgYnJlYWtwb2ludC5cIjtcbiAgICAgIEByZXR1cm4gJGJyZWFrcG9pbnRzO1xuICAgIH1cbiAgICBAZWxzZSBpZiBub3QgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkbmFtZSkgb3IgJG92ZXJ3cml0ZSA9PSB0cnVlIHtcbiAgICAgIEByZXR1cm4gbWFwLW1lcmdlKCRicmVha3BvaW50cywgJG91dHB1dCk7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBhZGQtYnJlYWtwb2ludCgkbmFtZSwgJGJrcHQsICRvdmVyd3JpdGU6IGZhbHNlKSB7XG4gICRvdXRwdXQ6ICgkbmFtZTogJGJrcHQpO1xuXG4gIEBpZiBsZW5ndGgoJEJSRUFLUE9JTlRTKSA9PSAwIHtcbiAgICAkQlJFQUtQT0lOVFM6ICRvdXRwdXQgIWdsb2JhbDtcbiAgfVxuICBAZWxzZSB7XG4gICAgQGlmIG1hcC1oYXMta2V5KCRCUkVBS1BPSU5UUywgJG5hbWUpIGFuZCAkb3ZlcndyaXRlICE9IHRydWUge1xuICAgICAgQHdhcm4gXCJZb3UgYWxyZWFkeSBoYXZlIGEgYnJlYWtwb2ludCBuYW1lZCBgI3skbmFtZX1gLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgYnJlYWtwb2ludCBuYW1lLCBvciBwYXNzIGluIGAkb3ZlcndyaXRlOiB0cnVlYCB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGJyZWFrcG9pbnQuXCI7XG4gICAgICAkQlJFQUtQT0lOVFM6ICRCUkVBS1BPSU5UUyAhZ2xvYmFsO1xuICAgIH1cbiAgICBAZWxzZSBpZiBub3QgbWFwLWhhcy1rZXkoJEJSRUFLUE9JTlRTLCAkbmFtZSkgb3IgJG92ZXJ3cml0ZSA9PSB0cnVlIHtcbiAgICAgICRCUkVBS1BPSU5UUzogbWFwLW1lcmdlKCRCUkVBS1BPSU5UUywgJG91dHB1dCkgIWdsb2JhbDtcbiAgICB9XG4gIH1cbn1cblxuQGZ1bmN0aW9uIGdldC1icmVha3BvaW50KCRuYW1lOiBmYWxzZSkge1xuICBAaWYgJG5hbWUgPT0gZmFsc2Uge1xuICAgIEByZXR1cm4gJEJSRUFLUE9JTlRTO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJEJSRUFLUE9JTlRTLCAkbmFtZSk7XG4gIH1cbn1cbiIsIkBtaXhpbiBsZWdhY3ktc2V0dGluZ3Mtd2FybmluZyB7XG4gICRsZWdhY3lWYXJzOiAoXG4gICAgJ2RlZmF1bHQtbWVkaWEnOiAnZGVmYXVsdCBtZWRpYScsXG4gICAgJ2RlZmF1bHQtZmVhdHVyZSc6ICdkZWZhdWx0IGZlYXR1cmUnLFxuICAgICdmb3JjZS1tZWRpYS1hbGwnOiAnZm9yY2UgYWxsIG1lZGlhIHR5cGUnLFxuICAgICd0by1lbXMnOiAndG8gZW1zJyxcbiAgICAncmVzb2x1dGlvbnMnOiAndHJhbnNmb3JtIHJlc29sdXRpb25zJyxcbiAgICAnbm8tcXVlcmllcyc6ICdubyBxdWVyaWVzJyxcbiAgICAnbm8tcXVlcnktZmFsbGJhY2tzJzogJ25vIHF1ZXJ5IGZhbGxiYWNrcycsXG4gICAgJ2Jhc2UtZm9udC1zaXplJzogJ2Jhc2UgZm9udCBzaXplJyxcbiAgICAnbGVnYWN5LXN5bnRheCc6ICdsZWdhY3kgc3ludGF4J1xuICApO1xuXG4gIEBlYWNoICRsZWdhY3ksICRuZXcgaW4gJGxlZ2FjeVZhcnMge1xuICAgIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LScgKyAkbGVnYWN5KSB7XG4gICAgICBAd2FybiBcIkluIG9yZGVyIHRvIGF2b2lkIHZhcmlhYmxlIG5hbXNwYWNlIGNvbGxpc2lvbnMsIHdlIGhhdmUgdXBkYXRlZCB0aGUgd2F5IHRvIGNoYW5nZSBzZXR0aW5ncyBmb3IgQnJlYWtwb2ludC4gUGxlYXNlIGNoYW5nZSBhbGwgaW5zdGFuY2VzIG9mIGAkYnJlYWtwb2ludC0jeyRsZWdhY3l9OiB7e3NldHRpbmd9fWAgdG8gYEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCcjeyRuZXd9Jywge3tzZXR0aW5nfX0pYC4gVmFyaWFibGUgc2V0dGluZ3MsIGFzIHdlbGwgYXMgdGhpcyB3YXJuaW5nIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiXG4gICAgfVxuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBIYW5kIGNvcnJlY3QgZWFjaCBzZXR0aW5nXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1kZWZhdWx0LW1lZGlhJykgYW5kICRicmVha3BvaW50LWRlZmF1bHQtbWVkaWEgIT0gYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2RlZmF1bHQgbWVkaWEnLCAkYnJlYWtwb2ludC1kZWZhdWx0LW1lZGlhKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1kZWZhdWx0LWZlYXR1cmUnKSBhbmQgJGJyZWFrcG9pbnQtZGVmYXVsdC1mZWF0dXJlICE9IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IGZlYXR1cmUnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2RlZmF1bHQgZmVhdHVyZScsICRicmVha3BvaW50LWRlZmF1bHQtZmVhdHVyZSk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtZm9yY2UtbWVkaWEtYWxsJykgYW5kICRicmVha3BvaW50LWZvcmNlLW1lZGlhLWFsbCAhPSBicmVha3BvaW50LWdldCgnZm9yY2UgYWxsIG1lZGlhIHR5cGUnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJywgJGJyZWFrcG9pbnQtZm9yY2UtbWVkaWEtYWxsKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC10by1lbXMnKSBhbmQgJGJyZWFrcG9pbnQtdG8tZW1zICE9IGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ3RvIGVtcycsICRicmVha3BvaW50LXRvLWVtcyk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtcmVzb2x1dGlvbnMnKSBhbmQgJGJyZWFrcG9pbnQtcmVzb2x1dGlvbnMgIT0gYnJlYWtwb2ludC1nZXQoJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgndHJhbnNmb3JtIHJlc29sdXRpb25zJywgJGJyZWFrcG9pbnQtcmVzb2x1dGlvbnMpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LW5vLXF1ZXJpZXMnKSBhbmQgJGJyZWFrcG9pbnQtbm8tcXVlcmllcyAhPSBicmVha3BvaW50LWdldCgnbm8gcXVlcmllcycpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnbm8gcXVlcmllcycsICRicmVha3BvaW50LW5vLXF1ZXJpZXMpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LW5vLXF1ZXJ5LWZhbGxiYWNrcycpIGFuZCAkYnJlYWtwb2ludC1uby1xdWVyeS1mYWxsYmFja3MgIT0gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnbm8gcXVlcnkgZmFsbGJhY2tzJywgJGJyZWFrcG9pbnQtbm8tcXVlcnktZmFsbGJhY2tzKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1iYXNlLWZvbnQtc2l6ZScpIGFuZCAkYnJlYWtwb2ludC1iYXNlLWZvbnQtc2l6ZSAhPSBicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2Jhc2UgZm9udCBzaXplJywgJGJyZWFrcG9pbnQtYmFzZS1mb250LXNpemUpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LWxlZ2FjeS1zeW50YXgnKSBhbmQgJGJyZWFrcG9pbnQtbGVnYWN5LXN5bnRheCAhPSBicmVha3BvaW50LWdldCgnbGVnYWN5IHN5bnRheCcpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnbGVnYWN5IHN5bnRheCcsICRicmVha3BvaW50LWxlZ2FjeS1zeW50YXgpO1xuICB9XG59IiwiQGltcG9ydCBcImZ1bmN0aW9uc1wiO1xuQGltcG9ydCBcInotaW5kZXhcIjtcbkBpbXBvcnQgXCJtZWRpYS1xdWVyaWVzXCI7XG5AaW1wb3J0IFwidmFyaWFibGVzXCI7XG5AaW1wb3J0IFwidW5pYm9hcmRcIjtcbkBpbXBvcnQgXCJtaXhpbnNcIjtcbkBpbXBvcnQgXCJleHRlbmRzXCI7XG5AaW1wb3J0IFwiZmxleFwiO1xuQGltcG9ydCBcImJveFwiO1xuQGltcG9ydCBcImZsdWlkLXNpemVcIjtcbiIsIi8vLyBaLWluZGV4ZXMgbWFwLCBnYXRoZXJpbmcgYWxsIFogbGF5ZXJzIG9mIHRoZSBhcHBsaWNhdGlvblxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vIEB0eXBlIE1hcFxuLy8vIEBwcm9wIHtTdHJpbmd9IGtleSAtIExheWVy4oCZcyBuYW1lXG4vLy8gQHByb3Age051bWJlcn0gdmFsdWUgLSBaIHZhbHVlIG1hcHBlZCB0byB0aGUga2V5XG4kei1pbmRleGVzOiAoXCJjZ19fcHJvbW90aW9uXCI6IDIwNSwgXCJjZ19fcGllY2UuZHJhZ2dpbmdcIjogMjA0LCBcImNnX19waWVjZS5hbmltXCI6IDMsIFwiY2dfX3N2Z1wiOiAyLCBcImNnX19waWVjZVwiOiAyLCBcImNnX19waWVjZS5mYWRpbmdcIjogMSwgXCJwb3dlcnRpcFwiOiAxMjAsIFwiaW5xdWlyeVwiOiAxMTEsIFwiemVuLXRvZ2dsZVwiOiAxMTAsIFwibW9kYWxcIjogMTEwLCBcIm1zZWxlY3RcIjogMTEwLCBcInRvcG5hdlwiOiAxMTAsIFwiZnVsbHNjcmVlbi1tYXNrXCI6IDEwOSwgXCJkcm9wZG93blwiOiAxMDgsIFwiY29udGV4dC1tZW51XCI6IDEwNywgXCJzaXRlLWhlYWRlclwiOiAxMDYsIFwicmVjb25uZWN0aW5nXCI6IDEwNSwgXCJ0b3VyLXJlbWluZGVyXCI6IDEwNCwgXCJuYWctY2lyY2xlXCI6IDEwMywgXCJtei1tZW51XCI6IDQsIFwiYWJvdmUtbGluay1vdmVybGF5XCI6IDMsIFwiZnJpZW5kLWJveFwiOiAyLCBcImxpbmstb3ZlcmxheVwiOiAyLCBcImdhbWUtYm9va21hcmtcIjogMiwgXCJzdWJuYXYtc2lkZVwiOiAyLCBcImRlZmF1bHRcIjogMCk7XG5cbi8vLyBHZXQgYSB6LWluZGV4IHZhbHVlIGZyb20gYSBsYXllciBuYW1lXG4vLy8gQGFjY2VzcyBwdWJsaWNcbi8vLyBAcGFyYW0ge1N0cmluZ30gJGxheWVyIC0gTGF5ZXLigJlzIG5hbWVcbi8vLyBAcmV0dXJuIHtOdW1iZXJ9XG4vLy8gQHJlcXVpcmUgJHotaW5kZXhlc1xuQGZ1bmN0aW9uIHooJGxheWVyKSB7XG4gIEByZXR1cm4gbWFwLWdldCgkei1pbmRleGVzLCAkbGF5ZXIpO1xufVxuIiwiLyogV2lkdGhzICovXG5cbiRtcS14eC1zbWFsbDogbWluLXdpZHRoIDUwMHB4O1xuJG1xLXgtc21hbGw6IG1pbi13aWR0aCA2NTBweDtcbiRtcS1zbWFsbDogbWluLXdpZHRoIDgwMHB4O1xuJG1xLW1lZGl1bTogbWluLXdpZHRoIDk4MHB4O1xuJG1xLWxhcmdlOiBtaW4td2lkdGggMTEyMHB4O1xuJG1xLXgtbGFyZ2U6IG1pbi13aWR0aCAxMjYwcHg7XG5cbiRtcS1ub3QteHgtc21hbGw6IG1heC13aWR0aCA0OTlweDtcbiRtcS1ub3QteC1zbWFsbDogbWF4LXdpZHRoIDY0OXB4O1xuJG1xLW5vdC1zbWFsbDogbWF4LXdpZHRoIDc5OXB4O1xuJG1xLW5vdC1tZWRpdW06IG1heC13aWR0aCA5NzlweDtcbiRtcS1ub3QteC1sYXJnZTogbWF4LXdpZHRoIDEyNTlweDtcblxuLyogSGVpZ2h0cyAqL1xuXG4kbXEteC1zaG9ydDogbWluLWhlaWdodCA0MDBweDtcbiRtcS1zaG9ydDogbWluLWhlaWdodCA1MDBweDtcbiRtcS10YWxsOiBtaW4taGVpZ2h0IDYwMHB4O1xuJG1xLXgtdGFsbDogbWluLWhlaWdodCA3MDBweDtcblxuJG1xLW5vdC14LXNob3J0OiBtYXgtaGVpZ2h0IDM5OXB4O1xuXG4vKiBPcmllbnRhdGlvbnMgKi9cblxuJG1xLXBvcnRyYWl0OiBvcmllbnRhdGlvbiBwb3J0cmFpdDtcbiRtcS1sYW5kc2NhcGU6IG9yaWVudGF0aW9uIGxhbmRzY2FwZTtcblxuLyogQ2FwYWJpbGl0aWVzICovXG5cbiRtcS1ob3Zlci15ZXM6IFwiaG92ZXI6IGhvdmVyXCI7XG4kbXEtaG92ZXItbm86IGhvdmVyIG5vbmU7XG5cbi8qIEFsaWFzZXMgKi9cblxuJG1xLW1haW4tbWFyZ2luOiAkbXEtc21hbGw7XG5cbiRtcS10b3BuYXYtdmlzaWJsZTogJG1xLW1lZGl1bTtcbiRtcS10b3BuYXYtaGlkZGVuOiAkbXEtbm90LW1lZGl1bTtcblxuJG1xLXNpdGUtaGVhZGVyLXRhbGw6ICRtcS10YWxsO1xuXG4kbXEtc3VibmF2LXRvcDogJG1xLW5vdC1zbWFsbDtcbiRtcS1zdWJuYXYtc2lkZTogJG1xLXNtYWxsO1xuXG4kbXEtem9vbS1lbmFibGVkOiAkbXEtc21hbGwgJG1xLXNob3J0O1xuIiwiJGRlYnVnOiBmYWxzZTtcblxuJGZvbnQtcGF0aDogXCIuLi9mb250XCI7XG4kaW1nLXBhdGg6IFwiLi4vaW1hZ2VzXCI7XG5cbiR2aWV3cG9ydC1taW4td2lkdGg6IDMyMHB4O1xuXG4kYmxvY2stZ2FwOiAydm1pbjtcbiRibG9jay1nYXAtaGFsZjogMXZtaW47XG5cbiRibG9jay1nYXAtaDogMnZoO1xuJGJsb2NrLWdhcC13OiAydnc7XG4kYmxvY2stZ2FwLXctaGFsZjogMXZ3O1xuXG4kYm94LXJhZGl1cy1zaXplOiAzcHg7XG5cbiRzaXRlLWhlYWRlci10YWxsLWhlaWdodDogNjBweDtcbiRzaXRlLWhlYWRlci1zaG9ydC1oZWlnaHQ6IDQwcHg7XG5cbiR0cmFuc2l0aW9uLWR1cmF0aW9uOiAxNTBtcztcblxuJG1haW4tbWF4LXdpZHRoOiAxMzAwcHggIWRlZmF1bHQ7XG5cbiRtYWluLW1hcmdpbjogdmFyKC0tbWFpbi1tYXJnaW4pO1xuJHNpdGUtaGVhZGVyLWhlaWdodDogdmFyKC0tc2l0ZS1oZWFkZXItaGVpZ2h0KTtcblxuJHNpdGUtaGVhZGVyLW1hcmdpbjogdmFyKC0tc2l0ZS1oZWFkZXItbWFyZ2luKTtcblxuJHNpdGUtaGVhZGVyLW91dGVyLWhlaWdodDogY2FsYygjeyRzaXRlLWhlYWRlci1oZWlnaHR9ICsgI3skc2l0ZS1oZWFkZXItbWFyZ2lufSk7XG4iLCIvKiBVbmlib2FyZDoga2VlcCB0aGUgc2FtZSBwYWdlIGxheW91dCBhY2Nyb3NzIHBhZ2VzICovXG5cbiRtcS1ib2FyZC1yZXNpemFibGU6ICRtcS1zbWFsbDtcbiRtcS1jb2wxLXVuaWJvYXJkOiAkbXEtbm90LXNtYWxsICRtcS1wb3J0cmFpdDtcbiRtcS1jb2wyLXVuaWJvYXJkOiAkbXEtc21hbGwsICRtcS1sYW5kc2NhcGU7XG4kbXEtY29sMy11bmlib2FyZDogJG1xLXgtbGFyZ2U7XG5cbi8qIHdoZW4gdGhlIHdpZHRoIGlzIGFwcHJvcHJpYXRlIGZvciBjb2wxLCBidXQgbGFuZHNjYXBlIHByZXZlbnRzIGl0ICovXG4kbXEtY29sMi11bmlib2FyZC1zcXVlZXplOiAkbXEtbm90LXNtYWxsICRtcS1sYW5kc2NhcGU7XG5cbiRjb2wzLXVuaWJvYXJkLXNpZGU6IG1pbm1heCgyMzBweCwgMjB2dyk7XG4kY29sMy11bmlib2FyZC10YWJsZTogbWlubWF4KDI0MHB4LCA0MDBweCk7XG4kY29sMy11bmlib2FyZC1jb250cm9sczogM3JlbTtcblxuJGNvbDMtdW5pYm9hcmQtbWluLXdpZHRoOiBjYWxjKDcwdm1pbiAqIHZhcigtLWJvYXJkLXNjYWxlKSk7XG4kY29sMy11bmlib2FyZC1tYXgtd2lkdGg6IGNhbGMoMTAwdmggKiB2YXIoLS1ib2FyZC1zY2FsZSkgLSAjeyRzaXRlLWhlYWRlci1vdXRlci1oZWlnaHR9IC0gI3skY29sMy11bmlib2FyZC1jb250cm9sc30pO1xuJGNvbDMtdW5pYm9hcmQtd2lkdGg6IG1pbm1heCgkY29sMy11bmlib2FyZC1taW4td2lkdGgsICRjb2wzLXVuaWJvYXJkLW1heC13aWR0aCk7XG5cbiRjb2wzLXVuaWJvYXJkLWRlZmF1bHQtc2NhbGU6IDAuOTtcblxuLy8gem9vbTogODUlXG4kY29sMy11bmlib2FyZC1kZWZhdWx0LW1pbi13aWR0aDogNTAwcHg7XG4kY29sMy11bmlib2FyZC1kZWZhdWx0LW1heC13aWR0aDogY2FsYygxMDB2aCAqICN7JGNvbDMtdW5pYm9hcmQtZGVmYXVsdC1zY2FsZX0gLSAjeyRzaXRlLWhlYWRlci1vdXRlci1oZWlnaHR9IC0gI3skY29sMy11bmlib2FyZC1jb250cm9sc30pO1xuJGNvbDMtdW5pYm9hcmQtZGVmYXVsdC13aWR0aDogbWlubWF4KCN7JGNvbDMtdW5pYm9hcmQtZGVmYXVsdC1taW4td2lkdGh9LCAjeyRjb2wzLXVuaWJvYXJkLWRlZmF1bHQtbWF4LXdpZHRofSk7XG5cbiRjb2wyLXVuaWJvYXJkLXRhYmxlOiAkY29sMy11bmlib2FyZC10YWJsZTtcbiRjb2wyLXVuaWJvYXJkLWNvbnRyb2xzOiAkY29sMy11bmlib2FyZC1jb250cm9scztcbiRjb2wyLXVuaWJvYXJkLXdpZHRoOiAkY29sMy11bmlib2FyZC13aWR0aDtcbiRjb2wyLXVuaWJvYXJkLWRlZmF1bHQtd2lkdGg6ICRjb2wzLXVuaWJvYXJkLWRlZmF1bHQtd2lkdGg7XG5cbiRjb2wyLXVuaWJvYXJkLXNxdWVlemUtdGFibGU6IG1pbm1heCgyMDBweCwgMjQwcHgpO1xuJGNvbDItdW5pYm9hcmQtc3F1ZWV6ZS13aWR0aDogbWlubWF4KGNhbGMoNTV2bWluKSwgY2FsYygxMDB2aCAtICN7JHNpdGUtaGVhZGVyLW91dGVyLWhlaWdodH0gLSAjeyRibG9jay1nYXB9KSk7XG5cbiRjb2wxLXVuaWJvYXJkLWNvbnRyb2xzOiAkY29sMi11bmlib2FyZC1jb250cm9scztcbiIsIkBtaXhpbiBib3gtcmFkaXVzIHtcbiAgYm9yZGVyLXJhZGl1czogJGJveC1yYWRpdXMtc2l6ZTtcbn1cblxuQG1peGluIGJveC1zaGFkb3cge1xuICBib3gtc2hhZG93OiAkYm94LXNoYWRvdztcbn1cblxuQG1peGluIGJveC1uZWF0IHtcbiAgQGluY2x1ZGUgYm94LXJhZGl1cztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdztcbn1cblxuQG1peGluIGRlYnVnLXpvb20taW5wdXQge1xuICAjem9vbS1pbnB1dCB7XG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1xLXpvb20tZW5hYmxlZCkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICBib3R0b206IDNweDtcbiAgICAgIHJpZ2h0OiAzcHg7XG4gICAgICB3aWR0aDogMTB2dztcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIHRyYW5zaXRpb24oJHByb3A6IGFsbCwgJGR1cjogJHRyYW5zaXRpb24tZHVyYXRpb24pIHtcbiAgdHJhbnNpdGlvbjogJHByb3AgJGR1cjtcbn1cblxuQG1peGluIGhvdmVyZmxvdyB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG5cbiAgQG1lZGlhIChob3ZlcjogaG92ZXIpIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG5cbiAgLmJsaW5kLW1vZGUgJiB7XG4gICAgZGlzcGxheTogaW5oZXJpdDtcbiAgfVxufVxuXG5AbWl4aW4gZWxsaXBzaXMge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuQG1peGluIGNyb3NzdGFibGUtbGFyZ2Uge1xuICAuY3Jvc3N0YWJsZV9fdXNlcnMge1xuICAgIGZsZXg6IDcgMSBhdXRvO1xuICB9XG59XG5cbkBtaXhpbiBjcm9zc3RhYmxlLXNtYWxsIHtcbiAgLmNyb3NzdGFibGVfX3VzZXJzIHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgfVxufVxuXG4vKiBhdG0gb25seSBjaHJvbWUgc3VwcG9ydHMgbWluLWNvbnRlbnQsIG1heC1jb250ZW50ICovXG5AbWl4aW4gcHJvcGVyLWdyaWQge1xuICBAc3VwcG9ydHMgKGhlaWdodDogbWF4LWNvbnRlbnQpIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gYm9keS1maXhlZC1zY3JvbGwge1xuICBib2R5IHtcbiAgICAvKiBwcmV2ZW50cyBzY3JvbGwgYmFyIGZsaWNrZXIgd2hlbiBkcmFnZ2luZyBhIHBpZWNlIG91dCAqL1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgfVxufVxuIiwiJWJhc2UtZm9udC1mYWxsYmFjayB7XG4gIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zJywgU2Fucy1TZXJpZjtcbn1cblxuJWJhc2UtZm9udCB7XG4gIGZvbnQtZmFtaWx5OiAnTm90byBTYW5zJztcbn1cblxuJXJvYm90byB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJztcbn1cblxuJXJvYm90by1mYXQge1xuICBmb250LWZhbWlseTogJ1JvYm90byc7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbiVjaGVzcy1mb250IHtcbiAgZm9udC1mYW1pbHk6ICdOb3RvIENoZXNzJywgJ05vdG8gU2Fucyc7XG59XG5cbiVzYW4ge1xuICBAZXh0ZW5kICVjaGVzcy1mb250O1xuXG4gIC5waWVjZS1sZXR0ZXIgJiB7XG4gICAgQGV4dGVuZCAlYmFzZS1mb250O1xuICB9XG59XG5cbi8qIHRleHQgcHJpbnRlZCBkaXJlY3RseSBvbiB0aGUgcGFnZSBiYWNrZ3JvdW5kIGRlc2VydmVzIHNwZWNpYWwgdHJlYXRtZW50ICh0cmFuc3AgdGhlbWUpICovXG4lcGFnZS1mb250IHtcbiAgY29sb3I6ICRjLWZvbnQtcGFnZTtcbn1cblxuJXBhZ2UtdGV4dCB7XG4gIEBleHRlbmQgJXBhZ2UtZm9udCwgJXBhZ2UtdGV4dC1zaGFkb3cgIW9wdGlvbmFsO1xufVxuXG4lcGFnZS1saW5rIHtcbiAgQGV4dGVuZCAlcGFnZS1saW5rLWZvbnQgIW9wdGlvbmFsO1xuXG4gIEBleHRlbmQgJXBhZ2UtdGV4dC1zaGFkb3cgIW9wdGlvbmFsO1xufVxuXG4lbWV0YWwge1xuICBAaW5jbHVkZSBtZXRhbDtcbn1cblxuJW1ldGFsLWhvdmVyIHtcbiAgQGluY2x1ZGUgbWV0YWwtaG92ZXI7XG59XG5cbiVwYWdlLW1ldGFsIHtcbiAgQGluY2x1ZGUgcGFnZS1tZXRhbDtcbn1cblxuJXBhZ2UtbWV0YWwtaG92ZXIge1xuICBAaW5jbHVkZSBwYWdlLW1ldGFsO1xufVxuXG4lbWV0YWwtYmcge1xuICBAaW5jbHVkZSBtZXRhbC1iZztcbn1cblxuJWFjdGl2ZS1pbnNldC1zaGFkb3cge1xuICBib3gtc2hhZG93OiAwIDNweCA0cHggaHNsYSgwLCAwLCAwLCAwLjE1KSBpbnNldDtcbn1cblxuJWFjdGl2ZSB7XG4gIEBleHRlbmQgJWFjdGl2ZS1pbnNldC1zaGFkb3c7XG5cbiAgYmFja2dyb3VuZDogI2JkMTExZjtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCB3aGl0ZSAhaW1wb3J0YW50O1xufVxuXG4jdHJhaW5lciBncm91cC5yYWRpbyBpbnB1dDpjaGVja2VkICsgbGFiZWx7XG4gIGJhY2tncm91bmQ6ICMwNDU2YmM7XG59XG5cbiVhY3RpdmUtaG92ZXIge1xuICBiYWNrZ3JvdW5kOiBtaXgod2hpdGUsICRjLWFjY2VudCwgMjAlKTtcbn1cblxuJWFjdGl2ZS1zb2Z0IHtcbiAgQGV4dGVuZCAlYWN0aXZlLWluc2V0LXNoYWRvdztcblxuICBiYWNrZ3JvdW5kOiAjMDQ1NmJjO1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4ICRjLWZvbnQtc2hhZG93ICFpbXBvcnRhbnQ7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4lZHJvcGRvd24tc2hhZG93IHtcbiAgYm94LXNoYWRvdzogLTFweCA1cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbn1cblxuJXBvcHVwLXNoYWRvdyB7XG4gIGJveC1zaGFkb3c6IDAgMTRweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4yNSksIDAgMTBweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yMik7XG59XG5cbiVidXR0b24tc2hhZG93IHtcbiAgYm94LXNoYWRvdzogMCAycHggNXB4IDAgaHNsYSgwLCAwLCAwJSwgMC4yMjUpO1xufVxuXG4lYnV0dG9uLXJhaXNlZC1zaGFkb3cge1xuICBib3gtc2hhZG93OiAwIDRweCAxMHB4IDBweCBoc2xhKDAsIDAsIDAsIDAuMjI1KTtcbn1cblxuJWJ1dHRvbi1ub25lIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBjb2xvcjogJGMtZm9udDtcbn1cblxuJWNoZWNrYm94IHtcbiAgQGV4dGVuZCAlYm94LXJhZGl1cztcblxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjLWJnLXBhZ2U7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjLWJnLWxvdztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAuNWVtO1xuXG4gICY6Y2hlY2tlZCB7XG4gICAgYmFja2dyb3VuZDogIzA0NTZiYztcbiAgICBib3JkZXItY29sb3I6ICMwNDU2YmM7XG4gIH1cbn1cblxuJWZvY3VzLXNoYWRvdyB7XG4gIGJveC1zaGFkb3c6IDAgMCAxMnB4ICRjLWZvbnQtZGltO1xufVxuXG4lbm93cmFwLWhpZGRlbiB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbiVub3dyYXAtZWxsaXBzaXMge1xuICBAZXh0ZW5kICVlbGxpcHNpcztcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4lYm94LXBhZGRpbmcge1xuICBwYWRkaW5nOiA1dmggdmFyKC0tYm94LXBhZGRpbmcpO1xufVxuXG4lYm94LXBhZGRpbmctaG9yaXoge1xuICBwYWRkaW5nOiAwIHZhcigtLWJveC1wYWRkaW5nKTtcbn1cblxuJWJyZWFrLXdvcmQge1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuXG4lYnJlYWstd29yZC1oYXJkIHtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuXG4gIC8qIHN1cHBvcnQ6IGZpcmVmb3ggKi9cbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbn1cblxuJWJyZWFrLW5vcGUge1xuICBvdmVyZmxvdy13cmFwOiBub3JtYWw7XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cblxuJWVsbGlwc2lzIHtcbiAgQGluY2x1ZGUgZWxsaXBzaXM7XG59XG5cbiVzcXVhcmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuJXZpZGVvIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiAwO1xuICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlO1xuXG4gIC8qIDE2LzkgKi9cbiAgLy8gcGFkZGluZy1ib3R0b206IDc1JTsgLyogNC8zICovXG4gIHdpZHRoOiAxMDAlO1xuXG4gID4gKiB7XG4gICAgQGV4dGVuZCAlYWJzLTEwMDtcblxuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxufVxuXG4lZGF0YS1pY29uIHtcbiAgZm9udC1zaXplOiAxLjJlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZm9udC1mYW1pbHk6ICdsaWNoZXNzJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgc3BlYWs6IG5vbmU7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1pY29uKTtcbiAgb3BhY2l0eTogMC45O1xufVxuXG4lZGF0YS1pY29uLXRvcCB7XG4gICY6OmJlZm9yZSB7XG4gICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xuICB9XG59XG5cbiVmdWxsc2NyZWVuLW1hc2sge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgYmFja2dyb3VuZDogJGMtcGFnZS1tYXNrO1xuICB6LWluZGV4OiB6KFwiZnVsbHNjcmVlbi1tYXNrXCIpO1xufVxuXG4lbGluay1vdmVybGF5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IHooXCJsaW5rLW92ZXJsYXlcIik7XG59XG5cbiVhYnMtMTAwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuIiwiJWZsZXgtd3JhcCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG59XG5cbiVmbGV4LWNlbnRlciB7XG4gIC8qIGV4dGVuZHMgJWZsZXgtd3JhcCAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4lZmxleC1jZW50ZXItbm93cmFwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4lZmxleC1iZXR3ZWVuIHtcbiAgLyogZXh0ZW5kcyAlZmxleC1jZW50ZXIgKi9cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4lZmxleC1iZXR3ZWVuLW5vd3JhcCB7XG4gIC8qIGV4dGVuZHMgJWZsZXgtY2VudGVyICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4lZmxleC1iZXR3ZWVuLXN0cmV0Y2gge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuXG4lZmxleC1hcm91bmQge1xuICAvKiBleHRlbmRzICVmbGV4LWNlbnRlciAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbn1cblxuJWZsZXgtY29sdW1uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiBjb2x1bW47XG59XG4iLCIlYm94LXJhZGl1cyB7XG4gIEBpbmNsdWRlIGJveC1yYWRpdXM7XG59XG5cbiVib3gtcmFkaXVzLWZvcmNlIHtcbiAgQGV4dGVuZCAlYm94LXJhZGl1cztcblxuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8qIGhlbHBzIHdpdGggY2xpcHBpbmcgYmFja2dyb3VuZCBpbnRvIGJvcmRlci1yYWRpdXMgKi9cbn1cblxuJWJveC1yYWRpdXMtbGVmdCB7XG4gIGJvcmRlci1yYWRpdXM6ICRib3gtcmFkaXVzLXNpemUgMCAwICRib3gtcmFkaXVzLXNpemU7XG59XG5cbiVib3gtcmFkaXVzLXJpZ2h0IHtcbiAgYm9yZGVyLXJhZGl1czogMCAkYm94LXJhZGl1cy1zaXplICRib3gtcmFkaXVzLXNpemUgMDtcbn1cblxuJWJveC1yYWRpdXMtdG9wIHtcbiAgYm9yZGVyLXJhZGl1czogJGJveC1yYWRpdXMtc2l6ZSAkYm94LXJhZGl1cy1zaXplIDAgMDtcbn1cblxuJWJveC1yYWRpdXMtYm90dG9tIHtcbiAgYm9yZGVyLXJhZGl1czogMCAwICRib3gtcmFkaXVzLXNpemUgJGJveC1yYWRpdXMtc2l6ZTtcbn1cblxuJWJveC1yYWRpdXMtdG9wLWxlZnQge1xuICBib3JkZXItcmFkaXVzOiAkYm94LXJhZGl1cy1zaXplIDAgMCAwO1xufVxuXG4lYm94LXJhZGl1cy10b3AtcmlnaHQge1xuICBib3JkZXItcmFkaXVzOiAwICRib3gtcmFkaXVzLXNpemUgMCAwO1xufVxuXG4lYm94LXNoYWRvdyB7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3c7XG59XG5cbiVib3gtbmVhdCB7XG4gIEBleHRlbmQgJWJveC1zaGFkb3csICVib3gtcmFkaXVzO1xufVxuXG4lYm94LW5lYXQtdG9wIHtcbiAgQGV4dGVuZCAlYm94LXNoYWRvdywgJWJveC1yYWRpdXMtdG9wO1xufVxuXG4lYm94LW5lYXQtZm9yY2Uge1xuICBAZXh0ZW5kICVib3gtc2hhZG93LCAlYm94LXJhZGl1cy1mb3JjZTtcbn1cbiIsIiR2cC1taW4td2lkdGg6IDMyMHB4ICFkZWZhdWx0O1xuJHZwLW1heC13aWR0aDogMTIwMHB4ICFkZWZhdWx0O1xuXG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkdmFsdWUpIHtcbiAgQHJldHVybiAkdmFsdWUgLyAoJHZhbHVlICogMCArIDEpO1xufVxuXG5AbWl4aW4gZmx1aWQtc2l6ZSgkcHJvcCwgJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdnc6ICR2cC1taW4td2lkdGgsICRtYXgtdnc6ICR2cC1tYXgtd2lkdGgpIHtcbiAgJHUxOiB1bml0KCRtaW4tdncpO1xuICAkdTI6IHVuaXQoJG1heC12dyk7XG4gICR1MzogdW5pdCgkbWluLXNpemUpO1xuICAkdTQ6IHVuaXQoJG1heC1zaXplKTtcblxuICBAaWYgJHUxID09ICR1MiBhbmQgJHUxID09ICR1MyBhbmQgJHUxID09ICR1NCB7XG4gICAgJiB7XG4gICAgICAjeyRwcm9wfTogJG1pbi1zaXplO1xuXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICAgICAjeyRwcm9wfTogY2FsYygjeyRtaW4tc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1zaXplIC0gJG1pbi1zaXplKX0gKiAoKDEwMHZ3IC0gI3skbWluLXZ3fSkgLyAje3N0cmlwLXVuaXQoJG1heC12dyAtICRtaW4tdncpfSkpO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICAgICAjeyRwcm9wfTogJG1heC1zaXplO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgQGVycm9yIFwiZmx1aWQtc2l6ZSByZXF1aXJlcyB0aGF0IGFsbCB2YWx1ZXMgaGF2ZSB0aGUgc2FtZSB1bml0XCI7XG4gIH1cbn1cbiIsIkBpbXBvcnQgXCJjb29yZHMtY29sb3JzXCI7XG5cbmNvb3JkcyB7XG4gIC8qIGhhbmRsZSBoaWRkZW4gY29vcmRzICovXG4gIC5jb29yZHMtbm8gJiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8qIGhhbmRsZSBpbm5lciBjb29yZHMgKi9cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICBAaW5jbHVkZSBmbHVpZC1zaXplKFwiZm9udC1zaXplXCIsIDhweCwgMTJweCk7XG5cbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4ICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICYucmFua3Mge1xuICAgIGZsZXgtZmxvdzogY29sdW1uLXJldmVyc2U7XG4gICAgdG9wOiAxcHg7XG4gICAgcmlnaHQ6IDA7XG5cbiAgICAvLyBhIG5lZ2F0aXZlIHZhbHVlIGNyZWF0ZXMgZW1wdHkgc3BhY2Ugb24gdGhlIHJpZ2h0IHNpZGUgaW4gbW9iaWxlIGJyb3dzZXJzXG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAuOGVtO1xuXG4gICAgJi5ibGFjayB7XG4gICAgICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICAmLmZpbGVzIHtcbiAgICBib3R0b206IDBweDtcbiAgICBsZWZ0OiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgZmxleC1mbG93OiByb3c7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxLjRlbTtcblxuICAgICYuYmxhY2sge1xuICAgICAgZmxleC1mbG93OiByb3ctcmV2ZXJzZTtcbiAgICB9XG5cbiAgICBjb29yZCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDRweDtcbiAgICB9XG4gIH1cblxuICBjb29yZCB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gIH1cblxuICAvKiBuZWdhdGUgaW5uZXIgY29vcmRzIGNvbG9ycyAqL1xuICAuaXMzZCAuY2ctd3JhcCBjb29yZHMgY29vcmQge1xuICAgIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCAjMDAwICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuaXMzZCAuY2ctd3JhcCBjb29yZHMuZmlsZXMge1xuICAgIGJvdHRvbTogY2FsYygxcHggLSAyLjUlKTtcblxuICAgIGNvb3JkIHtcbiAgICAgIHBhZGRpbmctbGVmdDogM3B4O1xuICAgIH1cbiAgfVxufVxuXG5AaW5jbHVkZSBjb29yZHMtY29sb3JzO1xuXG4vKiBoYW5kbGUgb3V0ZXIgY29vcmRzICovXG5AaW5jbHVkZSBicmVha3BvaW50KCRtcS1jb2wyLXVuaWJvYXJkKSB7XG4gIC5jb29yZHMtb3V0IGNvb3JkcyB7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmU7XG5cbiAgICAmLnJhbmtzIHtcbiAgICAgIHJpZ2h0OiAtMTVweDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHdpZHRoOiAxMnB4O1xuXG4gICAgICBjb29yZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0MiUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuZmlsZXMge1xuICAgICAgYm90dG9tOiAtMTVweDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgY29vcmQge1xuICAgICAgY29sb3I6ICRjLWZvbnQtcGFnZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuIiwiQG1peGluIGNvb3Jkcy1jb2xvcnMge1xuICA6cm9vdCB7XG4gICAgLS1jZy1jb29yZC1jb2xvci13aGl0ZTogI2ZmZjtcbiAgICAtLWNnLWNvb3JkLWNvbG9yLWJsYWNrOiAjZmZmO1xuICAgIC0tY2ctY29vcmQtc2hhZG93OiAwIDFweCAycHggIzAwMDtcbiAgfVxuXG4gIGNvb3JkcyB7XG4gICAgdGV4dC1zaGFkb3c6IHZhcigtLWNnLWNvb3JkLXNoYWRvdyk7XG4gIH1cblxuICAub3JpZW50YXRpb24td2hpdGUgLmZpbGVzIGNvb3JkOm50aC1jaGlsZCgybisxKSxcbiAgLm9yaWVudGF0aW9uLXdoaXRlIC5yYW5rcyBjb29yZDpudGgtY2hpbGQoMm4pLFxuICAub3JpZW50YXRpb24tYmxhY2sgLmZpbGVzIGNvb3JkOm50aC1jaGlsZCgybiksXG4gIC5vcmllbnRhdGlvbi1ibGFjayAucmFua3MgY29vcmQ6bnRoLWNoaWxkKDJuKzEpIHtcbiAgICBjb2xvcjogdmFyKC0tY2ctY29vcmQtY29sb3Itd2hpdGUpO1xuICB9XG5cbiAgLm9yaWVudGF0aW9uLXdoaXRlIC5maWxlcyBjb29yZDpudGgtY2hpbGQoMm4pLFxuICAub3JpZW50YXRpb24td2hpdGUgLnJhbmtzIGNvb3JkOm50aC1jaGlsZCgybisxKSxcbiAgLm9yaWVudGF0aW9uLWJsYWNrIC5maWxlcyBjb29yZDpudGgtY2hpbGQoMm4rMSksXG4gIC5vcmllbnRhdGlvbi1ibGFjayAucmFua3MgY29vcmQ6bnRoLWNoaWxkKDJuKSB7XG4gICAgY29sb3I6IHZhcigtLWNnLWNvb3JkLWNvbG9yLWJsYWNrKTtcbiAgfVxufVxuIiwiYm9keSB7XG4gIC0tYm9hcmQtc2NhbGU6IDE7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbXEtem9vbS1lbmFibGVkKSB7XG4gICAgLy8gLS16b29tOiA4MDsgZGVmaW5lZCBpbiB0aGUgSFRNTCwgbG9hZGVkIGZyb20gc2VydmVyXG4gICAgLS1ib2FyZC1zY2FsZTogY2FsYygodmFyKC0tem9vbSkgLyAxMDApICogMC43ICsgMC4zKTtcbiAgfVxufVxuXG5AaW5jbHVkZSBicmVha3BvaW50KCRtcS1jb2wxLXVuaWJvYXJkKSB7XG4gIGJvZHkge1xuICAgIC0tY29sMTogMTtcbiAgfVxuXG4gIC5tYWluLWJvYXJkIGNnLWJvYXJkIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4iLCIjcHJvbW90aW9uLWNob2ljZSB7XG4gIEBleHRlbmQgJWFicy0xMDA7XG5cbiAgYmFja2dyb3VuZDogZmFkZS1vdXQoJGMtYmctcGFnZSwgMC4zKTtcbiAgei1pbmRleDogeihcImNnX19wcm9tb3Rpb25cIik7XG5cbiAgc3F1YXJlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNiMGIwYjA7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDI1cHggM3B4ICM4MDgwODA7XG5cbiAgICBAaW5jbHVkZSB0cmFuc2l0aW9uO1xuICB9XG5cbiAgcGllY2Uge1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIG9wYWNpdHk6IDE7XG5cbiAgICAvKiBjYW5jZWxzIGJsaW5kZm9sZCAqL1xuICB9XG5cbiAgLmlzMmQgJiBwaWVjZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbjtcblxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcbiAgfVxuXG4gIHNxdWFyZTpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDQ4cHggOHB4ICRjLWFjY2VudDtcbiAgICBib3JkZXItcmFkaXVzOiAwJTtcbiAgfVxuXG4gIC5pczJkICYgc3F1YXJlOmhvdmVyIHBpZWNlIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cbn1cbiIsIkBpbXBvcnQgXCJsYXlvdXRcIjtcbkBpbXBvcnQgXCJtYXBcIjtcbkBpbXBvcnQgXCJydW5cIjtcbkBpbXBvcnQgXCJ0YWJsZVwiO1xuQGltcG9ydCBcImJvYXJkXCI7XG5AaW1wb3J0IFwic2NyZWVuXCI7XG5AaW1wb3J0IFwic2lkZS1tYXBcIjtcbkBpbXBvcnQgXCJzaWRlLWhvbWVcIjtcbiIsIiRtcS1jb2wyOiAkbXEtY29sMi11bmlib2FyZDtcbiRtcS1jb2wzOiAkbXEtY29sMy11bmlib2FyZDtcblxuI21haW4td3JhcCB7XG4gIC0tbWFpbi1tYXgtd2lkdGg6IGNhbGMoMTAwdmggLSAjeyRzaXRlLWhlYWRlci1vdXRlci1oZWlnaHR9IC0gI3skY29sMS11bmlib2FyZC1jb250cm9sc30pO1xuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1xLWNvbDIpIHtcbiAgICAtLW1haW4tbWF4LXdpZHRoOiBhdXRvO1xuICB9XG59XG5cbi5sZWFybiB7XG4gIGdyaWQtYXJlYTogbWFpbjtcbiAgZGlzcGxheTogZ3JpZDtcblxuICAmX19zaWRlIHtcbiAgICBncmlkLWFyZWE6IHNpZGU7XG4gIH1cblxuICAmX19tYWluIHtcbiAgICBncmlkLWFyZWE6IG1haW47XG4gIH1cblxuICAmX190YWJsZSB7XG4gICAgZ3JpZC1hcmVhOiB0YWJsZTtcbiAgfVxuXG4gICYtLXJ1biB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogJ21haW4nICd0YWJsZScgJ3NpZGUnO1xuICB9XG5cbiAgJi0tbWFwIHtcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiAnc2lkZScgJ21haW4nO1xuICB9XG5cbiAgZ3JpZC1nYXA6ICRibG9jay1nYXA7XG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkbXEtY29sMikge1xuICAgICYtLXJ1biB7XG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICRjb2wyLXVuaWJvYXJkLXdpZHRoICRjb2wyLXVuaWJvYXJkLXRhYmxlO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBmaXQtY29udGVudCgwKTtcbiAgICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6ICdtYWluIHRhYmxlJyAnc2lkZSAuJztcbiAgICB9XG5cbiAgICAmLS1tYXAge1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogJ3NpZGUgbWFpbic7XG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDI0MHB4IGF1dG87XG5cbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1xLXgtbGFyZ2UpIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyNDBweCA5NjBweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1xLWNvbDMpIHtcbiAgICAmLS1ydW4ge1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAkY29sMy11bmlib2FyZC1zaWRlICRjb2wzLXVuaWJvYXJkLXdpZHRoICRjb2wzLXVuaWJvYXJkLXRhYmxlO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogJ3NpZGUgbWFpbiB0YWJsZSc7XG4gICAgfVxuICB9XG59XG4iLCIubGVhcm4tc3RhZ2VzIHtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG5cbiAgLmNhdGVnID4gaDIge1xuICAgIEBleHRlbmQgJXJvYm90bztcblxuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIGxldHRlci1zcGFjaW5nOiA4cHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzk5OTtcbiAgICB0ZXh0LXNoYWRvdzogJHRleHQtc2hhZG93O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5jYXRlZ19zdGFnZXMge1xuICAgIC0tbWluLXdpZHRoOiAxMDB2dztcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJG1xLXh4LXNtYWxsKSB7XG4gICAgICAtLW1pbi13aWR0aDogNDAwcHg7XG4gICAgfVxuXG5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KHZhcigtLW1pbi13aWR0aCksIDFmcikpO1xuICAgIGdyaWQtZ2FwOiAxZW07XG4gICAgbWFyZ2luOiAuOGVtIDAgM2VtIDA7XG4gIH1cblxuICAuc3RhZ2Uge1xuICAgIEBleHRlbmQgJWJveC1yYWRpdXMsICVmbGV4LWNlbnRlci1ub3dyYXA7XG5cbiAgICBAaW5jbHVkZSB0cmFuc2l0aW9uO1xuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGhlaWdodDogOTBweDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBtYXJnaW4tdG9wOiAxM3B4O1xuICAgIGJveC1zaGFkb3c6IDAgM3B4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4zKSwgMCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgIGZvbnQtc2l6ZTogMS4yZW07XG5cbiAgICBpbWcge1xuICAgICAgd2lkdGg6IDgwcHg7XG4gICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICBtYXJnaW46IDAgMTNweDtcbiAgICAgIG9wYWNpdHk6IDAuOTtcbiAgICB9XG5cbiAgICBoMyB7XG4gICAgICBmb250LXNpemU6IDJlbTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAzcHg7XG4gICAgICBtYXJnaW46IDAgMCAxcHggLTFweDtcbiAgICB9XG5cbiAgICBoMyB7XG4gICAgICBmb250LXNpemU6IDEuNmVtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDJweDtcbiAgICB9XG5cbiAgICAmLnZ2diBoMyB7XG4gICAgICBmb250LXNpemU6IDEuNGVtO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHNvZnQtYnJpZ2h0IHtcbiAgICAgIDUwJSB7XG4gICAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcygwLjk3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLm9uZ29pbmcge1xuICAgICAgYmFja2dyb3VuZDogI2VkMWMyNDtcbiAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcygwLjkpO1xuICAgICAgYW5pbWF0aW9uOiAxLjdzIHNvZnQtYnJpZ2h0IGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIH1cblxuICAgICYub25nb2luZzpob3ZlciB7XG4gICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4yKTtcbiAgICB9XG5cbiAgICAmLmRvbmUge1xuICAgICAgYmFja2dyb3VuZDogIzhhMDAwYjtcbiAgICB9XG5cbiAgICAmLmZ1dHVyZSB7XG4gICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICBiYWNrZ3JvdW5kOiAjMDQ1NmJjO1xuICAgIH1cblxuICAgICYuZnV0dXJlIGltZyB7XG4gICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxuXG4gICAgJi5hY3RpdmUsXG4gICAgJjpob3ZlciB7XG4gICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAucmliYm9uLXdyYXBwZXIge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogODVweDtcbiAgICAgIGhlaWdodDogODhweDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0zcHg7XG4gICAgICByaWdodDogLTNweDtcbiAgICB9XG4gIH1cblxuICAucmliYm9uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRleHQtc2hhZG93OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkgMHB4IDFweCAwcHg7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiA3cHggMDtcbiAgICBsZWZ0OiAtNXB4O1xuICAgIHRvcDogMTVweDtcbiAgICB3aWR0aDogMTIwcHg7XG4gICAgY29sb3I6ICM2YTYzNDA7XG4gICAgYm94LXNoYWRvdzogMHB4IDBweCAzcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuXG4gICAgaSB7XG4gICAgICBjb2xvcjogJGMtYnJhZztcbiAgICAgIGFuaW1hdGlvbjogMC42cyBzb2Z0LWh1ZSBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICAgIHRleHQtc2hhZG93OiAwIC0wLjVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIH1cblxuICAgIGk6bnRoLWNoaWxkKDIpIHtcbiAgICAgIGFuaW1hdGlvbi1kZWxheTogMC4ycztcbiAgICB9XG5cbiAgICBpOm50aC1jaGlsZCgzKSB7XG4gICAgICBhbmltYXRpb24tZGVsYXk6IDAuNHM7XG4gICAgfVxuXG4gICAgJjpiZWZvcmUsXG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yaWdodDogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtM3B4O1xuICAgIH1cblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuXG4gICAgJjphZnRlciB7XG4gICAgICByaWdodDogMDtcbiAgICB9XG5cbiAgICAmLmRvbmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0JGREM3QTtcbiAgICB9XG5cbiAgICAmLmRvbmU6YmVmb3JlLFxuICAgICYuZG9uZTphZnRlciB7XG4gICAgICBib3JkZXItdG9wOiAzcHggc29saWQgIzZlODkwMDtcbiAgICB9XG5cbiAgICAmLm9uZ29pbmcge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0IzRTVGQztcbiAgICB9XG5cbiAgICAmLm9uZ29pbmc6YmVmb3JlLFxuICAgICYub25nb2luZzphZnRlciB7XG4gICAgICBib3JkZXItdG9wOiAzcHggc29saWQgIzUzNkRGRTtcbiAgICB9XG4gIH1cblxuICAud2hhdF9uZXh0ID4gcCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogMjBweCAwO1xuICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gIH1cbn1cbiIsIlxuIiwiLmxlYXJuX190YWJsZSB7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcblxuICAud3JhcCB7XG4gICAgQGV4dGVuZCAlYm94LW5lYXQsICVib3gtcmFkaXVzLWZvcmNlO1xuICB9XG5cbiAgLnRpdGxlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJhY2tncm91bmQ6ICRjLXByaW1hcnk7XG4gICAgY29sb3I6ICRjLXByaW1hcnktb3ZlcjtcblxuICAgIGgyLFxuICAgIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMi4zZW07XG4gICAgICBtYXJnaW46IDE1cHggMCA1cHggLTNweDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgaGVpZ2h0OiA4MHB4O1xuICAgICAgbWFyZ2luOiA1cHggOHB4IDVweCA1cHg7XG4gICAgfVxuICB9XG5cbiAgLnN1YnRpdGxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG4gIH1cblxuICAuZ29hbCB7XG4gICAgQGV4dGVuZCAlZmxleC1jZW50ZXI7XG5cbiAgICBiYWNrZ3JvdW5kOiAkYy1iZy1ib3g7XG4gICAgYm9yZGVyOiAkYm9yZGVyO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgcGFkZGluZzogJGJsb2NrLWdhcDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAucmVzdWx0IHtcbiAgICBAZXh0ZW5kICVmbGV4LWNlbnRlcjtcblxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZsZXgtZmxvdzogY29sdW1uIG5vd3JhcDtcbiAgICBib3JkZXI6ICRib3JkZXI7XG4gICAgYm9yZGVyLXRvcDogbm9uZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbjtcblxuICAgIG1pbi1oZWlnaHQ6IDEzNXB4O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiAxLjdlbTtcblxuICAgIEBrZXlmcmFtZXMgc2hhZG93LWdsb3cge1xuICAgICAgNTAlIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDEwcHggMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyB0ZXh0LXNoYWRvdy1nbG93IHtcbiAgICAgIDUwJSB7XG4gICAgICAgIHRleHQtc2hhZG93OiAwIDAgMTBweCAjZmZmO1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGFuaW1hdGlvbjogdGV4dC1zaGFkb3ctZ2xvdyAxcyAxO1xuICAgIH1cblxuICAgICYuZmFpbGVkIGgyLFxuICAgICYubmV4dCBoMiB7XG4gICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMSk7XG4gICAgfVxuXG4gICAgLnN0YXJzIHtcbiAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICB9XG5cbiAgICAuc3RhcnMgaSB7XG4gICAgICBtYXJnaW46IDNweDtcbiAgICAgIGFuaW1hdGlvbjogdGV4dC1zaGFkb3ctZ2xvdyAxcyAxO1xuICAgIH1cblxuICAgIGJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDE1cHggYXV0byAxNXB4IGF1dG87XG4gICAgICBmb250LXNpemU6IDMwcHg7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBib3gtc2hhZG93OiAwIDAgNXB4IDVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgICBhbmltYXRpb246IHNoYWRvdy1nbG93IDFzIGluZmluaXRlO1xuICAgIH1cblxuICAgICYuY29tcGxldGVkIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjLWdvb2Q7XG4gICAgICBjb2xvcjogJGMtZ29vZC1vdmVyO1xuICAgIH1cblxuICAgICYuY29tcGxldGVkIGJ1dHRvbiB7XG4gICAgICBjb2xvcjogJGMtZ29vZDtcbiAgICB9XG5cbiAgICAmLmZhaWxlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYy1iYWQ7XG4gICAgICBjb2xvcjogJGMtYmFkLW92ZXI7XG4gICAgfVxuXG4gICAgJi5mYWlsZWQgYnV0dG9uIHtcbiAgICAgIGNvbG9yOiAkYy1iYWQ7XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyBnby1ob21lIHtcbiAgICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDAuMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmNvbXBsZXRlZDpub3QoLm5vLWdvLWhvbWUpIHBpZWNlIHtcbiAgICAgIGFuaW1hdGlvbjogMC43cyBlYXNlLWluLW91dCAwLjdzIGdvLWhvbWU7XG4gICAgfVxuICB9XG5cbiAgLnByb2dyZXNzIHtcbiAgICBAZXh0ZW5kICVmbGV4LWNlbnRlci1ub3dyYXA7XG5cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyOiAkYm9yZGVyO1xuICAgIGJvcmRlci10b3A6IDA7XG5cbiAgICBhIHtcbiAgICAgIEBleHRlbmQgJWZsZXgtY2VudGVyO1xuXG4gICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGJhY2tncm91bmQ6ICRjLWJnLWhpZ2g7XG4gICAgICBoZWlnaHQ6IDNlbTtcbiAgICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyO1xuICAgICAgb3BhY2l0eTogLjg7XG5cbiAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgYTpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItbGVmdDogMDtcbiAgICB9XG5cbiAgICBhOmhvdmVyIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuXG4gICAgYSBzcGFuIHtcbiAgICAgIG1hcmdpbjogYXV0bztcbiAgICB9XG5cbiAgICAuc3QzIGk6Zmlyc3QtY2hpbGQge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuXG4gICAgYS5kb25lIHtcbiAgICAgIGNvbG9yOiAkYy1nb29kLW92ZXI7XG4gICAgICBiYWNrZ3JvdW5kOiAkYy1nb29kO1xuICAgIH1cblxuICAgIGEuYWN0aXZlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBjb2xvcjogJGMtcHJpbWFyeS1vdmVyO1xuICAgICAgYmFja2dyb3VuZDogJGMtcHJpbWFyeTtcbiAgICB9XG4gIH1cbn1cbiIsIi5sZWFybl9fbWFpbiB7XG4gIGl0ZW0ge1xuICAgIHdpZHRoOiA3MCU7XG4gICAgaGVpZ2h0OiA3MCU7XG4gICAgYm90dG9tOiAxNSU7XG4gICAgbGVmdDogMTUlO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgei1pbmRleDogMTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMXM7XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNvZnQtaHVlIHtcbiAgICA1MCUge1xuICAgICAgZmlsdGVyOiBodWUtcm90YXRlKC0yMGRlZyk7XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzb2Z0LWdyb3cge1xuICAgIDUwJSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgYXBwbGUtYXBwZWFyIHtcbiAgICAwJSB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDApIHJvdGF0ZSgtMzYwZGVnKTtcbiAgICB9XG5cbiAgICAxMDAlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHJvdGF0ZSgwKTtcbiAgICB9XG4gIH1cblxuICAuYXBwbGUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvbGVhcm4vc3Rhci5wbmcpO1xuICAgIGFuaW1hdGlvbjogMC42cyBlYXNlLWluLW91dCAwcyAxIGZvcndhcmRzIGFwcGxlLWFwcGVhciwgMS43cyBlYXNlLWluLW91dCAwLjdzIGluZmluaXRlIG5vbmUgc29mdC1ncm93LCAwLjdzIGVhc2UtaW4tb3V0IDAuN3MgaW5maW5pdGUgbm9uZSBzb2Z0LWh1ZTtcbiAgfVxuXG4gIHNxdWFyZS5oYXMtaXRlbS5tb3ZlLWRlc3Qge1xuICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudCh0cmFuc3BhcmVudCAwJSwgdHJhbnNwYXJlbnQgODAlLCByZ2JhKDIwLCA4NSwgMCwgMC4zKSA4MCUpO1xuICB9XG5cbiAgLmNnLWJvYXJkIHNxdWFyZS5tb3ZlLWRlc3QuZHJhZy1vdmVyLFxuICAuY2ctYm9hcmQgc3F1YXJlLm1vdmUtZGVzdDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyMCwgODUsIDMwLCAwLjMpO1xuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZUluIHtcbiAgICAwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgZmlsdGVyOiBibHVyKDE1cHgpO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIGZpbHRlcjogYmx1cigwcHgpO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgcmFua0dsb3cge1xuICAgIDUwJSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgICBib3gtc2hhZG93OiAwIDAgNDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XG4gICAgfVxuICB9XG5cbiAgLmhpZ2hsaWdodC0ybmQtcmFuayAmIC5jZy1ib2FyZDo6YWZ0ZXIsXG4gIC5oaWdobGlnaHQtNXRoLXJhbmsgJiAuY2ctYm9hcmQ6OmFmdGVyLFxuICAuaGlnaGxpZ2h0LTd0aC1yYW5rICYgLmNnLWJvYXJkOjphZnRlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMi41JTtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAxMi41JTtcbiAgICBsZWZ0OiAwO1xuICAgIGJveC1zaGFkb3c6IDAgMCAxNXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gICAgYW5pbWF0aW9uOiAxcyByYW5rR2xvdyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgfVxuXG4gIC5oaWdobGlnaHQtN3RoLXJhbmsgJiAuY2ctYm9hcmQ6OmFmdGVyIHtcbiAgICB0b3A6IDEyLjUlO1xuICB9XG5cbiAgLmhpZ2hsaWdodC01dGgtcmFuayAmIC5jZy1ib2FyZDo6YWZ0ZXIge1xuICAgIHRvcDogMzcuNSU7XG4gIH1cblxuICAjcHJvbW90aW9uLWNob2ljZSAuZXhwbGFuYXRpb24ge1xuICAgIEBleHRlbmQgJXBvcHVwLXNoYWRvdztcblxuICAgIGJhY2tncm91bmQ6ICRjLWJnLXBvcHVwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDI1JTtcbiAgICBsZWZ0OiAyNSU7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBoZWlnaHQ6IDUwJTtcbiAgICBwYWRkaW5nOiAyMHB4O1xuXG4gICAgaDIge1xuICAgICAgZm9udC1zaXplOiAyZW07XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICBmb250LXNpemU6IDEuM2VtO1xuICAgICAgbWFyZ2luLXRvcDogMTVweDtcbiAgICB9XG4gIH1cblxuICAuY2ctYm9hcmQgcGllY2Uud3JpZ2dsZTo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICchJztcbiAgfVxuXG4gIC5jZy1ib2FyZCBwaWVjZS53cmlnZ2xlOjphZnRlciB7XG4gICAgY29udGVudDogJyEnO1xuICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICB0ZXh0LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjgpIDAgMCAzcHg7XG4gIH1cblxuICAucGllY2UtdmFsdWVzIC5jZy1ib2FyZCBwaWVjZTo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxNHB4O1xuICAgIHJpZ2h0OiA0cHg7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgdGV4dC1zaGFkb3c6IDAgMCA5cHggcmdiYSgwLCAwLCAwLCAxKSwgMCAwIDRweCByZ2JhKDAsIDAsIDAsIDEpO1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC5waWVjZS12YWx1ZXMgLmNnLWJvYXJkIHBpZWNlLnF1ZWVuOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICc5JztcbiAgfVxuXG4gIC5waWVjZS12YWx1ZXMgLmNnLWJvYXJkIHBpZWNlLnJvb2s6OmJlZm9yZSB7XG4gICAgY29udGVudDogJzUnO1xuICB9XG5cbiAgLnBpZWNlLXZhbHVlcyAuY2ctYm9hcmQgcGllY2UuYmlzaG9wOjpiZWZvcmUsXG4gIC5waWVjZS12YWx1ZXMgLmNnLWJvYXJkIHBpZWNlLmtuaWdodDo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnMyc7XG4gIH1cblxuICAucGllY2UtdmFsdWVzIC5jZy1ib2FyZCBwaWVjZS5wYXduOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcxJztcbiAgfVxufVxuIiwiLmxlYXJuX19zY3JlZW4tb3ZlcmxheSB7XG4gIEBleHRlbmQgJWZ1bGxzY3JlZW4tbWFzaztcblxuICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAxOTUsIDI0NywgMC45KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ubGVhcm5fX3NjcmVlbiB7XG4gIEBleHRlbmQgJXBvcHVwLXNoYWRvdywgJWJveC1yYWRpdXM7XG5cbiAgbWFyZ2luOiAxNTBweCBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB3aWR0aDogMzUwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZy10b3A6IDM2cHg7XG5cbiAgPiA6bnRoLWNoaWxkKDEpIHtcbiAgICBhbmltYXRpb246IHNsaWRlSW4gMXMgY3ViaWMtYmV6aWVyKDAuMzcsIDAuODIsIDAuMiwgMSk7XG4gIH1cblxuICA+IDpudGgtY2hpbGQoMikge1xuICAgIGFuaW1hdGlvbjogc2xpZGVJbiAxLjVzIGN1YmljLWJlemllcigwLjM3LCAwLjgyLCAwLjIsIDEpO1xuICB9XG5cbiAgPiA6bnRoLWNoaWxkKDMpIHtcbiAgICBhbmltYXRpb246IHNsaWRlSW4gMnMgY3ViaWMtYmV6aWVyKDAuMzcsIDAuODIsIDAuMiwgMSk7XG4gIH1cblxuICA+IDpudGgtY2hpbGQoNCkge1xuICAgIGFuaW1hdGlvbjogc2xpZGVJbiAyLjVzIGN1YmljLWJlemllcigwLjM3LCAwLjgyLCAwLjIsIDEpO1xuICB9XG5cbiAgPiA6bnRoLWNoaWxkKDUpIHtcbiAgICBhbmltYXRpb246IHNsaWRlSW4gM3MgY3ViaWMtYmV6aWVyKDAuMzcsIDAuODIsIDAuMiwgMSk7XG4gIH1cblxuICAuc3RhcnMge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIH1cblxuICBAa2V5ZnJhbWVzIHN0YXItYXBwZWFyIHtcbiAgICAwJSB7XG4gICAgICBmaWx0ZXI6IHNhdHVyYXRlKDEpO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSByb3RhdGUoLTM2MGRlZyk7XG4gICAgfVxuXG4gICAgODUlIHtcbiAgICAgIGZpbHRlcjogc2F0dXJhdGUoMSk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpIHJvdGF0ZSgxMGRlZyk7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICBmaWx0ZXI6IHNhdHVyYXRlKDEpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgcm90YXRlKDApO1xuICAgIH1cbiAgfVxuXG4gIC5zdGFycyAuc3Rhci13cmFwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDU1cHg7XG4gICAgaGVpZ2h0OiA1NXB4O1xuICAgIG1hcmdpbjogMCA1cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnN0YXJzIC5zdGFyLXdyYXA6OmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNXB4O1xuICAgIGxlZnQ6IDVweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogNDVweDtcbiAgICBoZWlnaHQ6IDQ1cHg7XG4gICAgY29udGVudDogJyc7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9sZWFybi9zdGFyLnBuZyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBmaWx0ZXI6IHNhdHVyYXRlKDApO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zdGFycyAuc3RhciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvbGVhcm4vc3Rhci5wbmcpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgd2lkdGg6IDU1cHg7XG4gICAgaGVpZ2h0OiA1NXB4O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgYW5pbWF0aW9uOiBzdGFyLWFwcGVhciAyLjVzIGVhc2UtaW4tb3V0O1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4xcztcbiAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbiAgfVxuXG4gIC5zdGFycyAuc3Rhci13cmFwOm50aC1jaGlsZCgyKSAuc3RhciB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjhzO1xuICB9XG5cbiAgLnN0YXJzIC5zdGFyLXdyYXA6bnRoLWNoaWxkKDMpIC5zdGFyIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDEuNnM7XG4gIH1cblxuICAubm8tc3F1YXJlIHtcbiAgICB3aWR0aDogMTAwcHg7XG4gICAgaGVpZ2h0OiAxMDBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjJweCBhdXRvO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGNvbG9yOiAjMTgxODE4O1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMnB4O1xuICB9XG5cbiAgLnJvdW5kLXN2ZyB7XG4gICAgd2lkdGg6IDI0MHB4O1xuICAgIGhlaWdodDogMjQwcHg7XG4gICAgcGFkZGluZzogMHB4O1xuICAgIGJhY2tncm91bmQ6ICNmNTdjMDA7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIG1hcmdpbjogMCBhdXRvIDEwcHggYXV0bztcbiAgfVxuXG4gIC5yb3VuZC1zdmcgaW1nIHtcbiAgICB3aWR0aDogMjQwcHg7XG4gICAgaGVpZ2h0OiAyNDBweDtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICB9XG5cbiAgLnNjb3JlIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjMDI4OGQxO1xuICAgIGZvbnQtc2l6ZTogLjg1ZW07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDFweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxN3B4O1xuICB9XG5cbiAgLnNjb3JlIHNwYW4ge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nO1xuICB9XG5cbiAgcCB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gICAgcGFkZGluZzogMCAxNSU7XG4gICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTdweDtcbiAgfVxuXG4gIC5idXR0b25zIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLWJvdHRvbTogMjNweDtcblxuICAgIGEge1xuICAgICAgQGV4dGVuZCAlYm94LXJhZGl1cztcblxuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7XG4gICAgICBtYXJnaW46IDhweCAxMCUgMCAxMCU7XG4gICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIH1cblxuICAgIC5uZXh0IHtcbiAgICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICAgIGJhY2tncm91bmQ6ICM0ZmMzZjc7XG4gICAgfVxuXG4gICAgLmJhY2sge1xuICAgICAgZm9udC1zaXplOiAuODVlbTtcbiAgICAgIGJhY2tncm91bmQ6ICNmNTdjMDA7XG4gICAgfVxuXG4gICAgYTpob3ZlciB7XG4gICAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMC45KTtcbiAgICB9XG4gIH1cblxuICBwaWVjZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG59XG4iLCIubGVhcm5fX3NpZGUtbWFwIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgLmJhY2ssXG4gIC5jYXRlZyA+IGgyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDEuM2VtO1xuICAgIGhlaWdodDogNTBweDtcbiAgICBsaW5lLWhlaWdodDogNTBweDtcbiAgICB0ZXh0LWluZGVudDogMTVweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3BhY2l0eTogMC44MTtcbiAgfVxuXG4gIC5iYWNrIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGNvbG9yOiAkYy1mb250O1xuICB9XG5cbiAgLmJhY2sgaW1nIHtcbiAgICB3aWR0aDogNTBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gICAgb3BhY2l0eTogMC45O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTIwLCAxMjAsIDEyMCwgMSk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAuYmFjazpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxMjAsIDEyMCwgMTIwLCAwLjIpO1xuICB9XG5cbiAgLmNhdGVnID4gaDIge1xuICAgIGJvcmRlci10b3A6ICRib3JkZXI7XG4gIH1cblxuICAuY2F0ZWcgPiBoMjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogZmFkZS1vdXQoJGMtcHJpbWFyeSwgMC44KTtcbiAgfVxuXG4gIC5jYXRlZy5hY3RpdmUge1xuICAgIGJvcmRlcjogJGJvcmRlcjtcbiAgICBib3JkZXItd2lkdGg6IDAgMXB4O1xuICB9XG5cbiAgLmNhdGVnLmFjdGl2ZTpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2F0ZWcuYWN0aXZlID4gaDIge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBiYWNrZ3JvdW5kOiAkYy1wcmltYXJ5O1xuICAgIGNvbG9yOiAkYy1wcmltYXJ5LW92ZXI7XG4gIH1cblxuICAuY2F0ZWc6bm90KC5hY3RpdmUpIC5jYXRlZ19zdGFnZXMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuc3RhZ2Uge1xuICAgIEBleHRlbmQgJXJvYm90bywgJWZsZXgtY2VudGVyO1xuXG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbjtcblxuICAgIGZvbnQtc2l6ZTogMS4xZW07XG4gICAgb3BhY2l0eTogLjk7XG4gICAgY29sb3I6ICRjLWZvbnQ7XG5cbiAgICBpbWcsXG4gICAgaSB7XG4gICAgICB3aWR0aDogNTBweDtcbiAgICAgIGhlaWdodDogNTBweDtcbiAgICAgIG9wYWNpdHk6IDAuOTtcbiAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgfVxuXG4gICAgaTo6YmVmb3JlIHtcbiAgICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgICB9XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBmYWRlLW91dCgkYy1wcmltYXJ5LCAwLjgpO1xuICAgIH1cblxuICAgICYuYWN0aXZlIGltZyB7XG4gICAgICBiYWNrZ3JvdW5kOiAkYy1wcmltYXJ5O1xuICAgIH1cblxuICAgICYuZG9uZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBmYWRlLW91dCgkYy1nb29kLCAwLjgpO1xuICAgIH1cblxuICAgICYuZG9uZSBpbWcge1xuICAgICAgYmFja2dyb3VuZDogJGMtZ29vZDtcbiAgICB9XG5cbiAgICAmLmZ1dHVyZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBmYWRlLW91dCgkYy1wcmltYXJ5LCAwLjgpO1xuICAgIH1cblxuICAgICYuZnV0dXJlIGltZyB7XG4gICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICBiYWNrZ3JvdW5kOiAkYy1wcmltYXJ5O1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgZmlsdGVyOiBicmlnaHRuZXNzKDAuOSk7XG4gICAgICBjb2xvcjogJGMtZm9udC1jbGVhcmVyO1xuICAgIH1cbiAgfVxufVxuIiwiLmxlYXJuX19zaWRlLWhvbWUge1xuICBAZXh0ZW5kICVib3gtbmVhdDtcblxuICBiYWNrZ3JvdW5kOiAjYmQxMTFmO1xuICBjb2xvcjogJGMtcHJpbWFyeS1vdmVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDFlbSAwO1xuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDIuNWVtO1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDEuOGVtO1xuICAgIG1hcmdpbjogLjRlbSAwIDFlbSAwO1xuICB9XG5cbiAgQGtleWZyYW1lcyBmYXQtZ2xpZGUge1xuICAgIDUwJSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7XG4gICAgfVxuICB9XG5cbiAgaS5mYXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAyMDBweDtcbiAgICBoZWlnaHQ6IDIwMHB4O1xuICAgIGJhY2tncm91bmQ6IGltZy11cmwoXCJsZWFybi9icnV0YWwtaGVsbS5zdmdcIik7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgfVxuXG4gICY6aG92ZXIgaS5mYXQge1xuICAgIGFuaW1hdGlvbjogMS4ycyBmYXQtZ2xpZGUgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gIH1cblxuICAucHJvZ3Jlc3Mge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDMwcHg7XG5cbiAgICAvKiBib3JkZXItdG9wOiAzcHggc29saWQgIzE1NjZiMjsgKi9cbiAgICBiYWNrZ3JvdW5kOiAjZWQxYzI0O1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZWRCYWNrZ3JvdW5kIHtcbiAgICBmcm9tIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDEwMDAlO1xuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZWRCYXIge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDBweCk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gICAgfVxuICB9XG5cbiAgLnByb2dyZXNzIC5iYXIge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiAjOGEwMDBiO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgNXB4IDVweCAwO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGltZy11cmwoXCJncmFpbi5wbmdcIik7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDBweCk7XG4gICAgYW5pbWF0aW9uOiBhbmltYXRlZEJhY2tncm91bmQgNTBzIGxpbmVhciBpbmZpbml0ZSwgYW5pbWF0ZWRCYXIgMXMgZm9yd2FyZHM7XG4gIH1cblxuICAucHJvZ3Jlc3MgLnRleHQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICB6LWluZGV4OiAzO1xuICB9XG5cbiAgLmFjdGlvbnMge1xuICAgIHBhZGRpbmc6IDIwcHggMTBweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG5cbiAgYSB7XG4gICAgb3BhY2l0eTogMC42O1xuICAgIGNvbG9yOiAjZmZmO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBRUVBLFlBQVk7QUFxQlosNkRBQTZEO0FBYzdELG1CQUFtQjtBQU1uQixrQ0FBa0M7QUFFbEMsc0JBQXNCO0FBTXRCLG9DQUFvQztBQUVwQyxvQkFBb0I7QUFNcEIsaUNBQWlDO0FBRWpDLGdCQUFnQjtBQUloQiwrQkFBK0I7QUFFL0IsZ0JBQWdCO0FBS2hCLCtCQUErQjtBQUUvQixpQkFBaUI7QUFJakIsa0JBQWtCO0FBSWxCLGNBQWM7QUFJZCxpQkFBaUI7QUFJakIsK0JBQStCO0FBOEIvQixhQUFhO0FBTWIsYUFBYTtBQU1iLFlBQVk7QUdwSVosd0NBQXdDO0FzQkF4QyxZQUFZO0FBZVosYUFBYTtBQVNiLGtCQUFrQjtBQUtsQixrQkFBa0I7QUFLbEIsYUFBYTtBRWxDYix1REFBdUQ7QUFPdkQsdUVBQXVFO0FDNkR2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 */
