/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.bl01-blog-post-masthead {
  height: 39.75rem;
  margin-bottom: 3.75rem; }
  @media (min-width: 768px) {
    .bl01-blog-post-masthead {
      margin-bottom: 6rem;
      min-height: 30rem;
      height: 30rem; } }
  .bl01-blog-post-masthead__column {
    min-height: 1px;
    width: 100%;
    float: right;
    margin-right: 0; }
  .bl01-blog-post-masthead__column-4 {
    display: none; }
    @media (min-width: 768px) {
      .bl01-blog-post-masthead__column-4 {
        width: 32.20339%;
        float: left;
        margin-right: 1.69492%;
        margin-left: 0;
        display: block; } }
  .bl01-blog-post-masthead__column-6 {
    height: 100%; }
    @media (min-width: 768px) {
      .bl01-blog-post-masthead__column-6 {
        width: 49.15254%;
        float: left;
        margin-right: 1.69492%; } }
  @media (min-width: 768px) {
    .bl01-blog-post-masthead__column-2 {
      width: 15.25424%;
      float: right;
      margin-right: 0; } }
  .bl01-blog-post-masthead__bgwrapper {
    width: 100%;
    height: 39.75rem;
    background-size: cover;
    background-position: center;
    -webkit-transform: translateX(-50%);
            transform: translateX(-50%);
    min-width: 100%;
    min-height: 100%;
    left: 50%;
    margin: 0;
    padding: 0;
    overflow: hidden;
    position: relative; }
    @media (min-width: 768px) {
      .bl01-blog-post-masthead__bgwrapper {
        min-height: 30rem;
        height: 30rem; } }
    .bl01-blog-post-masthead__bgwrapper.Video {
      /* hide background image when video bg is selected */
      background-image: none !important; }
  .bl01-blog-post-masthead__bgVideo {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 1; }
    .bl01-blog-post-masthead__bgVideo video {
      -webkit-transform: translateX(-50%) translateY(-50%);
              transform: translateX(-50%) translateY(-50%);
      position: absolute;
      top: 50%;
      left: 50%;
      min-width: 100%;
      min-height: 100%;
      width: auto;
      height: auto;
      z-index: -100; }
  .bl01-blog-post-masthead__overlay {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: #14171A;
    opacity: 0;
    z-index: 2; }
    .bl01-blog-post-masthead__overlay.lowTint {
      opacity: .1; }
    .bl01-blog-post-masthead__overlay.medTint {
      opacity: .2; }
    .bl01-blog-post-masthead__overlay.highTint {
      opacity: .3; }
  .bl01-blog-post-masthead__text {
    height: 36.75rem;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
    position: relative;
    z-index: 2;
    margin-bottom: 3rem; }
    @media (min-width: 768px) {
      .bl01-blog-post-masthead__text {
        height: 27rem; } }
    .bl01-blog-post-masthead__text a {
      text-decoration: none; }
    .bl01-blog-post-masthead__text--content {
      width: 100%; }
  .bl01-blog-post-masthead__topic, .bl01-blog-post-masthead__title {
    margin-bottom: 1.5rem;
    word-wrap: break-word; }
    @media (min-width: 768px) {
      .bl01-blog-post-masthead__topic, .bl01-blog-post-masthead__title {
        word-wrap: normal; } }
  .bl01-blog-post-masthead__info {
    float: left;
    width: 100%;
    margin-bottom: 0.375rem; }
  .bl01-blog-post-masthead__date {
    margin-right: 0.9375rem;
    float: left; }
  .bl01-blog-post-masthead__share--icons {
    display: inline-block;
    min-width: 110px;
    text-align: right;
    position: relative;
    margin-top: -0.1875rem; }
    @media (min-width: 768px) {
      .bl01-blog-post-masthead__share--icons {
        min-width: 108px; } }
    .bl01-blog-post-masthead__share--icons a {
      padding-left: 0.9375rem;
      text-decoration: none; }
      .bl01-blog-post-masthead__share--icons a svg {
        width: 24px;
        height: 24px;
        margin-bottom: -4px;
        fill: #FFFFFF; }
        @media (min-width: 768px) {
          .bl01-blog-post-masthead__share--icons a svg {
            width: 16px;
            height: 16px; } }
      .bl01-blog-post-masthead__share--icons a:first-child {
        padding-left: 0; }
      .bl01-blog-post-masthead__share--icons a.post__share--copy-link:hover .post__share--copy-link-popup.show,
      .bl01-blog-post-masthead__share--icons a.post__share--copy-link:active .post__share--copy-link-popup.show {
        opacity: 1; }
      @media (min-width: 768px) {
        .bl01-blog-post-masthead__share--icons a {
          padding-left: 0.625rem; } }
  .bl01-blog-post-masthead::after {
    content: " ";
    display: block;
    clear: both; }
  .bl01-blog-post-masthead__share--copy-link {
    position: relative; }
  .bl01-blog-post-masthead .post__share--copy-link-popup {
    opacity: 0;
    visibility: hidden;
    position: absolute;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    min-width: 100px;
    border-radius: 0.125rem;
    height: 2.25rem;
    padding: 0 0.75rem;
    text-align: center;
    color: #657786;
    transition: all 0.3s cubic-bezier(0.165, 0.84, 0.44, 1); }
    .bl01-blog-post-masthead .post__share--copy-link-popup.show {
      opacity: 1;
      visibility: visible; }
    .bl01-blog-post-masthead .post__share--copy-link-popup svg {
      position: absolute;
      bottom: -11px;
      width: 20px;
      height: 20px;
      right: 50%; }
      .bl01-blog-post-masthead .post__share--copy-link-popup svg path {
        fill: #FFFFFF; }
  .bl01-blog-post-masthead .post__share--copy-link-popup-content {
    -ms-flex-item-align: center;
        align-self: center;
    white-space: nowrap; }
  .bl01-blog-post-masthead .wide {
    width: 100%;
    float: left;
    margin-left: 0;
    margin-right: 0; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.b02-blog-post-no-masthead {
  padding-top: 3.75rem; }
  @media (min-width: 768px) {
    .b02-blog-post-no-masthead {
      padding-top: 6rem;
      margin-bottom: 3.75rem; } }
  .b02-blog-post-no-masthead a {
    text-decoration: none; }
  .b02-blog-post-no-masthead__title {
    margin-bottom: 2.25rem;
    word-wrap: break-word; }
  .b02-blog-post-no-masthead__topic {
    margin-bottom: 0.75rem; }
  .b02-blog-post-no-masthead__info {
    float: left;
    padding-right: 0.75rem; }
  .b02-blog-post-no-masthead__date {
    margin-right: 0.9375rem; }
    @media (min-width: 768px) {
      .b02-blog-post-no-masthead__date {
        margin-bottom: 0; } }
  .b02-blog-post-no-masthead__share--icons {
    margin-top: 1.5rem;
    margin-bottom: 3.75rem;
    display: block;
    min-width: 140px;
    text-align: left;
    position: relative;
    margin-bottom: 3.75rem; }
    @media (min-width: 768px) {
      .b02-blog-post-no-masthead__share--icons {
        display: inline-block;
        margin-bottom: 0;
        margin-top: 0; } }
    .b02-blog-post-no-masthead__share--icons a {
      padding-left: 0.75rem;
      text-decoration: none;
      padding-left: 44px; }
      .b02-blog-post-no-masthead__share--icons a svg {
        width: 24px;
        height: 24px;
        margin-bottom: -4px;
        fill: #AAB8C2;
        transition: fill 0.3s ease-in-out; }
        @media (min-width: 768px) {
          .b02-blog-post-no-masthead__share--icons a svg {
            width: 16px;
            height: 16px; } }
      .b02-blog-post-no-masthead__share--icons a:first-child {
        padding-left: 0; }
      .b02-blog-post-no-masthead__share--icons a:hover svg, .b02-blog-post-no-masthead__share--icons a:active svg {
        fill: #657786; }
      @media (min-width: 768px) {
        .b02-blog-post-no-masthead__share--icons a {
          padding-left: 0.625rem; } }
  .b02-blog-post-no-masthead::after {
    content: " ";
    display: block;
    clear: both; }
  .b02-blog-post-no-masthead .post__share--copy-link {
    position: relative;
    display: inline-block; }
  .b02-blog-post-no-masthead .post__share--copy-link-popup {
    opacity: 0;
    visibility: hidden;
    position: absolute;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    min-width: 110px;
    border-radius: 0.125rem;
    height: 2.25rem;
    padding: 0 0.75rem;
    text-align: right;
    color: #657786;
    transition: all 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);
    box-shadow: 0 0 2px 2px #CCD6DD; }
    .b02-blog-post-no-masthead .post__share--copy-link-popup.show {
      opacity: 1;
      visibility: visible; }
    .b02-blog-post-no-masthead .post__share--copy-link-popup svg {
      position: absolute;
      bottom: -11px;
      width: 20px;
      height: 20px;
      right: 50%;
      -webkit-filter: drop-shadow(0 2px 0 #CCD6DD);
              filter: drop-shadow(0 2px 0 #CCD6DD); }
      .b02-blog-post-no-masthead .post__share--copy-link-popup svg path {
        fill: #FFFFFF; }
  .b02-blog-post-no-masthead .post__share--copy-link-popup-content {
    -ms-flex-item-align: center;
        align-self: center;
    white-space: nowrap; }
  .b02-blog-post-no-masthead .second-line {
    overflow: visible; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.bl06-author-card-masthead {
  width: 100%;
  float: left;
  margin-left: 0;
  margin-right: 0;
  float: none; }
  .bl06-author-card-masthead__content {
    margin-bottom: 6rem;
    margin-right: auto;
    margin-left: auto;
    width: 185px;
    text-align: center; }
  .bl06-author-card-masthead img {
    width: 108px;
    height: auto;
    margin-top: 6rem;
    margin-bottom: 2.25rem;
    border-radius: 50%;
    background-clip: padding-box;
    /* stops bg color from leaking outside the border: */
    float: none;
    margin-right: auto;
    margin-left: auto; }
  .bl06-author-card-masthead .authorinfo__name {
    margin-bottom: 0.375rem;
    color: #14171A; }
  .bl06-author-card-masthead .authorinfo__handle {
    margin-bottom: 0.75rem; }
    .bl06-author-card-masthead .authorinfo__handle a {
      text-decoration: none; }
  .bl06-author-card-masthead .authorinfo__description {
    color: #657786; }
  .bl06-author-card-masthead .authorinfo p:last-of-type {
    margin-bottom: 6rem; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.bl07-author-card {
  max-width: 100%;
  margin-top: 1.5rem;
  padding-top: 2.25rem;
  padding-bottom: 2.25rem; }
  @media (min-width: 768px) {
    .bl07-author-card {
      margin-top: 3.75rem;
      max-width: 185px; } }
  .bl07-author-card + .bl07-author-card {
    margin-top: 0;
    border-top: 1px solid #AAB8C2; }
  .bl07-author-card img {
    border-radius: 50%;
    background-clip: padding-box;
    /* stops bg color from leaking outside the border: */
    width: 108px;
    height: auto;
    margin-bottom: 0.75rem;
    float: left;
    margin-right: 20px; }
    @media (min-width: 768px) {
      .bl07-author-card img {
        float: none; } }
  .bl07-author-card .profile-icon {
    width: 108px;
    height: 108px;
    margin-bottom: 0.75rem;
    float: left;
    margin-right: 20px;
    border-radius: 50%;
    background-clip: padding-box;
    /* stops bg color from leaking outside the border: */ }
    .bl07-author-card .profile-icon .profile-icon-card {
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
      width: 100%;
      height: 100%; }
      .bl07-author-card .profile-icon .profile-icon-card svg {
        fill: #FFFFFF;
        width: 72px;
        height: 72px;
        margin: auto; }
    @media (min-width: 768px) {
      .bl07-author-card .profile-icon {
        float: none; } }
  .bl07-author-card .authorinfo {
    min-height: 108px; }
    @media (min-width: 768px) {
      .bl07-author-card .authorinfo {
        min-height: 1px; } }
    .bl07-author-card .authorinfo__name {
      margin-bottom: 0.375rem;
      color: #14171A; }
    .bl07-author-card .authorinfo__handle {
      margin-bottom: 0.75rem; }
      .bl07-author-card .authorinfo__handle a {
        text-decoration: none; }
    .bl07-author-card .authorinfo__description {
      color: #AAB8C2; }

/* add top margin only when the author card appears on a post page that doesn't have a media masthead*/
@media (min-width: 768px) {
  .post-page .bl07-author-card:first-of-type,
  .advanced-post-page .bl07-author-card:first-of-type,
  .insight-post-page .bl07-author-card:first-of-type,
  .announcement-post-page .bl07-author-card:first-of-type,
  .basic-post-page .bl07-author-card:first-of-type,
  .spotlight-post-page .bl07-author-card:first-of-type {
    margin-top: 101px; } }

/* remove top margin and padding only when the author card appears on a page with a media masthead */
@media (min-width: 768px) {
  .bl01-blog-post-masthead ~ .bl18-left-rail-blog-container .bl07-author-card:first-of-type {
    margin-top: 0;
    padding-top: 0; } }
.bl07a-author-card-configuration {
  margin-bottom: baseline(2); }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.only-on-twitter {
  margin-bottom: 3rem; }
  @media (min-width: 768px) {
    .only-on-twitter {
      max-width: 185px;
      margin-bottom: 2.25rem; } }
  .only-on-twitter__key-line {
    width: 100vw;
    border-top: 1px solid #AAB8C2;
    margin-left: -5.2vw;
    padding-top: 3rem; }
    @media (max-width: 479px) {
      .only-on-twitter__key-line {
        margin-left: -6.6vw; } }
    @media (min-width: 768px) {
      .only-on-twitter__key-line {
        width: 100%;
        border-top: 1px solid #AAB8C2;
        margin-left: auto;
        padding-top: 2.25rem; } }
  .only-on-twitter ul {
    margin: 0;
    padding: 0; }
    .only-on-twitter ul li {
      list-style: none; }
      .only-on-twitter ul li:last-child {
        padding-bottom: 0; }
      .only-on-twitter ul li a {
        line-height: 0.75rem; }
  .only-on-twitter__tag--title {
    font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-weight: 700;
    font-size: 1.5rem;
    line-height: 1.5rem;
    letter-spacing: 0rem;
    margin: 0;
    padding: 0 0 0rem 0;
    color: #14171A;
    padding-bottom: 1.5rem; }
    @media (min-width: 768px) {
      .only-on-twitter__tag--title {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 0.87rem;
        line-height: 1.5rem;
        letter-spacing: 0.03rem;
        margin: 0;
        padding: 0 0 0rem 0;
        color: #AAB8C2;
        padding-bottom: 0.75rem; } }
  .only-on-twitter__tag {
    text-decoration: none; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.bl09-related {
  padding-top: 1.5rem;
  clear: both;
  overflow: auto;
  /* negates margin-top on footer */
  margin-bottom: -2.25rem; }
  .bl09-related:first-child {
    padding-top: 3.75rem; }
  .bl09-related a {
    text-decoration: none; }
  .bl09-related__title {
    color: #14171A;
    width: 100%;
    float: left;
    margin-left: 0;
    margin-right: 0;
    float: none;
    margin-bottom: 3rem;
    padding-right: 0.75rem; }
    @media (min-width: 768px) {
      .bl09-related__title {
        width: 15.25424%;
        float: left;
        margin-right: 1.69492%;
        margin-bottom: 0.75rem; } }
  .bl09-related__list, .bl09-related__account {
    width: 100%;
    float: left;
    margin-left: 0;
    margin-right: 0;
    float: none; }
    @media (min-width: 768px) {
      .bl09-related__list, .bl09-related__account {
        width: 49.15254%;
        float: left;
        margin-right: 1.69492%;
        margin-left: 16.94915%;
        float: left; } }
  .bl09-related__post, .bl09-related__account {
    padding-bottom: 3rem;
    border-bottom: 1px solid #AAB8C2;
    margin-bottom: 3rem; }
    @media (min-width: 768px) {
      .bl09-related__post:first-child, .bl09-related__account:first-child {
        padding-top: 1.5rem; } }
    .bl09-related__post:last-child, .bl09-related__account:last-child {
      border-bottom: transparent;
      margin-bottom: 1.5rem; }
  .bl09-related__accountwrap {
    padding-top: 1.5rem; }
  .bl09-related__account {
    padding-top: 0; }
    .bl09-related__account img {
      width: 108px;
      height: 108px;
      float: left;
      border-radius: 50%;
      background-clip: padding-box;
      /* stops bg color from leaking outside the border: */
      margin-right: 20px; }
    .bl09-related__accountname, .bl09-related__accounthandle, .bl09-related__accountdescription {
      display: block; }
    .bl09-related__accounthandle {
      margin-bottom: 0.75rem; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.bl10-post-tags-share .post__key-line {
  border-top: 1px solid #AAB8C2; }

.bl10-post-tags-share .post {
  padding: 3rem 0; }
  @media (min-width: 768px) {
    .bl10-post-tags-share .post {
      width: 49.15254%;
      float: left;
      margin-right: 1.69492%;
      margin-left: 33.89831%; } }
  .bl10-post-tags-share .post__tags {
    width: 100%;
    float: none; }
    @media (min-width: 768px) {
      .bl10-post-tags-share .post__tags {
        width: 65.51724%;
        float: left;
        margin-right: 3.44828%;
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex; } }
    .bl10-post-tags-share .post__tags--title {
      font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
      font-weight: 700;
      font-size: 1.5rem;
      line-height: 1.5rem;
      letter-spacing: 0rem;
      margin: 0;
      padding: 0 0 0rem 0;
      padding-bottom: 1.5rem;
      color: #14171A; }
      @media (min-width: 768px) {
        .bl10-post-tags-share .post__tags--title {
          font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
          font-weight: 700;
          font-size: 0.87rem;
          line-height: 1.5rem;
          letter-spacing: 0.03rem;
          margin: 0;
          padding: 0 0 0rem 0;
          color: #AAB8C2;
          white-space: nowrap;
          padding-bottom: 0;
          padding-right: 0.75rem; } }
    .bl10-post-tags-share .post__tags ul {
      margin: 0;
      padding: 0;
      display: block;
      padding-bottom: 1.5rem; }
      @media (min-width: 768px) {
        .bl10-post-tags-share .post__tags ul {
          padding-bottom: 0; } }
      .bl10-post-tags-share .post__tags ul li {
        list-style: none; }
        @media (min-width: 768px) {
          .bl10-post-tags-share .post__tags ul li {
            display: inline;
            padding-right: 0.9375rem; } }
        .bl10-post-tags-share .post__tags ul li a {
          text-decoration: none;
          white-space: nowrap; }
    .bl10-post-tags-share .post__tags::after {
      content: " ";
      display: block;
      clear: both; }
  .bl10-post-tags-share .post__share--icons {
    float: none;
    text-align: left;
    width: 100%;
    position: relative; }
    @media (min-width: 768px) {
      .bl10-post-tags-share .post__share--icons {
        width: 31.03448%;
        float: right;
        margin-right: 0;
        text-align: right; } }
    .bl10-post-tags-share .post__share--icons a {
      padding-left: 2.745rem;
      text-decoration: none;
      display: -webkit-inline-box;
      display: -ms-inline-flexbox;
      display: inline-flex;
      vertical-align: middle; }
      .bl10-post-tags-share .post__share--icons a > svg {
        width: 24px;
        height: 24px;
        fill: #AAB8C2;
        transition: fill 0.3s ease-in-out; }
        @media (min-width: 768px) {
          .bl10-post-tags-share .post__share--icons a > svg {
            width: 16px;
            height: 16px; } }
      .bl10-post-tags-share .post__share--icons a:first-child {
        padding-left: 0; }
      .bl10-post-tags-share .post__share--icons a:hover > svg, .bl10-post-tags-share .post__share--icons a:active > svg {
        fill: #657786; }
      @media (min-width: 768px) {
        .bl10-post-tags-share .post__share--icons a {
          padding-left: 0.625rem; } }
  .bl10-post-tags-share .post::after {
    content: " ";
    display: block;
    clear: both; }
  .bl10-post-tags-share .post__share--copy-link {
    position: relative; }
  .bl10-post-tags-share .post__share--copy-link-popup {
    opacity: 0;
    visibility: hidden;
    position: absolute;
    display: -webkit-inline-box;
    display: -ms-inline-flexbox;
    display: inline-flex;
    min-width: 200px;
    border-radius: 0.125rem;
    height: 2.25rem;
    padding: 0 0.75rem;
    text-align: center;
    color: #657786;
    transition: all 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);
    box-shadow: 0 0 2px 2px #CCD6DD; }
    .bl10-post-tags-share .post__share--copy-link-popup.show {
      opacity: 1;
      visibility: visible; }
    .bl10-post-tags-share .post__share--copy-link-popup svg {
      position: absolute;
      bottom: -15px;
      width: 20px;
      height: 20px;
      right: 50%;
      -webkit-filter: drop-shadow(0 2px 0 #CCD6DD);
              filter: drop-shadow(0 2px 0 #CCD6DD); }
      .bl10-post-tags-share .post__share--copy-link-popup svg path {
        fill: #FFFFFF; }
  .bl10-post-tags-share .post__share--copy-link-popup-content {
    -ms-flex-item-align: center;
        align-self: center;
    white-space: nowrap; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.tag-billboard {
  clear: left;
  margin-bottom: 3.75rem; }
  .tag-billboard__title, .tag-billboard__tag-list {
    width: 100%; }
    @media (min-width: 768px) {
      .tag-billboard__title, .tag-billboard__tag-list {
        width: 83.05085%;
        float: left;
        margin-right: 1.69492%;
        margin-left: 8.47458%;
        float: none; } }
  .tag-billboard__title {
    color: #14171A; }
    .tag-billboard__title--keyline-top {
      padding-top: 3.75rem;
      border-top: 1px solid #AAB8C2; }
  .tag-billboard__tag-list {
    padding-bottom: 3.75rem;
    margin: 3rem auto 0; }
    .tag-billboard__tag-list--keyline-bottom {
      border-bottom: 1px solid #AAB8C2; }
    @media (min-width: 768px) {
      .tag-billboard__tag-list {
        padding-bottom: 6rem; } }
    .tag-billboard__tag-list--keyline-top {
      margin-top: 3rem; }
      @media (min-width: 768px) {
        .tag-billboard__tag-list--keyline-top {
          padding-bottom: 3.75rem; } }
    @media (min-width: 768px) {
      .tag-billboard__tag-list {
        margin-top: 2.25rem; } }
  .tag-billboard__tag, .tag-billboard__comma {
    font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-weight: 700;
    font-size: 2.25rem;
    line-height: 2.25rem;
    letter-spacing: -0.025rem;
    margin: 0;
    padding: 0 0 0rem 0;
    text-decoration: none; }
    @media (min-width: 768px) {
      .tag-billboard__tag, .tag-billboard__comma {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 2.25rem;
        line-height: 2.25rem;
        letter-spacing: -0.025rem;
        margin: 0;
        padding: 0 0 0rem 0; } }
    @media (min-width: 768px) {
      .tag-billboard__tag, .tag-billboard__comma {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 3rem;
        line-height: 3rem;
        letter-spacing: -0.025rem;
        margin: 0;
        padding: 0 0 0rem 0; } }
  @media (min-width: 768px) and (min-width: 768px) {
    .tag-billboard__tag, .tag-billboard__comma {
      font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
      font-weight: 700;
      font-size: 3rem;
      line-height: 3rem;
      letter-spacing: -0.025rem;
      margin: 0;
      padding: 0 0 0rem 0; } }

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvX21peGluLnNjc3M/ZDI4NCIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDEtYmxvZy1wb3N0LW1hc3RoZWFkL3dlYnBhY2svaW5kZXguc2NzcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYnJlYWtwb2ludC1wbHVnaW4uc2Nzcz8zZjQ4Iiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fcmVtLnNjc3M/Y2Y3MSIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc3Bhbi5zY3NzP2IyMGUiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2RpcmVjdGlvbi5zY3NzPzE4ZWMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2d1dHRlcnMuc2Nzcz8yODVjIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy92YXJpYWJsZXMvY29sb3JzLmpzb24/YmRlYiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDItYmxvZy1wb3N0LXRleHQtbWFzdGhlYWQvd2VicGFjay9pbmRleC5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvcmUvdmFyaWFibGVzL21vdGlvbi5qc29uPzljMWQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDA2LWF1dGhvci1jYXJkLW1hc3RoZWFkL3dlYnBhY2svaW5kZXguc2NzcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDctYXV0aG9yLWNhcmQvd2VicGFjay9pbmRleC5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy9ibG9nLXBvc3QvYmwwN2EtYXV0aG9yLWNhcmQtY29uZmlndXJhdGlvbi93ZWJwYWNrL2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDA4LW9ubHktb24tdHdpdHRlci93ZWJwYWNrL2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3ZhcmlhYmxlcy90eXBvZ3JhcGh5Lmpzb24/MGY2NyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDktcmVsYXRlZC1wb3N0cy93ZWJwYWNrL2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDEwLXBvc3QtdGFncy1zaGFyZS93ZWJwYWNrL2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDEyLXRhZy1iaWxsYm9hcmQvd2VicGFjay9pbmRleC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1DQTs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUF5QkY7Ozs7O0VBS0U7QUFhRjs7RUFFRTtBQU9GOzs7Ozs7Ozs7Ozs7O0VBYUU7QUM5R0Y7RUFDRSxpQkRjcUI7RUNickIsdUJEYXFCLEVDNEx0QjtFQ2hLRztJRDNDSjtNQUlJLG9CRFdtQjtNQ1ZuQixrQkRVbUI7TUNUbkIsY0RTbUIsRUM0THRCO0VBM01EO0lBU0ksZ0JBQWdCO0lFR2hCLFlDd0lvQjtJRHhJcEIsYUVBdUU7SUZBdkUsZ0JDa0ZvQixFSG5GckI7RUFYSDtJQWFJLGNBQWMsRUFNZjtJQ3dCQztNRDNDSjtRRVlJLGlCQ3dJb0I7UUR4SXBCLFlFQTREO1FGQTVELHVCRzREd0I7UUx4RHRCLGVBQWM7UUFDZCxlQUFlLEVBRWxCO0VBbkJIO0lBcUJJLGFBQWEsRUFJZDtJQ2tCQztNRDNDSjtRRVlJLGlCQ3dJb0I7UUR4SXBCLFlFQTREO1FGQTVELHVCRzREd0IsRUwvQ3pCO0VDa0JDO0lEM0NKO01FWUksaUJDd0lvQjtNRHhJcEIsYUVBdUU7TUZBdkUsZ0JDa0ZvQixFSGhFckI7RUE5Qkg7SUFnQ0ksWUFBWTtJQUNaLGlCRGxCbUI7SUNtQm5CLHVCQUF1QjtJQUN2Qiw0QkFBNEI7SUFDNUIsb0NBQXFCO1lBQXJCLDRCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLFVBQVU7SUFLVixVQUFVO0lBQ1YsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixtQkFBbUIsRUFLcEI7SUNUQztNRDNDSjtRQXlDTSxrQkQxQmlC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aUY7SUFDakYsaUJjM0I0ZjtJZDRCNWYsbUJBTnFCO0lBT3JCLHFCQVBxQjtJQVFyQiwwQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLG9CQUEwRDtJaUJ3QnhELHNCQUFzQixFQUt2QjtJZlhDO01lN0NKO1FqQnFCRSxpRkFBaUY7UUFDakYsaUJjM0JzbEQ7UWQ0QnRsRCxtQkFOcUI7UUFPckIscUJBUHFCO1FBUXJCLDBCQUFnQjtRQUNoQixVQUFVO1FBQ1Ysb0JBQTBELEVpQjZCekQ7SWZYQztNZTdDSjtRakJxQkUsaUZBQWlGO1FBQ2pGLGlCYzNCaVc7UWQ0QmpXLGdCQU5xQjtRQU9yQixrQkFQcUI7UUFRckIsMEJBQWdCO1FBQ2hCLFVBQVU7UUFDVixvQkFBMEQsRWlCNkJ6RDtFZlhDO0llN0NKO01qQnFCRSxpRkFBaUY7TUFDakYsaUJjM0IyN0M7TWQ0QjM3QyxnQkFOcUI7TUFPckIsa0JBUHFCO01BUXJCLDBCQUFnQjtNQUNoQixVQUFVO01BQ1Ysb0JBQTBELEVpQjZCekQiLCJmaWxlIjoiY3NzL2Jsb2ctcG9zdC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0ICcuLi92YXJpYWJsZXMvYnJlYWtwb2ludHMuanNvbic7XG5AaW1wb3J0ICcuLi92YXJpYWJsZXMvdHlwb2dyYXBoeS5qc29uJztcbkBpbXBvcnQgJy4uL3ZhcmlhYmxlcy9jb2xvcnMuanNvbic7XG5cbkBpbXBvcnQgJy4vZ3JpZCc7XG5cbi8vJGJhc2VsaW5lVW5pdDogbWFwLWdldChtYXAtZ2V0KCRncmlkLCBkZXNrdG9wKSwgYmFzZWxpbmUpO1xuJGJhc2VsaW5lVW5pdDogMC43NXJlbTsgLy8gMTJweFxuXG5AbWl4aW4gcmVzcG9uZC10bygkc2l6ZSkge1xuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKSkge1xuICAgIEBjb250ZW50XG4gIH1cbn1cblxuQG1peGluIHZlcnRpY2FsLWFsaWduIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG5AZnVuY3Rpb24gYmFzZWxpbmUoJG11bHRpcGxpZXI6IDEpIHtcbiAgQHJldHVybiAkYmFzZWxpbmVVbml0ICogJG11bHRpcGxpZXI7XG59XG5cbkBtaXhpbiB0eXBlU3R5bGVzKCR0eXBlZmFjZSkge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiBtYXAtZ2V0KCR0eXBlZmFjZSwgd2VpZ2h0KTtcbiAgZm9udC1zaXplOiBiYXNlbGluZShtYXAtZ2V0KCR0eXBlZmFjZSwgc2l6ZSkpO1xuICBsaW5lLWhlaWdodDogYmFzZWxpbmUobWFwLWdldCgkdHlwZWZhY2UsIGxpbmUtaGVpZ2h0KSk7XG4gIGxldHRlci1zcGFjaW5nOiAje21hcC1nZXQoJHR5cGVmYWNlLCB0cmFja2luZykgLyAxMDAwfXJlbTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDAgYmFzZWxpbmUobWFwLWdldCgkdHlwZWZhY2UsIG1hcmdpbi1ib3R0b20pKSAwO1xufVxuXG4vKlxuXG5mb250IG1peGluXG4ka2V5OiB0eXBlIHN0eWxlIGtleSAoZXguIGJvbGQtMjQgb3Igcm9tYW4tMjQpLiBTZWUgdHlwb2dyYXBoeS5qc29uIGZvciBvcHRpb25zLlxuJGJyZWFrcG9pbnQ6IChvcHRpb25hbCkgYnJlYWtwb2ludCBrZXkgKGV4LiBmdWxsIG9yIHRhYmxldCkuIFNlZSBicmVha3BvaW50cy5qc29uIGZvciBvcHRpb25zLlxuXG5AaW5jbHVkZSBmb250KGJvbGQtMjQpO1xuXG5XaGVuIHVzZWQgd2l0aG91dCBhIGJyZWFrcG9pbnQgc3BlY2lmaWVkIHRoaXMgbWl4aW4gd2lsbCBwcm9kdWNlIGZvbnQgcHJvcGVydGllc1xud3JhcHBlZCBpbiBtZWRpYSBxdWVyaWVzLiBJdCdzIGEgc2ltcGxlIHdheSB0byBhcHBseSBmdWxseSByZXNwb25zaXZlIHR5cGUgc3R5bGVzXG50byBhIGNsYXNzIG9yIGVsZW1lbnQuXG5cbkBpbmNsdWRlIGZvbnQoYm9sZC0yNCwgZnVsbCk7XG5cbklmIGEgYnJlYWtwb2ludCBpcyBzcGVjaWZpZWQgdGhlcmUgd2lsbCBiZSBvbmx5IGEgc2luZ2xlIHNldCBvZiBmb250IHByb3BlcnRpZXNcbnRoYXQgYXJlIE5PVCB3cmFwcGVkIGluIGFueSBtZWRpYSBxdWVyaWVzLlxuXG4qL1xuXG5AbWl4aW4gZm9udCgka2V5LCAkYnJlYWtwb2ludDogbnVsbCkge1xuICBAaWYgJGJyZWFrcG9pbnQge1xuICAgIEBpZiBtYXAtaGFzLWtleShtYXAtZ2V0KCR0eXBvZ3JhcGh5LCByZXNwb25zaXZlKSwgJGJyZWFrcG9pbnQpIHtcbiAgICAgICRyZXNwb25zaXZlVHlwZTogbWFwLWdldChtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIHJlc3BvbnNpdmUpLCAkYnJlYWtwb2ludCksICRrZXkpO1xuICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcygkcmVzcG9uc2l2ZVR5cGUpO1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgJHR5cGVmYWNlOiBtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIGRlZmF1bHQpLCAka2V5KTtcbiAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKCR0eXBlZmFjZSk7XG4gICAgQGVhY2ggJGJyZWFrcG9pbnRLZXksICRicmVha3BvaW50VmFsIGluICRicmVha3BvaW50cyB7XG4gICAgICBAaWYgbWFwLWhhcy1rZXkobWFwLWdldCgkdHlwb2dyYXBoeSwgcmVzcG9uc2l2ZSksICRicmVha3BvaW50S2V5KSB7XG5cbiAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KCRicmVha3BvaW50VmFsKSB7XG4gICAgICAgICAgJHJlc3BvbnNpdmVUeXBlOiBtYXAtZ2V0KG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgcmVzcG9uc2l2ZSksICRicmVha3BvaW50S2V5KSwgJGtleSk7XG4gICAgICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcygkcmVzcG9uc2l2ZVR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLypcblxuICBjb2xvcih5ZWxsb3cpIHNpbmdsZSBhcmd1bWVudCBkZWZhdWx0cyB0byBkYXJrIGNvbG9yc1xuICBjb2xvcihsaWdodCwgeWVsbG93KSByZXR1cm5zIGxpZ2h0IHllbGxvd1xuXG4qL1xuQGZ1bmN0aW9uIGNvbG9yKCRjb2xvci1jYXRlZ29yeSwgJGNvbG9yLW5hbWU6bnVsbCkge1xuICAvLyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG51bGwgdGhlcmUgc2hvdWxkIGJlIGEgY29sb3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gIEBpZiAoJGNvbG9yLW5hbWUgIT0gbnVsbCkge1xuICAgIC8vIG1hcCBpbmNlcHRpb25cbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkY29sb3ItY2F0ZWdvcnkpLCAkY29sb3ItbmFtZSk7XG4gIH0gQGVsc2Uge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsIGRhcmspLCAkY29sb3ItbmFtZSk7XG4gIH1cblxuICBAd2FybiBcIkNvbG9yICcjeyRjb2xvci1jYXRlZ29yeX0nICcjeyRjb2xvci1uYW1lfScgbm90IGZvdW5kIGluICRjb2xvcnNcIjtcbn1cblxuLyogcm91bmRlZCBjb3JuZXJzXG4gIHVzYWdlOiBib3JkZXItcmFkaXVzKCBiYXNlbGluZSggbiApIClcbiovXG5AbWl4aW4gYm9yZGVyLXJhZGl1cygkcmFkaXVzKSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsgIC8qIHN0b3BzIGJnIGNvbG9yIGZyb20gbGVha2luZyBvdXRzaWRlIHRoZSBib3JkZXI6ICovXG59XG5cbi8qXG5cbmh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvc2Fzcy9tYWludGFpbi1hc3BlY3QtcmF0aW8tbWl4aW4vXG5cblRoZSBtaXhpbiBhc3N1bWVzIHlvdSdsbCBiZSBuZXN0aW5nIGFuIGVsZW1lbnQgd2l0aCB0aGUgY2xhc3Mgb2YgY29udGVudCBpbnNpZGUgeW91ciBpbml0aWFsIGJsb2NrXG5cbjxkaXYgY2xhc3M9XCJzaXh0ZWVuLW5pbmVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICBpbnNlcnQgY29udGVudCBoZXJlXG4gICAgdGhpcyB3aWxsIG1haW50YWluIGEgMTY6OSBhc3BlY3QgcmF0aW9cbiAgPC9kaXY+XG48L2Rpdj5cblxuKi9cblxuQG1peGluIGFzcGVjdC1yYXRpbygkd2lkdGgsICRoZWlnaHQpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmOmJlZm9yZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29udGVudDogXCJcIjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLXRvcDogKCRoZWlnaHQgLyAkd2lkdGgpICogMTAwJTtcbiAgfVxuICA+IC5jb250ZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svY29yZS9zdHlsZS9fbWl4aW4uc2Nzc1xuICoqLyIsIkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2JyZWFrcG9pbnRzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvY29sb3JzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvZ3JpZC5qc29uJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5cbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuXG4uYmwwMS1ibG9nLXBvc3QtbWFzdGhlYWQge1xuICBoZWlnaHQ6IGJhc2VsaW5lKDUzKTtcbiAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoNSk7XG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSg4KTtcbiAgICBtaW4taGVpZ2h0OiBiYXNlbGluZSg0MCk7XG4gICAgaGVpZ2h0OiBiYXNlbGluZSg0MCk7XG4gIH1cbiAgJl9fY29sdW1uIHtcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gICAgQGluY2x1ZGUgc3BhbigxMiBsYXN0KTtcbiAgfVxuICAmX19jb2x1bW4tNCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDQpO1xuICAgICAgbWFyZ2luLWxlZnQ6MDtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuICAmX19jb2x1bW4tNiB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oNik7XG4gICAgfVxuICB9XG4gICZfX2NvbHVtbi0yIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDIgbGFzdCk7XG4gICAgfVxuICB9XG4gICZfX2Jnd3JhcHBlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBiYXNlbGluZSg1Myk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBtaW4taGVpZ2h0OiBiYXNlbGluZSg0MCk7XG4gICAgICBoZWlnaHQ6IGJhc2VsaW5lKDQwKTtcbiAgICB9XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJi5WaWRlbyB7XG4gICAgICAvKiBoaWRlIGJhY2tncm91bmQgaW1hZ2Ugd2hlbiB2aWRlbyBiZyBpcyBzZWxlY3RlZCAqL1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuICAmX19iZ1ZpZGVvIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgdmlkZW8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIGhlaWdodDogYXV0bztcbiAgICAgIHotaW5kZXg6IC0xMDA7XG4gICAgfVxuICB9XG4gICZfX292ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IobmV1dHJhbCwgYmxhY2spO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgei1pbmRleDogMjtcbiAgICAmLmxvd1RpbnQge1xuICAgICAgb3BhY2l0eTogLjE7XG4gICAgfVxuICAgICYubWVkVGludCB7XG4gICAgICBvcGFjaXR5OiAuMjtcbiAgICB9XG4gICAgJi5oaWdoVGludCB7XG4gICAgICBvcGFjaXR5OiAuMztcbiAgICB9XG4gIH1cbiAgJl9fdGV4dCB7XG4gICAgaGVpZ2h0OiBiYXNlbGluZSg0OSk7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgaGVpZ2h0OiBiYXNlbGluZSgzNik7XG4gICAgfVxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDQpO1xuICAgIGEge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgICAmLS1jb250ZW50IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuICAmX190b3BpYyxcbiAgJl9fdGl0bGUge1xuICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgICB9XG4gIH1cbiAgJl9faW5mbyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoLjUpO1xuICB9XG4gICZfX2RhdGUge1xuICAgIG1hcmdpbi1yaWdodDogYmFzZWxpbmUoMS4yNSk7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgJl9fc2hhcmUtLWljb25zIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWluLXdpZHRoOiAxMTBweDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLXRvcDogLSBiYXNlbGluZSguMjUpO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIG1pbi13aWR0aDogMTA4cHg7XG4gICAgfVxuICAgIGEge1xuICAgICAgcGFkZGluZy1sZWZ0OiBiYXNlbGluZSgxLjI1KTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC00cHg7XG4gICAgICAgIGZpbGw6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKTtcbiAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgIH1cbiAgICAgICYucG9zdF9fc2hhcmUtLWNvcHktbGluazpob3ZlciAucG9zdF9fc2hhcmUtLWNvcHktbGluay1wb3B1cC5zaG93ICxcbiAgICAgICYucG9zdF9fc2hhcmUtLWNvcHktbGluazphY3RpdmUgLnBvc3RfX3NoYXJlLS1jb3B5LWxpbmstcG9wdXAuc2hvdyAge1xuICAgICAgICBvcGFjaXR5OiAxIDtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBiYXNlbGluZSg1LzYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAmOjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbiAgJl9fc2hhcmUtLWNvcHktbGluayB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG4gIC5wb3N0IHtcbiAgICAmX19zaGFyZS0tY29weS1saW5rLXBvcHVwIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiBiYXNlbGluZSgxLzYpO1xuICAgICAgaGVpZ2h0OiBiYXNlbGluZSgzKTtcbiAgICAgIHBhZGRpbmc6IDAgYmFzZWxpbmUoMSk7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBjb2xvcjogY29sb3IobmV1dHJhbCwgZGFyay1ncmF5KTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjE2NSwgMC44NCwgMC40NCwgMSk7XG4gICAgICAmLnNob3cge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgfVxuICAgICAgc3ZnIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IC0xMXB4O1xuICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICByaWdodDogNTAlO1xuICAgICAgICBwYXRoIHtcbiAgICAgICAgICBmaWxsOiBjb2xvcihuZXV0cmFsLCB3aGl0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJl9fc2hhcmUtLWNvcHktbGluay1wb3B1cC1jb250ZW50IHtcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICB9XG4gIC53aWRlIHtcbiAgICBAaW5jbHVkZSBzcGFuKDEyKTtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDEtYmxvZy1wb3N0LW1hc3RoZWFkL3dlYnBhY2svaW5kZXguc2Nzc1xuICoqLyIsIi8vIEJyZWFrcG9pbnQgSW50ZWdyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuJHN1c3ktbWVkaWE6ICgpICFkZWZhdWx0O1xuJHN1c3ktbWVkaWEtZmFsbGJhY2s6IGZhbHNlICFkZWZhdWx0O1xuXG4kX3N1c3ktbWVkaWEtY29udGV4dDogKCk7XG5cblxuLy8gU3VzeSBCcmVha3BvaW50XG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIENoYW5nZSBncmlkcyBhdCBkaWZmZXJlbnQgbWVkaWEgcXVlcnkgYnJlYWtwb2ludHMuXG4vLyAtICRxdWVyeSAgICAgOiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+IHwgPG1hcD5cbi8vIC0gJGxheW91dCAgICA6IDxzZXR0aW5ncz5cbi8vIC0gJG5vLXF1ZXJ5ICA6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LWJyZWFrcG9pbnQoXG4gICRxdWVyeSxcbiAgJGxheW91dDogZmFsc2UsXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaW5jbHVkZSBzdXN5LW1lZGlhLXJvdXRlcigkcXVlcnksICRuby1xdWVyeSkge1xuICAgIEBpZiAkbGF5b3V0IHtcbiAgICAgIEBpbmNsdWRlIHdpdGgtbGF5b3V0KCRsYXlvdXQpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBTdXN5IE1lZGlhXG4vLyAtLS0tLS0tLS0tXG4vLyAtICRxdWVyeTogPG1pbi13aWR0aD4gWzxtYXgtd2lkdGg+XSB8IDxwcm9wZXJ0eT4gPHZhbHVlPlxuLy8gLSAkbm8tcXVlcnk6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LW1lZGlhKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICAkb2xkLWNvbnRleHQ6ICRfc3VzeS1tZWRpYS1jb250ZXh0O1xuICAkbmFtZTogaWYobWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRxdWVyeSksICRxdWVyeSwgbnVsbCk7XG4gICRxdWVyeTogc3VzeS1nZXQtbWVkaWEoJHF1ZXJ5KTtcbiAgJHF1ZXJ5OiBzdXN5LXBhcnNlLW1lZGlhKCRxdWVyeSk7XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRxdWVyeSwgJG5hbWUpO1xuXG4gIEBpZiAkbm8tcXVlcnkgYW5kIHR5cGUtb2YoJG5vLXF1ZXJ5KSAhPSBzdHJpbmcge1xuICAgIEBjb250ZW50O1xuICB9IEBlbHNlIHtcbiAgICBAbWVkaWEgI3tzdXN5LXJlbmRlci1tZWRpYSgkcXVlcnkpfSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICBAaWYgdHlwZS1vZigkbm8tcXVlcnkpID09IHN0cmluZyB7XG4gICAgICAjeyRuby1xdWVyeX0gJiB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtY29udGV4dCgkb2xkLWNvbnRleHQsICRjbGVhbjogdHJ1ZSk7XG59XG5cblxuLy8gTWVkaWEgUm91dGVyXG4vLyAtLS0tLS0tLS0tLS1cbi8vIFJvdXQgbWVkaWEgYXJndW1lbnRzIHRvIHRoZSBjb3JyZWN0IG1peGluLlxuQG1peGluIHN1c3ktbWVkaWEtcm91dGVyKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJyZWFrcG9pbnQsIChtaXhpbjogYnJlYWtwb2ludCksICR3YXJuOiBmYWxzZSkge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1tZWRpYSgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVXBkYXRlIENvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFNldCB0aGUgbmV3IG1lZGlhIGNvbnRleHRcbkBtaXhpbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRxdWVyeSxcbiAgJG5hbWU6IG51bGwsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkcXVlcnk6IG1hcC1tZXJnZSgobmFtZTogJG5hbWUpLCAkcXVlcnkpO1xuXG4gIEBpZiAkY2xlYW4ge1xuICAgICRfc3VzeS1tZWRpYS1jb250ZXh0OiAkcXVlcnkgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6IG1hcC1tZXJnZSgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHF1ZXJ5KSAhZ2xvYmFsO1xuICB9XG59XG5cblxuLy8gTWVkaWEgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSBmdWxsIG1lZGlhIGNvbnRleHQsIG9yIGEgc2luZ2xlIG1lZGlhIHByb3BlcnR5IChlLmcuIG1pbi13aWR0aClcbkBmdW5jdGlvbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRwcm9wZXJ0eTogZmFsc2Vcbikge1xuICBAaWYgJHByb3BlcnR5IHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJF9zdXN5LW1lZGlhLWNvbnRleHQsICRwcm9wZXJ0eSk7XG4gIH0gQGVsc2Uge1xuICAgIEByZXR1cm4gJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gIH1cbn1cblxuXG4vLyBHZXQgTWVkaWFcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgbmFtZWQgbWVkaWEtcXVlcnkgZnJvbSAkc3VzeS1tZWRpYS5cbi8vIC0gJG5hbWU6IDxrZXk+XG5AZnVuY3Rpb24gc3VzeS1nZXQtbWVkaWEoXG4gICRuYW1lXG4pIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRzdXN5LW1lZGlhLCAkbmFtZSkge1xuICAgICRtYXAtdmFsdWU6IG1hcC1nZXQoJHN1c3ktbWVkaWEsICRuYW1lKTtcbiAgICBAaWYgKCRuYW1lID09ICRtYXAtdmFsdWUpIHtcbiAgICAgICRuYW1lOiAkbWFwLXZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG5hbWU6IHN1c3ktZ2V0LW1lZGlhKCRtYXAtdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJG5hbWU7XG59XG5cblxuLy8gUmVuZGVyIE1lZGlhXG4vLyAtLS0tLS0tLS0tLS1cbi8vIEJ1aWxkIGEgbWVkaWEtcXVlcnkgc3RyaW5nIGZyb20gdmFyaW91cyBtZWRpYSBzZXR0aW5nc1xuQGZ1bmN0aW9uIHN1c3ktcmVuZGVyLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkb3V0cHV0OiBudWxsO1xuICBAZWFjaCAkcHJvcGVydHksICR2YWx1ZSBpbiAkcXVlcnkge1xuICAgICRzdHJpbmc6IG51bGw7XG5cbiAgICBAaWYgJHByb3BlcnR5ID09IG1lZGlhIHtcbiAgICAgICRzdHJpbmc6ICR2YWx1ZTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzdHJpbmc6ICcoI3skcHJvcGVydHl9OiAjeyR2YWx1ZX0pJztcbiAgICB9XG5cbiAgICAkb3V0cHV0OiBpZigkb3V0cHV0LCAnI3skb3V0cHV0fSBhbmQgI3skc3RyaW5nfScsICRzdHJpbmcpO1xuICB9XG5cbiAgQHJldHVybiAkb3V0cHV0O1xufVxuXG5cbi8vIFBhcnNlIE1lZGlhXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHBhcnNlZCBtZWRpYS1xdWVyeSBzZXR0aW5ncyBiYXNlZCBvbiBzaG9ydGhhbmRcbkBmdW5jdGlvbiBzdXN5LXBhcnNlLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkbXE6IG51bGw7XG4gIEBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbWFwIHtcbiAgICAkbXE6ICRxdWVyeTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbnVtYmVyIHtcbiAgICAkbXE6IChtaW4td2lkdGg6ICRxdWVyeSk7XG4gIH0gQGVsc2UgaWYgdHlwZS1vZigkcXVlcnkpID09IGxpc3QgYW5kIGxlbmd0aCgkcXVlcnkpID09IDIge1xuICAgIEBpZiB0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSBudW1iZXIge1xuICAgICAgJG1xOiAoXG4gICAgICAgIG1pbi13aWR0aDogbWluKCRxdWVyeS4uLiksXG4gICAgICAgIG1heC13aWR0aDogbWF4KCRxdWVyeS4uLiksXG4gICAgICApO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG1xOiAobnRoKCRxdWVyeSwgMSk6IG50aCgkcXVlcnksIDIpKTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICRtcTogKG1lZGlhOiAnI3skcXVlcnl9Jyk7XG4gIH1cblxuICBAcmV0dXJuICRtcTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JyZWFrcG9pbnQtcGx1Z2luLnNjc3NcbiAqKi8iLCIvLyByZW0gU3VwcG9ydFxuLy8gPT09PT09PT09PT1cblxuLy8gcmVtXG4vLyAtLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBvdXRwdXQgZGlyZWN0bHkuXG4vLyAtICRwcm9wICA6IDxjc3MgcHJvcGVydHk+XG4vLyAtICR2YWwgICA6IDxjc3MgdmFsdWU+XG5AbWl4aW4gc3VzeS1yZW0oXG4gICRwcm9wLFxuICAkdmFsXG4pIHtcbiAgJF9yZXFzOiAoXG4gICAgdmFyaWFibGU6IHJoeXRobS11bml0IHJlbS13aXRoLXB4LWZhbGxiYWNrLFxuICAgIG1peGluOiByZW0sXG4gICk7XG4gIEBpZiBzdXN5LXN1cHBvcnQocmVtLCAkX3JlcXMsICR3YXJuOiBmYWxzZSkgYW5kICRyaHl0aG0tdW5pdCA9PSByZW0ge1xuICAgIEBpbmNsdWRlIHJlbSgkcHJvcCwgJHZhbCk7XG4gIH0gQGVsc2Uge1xuICAgICN7JHByb3B9OiAkdmFsO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fcmVtLnNjc3NcbiAqKi8iLCIvLyBTcGFuIFN5bnRheFxuLy8gPT09PT09PT09PT1cblxuLy8gU3BhbiBbbWl4aW5dXG4vLyAtLS0tLS0tLS0tLS1cbi8vIFNldCBhIHNwYW5uaW5nIGVsZW1lbnQgdXNpbmcgc2hvcnRoYW5kIHN5bnRheC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gc3BhbihcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdDogJHNwYW47XG4gICRzcGFuOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJG91dHB1dDogc3Bhbi1tYXRoKCRzcGFuKTtcbiAgJG5lc3Rpbmc6IHN1c3ktZ2V0KHNwYW4sICRzcGFuKTtcbiAgJGNsZWFyOiBzdXN5LWdldChjbGVhciwgJHNwYW4pO1xuXG4gICRib3g6IHN1c3ktZ2V0KGJveC1zaXppbmcsICRzcGFuKTtcbiAgJGNvbnRlbnQtYm94OiBpZihzdXN5LWdldChnbG9iYWwtYm94LXNpemluZykgIT0gJ2JvcmRlci1ib3gnLCB0cnVlLCBmYWxzZSk7XG4gICRib3g6ICRib3ggb3IgaWYoaXMtaW5zaWRlKCRzcGFuKSBhbmQgJGNvbnRlbnQtYm94LCBib3JkZXItYm94LCBudWxsKTtcblxuICBAaWYgJGNsZWFyID09IGJyZWFrIHtcbiAgICBAaW5jbHVkZSBicmVhaztcbiAgfSBAZWxzZSBpZiAkY2xlYXIgPT0gbm9icmVhayB7XG4gICAgQGluY2x1ZGUgbm9icmVhaztcbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChzcGFuLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogJGJveCkpO1xuICBAaW5jbHVkZSBmbG9hdC1zcGFuLW91dHB1dCgkb3V0cHV0Li4uKTtcblxuICBAaWYgdmFsaWQtY29sdW1ucygkbmVzdGluZywgc2lsZW50KSB7XG4gICAgQGluY2x1ZGUgbmVzdGVkKCRzcGFuKSB7IEBjb250ZW50OyB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIFNwYW4gW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIHdpZHRoIG9mIGEgc3Bhbi5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AZnVuY3Rpb24gc3BhbihcbiAgJHNwYW5cbikge1xuICBAcmV0dXJuIGdldC1zcGFuLXdpZHRoKCRzcGFuKTtcbn1cblxuLy8gU3BhbiBNYXRoXG4vLyAtLS0tLS0tLS1cbi8vIEdldCBhbGwgdGhlIHNwYW4gcmVzdWx0cy5cbi8vIC0gJHNwYW46IDxtYXA+XG5AZnVuY3Rpb24gc3Bhbi1tYXRoKFxuICAkc3BhblxuKSB7XG4gICRuZXN0ICAgICAgICAgICAgIDogaWYoc3VzeS1nZXQocm9sZSwgJHNwYW4pID09IG5lc3QsIHRydWUsIGZhbHNlKTtcbiAgJHNwbGl0LW5lc3QgICAgICAgOiBpZihpcy1zcGxpdCgkc3BhbikgYW5kICRuZXN0LCB0cnVlLCBmYWxzZSk7XG4gICRlZGdlICAgICAgICAgICAgIDogZ2V0LWVkZ2UoJHNwYW4pO1xuICAkbG9jYXRpb24gICAgICAgICA6IGdldC1sb2NhdGlvbigkc3Bhbik7XG5cbiAgJGZsb2F0ICAgICAgICAgICAgOiBmcm9tO1xuICAkcGFkZGluZy1iZWZvcmUgICA6IG51bGw7XG4gICRwYWRkaW5nLWFmdGVyICAgIDogbnVsbDtcbiAgJG1hcmdpbi1iZWZvcmUgICAgOiBudWxsO1xuICAkbWFyZ2luLWFmdGVyICAgICA6IG51bGw7XG5cbiAgLy8gY2FsY3VsYXRlIHdpZHRoc1xuICAkc3ByZWFkOiBpbmRleChtYXAtdmFsdWVzKCRzcGFuKSwgc3ByZWFkKTtcbiAgJHNwYW46IGlmKCRzcGxpdC1uZXN0IGFuZCBub3QoJHNwcmVhZCksIG1hcC1tZXJnZSgkc3BhbiwgKHNwcmVhZDogd2lkZSkpLCAkc3Bhbik7XG4gICR3aWR0aDogZ2V0LXNwYW4td2lkdGgoJHNwYW4pO1xuICAkZ3V0dGVyczogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuXG4gIC8vIGFwcGx5IGd1dHRlcnNcbiAgQGlmIGlzLWluc2lkZSgkc3Bhbikge1xuICAgIEBpZiBub3Qoc3VzeS1nZXQocm9sZSwgJHNwYW4pKSB7XG4gICAgICAkcGFkZGluZy1iZWZvcmU6IG1hcC1nZXQoJGd1dHRlcnMsIGJlZm9yZSk7XG4gICAgICAkcGFkZGluZy1hZnRlcjogbWFwLWdldCgkZ3V0dGVycywgYWZ0ZXIpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGlmIG5vdCgkc3BsaXQtbmVzdCkge1xuICAgICAgJG1hcmdpbi1iZWZvcmU6IG1hcC1nZXQoJGd1dHRlcnMsIGJlZm9yZSk7XG4gICAgICAkbWFyZ2luLWFmdGVyOiBtYXAtZ2V0KCRndXR0ZXJzLCBhZnRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gc3BlY2lhbCBtYXJnaW4gaGFuZGxpbmdcbiAgQGlmIHN1c3ktZ2V0KG91dHB1dCwgJHNwYW4pID09IGlzb2xhdGUgYW5kICRsb2NhdGlvbiB7XG4gICAgJG1hcmdpbi1iZWZvcmU6IGdldC1pc29sYXRpb24oJHNwYW4pO1xuICAgICRtYXJnaW4tYWZ0ZXI6IC0xMDAlO1xuICB9IEBlbHNlIGlmICRlZGdlIHtcbiAgICAkaXMtc3BsaXQ6IGlzLXNwbGl0KCRzcGFuKTtcbiAgICAkcG9zOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKTtcblxuICAgIEBpZiAkZWRnZSA9PSBsYXN0IHtcbiAgICAgICRmbG9hdDogc3VzeS1nZXQobGFzdC1mbG93LCAkc3Bhbik7XG4gICAgfVxuXG4gICAgQGlmIG5vdCgkaXMtc3BsaXQpIHtcbiAgICAgIEBpZiAkZWRnZSA9PSBmdWxsIG9yICgkZWRnZSA9PSBmaXJzdCBhbmQgJHBvcyA9PSBiZWZvcmUpIHtcbiAgICAgICAgJG1hcmdpbi1iZWZvcmU6IDA7XG4gICAgICB9XG4gICAgICBAaWYgJGVkZ2UgPT0gZnVsbCBvciAoJGVkZ2UgPT0gbGFzdCBhbmQgJHBvcyA9PSBhZnRlcikge1xuICAgICAgICAkbWFyZ2luLWFmdGVyOiAwO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgQHJldHVybiAoXG4gICAgd2lkdGggICAgICAgICAgIDogJHdpZHRoLFxuICAgIGZsb2F0ICAgICAgICAgICA6ICRmbG9hdCxcbiAgICBtYXJnaW4tYmVmb3JlICAgOiAkbWFyZ2luLWJlZm9yZSxcbiAgICBtYXJnaW4tYWZ0ZXIgICAgOiAkbWFyZ2luLWFmdGVyLFxuICAgIHBhZGRpbmctYmVmb3JlICA6ICRwYWRkaW5nLWJlZm9yZSxcbiAgICBwYWRkaW5nLWFmdGVyICAgOiAkcGFkZGluZy1hZnRlcixcbiAgICBmbG93ICAgICAgICAgICAgOiBzdXN5LWdldChmbG93LCAkc3BhbiksXG4gICk7XG59XG5cbi8vIEdldCBTcGFuIFdpZHRoXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHNwYW4gd2lkdGguXG4vLyAtICRzcGFuOiA8bWFwPlxuQGZ1bmN0aW9uIGdldC1zcGFuLXdpZHRoKFxuICAkc3BhblxuKSB7XG4gICRzcGFuICAgICA6IHBhcnNlLXNwYW4oJHNwYW4pO1xuXG4gICRuICAgICAgICA6IHN1c3ktZ2V0KHNwYW4sICRzcGFuKTtcbiAgJGxvY2F0aW9uIDogZ2V0LWxvY2F0aW9uKCRzcGFuKTtcbiAgJGNvbHVtbnMgIDogc3VzeS1nZXQoY29sdW1ucywgJHNwYW4pO1xuICAkZ3V0dGVycyAgOiBzdXN5LWdldChndXR0ZXJzLCAkc3Bhbik7XG4gICRzcHJlYWQgICA6IHN1c3ktZ2V0KHNwcmVhZCwgJHNwYW4pO1xuXG4gICRjb250ZXh0ICA6IG51bGw7XG4gICRzcGFuLXN1bSA6IG51bGw7XG4gICR3aWR0aCAgICA6IG51bGw7XG5cbiAgQGlmICRuID09ICdmdWxsJyB7XG4gICAgJHBvczogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3Bhbik7XG4gICAgJHJvbGU6IHN1c3ktZ2V0KHJvbGUsICRzcGFuKTtcbiAgICAkbjogaWYoJHBvcyA9PSBzcGxpdCBhbmQgJHJvbGUgIT0gbmVzdCwgc3VzeS1jb3VudCgkY29sdW1ucyksIDEwMCUpO1xuICB9XG5cbiAgQGlmIHR5cGUtb2YoJG4pICE9IG51bWJlciB7XG4gICAgQHdhcm4gXCIoI3t0eXBlLW9mKCRuKX0pICN7JG59IGlzIG5vdCBhIHZhbGlkIHNwYW4uXCI7XG4gIH0gQGVsc2UgaWYgdW5pdGxlc3MoJG4pIHtcbiAgICAkY29udGV4dDogc3VzeS1zdW0oJGNvbHVtbnMsICRndXR0ZXJzLCBpZihpcy1zcGxpdCgkc3BhbiksIHdpZGUsIG5hcnJvdykpO1xuICAgICRzcHJlYWQ6IGlmKGlzLWluc2lkZSgkc3BhbiksICRzcHJlYWQgb3Igd2lkZSwgJHNwcmVhZCk7XG4gICAgJHNwYW4tc3VtOiBzdXN5KCRuLCAkbG9jYXRpb24sICRjb2x1bW5zLCAkZ3V0dGVycywgJHNwcmVhZCk7XG5cbiAgICAkX21hdGg6IHN1c3ktZ2V0KG1hdGgsICRzcGFuKTtcbiAgICAkX2NvbHVtbi13aWR0aDogc3VzeS1nZXQoY29sdW1uLXdpZHRoLCAkc3Bhbik7XG4gICAgQGlmICRfbWF0aCA9PSBzdGF0aWMge1xuICAgICAgJHdpZHRoOiAkc3Bhbi1zdW0gKiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICR3aWR0aDogcGVyY2VudGFnZSgkc3Bhbi1zdW0gLyAkY29udGV4dCk7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICAkd2lkdGg6ICRuO1xuICB9XG5cbiAgQHJldHVybiAkd2lkdGg7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19zcGFuLnNjc3NcbiAqKi8iLCIvLyBEaXJlY3Rpb24gSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBGbG93IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGZsb3c6IGx0cixcbikpO1xuXG4vLyBHZXQgRGlyZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlICdmcm9tJyBvciAndG8nIGRpcmVjdGlvbiBvZiBhIGx0ciBvciBydGwgZmxvdy5cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbi8vIC0gWyRrZXldICAgOiBmcm9tIHwgdG9cbkBmdW5jdGlvbiBnZXQtZGlyZWN0aW9uKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdyksXG4gICRrZXk6IGZyb21cbikge1xuICAkcmV0dXJuOiBpZigkZmxvdyA9PSBydGwsIChmcm9tOiByaWdodCwgdG86IGxlZnQpLCAoZnJvbTogbGVmdCwgdG86IHJpZ2h0KSk7XG4gIEByZXR1cm4gbWFwLWdldCgkcmV0dXJuLCAka2V5KTtcbn1cblxuLy8gVG9cbi8vIC0tXG4vLyBSZXR1cm4gdGhlICd0bycgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIHRvKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICBAcmV0dXJuIGdldC1kaXJlY3Rpb24oJGZsb3csIHRvKTtcbn1cblxuLy8gRnJvbVxuLy8gLS0tLVxuLy8gUmV0dXJuIHRoZSAnZnJvbScgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIGZyb20oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gIEByZXR1cm4gZ2V0LWRpcmVjdGlvbigkZmxvdywgZnJvbSk7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19kaXJlY3Rpb24uc2Nzc1xuICoqLyIsIi8vIEd1dHRlciBTeW50YXhcbi8vID09PT09PT09PT09PT1cblxuXG4vLyBHdXR0ZXJzXG4vLyAtLS0tLS0tXG4vLyBTZXQgZ3V0dGVycyBvbiBhbiBlbGVtZW50LlxuLy8gLSBbJHNwYW5dICAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gZ3V0dGVycyhcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IHBhcnNlLWd1dHRlcnMoJHNwYW4pO1xuICAkX2d1dHRlcnMgOiBnZXQtZ3V0dGVycygkc3Bhbik7XG5cbiAgJF9vdXRwdXQ6IChcbiAgICBiZWZvcmU6IG1hcC1nZXQoJF9ndXR0ZXJzLCBiZWZvcmUpLFxuICAgIGFmdGVyOiBtYXAtZ2V0KCRfZ3V0dGVycywgYWZ0ZXIpLFxuICAgIGZsb3c6IHN1c3ktZ2V0KGZsb3csICRzcGFuKSxcbiAgKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZ3V0dGVycywgJGluc3BlY3QpO1xuXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nLW91dHB1dCgkX291dHB1dC4uLik7XG4gIH0gQGVsc2Uge1xuICAgIEBpbmNsdWRlIG1hcmdpbi1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICB9XG59XG5cbkBtaXhpbiBndXR0ZXIoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIGd1dHRlcnMoJHNwYW4pO1xufVxuXG5cbi8vIEd1dHRlclxuLy8gLS0tLS0tXG4vLyBSZXR1cm4gdGhlIHdpZHRoIG9mIGEgZ3V0dGVyLlxuLy8gLSBbJHNwYW5dICAgOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ3V0dGVyKFxuICAkc3BhbjogJHN1c3lcbikge1xuICAkc3BhbjogcGFyc2UtZ3V0dGVycygkc3Bhbik7XG5cbiAgJF9ndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG4gICRfZ3V0dGVyczogbWFwLWdldCgkX2d1dHRlcnMsIGJlZm9yZSkgb3IgbWFwLWdldCgkX2d1dHRlcnMsIGFmdGVyKTtcblxuICBAcmV0dXJuICRfZ3V0dGVycztcbn1cblxuQGZ1bmN0aW9uIGd1dHRlcnMoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gIEByZXR1cm4gZ3V0dGVyKCRzcGFuKTtcbn1cblxuXG4vLyBHZXQgR3V0dGVyIFdpZHRoXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gZ3V0dGVyIHdpZHRoLlxuLy8gLSBbJGNvbnRleHRdOiA8Y29udGV4dD5cbkBmdW5jdGlvbiBnZXQtZ3V0dGVyLXdpZHRoKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkY29udGV4dCAgOiBwYXJzZS1ndXR0ZXJzKCRjb250ZXh0KTtcblxuICAkX2d1dHRlcnMgOiBzdXN5LWdldChndXR0ZXJzLCAkY29udGV4dCk7XG4gICRfZ3V0dGVyICA6IHN1c3ktZ2V0KGd1dHRlci1vdmVycmlkZSwgJGNvbnRleHQpO1xuXG4gIEBpZiAkX2d1dHRlcnMgYW5kICgkX2d1dHRlcnMgPiAwKSBhbmQgbm90KCRfZ3V0dGVyKSB7XG4gICAgJF9jb2x1bW4td2lkdGg6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJGNvbnRleHQpO1xuICAgICRfbWF0aDogZ3V0dGVyLW1hdGgoJGNvbnRleHQpO1xuICAgIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAgICRfZ3V0dGVyOiAkX2d1dHRlcnMgKiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfY29sdW1ucyA6IHN1c3ktZ2V0KGNvbHVtbnMsICRjb250ZXh0KTtcbiAgICAgICRfc3ByZWFkICA6IGlmKGlzLXNwbGl0KCRjb250ZXh0KSwgd2lkZSwgc3VzeS1nZXQoc3ByZWFkLCAkY29udGV4dCkpO1xuICAgICAgJF9ndXR0ZXIgIDogcGVyY2VudGFnZSgkX2d1dHRlcnMgLyBzdXN5LXN1bSgkX2NvbHVtbnMsICRfZ3V0dGVycywgJF9zcHJlYWQpKTtcbiAgICB9XG4gIH1cblxuICAkX2d1dHRlcjogaWYoJF9ndXR0ZXIgPT0gJ25vLWd1dHRlcnMnIG9yICRfZ3V0dGVyID09ICduby1ndXR0ZXInLCBudWxsLCAkX2d1dHRlcik7XG5cbiAgQHJldHVybiAkX2d1dHRlcjtcbn1cblxuXG4vLyBHZXQgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS1cbi8vIFJldHVybiBiZWZvcmUgYW5kIGFmdGVyIGd1dHRlciB2YWx1ZXMuXG4vLyAtIFskY29udGV4dF06IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGdldC1ndXR0ZXJzKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkY29udGV4dCAgICAgICAgICAgIDogcGFyc2UtZ3V0dGVycygkY29udGV4dCk7XG5cbiAgJF9ndXR0ZXItcG9zaXRpb24gICA6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuICAkX2d1dHRlciAgICAgICAgICAgIDogZ2V0LWd1dHRlci13aWR0aCgkY29udGV4dCk7XG5cbiAgJF9yZXR1cm4gICAgICAgICAgICA6IChiZWZvcmU6IG51bGwsIGFmdGVyOiBudWxsKTtcblxuICBAaWYgaXMtc3BsaXQoJGNvbnRleHQpIGFuZCAkX2d1dHRlciB7XG4gICAgJF9ndXR0ZXI6ICRfZ3V0dGVyIC8gMjtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoYmVmb3JlOiAkX2d1dHRlciwgYWZ0ZXI6ICRfZ3V0dGVyKSk7XG4gIH0gQGVsc2Uge1xuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICgkX2d1dHRlci1wb3NpdGlvbjogJF9ndXR0ZXIpKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gSXMgSW5zaWRlXG4vLyAtLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBndXR0ZXJzIGFyZSBpbnNpZGUuXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gaXMtaW5zaWRlKFxuICAkY29udGV4dFxuKSB7XG4gICRfaW5zaWRlOiBpbnNpZGUgaW5zaWRlLXN0YXRpYztcbiAgJF9ndXR0ZXItcG9zaXRpb246IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gaWYoaW5kZXgoJF9pbnNpZGUsICRfZ3V0dGVyLXBvc2l0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xufVxuXG5cbi8vIElzIFNwbGl0XG4vLyAtLS0tLS0tLVxuLy8gUmV0dXJucyB0cnVlIGlmIGd1dHRlcnMgYXJlIHNwbGl0LlxuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGlzLXNwbGl0KFxuICAkY29udGV4dFxuKSB7XG4gICRfc3BsaXQ6IHNwbGl0IGluc2lkZSBpbnNpZGUtc3RhdGljO1xuICAkX2d1dHRlci1wb3NpdGlvbjogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCk7XG5cbiAgQHJldHVybiBpZihpbmRleCgkX3NwbGl0LCAkX2d1dHRlci1wb3NpdGlvbiksIHRydWUsIGZhbHNlKTtcbn1cblxuXG4vLyBHdXR0ZXIgTWF0aFxuLy8gLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgbWF0aCB0byB1c2UgZm9yIGd1dHRlciBjYWxjdWxhdGlvbnNcbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBndXR0ZXItbWF0aChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJF9yZXR1cm4gIDogc3VzeS1nZXQobWF0aCwgJGNvbnRleHQpO1xuICAkX3JldHVybiAgOiBpZihzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KSA9PSBpbnNpZGUtc3RhdGljLCBzdGF0aWMsICRfcmV0dXJuKTtcblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fZ3V0dGVycy5zY3NzXG4gKiovIiwiJGNvbG9yczogKGV4dHJhLWRhcms6IChvcmFuZ2U6ICNEODJFMTgseWVsbG93OiAjRjk4RTAwLGdyZWVuOiAjMDA4OTUxLGJsdWU6ICMwMDVGRDEscHVycGxlOiAjNEYwMjk5LHBpbms6ICNBMDE3NDQpLGRhcms6IChvcmFuZ2U6ICNGNDVEMjIseWVsbG93OiAjRkZBRDFGLGdyZWVuOiAjMUZCNjUwLGJsdWU6ICMxREExRjIscHVycGxlOiAjNzk0QkM0LHBpbms6ICNFMDI0NUUpLGxpZ2h0OiAob3JhbmdlOiAjRkY4RDU3LHllbGxvdzogI0ZGRDAzRixncmVlbjogIzY4RTA5MCxibHVlOiAjNzFDOUY4LHB1cnBsZTogI0EzN0NFRCxwaW5rOiAjRjY4MDlBKSxleHRyYS1saWdodDogKG9yYW5nZTogI0ZGQkU3OCx5ZWxsb3c6ICNGRkU3NkUsZ3JlZW46ICNBNUYyQUEsYmx1ZTogIzk3RTNGRixwdXJwbGU6ICNDN0I0RkEscGluazogI0ZGQjhDMiksbmV1dHJhbDogKGJsYWNrOiAjMTQxNzFBLGRhcmstZ3JheTogIzY1Nzc4NixsaWdodC1ncmF5OiAjQUFCOEMyLGV4dHJhLWxpZ2h0LWdyYXk6ICNDQ0Q2REQsZXh0cmEtZXh0cmEtbGlnaHQtZ3JheTogI0Y1RjhGQSx3aGl0ZTogI0ZGRkZGRikpO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3ZhcmlhYmxlcy9jb2xvcnMuanNvblxuICoqLyIsIkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2JyZWFrcG9pbnRzLmpzb24nO1xuQGltcG9ydCAnY29yZS9zdHlsZS9ncmlkJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb24nO1xuXG4kdHJhbnNpdGlvblRpbWluZzogbWFwLWdldCgkdHJhbnNpdGlvbnMsIGhvdmVyLXRpbWluZyk7XG4kdHJhbnNpdGlvbkVhc2luZzogbWFwLWdldCgkdHJhbnNpdGlvbnMsIGhvdmVyLWVhc2luZyk7XG5cbi5iMDItYmxvZy1wb3N0LW5vLW1hc3RoZWFkIHtcbiAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDUpO1xuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDgpO1xuICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDUpO1xuICB9XG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuICAmX190aXRsZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMyk7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICB9XG4gICZfX3RvcGljIHtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgxKTtcbiAgfVxuICAmX19pbmZvIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBwYWRkaW5nLXJpZ2h0OiBiYXNlbGluZSgxKTtcbiAgfVxuICAmX19kYXRlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IGJhc2VsaW5lKDEuMjUpO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG4gICZfX3NoYXJlLS1pY29ucyB7XG4gICAgbWFyZ2luLXRvcDpiYXNlbGluZSgyKTtcbiAgICBtYXJnaW4tYm90dG9tOmJhc2VsaW5lKDUpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1pbi13aWR0aDogMTQwcHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoNSk7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbiAgICBhIHtcbiAgICAgIHBhZGRpbmctbGVmdDogYmFzZWxpbmUoMSk7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBzdmcge1xuICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAtNHB4O1xuICAgICAgICBmaWxsOiBjb2xvcihuZXV0cmFsLCBsaWdodC1ncmF5KTtcbiAgICAgICAgdHJhbnNpdGlvbjogZmlsbCAkdHJhbnNpdGlvblRpbWluZyAkdHJhbnNpdGlvbkVhc2luZztcbiAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgIH1cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgZmlsbDogY29sb3IobmV1dHJhbCwgZGFyay1ncmF5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFkZGluZy1sZWZ0OiA0NHB4O1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IGJhc2VsaW5lKDUvNik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjbGVhcjogYm90aDtcbiAgfVxuICAucG9zdCB7XG4gICAgJl9fc2hhcmUtLWNvcHktbGluayB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICAgICZfX3NoYXJlLS1jb3B5LWxpbmstcG9wdXAge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgbWluLXdpZHRoOiAxMTBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IGJhc2VsaW5lKDEvNik7XG4gICAgICBoZWlnaHQ6IGJhc2VsaW5lKDMpO1xuICAgICAgcGFkZGluZzogMCBiYXNlbGluZSgxKTtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGRhcmstZ3JheSk7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQsIDAuNDQsIDEpO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDJweCAycHggY29sb3IobmV1dHJhbCwgZXh0cmEtbGlnaHQtZ3JheSk7XG4gICAgICAmLnNob3cge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgfVxuICAgICAgc3ZnIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IC0xMXB4O1xuICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICByaWdodDogNTAlO1xuICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDAgY29sb3IobmV1dHJhbCwgZXh0cmEtbGlnaHQtZ3JheSkpO1xuICAgICAgICBwYXRoIHtcbiAgICAgICAgICBmaWxsOiBjb2xvcihuZXV0cmFsLCB3aGl0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJl9fc2hhcmUtLWNvcHktbGluay1wb3B1cC1jb250ZW50IHtcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICB9XG4gIC5zZWNvbmQtbGluZSB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDAyLWJsb2ctcG9zdC10ZXh0LW1hc3RoZWFkL3dlYnBhY2svaW5kZXguc2Nzc1xuICoqLyIsIiR0cmFuc2l0aW9uczogKGhvdmVyLXRpbWluZzogMC4zcyxob3Zlci1lYXNpbmc6IGVhc2UtaW4tb3V0LGNvbG9yLWNoYW5nZS10aW1pbmc6IDFzLGNvbG9yLWNoYW5nZS1lYXNpbmc6IGVhc2UtaW4tb3V0LGxvYWRlci1iaXJkLXRpbWluZzogMC4zcyxsb2FkZXItYmlyZC1lYXNpbmc6IGVhc2UtaW4pO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb25cbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5cbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuXG4uYmwwNi1hdXRob3ItY2FyZC1tYXN0aGVhZCB7XG4gIEBpbmNsdWRlIHNwYW4oMTIpO1xuICBmbG9hdDogbm9uZTtcblxuICAmX19jb250ZW50IHtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSg4KTtcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgd2lkdGg6IDE4NXB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICBpbWcge1xuICAgIHdpZHRoOiAxMDhweDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogYmFzZWxpbmUoOCk7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMyk7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyg1MCUpO1xuICAgIGZsb2F0OiBub25lO1xuICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxuXG4gIC5hdXRob3JpbmZvIHtcbiAgICAmX19uYW1lIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKC41KTtcbiAgICAgIGNvbG9yOiBjb2xvcihuZXV0cmFsLCBibGFjayk7XG4gICAgfVxuXG4gICAgJl9faGFuZGxlIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDEpO1xuICAgICAgYSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgJl9fZGVzY3JpcHRpb24ge1xuICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGRhcmstZ3JheSk7XG4gICAgfVxuICAgIHA6bGFzdC1vZi10eXBlIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDgpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDYtYXV0aG9yLWNhcmQtbWFzdGhlYWQvd2VicGFjay9pbmRleC5zY3NzXG4gKiovIiwiQGltcG9ydCAnY29yZS92YXJpYWJsZXMvYnJlYWtwb2ludHMuanNvbic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuXG5AaW1wb3J0ICdjb3JlL3N0eWxlL21peGluJztcbi5ibDA3LWF1dGhvci1jYXJkIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiBiYXNlbGluZSgyKTtcbiAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDMpO1xuICBwYWRkaW5nLWJvdHRvbTogYmFzZWxpbmUoMyk7XG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICBtYXJnaW4tdG9wOiBiYXNlbGluZSg1KTtcbiAgICBtYXgtd2lkdGg6IDE4NXB4O1xuICB9XG4gICsgLmJsMDctYXV0aG9yLWNhcmQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGNvbG9yKG5ldXRyYWwsIGxpZ2h0LWdyYXkpO1xuICB9XG4gIGltZyB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyg1MCUpO1xuICAgIHdpZHRoOiAxMDhweDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMSk7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgIH1cbiAgfVxuICAucHJvZmlsZS1pY29uIHtcbiAgICB3aWR0aDogMTA4cHg7XG4gICAgaGVpZ2h0OiAxMDhweDtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgxKTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cyg1MCUpO1xuICAgIC5wcm9maWxlLWljb24tY2FyZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBzdmcge1xuICAgICAgICBmaWxsOiBjb2xvcihuZXV0cmFsLCB3aGl0ZSk7XG4gICAgICAgIHdpZHRoOiA3MnB4O1xuICAgICAgICBoZWlnaHQ6IDcycHg7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgfVxuICB9XG4gIC5hdXRob3JpbmZvIHtcbiAgICBtaW4taGVpZ2h0OiAxMDhweDtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBtaW4taGVpZ2h0OiAxcHg7XG4gICAgfVxuICAgICZfX25hbWUge1xuICAgICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoLjUpO1xuICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGJsYWNrKTtcbiAgICB9XG4gICAgJl9faGFuZGxlIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDEpO1xuICAgICAgYSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgJl9fZGVzY3JpcHRpb24ge1xuICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGxpZ2h0LWdyYXkpO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qIGFkZCB0b3AgbWFyZ2luIG9ubHkgd2hlbiB0aGUgYXV0aG9yIGNhcmQgYXBwZWFycyBvbiBhIHBvc3QgcGFnZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIG1lZGlhIG1hc3RoZWFkKi9cbi5wb3N0LXBhZ2UgLmJsMDctYXV0aG9yLWNhcmQ6Zmlyc3Qtb2YtdHlwZSxcbi5hZHZhbmNlZC1wb3N0LXBhZ2UgLmJsMDctYXV0aG9yLWNhcmQ6Zmlyc3Qtb2YtdHlwZSxcbi5pbnNpZ2h0LXBvc3QtcGFnZSAuYmwwNy1hdXRob3ItY2FyZDpmaXJzdC1vZi10eXBlICxcbi5hbm5vdW5jZW1lbnQtcG9zdC1wYWdlIC5ibDA3LWF1dGhvci1jYXJkOmZpcnN0LW9mLXR5cGUsXG4uYmFzaWMtcG9zdC1wYWdlIC5ibDA3LWF1dGhvci1jYXJkOmZpcnN0LW9mLXR5cGUsXG4uc3BvdGxpZ2h0LXBvc3QtcGFnZSAuYmwwNy1hdXRob3ItY2FyZDpmaXJzdC1vZi10eXBlICB7XG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICBtYXJnaW4tdG9wOiAxMDFweDtcbiAgfVxufVxuXG4vKiByZW1vdmUgdG9wIG1hcmdpbiBhbmQgcGFkZGluZyBvbmx5IHdoZW4gdGhlIGF1dGhvciBjYXJkIGFwcGVhcnMgb24gYSBwYWdlIHdpdGggYSBtZWRpYSBtYXN0aGVhZCAqL1xuLmJsMDEtYmxvZy1wb3N0LW1hc3RoZWFkIH4gLmJsMTgtbGVmdC1yYWlsLWJsb2ctY29udGFpbmVyIC5ibDA3LWF1dGhvci1jYXJkOmZpcnN0LW9mLXR5cGUge1xuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDctYXV0aG9yLWNhcmQvd2VicGFjay9pbmRleC5zY3NzXG4gKiovIiwiLmJsMDdhLWF1dGhvci1jYXJkLWNvbmZpZ3VyYXRpb24ge1xuICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgyKTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDA3YS1hdXRob3ItY2FyZC1jb25maWd1cmF0aW9uL3dlYnBhY2svaW5kZXguc2Nzc1xuICoqLyIsIkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5cbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuLm9ubHktb24tdHdpdHRlciB7XG4gIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDQpO1xuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgbWF4LXdpZHRoOiAxODVweDtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgzKTtcbiAgfVxuICAmX19rZXktbGluZSB7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBjb2xvcihuZXV0cmFsLCBsaWdodC1ncmF5KTtcbiAgICBtYXJnaW4tbGVmdDogLTUuMnZ3O1xuICAgIHBhZGRpbmctdG9wOiBiYXNlbGluZSg0KTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIG1vYmlsZSkpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtNi42dnc7XG4gICAgfVxuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGNvbG9yKG5ldXRyYWwsIGxpZ2h0LWdyYXkpO1xuICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgICBwYWRkaW5nLXRvcDogYmFzZWxpbmUoMyk7XG4gICAgfVxuICB9XG4gIHVsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaSB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICB9XG4gICAgICBhIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IGJhc2VsaW5lKDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAmX190YWctLXRpdGxlIHtcbiAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksIGJvbGQtMjQpKTtcbiAgICBjb2xvcjogY29sb3IobmV1dHJhbCwgYmxhY2spO1xuICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSgyKTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksIGJvbGQtMTQpKTtcbiAgICAgIGNvbG9yOiBjb2xvcihuZXV0cmFsLCBsaWdodC1ncmF5KTtcbiAgICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSgxKTtcbiAgICB9XG4gIH1cbiAgJl9fdGFnIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDA4LW9ubHktb24tdHdpdHRlci93ZWJwYWNrL2luZGV4LnNjc3NcbiAqKi8iLCIkdHlwb2dyYXBoeTogKGRlZmF1bHQ6IChib2xkLTE0NDogKHdlaWdodDogNzAwLHNpemU6IDgsbGluZS1oZWlnaHQ6IDgsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTk2OiAod2VpZ2h0OiA3MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtNzI6ICh3ZWlnaHQ6IDcwMCxzaXplOiA1LGxpbmUtaGVpZ2h0OiA1LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tNzI6ICh3ZWlnaHQ6IDQwMCxzaXplOiA1LGxpbmUtaGVpZ2h0OiA1LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC00ODogKHdlaWdodDogNzAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi00ODogKHdlaWdodDogNDAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTM2OiAod2VpZ2h0OiA3MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTM2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMjQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAyLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTI0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMixsaW5lLWhlaWdodDogMix0cmFja2luZzogMTUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNjogKHdlaWdodDogNzAwLHNpemU6IDEuMzMsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4zMyxsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNDogKHdlaWdodDogNzAwLHNpemU6IDEuMTYsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDMwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4xNixsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCkpLHJlc3BvbnNpdmU6IChmdWxsOiAoYm9sZC0xNDQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxMixsaW5lLWhlaWdodDogMTIsdHJhY2tpbmc6IC0yMDAsbWFyZ2luLWJvdHRvbTogMCksYm9sZC05NjogKHdlaWdodDogNzAwLHNpemU6IDgsbGluZS1oZWlnaHQ6IDgsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTcyOiAod2VpZ2h0OiA3MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTcyOiAod2VpZ2h0OiA0MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtNDg6ICh3ZWlnaHQ6IDcwMCxzaXplOiA0LGxpbmUtaGVpZ2h0OiA0LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tNDg6ICh3ZWlnaHQ6IDQwMCxzaXplOiA0LGxpbmUtaGVpZ2h0OiA0LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0zNjogKHdlaWdodDogNzAwLHNpemU6IDMsbGluZS1oZWlnaHQ6IDMsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0zNjogKHdlaWdodDogNDAwLHNpemU6IDMsbGluZS1oZWlnaHQ6IDMsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTI0OiAod2VpZ2h0OiA3MDAsc2l6ZTogMixsaW5lLWhlaWdodDogMix0cmFja2luZzogMCxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0yNDogKHdlaWdodDogNDAwLHNpemU6IDIsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDE1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMTY6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxLjMzLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAyNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0xNjogKHdlaWdodDogNDAwLHNpemU6IDEuMzMsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMTQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxLjE2LGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAzMCxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0xNDogKHdlaWdodDogNDAwLHNpemU6IDEuMTYsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApKSkpO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3ZhcmlhYmxlcy90eXBvZ3JhcGh5Lmpzb25cbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2NvbG9ycy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5cbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuXG4uYmwwOS1yZWxhdGVkIHtcbiAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDIpO1xuICBjbGVhcjogYm90aDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC8qIG5lZ2F0ZXMgbWFyZ2luLXRvcCBvbiBmb290ZXIgKi9cbiAgbWFyZ2luLWJvdHRvbTogLSBiYXNlbGluZSgzKTtcbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDUpO1xuICB9XG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuICAmX190aXRsZSB7XG4gICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGJsYWNrKTtcbiAgICBAaW5jbHVkZSBzcGFuKDEyKTtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSg0KTtcbiAgICBwYWRkaW5nLXJpZ2h0OiBiYXNlbGluZSgxKTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDIpO1xuICAgICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMSk7XG4gICAgfVxuICB9XG4gICZfX2xpc3QsXG4gICZfX2FjY291bnQge1xuICAgIEBpbmNsdWRlIHNwYW4oMTIpO1xuICAgIGZsb2F0OiBub25lO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oNik7XG4gICAgICBAaW5jbHVkZSBwdXNoKDIpO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuICB9XG4gICZfX3Bvc3QsXG4gICZfX2FjY291bnQge1xuICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSg0KTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3IobmV1dHJhbCwgbGlnaHQtZ3JheSk7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoNCk7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiBiYXNlbGluZSgyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1ib3R0b206IHRyYW5zcGFyZW50O1xuICAgICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMik7XG4gICAgfVxuICAgICYtdGl0bGUge1xuICAgIH1cbiAgfVxuICAmX19hY2NvdW50d3JhcCB7XG4gICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDIpO1xuICB9XG4gICZfX2FjY291bnQge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIGltZyB7XG4gICAgICB3aWR0aDogMTA4cHg7XG4gICAgICBoZWlnaHQ6IDEwOHB4O1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDUwJSk7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgfVxuICAgICZuYW1lLFxuICAgICZoYW5kbGUsXG4gICAgJmRlc2NyaXB0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAmaGFuZGxlIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDEpO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1wb3N0L2JsMDktcmVsYXRlZC1wb3N0cy93ZWJwYWNrL2luZGV4LnNjc3NcbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL3R5cG9ncmFwaHkuanNvbic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuQGltcG9ydCAnY29yZS9zdHlsZS9taXhpbic7XG5AaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9tb3Rpb24uanNvbic7XG5cbiR0cmFuc2l0aW9uVGltaW5nOiBtYXAtZ2V0KCR0cmFuc2l0aW9ucywgaG92ZXItdGltaW5nKTtcbiR0cmFuc2l0aW9uRWFzaW5nOiBtYXAtZ2V0KCR0cmFuc2l0aW9ucywgaG92ZXItZWFzaW5nKTtcblxuLmJsMTAtcG9zdC10YWdzLXNoYXJlIHtcbiAgLnBvc3RfX2tleS1saW5lIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3IobmV1dHJhbCwgbGlnaHQtZ3JheSk7XG4gIH1cbiAgLnBvc3Qge1xuICAgIHBhZGRpbmc6IGJhc2VsaW5lKDQpIDA7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgQGluY2x1ZGUgc3Bhbig2KTtcbiAgICAgIEBpbmNsdWRlIHB1c2goNCk7XG4gICAgfVxuICAgICZfX3RhZ3Mge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgQGluY2x1ZGUgc3Bhbig0IG9mIDYpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfVxuICAgICAgJi0tdGl0bGUge1xuICAgICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksIGJvbGQtMjQpKTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgICAgICBjb2xvcjogY29sb3IobmV1dHJhbCwgYmxhY2spO1xuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcyhtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIGRlZmF1bHQpLCBib2xkLTE0KSk7XG4gICAgICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGxpZ2h0LWdyYXkpO1xuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogYmFzZWxpbmUoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHVsIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGkge1xuICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogYmFzZWxpbmUoMS4yNSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGEge1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgIH1cbiAgICB9XG4gICAgJl9fc2hhcmUtLWljb25zIHtcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICBAaW5jbHVkZSBzcGFuKDIgb2YgNiBsYXN0KTtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICB9XG4gICAgICBhIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBiYXNlbGluZSgzLjY2KTtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgPiBzdmcge1xuICAgICAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgICBmaWxsOiBjb2xvcihuZXV0cmFsLCBsaWdodC1ncmF5KTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBmaWxsICR0cmFuc2l0aW9uVGltaW5nICR0cmFuc2l0aW9uRWFzaW5nO1xuICAgICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgID4gc3ZnIHtcbiAgICAgICAgICAgIGZpbGw6IGNvbG9yKG5ldXRyYWwsIGRhcmstZ3JheSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGJhc2VsaW5lKDUvNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbiAgICAmX19zaGFyZS0tY29weS1saW5rIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgJl9fc2hhcmUtLWNvcHktbGluay1wb3B1cCB7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogYmFzZWxpbmUoMS82KTtcbiAgICAgIGhlaWdodDogYmFzZWxpbmUoMyk7XG4gICAgICBwYWRkaW5nOiAwIGJhc2VsaW5lKDEpO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGRhcmstZ3JheSk7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQsIDAuNDQsIDEpO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDJweCAycHggY29sb3IobmV1dHJhbCwgZXh0cmEtbGlnaHQtZ3JheSk7XG4gICAgICAmLnNob3cge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgfVxuICAgICAgc3ZnIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IC0xNXB4O1xuICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICByaWdodDogNTAlO1xuICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDAgY29sb3IobmV1dHJhbCwgZXh0cmEtbGlnaHQtZ3JheSkpO1xuICAgICAgICBwYXRoIHtcbiAgICAgICAgICBmaWxsOiBjb2xvcihuZXV0cmFsLCB3aGl0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJl9fc2hhcmUtLWNvcHktbGluay1wb3B1cC1jb250ZW50IHtcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy9ibG9nLXBvc3QvYmwxMC1wb3N0LXRhZ3Mtc2hhcmUvd2VicGFjay9pbmRleC5zY3NzXG4gKiovIiwiQGltcG9ydCAnY29yZS92YXJpYWJsZXMvY29sb3JzLmpzb24nO1xuQGltcG9ydCAnY29yZS9zdHlsZS9ncmlkJztcblxuQGltcG9ydCAnY29yZS9zdHlsZS9taXhpbic7XG5cbi50YWctYmlsbGJvYXJkIHtcbiAgY2xlYXI6IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDUpO1xuXG4gICZfX3RpdGxlLFxuICAmX190YWctbGlzdCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDEwKTtcbiAgICAgIEBpbmNsdWRlIHB1c2goMSk7XG4gICAgICBmbG9hdDogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmX190aXRsZSB7XG4gICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGJsYWNrKTtcblxuICAgICYtLWtleWxpbmUtdG9wIHtcbiAgICAgIHBhZGRpbmctdG9wOiBiYXNlbGluZSg1KTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBjb2xvcihuZXV0cmFsLCBsaWdodC1ncmF5KTtcbiAgICB9XG4gIH1cblxuICAmX190YWctbGlzdCB7XG4gICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDUpO1xuICAgIG1hcmdpbjogYmFzZWxpbmUoNCkgYXV0byAwO1xuXG4gICAgJi0ta2V5bGluZS1ib3R0b20ge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGNvbG9yKG5ldXRyYWwsIGxpZ2h0LWdyYXkpO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSg4KTtcbiAgICB9XG5cbiAgICAmLS1rZXlsaW5lLXRvcCB7XG4gICAgICBtYXJnaW4tdG9wOiBiYXNlbGluZSg0KTtcbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIG1hcmdpbi10b3A6IGJhc2VsaW5lKDMpO1xuICAgIH1cbiAgfVxuXG4gICZfX3RhZyxcbiAgJl9fY29tbWEge1xuICAgIEBpbmNsdWRlIGZvbnQoYm9sZC0zNik7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgQGluY2x1ZGUgZm9udChib2xkLTQ4KTtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctcG9zdC9ibDEyLXRhZy1iaWxsYm9hcmQvd2VicGFjay9pbmRleC5zY3NzXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ==*/