@font-face {
  font-family: independence regular;
  src: url("fonts/independence/regular.ttf") format('truetype');
  font-weight: normal;
  font-style: normal;
}
@font-face {
  font-family: octavian regular;
  src: url("fonts/octavian/regular.ttf") format('truetype');
  font-weight: normal;
  font-style: normal;
}
@font-face {
  font-family: serial regular;
  src: url("fonts/serial/regular.ttf") format('truetype');
  font-weight: normal;
  font-style: normal;
}
@-moz-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-o-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-moz-keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.5);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@-webkit-keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.5);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@-o-keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.5);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.5);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@-moz-keyframes scaleInB {
  from {
    opacity: 0;
    transform: scale(1.2);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@-webkit-keyframes scaleInB {
  from {
    opacity: 0;
    transform: scale(1.2);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@-o-keyframes scaleInB {
  from {
    opacity: 0;
    transform: scale(1.2);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@keyframes scaleInB {
  from {
    opacity: 0;
    transform: scale(1.2);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
@-moz-keyframes inFromTop {
  from {
    transform: translate(0, -10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-webkit-keyframes inFromTop {
  from {
    transform: translate(0, -10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-o-keyframes inFromTop {
  from {
    transform: translate(0, -10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@keyframes inFromTop {
  from {
    transform: translate(0, -10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-moz-keyframes inFromBottom {
  from {
    transform: translate(0, 10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-webkit-keyframes inFromBottom {
  from {
    transform: translate(0, 10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-o-keyframes inFromBottom {
  from {
    transform: translate(0, 10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@keyframes inFromBottom {
  from {
    transform: translate(0, 10px);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-moz-keyframes inFromRight {
  from {
    transform: translate(10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-webkit-keyframes inFromRight {
  from {
    transform: translate(10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-o-keyframes inFromRight {
  from {
    transform: translate(10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@keyframes inFromRight {
  from {
    transform: translate(10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-moz-keyframes inFromLeft {
  from {
    transform: translate(-10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-webkit-keyframes inFromLeft {
  from {
    transform: translate(-10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@-o-keyframes inFromLeft {
  from {
    transform: translate(-10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
@keyframes inFromLeft {
  from {
    transform: translate(-10px, 0);
    opacity: 0;
  }
  to {
    transform: translate(0, 0);
    opacity: 1;
  }
}
.burger {
  position: fixed;
  top: 20px;
  left: 20px;
  clear: both;
  width: 40px;
  height: 40px;
  z-index: 150;
}
.burger.off > .lines > span {
  background-color: #c29e6e;
}
.burger.off > .lines > span:nth-child(1) {
  top: 18px;
  width: 0%;
  left: 50%;
}
.burger.off > .lines > span:nth-child(2) {
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  transform: rotate(45deg);
}
.burger.off > .lines > span:nth-child(3) {
  -webkit-transform: rotate(-45deg);
  -moz-transform: rotate(-45deg);
  -o-transform: rotate(-45deg);
  -ms-transform: rotate(-45deg);
  transform: rotate(-45deg);
}
.burger.off > .lines > span:nth-child(4) {
  top: 18px;
  width: 0%;
  left: 50%;
}
.burger > .lines {
  position: relative;
  width: 100%;
  height: 100%;
}
.burger > .lines > span {
  display: block;
  position: absolute;
  height: 3px;
  -webkit-border-radius: 9px;
  border-radius: 9px;
  width: 100%;
  background-color: #c29e6e;
  opacity: 1;
  -ms-filter: none;
  filter: none;
  left: 0;
  -webkit-transition: 0.25s ease-in-out;
  -moz-transition: 0.25s ease-in-out;
  -o-transition: 0.25s ease-in-out;
  -ms-transition: 0.25s ease-in-out;
  transition: 0.25s ease-in-out;
}
.burger > .lines > span:nth-child(1) {
  top: 0px;
}
.burger > .lines > span:nth-child(2),
.burger > .lines > span:nth-child(3) {
  top: 14px;
}
.burger > .lines > span:nth-child(4) {
  top: 28px;
}
footer {
  border-top: 2px solid #000;
  border-bottom: 2px solid #000;
  padding: 6px 0;
  margin: 50px 0;
}
footer > .inner {
  border-top: 1px solid #000;
  border-bottom: 1px solid #000;
  text-align: center;
  padding: 10px 0 15px 0;
}
header > .inner {
  padding: 20px 60px;
}
header > .inner > .logo {
  width: 520px;
  height: 200px;
  margin: auto;
}
header > .inner > .logo > svg {
  width: inherit;
  height: inherit;
}
header > .inner > .menu {
  border-top: 2px solid #000;
  border-bottom: 2px solid #000;
  padding: 6px 0;
  background-image: url("/images/pattern/paper.png");
  top: 300px;
  left: 0px;
  right: 0px;
  width: 100%;
}
header > .inner > .menu.unstuck {
  position: absolute;
}
header > .inner > .menu.stuck {
  position: fixed;
  top: 0px;
}
header > .inner > .menu > .outer {
  border-top: 1px solid #000;
  border-bottom: 1px solid #000;
}
header > .inner > .menu > .outer > .inner {
  width: 980px;
  margin: auto;
}
header > .inner > .menu > .outer > .inner > .left,
header > .inner > .menu > .outer > .inner > .right,
header > .inner > .menu > .outer > .inner > .item {
  text-align: center;
  padding: 10px;
}
header > .inner > .menu > .outer > .inner > .left,
header > .inner > .menu > .outer > .inner > .right {
  width: 130px;
}
header > .inner > .menu > .outer > .inner > .left {
  float: left;
  border-right: 1px solid #000;
  height: 35px;
}
header > .inner > .menu > .outer > .inner > .left > .loc {
  margin: 3px 0 0 0;
}
header > .inner > .menu > .outer > .inner > .left > .loc.on {
  display: block;
}
header > .inner > .menu > .outer > .inner > .left > .loc.off {
  display: none;
}
header > .inner > .menu > .outer > .inner > .left > .lg {
  float: right;
  -webkit-animation: scaleInB 0.5s ease-in-out both;
  -moz-animation: scaleInB 0.5s ease-in-out both;
  -o-animation: scaleInB 0.5s ease-in-out both;
  -ms-animation: scaleInB 0.5s ease-in-out both;
  animation: scaleInB 0.5s ease-in-out both;
}
header > .inner > .menu > .outer > .inner > .left > .lg.on {
  display: block;
}
header > .inner > .menu > .outer > .inner > .left > .lg.off {
  display: none;
}
header > .inner > .menu > .outer > .inner > .left > .lg > svg {
  width: 35px;
  height: 35px;
}
header > .inner > .menu > .outer > .inner > .right {
  float: right;
  border-left: 1px solid #000;
}
header > .inner > .menu > .outer > .inner > .right > .socials > .social {
  float: left;
  width: 25px;
  height: 25px;
  background-color: #191919;
  padding: 5px;
  -webkit-transition: background-color 0.1s linear 0.1s;
  -moz-transition: background-color 0.1s linear 0.1s;
  -o-transition: background-color 0.1s linear 0.1s;
  -ms-transition: background-color 0.1s linear 0.1s;
  transition: background-color 0.1s linear 0.1s;
  -webkit-border-radius: 50%;
  border-radius: 50%;
}
header > .inner > .menu > .outer > .inner > .right > .socials > .social:nth-child(2) {
  margin-left: 10px;
}
header > .inner > .menu > .outer > .inner > .right > .socials > .social:nth-child(3) {
  margin-left: 10px;
}
header > .inner > .menu > .outer > .inner > .right > .socials > .social:hover {
  background-color: #876037;
  -webkit-transition: background-color 0.1s linear 0s;
  -moz-transition: background-color 0.1s linear 0s;
  -o-transition: background-color 0.1s linear 0s;
  -ms-transition: background-color 0.1s linear 0s;
  transition: background-color 0.1s linear 0s;
}
header > .inner > .menu > .outer > .inner > .right > .socials > .social > svg {
  width: 15px;
  height: 15px;
  margin: 0 1px 4px 0;
}
header > .inner > .menu > .outer > .inner > .right > .socials > .social > svg > path,
header > .inner > .menu > .outer > .inner > .right > .socials > .social > svg > circle {
  fill: #e5e3db;
}
header > .inner > .menu > .outer > .inner > .item {
  float: left;
  padding: 12px 24px;
  color: #000;
  text-decoration: none;
  -webkit-transition: color 0.1s linear, text-decoration 0.1s linear 0.1s;
  -moz-transition: color 0.1s linear, text-decoration 0.1s linear 0.1s;
  -o-transition: color 0.1s linear, text-decoration 0.1s linear 0.1s;
  -ms-transition: color 0.1s linear, text-decoration 0.1s linear 0.1s;
  transition: color 0.1s linear, text-decoration 0.1s linear 0.1s;
}
header > .inner > .menu > .outer > .inner > .item:hover {
  color: #876037;
  text-decoration: underline;
}
header > .inner > .menu > .outer > .inner > .divider {
  float: left;
  width: 2px;
  height: 20px;
  background-color: #000;
  margin: 20px 0 0 0;
}
#Ornaments {
  -webkit-animation: fadeIn 5s ease-in-out 0s both;
  -moz-animation: fadeIn 5s ease-in-out 0s both;
  -o-animation: fadeIn 5s ease-in-out 0s both;
  -ms-animation: fadeIn 5s ease-in-out 0s both;
  animation: fadeIn 5s ease-in-out 0s both;
}
@media all and (min-width: 1px) and (max-width: 1000px) {
  header > .inner {
    padding: 10px;
  }
  header > .inner > .logo {
    width: 100%;
  }
  header > .inner > .menu > .outer > .inner {
    width: auto;
  }
  header > .inner > .menu > .outer > .inner > .item {
    display: none;
  }
  header > .inner > .menu > .outer > .inner > .divider {
    display: none;
  }
  header > .inner > .menu > .outer > .inner > .left {
    border-right: none;
  }
  header > .inner > .menu > .outer > .inner > .left > .lg {
    float: left;
  }
  header > .inner > .menu > .outer > .inner > .right {
    float: right;
  }
  header > .inner > .menu > .outer > .inner > .right > .socials {
    float: left;
  }
}
.guide {
  padding: 20px 0 0 0;
}
.guide > .sections {
  padding: 20px;
}
.guide > .sections > .gsection {
  min-width: 200px;
  float: left;
}
.guide > .sections > .gsection > .title {
  font-family: independence regular;
  font-size: 29px;
  padding: 0 0 0 10px;
}
.guide > .sections > .gsection > .color {
  padding: 10px 20px;
  margin: 5px;
}
.guide > .sections > .gsection > .color.color_white1 {
  background-color: #fff;
  border: 1px solid #000;
  color: #000;
}
.guide > .sections > .gsection > .color.color_black1 {
  background-color: #000;
  border: 1px solid #fff;
  color: #fff;
}
.guide > .sections > .gsection > .color.color_black2 {
  background-color: #191919;
  border: 1px solid #fff;
  color: #fff;
}
.guide > .sections > .gsection > .color.color_brown1 {
  background-color: #c29e6e;
  border: 1px solid #000;
  color: #000;
}
.guide > .sections > .gsection > .color.color_brown2 {
  background-color: #aa8052;
  border: 1px solid #fff;
  color: #fff;
}
.guide > .sections > .gsection > .color.color_brown3 {
  background-color: #876037;
  border: 1px solid #fff;
  color: #fff;
}
.guide > .sections > .gsection > .color.color_beige1 {
  background-color: #c7baa2;
  border: 1px solid #000;
  color: #000;
}
.guide > .sections > .gsection > .color.color_beige2 {
  background-color: #e5e3db;
  border: 1px solid #000;
  color: #000;
}
.guide > .sections > .gsection > .detail {
  padding: 0 0 0 20px;
  text-align: right;
}
.guide > .sections > .gsection > .font {
  padding: 0 20px;
  overflow-x: scroll;
}
.guide > .sections > .gsection > .font.font_h1 {
  font-family: octavian regular;
  font-size: 22px;
}
.guide > .sections > .gsection > .font.font_h2 {
  font-family: serial regular;
  font-size: 55px;
}
.guide > .sections > .gsection > .font.font_copy1 {
  font-family: independence regular;
  font-size: 29px;
}
.guide > .sections > .gsection > .font.font_copy2 {
  font-family: Garamond;
  font-size: 116px;
}
.clear {
  zoom: 1;
}
.clear:before,
.clear:after {
  content: "";
  display: table;
}
.clear:after {
  clear: both;
}
body {
  padding: 0;
  margin: 0;
  background-color: #e5e3db;
  background-image: url("/images/pattern/paper.png");
  font-family: independence regular;
  font-size: 29px;
  text-align: justify;
}
a {
  color: #876037;
}
.container {
  width: 980px;
  margin: auto;
}
.title {
  font-family: octavian regular;
  font-size: 22px;
  text-align: center;
  text-transform: uppercase;
  padding: 0 0 30px 0;
}
.fakemenu {
  height: 68px;
}
.section {
  padding: 30px 0;
}
.section.section_authors {
  padding: 0;
}
.section > .copy.left {
  float: left;
}
.section > .copy.right {
  float: right;
}
.section > .copy.full {
  padding: 30px 0 0 0;
}
.section > .copy > .first {
  font-family: Garamond;
  font-size: 116px;
  float: left;
  line-height: 60px;
  margin: 20px 10px 10px 0;
}
.section > .copy > .subheader > .copy {
  font-family: serial regular;
  font-size: 55px;
  text-align: center;
  line-height: 20px;
  letter-spacing: 5px;
  padding: 25px 0 0 0;
}
.section > .copy.scope1 {
  width: 570px;
  padding: 20px 0 0 0;
}
.section > .copy.history1 {
  width: 560px;
}
.section > .copy.collection {
  width: 520px;
}
.section > .copy.howto {
  width: 650px;
}
.section > .copy.howto > ul {
  list-style-type: decimal;
  margin: 0;
  padding: 0 0 20px 25px;
}
.section > .copy.credits {
  width: 800px;
  margin: auto;
}
.section > .authors {
  margin: auto;
  width: 860px;
}
.section > .authors > .title {
  font-family: independence regular;
  font-size: 29px;
  text-transform: none;
  padding: 0 0 20px 0;
}
.section > .authors > .authorlist > .author {
  float: left;
  width: 206px;
}
.section > .authors > .authorlist > .author > .asset {
  -webkit-background-size: contain;
  -moz-background-size: contain;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: 50% 50%;
  height: 220px;
  width: 220px;
  margin: auto;
}
.section > .authors > .authorlist > .author.author_joeb > .asset {
  background-image: url("/images/joeb.png");
}
.section > .authors > .authorlist > .author.author_lucam > .asset {
  background-image: url("/images/lucam.png");
}
.section > .authors > .authorlist > .author.author_kevinc > .asset {
  background-image: url("/images/kevinc.png");
}
.section > .authors > .authorlist > .author.author_kevino > .asset {
  background-image: url("/images/kevino.png");
}
.section > .authors > .authorlist > .author > .name {
  width: 220px;
  margin: auto;
  text-align: center;
  padding: 10px 0 0 0;
}
.section > .asset {
  -webkit-background-size: cover;
  -moz-background-size: cover;
  background-size: cover;
}
.section > .asset.right {
  float: right;
}
.section > .asset.left {
  float: left;
}
.section > .asset.scope1 {
  width: 330px;
  height: 245px;
  background-image: url("/images/stereoscope1.png");
}
.section > .asset.brewster {
  width: 330px;
  height: 245px;
  background-image: url("/images/brewster.png");
}
.section > .asset.globe {
  width: 360px;
  height: 468px;
  background-image: url("/images/globe.png");
}
.section > .asset.howto {
  width: 300px;
  height: 190px;
  background-image: url("/images/howto.png");
  margin: 70px 0 0 0;
}
@media all and (min-width: 1px) and (max-width: 1000px) {
  header > .inner {
    padding: 10px;
  }
  .container {
    width: auto;
    padding: 0 10px;
  }
  .container > .inner > .title {
    font-size: 20px;
  }
  .section {
    padding: 10px;
  }
  .section > .copy {
    width: auto !important;
  }
  .section > .copy.left {
    float: none;
  }
  .section > .copy.right {
    float: none;
  }
  .section > .copy > .subheader > .copy {
    line-height: 50px;
    font-size: 40px;
  }
  .section > .asset {
    margin: 20px auto;
  }
  .section > .asset.left {
    float: none;
  }
  .section > .asset.right {
    float: none;
  }
  .section > .asset.globe {
    width: 320px;
    height: 417px;
  }
  .section > .asset.howto {
    margin: auto;
  }
  .section > .authors {
    float: none;
    width: 320px;
    margin: auto;
    padding: 20px 0;
  }
  .section > .authors > .authorlist > .author {
    width: 300px;
    float: none;
    margin: auto;
    padding: 10px 0;
  }
  .section > .authors > .authorlist > .author > .asset {
    width: 300px;
    height: 300px;
    margin: auto;
  }
  footer > .inner {
    padding: 0 20px;
  }
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL21peGlucy5zdHlsIiwiaW5jbHVkZXMva2V5ZnJhbWVzLnN0eWwiLCJwYXJ0aWFsL2J1cmdlci5zdHlsIiwiaW5jbHVkZXMvdmVuZG9yLnN0eWwiLCJwYXJ0aWFsL2Zvb3Rlci5zdHlsIiwicGFydGlhbC9oZWFkZXIuc3R5bCIsImd1aWRlLnN0eWwiLCJtYWluLnN0eWwiLCJpbmRleC5zdHlsIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlDSTtFQUNFLGFBQVkscUJBQVo7RUFPSSxLQUEwQix5REFBMUI7RUFLSixhQUFZLE9BQVo7RUFDQSxZQUFXLE9BQVg7O0FBZEY7RUFDRSxhQUFZLGlCQUFaO0VBT0ksS0FBMEIscURBQTFCO0VBS0osYUFBWSxPQUFaO0VBQ0EsWUFBVyxPQUFYOztBQWRGO0VBQ0UsYUFBWSxlQUFaO0VBT0ksS0FBMEIsbURBQTFCO0VBS0osYUFBWSxPQUFaO0VBQ0EsWUFBVyxPQUFYOztBQ3ZESztBQUNUO0lBQ0UsU0FBUSxFQUFSOztBQUNGO0lBQ0UsU0FBUSxFQUFSOzs7QUFKTztBQUNUO0lBQ0UsU0FBUSxFQUFSOztBQUNGO0lBQ0UsU0FBUSxFQUFSOzs7QUFKTztBQUNUO0lBQ0UsU0FBUSxFQUFSOztBQUNGO0lBQ0UsU0FBUSxFQUFSOzs7QUFKTztBQUNUO0lBQ0UsU0FBUSxFQUFSOztBQUNGO0lBQ0UsU0FBUSxFQUFSOzs7QUFFTztBQUNUO0lBQ0UsU0FBUSxFQUFSO0lBQ0EsV0FBbUIsV0FBbkI7O0FBQ0Y7SUFDRSxTQUFRLEVBQVI7SUFDQSxXQUFpQixTQUFqQjs7O0FBTk87QUFDVDtJQUNFLFNBQVEsRUFBUjtJQUNBLFdBQW1CLFdBQW5COztBQUNGO0lBQ0UsU0FBUSxFQUFSO0lBQ0EsV0FBaUIsU0FBakI7OztBQU5PO0FBQ1Q7SUFDRSxTQUFRLEVBQVI7SUFDQSxXQUFtQixXQUFuQjs7QUFDRjtJQUNFLFNBQVEsRUFBUjtJQUNBLFdBQWlCLFNBQWpCOzs7QUFOTztBQUNUO0lBQ0UsU0FBUSxFQUFSO0lBQ0EsV0FBbUIsV0FBbkI7O0FBQ0Y7SUFDRSxTQUFRLEVBQVI7SUFDQSxXQUFpQixTQUFqQjs7O0FBRU87QUFDVDtJQUNFLFNBQVEsRUFBUjtJQUNBLFdBQW1CLFdBQW5COztBQUNGO0lBQ0UsU0FBUSxFQUFSO0lBQ0EsV0FBaUIsU0FBakI7OztBQU5PO0FBQ1Q7SUFDRSxTQUFRLEVBQVI7SUFDQSxXQUFtQixXQUFuQjs7QUFDRjtJQUNFLFNBQVEsRUFBUjtJQUNBLFdBQWlCLFNBQWpCOzs7QUFOTztBQUNUO0lBQ0UsU0FBUSxFQUFSO0lBQ0EsV0FBbUIsV0FBbkI7O0FBQ0Y7SUFDRSxTQUFRLEVBQVI7SUFDQSxXQUFpQixTQUFqQjs7O0FBTk87QUFDVDtJQUNFLFNBQVEsRUFBUjtJQUNBLFdBQW1CLFdBQW5COztBQUNGO0lBQ0UsU0FBUSxFQUFSO0lBQ0EsV0FBaUIsU0FBakI7OztBQUdPO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQUVPO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQUlPO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUEyQixtQkFBM0I7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQUdPO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQU5PO0FBQ1Q7SUFDRSxXQUE0QixvQkFBNUI7SUFDQSxTQUFRLEVBQVI7O0FBQ0Y7SUFDRSxXQUF3QixnQkFBeEI7SUFDQSxTQUFRLEVBQVI7OztBQ3hESjtFQUNFLFVBQVMsTUFBVDtFQUNBLEtBQUksS0FBSjtFQUNBLE1BQUssS0FBTDtFQUNBLE9BQU0sS0FBTjtFQUNBLE9B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RSxPQUFNLE1BQU47SUFDQSxRQUFPLE1BQVA7O0FBRUY7SUFDRSxRQUFPLEtBQVA7O0FBQ0o7SUFDRSxPQUFNLEtBQU47SUFDQSxPQUFNLE1BQU47SUFDQSxRQUFPLEtBQVA7SUFDQSxTQUFRLE9BQVI7O0FBRUU7SUFDRSxPQUFNLE1BQU47SUFDQSxPQUFNLEtBQU47SUFDQSxRQUFPLEtBQVA7SUFDQSxTQUFRLE9BQVI7O0FBQ0E7SUFDRSxPQUFNLE1BQU47SUFDQSxRQUFPLE1BQVA7SUFDQSxRQUFPLEtBQVA7O0FBR1I7SUFDRSxTQUFRLE9BQVIiLCJmaWxlIjoibWFpbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJvbm9mZigpXG4gICYub25cbiAgICBkaXNwbGF5IGJsb2NrXG4gICYub2ZmXG4gICAgZGlzcGxheSBub25lXG5cbmZ1bGxzaXplKClcbiAgdG9wIDBcbiAgbGVmdCAwXG4gIHJpZ2h0IDBcbiAgYm90dG9tIDBcblxuY3VzdG9tc2l6ZShzaXplKVxuICB0b3Agc2l6ZVxuICBsZWZ0IHNpemVcbiAgcmlnaHQgc2l6ZVxuICBib3R0b20gc2l6ZVxuXG5kZXNrdG9wKClcbiAgbWF4LXdpZHRoIDEyMDBweFxuICBtYXJnaW4gYXV0b1xuXG5jbGVhcmZpeCgpXG4gICY6YmVmb3JlXG4gICY6YWZ0ZXJcbiAgICBjb250ZW50OiBcIlwiXG4gICAgZGlzcGxheTogdGFibGVcbiAgJjphZnRlclxuICAgIGNsZWFyOiBib3RoXG4gIHpvb206IDEgaWYgc3VwcG9ydC1mb3ItaWVcblxuZ2YoaylcbiAgZm9yIGtleSwgdmFsdWUgaW4gY29uZmlnLmZvbnRba11cbiAgICB7a2V5fSB1bnF1b3RlKHZhbHVlKVxuXG5nYyhrKVxuICByZXR1cm4gY29udmVydChjb25maWcuY29sb3Jba10pXG5cbmZvbnRmYWNlcyhkaXIsIGZvbnRsaXN0LCBleHRzKVxuXG4gIGZvciBmb250IGluIGZvbnRsaXN0XG4gICAgQGZvbnQtZmFjZVxuICAgICAgZm9udC1mYW1pbHkgZGlyIGZvbnRcbiAgICAgIGZvciBleHQgaW4gZXh0c1xuICAgICAgICBpZiBleHQgPT0gJ2VvdCdcbiAgICAgICAgICBzcmMgdXJsKGZvbnRzL2Rpci9mb250LmVvdCkgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpXG4gICAgICAgIGlmIGV4dCA9PSAnb3RmJ1xuICAgICAgICAgIHNyYyB1cmwoZm9udHMvZGlyL2ZvbnQub3RmKSBmb3JtYXQoJ29wZW50eXBlJylcbiAgICAgICAgaWYgZXh0ID09ICd0dGYnXG4gICAgICAgICAgc3JjIHVybChmb250cy9kaXIvZm9udC50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKVxuICAgICAgICBpZiBleHQgPT0gJ3N2ZydcbiAgICAgICAgICBzcmMgdXJsKGZvbnRzL2Rpci9mb250LnN2ZykgZm9ybWF0KCdzdmcnKVxuICAgICAgICBpZiBleHQgPT0gJ3dvZmYnXG4gICAgICAgICAgc3JjIHVybChmb250cy9kaXIvZm9udC53b2ZmKSBmb3JtYXQoJ3dvZmYnKVxuICAgICAgZm9udC13ZWlnaHQgbm9ybWFsXG4gICAgICBmb250LXN0eWxlIG5vcm1hbFxuIiwiQGtleWZyYW1lcyBmYWRlSW5cbiAgZnJvbVxuICAgIG9wYWNpdHkgMFxuICB0b1xuICAgIG9wYWNpdHkgMVxuXG5Aa2V5ZnJhbWVzIHNjYWxlSW5cbiAgZnJvbVxuICAgIG9wYWNpdHkgMFxuICAgIHRyYW5zZm9ybSBzY2FsZSgwLjUpXG4gIHRvXG4gICAgb3BhY2l0eSAxXG4gICAgdHJhbnNmb3JtIHNjYWxlKDEpXG5cbkBrZXlmcmFtZXMgc2NhbGVJbkJcbiAgZnJvbVxuICAgIG9wYWNpdHkgMFxuICAgIHRyYW5zZm9ybSBzY2FsZSgxLjIpXG4gIHRvXG4gICAgb3BhY2l0eSAxXG4gICAgdHJhbnNmb3JtIHNjYWxlKDEpXG5cblxuQGtleWZyYW1lcyBpbkZyb21Ub3BcbiAgZnJvbVxuICAgIHRyYW5zZm9ybSB0cmFuc2xhdGUoMCwgLTEwcHgpXG4gICAgb3BhY2l0eSAwXG4gIHRvXG4gICAgdHJhbnNmb3JtIHRyYW5zbGF0ZSgwLCAwKVxuICAgIG9wYWNpdHkgMVxuXG5Aa2V5ZnJhbWVzIGluRnJvbUJvdHRvbVxuICBmcm9tXG4gICAgdHJhbnNmb3JtIHRyYW5zbGF0ZSgwLCAxMHB4KVxuICAgIG9wYWNpdHkgMFxuICB0b1xuICAgIHRyYW5zZm9ybSB0cmFuc2xhdGUoMCwgMClcbiAgICBvcGFjaXR5IDFcblxuXG5cbkBrZXlmcmFtZXMgaW5Gcm9tUmlnaHRcbiAgZnJvbVxuICAgIHRyYW5zZm9ybSB0cmFuc2xhdGUoMTBweCwgMClcbiAgICBvcGFjaXR5IDBcbiAgdG9cbiAgICB0cmFuc2Zvcm0gdHJhbnNsYXRlKDAsIDApXG4gICAgb3BhY2l0eSAxXG5cblxuQGtleWZyYW1lcyBpbkZyb21MZWZ0XG4gIGZyb21cbiAgICB0cmFuc2Zvcm0gdHJhbnNsYXRlKC0xMHB4LCAwKVxuICAgIG9wYWNpdHkgMFxuICB0b1xuICAgIHRyYW5zZm9ybSB0cmFuc2xhdGUoMCwgMClcbiAgICBvcGFjaXR5IDFcblxuXG4iLCIuYnVyZ2VyXG4gIHBvc2l0aW9uIGZpeGVkXG4gIHRvcCAyMHB4XG4gIGxlZnQgMjBweFxuICBjbGVhciBib3RoXG4gIHdpZHRoIDQwcHhcbiAgaGVpZ2h0IDQwcHhcbiAgei1pbmRleCAxNTBcbiAgJi5vZmYgPiAubGluZXMgPiBzcGFuXG4gICAgYmFja2dyb3VuZC1jb2xvciBnYyhicm93bjEpXG4gICYub2ZmID4gLmxpbmVzID4gc3BhbjpudGgtY2hpbGQoMSlcbiAgICB0b3AgMThweFxuICAgIHdpZHRoIDAlXG4gICAgbGVmdCA1MCVcbiAgJi5vZmYgPiAubGluZXMgPiBzcGFuOm50aC1jaGlsZCgyKVxuICAgIHRyYW5zZm9ybSByb3RhdGUoNDVkZWcpXG4gICYub2ZmID4gLmxpbmVzID4gc3BhbjpudGgtY2hpbGQoMylcbiAgICB0cmFuc2Zvcm0gcm90YXRlKC00NWRlZylcbiAgJi5vZmYgPiAubGluZXMgPiBzcGFuOm50aC1jaGlsZCg0KVxuICAgIHRvcCAxOHB4XG4gICAgd2lkdGggMCVcbiAgICBsZWZ0IDUwJVxuXG4gID4gLmxpbmVzXG4gICAgcG9zaXRpb24gcmVsYXRpdmVcbiAgICB3aWR0aCAxMDAlXG4gICAgaGVpZ2h0IDEwMCVcbiAgICA+IHNwYW5cbiAgICAgIGRpc3BsYXkgYmxvY2tcbiAgICAgIHBvc2l0aW9uIGFic29sdXRlXG4gICAgICBoZWlnaHQgM3B4XG4gICAgICBib3JkZXItcmFkaXVzIDlweFxuICAgICAgd2lkdGggMTAwJVxuICAgICAgYmFja2dyb3VuZC1jb2xvciBnYyhicm93bjEpXG4gICAgICBvcGFjaXR5IDFcbiAgICAgIGxlZnQgMFxuICAgICAgdHJhbnNpdGlvbiAwLjI1cyBlYXNlLWluLW91dFxuICAgICAgJjpudGgtY2hpbGQoMSlcbiAgICAgICAgdG9wIDBweFxuICAgICAgJjpudGgtY2hpbGQoMiksXG4gICAgICAmOm50aC1jaGlsZCgzKVxuICAgICAgICB0b3AgMTRweFxuICAgICAgJjpudGgtY2hpbGQoNClcbiAgICAgICAgdG9wIDI4cHhcblxuIiwidXNlKCd2ZW5kb3ItaGVscGVycy5qcycpXG5cbi8qXG4gKiBBbGlhcyBcIm5vd3JhcFwiIGFzIFwibm8td3JhcFwiLlxuICovXG5cbm5vLXdyYXAgPSB1bnF1b3RlKCdub3dyYXAnKVxuXG4vKlxuICogSGVscGVyIHRvIGZpbmQgb3V0IGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSB3aWR0aFxuICovXG5cbmlzLXdpZHRoKHZhbClcbiAgaWYgYXV0byA9PSB2YWxcbiAgICByZXR1cm4gdHJ1ZVxuICBlbHNlIGlmIHZhbCAmJiAndW5pdCcgPT0gdHlwZSh2YWwpXG4gICAgLy8gU3R5bHVzIGRvZXMgbm90IHNob3J0IGNpcmN1aXQgc28gd2UgbmVlZCB0byBwZXJmb3JtIHRoaXMgYXMgYSBkaXN0aW5jdFxuICAgIC8vIG9wZXJhdGlvbiB0byBwcmV2ZW50IGVycm9yc1xuICAgIHJldHVybiAnJyAhPSB1bml0KHZhbClcbiAgcmV0dXJuIGZhbHNlXG5cbi8qXG4gKiBWZW5kb3Igc3VwcG9ydCBmb3IgdGhlIGdpdmVuIHByb3AgLyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgc3BlY2lmeWluZyB0aGVcbiAqIG9ubHkgcHJlZml4ZXMgdG8gdXRpbGl6ZSwgb3IgdGhvc2Ugd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblxudmVuZG9yKHByb3AsIGFyZ3MsIG9ubHkgPSBudWxsLCBpZ25vcmUgPSBudWxsLCB2ZW5kb3ItcHJvcGVydHkgPSB0cnVlKVxuICBuZWVkX25vcm1hbGl6ZSA9ICF2ZW5kb3ItcHJvcGVydHkgb3IgcHJvcCBpbiAoJ3RyYW5zaXRpb24nICd0cmFuc2l0aW9uLXByb3BlcnR5JyAnYm9yZGVyLWltYWdlJyAnYm9yZGVyLWltYWdlLXNsaWNlJylcbiAgZm9yIHByZWZpeCBpbiB2ZW5kb3ItcHJlZml4ZXNcbiAgICB1bmxlc3MgKG9ubHkgYW5kICEocHJlZml4IGluIG9ubHkpKSBvciAoaWdub3JlIGFuZCBwcmVmaXggaW4gaWdub3JlKVxuICAgICAgaWYgb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpKVxuICAgICAgICBlbHNlXG4gICAgICAgICAge3Byb3B9OiBhcmdzXG4gICAgICBlbHNlXG4gICAgICAgIG5ld3Byb3AgPSBwcm9wXG4gICAgICAgIG5ld3Byb3AgPSAnLScgKyBwcmVmaXggKyAnLScgKyBwcm9wIGlmIHZlbmRvci1wcm9wZXJ0eVxuXG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge25ld3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpLHByZWZpeClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHtuZXdwcm9wfTogYXJnc1xuLypcbiAqIFZlbmRvcml6ZSB0aGUgZ2l2ZW4gdmFsdWUuXG4gKi9cblxudmVuZG9yLXZhbHVlKGFyZywgb25seSA9IG51bGwsIGlnbm9yZSA9IG51bGwpXG4gIHByb3AgPSBjdXJyZW50LXByb3BlcnR5WzBdXG4gIGZvciBwcmVmaXggaW4gdmVuZG9yLXByZWZpeGVzXG4gICAgdW5sZXNzIChvbmx5IGFuZCAhKHByZWZpeCBpbiBvbmx5KSkgb3IgKGlnbm9yZSBhbmQgcHJlZml4IGluIGlnbm9yZSkgb3Igb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICBhZGQtcHJvcGVydHkocHJvcCwgJy0lcy0lcycgJSAocHJlZml4IGFyZykpXG4gIGFyZ1xuXG4vKlxuICogVmVuZG9yIFwiYm94LXNoYWRvd1wiIHN1cHBvcnQuXG4gKi9cblxuYm94LXNoYWRvdygpXG4gIHZlbmRvcignYm94LXNoYWRvdycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidXNlci1zZWxlY3RcIiBzdXBwb3J0LlxuICovXG5cbnVzZXItc2VsZWN0KClcbiAgdmVuZG9yKCd1c2VyLXNlbGVjdCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW5zKClcbiAgdmVuZG9yKCdjb2x1bW5zJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG5cblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWNvdW50KClcbiAgdmVuZG9yKCdjb2x1bW4tY291bnQnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZ2FwXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tZ2FwKClcbiAgdmVuZG9yKCdjb2x1bW4tZ2FwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlLWNvbG9yXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZS1jb2xvcigpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUtY29sb3InLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZS13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUtd2lkdGgoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlLXdpZHRoJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGUtc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlLXN0eWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZS1zdHlsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXdpZHRoKClcbiAgdmVuZG9yKCdjb2x1bW4td2lkdGgnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tc3BhblwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXNwYW4oKVxuICB2ZW5kb3IoJ2NvbHVtbi1zcGFuJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZmlsbFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWZpbGwoKVxuICB2ZW5kb3IoJ2NvbHVtbi1maWxsJywgYXJndW1lbnRzLCBvbmx5OiBtb3opXG5cbi8qXG4gKiBMZWdhY3kgc3ludGF4IHN1cHBvcnQgZm9yIGJhY2tncm91bmQtY2xpcCBhbmQgYmFja2dyb3VuZC1vcmlnaW5cbiAqL1xuXG5sZWdhY3ktYmctdmFsdWVzKHByb3BlcnR5LCBhcmdzKVxuICBsZWdhY3lfYXJncyA9ICgpXG4gIGltcG9ydGFuY2UgPSB1bnF1b3RlKCcnKVxuICBmb3Igc3ViYXJncyBpbiBhcmdzXG4gICAgZm9yIGFyZyBpbiBzdWJhcmdzXG4gICAgICBpZiBhcmcgaW4gKGJvcmRlci1ib3ggcGFkZGluZy1ib3ggY29udGVudC1ib3gpXG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2JvcmRlcicpICBpZiBhcmcgPT0gYm9yZGVyLWJveFxuICAgICAgICBhcmcgPSB1bnF1b3RlKCdwYWRkaW5nJykgaWYgYXJnID09IHBhZGRpbmctYm94XG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2NvbnRlbnQnKSBpZiBhcmcgPT0gY29udGVudC1ib3hcbiAgICAgIGlmIGFyZyAhPSAnIWltcG9ydGFudCdcbiAgICAgICAgcHVzaChsZWdhY3lfYXJncyxhcmcpXG4gICAgICBlbHNlXG4gICAgICAgIGltcG9ydGFuY2UgPSAhaW1wb3J0YW50XG4gIHZlbmRvcihwcm9wZXJ0eSwgdW5xdW90ZShqb2luKCcsICcsbGVnYWN5X2FyZ3MpKSBpbXBvcnRhbmNlLCBvbmx5OiBtb3ogd2Via2l0KVxuXG4vKlxuICogVmVuZG9yIFwiYmFja2dyb3VuZC1jbGlwXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLWNsaXAoKVxuICBpZiBhcmd1bWVudHNbMF0gPT0gdGV4dFxuICAgIHZlbmRvcignYmFja2dyb3VuZC1jbGlwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQpXG4gIGVsc2VcbiAgICBsZWdhY3ktYmctdmFsdWVzKCdiYWNrZ3JvdW5kLWNsaXAnLCBhcmd1bWVudHMpXG4gICAgYmFja2dyb3VuZC1jbGlwOiBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcImJhY2tncm91bmQtb3JpZ2luXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLW9yaWdpbigpXG4gIGxlZ2FjeS1iZy12YWx1ZXMoJ2JhY2tncm91bmQtb3JpZ2luJywgYXJndW1lbnRzKVxuICBiYWNrZ3JvdW5kLW9yaWdpbjogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZ3JvdW5kLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbmJhY2tncm91bmQtc2l6ZSgpXG4gIHZlbmRvcignYmFja2dyb3VuZC1zaXplJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNmb3JtXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2Zvcm0oKVxuICB2ZW5kb3IoJ3RyYW5zZm9ybScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zZm9ybS1vcmlnaW5cIiBzdXBwb3J0LlxuICovXG50cmFuc2Zvcm0tb3JpZ2luKClcbiAgICB2ZW5kb3IoJ3RyYW5zZm9ybS1vcmlnaW4nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2Zvcm0tc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zZm9ybS1zdHlsZSgpXG4gIHZlbmRvcigndHJhbnNmb3JtLXN0eWxlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYm9yZGVyLWltYWdlXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3JkZXItaW1hZ2UoKVxuICB2ZW5kb3IoJ2JvcmRlci1pbWFnZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvblwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbigpXG4gIHZlbmRvcigndHJhbnNpdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tcHJvcGVydHlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tcHJvcGVydHkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tcHJvcGVydHknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2l0aW9uLWR1cmF0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tZGVsYXlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tZGVsYXkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZmFjZS12aXNpYmlsaXR5KClcbiAgdmVuZG9yKCdiYWNrZmFjZS12aXNpYmlsaXR5JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwicGVyc3BlY3RpdmVcIiBzdXBwb3J0LlxuICovXG5cbnBlcnNwZWN0aXZlKClcbiAgaWYgbWl4aW5cbiAgICB2ZW5kb3IoJ3BlcnNwZWN0aXZlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuICBlbHNlXG4gICAgJ3BlcnNwZWN0aXZlKCVzKScgJSBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcInBlcnNwZWN0aXZlLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cblxucGVyc3BlY3RpdmUtb3JpZ2luKClcbiAgdmVuZG9yKCdwZXJzcGVjdGl2ZS1vcmlnaW4nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBPcGFjaXR5IHdpdGggY29uZGl0aW9uYWwgSUUgc3VwcG9ydC5cbiAqL1xuXG5vcGFjaXR5KG4sIGFyZ3MuLi4pXG4gIG9wYWNpdHk6IG4gYXJnc1xuICBpZiBzdXBwb3J0LWZvci1pZVxuICAgIGlmIG4gPT0gaW5oZXJpdCBvciBuID09IGluaXRpYWxcbiAgICAgIC1tcy1maWx0ZXI6IG4gYXJnc1xuICAgICAgZmlsdGVyOiBuIGFyZ3NcbiAgICBlbHNlXG4gICAgICB2YWwgPSByb3VuZChuICogMTAwKVxuICAgICAgaWYgdmFsID09IDEwMFxuICAgICAgICAtbXMtZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgICAgZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgIGVsc2VcbiAgICAgICAgLW1zLWZpbHRlcjogJ1wicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JXMpXCInICUgdmFsIGFyZ3NcbiAgICAgICAgZmlsdGVyOiAnYWxwaGEob3BhY2l0eT0lcyknICUgdmFsIGFyZ3NcblxuLypcbiAqIFZlbmRvciBcInRleHQtc2l6ZS1hZGp1c3RcIlxuICovXG5cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBBbGlhcyB0aGUgXCJ3aGl0ZS1zcGFjZVwiIHByb3BlcnR5LlxuICovXG5cbndoaXRlc3BhY2UoKVxuICB3aGl0ZS1zcGFjZTogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtc2l6aW5nXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtc2l6aW5nKClcbiAgdmVuZG9yKCdib3gtc2l6aW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LW9yaWVudFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yaWVudCgpXG4gIHZlbmRvcignYm94LW9yaWVudCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1mbGV4LWdyb3VwXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtZmxleC1ncm91cCgpXG4gIHZlbmRvcignYm94LWZsZXgtZ3JvdXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtb3JkaW5hbC1ncm91cFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yZGluYWwtZ3JvdXAoKVxuICB2ZW5kb3IoJ2JveC1vcmRpbmFsLWdyb3VwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtYWxpZ25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1hbGlnbigpXG4gIHZlbmRvcignYm94LWFsaWduJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LXBhY2tcIiBzdXBwb3J0LlxuICovXG5cbmJveC1wYWNrKClcbiAgdmVuZG9yKCdib3gtcGFjaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1kaXJlY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1kaXJlY3Rpb24oKVxuICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uJywgYXJndW1lbnRzKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tbmFtZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLW5hbWUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1uYW1lJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZHVyYXRpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kdXJhdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1kZWxheVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWRlbGF5KClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZGlyZWN0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZGlyZWN0aW9uKClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGlyZWN0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLXBsYXktc3RhdGUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWZpbGwtbW9kZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWZpbGwtbW9kZScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImh5cGhlbnNcIiBzdXBwb3J0LlxuICovXG5cbmh5cGhlbnMoKVxuICB2ZW5kb3IoJ2h5cGhlbnMnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhcHBlYXJhbmNlXCIgc3VwcG9ydC5cbiAqL1xuXG5hcHBlYXJhbmNlKClcbiAgdmVuZG9yKCdhcHBlYXJhbmNlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidGFiLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbnRhYi1zaXplKClcbiAgdmVuZG9yKCd0YWItc2l6ZScsIGFyZ3VtZW50cywgb25seTogbW96IG8gb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJvdmVyZmxvdy1zY3JvbGxpbmdcIiBzdXBwb3J0LlxuICovXG5cbm92ZXJmbG93LXNjcm9sbGluZygpXG4gIHZlbmRvcignb3ZlcmZsb3ctc2Nyb2xsaW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0ZXh0LW92ZXJmbG93XCIgc3VwcG9ydCwgLCAtby0gZm9yIG9wZXJhIDkuKiAtIDEwLipcbiAqL1xuXG50ZXh0LW92ZXJmbG93KClcbiAgdmVuZG9yKCd0ZXh0LW92ZXJmbG93JywgYXJndW1lbnRzLCBvbmx5OiBvZmZpY2lhbCBvKVxuXG4vKlxuICogVmVuZG9yIFwidGV4dC1zaXplLWFkanVzdFwiIHN1cHBvcnQuXG4gKi9cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMsIG9ubHk6IG9mZmljaWFsIHdlYmtpdCBtcylcblxuLypcbiAqIFZlbmRvciBcImZvbnQtc21vb3RoaW5nXCIgc3VwcG9ydCwgd2Via2l0IG9ubHkuXG4gKi9cbmZvbnQtc21vb3RoaW5nKClcbiAgdmVuZG9yKCdmb250LXNtb290aGluZycsIGFyZ3VtZW50cywgb25seTogd2Via2l0KVxuXG4vKlxuICogSGVscGVyIGZvciBib3JkZXItcmFkaXVzKCkuXG4gKi9cblxuLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuICBpZiBsZW5ndGgocG9zKSA9PSAzXG4gICAgLy8gYm9yZGVyLXJhZGl1czogPHRvcCB8IGJ1dHRvbT4gPGxlZnQgfCByaWdodD4gPG4+XG4gICAgeSA9IHBvc1swXVxuICAgIHggPSBwb3NbMV1cbiAgICAvLyBXZSBkb24ndCB1c2UgbW96IGZvciBzaW1wbGUgYm9kZXItcmFkaXVzIGFueW1vcmVcbiAgICAvLyB2ZW5kb3IoJ2JvcmRlci1yYWRpdXMtJXMlcycgJSBwb3MsIHBvc1syXSwgb25seTogbW96KVxuICAgIHZlbmRvcignYm9yZGVyLSVzLSVzLXJhZGl1cycgJSBwb3MsIHBvc1syXSBpbXBvcnRhbmNlLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG4gIGVsc2UgaWYgcG9zWzBdIGluICh0b3AgYm90dG9tKVxuICAgIC8vIGJvcmRlci1yYWRpdXM6IDx0b3AgfCBib3R0b20+IDxuPlxuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvc1swXSBsZWZ0IHBvc1sxXSwgaW1wb3J0YW5jZSlcbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3NbMF0gcmlnaHQgcG9zWzFdLCBpbXBvcnRhbmNlKVxuICBlbHNlIGlmIHBvc1swXSBpbiAobGVmdCByaWdodClcbiAgICAvLyBib3JkZXItcmFkaXVzOiA8bGVmdCB8IHJpZ2h0PiA8bj5cbiAgICB1bnNoaWZ0KHBvcywgdG9wKTtcbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG4gICAgcG9zWzBdID0gYm90dG9tXG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuXG4vKlxuICogYm9yZGVyLXJhZGl1cyBzdXBwb3J0aW5nIHZlbmRvciBwcmVmaXhlcyBhbmRcbiAqIGF1Z21lbnRlZCBiZWhhdmlvci5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICBib3JkZXItcmFkaXVzOiAycHggNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgNXB4IGJvdHRvbSAxMHB4XG4gKiAgICBib3JkZXItcmFkaXVzOiBsZWZ0IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIGxlZnQgNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgbGVmdCAxMHB4IGJvdHRvbSByaWdodCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCBsZWZ0IDEwcHgsIGJvdHRvbSByaWdodCA1cHhcbiAqXG4gKi9cblxuYm9yZGVyLXJhZGl1cygpXG4gIHBvcyA9ICgpXG4gIGF1Z21lbnRlZCA9IGZhbHNlXG4gIGltcG9ydGFuY2UgPSBhcmd1bWVudHNbbGVuZ3RoKGFyZ3VtZW50cykgLSAxXSA9PSAhaW1wb3J0YW50ID8gIWltcG9ydGFudCA6IHVucXVvdGUoJycpXG5cbiAgZm9yIGFyZ3MgaW4gYXJndW1lbnRzXG4gICAgZm9yIGFyZyBpbiBhcmdzXG4gICAgICBpZiBhcmcgaXMgYSAnaWRlbnQnXG4gICAgICAgIGFwcGVuZChwb3MsIGFyZylcbiAgICAgICAgYXVnbWVudGVkID0gdHJ1ZVxuICAgICAgZWxzZVxuICAgICAgICBhcHBlbmQocG9zLCBhcmcpXG4gICAgICAgIGlmIGF1Z21lbnRlZFxuICAgICAgICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcbiAgICAgICAgICBwb3MgPSAoKVxuICB2ZW5kb3IoJ2JvcmRlci1yYWRpdXMnLCBwb3MsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbCkgdW5sZXNzIGF1Z21lbnRlZFxuXG4vKipcbiAqIFZlbmRvciBpbnB1dC1wbGFjZWhvbGRlci9wbGFjZWhvbGRlciBzdXBwb3J0LlxuICpcbiAqIEV4YW1wbGVzOlxuICogICAgLy8gRGVmYXVsdCBzeW50YXhcbiAqICAgIGJvZHlcbiAqICAgICAgcGxhY2Vob2xkZXIoY29sb3IgIzMzMywgZm9udC13ZWlnaHQgbm9ybWFsKVxuICpcbiAqICAgIC8vIFRoZSBjb21tYSBpcyBpbXBvcnRhbnRcbiAqICAgIC5wbGFjZWhvbGRlci1yZWRcbiAqICAgICAgcGxhY2Vob2xkZXIoY29sb3IgcmVkLClcbiAqXG4gKiAgICAvLyBXZSBjYW4gcGFzcyBhIGZ1bmN0aW9uXG4gKiAgICBncmVlbi1wbGFjZWhvbGRlcigpXG4gKiAgICAgIGNvbG9yIGdyZWVuXG4gKiAgICAucGxhY2Vob2xkZXItZ3JlZW5cbiAqICAgICAgcGxhY2Vob2xkZXIoZ3JlZW4tcGxhY2Vob2xkZXIpXG4gKlxuICogICAgLy8gV2UgY2FuIHBhc3MgYSBoYXNoXG4gKiAgICB0ZXh0YXJlYVxuICogICAgICBwbGFjZWhvbGRlcigoZm9udC1zdHlsZSBpdGFsaWMpIChmb250LXdlaWdodCBib2xkKSAocGFkZGluZyAnNHB4IDEwcHgnKSlcbiAqL1xucGxhY2Vob2xkZXIoKVxuICBmb3IgdiBpbiAnOi13ZWJraXQtaW5wdXQnICctbW96JyAnOi1tb3onICctbXMtaW5wdXQnXG4gICAgJjp7dn0tcGxhY2Vob2xkZXJcbiAgICAgIGZvciBwYWlyIGluIGFyZ3VtZW50c1xuICAgICAgICBpZiB0eXBlb2YocGFpcikgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgIHBhaXIoKVxuICAgICAgICBlbHNlIGlmIHBhaXIgaXMgbm90IG51bGwgJiYgcGFpclswXSBpcyBub3QgbnVsbFxuICAgICAgICAgIHtwYWlyWzBdfTogdHlwZShwYWlyWzFdKSA9PSAnc3RyaW5nJyA/IHMocGFpclsxXSkgOiBwYWlyWzFdXG5pbnB1dC1wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyXG5cbi8qXG4gKiBWZW5kb3IgYmFja2dyb3VuZCBzdXBwb3J0IChncmFkaWVudHMpLlxuICovXG5cbmJhY2tncm91bmQoKVxuICBpZiBtYXRjaCgnLWdyYWRpZW50XFwoJywgJycrYXJndW1lbnRzKVxuICAgIHZlbmRvcignYmFja2dyb3VuZCcsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGJhY2tncm91bmQgYXJndW1lbnRzXG5cbmJhY2tncm91bmQtaW1hZ2UoKVxuICBpZiBtYXRjaCgnLWdyYWRpZW50XFwoJywgJycrYXJndW1lbnRzKVxuICAgIHZlbmRvcignYmFja2dyb3VuZC1pbWFnZScsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGJhY2tncm91bmQtaW1hZ2UgYXJndW1lbnRzXG5cbmN1cnNvcigpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdjdXJzb3InLCBhcmd1bWVudHMsIHZlbmRvci1wcm9wZXJ0eTogZmFsc2UpXG4gIGVsc2VcbiAgICBjdXJzb3IgYXJndW1lbnRzXG5cbmxpc3Qtc3R5bGUoKVxuICBpZiBtYXRjaCgnLWdyYWRpZW50XFwoJywgJycrYXJndW1lbnRzKVxuICAgIHZlbmRvcignbGlzdC1zdHlsZScsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGxpc3Qtc3R5bGUgYXJndW1lbnRzXG5cbmxpc3Qtc3R5bGUtaW1hZ2UoKVxuICBpZiBtYXRjaCgnLWdyYWRpZW50XFwoJywgJycrYXJndW1lbnRzKVxuICAgIHZlbmRvcignbGlzdC1zdHlsZS1pbWFnZScsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGxpc3Qtc3R5bGUtaW1hZ2UgYXJndW1lbnRzXG4iLCJmb290ZXJcbiAgYm9yZGVyLXRvcCAycHggc29saWQgZ2MoYmxhY2sxKVxuICBib3JkZXItYm90dG9tIDJweCBzb2xpZCBnYyhibGFjazEpXG4gIHBhZGRpbmcgNnB4IDBcbiAgbWFyZ2luIDUwcHggMCBcbiAgPiAuaW5uZXJcbiAgICBib3JkZXItdG9wIDFweCBzb2xpZCBnYyhibGFjazEpXG4gICAgYm9yZGVyLWJvdHRvbSAxcHggc29saWQgZ2MoYmxhY2sxKVxuICAgIHRleHQtYWxpZ24gY2VudGVyXG4gICAgcGFkZGluZyAxMHB4IDAgMTVweCAwXG4iLCJoZWFkZXJcbiAgPiAuaW5uZXJcbiAgICBwYWRkaW5nIDIwcHggNjBweFxuICAgID4gLmxvZ29cbiAgICAgIHdpZHRoIDUyMHB4XG4gICAgICBoZWlnaHQgMjAwcHhcbiAgICAgIG1hcmdpbiBhdXRvXG4gICAgICA+IHN2Z1xuICAgICAgICB3aWR0aCBpbmhlcml0XG4gICAgICAgIGhlaWdodCBpbmhlcml0XG5cbiAgICA+IC5tZW51XG4gICAgICAmLnVuc3R1Y2tcbiAgICAgICAgcG9zaXRpb24gYWJzb2x1dGVcbiAgICAgICYuc3R1Y2tcbiAgICAgICAgcG9zaXRpb24gZml4ZWRcbiAgICAgICAgdG9wIDBweFxuICAgICAgYm9yZGVyLXRvcCAycHggc29saWQgZ2MoYmxhY2sxKVxuICAgICAgYm9yZGVyLWJvdHRvbSAycHggc29saWQgZ2MoYmxhY2sxKVxuICAgICAgcGFkZGluZyA2cHggMFxuICAgICAgYmFja2dyb3VuZC1pbWFnZSB1cmwoL2ltYWdlcy9wYXR0ZXJuL3BhcGVyLnBuZylcbiAgICAgIHRvcCAzMDBweFxuICAgICAgbGVmdCAwcHhcbiAgICAgIHJpZ2h0IDBweFxuICAgICAgd2lkdGggMTAwJVxuICAgICAgPiAub3V0ZXJcbiAgICAgICAgYm9yZGVyLXRvcCAxcHggc29saWQgZ2MoYmxhY2sxKVxuICAgICAgICBib3JkZXItYm90dG9tIDFweCBzb2xpZCBnYyhibGFjazEpXG4gICAgICAgID4gLmlubmVyXG4gICAgICAgICAgd2lkdGggOTgwcHhcbiAgICAgICAgICBtYXJnaW4gYXV0b1xuICAgICAgICAgID4gLmxlZnQsID4gLnJpZ2h0LCA+IC5pdGVtXG4gICAgICAgICAgICB0ZXh0LWFsaWduIGNlbnRlclxuICAgICAgICAgICAgcGFkZGluZyAxMHB4XG4gICAgICAgICAgPiAubGVmdCwgPiAucmlnaHRcbiAgICAgICAgICAgIHdpZHRoIDEzMHB4XG4gICAgICAgICAgPiAubGVmdFxuICAgICAgICAgICAgZmxvYXQgbGVmdFxuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0IDFweCBzb2xpZCBnYyhibGFjazEpXG4gICAgICAgICAgICBoZWlnaHQgMzVweFxuICAgICAgICAgICAgPiAubG9jXG4gICAgICAgICAgICAgIG1hcmdpbiAzcHggMCAwIDBcbiAgICAgICAgICAgICAgb25vZmYoKVxuICAgICAgICAgICAgPiAubGdcbiAgICAgICAgICAgICAgb25vZmYoKVxuICAgICAgICAgICAgICBmbG9hdCByaWdodFxuICAgICAgICAgICAgICBhbmltYXRpb24gc2NhbGVJbkIgMC41cyBlYXNlLWluLW91dCBib3RoXG4gICAgICAgICAgICAgID4gc3ZnXG4gICAgICAgICAgICAgICAgd2lkdGggMzVweFxuICAgICAgICAgICAgICAgIGhlaWdodCAzNXB4XG4gICAgICAgICAgPiAucmlnaHRcbiAgICAgICAgICAgIGZsb2F0IHJpZ2h0XG4gICAgICAgICAgICBib3JkZXItbGVmdCAxcHggc29saWQgZ2MoYmxhY2sxKVxuICAgICAgICAgICAgPiAuc29jaWFsc1xuICAgICAgICAgICAgICA+IC5zb2NpYWxcbiAgICAgICAgICAgICAgICBmbG9hdCBsZWZ0XG4gICAgICAgICAgICAgICAgd2lkdGggMjVweCBcbiAgICAgICAgICAgICAgICBoZWlnaHQgMjVweCBcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIGdjKGJsYWNrMilcbiAgICAgICAgICAgICAgICBwYWRkaW5nIDVweFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24gYmFja2dyb3VuZC1jb2xvciAwLjFzIGxpbmVhciAwLjFzXG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1cyA1MCVcbiAgICAgICAgICAgICAgICAmOm50aC1jaGlsZCgyKVxuICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQgMTBweFxuICAgICAgICAgICAgICAgICY6bnRoLWNoaWxkKDMpXG4gICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdCAxMHB4XG4gICAgICAgICAgICAgICAgJjpob3ZlclxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvciBnYyhicm93bjMpXG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uIGJhY2tncm91bmQtY29sb3IgMC4xcyBsaW5lYXIgMHNcblxuICAgICAgICAgICAgICAgID4gc3ZnXG4gICAgICAgICAgICAgICAgICB3aWR0aCAxNXB4XG4gICAgICAgICAgICAgICAgICBoZWlnaHQgMTVweFxuICAgICAgICAgICAgICAgICAgbWFyZ2luIDAgMXB4IDRweCAwXG4gICAgICAgICAgICAgICAgICA+IHBhdGgsID4gY2lyY2xlXG4gICAgICAgICAgICAgICAgICAgIGZpbGwgZ2MoYmVpZ2UyKVxuICAgICAgICAgID4gLml0ZW1cbiAgICAgICAgICAgIGZsb2F0IGxlZnRcbiAgICAgICAgICAgIHBhZGRpbmcgMTJweCAyNHB4XG4gICAgICAgICAgICBjb2xvciBnYyhibGFjazEpXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb24gbm9uZVxuICAgICAgICAgICAgdHJhbnNpdGlvbiBjb2xvciAwLjFzIGxpbmVhciwgdGV4dC1kZWNvcmF0aW9uIDAuMXMgbGluZWFyIDAuMXNcbiAgICAgICAgICAgICY6aG92ZXJcbiAgICAgICAgICAgICAgY29sb3IgZ2MoYnJvd24zKVxuICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb24gdW5kZXJsaW5lXG4gICAgICAgICAgPiAuZGl2aWRlclxuICAgICAgICAgICAgZmxvYXQgbGVmdFxuICAgICAgICAgICAgd2lkdGggMnB4XG4gICAgICAgICAgICBoZWlnaHQgMjBweFxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvciBnYyhibGFjazEpXG4gICAgICAgICAgICBtYXJnaW4gMjBweCAwIDAgMFxuXG5cblxuI09ybmFtZW50c1xuICBhbmltYXRpb24gZmFkZUluIDVzIGVhc2UtaW4tb3V0IDBzIGJvdGhcblxuLypcbiNMZXR0ZXJzXG4gID4gZyA+IHBhdGhcbiAgICBhbmltYXRpb24gZmFkZUluIDAuMXMgZWFzZS1pbi1vdXQgMHMgYm90aFxuICAgIGZvciBudW0gaW4gMS4uMTJcbiAgICAgICY6bnRoLWNoaWxkKHtudW19KVxuICAgICAgICBhbmltYXRpb24tZGVsYXkgdW5pdChudW0qMC4xLCAncycpXG5cblxuI1NoYWRvdzAxLCAjU2hhZG93MDJcbiAgYW5pbWF0aW9uIGZhZGVJbiAwLjJzIGVhc2UtaW4tb3V0IDAuNXMgYm90aFxuKi9cblxuXG5AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDAwcHgpXG4gIGhlYWRlclxuICAgID4gLmlubmVyXG4gICAgICBwYWRkaW5nIDEwcHhcbiAgICAgID4gLmxvZ29cbiAgICAgICAgd2lkdGggMTAwJVxuICAgICAgPiAubWVudVxuICAgICAgICA+IC5vdXRlclxuICAgICAgICAgID4gLmlubmVyXG4gICAgICAgICAgICB3aWR0aCBhdXRvXG4gICAgICAgICAgICA+IC5pdGVtXG4gICAgICAgICAgICAgIGRpc3BsYXkgbm9uZVxuICAgICAgICAgICAgPiAuZGl2aWRlclxuICAgICAgICAgICAgICBkaXNwbGF5IG5vbmVcbiAgICAgICAgICAgID4gLmxlZnRcbiAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0IG5vbmVcbiAgICAgICAgICAgICAgPiAubGdcbiAgICAgICAgICAgICAgICBmbG9hdCBsZWZ0XG4gICAgICAgICAgICA+IC5yaWdodFxuICAgICAgICAgICAgICBmbG9hdCByaWdodFxuICAgICAgICAgICAgICA+IC5zb2NpYWxzXG4gICAgICAgICAgICAgICAgZmxvYXQgbGVmdFxuXG5cbiIsIi5ndWlkZVxuICBwYWRkaW5nIDIwcHggMCAwIDAgXG5cbiAgPiAuc2VjdGlvbnNcbiAgICBwYWRkaW5nIDIwcHhcbiAgICA+IC5nc2VjdGlvblxuICAgICAgbWluLXdpZHRoIDIwMHB4XG4gICAgICBmbG9hdCBsZWZ0XG4gICAgICA+IC50aXRsZVxuICAgICAgICBnZihjb3B5MSlcbiAgICAgICAgcGFkZGluZyAwIDAgMCAxMHB4XG5cbiAgICAgID4gLmNvbG9yXG4gICAgICAgIHBhZGRpbmcgMTBweCAyMHB4XG4gICAgICAgIG1hcmdpbiA1cHhcbiAgICAgICAgZm9yIG5hbWUsIGNvbG9yIGluIGNvbmZpZy5jb2xvclxuICAgICAgICAgICYuY29sb3Jfe25hbWV9XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb252ZXJ0KGNvbG9yKVxuICAgICAgICAgICAgaWYgZGFyayhjb252ZXJ0KGNvbG9yKSlcbiAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGVcbiAgICAgICAgICAgICAgY29sb3I6IHdoaXRlXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrXG4gICAgICAgICAgICAgIGNvbG9yOiBibGFja1xuICAgICAgPiAuZGV0YWlsXG4gICAgICAgIHBhZGRpbmcgMCAwIDAgMjBweFxuICAgICAgICB0ZXh0LWFsaWduIHJpZ2h0XG4gICAgICA+IC5mb250XG4gICAgICAgIHBhZGRpbmcgMCAyMHB4XG4gICAgICAgIG92ZXJmbG93LXggc2Nyb2xsXG4gICAgICAgIGZvciBuYW1lLCBmb250IGluIGNvbmZpZy5mb250XG4gICAgICAgICAgJi5mb250X3tuYW1lfVxuICAgICAgICAgICAgZ2YobmFtZSlcblxuIiwiXG52ZW5kb3ItcHJlZml4ZXMgPz0gd2Via2l0IG1veiBvIG1zIG9mZmljaWFsXG5cbkBpbXBvcnQgJy9pbmNsdWRlcy9taXhpbnMnXG5AaW1wb3J0ICcvaW5jbHVkZXMvKidcbkBpbXBvcnQgJy9wYXJ0aWFsLyonXG5AaW1wb3J0IGd1aWRlXG5cbi5jbGVhclxuICBjbGVhcmZpeCgpXG5cbmJvZHlcbiAgcGFkZGluZyAwXG4gIG1hcmdpbiAwXG4gIGJhY2tncm91bmQtY29sb3IgZ2MoYmVpZ2UyKVxuICBiYWNrZ3JvdW5kLWltYWdlIHVybCgvaW1hZ2VzL3BhdHRlcm4vcGFwZXIucG5nKVxuICBnZihjb3B5MSlcbiAgdGV4dC1hbGlnbiBqdXN0aWZ5XG5cbmFcbiAgY29sb3IgZ2MoYnJvd24zKVxuXG5AaW1wb3J0ICdpbmRleC5zdHlsJ1xuIiwiLmNvbnRhaW5lclxuICB3aWR0aCA5ODBweFxuICBtYXJnaW4gYXV0b1xuXG4udGl0bGVcbiAgZ2YoaDEpXG4gIHRleHQtYWxpZ24gY2VudGVyXG4gIHRleHQtdHJhbnNmb3JtIHVwcGVyY2FzZVxuICBwYWRkaW5nIDAgMCAzMHB4IDBcblxuLmZha2VtZW51XG4gIGhlaWdodCA2OHB4XG5cbi5zZWN0aW9uXG4gIHBhZGRpbmcgMzBweCAwXG4gICYuc2VjdGlvbl9hdXRob3JzXG4gICAgcGFkZGluZyAgMFxuICA+IC5jb3B5XG5cbiAgICAmLmxlZnRcbiAgICAgIGZsb2F0IGxlZnRcbiAgICAmLnJpZ2h0XG4gICAgICBmbG9hdCByaWdodFxuICAgICYuZnVsbFxuICAgICAgcGFkZGluZyAzMHB4IDAgMCAwXG5cbiAgICA+IC5maXJzdFxuICAgICAgZ2YoY29weTIpXG4gICAgICBmbG9hdCBsZWZ0XG4gICAgICBsaW5lLWhlaWdodCA2MHB4XG4gICAgICBtYXJnaW4gMjBweCAxMHB4IDEwcHggMFxuICAgID4gLnN1YmhlYWRlclxuICAgICAgPiAuY29weVxuICAgICAgICBnZihoMilcbiAgICAgICAgdGV4dC1hbGlnbiBjZW50ZXJcbiAgICAgICAgbGluZS1oZWlnaHQgMjBweFxuICAgICAgICBsZXR0ZXItc3BhY2luZyA1cHhcbiAgICAgICAgcGFkZGluZyAyNXB4IDAgMCAwXG5cbiAgICAmLnNjb3BlMVxuICAgICAgd2lkdGggNTcwcHhcbiAgICAgIHBhZGRpbmcgMjBweCAwIDAgMFxuXG4gICAgJi5oaXN0b3J5MVxuICAgICAgd2lkdGggNTYwcHhcbiAgICAmLmNvbGxlY3Rpb25cbiAgICAgIHdpZHRoIDUyMHB4XG4gICAgJi5ob3d0b1xuICAgICAgd2lkdGggNjUwcHhcbiAgICAgID4gdWxcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlIGRlY2ltYWxcbiAgICAgICAgbWFyZ2luIDBcbiAgICAgICAgcGFkZGluZyAwIDAgMjBweCAyNXB4XG4gICAgJi5jcmVkaXRzXG4gICAgICB3aWR0aCA4MDBweFxuICAgICAgbWFyZ2luIGF1dG9cblxuICA+IC5hdXRob3JzXG4gICAgbWFyZ2luIGF1dG9cbiAgICB3aWR0aCA4NjBweFxuICAgID4gLnRpdGxlXG4gICAgICBnZihjb3B5MSlcbiAgICAgIHRleHQtdHJhbnNmb3JtIG5vbmVcbiAgICAgIHBhZGRpbmcgMCAwIDIwcHggMFxuXG4gICAgPiAuYXV0aG9ybGlzdFxuICAgICAgPiAuYXV0aG9yXG4gICAgICAgIGZsb2F0IGxlZnRcbiAgICAgICAgd2lkdGggMjA2cHhcbiAgICAgICAgPiAuYXNzZXRcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemUgY29udGFpblxuICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0IG5vLXJlcGVhdFxuICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb24gNTAlIDUwJVxuICAgICAgICAgIGhlaWdodCAyMjBweFxuICAgICAgICAgIHdpZHRoIDIyMHB4XG4gICAgICAgICAgbWFyZ2luIGF1dG9cbiAgICAgICAgJi5hdXRob3Jfam9lYiA+IC5hc3NldFxuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2UgdXJsKC9pbWFnZXMvam9lYi5wbmcpXG4gICAgICAgICYuYXV0aG9yX2x1Y2FtID4gLmFzc2V0XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZSB1cmwoL2ltYWdlcy9sdWNhbS5wbmcpXG4gICAgICAgICYuYXV0aG9yX2tldmluYyA+IC5hc3NldFxuICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2UgdXJsKC9pbWFnZXMva2V2aW5jLnBuZylcbiAgICAgICAgJi5hdXRob3Jfa2V2aW5vID4gLmFzc2V0XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZSB1cmwoL2ltYWdlcy9rZXZpbm8ucG5nKVxuICAgICAgICA+IC5uYW1lXG4gICAgICAgICAgd2lkdGggMjIwcHhcbiAgICAgICAgICBtYXJnaW4gYXV0b1xuICAgICAgICAgIHRleHQtYWxpZ24gY2VudGVyXG4gICAgICAgICAgcGFkZGluZyAxMHB4IDAgMCAwXG5cbiAgICBcbiAgPiAuYXNzZXRcbiAgICBiYWNrZ3JvdW5kLXNpemUgY292ZXJcbiAgICAmLnJpZ2h0XG4gICAgICBmbG9hdCByaWdodFxuICAgICYubGVmdFxuICAgICAgZmxvYXQgbGVmdFxuICAgICYuc2NvcGUxXG4gICAgICB3aWR0aCAzMzBweFxuICAgICAgaGVpZ2h0IDI0NXB4XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlIHVybCgvaW1hZ2VzL3N0ZXJlb3Njb3BlMS5wbmcpXG4gICAgJi5icmV3c3RlclxuICAgICAgd2lkdGggMzMwcHhcbiAgICAgIGhlaWdodCAyNDVweFxuICAgICAgYmFja2dyb3VuZC1pbWFnZSB1cmwoL2ltYWdlcy9icmV3c3Rlci5wbmcpXG4gICAgJi5nbG9iZVxuICAgICAgd2lkdGggMzYwcHhcbiAgICAgIGhlaWdodCA0NjhweFxuICAgICAgYmFja2dyb3VuZC1pbWFnZSB1cmwoL2ltYWdlcy9nbG9iZS5wbmcpXG4gICAgJi5ob3d0b1xuICAgICAgd2lkdGggMzAwcHhcbiAgICAgIGhlaWdodCAxOTBweFxuICAgICAgYmFja2dyb3VuZC1pbWFnZSB1cmwoL2ltYWdlcy9ob3d0by5wbmcpXG4gICAgICBtYXJnaW4gNzBweCAwIDAgMFxuXG5AbWVkaWEgYWxsIGFuZCAobWluLXdpZHRoOiAxcHgpIGFuZCAobWF4LXdpZHRoOiAxMDAwcHgpXG4gIGhlYWRlclxuICAgID4gLmlubmVyXG4gICAgICBwYWRkaW5nIDEwcHhcbiAgLmNvbnRhaW5lclxuICAgIHdpZHRoIGF1dG9cbiAgICBwYWRkaW5nIDAgMTBweFxuXG5cbiAgICA+IC5pbm5lclxuICAgICAgPiAudGl0bGVcbiAgICAgICAgZm9udC1zaXplIDIwcHhcblxuICAuc2VjdGlvblxuICAgIHBhZGRpbmcgMTBweFxuICAgID4gLmNvcHlcbiAgICAgIHdpZHRoIGF1dG8gIWltcG9ydGFudFxuICAgICAgJi5sZWZ0XG4gICAgICAgIGZsb2F0IG5vbmVcbiAgICAgICYucmlnaHRcbiAgICAgICAgZmxvYXQgbm9uZVxuICAgICAgPiAuc3ViaGVhZGVyXG4gICAgICAgID4gLmNvcHlcbiAgICAgICAgICBsaW5lLWhlaWdodCA1MHB4XG4gICAgICAgICAgZm9udC1zaXplIDQwcHhcblxuICAgID4gLmFzc2V0XG4gICAgICBtYXJnaW4gMjBweCBhdXRvXG4gICAgICAmLmxlZnRcbiAgICAgICAgZmxvYXQgbm9uZVxuICAgICAgJi5yaWdodFxuICAgICAgICBmbG9hdCBub25lXG5cbiAgICAgICYuZ2xvYmVcbiAgICAgICAgd2lkdGggMzIwcHhcbiAgICAgICAgaGVpZ2h0IDQxN3B4XG5cbiAgICAgICYuaG93dG9cbiAgICAgICAgbWFyZ2luIGF1dG9cbiAgICA+IC5hdXRob3JzXG4gICAgICBmbG9hdCBub25lXG4gICAgICB3aWR0aCAzMjBweFxuICAgICAgbWFyZ2luIGF1dG9cbiAgICAgIHBhZGRpbmcgMjBweCAwXG4gICAgICA+IC5hdXRob3JsaXN0XG4gICAgICAgID4gLmF1dGhvclxuICAgICAgICAgIHdpZHRoIDMwMHB4XG4gICAgICAgICAgZmxvYXQgbm9uZVxuICAgICAgICAgIG1hcmdpbiBhdXRvXG4gICAgICAgICAgcGFkZGluZyAxMHB4IDBcbiAgICAgICAgICA+IC5hc3NldFxuICAgICAgICAgICAgd2lkdGggMzAwcHhcbiAgICAgICAgICAgIGhlaWdodCAzMDBweFxuICAgICAgICAgICAgbWFyZ2luIGF1dG9cblxuICBmb290ZXJcbiAgICA+IC5pbm5lclxuICAgICAgcGFkZGluZyAwIDIwcHhcblxuIl19 */
