/*

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>

*/
.bl03-featured-masthead {
  height: 39.75rem;
  margin-bottom: 3.75rem; }
  @media (min-width: 768px) {
    .bl03-featured-masthead {
      margin-bottom: 6rem;
      min-height: 37.5rem; } }
  @media (min-width: 768px) {
    .bl03-featured-masthead .container {
      margin: 0; } }
  .bl03-featured-masthead__bgwrapper, .bl03-featured-masthead__bgImg {
    width: 100%;
    height: 37.5rem;
    margin: 0;
    padding: 0;
    overflow: hidden;
    position: relative;
    background-size: cover;
    background-repeat: no-repeat;
    background-position: top center;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end; }
  .bl03-featured-masthead__overlay {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: #14171A;
    opacity: 0;
    z-index: 2; }
    .bl03-featured-masthead__overlay.lowTint {
      opacity: .1; }
    .bl03-featured-masthead__overlay.medTint {
      opacity: .2; }
    .bl03-featured-masthead__overlay.highTint {
      opacity: .3; }
  .bl03-featured-masthead__bgImg {
    position: absolute;
    opacity: 1;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0; }
  .bl03-featured-masthead__text {
    -ms-flex-item-align: end;
        align-self: flex-end;
    position: relative;
    z-index: 2;
    margin-bottom: 3rem;
    padding-top: 7.5rem;
    width: 100%; }
    @media (min-width: 768px) {
      .bl03-featured-masthead__text {
        width: 91.52542%;
        float: left;
        margin-right: 1.69492%;
        margin-left: 8.47458%;
        margin-bottom: 4.5rem; } }
    .bl03-featured-masthead__text a {
      text-decoration: none; }
  .bl03-featured-masthead__topic {
    margin-bottom: 1.5rem; }
    @media (min-width: 768px) {
      .bl03-featured-masthead__topic {
        margin-bottom: 0.75rem; } }
  .bl03-featured-masthead__title {
    margin-bottom: 1.5rem; }
    @media (min-width: 768px) {
      .bl03-featured-masthead__title a {
        margin-bottom: 1.5rem;
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 4.5rem;
        line-height: 4.5rem;
        letter-spacing: -0.025rem;
        margin: 0;
        padding: 0 0 0rem 0; } }
  .bl03-featured-masthead__info {
    float: left;
    width: 100%;
    margin-bottom: 0.375rem; }
  @media (min-width: 768px) {
    .bl03-featured-masthead__author {
      float: left; } }
  .bl03-featured-masthead__date {
    float: none; }
    @media (min-width: 768px) {
      .bl03-featured-masthead__date {
        margin-right: 0.9375rem;
        float: left; } }
  .bl03-featured-masthead__share--icons {
    display: inline-block;
    margin-top: 1.5rem;
    min-width: 110px;
    text-align: right;
    position: relative; }
    @media (min-width: 768px) {
      .bl03-featured-masthead__share--icons {
        margin-top: -0.1875rem;
        display: inline-block; } }
    .bl03-featured-masthead__share--icons a {
      padding-left: 0.9375rem;
      text-decoration: none; }
      .bl03-featured-masthead__share--icons a svg {
        width: 24px;
        height: 24px;
        margin-bottom: -4px;
        fill: #FFFFFF; }
        @media (min-width: 768px) {
          .bl03-featured-masthead__share--icons a svg {
            width: 16px;
            height: 16px; } }
      .bl03-featured-masthead__share--icons a:first-child {
        padding-left: 0; }
      .bl03-featured-masthead__share--icons a.post__share--copy-link:hover .post__share--copy-link-popup.show,
      .bl03-featured-masthead__share--icons a.post__share--copy-link:active .post__share--copy-link-popup.show {
        opacity: 1;
        background-color: #FFFFFF; }
      @media (min-width: 768px) {
        .bl03-featured-masthead__share--icons a {
          padding-left: 0.625rem; } }
  .bl03-featured-masthead::after {
    content: " ";
    display: block;
    clear: both; }
  .bl03-featured-masthead__share--copy-link {
    position: relative; }
  .bl03-featured-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: 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: none; }
    .bl03-featured-masthead .post__share--copy-link-popup.show {
      opacity: 1;
      visibility: visible;
      background-color: #FFFFFF; }
    .bl03-featured-masthead .post__share--copy-link-popup svg {
      position: absolute;
      bottom: -11px;
      width: 20px;
      height: 20px;
      right: 50%; }
      .bl03-featured-masthead .post__share--copy-link-popup svg path {
        fill: #FFFFFF; }
  .bl03-featured-masthead .post__share--copy-link-popup-content {
    -ms-flex-item-align: center;
        align-self: center;
    white-space: nowrap; }
  .bl03-featured-masthead .wide {
    width: 100%;
    float: left;
    margin-left: 0;
    margin-right: 0; }
  .bl03-featured-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>

*/
.bl04-topic-masthead {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  width: 100%;
  height: 37.5rem;
  margin-bottom: 3.75rem; }
  @media (min-width: 768px) {
    .bl04-topic-masthead {
      margin-bottom: 6rem; } }
  .bl04-topic-masthead__background {
    transition: opacity ease-in-out 0.3s;
    width: 100vw;
    height: 600px;
    -o-object-fit: cover;
       object-fit: cover;
    -o-object-position: 50% 50%;
       object-position: 50% 50%; }
  .bl04-topic-masthead__background--hide {
    opacity: 0; }
  .bl04-topic-masthead__bgwrapper {
    width: 100%;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
    height: 37.5rem;
    margin: 0;
    padding: 0;
    overflow: hidden;
    position: relative; }
  .bl04-topic-masthead__imgBg {
    position: absolute;
    width: 100%;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: 0;
    padding: 0;
    background-size: cover;
    background-repeat: no-repeat;
    background-position: top center; }
  .bl04-topic-masthead__overlay {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: #14171A;
    opacity: 0;
    z-index: 2; }
    .bl04-topic-masthead__overlay.lowTint {
      opacity: .1; }
    .bl04-topic-masthead__overlay.medTint {
      opacity: .2; }
    .bl04-topic-masthead__overlay.highTint {
      opacity: .3; }
  .bl04-topic-masthead__text {
    -ms-flex-item-align: end;
        align-self: flex-end;
    margin-top: auto;
    margin-top: auto;
    z-index: 2;
    width: 100%; }
    @media (min-width: 768px) {
      .bl04-topic-masthead__text {
        width: 91.52542%;
        float: left;
        margin-right: 1.69492%;
        margin-left: 8.47458%; } }
    .bl04-topic-masthead__text a {
      text-decoration: none; }
      .bl04-topic-masthead__text a:hover {
        opacity: .6; }
  .bl04-topic-masthead__title {
    display: block;
    margin-bottom: 1.5rem;
    font-size: 3rem;
    line-height: 3rem; }
    @media (min-width: 768px) {
      .bl04-topic-masthead__title {
        font-size: 4.5rem;
        line-height: 6rem; } }
  .bl04-topic-masthead__subheadText {
    min-height: 1.5rem;
    margin-bottom: 3rem;
    overflow-wrap: break-word;
    word-wrap: break-word;
    word-break: break-word; }
    @media (min-width: 768px) {
      .bl04-topic-masthead__subheadText {
        margin-bottom: 4.5rem;
        overflow-wrap: normal;
        word-wrap: normal;
        word-break: normal; } }
/*

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>

*/
/*

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>

*/
.explore-blogs {
  padding-top: 3.75rem;
  /* negates margin-top on footer */
  margin-bottom: -2.25rem;
  clear: both;
  overflow: auto;
  padding-left: 6.6%;
  padding-right: 6.6%; }
  @media (min-width: 768px) {
    .explore-blogs {
      margin-top: 0;
      margin-left: 0;
      margin-right: 0;
      padding-left: 0%;
      padding-right: 0; } }
  .explore-blogs a {
    text-decoration: none; }
  .explore-blogs__title {
    color: #14171A;
    width: 100%;
    float: left;
    margin-left: 0;
    margin-right: 0;
    float: none; }
    @media (min-width: 768px) {
      .explore-blogs__title {
        width: 15.25424%;
        float: left;
        margin-right: 1.69492%;
        margin-bottom: 0.75rem;
        margin-left: 8.47458%; } }
  .explore-blogs__blog-list {
    padding-top: 0.75rem;
    width: 100%;
    float: left;
    margin-left: 0;
    margin-right: 0; }
    @media (min-width: 768px) {
      .explore-blogs__blog-list {
        width: 66.10169%;
        float: left;
        margin-right: 1.69492%; } }
  .explore-blogs__blog-card {
    width: 100%;
    float: left;
    margin-left: 0;
    margin-right: 0;
    margin-bottom: 1.5rem;
    margin-top: 1.5rem;
    padding-bottom: 1.5rem;
    border-bottom: 1px solid #AAB8C2; }
    .explore-blogs__blog-card:first-of-type {
      margin-top: 3rem; }
      @media (min-width: 768px) {
        .explore-blogs__blog-card:first-of-type {
          margin-top: 0; } }
    .explore-blogs__blog-card:last-of-type {
      border-bottom: none;
      margin-bottom: 3.75rem;
      padding-bottom: 0; }
    @media (min-width: 768px) {
      .explore-blogs__blog-card {
        width: 38.77551%;
        float: left;
        margin-right: 2.04082%;
        border: 0;
        margin-top: 0;
        margin-left: 8.47458%;
        margin-bottom: 2.25rem;
        height: 366px; } }
    .explore-blogs__blog-card--thumbnail {
      width: 100%;
      margin-bottom: 1.5rem; }
      @media (min-width: 768px) {
        .explore-blogs__blog-card--thumbnail {
          height: 12rem;
          width: auto;
          margin-bottom: 2.25rem; } }
    .explore-blogs__blog-card--headline {
      margin-bottom: 1.5rem; }
      .explore-blogs__blog-card--headline:last-child {
        margin-bottom: 3.75rem; }
        @media (min-width: 768px) {
          .explore-blogs__blog-card--headline:last-child {
            margin-bottom: 0; } }
    .explore-blogs__blog-card--subheadline {
      font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
      font-weight: 400;
      font-size: 0.87rem;
      line-height: 1.5rem;
      letter-spacing: 0.025rem;
      margin: 0;
      padding: 0 0 0rem 0;
      margin-bottom: 0; }
      @media (min-width: 768px) {
        .explore-blogs__blog-card--subheadline {
          font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
          font-weight: 400;
          font-size: 0.87rem;
          line-height: 1.5rem;
          letter-spacing: 0.025rem;
          margin: 0;
          padding: 0 0 0rem 0; } }
      @media (min-width: 768px) {
        .explore-blogs__blog-card--subheadline {
          margin-bottom: 0; } }

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvX21peGluLnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctbGlzdC9ibDAzLWZlYXR1cmVkLW1hc3RoZWFkL3dlYnBhY2svaW5kZXguc2NzcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYnJlYWtwb2ludC1wbHVnaW4uc2NzcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvdmFyaWFibGVzL2NvbG9ycy5qc29uIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fcmVtLnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3NwYW4uc2NzcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fZGlyZWN0aW9uLnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2d1dHRlcnMuc2NzcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvdmFyaWFibGVzL3R5cG9ncmFwaHkuanNvbiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1saXN0L2JsMDQtdG9waWMtbWFzdGhlYWQvd2VicGFjay9pbmRleC5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvcmUvdmFyaWFibGVzL21vdGlvbi5qc29uIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy9ibG9nLWxpc3QvYmwxOS1leHBsb3JlLW90aGVyLWJsb2dzL3dlYnBhY2svaW5kZXguc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBeUJGOzs7OztFQUtFO0FBYUY7O0VBRUU7QUFPRjs7Ozs7Ozs7Ozs7OztFQWFFO0FDOUdGO0VBQ0UsaUJEY3FCO0VDYnJCLHVCRGFxQixFQzhLdEI7RUNsSkc7SUQzQ0o7TUFJSSxvQkRXbUI7TUNWbkIsb0JEVW1CLEVDOEt0QjtFQ2xKRztJRDNDSjtNQVNNLFVBQVUsRUFFYjtFQVhIO0lBY0ksWUFBWTtJQUNaLGdCREFtQjtJQ0NuQixVQUFVO0lBQ1YsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLDZCQUE2QjtJQUM3QixnQ0FBZ0M7SUFDaEMscUJBQWM7SUFBZCxx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SW9CLEVNMUhyQjtFQTNCSDtJQTZCSSxxQlhibUI7SUlIbkIsWUN3SW9CO0lEeElwQixZRUE0RDtJRkE1RCxlQytFcUI7SUQvRXJCLGdCQ2tGb0IsRU03RHJCO0lUVUM7TVM1Q0o7UVBhSSxpQkN3SW9CO1FEeElwQixZRUE0RDtRRkE1RCx1Qkc0RHdCLEVJdkN6QjtFQWxDSDtJUGFJLFlDd0lvQjtJRHhJcEIsWUVBNEQ7SUZBNUQsZUMrRXFCO0lEL0VyQixnQkNrRm9CO0lNMURwQixzQlhyQm1CO0lXc0JuQixtQlh0Qm1CO0lXdUJuQix1Qlh2Qm1CO0lXd0JuQixpQ1I5QytkLEVRNEZoZTtJQXRGSDtNQTBDTSxpQlgxQmlCLEVXOEJsQjtNVEZEO1FTNUNKO1VBNENRLGNBQWMsRUFFakI7SUE5Q0w7TUFnRE0sb0JBQW9CO01BQ3BCLHVCWGpDaUI7TVdrQ2pCLGtCQUFrQixFQUNuQjtJVFBEO01TNUNKO1FQYUksaUJDd0lvQjtRRHhJcEIsWUVBNEQ7UUZBNUQsdUJHNER3QjtRSW5CdEIsVUFBVTtRQUNWLGNBQWM7UVAxQ2hCLHNCQ3dJb0I7UU01RmxCLHVCWHpDaUI7UVcwQ2pCLGNBQWMsRUE0QmpCO0lBdEZIO01BNkRNLFlBQVk7TUFDWixzQlg5Q2lCLEVXb0RsQjtNVHhCRDtRUzVDSjtVQWdFUSxjWGhEZTtVV2lEZixZQUFZO1VBQ1osdUJYbERlLEVXb0RsQjtJQXBFTDtNQXNFTSxzQlh0RGlCLEVXOERsQjtNQTlFTDtRQXlFUSx1Qlh6RGUsRVc2RGhCO1FUakNIO1VTNUNKO1lBMkVVLGlCQUFnQixFQUVuQjtJQTdFUDtNWG9CRSxpRkFBaUY7TUFDakYsaUJRM0I4aEM7TVI0QjloQyxtQkFOcUI7TUFPckIsb0JBUHFCO01BUXJCLHlCQUFnQjtNQUNoQixVQUFVO01BQ1Ysb0JBQTBEO01XdURwRCxpQkFBaUIsRUFJcEI7TVR6Q0Q7UVM1Q0o7VVhvQkUsaUZBQWlGO1VBQ2pGLGlCUTNCd25FO1VSNEJ4bkUsbUJBTnFCO1VBT3JCLG9CQVBxQjtVQVFyQix5QkFBZ0I7VUFDaEIsVUFBVTtVQUNWLG9CQUEwRCxFVzJEdkQ7TVR6Q0Q7UVM1Q0o7VUFtRlEsaUJBQWlCLEVBRXBCIiwiZmlsZSI6ImNzcy9ibG9nLWxpc3QuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAnLi4vdmFyaWFibGVzL2JyZWFrcG9pbnRzLmpzb24nO1xuQGltcG9ydCAnLi4vdmFyaWFibGVzL3R5cG9ncmFwaHkuanNvbic7XG5AaW1wb3J0ICcuLi92YXJpYWJsZXMvY29sb3JzLmpzb24nO1xuXG5AaW1wb3J0ICcuL2dyaWQnO1xuXG4vLyRiYXNlbGluZVVuaXQ6IG1hcC1nZXQobWFwLWdldCgkZ3JpZCwgZGVza3RvcCksIGJhc2VsaW5lKTtcbiRiYXNlbGluZVVuaXQ6IDAuNzVyZW07IC8vIDEycHhcblxuQG1peGluIHJlc3BvbmQtdG8oJHNpemUpIHtcbiAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkc2l6ZSkpIHtcbiAgICBAY29udGVudFxuICB9XG59XG5cbkBtaXhpbiB2ZXJ0aWNhbC1hbGlnbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuQGZ1bmN0aW9uIGJhc2VsaW5lKCRtdWx0aXBsaWVyOiAxKSB7XG4gIEByZXR1cm4gJGJhc2VsaW5lVW5pdCAqICRtdWx0aXBsaWVyO1xufVxuXG5AbWl4aW4gdHlwZVN0eWxlcygkdHlwZWZhY2UpIHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWUgTFRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXdlaWdodDogbWFwLWdldCgkdHlwZWZhY2UsIHdlaWdodCk7XG4gIGZvbnQtc2l6ZTogYmFzZWxpbmUobWFwLWdldCgkdHlwZWZhY2UsIHNpemUpKTtcbiAgbGluZS1oZWlnaHQ6IGJhc2VsaW5lKG1hcC1nZXQoJHR5cGVmYWNlLCBsaW5lLWhlaWdodCkpO1xuICBsZXR0ZXItc3BhY2luZzogI3ttYXAtZ2V0KCR0eXBlZmFjZSwgdHJhY2tpbmcpIC8gMTAwMH1yZW07XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMCAwIGJhc2VsaW5lKG1hcC1nZXQoJHR5cGVmYWNlLCBtYXJnaW4tYm90dG9tKSkgMDtcbn1cblxuLypcblxuZm9udCBtaXhpblxuJGtleTogdHlwZSBzdHlsZSBrZXkgKGV4LiBib2xkLTI0IG9yIHJvbWFuLTI0KS4gU2VlIHR5cG9ncmFwaHkuanNvbiBmb3Igb3B0aW9ucy5cbiRicmVha3BvaW50OiAob3B0aW9uYWwpIGJyZWFrcG9pbnQga2V5IChleC4gZnVsbCBvciB0YWJsZXQpLiBTZWUgYnJlYWtwb2ludHMuanNvbiBmb3Igb3B0aW9ucy5cblxuQGluY2x1ZGUgZm9udChib2xkLTI0KTtcblxuV2hlbiB1c2VkIHdpdGhvdXQgYSBicmVha3BvaW50IHNwZWNpZmllZCB0aGlzIG1peGluIHdpbGwgcHJvZHVjZSBmb250IHByb3BlcnRpZXNcbndyYXBwZWQgaW4gbWVkaWEgcXVlcmllcy4gSXQncyBhIHNpbXBsZSB3YXkgdG8gYXBwbHkgZnVsbHkgcmVzcG9uc2l2ZSB0eXBlIHN0eWxlc1xudG8gYSBjbGFzcyBvciBlbGVtZW50LlxuXG5AaW5jbHVkZSBmb250KGJvbGQtMjQsIGZ1bGwpO1xuXG5JZiBhIGJyZWFrcG9pbnQgaXMgc3BlY2lmaWVkIHRoZXJlIHdpbGwgYmUgb25seSBhIHNpbmdsZSBzZXQgb2YgZm9udCBwcm9wZXJ0aWVzXG50aGF0IGFyZSBOT1Qgd3JhcHBlZCBpbiBhbnkgbWVkaWEgcXVlcmllcy5cblxuKi9cblxuQG1peGluIGZvbnQoJGtleSwgJGJyZWFrcG9pbnQ6IG51bGwpIHtcbiAgQGlmICRicmVha3BvaW50IHtcbiAgICBAaWYgbWFwLWhhcy1rZXkobWFwLWdldCgkdHlwb2dyYXBoeSwgcmVzcG9uc2l2ZSksICRicmVha3BvaW50KSB7XG4gICAgICAkcmVzcG9uc2l2ZVR5cGU6IG1hcC1nZXQobWFwLWdldChtYXAtZ2V0KCR0eXBvZ3JhcGh5LCByZXNwb25zaXZlKSwgJGJyZWFrcG9pbnQpLCAka2V5KTtcbiAgICAgIEBpbmNsdWRlIHR5cGVTdHlsZXMoJHJlc3BvbnNpdmVUeXBlKTtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgICR0eXBlZmFjZTogbWFwLWdldChtYXAtZ2V0KCR0eXBvZ3JhcGh5LCBkZWZhdWx0KSwgJGtleSk7XG4gICAgQGluY2x1ZGUgdHlwZVN0eWxlcygkdHlwZWZhY2UpO1xuICAgIEBlYWNoICRicmVha3BvaW50S2V5LCAkYnJlYWtwb2ludFZhbCBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgQGlmIG1hcC1oYXMta2V5KG1hcC1nZXQoJHR5cG9ncmFwaHksIHJlc3BvbnNpdmUpLCAkYnJlYWtwb2ludEtleSkge1xuXG4gICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludCgkYnJlYWtwb2ludFZhbCkge1xuICAgICAgICAgICRyZXNwb25zaXZlVHlwZTogbWFwLWdldChtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIHJlc3BvbnNpdmUpLCAkYnJlYWtwb2ludEtleSksICRrZXkpO1xuICAgICAgICAgIEBpbmNsdWRlIHR5cGVTdHlsZXMoJHJlc3BvbnNpdmVUeXBlKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qXG5cbiAgY29sb3IoeWVsbG93KSBzaW5nbGUgYXJndW1lbnQgZGVmYXVsdHMgdG8gZGFyayBjb2xvcnNcbiAgY29sb3IobGlnaHQsIHllbGxvdykgcmV0dXJucyBsaWdodCB5ZWxsb3dcblxuKi9cbkBmdW5jdGlvbiBjb2xvcigkY29sb3ItY2F0ZWdvcnksICRjb2xvci1uYW1lOm51bGwpIHtcbiAgLy8gaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBudWxsIHRoZXJlIHNob3VsZCBiZSBhIGNvbG9yIGFzIHRoZSBmaXJzdCBhcmd1bWVudFxuICBAaWYgKCRjb2xvci1uYW1lICE9IG51bGwpIHtcbiAgICAvLyBtYXAgaW5jZXB0aW9uXG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJGNvbG9yLWNhdGVnb3J5KSwgJGNvbG9yLW5hbWUpO1xuICB9IEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCBkYXJrKSwgJGNvbG9yLW5hbWUpO1xuICB9XG5cbiAgQHdhcm4gXCJDb2xvciAnI3skY29sb3ItY2F0ZWdvcnl9JyAnI3skY29sb3ItbmFtZX0nIG5vdCBmb3VuZCBpbiAkY29sb3JzXCI7XG59XG5cbi8qIHJvdW5kZWQgY29ybmVyc1xuICB1c2FnZTogYm9yZGVyLXJhZGl1cyggYmFzZWxpbmUoIG4gKSApXG4qL1xuQG1peGluIGJvcmRlci1yYWRpdXMoJHJhZGl1cykge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG4gIGJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7ICAvKiBzdG9wcyBiZyBjb2xvciBmcm9tIGxlYWtpbmcgb3V0c2lkZSB0aGUgYm9yZGVyOiAqL1xufVxuXG4vKlxuXG5odHRwczovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL3Nhc3MvbWFpbnRhaW4tYXNwZWN0LXJhdGlvLW1peGluL1xuXG5UaGUgbWl4aW4gYXNzdW1lcyB5b3UnbGwgYmUgbmVzdGluZyBhbiBlbGVtZW50IHdpdGggdGhlIGNsYXNzIG9mIGNvbnRlbnQgaW5zaWRlIHlvdXIgaW5pdGlhbCBibG9ja1xuXG48ZGl2IGNsYXNzPVwic2l4dGVlbi1uaW5lXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgaW5zZXJ0IGNvbnRlbnQgaGVyZVxuICAgIHRoaXMgd2lsbCBtYWludGFpbiBhIDE2OjkgYXNwZWN0IHJhdGlvXG4gIDwvZGl2PlxuPC9kaXY+XG5cbiovXG5cbkBtaXhpbiBhc3BlY3QtcmF0aW8oJHdpZHRoLCAkaGVpZ2h0KSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgJjpiZWZvcmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZy10b3A6ICgkaGVpZ2h0IC8gJHdpZHRoKSAqIDEwMCU7XG4gIH1cbiAgPiAuY29udGVudCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvX21peGluLnNjc3NcbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2NvbG9ycy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2dyaWQuanNvbic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuXG5AaW1wb3J0ICdjb3JlL3N0eWxlL21peGluJztcblxuLmJsMDMtZmVhdHVyZWQtbWFzdGhlYWQge1xuICBoZWlnaHQ6IGJhc2VsaW5lKDUzKTtcbiAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoNSk7XG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSg4KTtcbiAgICBtaW4taGVpZ2h0OiBiYXNlbGluZSg1MCk7XG4gIH1cbiAgLmNvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuICAmX19iZ3dyYXBwZXIsXG4gICZfX2JnSW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGJhc2VsaW5lKDUwKTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuICAmX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKG5ldXRyYWwsIGJsYWNrKTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHotaW5kZXg6IDI7XG4gICAgJi5sb3dUaW50IHtcbiAgICAgIG9wYWNpdHk6IC4xO1xuICAgIH1cbiAgICAmLm1lZFRpbnQge1xuICAgICAgb3BhY2l0eTogLjI7XG4gICAgfVxuICAgICYuaGlnaFRpbnQge1xuICAgICAgb3BhY2l0eTogLjM7XG4gICAgfVxuICB9XG4gICZfX2JnSW1nIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gIH1cbiAgJl9fdGV4dCB7XG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoNCk7XG4gICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDEwKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDExKTtcbiAgICAgIEBpbmNsdWRlIHB1c2goMSk7XG4gICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSg2KTtcbiAgICB9XG4gICAgYSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG4gICZfX3RvcGljIHtcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgyKTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgxKTtcbiAgICB9XG4gIH1cbiAgJl9fdGl0bGUge1xuICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgIGEge1xuICAgICAgQGluY2x1ZGUgZm9udChib2xkLTM2LCBtb2JpbGUpO1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgyKTtcbiAgICAgICAgIEBpbmNsdWRlIGZvbnQoYm9sZC03MiwgZnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cbiAgJl9faW5mbyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoLjUpO1xuICB9XG4gICZfX2F1dGhvciB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuICB9XG4gICZfX2RhdGUge1xuICAgIGZsb2F0OiBub25lO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogYmFzZWxpbmUoMS4yNSk7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG4gIH1cbiAgJl9fc2hhcmUtLWljb25zIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogYmFzZWxpbmUoMik7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgbWFyZ2luLXRvcDogLSBiYXNlbGluZSguMjUpO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICBtaW4td2lkdGg6IDExMHB4O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBhIHtcbiAgICAgIHBhZGRpbmctbGVmdDogYmFzZWxpbmUoMS4yNSk7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBzdmcge1xuICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAtNHB4O1xuICAgICAgICBmaWxsOiBjb2xvcihuZXV0cmFsLCB3aGl0ZSk7XG4gICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgICAmLnBvc3RfX3NoYXJlLS1jb3B5LWxpbms6aG92ZXIgLnBvc3RfX3NoYXJlLS1jb3B5LWxpbmstcG9wdXAuc2hvdyAsXG4gICAgICAmLnBvc3RfX3NoYXJlLS1jb3B5LWxpbms6YWN0aXZlIC5wb3N0X19zaGFyZS0tY29weS1saW5rLXBvcHVwLnNob3cgIHtcbiAgICAgICAgb3BhY2l0eTogMSA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKTtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBiYXNlbGluZSg1LzYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAmOjphZnRlciB7XG4gICAgY29udGVudDogXCIgXCI7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbiAgJl9fc2hhcmUtLWNvcHktbGluayB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnBvc3Qge1xuICAgICZfX3NoYXJlLS1jb3B5LWxpbmstcG9wdXAge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IGJhc2VsaW5lKDEvNik7XG4gICAgICBoZWlnaHQ6IGJhc2VsaW5lKDMpO1xuICAgICAgcGFkZGluZzogMCBiYXNlbGluZSgxKTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGNvbG9yOiBjb2xvcihuZXV0cmFsLCBkYXJrLWdyYXkpO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKTtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAmLnNob3cge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihuZXV0cmFsLCB3aGl0ZSk7XG4gICAgICB9XG4gICAgICBzdmcge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTExcHg7XG4gICAgICAgIHdpZHRoOiAyMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwcHg7XG4gICAgICAgIHJpZ2h0OiA1MCU7XG4gICAgICAgIHBhdGgge1xuICAgICAgICAgIGZpbGw6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAmX19zaGFyZS0tY29weS1saW5rLXBvcHVwLWNvbnRlbnQge1xuICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG4gIH1cbiAgLndpZGUge1xuICAgIEBpbmNsdWRlIHNwYW4oMTIpO1xuICB9XG4gIC5zZWNvbmQtbGluZSB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctbGlzdC9ibDAzLWZlYXR1cmVkLW1hc3RoZWFkL3dlYnBhY2svaW5kZXguc2Nzc1xuICoqLyIsIi8vIEJyZWFrcG9pbnQgSW50ZWdyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuJHN1c3ktbWVkaWE6ICgpICFkZWZhdWx0O1xuJHN1c3ktbWVkaWEtZmFsbGJhY2s6IGZhbHNlICFkZWZhdWx0O1xuXG4kX3N1c3ktbWVkaWEtY29udGV4dDogKCk7XG5cblxuLy8gU3VzeSBCcmVha3BvaW50XG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIENoYW5nZSBncmlkcyBhdCBkaWZmZXJlbnQgbWVkaWEgcXVlcnkgYnJlYWtwb2ludHMuXG4vLyAtICRxdWVyeSAgICAgOiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+IHwgPG1hcD5cbi8vIC0gJGxheW91dCAgICA6IDxzZXR0aW5ncz5cbi8vIC0gJG5vLXF1ZXJ5ICA6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LWJyZWFrcG9pbnQoXG4gICRxdWVyeSxcbiAgJGxheW91dDogZmFsc2UsXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaW5jbHVkZSBzdXN5LW1lZGlhLXJvdXRlcigkcXVlcnksICRuby1xdWVyeSkge1xuICAgIEBpZiAkbGF5b3V0IHtcbiAgICAgIEBpbmNsdWRlIHdpdGgtbGF5b3V0KCRsYXlvdXQpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBTdXN5IE1lZGlhXG4vLyAtLS0tLS0tLS0tXG4vLyAtICRxdWVyeTogPG1pbi13aWR0aD4gWzxtYXgtd2lkdGg+XSB8IDxwcm9wZXJ0eT4gPHZhbHVlPlxuLy8gLSAkbm8tcXVlcnk6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LW1lZGlhKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICAkb2xkLWNvbnRleHQ6ICRfc3VzeS1tZWRpYS1jb250ZXh0O1xuICAkbmFtZTogaWYobWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRxdWVyeSksICRxdWVyeSwgbnVsbCk7XG4gICRxdWVyeTogc3VzeS1nZXQtbWVkaWEoJHF1ZXJ5KTtcbiAgJHF1ZXJ5OiBzdXN5LXBhcnNlLW1lZGlhKCRxdWVyeSk7XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRxdWVyeSwgJG5hbWUpO1xuXG4gIEBpZiAkbm8tcXVlcnkgYW5kIHR5cGUtb2YoJG5vLXF1ZXJ5KSAhPSBzdHJpbmcge1xuICAgIEBjb250ZW50O1xuICB9IEBlbHNlIHtcbiAgICBAbWVkaWEgI3tzdXN5LXJlbmRlci1tZWRpYSgkcXVlcnkpfSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICBAaWYgdHlwZS1vZigkbm8tcXVlcnkpID09IHN0cmluZyB7XG4gICAgICAjeyRuby1xdWVyeX0gJiB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtY29udGV4dCgkb2xkLWNvbnRleHQsICRjbGVhbjogdHJ1ZSk7XG59XG5cblxuLy8gTWVkaWEgUm91dGVyXG4vLyAtLS0tLS0tLS0tLS1cbi8vIFJvdXQgbWVkaWEgYXJndW1lbnRzIHRvIHRoZSBjb3JyZWN0IG1peGluLlxuQG1peGluIHN1c3ktbWVkaWEtcm91dGVyKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJyZWFrcG9pbnQsIChtaXhpbjogYnJlYWtwb2ludCksICR3YXJuOiBmYWxzZSkge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1tZWRpYSgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVXBkYXRlIENvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFNldCB0aGUgbmV3IG1lZGlhIGNvbnRleHRcbkBtaXhpbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRxdWVyeSxcbiAgJG5hbWU6IG51bGwsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkcXVlcnk6IG1hcC1tZXJnZSgobmFtZTogJG5hbWUpLCAkcXVlcnkpO1xuXG4gIEBpZiAkY2xlYW4ge1xuICAgICRfc3VzeS1tZWRpYS1jb250ZXh0OiAkcXVlcnkgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6IG1hcC1tZXJnZSgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHF1ZXJ5KSAhZ2xvYmFsO1xuICB9XG59XG5cblxuLy8gTWVkaWEgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSBmdWxsIG1lZGlhIGNvbnRleHQsIG9yIGEgc2luZ2xlIG1lZGlhIHByb3BlcnR5IChlLmcuIG1pbi13aWR0aClcbkBmdW5jdGlvbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRwcm9wZXJ0eTogZmFsc2Vcbikge1xuICBAaWYgJHByb3BlcnR5IHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJF9zdXN5LW1lZGlhLWNvbnRleHQsICRwcm9wZXJ0eSk7XG4gIH0gQGVsc2Uge1xuICAgIEByZXR1cm4gJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gIH1cbn1cblxuXG4vLyBHZXQgTWVkaWFcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgbmFtZWQgbWVkaWEtcXVlcnkgZnJvbSAkc3VzeS1tZWRpYS5cbi8vIC0gJG5hbWU6IDxrZXk+XG5AZnVuY3Rpb24gc3VzeS1nZXQtbWVkaWEoXG4gICRuYW1lXG4pIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRzdXN5LW1lZGlhLCAkbmFtZSkge1xuICAgICRtYXAtdmFsdWU6IG1hcC1nZXQoJHN1c3ktbWVkaWEsICRuYW1lKTtcbiAgICBAaWYgKCRuYW1lID09ICRtYXAtdmFsdWUpIHtcbiAgICAgICRuYW1lOiAkbWFwLXZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG5hbWU6IHN1c3ktZ2V0LW1lZGlhKCRtYXAtdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJG5hbWU7XG59XG5cblxuLy8gUmVuZGVyIE1lZGlhXG4vLyAtLS0tLS0tLS0tLS1cbi8vIEJ1aWxkIGEgbWVkaWEtcXVlcnkgc3RyaW5nIGZyb20gdmFyaW91cyBtZWRpYSBzZXR0aW5nc1xuQGZ1bmN0aW9uIHN1c3ktcmVuZGVyLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkb3V0cHV0OiBudWxsO1xuICBAZWFjaCAkcHJvcGVydHksICR2YWx1ZSBpbiAkcXVlcnkge1xuICAgICRzdHJpbmc6IG51bGw7XG5cbiAgICBAaWYgJHByb3BlcnR5ID09IG1lZGlhIHtcbiAgICAgICRzdHJpbmc6ICR2YWx1ZTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzdHJpbmc6ICcoI3skcHJvcGVydHl9OiAjeyR2YWx1ZX0pJztcbiAgICB9XG5cbiAgICAkb3V0cHV0OiBpZigkb3V0cHV0LCAnI3skb3V0cHV0fSBhbmQgI3skc3RyaW5nfScsICRzdHJpbmcpO1xuICB9XG5cbiAgQHJldHVybiAkb3V0cHV0O1xufVxuXG5cbi8vIFBhcnNlIE1lZGlhXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHBhcnNlZCBtZWRpYS1xdWVyeSBzZXR0aW5ncyBiYXNlZCBvbiBzaG9ydGhhbmRcbkBmdW5jdGlvbiBzdXN5LXBhcnNlLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkbXE6IG51bGw7XG4gIEBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbWFwIHtcbiAgICAkbXE6ICRxdWVyeTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbnVtYmVyIHtcbiAgICAkbXE6IChtaW4td2lkdGg6ICRxdWVyeSk7XG4gIH0gQGVsc2UgaWYgdHlwZS1vZigkcXVlcnkpID09IGxpc3QgYW5kIGxlbmd0aCgkcXVlcnkpID09IDIge1xuICAgIEBpZiB0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSBudW1iZXIge1xuICAgICAgJG1xOiAoXG4gICAgICAgIG1pbi13aWR0aDogbWluKCRxdWVyeS4uLiksXG4gICAgICAgIG1heC13aWR0aDogbWF4KCRxdWVyeS4uLiksXG4gICAgICApO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG1xOiAobnRoKCRxdWVyeSwgMSk6IG50aCgkcXVlcnksIDIpKTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICRtcTogKG1lZGlhOiAnI3skcXVlcnl9Jyk7XG4gIH1cblxuICBAcmV0dXJuICRtcTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JyZWFrcG9pbnQtcGx1Z2luLnNjc3NcbiAqKi8iLCIkY29sb3JzOiAoZXh0cmEtZGFyazogKG9yYW5nZTogI0Q4MkUxOCx5ZWxsb3c6ICNGOThFMDAsZ3JlZW46ICMwMDg5NTEsYmx1ZTogIzAwNUZEMSxwdXJwbGU6ICM0RjAyOTkscGluazogI0EwMTc0NCksZGFyazogKG9yYW5nZTogI0Y0NUQyMix5ZWxsb3c6ICNGRkFEMUYsZ3JlZW46ICMxRkI2NTAsYmx1ZTogIzFEQTFGMixwdXJwbGU6ICM3OTRCQzQscGluazogI0UwMjQ1RSksbGlnaHQ6IChvcmFuZ2U6ICNGRjhENTcseWVsbG93OiAjRkZEMDNGLGdyZWVuOiAjNjhFMDkwLGJsdWU6ICM3MUM5RjgscHVycGxlOiAjQTM3Q0VELHBpbms6ICNGNjgwOUEpLGV4dHJhLWxpZ2h0OiAob3JhbmdlOiAjRkZCRTc4LHllbGxvdzogI0ZGRTc2RSxncmVlbjogI0E1RjJBQSxibHVlOiAjOTdFM0ZGLHB1cnBsZTogI0M3QjRGQSxwaW5rOiAjRkZCOEMyKSxuZXV0cmFsOiAoYmxhY2s6ICMxNDE3MUEsZGFyay1ncmF5OiAjNjU3Nzg2LGxpZ2h0LWdyYXk6ICNBQUI4QzIsZXh0cmEtbGlnaHQtZ3JheTogI0NDRDZERCxleHRyYS1leHRyYS1saWdodC1ncmF5OiAjRjVGOEZBLHdoaXRlOiAjRkZGRkZGKSk7XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvdmFyaWFibGVzL2NvbG9ycy5qc29uXG4gKiovIiwiLy8gcmVtIFN1cHBvcnRcbi8vID09PT09PT09PT09XG5cbi8vIHJlbVxuLy8gLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3Igb3V0cHV0IGRpcmVjdGx5LlxuLy8gLSAkcHJvcCAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgOiA8Y3NzIHZhbHVlPlxuQG1peGluIHN1c3ktcmVtKFxuICAkcHJvcCxcbiAgJHZhbFxuKSB7XG4gICRfcmVxczogKFxuICAgIHZhcmlhYmxlOiByaHl0aG0tdW5pdCByZW0td2l0aC1weC1mYWxsYmFjayxcbiAgICBtaXhpbjogcmVtLFxuICApO1xuICBAaWYgc3VzeS1zdXBwb3J0KHJlbSwgJF9yZXFzLCAkd2FybjogZmFsc2UpIGFuZCAkcmh5dGhtLXVuaXQgPT0gcmVtIHtcbiAgICBAaW5jbHVkZSByZW0oJHByb3AsICR2YWwpO1xuICB9IEBlbHNlIHtcbiAgICAjeyRwcm9wfTogJHZhbDtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX3JlbS5zY3NzXG4gKiovIiwiLy8gU3BhbiBTeW50YXhcbi8vID09PT09PT09PT09XG5cbi8vIFNwYW4gW21peGluXVxuLy8gLS0tLS0tLS0tLS0tXG4vLyBTZXQgYSBzcGFubmluZyBlbGVtZW50IHVzaW5nIHNob3J0aGFuZCBzeW50YXguXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHNwYW4oXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3Q6ICRzcGFuO1xuICAkc3BhbjogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRvdXRwdXQ6IHNwYW4tbWF0aCgkc3Bhbik7XG4gICRuZXN0aW5nOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRjbGVhcjogc3VzeS1nZXQoY2xlYXIsICRzcGFuKTtcblxuICAkYm94OiBzdXN5LWdldChib3gtc2l6aW5nLCAkc3Bhbik7XG4gICRjb250ZW50LWJveDogaWYoc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpICE9ICdib3JkZXItYm94JywgdHJ1ZSwgZmFsc2UpO1xuICAkYm94OiAkYm94IG9yIGlmKGlzLWluc2lkZSgkc3BhbikgYW5kICRjb250ZW50LWJveCwgYm9yZGVyLWJveCwgbnVsbCk7XG5cbiAgQGlmICRjbGVhciA9PSBicmVhayB7XG4gICAgQGluY2x1ZGUgYnJlYWs7XG4gIH0gQGVsc2UgaWYgJGNsZWFyID09IG5vYnJlYWsge1xuICAgIEBpbmNsdWRlIG5vYnJlYWs7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc3BhbiwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRib3gpKTtcbiAgQGluY2x1ZGUgZmxvYXQtc3Bhbi1vdXRwdXQoJG91dHB1dC4uLik7XG5cbiAgQGlmIHZhbGlkLWNvbHVtbnMoJG5lc3RpbmcsIHNpbGVudCkge1xuICAgIEBpbmNsdWRlIG5lc3RlZCgkc3BhbikgeyBAY29udGVudDsgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBTcGFuIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiBhIHNwYW4uXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQGZ1bmN0aW9uIHNwYW4oXG4gICRzcGFuXG4pIHtcbiAgQHJldHVybiBnZXQtc3Bhbi13aWR0aCgkc3Bhbik7XG59XG5cbi8vIFNwYW4gTWF0aFxuLy8gLS0tLS0tLS0tXG4vLyBHZXQgYWxsIHRoZSBzcGFuIHJlc3VsdHMuXG4vLyAtICRzcGFuOiA8bWFwPlxuQGZ1bmN0aW9uIHNwYW4tbWF0aChcbiAgJHNwYW5cbikge1xuICAkbmVzdCAgICAgICAgICAgICA6IGlmKHN1c3ktZ2V0KHJvbGUsICRzcGFuKSA9PSBuZXN0LCB0cnVlLCBmYWxzZSk7XG4gICRzcGxpdC1uZXN0ICAgICAgIDogaWYoaXMtc3BsaXQoJHNwYW4pIGFuZCAkbmVzdCwgdHJ1ZSwgZmFsc2UpO1xuICAkZWRnZSAgICAgICAgICAgICA6IGdldC1lZGdlKCRzcGFuKTtcbiAgJGxvY2F0aW9uICAgICAgICAgOiBnZXQtbG9jYXRpb24oJHNwYW4pO1xuXG4gICRmbG9hdCAgICAgICAgICAgIDogZnJvbTtcbiAgJHBhZGRpbmctYmVmb3JlICAgOiBudWxsO1xuICAkcGFkZGluZy1hZnRlciAgICA6IG51bGw7XG4gICRtYXJnaW4tYmVmb3JlICAgIDogbnVsbDtcbiAgJG1hcmdpbi1hZnRlciAgICAgOiBudWxsO1xuXG4gIC8vIGNhbGN1bGF0ZSB3aWR0aHNcbiAgJHNwcmVhZDogaW5kZXgobWFwLXZhbHVlcygkc3BhbiksIHNwcmVhZCk7XG4gICRzcGFuOiBpZigkc3BsaXQtbmVzdCBhbmQgbm90KCRzcHJlYWQpLCBtYXAtbWVyZ2UoJHNwYW4sIChzcHJlYWQ6IHdpZGUpKSwgJHNwYW4pO1xuICAkd2lkdGg6IGdldC1zcGFuLXdpZHRoKCRzcGFuKTtcbiAgJGd1dHRlcnM6IGdldC1ndXR0ZXJzKCRzcGFuKTtcblxuICAvLyBhcHBseSBndXR0ZXJzXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICBAaWYgbm90KHN1c3ktZ2V0KHJvbGUsICRzcGFuKSkge1xuICAgICAgJHBhZGRpbmctYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpO1xuICAgICAgJHBhZGRpbmctYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBpZiBub3QoJHNwbGl0LW5lc3QpIHtcbiAgICAgICRtYXJnaW4tYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpO1xuICAgICAgJG1hcmdpbi1hZnRlcjogbWFwLWdldCgkZ3V0dGVycywgYWZ0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNwZWNpYWwgbWFyZ2luIGhhbmRsaW5nXG4gIEBpZiBzdXN5LWdldChvdXRwdXQsICRzcGFuKSA9PSBpc29sYXRlIGFuZCAkbG9jYXRpb24ge1xuICAgICRtYXJnaW4tYmVmb3JlOiBnZXQtaXNvbGF0aW9uKCRzcGFuKTtcbiAgICAkbWFyZ2luLWFmdGVyOiAtMTAwJTtcbiAgfSBAZWxzZSBpZiAkZWRnZSB7XG4gICAgJGlzLXNwbGl0OiBpcy1zcGxpdCgkc3Bhbik7XG4gICAgJHBvczogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3Bhbik7XG5cbiAgICBAaWYgJGVkZ2UgPT0gbGFzdCB7XG4gICAgICAkZmxvYXQ6IHN1c3ktZ2V0KGxhc3QtZmxvdywgJHNwYW4pO1xuICAgIH1cblxuICAgIEBpZiBub3QoJGlzLXNwbGl0KSB7XG4gICAgICBAaWYgJGVkZ2UgPT0gZnVsbCBvciAoJGVkZ2UgPT0gZmlyc3QgYW5kICRwb3MgPT0gYmVmb3JlKSB7XG4gICAgICAgICRtYXJnaW4tYmVmb3JlOiAwO1xuICAgICAgfVxuICAgICAgQGlmICRlZGdlID09IGZ1bGwgb3IgKCRlZGdlID09IGxhc3QgYW5kICRwb3MgPT0gYWZ0ZXIpIHtcbiAgICAgICAgJG1hcmdpbi1hZnRlcjogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIEByZXR1cm4gKFxuICAgIHdpZHRoICAgICAgICAgICA6ICR3aWR0aCxcbiAgICBmbG9hdCAgICAgICAgICAgOiAkZmxvYXQsXG4gICAgbWFyZ2luLWJlZm9yZSAgIDogJG1hcmdpbi1iZWZvcmUsXG4gICAgbWFyZ2luLWFmdGVyICAgIDogJG1hcmdpbi1hZnRlcixcbiAgICBwYWRkaW5nLWJlZm9yZSAgOiAkcGFkZGluZy1iZWZvcmUsXG4gICAgcGFkZGluZy1hZnRlciAgIDogJHBhZGRpbmctYWZ0ZXIsXG4gICAgZmxvdyAgICAgICAgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pLFxuICApO1xufVxuXG4vLyBHZXQgU3BhbiBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBzcGFuIHdpZHRoLlxuLy8gLSAkc3BhbjogPG1hcD5cbkBmdW5jdGlvbiBnZXQtc3Bhbi13aWR0aChcbiAgJHNwYW5cbikge1xuICAkc3BhbiAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcblxuICAkbiAgICAgICAgOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRsb2NhdGlvbiA6IGdldC1sb2NhdGlvbigkc3Bhbik7XG4gICRjb2x1bW5zICA6IHN1c3ktZ2V0KGNvbHVtbnMsICRzcGFuKTtcbiAgJGd1dHRlcnMgIDogc3VzeS1nZXQoZ3V0dGVycywgJHNwYW4pO1xuICAkc3ByZWFkICAgOiBzdXN5LWdldChzcHJlYWQsICRzcGFuKTtcblxuICAkY29udGV4dCAgOiBudWxsO1xuICAkc3Bhbi1zdW0gOiBudWxsO1xuICAkd2lkdGggICAgOiBudWxsO1xuXG4gIEBpZiAkbiA9PSAnZnVsbCcge1xuICAgICRwb3M6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pO1xuICAgICRyb2xlOiBzdXN5LWdldChyb2xlLCAkc3Bhbik7XG4gICAgJG46IGlmKCRwb3MgPT0gc3BsaXQgYW5kICRyb2xlICE9IG5lc3QsIHN1c3ktY291bnQoJGNvbHVtbnMpLCAxMDAlKTtcbiAgfVxuXG4gIEBpZiB0eXBlLW9mKCRuKSAhPSBudW1iZXIge1xuICAgIEB3YXJuIFwiKCN7dHlwZS1vZigkbil9KSAjeyRufSBpcyBub3QgYSB2YWxpZCBzcGFuLlwiO1xuICB9IEBlbHNlIGlmIHVuaXRsZXNzKCRuKSB7XG4gICAgJGNvbnRleHQ6IHN1c3ktc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgaWYoaXMtc3BsaXQoJHNwYW4pLCB3aWRlLCBuYXJyb3cpKTtcbiAgICAkc3ByZWFkOiBpZihpcy1pbnNpZGUoJHNwYW4pLCAkc3ByZWFkIG9yIHdpZGUsICRzcHJlYWQpO1xuICAgICRzcGFuLXN1bTogc3VzeSgkbiwgJGxvY2F0aW9uLCAkY29sdW1ucywgJGd1dHRlcnMsICRzcHJlYWQpO1xuXG4gICAgJF9tYXRoOiBzdXN5LWdldChtYXRoLCAkc3Bhbik7XG4gICAgJF9jb2x1bW4td2lkdGg6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJHNwYW4pO1xuICAgIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAgICR3aWR0aDogJHNwYW4tc3VtICogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkd2lkdGg6IHBlcmNlbnRhZ2UoJHNwYW4tc3VtIC8gJGNvbnRleHQpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgJHdpZHRoOiAkbjtcbiAgfVxuXG4gIEByZXR1cm4gJHdpZHRoO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc3Bhbi5zY3NzXG4gKiovIiwiLy8gRGlyZWN0aW9uIEhlbHBlcnNcbi8vID09PT09PT09PT09PT09PT09XG5cbi8vIFN1c3kgRmxvdyBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEVcbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICBmbG93OiBsdHIsXG4pKTtcblxuLy8gR2V0IERpcmVjdGlvblxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSAnZnJvbScgb3IgJ3RvJyBkaXJlY3Rpb24gb2YgYSBsdHIgb3IgcnRsIGZsb3cuXG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG4vLyAtIFska2V5XSAgIDogZnJvbSB8IHRvXG5AZnVuY3Rpb24gZ2V0LWRpcmVjdGlvbihcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpLFxuICAka2V5OiBmcm9tXG4pIHtcbiAgJHJldHVybjogaWYoJGZsb3cgPT0gcnRsLCAoZnJvbTogcmlnaHQsIHRvOiBsZWZ0KSwgKGZyb206IGxlZnQsIHRvOiByaWdodCkpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHJldHVybiwgJGtleSk7XG59XG5cbi8vIFRvXG4vLyAtLVxuLy8gUmV0dXJuIHRoZSAndG8nIGRpcmVjdGlvbiBvZiBhIGZsb3dcbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBmdW5jdGlvbiB0byhcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgQHJldHVybiBnZXQtZGlyZWN0aW9uKCRmbG93LCB0byk7XG59XG5cbi8vIEZyb21cbi8vIC0tLS1cbi8vIFJldHVybiB0aGUgJ2Zyb20nIGRpcmVjdGlvbiBvZiBhIGZsb3dcbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBmdW5jdGlvbiBmcm9tKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICBAcmV0dXJuIGdldC1kaXJlY3Rpb24oJGZsb3csIGZyb20pO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fZGlyZWN0aW9uLnNjc3NcbiAqKi8iLCIvLyBHdXR0ZXIgU3ludGF4XG4vLyA9PT09PT09PT09PT09XG5cblxuLy8gR3V0dGVyc1xuLy8gLS0tLS0tLVxuLy8gU2V0IGd1dHRlcnMgb24gYW4gZWxlbWVudC5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQG1peGluIGd1dHRlcnMoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBwYXJzZS1ndXR0ZXJzKCRzcGFuKTtcbiAgJF9ndXR0ZXJzIDogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfb3V0cHV0OiAoXG4gICAgYmVmb3JlOiBtYXAtZ2V0KCRfZ3V0dGVycywgYmVmb3JlKSxcbiAgICBhZnRlcjogbWFwLWdldCgkX2d1dHRlcnMsIGFmdGVyKSxcbiAgICBmbG93OiBzdXN5LWdldChmbG93LCAkc3BhbiksXG4gICk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGd1dHRlcnMsICRpbnNwZWN0KTtcblxuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGluY2x1ZGUgcGFkZGluZy1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgfVxufVxuXG5AbWl4aW4gZ3V0dGVyKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAaW5jbHVkZSBndXR0ZXJzKCRzcGFuKTtcbn1cblxuXG4vLyBHdXR0ZXJcbi8vIC0tLS0tLVxuLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiBhIGd1dHRlci5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGd1dHRlcihcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgJHNwYW46IHBhcnNlLWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfZ3V0dGVyczogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuICAkX2d1dHRlcnM6IG1hcC1nZXQoJF9ndXR0ZXJzLCBiZWZvcmUpIG9yIG1hcC1nZXQoJF9ndXR0ZXJzLCBhZnRlcik7XG5cbiAgQHJldHVybiAkX2d1dHRlcnM7XG59XG5cbkBmdW5jdGlvbiBndXR0ZXJzKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAcmV0dXJuIGd1dHRlcigkc3Bhbik7XG59XG5cblxuLy8gR2V0IEd1dHRlciBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGd1dHRlciB3aWR0aC5cbi8vIC0gWyRjb250ZXh0XTogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ2V0LWd1dHRlci13aWR0aChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3V0dGVycygkY29udGV4dCk7XG5cbiAgJF9ndXR0ZXJzIDogc3VzeS1nZXQoZ3V0dGVycywgJGNvbnRleHQpO1xuICAkX2d1dHRlciAgOiBzdXN5LWdldChndXR0ZXItb3ZlcnJpZGUsICRjb250ZXh0KTtcblxuICBAaWYgJF9ndXR0ZXJzIGFuZCAoJF9ndXR0ZXJzID4gMCkgYW5kIG5vdCgkX2d1dHRlcikge1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRjb250ZXh0KTtcbiAgICAkX21hdGg6IGd1dHRlci1tYXRoKCRjb250ZXh0KTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkX2d1dHRlcjogJF9ndXR0ZXJzICogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkY29udGV4dCk7XG4gICAgICAkX3NwcmVhZCAgOiBpZihpcy1zcGxpdCgkY29udGV4dCksIHdpZGUsIHN1c3ktZ2V0KHNwcmVhZCwgJGNvbnRleHQpKTtcbiAgICAgICRfZ3V0dGVyICA6IHBlcmNlbnRhZ2UoJF9ndXR0ZXJzIC8gc3VzeS1zdW0oJF9jb2x1bW5zLCAkX2d1dHRlcnMsICRfc3ByZWFkKSk7XG4gICAgfVxuICB9XG5cbiAgJF9ndXR0ZXI6IGlmKCRfZ3V0dGVyID09ICduby1ndXR0ZXJzJyBvciAkX2d1dHRlciA9PSAnbm8tZ3V0dGVyJywgbnVsbCwgJF9ndXR0ZXIpO1xuXG4gIEByZXR1cm4gJF9ndXR0ZXI7XG59XG5cblxuLy8gR2V0IEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gYmVmb3JlIGFuZCBhZnRlciBndXR0ZXIgdmFsdWVzLlxuLy8gLSBbJGNvbnRleHRdOiA8Y29udGV4dD5cbkBmdW5jdGlvbiBnZXQtZ3V0dGVycyhcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgICAgICAgICAgICA6IHBhcnNlLWd1dHRlcnMoJGNvbnRleHQpO1xuXG4gICRfZ3V0dGVyLXBvc2l0aW9uICAgOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcbiAgJF9ndXR0ZXIgICAgICAgICAgICA6IGdldC1ndXR0ZXItd2lkdGgoJGNvbnRleHQpO1xuXG4gICRfcmV0dXJuICAgICAgICAgICAgOiAoYmVmb3JlOiBudWxsLCBhZnRlcjogbnVsbCk7XG5cbiAgQGlmIGlzLXNwbGl0KCRjb250ZXh0KSBhbmQgJF9ndXR0ZXIge1xuICAgICRfZ3V0dGVyOiAkX2d1dHRlciAvIDI7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGJlZm9yZTogJF9ndXR0ZXIsIGFmdGVyOiAkX2d1dHRlcikpO1xuICB9IEBlbHNlIHtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoJF9ndXR0ZXItcG9zaXRpb246ICRfZ3V0dGVyKSk7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIElzIEluc2lkZVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgZ3V0dGVycyBhcmUgaW5zaWRlLlxuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGlzLWluc2lkZShcbiAgJGNvbnRleHRcbikge1xuICAkX2luc2lkZTogaW5zaWRlIGluc2lkZS1zdGF0aWM7XG4gICRfZ3V0dGVyLXBvc2l0aW9uOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcblxuICBAcmV0dXJuIGlmKGluZGV4KCRfaW5zaWRlLCAkX2d1dHRlci1wb3NpdGlvbiksIHRydWUsIGZhbHNlKTtcbn1cblxuXG4vLyBJcyBTcGxpdFxuLy8gLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBndXR0ZXJzIGFyZSBzcGxpdC5cbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBpcy1zcGxpdChcbiAgJGNvbnRleHRcbikge1xuICAkX3NwbGl0OiBzcGxpdCBpbnNpZGUgaW5zaWRlLXN0YXRpYztcbiAgJF9ndXR0ZXItcG9zaXRpb246IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gaWYoaW5kZXgoJF9zcGxpdCwgJF9ndXR0ZXItcG9zaXRpb24pLCB0cnVlLCBmYWxzZSk7XG59XG5cblxuLy8gR3V0dGVyIE1hdGhcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIG1hdGggdG8gdXNlIGZvciBndXR0ZXIgY2FsY3VsYXRpb25zXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ3V0dGVyLW1hdGgoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuICA6IHN1c3ktZ2V0KG1hdGgsICRjb250ZXh0KTtcbiAgJF9yZXR1cm4gIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCkgPT0gaW5zaWRlLXN0YXRpYywgc3RhdGljLCAkX3JldHVybik7XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2d1dHRlcnMuc2Nzc1xuICoqLyIsIiR0eXBvZ3JhcGh5OiAoZGVmYXVsdDogKGJvbGQtMTQ0OiAod2VpZ2h0OiA3MDAsc2l6ZTogOCxsaW5lLWhlaWdodDogOCx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtOTY6ICh3ZWlnaHQ6IDcwMCxzaXplOiA2LGxpbmUtaGVpZ2h0OiA2LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC03MjogKHdlaWdodDogNzAwLHNpemU6IDUsbGluZS1oZWlnaHQ6IDUsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi03MjogKHdlaWdodDogNDAwLHNpemU6IDUsbGluZS1oZWlnaHQ6IDUsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTQ4OiAod2VpZ2h0OiA3MDAsc2l6ZTogNCxsaW5lLWhlaWdodDogNCx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTQ4OiAod2VpZ2h0OiA0MDAsc2l6ZTogNCxsaW5lLWhlaWdodDogNCx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMzY6ICh3ZWlnaHQ6IDcwMCxzaXplOiAzLGxpbmUtaGVpZ2h0OiAzLHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tMzY6ICh3ZWlnaHQ6IDQwMCxzaXplOiAzLGxpbmUtaGVpZ2h0OiAzLHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0yNDogKHdlaWdodDogNzAwLHNpemU6IDIsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDAsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tMjQ6ICh3ZWlnaHQ6IDQwMCxzaXplOiAyLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAxNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTE2OiAod2VpZ2h0OiA3MDAsc2l6ZTogMS4zMyxsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tMTY6ICh3ZWlnaHQ6IDQwMCxzaXplOiAxLjMzLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAyNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTE0OiAod2VpZ2h0OiA3MDAsc2l6ZTogMS4xNixsaW5lLWhlaWdodDogMix0cmFja2luZzogMzAsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tMTQ6ICh3ZWlnaHQ6IDQwMCxzaXplOiAxLjE2LGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAyNSxtYXJnaW4tYm90dG9tOiAwKSkscmVzcG9uc2l2ZTogKGZ1bGw6IChib2xkLTE0NDogKHdlaWdodDogNzAwLHNpemU6IDEyLGxpbmUtaGVpZ2h0OiAxMix0cmFja2luZzogLTIwMCxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTk2OiAod2VpZ2h0OiA3MDAsc2l6ZTogOCxsaW5lLWhlaWdodDogOCx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtNzI6ICh3ZWlnaHQ6IDcwMCxzaXplOiA2LGxpbmUtaGVpZ2h0OiA2LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tNzI6ICh3ZWlnaHQ6IDQwMCxzaXplOiA2LGxpbmUtaGVpZ2h0OiA2LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC00ODogKHdlaWdodDogNzAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi00ODogKHdlaWdodDogNDAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTM2OiAod2VpZ2h0OiA3MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTM2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMjQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAyLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTI0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMixsaW5lLWhlaWdodDogMix0cmFja2luZzogMTUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNjogKHdlaWdodDogNzAwLHNpemU6IDEuMzMsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4zMyxsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNDogKHdlaWdodDogNzAwLHNpemU6IDEuMTYsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDMwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4xNixsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCkpKSk7XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvdmFyaWFibGVzL3R5cG9ncmFwaHkuanNvblxuICoqLyIsIkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2JyZWFrcG9pbnRzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvY29sb3JzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvZ3JpZC5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL21vdGlvbi5qc29uJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5cbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuXG4kdHJhbnNpdGlvbkVhc2luZzogbWFwLWdldCgkdHJhbnNpdGlvbnMsIGhvdmVyLWVhc2luZyk7XG4kdHJhbnNpdGlvblRpbWluZzogbWFwLWdldCgkdHJhbnNpdGlvbnMsIGhvdmVyLXRpbWluZyk7XG5cbi5ibDA0LXRvcGljLW1hc3RoZWFkIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBiYXNlbGluZSg1MCk7XG4gIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDUpO1xuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoOCk7XG4gIH1cblxuICAmX19iYWNrZ3JvdW5kIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5ICR0cmFuc2l0aW9uRWFzaW5nICR0cmFuc2l0aW9uVGltaW5nO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDYwMHB4O1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIG9iamVjdC1wb3NpdGlvbjogNTAlIDUwJTtcbiAgfVxuICAmX19iYWNrZ3JvdW5kLS1oaWRlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgJl9fYmd3cmFwcGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBoZWlnaHQ6IGJhc2VsaW5lKDUwKTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuICAmX19pbWdCZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIGNlbnRlcjtcbiAgfVxuICAmX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKG5ldXRyYWwsIGJsYWNrKTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHotaW5kZXg6IDI7XG4gICAgJi5sb3dUaW50IHtcbiAgICAgIG9wYWNpdHk6IC4xO1xuICAgIH1cbiAgICAmLm1lZFRpbnQge1xuICAgICAgb3BhY2l0eTogLjI7XG4gICAgfVxuICAgICYuaGlnaFRpbnQge1xuICAgICAgb3BhY2l0eTogLjM7XG4gICAgfVxuICB9XG4gICZfX3RleHQge1xuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICB6LWluZGV4OiAyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oMTEpO1xuICAgICAgQGluY2x1ZGUgcHVzaCgxKTtcbiAgICB9XG4gICAgYSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogLjY7XG4gICAgICB9XG4gICAgfVxuICB9XG4gICZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgyKTtcbiAgICBmb250LXNpemU6IGJhc2VsaW5lKDQpO1xuICAgIGxpbmUtaGVpZ2h0OiBiYXNlbGluZSg0KTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBmb250LXNpemU6IGJhc2VsaW5lKDYpO1xuICAgICAgbGluZS1oZWlnaHQ6IGJhc2VsaW5lKDgpO1xuICAgIH1cbiAgfVxuICAmX19zdWJoZWFkVGV4dCB7XG4gICAgbWluLWhlaWdodDogYmFzZWxpbmUoMik7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoNCk7XG4gICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSg2KTtcbiAgICAgIC8vcmVzZXQgd29yZCB3cmFwIHN0eWxlcyBmb3IgbW9iaWxlXG4gICAgICBvdmVyZmxvdy13cmFwOiBub3JtYWw7XG4gICAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL2Jsb2ctbGlzdC9ibDA0LXRvcGljLW1hc3RoZWFkL3dlYnBhY2svaW5kZXguc2Nzc1xuICoqLyIsIiR0cmFuc2l0aW9uczogKGhvdmVyLXRpbWluZzogMC4zcyxob3Zlci1lYXNpbmc6IGVhc2UtaW4tb3V0LGNvbG9yLWNoYW5nZS10aW1pbmc6IDFzLGNvbG9yLWNoYW5nZS1lYXNpbmc6IGVhc2UtaW4tb3V0LGxvYWRlci1iaXJkLXRpbWluZzogMC4zcyxsb2FkZXItYmlyZC1lYXNpbmc6IGVhc2UtaW4pO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb25cbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2NvbG9ycy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvc3R5bGUvZ3JpZCc7XG5cbkBpbXBvcnQgJ2NvcmUvc3R5bGUvbWl4aW4nO1xuXG4uZXhwbG9yZS1ibG9ncyB7XG4gIHBhZGRpbmctdG9wOiBiYXNlbGluZSg1KTtcbiAgLyogbmVnYXRlcyBtYXJnaW4tdG9wIG9uIGZvb3RlciAqL1xuICBtYXJnaW4tYm90dG9tOiAtIGJhc2VsaW5lKDMpO1xuICBjbGVhcjogYm90aDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogNi42JTtcbiAgcGFkZGluZy1yaWdodDogNi42JTtcbiAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgIG1hcmdpbi10b3A6MDtcbiAgICBtYXJnaW4tbGVmdDowO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDAlO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cbiAgYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG4gICZfX3RpdGxlIHtcbiAgICBjb2xvcjogY29sb3IobmV1dHJhbCwgYmxhY2spO1xuICAgIEBpbmNsdWRlIHNwYW4oMTIpO1xuICAgIGZsb2F0OiBub25lO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oMik7XG4gICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgxKTtcbiAgICAgIEBpbmNsdWRlIHB1c2goMSk7XG4gICAgfVxuICB9XG4gICZfX2Jsb2ctbGlzdCB7XG4gICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDEpO1xuICAgIEBpbmNsdWRlIHNwYW4oMTIpO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oOCk7XG4gICAgfVxuICB9XG4gICZfX2Jsb2ctY2FyZCB7XG4gICAgQGluY2x1ZGUgc3BhbigxMik7XG4gICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMik7XG4gICAgbWFyZ2luLXRvcDogYmFzZWxpbmUoMik7XG4gICAgcGFkZGluZy1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvcihuZXV0cmFsLCBsaWdodC1ncmF5KTtcbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogYmFzZWxpbmUoNCk7XG4gICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICAgICY6bGFzdC1vZi10eXBlIHtcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSg1KTtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIH1cbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDQgb2YgMTApO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIEBpbmNsdWRlIHB1c2goMSk7XG4gICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgzKTtcbiAgICAgIGhlaWdodDogMzY2cHg7XG4gICAgfVxuICAgICYtLXRodW1ibmFpbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDIpO1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICBoZWlnaHQ6IGJhc2VsaW5lKDE2KTtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDMpO1xuICAgICAgfVxuICAgIH1cbiAgICAmLS1oZWFkbGluZSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgyKTtcbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIC8vY2hhbmdlIHNwYWNpbmcgd2hlbiBubyBzdWJoZWFkbGluZSBwcmVzZW50XG4gICAgICAgIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDUpO1xuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTowO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICYtLXN1YmhlYWRsaW5lIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQocm9tYW4tMTQpO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvYmxvZy1saXN0L2JsMTktZXhwbG9yZS1vdGhlci1ibG9ncy93ZWJwYWNrL2luZGV4LnNjc3NcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9*/