/**
 * Settings - Animations
 * Standard sets of animation variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Transitions
 */
/*------------------------------------*\
  01 - Transitions
\*------------------------------------*/
/**
 * Settings - Breakpoints
 * - 01 - Mapping
 */
/*------------------------------------*\
  01 - Mapping
  Default mapping of grid breakpoints, which is used in the function and mixin breakpoint files. An example of using
  breakpoints in a file is by using the mixin with the name of a breakpoint: `@include bp-min(small) {}`.

  These breakpoints may be altered depending on the theme needs.
\*------------------------------------*/
/**
 * Settings - Color
 * Standard sets of color variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Theme Colors
 * - 02 - Grayscale
 * - 03 - Utilities
 * - 04 - Mapping
 */
/*------------------------------------*\
  01 - Theme Colors
\*------------------------------------*/
/*------------------------------------*\
  02 - Grayscale
\*------------------------------------*/
/*------------------------------------*\
  03 - Utilities
\*------------------------------------*/
/*------------------------------------*\
  04 - Mapping
\*------------------------------------*/
/**
 * Settings - Layout
 * Standard sets of layout variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Grid
 * - 02 - Widths
 * - 03 - Layers
 */
/*------------------------------------*\
  01 - Grid
\*------------------------------------*/
/*------------------------------------*\
  01 - Widths
  // 'xxlarge':  1920px,
  // 'xlarge':   1440px,
  // 'large':    1280px,
  // 'medium':   960px,
  // 'small':    768px,
  // 'xsmall':   640px,
  // 'xxsmall':  480px,
\*------------------------------------*/
/*------------------------------------*\
  03 - Layers
\*------------------------------------*/
/**
 * Settings - Typography
 * Standard sets of typographical variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Heading Sizes
 * - 02 - Line Heights
 */
/*------------------------------------*\
  01 - Heading Sizes
\*------------------------------------*/
/*------------------------------------*\
  01 - Line Heights
\*------------------------------------*/
/**
 * Partials Combined
 * Partials can be imported into theme files either one by one, or by using this combined Partials file. To use this
 * file as the import statement, `@use '[path]/partials/partials' as *`.
 *
 * - 01 - Settings
 * - 02 - Functions
 * - 03 - Mixins
 */
/*------------------------------------*\
  01 - Settings
\*------------------------------------*/
/**
 * Functions - Animations
 * Simple functions to help developers easily grab pre-defined animation values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Transition
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Transition
  Easy to use function to quickly define a transition with the ability to reference a library mapping of bezier-curve
  animations, as defined in `partials/settings/_animations.scss`.
  - @param $argument: Style arguments that this transition should be applied to.
  - @param $duration: The length of time the transition should take place.
  - @param $style: The style of transition, as defined in `partials/settings/_animations.scss`
  - @example = transition: transition(all, 0.6s, easeInOutSine)
\*------------------------------------*/
/**
 * Functions - Breakpoints
 * Breakpoint viewport sizes and media queries. Breakpoints are defined as a map of (name: minimum width), order from
 * xsmall to xlarge: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px). The map defined in the `$grid-breakpoints`
 * global variable is used as the `$breakpoints` argument by default.
 *
 * - 01 - Breakpoint Next
 * - 02 - Breakpoint Minimum
 * - 03 - Breakpoint Maximum
 * - 04 - Breakpoint Infix
 */
/*------------------------------------*\
  01 - Breakpoint Next
  Name of the next breakpoint, or null for the last breakpoint.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @param $breakpoint-names: Breakpoints mapping names as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  02 - Breakpoint Minimum
  Minimum breakpoint width. Null for the smallest (first) breakpoint.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  03 - Breakpoint Maximum
  The maximum value is reduced by 0.02px to work around the limitations of `min-` and `max-` prefixes and viewports
  with fractional widths. See https://www.w3.org/TR/mediaqueries-4/#mq-min-max. Uses 0.02px rather than 0.01px to work
  around a current rounding bug in Safari. See https://bugs.webkit.org/show_bug.cgi?id=178261
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  04 - Breakpoint Infix
  Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front. Useful for making
  responsive utilities.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/**
 * Functions - Calculations
 * Simple functions to help developers calculate different values from percentages to sizing such as REMs.
 *
 * - 01 - Imports
 * - 02 - Target/Container Percentage
 * - 03 - REMs
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Target/Container Percentage
  Calculate the percentage of a target size compared to a container size.
  - @param $target: Size of an element needing a calculated percentage.
  - @param $container: Size of the target's container, needed to calculate percentage.
  - @example = width: calc-percent(250, 1000);
\*------------------------------------*/
/*------------------------------------*\
  03 - REMs
  Calculate a size into REM units -- mostly used for font size rendering.
  - @param $size: Size of an element needing a calculated size into REMs.
  - @param $base: Base font size of the site -- defaults to 16px.
  - @example = font-size: calc-rem(24px);
\*------------------------------------*/
/**
 * Functions - Color
 * Simple functions to help developers easily grab pre-defined color values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Color
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Color
  Main function for getting a pre-defined color from a list of values, as defined in 'partials/settings/_colors.scss.
  - @param $color: The selected color.
  - @example = background-color: color(primary);
\*------------------------------------*/
/**
 * Functions - Layout
 * Simple functions to help developers easily grab pre-defined layout values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Widths
 * - 03 - Z-index
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Widths
  Main function for getting a pre-defined width from a list of values, as defined in 'partials/settings/_layout.scss.
  - @param $width: The selected width size.
  - @example: width: width(large);
\*------------------------------------*/
/*------------------------------------*\
  03 - Z-index
  Main function for getting a pre-defined z-index from a list of values, as defined in 'partials/settings/_layout.scss.
  - @param $key: The selected layer type.
  - @example = z-index: z-index(bottomless-pit)
\*------------------------------------*/
/**
 * Functions - Typography
 * Simple functions to help developers easily grab pre-defined typographical values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Line Height
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Line Height
  Main function for getting a pre-defined Line Height from a list of values, as defined in
  `partials/settings/_typography.scss`.
  - @param $size: The selected Line Height type.
  - @example: line-height: line-height(heading);
\*------------------------------------*/
/**
 * Mixins - Breakpoints
 * Use these mixins mainly when defining media breakpoint specifications in theme files. Both settings and functions
 * are imported here to supplement the mixins themselves.
 *
 * - 01 - Imports
 * - 02 - Minimum Breakpoint
 * - 03 - Maximum Breakpoint
 * - 04 - Between Breakpoint
 * - 05 - Only Breakpoint
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Minimum Breakpoint
  Media/screen-size of at least the minimum breakpoint width -- apply to screen-sizes above the breakpoint specified.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-min(large) {}
\*------------------------------------*/
/*------------------------------------*\
  03 - Maximum Breakpoint
  Media/screen-size of at most the maximum breakpoint width -- apply to screen-sizes below the breakpoint specified.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-max(large) {}
\*------------------------------------*/
/*------------------------------------*\
  04 - Between Breakpoint
  Media/screen-size that spans multiple breakpoint widths -- apply to screen-sizes between the breakpoints specified.
  - @param $lower: Selected minimum breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $upper: Selected maximum breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-between(xsmall, large) {}
\*------------------------------------*/
/*------------------------------------*\
  05 - Only Breakpoint
  Media/screen-size between the breakpoint's minimum and maximum widths -- No minimum for the smallest breakpoint, and
  no maximum for the largest one.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-only(large) {}
\*------------------------------------*/
/**
 * Mixins - Lists
 * Use these mixins when needing to easily define lists styles.
 *
 * - 01 - Base
 * - 02 - Bullets
 * - 03 - Numbered
 * - 04 - No Bullets
 * - 05 - Inline
 * - 06 - Ruled
 */
/*------------------------------------*\
  01 - Base
\*------------------------------------*/
/*------------------------------------*\
  02 - Bullets
\*------------------------------------*/
/*------------------------------------*\
  03 - Numbered
\*------------------------------------*/
/*------------------------------------*\
  04 - No Bullets
\*------------------------------------*/
/*------------------------------------*\
  05 - Inline
\*------------------------------------*/
/*------------------------------------*\
  06 - Ruled
\*------------------------------------*/
/*------------------------------------*\
  03 - Mixins
\*------------------------------------*/
/**
 * Mixins - Typography
 * Use these mixins when needing to easily define typography styles, such as sizes and typographical layout.
 *
 * - 01 - Imports
 * - 02 - Heading Size
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Heading Size
  Meant for responsive heading sizes and is based upon breakpoints and a mapping of heading sizes. Breakpoints are
  defined in the `partials/settings/_breakpoints.scss` file and are utilized with a mixin, as defined in
  `partials/mixins/_breakpoints.scss`.
  - @param $setting: Selected heading to apply responsive sizing to.
\*------------------------------------*/
.component.c-teaser {
  border-radius: 0.25rem;
  overflow: hidden;
  -webkit-box-shadow: 0px 0px 120px 0px rgba(0, 0, 0, 0.07);
          box-shadow: 0px 0px 120px 0px rgba(0, 0, 0, 0.07);
  display: -webkit-box;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
          flex-direction: column;
}
@media (min-width: 768px) {
  .component.c-teaser {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
            flex-direction: row;
  }
}
.component.c-teaser .c-teaser__content {
  background: var(--color-white);
  -webkit-box-ordinal-group: 3;
          order: 2;
  padding: 1.25rem 1.25rem 0 1.25rem;
  display: -webkit-box;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
          flex-direction: column;
}
@media (min-width: 768px) {
  .component.c-teaser .c-teaser__content {
    -webkit-box-ordinal-group: 2;
            order: 1;
    -webkit-box-flex: 1;
            flex: 1;
    padding: 1.5rem 1.5rem 0 1.5rem;
  }
}
.component.c-teaser.c-teaser__no-category .c-teaser__content {
  padding: 1.25rem;
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__no-category .c-teaser__content {
    padding: 1.5rem;
  }
}
.component.c-teaser .c-teaser__title {
  color: var(--color-main);
  font-size: var(--font-size-heading-22);
  line-height: var(--font-line-height-heading-22);
  font-weight: var(--font-weight-medium);
}
.component.c-teaser a.c-teaser__title-link {
  text-decoration: none;
}
.component.c-teaser a.c-teaser__title-link:hover {
  text-decoration: underline;
}
.component.c-teaser .c-teaser__text p {
  font-size: var(--font-size-body-16);
  line-height: var(--font-line-height-body-16);
  font-weight: var(--font-weight-regular);
  margin: 0.25rem 0 0 0;
}
.component.c-teaser p.c-teaser__date {
  color: var(--color-black);
  font-size: var(--font-size-body-14);
  line-height: var(--font-line-height-body-14);
  font-weight: var(--font-weight-regular);
  margin: 0 0 0.25rem 0;
}
.component.c-teaser .c-teaser__image {
  overflow: hidden;
  -webkit-box-ordinal-group: 2;
          order: 1;
  width: 100%;
}
@media (min-width: 768px) {
  .component.c-teaser .c-teaser__image {
    -webkit-box-ordinal-group: 3;
            order: 2;
    -webkit-box-flex: 0;
            flex: none;
  }
}
.component.c-teaser .c-teaser__meta-wrapper {
  margin-top: auto;
  padding-top: 0.75rem;
}
.component.c-teaser .c-teaser__tags ul {
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
          flex-direction: row;
  flex-wrap: wrap;
  -webkit-column-gap: 1rem;
     -moz-column-gap: 1rem;
          column-gap: 1rem;
}
.component.c-teaser .c-teaser__tags ul li {
  list-style: none;
  line-height: var(--font-line-height-body-12);
}
.component.c-teaser .c-teaser__tags ul li:before {
  display: none;
}
.component.c-teaser .c-teaser__category p {
  margin: 0;
}
.component.c-teaser .c-teaser__category a {
  color: var(--color-black);
  text-decoration: underline;
  font-size: var(--font-size-body-12);
  line-height: var(--font-line-height-body-12);
  font-weight: var(--font-weight-semibold);
  display: inline-block;
  background: #e6edf2;
  background: var(--light-blue, #e6edf2);
  padding: 0.125rem 0.5rem;
}
.component.c-teaser .c-teaser__category a:hover {
  text-decoration: none;
}
.component.c-teaser .c-teaser__category .c-teaser__category-list {
  margin: 0;
  padding: 0;
}
.component.c-teaser.c-teaser__primary .c-teaser__image {
  position: relative;
  width: 100%;
}
@media (min-width: 0px) and (max-width: 767.98px) {
  .component.c-teaser.c-teaser__primary .c-teaser__image {
    width: 100%;
    padding-bottom: 66.67%;
    overflow: hidden;
    position: relative;
  }
  .component.c-teaser.c-teaser__primary .c-teaser__image .component.c-image {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
  }
  .component.c-teaser.c-teaser__primary .c-teaser__image .component.c-image,
  .component.c-teaser.c-teaser__primary .c-teaser__image .c-image__image-wrapper,
  .component.c-teaser.c-teaser__primary .c-teaser__image .contextual-region {
    height: 100%;
  }
  .component.c-teaser.c-teaser__primary .c-teaser__image picture {
    width: 100%;
    height: 100%;
    -o-object-fit: cover;
       object-fit: cover;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
  }
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__primary .c-teaser__image {
    width: 15.625rem;
    min-height: 10.625rem;
    max-height: 15.625rem;
    height: 100%;
  }
}
.component.c-teaser.c-teaser__primary .c-teaser__image .component.c-image,
.component.c-teaser.c-teaser__primary .c-teaser__image .c-image__image-wrapper,
.component.c-teaser.c-teaser__primary .c-teaser__image .contextual-region {
  height: 100%;
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__primary .c-teaser__image picture {
    width: 100%;
    height: 100%;
    -o-object-fit: cover;
       object-fit: cover;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
  }
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__secondary {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
            flex-direction: column;
  }
}
.component.c-teaser.c-teaser__secondary .c-teaser__image {
  width: 100%;
  padding-bottom: 66.67%;
  overflow: hidden;
  position: relative;
}
.component.c-teaser.c-teaser__secondary .c-teaser__image .component.c-image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
.component.c-teaser.c-teaser__secondary .c-teaser__image .component.c-image,
.component.c-teaser.c-teaser__secondary .c-teaser__image .c-image__image-wrapper,
.component.c-teaser.c-teaser__secondary .c-teaser__image .contextual-region {
  height: 100%;
}
.component.c-teaser.c-teaser__secondary .c-teaser__image picture {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__secondary .c-teaser__image {
    -webkit-box-ordinal-group: 2;
            order: 1;
    height: 13.75rem;
  }
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__secondary .c-teaser__content {
    -webkit-box-ordinal-group: 3;
            order: 2;
  }
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__tertiary {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
            flex-direction: column;
  }
}
.component.c-teaser.c-teaser__tertiary .c-teaser__image {
  width: 100%;
  padding-bottom: 66.67%;
  overflow: hidden;
  position: relative;
}
.component.c-teaser.c-teaser__tertiary .c-teaser__image .component.c-image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
.component.c-teaser.c-teaser__tertiary .c-teaser__image .component.c-image,
.component.c-teaser.c-teaser__tertiary .c-teaser__image .c-image__image-wrapper,
.component.c-teaser.c-teaser__tertiary .c-teaser__image .contextual-region {
  height: 100%;
}
.component.c-teaser.c-teaser__tertiary .c-teaser__image picture {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__tertiary .c-teaser__image {
    -webkit-box-ordinal-group: 2;
            order: 1;
    height: 13.75rem;
  }
}
@media (min-width: 768px) {
  .component.c-teaser.c-teaser__tertiary .c-teaser__content {
    -webkit-box-ordinal-group: 3;
            order: 2;
  }
}
.component.c-teaser .c-teaser__languages-wrapper {
  display: -webkit-box;
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  margin: 0.25rem 0 0 0;
}
.component.c-teaser .c-teaser__languages-wrapper h3 {
  font-size: var(--font-size-body-14);
  line-height: var(--font-line-height-body-14);
  font-weight: var(--font-weight-regular);
  margin: 0;
}
.component.c-teaser .c-teaser__languages-wrapper ul {
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
}
.component.c-teaser .c-teaser__languages-wrapper ul li {
  font-size: var(--font-size-body-14);
  line-height: var(--font-line-height-body-14);
  font-weight: var(--font-weight-regular);
}

@media (min-width: 0px) and (max-width: 767.98px) {
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__tertiary .c-teaser__title,
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__secondary .c-teaser__title {
    font-size: var(--font-size-heading-18);
    line-height: var(--font-line-height-heading-18);
  }
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__tertiary .c-teaser__text,
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__secondary .c-teaser__text {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 1023.98px) {
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__tertiary,
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__secondary {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
            flex-direction: row;
  }
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__tertiary .c-teaser__content,
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__secondary .c-teaser__content {
    -webkit-box-ordinal-group: 2;
            order: 1;
    -webkit-box-flex: 1;
            flex: 1;
    padding: 1.5rem 1.5rem 0 1.5rem;
  }
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__tertiary .c-teaser__title,
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__secondary .c-teaser__title {
    font-size: var(--font-size-heading-18);
    line-height: var(--font-line-height-heading-18);
  }
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__tertiary .c-teaser__text,
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__secondary .c-teaser__text {
    display: none;
  }
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__tertiary .c-teaser__image,
  .component.c-list .c-list__list-featured-outer-wrapper .c-list__list-featured .component.c-teaser.c-teaser__secondary .c-teaser__image {
    width: 15.625rem;
    min-height: 10.625rem;
    max-height: 15.625rem;
    height: 100%;
    padding-bottom: 0;
  }
}
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYnJhcmllcy9wYXJ0aWFscy9zZXR0aW5ncy9fYW5pbWF0aW9ucy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL3NldHRpbmdzL19jb2xvcnMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvc2V0dGluZ3MvX3R5cG9ncmFwaHkuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9fcGFydGlhbHMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9mdW5jdGlvbnMvX2FuaW1hdGlvbnMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9mdW5jdGlvbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvZnVuY3Rpb25zL19jYWxjdWxhdGlvbnMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9mdW5jdGlvbnMvX2NvbG9ycy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL2Z1bmN0aW9ucy9fbGF5b3V0LnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvZnVuY3Rpb25zL190eXBvZ3JhcGh5LnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvbWl4aW5zL19icmVha3BvaW50cy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL21peGlucy9fbGlzdHMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9taXhpbnMvX3R5cG9ncmFwaHkuc2NzcyIsImNvbXBvbmVudHMvdGVhc2VyL3RlYXNlci5zY3NzIiwiY29tcG9uZW50cy90ZWFzZXIvdGVhc2VyLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7RUFBQTtBQVFBOzt1Q0FBQTtBQ1JBOzs7RUFBQTtBQUtBOzs7Ozs7dUNBQUE7QUNMQTs7Ozs7Ozs7RUFBQTtBQVdBOzt1Q0FBQTtBQWtCQTs7dUNBQUE7QUFtQkE7O3VDQUFBO0FB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QUFBLE9BQUE7SUFDQSwrQkFBQTtFQ3NSTjtFRG5SSTs7SUFDRSxzQ0FBQTtJQUNBLCtDQUFBO0VDc1JOO0VEblJJOztJQUNFLGFBQUE7RUNzUk47RURuUkk7O0lBQ0UsZ0JBQUE7SUFDQSxxQkFBQTtJQUNBLHFCQUFBO0lBQ0EsWUFBQTtJQUNBLGlCQUFBO0VDc1JOO0FBQ0YiLCJmaWxlIjoiY29tcG9uZW50cy90ZWFzZXIvdGVhc2VyLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2V0dGluZ3MgLSBBbmltYXRpb25zXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGFuaW1hdGlvbiB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIFRyYW5zaXRpb25zXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFRyYW5zaXRpb25zXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kdHJhbnNpdGlvbnM6IChcbiAgJ2Vhc2VJbic6ICAgICAgICAgZWFzZS1pbixcbiAgJ2Vhc2VPdXQnOiAgICAgICAgZWFzZS1vdXQsXG4gICdlYXNlSW5PdXQnOiAgICAgIGVhc2UtaW4tb3V0LFxuXG4gICdlYXNlSW5TaW5lJzogICAgIGN1YmljLWJlemllcigwLjEyLCAwLCAwLjM5LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluU2luZVxuICAnZWFzZU91dFNpbmUnOiAgICBjdWJpYy1iZXppZXIoMC42MSwgMSwgMC44OCwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRTaW5lXG4gICdlYXNlSW5PdXRTaW5lJzogIGN1YmljLWJlemllcigwLjM3LCAwLCAwLjYzLCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0U2luZVxuXG4gICdlYXNlSW5RdWFkJzogICAgIGN1YmljLWJlemllcigwLjExLCAwLCAwLjUsIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5RdWFkXG4gICdlYXNlT3V0UXVhZCc6ICAgIGN1YmljLWJlemllcigwLjUsIDEsIDAuODksIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0UXVhZFxuICAnZWFzZUluT3V0UXVhZCc6ICBjdWJpYy1iZXppZXIoMC40NSwgMCwgMC41NSwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dFF1YWRcblxuICAnZWFzZUluQ3ViaWMnOiAgICBjdWJpYy1iZXppZXIoMC4zMiwgMCwgMC42NywgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbkN1YmljXG4gICdlYXNlT3V0Q3ViaWMnOiAgIGN1YmljLWJlemllcigwLjMzLCAxLCAwLjY4LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dEN1YmljXG4gICdlYXNlSW5PdXRDdWJpYyc6IGN1YmljLWJlemllcigwLjY1LCAwLCAwLjM1LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0Q3ViaWNcblxuICAnZWFzZUluUXVhcnQnOiAgICBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjc1LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluUXVhcnRcbiAgJ2Vhc2VPdXRRdWFydCc6ICAgY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRRdWFydFxuICAnZWFzZUluT3V0UXVhcnQnOiBjdWJpYy1iZXppZXIoMC43NiwgMCwgMC4yNCwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dFF1YXJ0XG5cbiAgJ2Vhc2VJblF1aW50JzogICAgY3ViaWMtYmV6aWVyKDAuNjQsIDAsIDAuNzgsIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5RdWludFxuICAnZWFzZU91dFF1aW50JzogICBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRRdWludFxuICAnZWFzZUluT3V0UXVpbnQnOiBjdWJpYy1iZXppZXIoMC44MywgMCwgMC4xNywgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dFF1aW50XG5cbiAgJ2Vhc2VJbkV4cG8nOiAgICAgY3ViaWMtYmV6aWVyKDAuNywgMCwgMC44NCwgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbkV4cG9cbiAgJ2Vhc2VPdXRFeHBvJzogICAgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRFeHBvXG4gICdlYXNlSW5PdXRFeHBvJzogIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0RXhwb1xuXG4gICdlYXNlSW5DaXJjJzogICAgIGN1YmljLWJlemllcigwLjU1LCAwLCAxLCAwLjQ1KSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQ2lyY1xuICAnZWFzZU91dENpcmMnOiAgICBjdWJpYy1iZXppZXIoMCwgMC41NSwgMC40NSwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRDaXJjXG4gICdlYXNlSW5PdXRDaXJjJzogIGN1YmljLWJlemllcigwLjg1LCAwLCAwLjE1LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0Q2lyY1xuXG4gICdlYXNlSW5CYWNrJzogICAgIGN1YmljLWJlemllcigwLjM2LCAwLCAwLjY2LCAtMC41NiksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbkJhY2tcbiAgJ2Vhc2VPdXRCYWNrJzogICAgY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0QmFja1xuICAnZWFzZUluT3V0QmFjayc6ICBjdWJpYy1iZXppZXIoMC42OCwgLTAuNiwgMC4zMiwgMS42KSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0QmFja1xuKTtcbiIsIi8qKlxuICogU2V0dGluZ3MgLSBCcmVha3BvaW50c1xuICogLSAwMSAtIE1hcHBpbmdcbiAqL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIE1hcHBpbmdcbiAgRGVmYXVsdCBtYXBwaW5nIG9mIGdyaWQgYnJlYWtwb2ludHMsIHdoaWNoIGlzIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIGFuZCBtaXhpbiBicmVha3BvaW50IGZpbGVzLiBBbiBleGFtcGxlIG9mIHVzaW5nXG4gIGJyZWFrcG9pbnRzIGluIGEgZmlsZSBpcyBieSB1c2luZyB0aGUgbWl4aW4gd2l0aCB0aGUgbmFtZSBvZiBhIGJyZWFrcG9pbnQ6IGBAaW5jbHVkZSBicC1taW4oc21hbGwpIHt9YC5cblxuICBUaGVzZSBicmVha3BvaW50cyBtYXkgYmUgYWx0ZXJlZCBkZXBlbmRpbmcgb24gdGhlIHRoZW1lIG5lZWRzLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGdyaWQtYnJlYWtwb2ludHM6IChcbiAgeHNtYWxsOiAwcHgsXG4gIHNtYWxsOiAzNzZweCxcbiAgeG1lZGl1bTogNjAwcHgsXG4gIG1lZGl1bTogNzY4cHgsXG4gIG1lZGl1bTI6IDk0MnB4LFxuICBsYXJnZTogMTAyNHB4LFxuICBsYXJnZTI6IDExOTVweCxcbiAgbGFyZ2VyOiAxMzIwcHgsXG4gIHhsYXJnZTogMTQ0MHB4LFxuICB4eGxhcmdlOiAxNTYwcHgsXG4gIHh4eGxhcmdlOiAxNjAwcHgsXG4pO1xuIiwiLyoqXG4gKiBTZXR0aW5ncyAtIENvbG9yXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGNvbG9yIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gVGhlbWUgQ29sb3JzXG4gKiAtIDAyIC0gR3JheXNjYWxlXG4gKiAtIDAzIC0gVXRpbGl0aWVzXG4gKiAtIDA0IC0gTWFwcGluZ1xuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBUaGVtZSBDb2xvcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRjb2xvci1ibHVlOiAgICAgICMwRDZFRkQ7XG4kY29sb3ItaW5kaWdvOiAgICAjNjYxMEYyO1xuJGNvbG9yLXB1cnBsZTogICAgIzZGNDJDMTtcbiRjb2xvci1waW5rOiAgICAgICNENjMzODQ7XG4kY29sb3ItcmVkOiAgICAgICAjREMzNTQ1O1xuJGNvbG9yLW9yYW5nZTogICAgI0ZEN0UxNDtcbiRjb2xvci15ZWxsb3c6ICAgICNGRkMxMDc7XG4kY29sb3ItZ3JlZW46ICAgICAjMTk4NzU0O1xuJGNvbG9yLXRlYWw6ICAgICAgIzIwQzk5NztcbiRjb2xvci1jeWFuOiAgICAgICMwRENBRjA7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gR3JheXNjYWxlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kY29sb3Itd2hpdGU6ICAgICAjRkZGRkZGO1xuJGNvbG9yLWdyYXktMTAwOiAgI0Y4RjlGQTtcbiRjb2xvci1ncmF5LTIwMDogICNFOUVDRUY7XG4kY29sb3ItZ3JheS0zMDA6ICAjREVFMkU2O1xuJGNvbG9yLWdyYXktNDAwOiAgI0NFRDREQTtcbiRjb2xvci1ncmF5LTUwMDogICNBREI1QkQ7XG4kY29sb3ItZ3JheS02MDA6ICAjNkM3NTdEO1xuJGNvbG9yLWdyYXktNzAwOiAgIzQ5NTA1NztcbiRjb2xvci1ncmF5LTgwMDogICMzNDNBNDA7XG4kY29sb3ItZ3JheS05MDA6ICAjMjEyNTI5O1xuJGNvbG9yLWJsYWNrOiAgICAgIzAwMDAwMDtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBVdGlsaXRpZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRjb2xvci1wcmltYXJ5OiAgICRjb2xvci1ibHVlO1xuJGNvbG9yLXNlY29uZGFyeTogJGNvbG9yLWdyYXktNjAwO1xuJGNvbG9yLXN1Y2Nlc3M6ICAgJGNvbG9yLWdyZWVuO1xuJGNvbG9yLWluZm86ICAgICAgJGNvbG9yLWN5YW47XG4kY29sb3Itd2FybmluZzogICAkY29sb3IteWVsbG93O1xuJGNvbG9yLWRhbmdlcjogICAgJGNvbG9yLXJlZDtcbiRjb2xvci1saWdodDogICAgICRjb2xvci1ncmF5LTEwMDtcbiRjb2xvci1kYXJrOiAgICAgICRjb2xvci1ncmF5LTkwMDtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDQgLSBNYXBwaW5nXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kY29sb3JzOiAoXG4gICdibHVlJzogICAgICAgICAkY29sb3ItYmx1ZSxcbiAgJ2luZGlnbyc6ICAgICAgICRjb2xvci1pbmRpZ28sXG4gICdwdXJwbGUnOiAgICAgICAkY29sb3ItcHVycGxlLFxuICAncGluayc6ICAgICAgICAgJGNvbG9yLXBpbmssXG4gICdyZWQnOiAgICAgICAgICAkY29sb3ItcmVkLFxuICAnb3JhbmdlJzogICAgICAgJGNvbG9yLW9yYW5nZSxcbiAgJ3llbGxvdyc6ICAgICAgICRjb2xvci15ZWxsb3csXG4gICdncmVlbic6ICAgICAgICAkY29sb3ItZ3JlZW4sXG4gICd0ZWFsJzogICAgICAgICAkY29sb3ItdGVhbCxcbiAgJ2N5YW4nOiAgICAgICAgICRjb2xvci1jeWFuLFxuXG4gICd3aGl0ZSc6ICAgICAgICAkY29sb3Itd2hpdGUsXG4gICdncmF5LTEwMCc6ICAgICAkY29sb3ItZ3JheS0xMDAsXG4gICdncmF5LTIwMCc6ICAgICAkY29sb3ItZ3JheS0yMDAsXG4gICdncmF5LTMwMCc6ICAgICAkY29sb3ItZ3JheS0zMDAsXG4gICdncmF5LTQwMCc6ICAgICAkY29sb3ItZ3JheS00MDAsXG4gICdncmF5LTUwMCc6ICAgICAkY29sb3ItZ3JheS01MDAsXG4gICdncmF5LTYwMCc6ICAgICAkY29sb3ItZ3JheS02MDAsXG4gICdncmF5LTcwMCc6ICAgICAkY29sb3ItZ3JheS03MDAsXG4gICdncmF5LTgwMCc6ICAgICAkY29sb3ItZ3JheS04MDAsXG4gICdncmF5LTkwMCc6ICAgICAkY29sb3ItZ3JheS05MDAsXG4gICdibGFjayc6ICAgICAgICAkY29sb3ItYmxhY2ssXG5cbiAgJ3ByaW1hcnknOiAgICAgICRjb2xvci1wcmltYXJ5LFxuICAnc2Vjb25kYXJ5JzogICAgJGNvbG9yLXNlY29uZGFyeSxcbiAgJ3N1Y2Nlc3MnOiAgICAgICRjb2xvci1zdWNjZXNzLFxuICAnaW5mbyc6ICAgICAgICAgJGNvbG9yLWluZm8sXG4gICd3YXJuaW5nJzogICAgICAkY29sb3Itd2FybmluZyxcbiAgJ2Rhbmdlcic6ICAgICAgICRjb2xvci1kYW5nZXIsXG4gICdsaWdodCc6ICAgICAgICAkY29sb3ItbGlnaHQsXG4gICdkYXJrJzogICAgICAgICAkY29sb3ItZGFyayxcbik7XG4iLCIvKipcbiAqIFNldHRpbmdzIC0gTGF5b3V0XG4gKiBTdGFuZGFyZCBzZXRzIG9mIGxheW91dCB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIEdyaWRcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBMYXllcnNcbiAqL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEdyaWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRjb2x1bW4tZ2FwLWxhcmdlOiA0MHB4O1xuJGNvbHVtbi1nYXAtc21hbGw6IDI0cHg7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gV2lkdGhzXG4gIC8vICd4eGxhcmdlJzogIDE5MjBweCxcbiAgLy8gJ3hsYXJnZSc6ICAgMTQ0MHB4LFxuICAvLyAnbGFyZ2UnOiAgICAxMjgwcHgsXG4gIC8vICdtZWRpdW0nOiAgIDk2MHB4LFxuICAvLyAnc21hbGwnOiAgICA3NjhweCxcbiAgLy8gJ3hzbWFsbCc6ICAgNjQwcHgsXG4gIC8vICd4eHNtYWxsJzogIDQ4MHB4LFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJHdpZHRoczogKFxuICBcInhzbWFsbFwiOiAwcHgsXG4gIFwic21hbGxcIjogMzc2cHgsXG4gIFwieG1lZGl1bVwiOiA2MDBweCxcbiAgXCJtZWRpdW1cIjogNzY4cHgsXG4gIFwibWVkaXVtMlwiOiA5NDJweCxcbiAgXCJsYXJnZVwiOiAxMDI0cHgsXG4gIFwibGFyZ2UyXCI6IDExOTVweCxcbiAgXCJsYXJnZXJcIjogMTMyMHB4LFxuICBcInhsYXJnZVwiOiAxNDQwcHgsXG4gIFwieHhsYXJnZVwiOiAxNTYwcHgsXG4gIFwieHh4bGFyZ2VcIjogMTYwMHB4LFxuKTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBMYXllcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiR6LWxheWVyczogKFxuICBcInN1cGVyXCI6IDEwMCxcbiAgXCJ0b3BcIjogOTAsXG4gIFwib3ZlclwiOiAxMCxcbiAgXCJkZWZhdWx0XCI6IDEsXG4gIFwidW5kZXJcIjogLTEsXG4gIFwiYm90dG9tbGVzcy1waXRcIjogLTk5OTksXG4pO1xuIiwiLyoqXG4gKiBTZXR0aW5ncyAtIFR5cG9ncmFwaHlcbiAqIFN0YW5kYXJkIHNldHMgb2YgdHlwb2dyYXBoaWNhbCB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIEhlYWRpbmcgU2l6ZXNcbiAqIC0gMDIgLSBMaW5lIEhlaWdodHNcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSGVhZGluZyBTaXplc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGhlYWRpbmctc2l6ZXM6IChcbiAgeHNtYWxsOiAoXG4gICAgJ2gxJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDU2cHgsXG4gICAgKSxcbiAgICAnaDInOiAoXG4gICAgICAnZm9udC1zaXplJzogNDBweCxcbiAgICApLFxuICAgICdoMyc6IChcbiAgICAgICdmb250LXNpemUnOiAzMnB4LFxuICAgICksXG4gICAgJ2g0JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDIwcHgsXG4gICAgKSxcbiAgICAnaDUnOiAoXG4gICAgICAnZm9udC1zaXplJzogMThweCxcbiAgICApLFxuICAgICdoNic6IChcbiAgICAgICdmb250LXNpemUnOiAxNnB4LFxuICAgICksXG4gICksXG4gIG1lZGl1bTogKFxuICAgICdoMSc6IChcbiAgICAgICdmb250LXNpemUnOiA3MnB4LFxuICAgICksXG4gICAgJ2gyJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDU2cHgsXG4gICAgKSxcbiAgICAnaDMnOiAoXG4gICAgICAnZm9udC1zaXplJzogNDBweCxcbiAgICApLFxuICAgICdoNCc6IChcbiAgICAgICdmb250LXNpemUnOiAzMnB4LFxuICAgICksXG4gICAgJ2g1JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDI0cHgsXG4gICAgKSxcbiAgICAnaDYnOiAoXG4gICAgICAnZm9udC1zaXplJzogMThweCxcbiAgICApLFxuICApLFxuKTtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBMaW5lIEhlaWdodHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRsaW5lLWhlaWdodHM6IChcbiAgJ2hlYWRpbmcnOiAxLjIsXG4gICdib2R5JzogMS42LFxuKTsiLCIvKipcbiAqIFBhcnRpYWxzIENvbWJpbmVkXG4gKiBQYXJ0aWFscyBjYW4gYmUgaW1wb3J0ZWQgaW50byB0aGVtZSBmaWxlcyBlaXRoZXIgb25lIGJ5IG9uZSwgb3IgYnkgdXNpbmcgdGhpcyBjb21iaW5lZCBQYXJ0aWFscyBmaWxlLiBUbyB1c2UgdGhpc1xuICogZmlsZSBhcyB0aGUgaW1wb3J0IHN0YXRlbWVudCwgYEB1c2UgJ1twYXRoXS9wYXJ0aWFscy9wYXJ0aWFscycgYXMgKmAuXG4gKlxuICogLSAwMSAtIFNldHRpbmdzXG4gKiAtIDAyIC0gRnVuY3Rpb25zXG4gKiAtIDAzIC0gTWl4aW5zXG4gKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBTZXR0aW5nc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZvcndhcmQgXCJzZXR0aW5ncy9hbmltYXRpb25zXCI7XG5AZm9yd2FyZCBcInNldHRpbmdzL2JyZWFrcG9pbnRzXCI7XG5AZm9yd2FyZCBcInNldHRpbmdzL2NvbG9yc1wiO1xuQGZvcndhcmQgXCJzZXR0aW5ncy9sYXlvdXRcIjtcbkBmb3J3YXJkIFwic2V0dGluZ3MvdHlwb2dyYXBoeVwiO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEZ1bmN0aW9uc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZvcndhcmQgXCJmdW5jdGlvbnMvYW5pbWF0aW9uc1wiO1xuQGZvcndhcmQgXCJmdW5jdGlvbnMvYnJlYWtwb2ludHNcIjtcbkBmb3J3YXJkIFwiZnVuY3Rpb25zL2NhbGN1bGF0aW9uc1wiO1xuQGZvcndhcmQgXCJmdW5jdGlvbnMvY29sb3JzXCI7XG5AZm9yd2FyZCBcImZ1bmN0aW9ucy9sYXlvdXRcIjtcbkBmb3J3YXJkIFwiZnVuY3Rpb25zL3R5cG9ncmFwaHlcIjtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBNaXhpbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmb3J3YXJkIFwibWl4aW5zL2JyZWFrcG9pbnRzXCI7XG5AZm9yd2FyZCBcIm1peGlucy9saXN0c1wiO1xuQGZvcndhcmQgXCJtaXhpbnMvdHlwb2dyYXBoeVwiO1xuIiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBBbmltYXRpb25zXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCBhbmltYXRpb24gdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIFRyYW5zaXRpb25cbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnLi4vc2V0dGluZ3MvYW5pbWF0aW9ucycgYXMgYW5pbWF0aW9ucztcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBUcmFuc2l0aW9uXG4gIEVhc3kgdG8gdXNlIGZ1bmN0aW9uIHRvIHF1aWNrbHkgZGVmaW5lIGEgdHJhbnNpdGlvbiB3aXRoIHRoZSBhYmlsaXR5IHRvIHJlZmVyZW5jZSBhIGxpYnJhcnkgbWFwcGluZyBvZiBiZXppZXItY3VydmVcbiAgYW5pbWF0aW9ucywgYXMgZGVmaW5lZCBpbiBgcGFydGlhbHMvc2V0dGluZ3MvX2FuaW1hdGlvbnMuc2Nzc2AuXG4gIC0gQHBhcmFtICRhcmd1bWVudDogU3R5bGUgYXJndW1lbnRzIHRoYXQgdGhpcyB0cmFuc2l0aW9uIHNob3VsZCBiZSBhcHBsaWVkIHRvLlxuICAtIEBwYXJhbSAkZHVyYXRpb246IFRoZSBsZW5ndGggb2YgdGltZSB0aGUgdHJhbnNpdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cbiAgLSBAcGFyYW0gJHN0eWxlOiBUaGUgc3R5bGUgb2YgdHJhbnNpdGlvbiwgYXMgZGVmaW5lZCBpbiBgcGFydGlhbHMvc2V0dGluZ3MvX2FuaW1hdGlvbnMuc2Nzc2BcbiAgLSBAZXhhbXBsZSA9IHRyYW5zaXRpb246IHRyYW5zaXRpb24oYWxsLCAwLjZzLCBlYXNlSW5PdXRTaW5lKVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIHRyYW5zaXRpb24oJGFyZ3VtZW50OiBhbGwsICRkdXJhdGlvbjogMC4zNXMsICRzdHlsZTogZWFzZUluT3V0KSB7XG4gIEBpZiBtYXAtaGFzLWtleShhbmltYXRpb25zLiR0cmFuc2l0aW9ucywgJHN0eWxlKSB7XG4gICAgQHJldHVybiAkYXJndW1lbnQgJGR1cmF0aW9uIG1hcC1nZXQoYW5pbWF0aW9ucy4kdHJhbnNpdGlvbnMsICRzdHlsZSk7XG4gIH1cblxuICBAZWxzZSB7XG4gICAgQHdhcm4gXCJObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRzdHlsZX1gLiBcIlxuICAgICsgXCJQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgaW4gYCRhbmltYXRpb25zYCBtYXAuXCI7XG4gIH1cbn0iLCIvKipcbiAqIEZ1bmN0aW9ucyAtIEJyZWFrcG9pbnRzXG4gKiBCcmVha3BvaW50IHZpZXdwb3J0IHNpemVzIGFuZCBtZWRpYSBxdWVyaWVzLiBCcmVha3BvaW50cyBhcmUgZGVmaW5lZCBhcyBhIG1hcCBvZiAobmFtZTogbWluaW11bSB3aWR0aCksIG9yZGVyIGZyb21cbiAqIHhzbWFsbCB0byB4bGFyZ2U6ICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkuIFRoZSBtYXAgZGVmaW5lZCBpbiB0aGUgYCRncmlkLWJyZWFrcG9pbnRzYFxuICogZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIGAkYnJlYWtwb2ludHNgIGFyZ3VtZW50IGJ5IGRlZmF1bHQuXG4gKlxuICogLSAwMSAtIEJyZWFrcG9pbnQgTmV4dFxuICogLSAwMiAtIEJyZWFrcG9pbnQgTWluaW11bVxuICogLSAwMyAtIEJyZWFrcG9pbnQgTWF4aW11bVxuICogLSAwNCAtIEJyZWFrcG9pbnQgSW5maXhcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gQnJlYWtwb2ludCBOZXh0XG4gIE5hbWUgb2YgdGhlIG5leHQgYnJlYWtwb2ludCwgb3IgbnVsbCBmb3IgdGhlIGxhc3QgYnJlYWtwb2ludC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludC1uYW1lczogQnJlYWtwb2ludHMgbWFwcGluZyBuYW1lcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1uZXh0KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzLCAkYnJlYWtwb2ludC1uYW1lczogbWFwLWtleXMoJGJyZWFrcG9pbnRzKSkge1xuICAkbjogaW5kZXgoJGJyZWFrcG9pbnQtbmFtZXMsICRuYW1lKTtcbiAgQGlmIG5vdCAkbiB7XG4gICAgQGVycm9yIFwiYnJlYWtwb2ludCBgI3skbmFtZX1gIG5vdCBmb3VuZCBpbiBgI3skYnJlYWtwb2ludHN9YFwiO1xuICB9XG4gIEByZXR1cm4gaWYoJG4gPCBsZW5ndGgoJGJyZWFrcG9pbnQtbmFtZXMpLCBudGgoJGJyZWFrcG9pbnQtbmFtZXMsICRuICsgMSksIG51bGwpO1xufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEJyZWFrcG9pbnQgTWluaW11bVxuICBNaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE51bGwgZm9yIHRoZSBzbWFsbGVzdCAoZmlyc3QpIGJyZWFrcG9pbnQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBicmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xuICBAcmV0dXJuIGlmKCRtaW4gIT0gMCwgJG1pbiwgbnVsbCk7XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gQnJlYWtwb2ludCBNYXhpbXVtXG4gIFRoZSBtYXhpbXVtIHZhbHVlIGlzIHJlZHVjZWQgYnkgMC4wMnB4IHRvIHdvcmsgYXJvdW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBgbWluLWAgYW5kIGBtYXgtYCBwcmVmaXhlcyBhbmQgdmlld3BvcnRzXG4gIHdpdGggZnJhY3Rpb25hbCB3aWR0aHMuIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvbWVkaWFxdWVyaWVzLTQvI21xLW1pbi1tYXguIFVzZXMgMC4wMnB4IHJhdGhlciB0aGFuIDAuMDFweCB0byB3b3JrXG4gIGFyb3VuZCBhIGN1cnJlbnQgcm91bmRpbmcgYnVnIGluIFNhZmFyaS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgyNjFcbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtYXg6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkbmFtZSk7XG4gIEByZXR1cm4gaWYoJG1heCBhbmQgJG1heCA+IDAsICRtYXggLSAuMDIsIG51bGwpO1xufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIEJyZWFrcG9pbnQgSW5maXhcbiAgUmV0dXJucyBhIGJsYW5rIHN0cmluZyBpZiBzbWFsbGVzdCBicmVha3BvaW50LCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSB3aXRoIGEgZGFzaCBpbiBmcm9udC4gVXNlZnVsIGZvciBtYWtpbmdcbiAgcmVzcG9uc2l2ZSB1dGlsaXRpZXMuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBicmVha3BvaW50LWluZml4KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gIEByZXR1cm4gaWYoYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cykgPT0gbnVsbCwgXCJcIiwgXCItI3skbmFtZX1cIik7XG59XG4iLCIvKipcbiAqIEZ1bmN0aW9ucyAtIENhbGN1bGF0aW9uc1xuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgY2FsY3VsYXRlIGRpZmZlcmVudCB2YWx1ZXMgZnJvbSBwZXJjZW50YWdlcyB0byBzaXppbmcgc3VjaCBhcyBSRU1zLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gVGFyZ2V0L0NvbnRhaW5lciBQZXJjZW50YWdlXG4gKiAtIDAzIC0gUkVNc1xuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICdzYXNzOm1hdGgnO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFRhcmdldC9Db250YWluZXIgUGVyY2VudGFnZVxuICBDYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2Ugb2YgYSB0YXJnZXQgc2l6ZSBjb21wYXJlZCB0byBhIGNvbnRhaW5lciBzaXplLlxuICAtIEBwYXJhbSAkdGFyZ2V0OiBTaXplIG9mIGFuIGVsZW1lbnQgbmVlZGluZyBhIGNhbGN1bGF0ZWQgcGVyY2VudGFnZS5cbiAgLSBAcGFyYW0gJGNvbnRhaW5lcjogU2l6ZSBvZiB0aGUgdGFyZ2V0J3MgY29udGFpbmVyLCBuZWVkZWQgdG8gY2FsY3VsYXRlIHBlcmNlbnRhZ2UuXG4gIC0gQGV4YW1wbGUgPSB3aWR0aDogY2FsYy1wZXJjZW50KDI1MCwgMTAwMCk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gY2FsYy1wZXJjZW50KCR0YXJnZXQsICRjb250YWluZXIpIHtcbiAgQHJldHVybiAoJHRhcmdldCAvICRjb250YWluZXIpICogMTAwJTtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBSRU1zXG4gIENhbGN1bGF0ZSBhIHNpemUgaW50byBSRU0gdW5pdHMgLS0gbW9zdGx5IHVzZWQgZm9yIGZvbnQgc2l6ZSByZW5kZXJpbmcuXG4gIC0gQHBhcmFtICRzaXplOiBTaXplIG9mIGFuIGVsZW1lbnQgbmVlZGluZyBhIGNhbGN1bGF0ZWQgc2l6ZSBpbnRvIFJFTXMuXG4gIC0gQHBhcmFtICRiYXNlOiBCYXNlIGZvbnQgc2l6ZSBvZiB0aGUgc2l0ZSAtLSBkZWZhdWx0cyB0byAxNnB4LlxuICAtIEBleGFtcGxlID0gZm9udC1zaXplOiBjYWxjLXJlbSgyNHB4KTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRiYXNlLWZvbnQtc2l6ZTogMTZweCAhZGVmYXVsdDtcblxuQGZ1bmN0aW9uIHJlbSgkc2l6ZSwgJGJhc2U6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICAkcmVtLXNpemU6IG1hdGguZGl2KCRzaXplLCAkYmFzZSk7XG4gIEByZXR1cm4gI3skcmVtLXNpemV9cmVtO1xufVxuIiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBDb2xvclxuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgY29sb3IgdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIENvbG9yXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJy4uL3NldHRpbmdzL2NvbG9ycycgYXMgY29sb3JzO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIENvbG9yXG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCBjb2xvciBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW4gJ3BhcnRpYWxzL3NldHRpbmdzL19jb2xvcnMuc2Nzcy5cbiAgLSBAcGFyYW0gJGNvbG9yOiBUaGUgc2VsZWN0ZWQgY29sb3IuXG4gIC0gQGV4YW1wbGUgPSBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihwcmltYXJ5KTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBjb2xvcigkY29sb3IpIHtcbiAgQGlmIG1hcC1oYXMta2V5KGNvbG9ycy4kY29sb3JzLCAkY29sb3IpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoY29sb3JzLiRjb2xvcnMsICRjb2xvcik7XG4gIH1cblxuICBAZWxzZSB7XG4gICAgQHdhcm4gJ05vIHZhbHVlIGNvdWxkIGJlIHJldHJpZXZlZCBmb3IgYCN7JGNvbG9yfWAuJ1xuICAgICsgJ1BsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiBgJGNvbG9yc2AgbWFwLic7XG4gIH1cbn1cbiIsIi8qKlxuICogRnVuY3Rpb25zIC0gTGF5b3V0XG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCBsYXlvdXQgdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIFdpZHRoc1xuICogLSAwMyAtIFotaW5kZXhcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnLi4vc2V0dGluZ3MvbGF5b3V0JyBhcyBsYXlvdXQ7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gV2lkdGhzXG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCB3aWR0aCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW4gJ3BhcnRpYWxzL3NldHRpbmdzL19sYXlvdXQuc2Nzcy5cbiAgLSBAcGFyYW0gJHdpZHRoOiBUaGUgc2VsZWN0ZWQgd2lkdGggc2l6ZS5cbiAgLSBAZXhhbXBsZTogd2lkdGg6IHdpZHRoKGxhcmdlKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiB3aWR0aCgkc2l6ZSkge1xuICBAaWYgbWFwLWhhcy1rZXkobGF5b3V0LiR3aWR0aHMsICRzaXplKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KGxheW91dC4kd2lkdGhzLCAkc2l6ZSk7XG4gIH1cblxuICBAZWxzZSB7XG4gICAgQHdhcm4gJ05vIHZhbHVlIGNvdWxkIGJlIHJldHJpZXZlZCBmb3IgYCN7JHNpemV9YC4nXG4gICAgKyAnUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIGluIGAkei1sYXllcnNgIG1hcC4nO1xuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gWi1pbmRleFxuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgei1pbmRleCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW4gJ3BhcnRpYWxzL3NldHRpbmdzL19sYXlvdXQuc2Nzcy5cbiAgLSBAcGFyYW0gJGtleTogVGhlIHNlbGVjdGVkIGxheWVyIHR5cGUuXG4gIC0gQGV4YW1wbGUgPSB6LWluZGV4OiB6LWluZGV4KGJvdHRvbWxlc3MtcGl0KVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIHotaW5kZXgoJGtleSkge1xuICBAaWYgbWFwLWhhcy1rZXkobGF5b3V0LiR6LWxheWVycywgJGtleSkge1xuICAgIEByZXR1cm4gbWFwLWdldChsYXlvdXQuJHotbGF5ZXJzLCAka2V5KTtcbiAgfVxuXG4gIEBlbHNlIHtcbiAgICBAd2FybiAnTm8gdmFsdWUgY291bGQgYmUgcmV0cmlldmVkIGZvciBgI3ska2V5fWAuJ1xuICAgICsgJ1BsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiBgJHotbGF5ZXJzYCBtYXAuJztcbiAgfVxufVxuIiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBUeXBvZ3JhcGh5XG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCB0eXBvZ3JhcGhpY2FsIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBMaW5lIEhlaWdodFxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICcuLi9zZXR0aW5ncy90eXBvZ3JhcGh5JyBhcyB0eXBvZ3JhcGh5O1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIExpbmUgSGVpZ2h0XG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCBMaW5lIEhlaWdodCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW5cbiAgYHBhcnRpYWxzL3NldHRpbmdzL190eXBvZ3JhcGh5LnNjc3NgLlxuICAtIEBwYXJhbSAkc2l6ZTogVGhlIHNlbGVjdGVkIExpbmUgSGVpZ2h0IHR5cGUuXG4gIC0gQGV4YW1wbGU6IGxpbmUtaGVpZ2h0OiBsaW5lLWhlaWdodChoZWFkaW5nKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBsaW5lLWhlaWdodCgkc2l6ZSkge1xuICBAaWYgbWFwLWhhcy1rZXkodHlwb2dyYXBoeS4kbGluZS1oZWlnaHRzLCAkc2l6ZSkge1xuICAgIEByZXR1cm4gbWFwLWdldCh0eXBvZ3JhcGh5LiRsaW5lLWhlaWdodHMsICRzaXplKTtcbiAgfVxuXG4gIEBlbHNlIHtcbiAgICBAd2FybiBcIk5vIHZhbHVlIGNvdWxkIGJlIHJldHJpZXZlZCBmb3IgYCN7JHNpemV9YC4gXCJcbiAgICArIFwiUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIGluIGAkbGluZS1oZWlnaHRzYCBtYXAuXCI7XG4gIH1cbn1cbiIsIi8qKlxuICogTWl4aW5zIC0gQnJlYWtwb2ludHNcbiAqIFVzZSB0aGVzZSBtaXhpbnMgbWFpbmx5IHdoZW4gZGVmaW5pbmcgbWVkaWEgYnJlYWtwb2ludCBzcGVjaWZpY2F0aW9ucyBpbiB0aGVtZSBmaWxlcy4gQm90aCBzZXR0aW5ncyBhbmQgZnVuY3Rpb25zXG4gKiBhcmUgaW1wb3J0ZWQgaGVyZSB0byBzdXBwbGVtZW50IHRoZSBtaXhpbnMgdGhlbXNlbHZlcy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIE1pbmltdW0gQnJlYWtwb2ludFxuICogLSAwMyAtIE1heGltdW0gQnJlYWtwb2ludFxuICogLSAwNCAtIEJldHdlZW4gQnJlYWtwb2ludFxuICogLSAwNSAtIE9ubHkgQnJlYWtwb2ludFxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICcuLi9zZXR0aW5ncy9icmVha3BvaW50cycgYXMgYnAtc2V0dGluZ3M7XG5AdXNlICcuLi9mdW5jdGlvbnMvYnJlYWtwb2ludHMnIGFzIGJwLWZ1bmN0aW9ucztcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBNaW5pbXVtIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgb2YgYXQgbGVhc3QgdGhlIG1pbmltdW0gYnJlYWtwb2ludCB3aWR0aCAtLSBhcHBseSB0byBzY3JlZW4tc2l6ZXMgYWJvdmUgdGhlIGJyZWFrcG9pbnQgc3BlY2lmaWVkLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1taW4obGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gYnAtbWluKCRuYW1lLCAkYnJlYWtwb2ludHM6IGJwLXNldHRpbmdzLiRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtaW46IGJwLWZ1bmN0aW9ucy5icmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgQGlmICRtaW4ge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTWF4aW11bSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIG9mIGF0IG1vc3QgdGhlIG1heGltdW0gYnJlYWtwb2ludCB3aWR0aCAtLSBhcHBseSB0byBzY3JlZW4tc2l6ZXMgYmVsb3cgdGhlIGJyZWFrcG9pbnQgc3BlY2lmaWVkLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1tYXgobGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gYnAtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHM6IGJwLXNldHRpbmdzLiRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtYXg6IGJwLWZ1bmN0aW9ucy5icmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgQGlmICRtYXgge1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gQmV0d2VlbiBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIHRoYXQgc3BhbnMgbXVsdGlwbGUgYnJlYWtwb2ludCB3aWR0aHMgLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGJldHdlZW4gdGhlIGJyZWFrcG9pbnRzIHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJGxvd2VyOiBTZWxlY3RlZCBtaW5pbXVtIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICR1cHBlcjogU2VsZWN0ZWQgbWF4aW11bSBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLWJldHdlZW4oeHNtYWxsLCBsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBicC1iZXR3ZWVuKCRsb3dlciwgJHVwcGVyLCAkYnJlYWtwb2ludHM6IGJwLXNldHRpbmdzLiRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtaW46IGJwLWZ1bmN0aW9ucy5icmVha3BvaW50LW1pbigkbG93ZXIsICRicmVha3BvaW50cyk7XG4gICRtYXg6IGJwLWZ1bmN0aW9ucy5icmVha3BvaW50LW1heCgkdXBwZXIsICRicmVha3BvaW50cyk7XG5cbiAgQGlmICRtaW4gIT0gbnVsbCBhbmQgJG1heCAhPSBudWxsIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWF4ID09IG51bGwge1xuICAgIEBpbmNsdWRlIGJwLW1pbigkbG93ZXIsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtaW4gPT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgYnAtbWF4KCR1cHBlciwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDUgLSBPbmx5IEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgYmV0d2VlbiB0aGUgYnJlYWtwb2ludCdzIG1pbmltdW0gYW5kIG1heGltdW0gd2lkdGhzIC0tIE5vIG1pbmltdW0gZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50LCBhbmRcbiAgbm8gbWF4aW11bSBmb3IgdGhlIGxhcmdlc3Qgb25lLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1vbmx5KGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGJwLW9ubHkoJG5hbWUsICRicmVha3BvaW50czogYnAtc2V0dGluZ3MuJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogYnAtZnVuY3Rpb25zLmJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpO1xuICAkbWF4OiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50cyk7XG5cbiAgQGlmICRtaW4gIT0gbnVsbCBhbmQgJG1heCAhPSBudWxsIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWF4ID09IG51bGwge1xuICAgIEBpbmNsdWRlIGJwLW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1pbiA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBicC1tYXgoJG5hbWUsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIE1peGlucyAtIExpc3RzXG4gKiBVc2UgdGhlc2UgbWl4aW5zIHdoZW4gbmVlZGluZyB0byBlYXNpbHkgZGVmaW5lIGxpc3RzIHN0eWxlcy5cbiAqXG4gKiAtIDAxIC0gQmFzZVxuICogLSAwMiAtIEJ1bGxldHNcbiAqIC0gMDMgLSBOdW1iZXJlZFxuICogLSAwNCAtIE5vIEJ1bGxldHNcbiAqIC0gMDUgLSBJbmxpbmVcbiAqIC0gMDYgLSBSdWxlZFxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBCYXNlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0tcmVzZXQge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW4tbGVmdDogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEJ1bGxldHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBsaXN0LS1idWxsZXRzKCRpdGVtLXNlbGVjdG9yOiBsaSkge1xuICBAaW5jbHVkZSBsaXN0LS1yZXNldDtcblxuICA+ICN7JGl0ZW0tc2VsZWN0b3J9OmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcXDIwMjJcIjtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gIH1cblxuICB1bCB7XG4gICAgbWFyZ2luLXRvcDogNnB4O1xuICAgIHBhZGRpbmctbGVmdDogdmFyKC0tc3BhY2UtaW5kZW50KTtcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE51bWJlcmVkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0tbnVtYmVyZWQoJGl0ZW0tc2VsZWN0b3I6IGxpKSB7XG4gIEBpbmNsdWRlIGxpc3QtLXJlc2V0O1xuICBjb3VudGVyLXJlc2V0OiBudW1iZXI7XG5cbiAgPiAjeyRpdGVtLXNlbGVjdG9yfTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IGNvdW50ZXJzKG51bWJlciwgXCIuXCIpIFwiLlwiO1xuICAgIGNvdW50ZXItaW5jcmVtZW50OiBudW1iZXI7XG4gIH1cblxuICAvLyBTZWNvbmQgTGV2ZWxcbiAgb2wge1xuICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7XG5cbiAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgIHRleHQtaW5kZW50OiAtMzBweDtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLjVlbTtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDQgLSBObyBCdWxsZXRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0tbm8tYnVsbGV0cygkaXRlbS1zZWxlY3RvcjogbGkpIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuXG4gID4gI3skaXRlbS1zZWxlY3Rvcn0ge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDUgLSBJbmxpbmVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBsaXN0LS1pbmxpbmUoJGl0ZW0tc2VsZWN0b3I6IGxpKSB7XG4gID4gI3skaXRlbS1zZWxlY3Rvcn0ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNiAtIFJ1bGVkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0tcnVsZWQgKFxuICAkc3BhY2luZzogMmVtLFxuICAkc3R5bGU6IFwiaW5uZXJcIixcbiAgJGJvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLWNvbG9yKSxcbiAgJGJvcmRlci1zaXplOiAxcHgsXG4gICRib3JkZXItc3R5bGU6IHNvbGlkLFxuICAkaXRlbS1zZWxlY3RvcjogbGlcbikge1xuICBAaW5jbHVkZSBsaXN0LS1uby1idWxsZXRzO1xuXG4gIEBpZiAoJHN0eWxlID09IGlubmVyIG9yICRzdHlsZSA9PSBhYm92ZSkge1xuICAgID4gI3skaXRlbS1zZWxlY3Rvcn0ge1xuICAgICAgYm9yZGVyLXRvcDogJGJvcmRlci1zaXplICRib3JkZXItc3R5bGUgJGJvcmRlci1jb2xvcjtcbiAgICAgIG1hcmdpbi10b3A6ICRzcGFjaW5nO1xuICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nO1xuICAgIH1cblxuICAgIEBpZiAoJHN0eWxlID09IGlubmVyKSB7XG4gICAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9OmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgID4gI3skaXRlbS1zZWxlY3Rvcn06Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiAoJHN0eWxlID09IG91dGVyIG9yICRzdHlsZSA9PSBiZWxvdykge1xuICAgID4gI3skaXRlbS1zZWxlY3Rvcn0ge1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zaXplICRib3JkZXItc3R5bGUgJGJvcmRlci1jb2xvcjtcbiAgICAgIG1hcmdpbi1ib3R0b206ICRzcGFjaW5nO1xuICAgICAgcGFkZGluZy1ib3R0b206ICRzcGFjaW5nO1xuICAgIH1cblxuICAgIEBpZiAoJHN0eWxlID09IG91dGVyKSB7XG4gICAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9OmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogJGJvcmRlci1zaXplICRib3JkZXItc3R5bGUgJGJvcmRlci1jb2xvcjtcbiAgICAgICAgcGFkZGluZy10b3A6ICRzcGFjaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9Omxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBNaXhpbnMgLSBUeXBvZ3JhcGh5XG4gKiBVc2UgdGhlc2UgbWl4aW5zIHdoZW4gbmVlZGluZyB0byBlYXNpbHkgZGVmaW5lIHR5cG9ncmFwaHkgc3R5bGVzLCBzdWNoIGFzIHNpemVzIGFuZCB0eXBvZ3JhcGhpY2FsIGxheW91dC5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIEhlYWRpbmcgU2l6ZVxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICdicmVha3BvaW50cycgYXMgYnJlYWtwb2ludHM7XG5AdXNlICcuLi9mdW5jdGlvbnMvY2FsY3VsYXRpb25zJyBhcyBjYWxjdWxhdGlvbnM7XG5AdXNlICcuLi9zZXR0aW5ncy90eXBvZ3JhcGh5JyBhcyB0eXBvZ3JhcGh5O1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEhlYWRpbmcgU2l6ZVxuICBNZWFudCBmb3IgcmVzcG9uc2l2ZSBoZWFkaW5nIHNpemVzIGFuZCBpcyBiYXNlZCB1cG9uIGJyZWFrcG9pbnRzIGFuZCBhIG1hcHBpbmcgb2YgaGVhZGluZyBzaXplcy4gQnJlYWtwb2ludHMgYXJlXG4gIGRlZmluZWQgaW4gdGhlIGBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc2AgZmlsZSBhbmQgYXJlIHV0aWxpemVkIHdpdGggYSBtaXhpbiwgYXMgZGVmaW5lZCBpblxuICBgcGFydGlhbHMvbWl4aW5zL19icmVha3BvaW50cy5zY3NzYC5cbiAgLSBAcGFyYW0gJHNldHRpbmc6IFNlbGVjdGVkIGhlYWRpbmcgdG8gYXBwbHkgcmVzcG9uc2l2ZSBzaXppbmcgdG8uXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gaGVhZGluZy1zaXplKCRzZXR0aW5nKSB7XG4gIEBlYWNoICRzaXplLCAkZWxlbWVudHMgaW4gdHlwb2dyYXBoeS4kaGVhZGluZy1zaXplcyB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludHMuYnAtbWluKCRzaXplKSB7XG4gICAgICBmb250LXNpemU6IGNhbGN1bGF0aW9ucy5yZW0obWFwLWdldChtYXAtZ2V0KCRlbGVtZW50cywgJHNldHRpbmcpLCAnZm9udC1zaXplJykpO1xuICAgIH1cbiAgfVxufVxuIiwiQGltcG9ydCBcIl9wYXJ0aWFsc1wiO1xuXG4uY29tcG9uZW50LmMtdGVhc2VyIHtcbiAgYm9yZGVyLXJhZGl1czogcmVtKDRweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgYm94LXNoYWRvdzogMHB4IDBweCAxMjBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjA3KTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbiAgLmMtdGVhc2VyX19jb250ZW50IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci13aGl0ZSk7XG4gICAgb3JkZXI6IDI7XG4gICAgcGFkZGluZzogcmVtKDIwcHgpIHJlbSgyMHB4KSAwIHJlbSgyMHB4KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgICAgb3JkZXI6IDE7XG4gICAgICBmbGV4OiAxO1xuXG4gICAgICBwYWRkaW5nOiByZW0oMjRweCkgcmVtKDI0cHgpIDAgcmVtKDI0cHgpO1xuICAgIH1cbiAgfVxuXG4gICYuYy10ZWFzZXJfX25vLWNhdGVnb3J5IC5jLXRlYXNlcl9fY29udGVudCB7XG4gICAgcGFkZGluZzogcmVtKDIwcHgpO1xuICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgIHBhZGRpbmc6IHJlbSgyNHB4KTtcbiAgICB9XG4gIH1cblxuICAuYy10ZWFzZXJfX3RpdGxlIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItbWFpbik7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtaGVhZGluZy0yMik7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtaGVhZGluZy0yMik7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG4gIH1cblxuICBhLmMtdGVhc2VyX190aXRsZS1saW5rIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgJjpob3ZlciB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICB9XG4gIH1cblxuICAuYy10ZWFzZXJfX3RleHQgcCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYm9keS0xNik7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtYm9keS0xNik7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO1xuICAgIG1hcmdpbjogcmVtKDRweCkgMCAwIDA7XG4gIH1cblxuICBwLmMtdGVhc2VyX19kYXRlIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmxhY2spO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJvZHktMTQpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWJvZHktMTQpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1yZWd1bGFyKTtcbiAgICBtYXJnaW46IDAgMCByZW0oNHB4KSAwO1xuICB9XG5cbiAgLmMtdGVhc2VyX19pbWFnZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBvcmRlcjogMTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgICBvcmRlcjogMjtcbiAgICAgIGZsZXg6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLmMtdGVhc2VyX19tZXRhLXdyYXBwZXIge1xuICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgcGFkZGluZy10b3A6IHJlbSgxMnB4KTtcbiAgfVxuXG4gIC5jLXRlYXNlcl9fdGFncyB7XG4gICAgdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgY29sdW1uLWdhcDogcmVtKDE2cHgpO1xuICAgICAgbGkge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1ib2R5LTEyKTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuYy10ZWFzZXJfX2NhdGVnb3J5IHtcbiAgICAvLyBtYXJnaW4tdG9wOiBhdXRvO1xuICAgIC8vIHBhZGRpbmctdG9wOiByZW0oMTJweCk7XG4gICAgcCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIGEge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYm9keS0xMik7XG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1ib2R5LTEyKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodC1ibHVlLCAjZTZlZGYyKTtcbiAgICAgIHBhZGRpbmc6IHJlbSgycHgpIHJlbSg4cHgpO1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLmMtdGVhc2VyX19jYXRlZ29yeS1saXN0IHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpbWFyeSBUZWFzZXIgVmFyaWFudCBTdHlsZXNcbiAgJi5jLXRlYXNlcl9fcHJpbWFyeSB7XG4gICAgLmMtdGVhc2VyX19jb250ZW50IHtcbiAgICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgICAgLy8gbWluLWhlaWdodDogcmVtKDE3MHB4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLmMtdGVhc2VyX19pbWFnZSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgQGluY2x1ZGUgYnAtYmV0d2Vlbih4c21hbGwsIG1lZGl1bSkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDY2LjY3JTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAuY29tcG9uZW50LmMtaW1hZ2Uge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgLmNvbXBvbmVudC5jLWltYWdlLFxuICAgICAgICAuYy1pbWFnZV9faW1hZ2Utd3JhcHBlcixcbiAgICAgICAgLmNvbnRleHR1YWwtcmVnaW9uIHtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgcGljdHVyZSB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgICAgd2lkdGg6IHJlbSgyNTBweCk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IHJlbSgxNzBweCk7XG4gICAgICAgIG1heC1oZWlnaHQ6IHJlbSgyNTBweCk7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5jb21wb25lbnQuYy1pbWFnZSxcbiAgICAgIC5jLWltYWdlX19pbWFnZS13cmFwcGVyLFxuICAgICAgLmNvbnRleHR1YWwtcmVnaW9uIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICAgcGljdHVyZSB7XG4gICAgICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlY29uZGFyeSBUZWFzZXIgVmFyaWFudCBTdHlsZXNcbiAgJi5jLXRlYXNlcl9fc2Vjb25kYXJ5IHtcbiAgICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgICAuYy10ZWFzZXJfX2ltYWdlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcGFkZGluZy1ib3R0b206IDY2LjY3JTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAuY29tcG9uZW50LmMtaW1hZ2Uge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5jb21wb25lbnQuYy1pbWFnZSxcbiAgICAgIC5jLWltYWdlX19pbWFnZS13cmFwcGVyLFxuICAgICAgLmNvbnRleHR1YWwtcmVnaW9uIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICAgcGljdHVyZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgICAgb3JkZXI6IDE7XG4gICAgICAgIGhlaWdodDogcmVtKDIyMHB4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLmMtdGVhc2VyX19jb250ZW50IHtcbiAgICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgICAgb3JkZXI6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGVydGlhcnkgVGVhc2VyIFZhcmlhbnQgU3R5bGVzXG4gICYuYy10ZWFzZXJfX3RlcnRpYXJ5IHtcbiAgICAvLyBib3gtc2hhZG93OiBub25lO1xuICAgIC8vIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAvLyAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgLy8gfVxuICAgIC8vIC5jLXRlYXNlcl9faW1hZ2Uge1xuICAgIC8vICAgaW1nIHtcbiAgICAvLyAgICAgd2lkdGg6IDEwMCU7XG4gICAgLy8gICB9XG4gICAgLy8gICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgLy8gICAgIG9yZGVyOiAxO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAvLyAuYy10ZWFzZXJfX2NvbnRlbnQge1xuICAgIC8vICAgcGFkZGluZzogMDtcbiAgICAvLyAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAvLyAgICAgb3JkZXI6IDI7XG4gICAgLy8gICAgIHBhZGRpbmc6IDA7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIC5jLXRlYXNlcl9fZGF0ZSB7XG4gICAgLy8gICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIC8vIH1cbiAgICAvLyAuYy10ZWFzZXJfX3RpdGxlIHtcbiAgICAvLyAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJvZHktMTgpO1xuICAgIC8vICAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtYm9keS0xOCk7XG4gICAgLy8gICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIC8vIH1cbiAgICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgICAuYy10ZWFzZXJfX2ltYWdlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcGFkZGluZy1ib3R0b206IDY2LjY3JTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAuY29tcG9uZW50LmMtaW1hZ2Uge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cbiAgICAgIC5jb21wb25lbnQuYy1pbWFnZSxcbiAgICAgIC5jLWltYWdlX19pbWFnZS13cmFwcGVyLFxuICAgICAgLmNvbnRleHR1YWwtcmVnaW9uIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICAgcGljdHVyZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgIH1cbiAgICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgICAgb3JkZXI6IDE7XG4gICAgICAgIGhlaWdodDogcmVtKDIyMHB4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLmMtdGVhc2VyX19jb250ZW50IHtcbiAgICAgIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICAgICAgb3JkZXI6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGFuZ3VhZ2VzXG4gIC5jLXRlYXNlcl9fbGFuZ3VhZ2VzLXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogcmVtKDRweCk7XG4gICAgbWFyZ2luOiByZW0oNHB4KSAwIDAgMDtcbiAgICBoMyB7XG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1ib2R5LTE0KTtcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWJvZHktMTQpO1xuICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgZ2FwOiByZW0oNHB4KTtcbiAgICAgIGxpIHtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYm9keS0xNCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWJvZHktMTQpO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtcmVndWxhcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIHtcbiAgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fdGVydGlhcnksXG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSB7XG4gICAgQGluY2x1ZGUgYnAtYmV0d2Vlbih4c21hbGwsIG1lZGl1bSkge1xuICAgICAgLmMtdGVhc2VyX190aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWhlYWRpbmctMTgpO1xuICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1oZWFkaW5nLTE4KTtcbiAgICAgIH1cbiAgICAgIC5jLXRlYXNlcl9fdGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICAgIEBpbmNsdWRlIGJwLWJldHdlZW4obWVkaXVtLCBsYXJnZSkge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAgICAgLmMtdGVhc2VyX19jb250ZW50IHtcbiAgICAgICAgb3JkZXI6IDE7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIHBhZGRpbmc6IHJlbSgyNHB4KSByZW0oMjRweCkgMCByZW0oMjRweCk7XG4gICAgICB9XG5cbiAgICAgIC5jLXRlYXNlcl9fdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1oZWFkaW5nLTE4KTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtaGVhZGluZy0xOCk7XG4gICAgICB9XG5cbiAgICAgIC5jLXRlYXNlcl9fdGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5jLXRlYXNlcl9faW1hZ2Uge1xuICAgICAgICB3aWR0aDogcmVtKDI1MHB4KTtcbiAgICAgICAgbWluLWhlaWdodDogcmVtKDE3MHB4KTtcbiAgICAgICAgbWF4LWhlaWdodDogcmVtKDI1MHB4KTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogU2V0dGluZ3MgLSBBbmltYXRpb25zXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGFuaW1hdGlvbiB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIFRyYW5zaXRpb25zXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gVHJhbnNpdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gQnJlYWtwb2ludHNcbiAqIC0gMDEgLSBNYXBwaW5nXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gTWFwcGluZ1xuICBEZWZhdWx0IG1hcHBpbmcgb2YgZ3JpZCBicmVha3BvaW50cywgd2hpY2ggaXMgdXNlZCBpbiB0aGUgZnVuY3Rpb24gYW5kIG1peGluIGJyZWFrcG9pbnQgZmlsZXMuIEFuIGV4YW1wbGUgb2YgdXNpbmdcbiAgYnJlYWtwb2ludHMgaW4gYSBmaWxlIGlzIGJ5IHVzaW5nIHRoZSBtaXhpbiB3aXRoIHRoZSBuYW1lIG9mIGEgYnJlYWtwb2ludDogYEBpbmNsdWRlIGJwLW1pbihzbWFsbCkge31gLlxuXG4gIFRoZXNlIGJyZWFrcG9pbnRzIG1heSBiZSBhbHRlcmVkIGRlcGVuZGluZyBvbiB0aGUgdGhlbWUgbmVlZHMuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBTZXR0aW5ncyAtIENvbG9yXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGNvbG9yIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gVGhlbWUgQ29sb3JzXG4gKiAtIDAyIC0gR3JheXNjYWxlXG4gKiAtIDAzIC0gVXRpbGl0aWVzXG4gKiAtIDA0IC0gTWFwcGluZ1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFRoZW1lIENvbG9yc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gR3JheXNjYWxlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBVdGlsaXRpZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE1hcHBpbmdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gTGF5b3V0XG4gKiBTdGFuZGFyZCBzZXRzIG9mIGxheW91dCB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIEdyaWRcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBMYXllcnNcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBHcmlkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBXaWR0aHNcbiAgLy8gJ3h4bGFyZ2UnOiAgMTkyMHB4LFxuICAvLyAneGxhcmdlJzogICAxNDQwcHgsXG4gIC8vICdsYXJnZSc6ICAgIDEyODBweCxcbiAgLy8gJ21lZGl1bSc6ICAgOTYwcHgsXG4gIC8vICdzbWFsbCc6ICAgIDc2OHB4LFxuICAvLyAneHNtYWxsJzogICA2NDBweCxcbiAgLy8gJ3h4c21hbGwnOiAgNDgwcHgsXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBMYXllcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gVHlwb2dyYXBoeVxuICogU3RhbmRhcmQgc2V0cyBvZiB0eXBvZ3JhcGhpY2FsIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gSGVhZGluZyBTaXplc1xuICogLSAwMiAtIExpbmUgSGVpZ2h0c1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEhlYWRpbmcgU2l6ZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIExpbmUgSGVpZ2h0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogUGFydGlhbHMgQ29tYmluZWRcbiAqIFBhcnRpYWxzIGNhbiBiZSBpbXBvcnRlZCBpbnRvIHRoZW1lIGZpbGVzIGVpdGhlciBvbmUgYnkgb25lLCBvciBieSB1c2luZyB0aGlzIGNvbWJpbmVkIFBhcnRpYWxzIGZpbGUuIFRvIHVzZSB0aGlzXG4gKiBmaWxlIGFzIHRoZSBpbXBvcnQgc3RhdGVtZW50LCBgQHVzZSAnW3BhdGhdL3BhcnRpYWxzL3BhcnRpYWxzJyBhcyAqYC5cbiAqXG4gKiAtIDAxIC0gU2V0dGluZ3NcbiAqIC0gMDIgLSBGdW5jdGlvbnNcbiAqIC0gMDMgLSBNaXhpbnNcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBTZXR0aW5nc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQW5pbWF0aW9uc1xuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgYW5pbWF0aW9uIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBUcmFuc2l0aW9uXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gVHJhbnNpdGlvblxuICBFYXN5IHRvIHVzZSBmdW5jdGlvbiB0byBxdWlja2x5IGRlZmluZSBhIHRyYW5zaXRpb24gd2l0aCB0aGUgYWJpbGl0eSB0byByZWZlcmVuY2UgYSBsaWJyYXJ5IG1hcHBpbmcgb2YgYmV6aWVyLWN1cnZlXG4gIGFuaW1hdGlvbnMsIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgLlxuICAtIEBwYXJhbSAkYXJndW1lbnQ6IFN0eWxlIGFyZ3VtZW50cyB0aGF0IHRoaXMgdHJhbnNpdGlvbiBzaG91bGQgYmUgYXBwbGllZCB0by5cbiAgLSBAcGFyYW0gJGR1cmF0aW9uOiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhlIHRyYW5zaXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG4gIC0gQHBhcmFtICRzdHlsZTogVGhlIHN0eWxlIG9mIHRyYW5zaXRpb24sIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgXG4gIC0gQGV4YW1wbGUgPSB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uKGFsbCwgMC42cywgZWFzZUluT3V0U2luZSlcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIEJyZWFrcG9pbnRzXG4gKiBCcmVha3BvaW50IHZpZXdwb3J0IHNpemVzIGFuZCBtZWRpYSBxdWVyaWVzLiBCcmVha3BvaW50cyBhcmUgZGVmaW5lZCBhcyBhIG1hcCBvZiAobmFtZTogbWluaW11bSB3aWR0aCksIG9yZGVyIGZyb21cbiAqIHhzbWFsbCB0byB4bGFyZ2U6ICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkuIFRoZSBtYXAgZGVmaW5lZCBpbiB0aGUgYCRncmlkLWJyZWFrcG9pbnRzYFxuICogZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIGAkYnJlYWtwb2ludHNgIGFyZ3VtZW50IGJ5IGRlZmF1bHQuXG4gKlxuICogLSAwMSAtIEJyZWFrcG9pbnQgTmV4dFxuICogLSAwMiAtIEJyZWFrcG9pbnQgTWluaW11bVxuICogLSAwMyAtIEJyZWFrcG9pbnQgTWF4aW11bVxuICogLSAwNCAtIEJyZWFrcG9pbnQgSW5maXhcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBCcmVha3BvaW50IE5leHRcbiAgTmFtZSBvZiB0aGUgbmV4dCBicmVha3BvaW50LCBvciBudWxsIGZvciB0aGUgbGFzdCBicmVha3BvaW50LlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50LW5hbWVzOiBCcmVha3BvaW50cyBtYXBwaW5nIG5hbWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEJyZWFrcG9pbnQgTWluaW11bVxuICBNaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE51bGwgZm9yIHRoZSBzbWFsbGVzdCAoZmlyc3QpIGJyZWFrcG9pbnQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIEJyZWFrcG9pbnQgTWF4aW11bVxuICBUaGUgbWF4aW11bSB2YWx1ZSBpcyByZWR1Y2VkIGJ5IDAuMDJweCB0byB3b3JrIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2YgYG1pbi1gIGFuZCBgbWF4LWAgcHJlZml4ZXMgYW5kIHZpZXdwb3J0c1xuICB3aXRoIGZyYWN0aW9uYWwgd2lkdGhzLiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhcXVlcmllcy00LyNtcS1taW4tbWF4LiBVc2VzIDAuMDJweCByYXRoZXIgdGhhbiAwLjAxcHggdG8gd29ya1xuICBhcm91bmQgYSBjdXJyZW50IHJvdW5kaW5nIGJ1ZyBpbiBTYWZhcmkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIEJyZWFrcG9pbnQgSW5maXhcbiAgUmV0dXJucyBhIGJsYW5rIHN0cmluZyBpZiBzbWFsbGVzdCBicmVha3BvaW50LCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSB3aXRoIGEgZGFzaCBpbiBmcm9udC4gVXNlZnVsIGZvciBtYWtpbmdcbiAgcmVzcG9uc2l2ZSB1dGlsaXRpZXMuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIENhbGN1bGF0aW9uc1xuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgY2FsY3VsYXRlIGRpZmZlcmVudCB2YWx1ZXMgZnJvbSBwZXJjZW50YWdlcyB0byBzaXppbmcgc3VjaCBhcyBSRU1zLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gVGFyZ2V0L0NvbnRhaW5lciBQZXJjZW50YWdlXG4gKiAtIDAzIC0gUkVNc1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFRhcmdldC9Db250YWluZXIgUGVyY2VudGFnZVxuICBDYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2Ugb2YgYSB0YXJnZXQgc2l6ZSBjb21wYXJlZCB0byBhIGNvbnRhaW5lciBzaXplLlxuICAtIEBwYXJhbSAkdGFyZ2V0OiBTaXplIG9mIGFuIGVsZW1lbnQgbmVlZGluZyBhIGNhbGN1bGF0ZWQgcGVyY2VudGFnZS5cbiAgLSBAcGFyYW0gJGNvbnRhaW5lcjogU2l6ZSBvZiB0aGUgdGFyZ2V0J3MgY29udGFpbmVyLCBuZWVkZWQgdG8gY2FsY3VsYXRlIHBlcmNlbnRhZ2UuXG4gIC0gQGV4YW1wbGUgPSB3aWR0aDogY2FsYy1wZXJjZW50KDI1MCwgMTAwMCk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBSRU1zXG4gIENhbGN1bGF0ZSBhIHNpemUgaW50byBSRU0gdW5pdHMgLS0gbW9zdGx5IHVzZWQgZm9yIGZvbnQgc2l6ZSByZW5kZXJpbmcuXG4gIC0gQHBhcmFtICRzaXplOiBTaXplIG9mIGFuIGVsZW1lbnQgbmVlZGluZyBhIGNhbGN1bGF0ZWQgc2l6ZSBpbnRvIFJFTXMuXG4gIC0gQHBhcmFtICRiYXNlOiBCYXNlIGZvbnQgc2l6ZSBvZiB0aGUgc2l0ZSAtLSBkZWZhdWx0cyB0byAxNnB4LlxuICAtIEBleGFtcGxlID0gZm9udC1zaXplOiBjYWxjLXJlbSgyNHB4KTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIENvbG9yXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCBjb2xvciB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gQ29sb3JcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBDb2xvclxuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgY29sb3IgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fY29sb3JzLnNjc3MuXG4gIC0gQHBhcmFtICRjb2xvcjogVGhlIHNlbGVjdGVkIGNvbG9yLlxuICAtIEBleGFtcGxlID0gYmFja2dyb3VuZC1jb2xvcjogY29sb3IocHJpbWFyeSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBGdW5jdGlvbnMgLSBMYXlvdXRcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGxheW91dCB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gV2lkdGhzXG4gKiAtIDAzIC0gWi1pbmRleFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFdpZHRoc1xuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgd2lkdGggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICR3aWR0aDogVGhlIHNlbGVjdGVkIHdpZHRoIHNpemUuXG4gIC0gQGV4YW1wbGU6IHdpZHRoOiB3aWR0aChsYXJnZSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBaLWluZGV4XG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCB6LWluZGV4IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpbiAncGFydGlhbHMvc2V0dGluZ3MvX2xheW91dC5zY3NzLlxuICAtIEBwYXJhbSAka2V5OiBUaGUgc2VsZWN0ZWQgbGF5ZXIgdHlwZS5cbiAgLSBAZXhhbXBsZSA9IHotaW5kZXg6IHotaW5kZXgoYm90dG9tbGVzcy1waXQpXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBGdW5jdGlvbnMgLSBUeXBvZ3JhcGh5XG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCB0eXBvZ3JhcGhpY2FsIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBMaW5lIEhlaWdodFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIExpbmUgSGVpZ2h0XG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCBMaW5lIEhlaWdodCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW5cbiAgYHBhcnRpYWxzL3NldHRpbmdzL190eXBvZ3JhcGh5LnNjc3NgLlxuICAtIEBwYXJhbSAkc2l6ZTogVGhlIHNlbGVjdGVkIExpbmUgSGVpZ2h0IHR5cGUuXG4gIC0gQGV4YW1wbGU6IGxpbmUtaGVpZ2h0OiBsaW5lLWhlaWdodChoZWFkaW5nKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIE1peGlucyAtIEJyZWFrcG9pbnRzXG4gKiBVc2UgdGhlc2UgbWl4aW5zIG1haW5seSB3aGVuIGRlZmluaW5nIG1lZGlhIGJyZWFrcG9pbnQgc3BlY2lmaWNhdGlvbnMgaW4gdGhlbWUgZmlsZXMuIEJvdGggc2V0dGluZ3MgYW5kIGZ1bmN0aW9uc1xuICogYXJlIGltcG9ydGVkIGhlcmUgdG8gc3VwcGxlbWVudCB0aGUgbWl4aW5zIHRoZW1zZWx2ZXMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBNaW5pbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDMgLSBNYXhpbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDQgLSBCZXR3ZWVuIEJyZWFrcG9pbnRcbiAqIC0gMDUgLSBPbmx5IEJyZWFrcG9pbnRcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBNaW5pbXVtIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgb2YgYXQgbGVhc3QgdGhlIG1pbmltdW0gYnJlYWtwb2ludCB3aWR0aCAtLSBhcHBseSB0byBzY3JlZW4tc2l6ZXMgYWJvdmUgdGhlIGJyZWFrcG9pbnQgc3BlY2lmaWVkLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1taW4obGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBNYXhpbXVtIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgb2YgYXQgbW9zdCB0aGUgbWF4aW11bSBicmVha3BvaW50IHdpZHRoIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBiZWxvdyB0aGUgYnJlYWtwb2ludCBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLW1heChsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIEJldHdlZW4gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSB0aGF0IHNwYW5zIG11bHRpcGxlIGJyZWFrcG9pbnQgd2lkdGhzIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBiZXR3ZWVuIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRsb3dlcjogU2VsZWN0ZWQgbWluaW11bSBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkdXBwZXI6IFNlbGVjdGVkIG1heGltdW0gYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1iZXR3ZWVuKHhzbWFsbCwgbGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDUgLSBPbmx5IEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgYmV0d2VlbiB0aGUgYnJlYWtwb2ludCdzIG1pbmltdW0gYW5kIG1heGltdW0gd2lkdGhzIC0tIE5vIG1pbmltdW0gZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50LCBhbmRcbiAgbm8gbWF4aW11bSBmb3IgdGhlIGxhcmdlc3Qgb25lLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1vbmx5KGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogTWl4aW5zIC0gTGlzdHNcbiAqIFVzZSB0aGVzZSBtaXhpbnMgd2hlbiBuZWVkaW5nIHRvIGVhc2lseSBkZWZpbmUgbGlzdHMgc3R5bGVzLlxuICpcbiAqIC0gMDEgLSBCYXNlXG4gKiAtIDAyIC0gQnVsbGV0c1xuICogLSAwMyAtIE51bWJlcmVkXG4gKiAtIDA0IC0gTm8gQnVsbGV0c1xuICogLSAwNSAtIElubGluZVxuICogLSAwNiAtIFJ1bGVkXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gQmFzZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gQnVsbGV0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTnVtYmVyZWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE5vIEJ1bGxldHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNSAtIElubGluZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA2IC0gUnVsZWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE1peGluc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogTWl4aW5zIC0gVHlwb2dyYXBoeVxuICogVXNlIHRoZXNlIG1peGlucyB3aGVuIG5lZWRpbmcgdG8gZWFzaWx5IGRlZmluZSB0eXBvZ3JhcGh5IHN0eWxlcywgc3VjaCBhcyBzaXplcyBhbmQgdHlwb2dyYXBoaWNhbCBsYXlvdXQuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBIZWFkaW5nIFNpemVcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBIZWFkaW5nIFNpemVcbiAgTWVhbnQgZm9yIHJlc3BvbnNpdmUgaGVhZGluZyBzaXplcyBhbmQgaXMgYmFzZWQgdXBvbiBicmVha3BvaW50cyBhbmQgYSBtYXBwaW5nIG9mIGhlYWRpbmcgc2l6ZXMuIEJyZWFrcG9pbnRzIGFyZVxuICBkZWZpbmVkIGluIHRoZSBgcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NgIGZpbGUgYW5kIGFyZSB1dGlsaXplZCB3aXRoIGEgbWl4aW4sIGFzIGRlZmluZWQgaW5cbiAgYHBhcnRpYWxzL21peGlucy9fYnJlYWtwb2ludHMuc2Nzc2AuXG4gIC0gQHBhcmFtICRzZXR0aW5nOiBTZWxlY3RlZCBoZWFkaW5nIHRvIGFwcGx5IHJlc3BvbnNpdmUgc2l6aW5nIHRvLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5jb21wb25lbnQuYy10ZWFzZXIge1xuICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDEyMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDcpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb21wb25lbnQuYy10ZWFzZXIge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX19jb250ZW50IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itd2hpdGUpO1xuICBvcmRlcjogMjtcbiAgcGFkZGluZzogMS4yNXJlbSAxLjI1cmVtIDAgMS4yNXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29tcG9uZW50LmMtdGVhc2VyIC5jLXRlYXNlcl9fY29udGVudCB7XG4gICAgb3JkZXI6IDE7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiAxLjVyZW0gMS41cmVtIDAgMS41cmVtO1xuICB9XG59XG4uY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX19uby1jYXRlZ29yeSAuYy10ZWFzZXJfX2NvbnRlbnQge1xuICBwYWRkaW5nOiAxLjI1cmVtO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX25vLWNhdGVnb3J5IC5jLXRlYXNlcl9fY29udGVudCB7XG4gICAgcGFkZGluZzogMS41cmVtO1xuICB9XG59XG4uY29tcG9uZW50LmMtdGVhc2VyIC5jLXRlYXNlcl9fdGl0bGUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItbWFpbik7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWhlYWRpbmctMjIpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1oZWFkaW5nLTIyKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG59XG4uY29tcG9uZW50LmMtdGVhc2VyIGEuYy10ZWFzZXJfX3RpdGxlLWxpbmsge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uY29tcG9uZW50LmMtdGVhc2VyIGEuYy10ZWFzZXJfX3RpdGxlLWxpbms6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX190ZXh0IHAge1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1ib2R5LTE2KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtYm9keS0xNik7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1yZWd1bGFyKTtcbiAgbWFyZ2luOiAwLjI1cmVtIDAgMCAwO1xufVxuLmNvbXBvbmVudC5jLXRlYXNlciBwLmMtdGVhc2VyX19kYXRlIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWJsYWNrKTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYm9keS0xNCk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWJvZHktMTQpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtcmVndWxhcik7XG4gIG1hcmdpbjogMCAwIDAuMjVyZW0gMDtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX19pbWFnZSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG9yZGVyOiAxO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29tcG9uZW50LmMtdGVhc2VyIC5jLXRlYXNlcl9faW1hZ2Uge1xuICAgIG9yZGVyOiAyO1xuICAgIGZsZXg6IG5vbmU7XG4gIH1cbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX19tZXRhLXdyYXBwZXIge1xuICBtYXJnaW4tdG9wOiBhdXRvO1xuICBwYWRkaW5nLXRvcDogMC43NXJlbTtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX190YWdzIHVsIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGNvbHVtbi1nYXA6IDFyZW07XG59XG4uY29tcG9uZW50LmMtdGVhc2VyIC5jLXRlYXNlcl9fdGFncyB1bCBsaSB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWJvZHktMTIpO1xufVxuLmNvbXBvbmVudC5jLXRlYXNlciAuYy10ZWFzZXJfX3RhZ3MgdWwgbGk6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX19jYXRlZ29yeSBwIHtcbiAgbWFyZ2luOiAwO1xufVxuLmNvbXBvbmVudC5jLXRlYXNlciAuYy10ZWFzZXJfX2NhdGVnb3J5IGEge1xuICBjb2xvcjogdmFyKC0tY29sb3ItYmxhY2spO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYm9keS0xMik7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWJvZHktMTIpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHZhcigtLWxpZ2h0LWJsdWUsICNlNmVkZjIpO1xuICBwYWRkaW5nOiAwLjEyNXJlbSAwLjVyZW07XG59XG4uY29tcG9uZW50LmMtdGVhc2VyIC5jLXRlYXNlcl9fY2F0ZWdvcnkgYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX19jYXRlZ29yeSAuYy10ZWFzZXJfX2NhdGVnb3J5LWxpc3Qge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4uY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX19wcmltYXJ5IC5jLXRlYXNlcl9faW1hZ2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDBweCkgYW5kIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3ByaW1hcnkgLmMtdGVhc2VyX19pbWFnZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDY2LjY3JTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuICAuY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX19wcmltYXJ5IC5jLXRlYXNlcl9faW1hZ2UgLmNvbXBvbmVudC5jLWltYWdlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3ByaW1hcnkgLmMtdGVhc2VyX19pbWFnZSAuY29tcG9uZW50LmMtaW1hZ2UsXG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3ByaW1hcnkgLmMtdGVhc2VyX19pbWFnZSAuYy1pbWFnZV9faW1hZ2Utd3JhcHBlcixcbiAgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fcHJpbWFyeSAuYy10ZWFzZXJfX2ltYWdlIC5jb250ZXh0dWFsLXJlZ2lvbiB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3ByaW1hcnkgLmMtdGVhc2VyX19pbWFnZSBwaWN0dXJlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3ByaW1hcnkgLmMtdGVhc2VyX19pbWFnZSB7XG4gICAgd2lkdGg6IDE1LjYyNXJlbTtcbiAgICBtaW4taGVpZ2h0OiAxMC42MjVyZW07XG4gICAgbWF4LWhlaWdodDogMTUuNjI1cmVtO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fcHJpbWFyeSAuYy10ZWFzZXJfX2ltYWdlIC5jb21wb25lbnQuYy1pbWFnZSxcbi5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3ByaW1hcnkgLmMtdGVhc2VyX19pbWFnZSAuYy1pbWFnZV9faW1hZ2Utd3JhcHBlcixcbi5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3ByaW1hcnkgLmMtdGVhc2VyX19pbWFnZSAuY29udGV4dHVhbC1yZWdpb24ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fcHJpbWFyeSAuYy10ZWFzZXJfX2ltYWdlIHBpY3R1cmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fc2Vjb25kYXJ5IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG59XG4uY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX19zZWNvbmRhcnkgLmMtdGVhc2VyX19pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLWJvdHRvbTogNjYuNjclO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX19zZWNvbmRhcnkgLmMtdGVhc2VyX19pbWFnZSAuY29tcG9uZW50LmMtaW1hZ2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSAuYy10ZWFzZXJfX2ltYWdlIC5jb21wb25lbnQuYy1pbWFnZSxcbi5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSAuYy10ZWFzZXJfX2ltYWdlIC5jLWltYWdlX19pbWFnZS13cmFwcGVyLFxuLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fc2Vjb25kYXJ5IC5jLXRlYXNlcl9faW1hZ2UgLmNvbnRleHR1YWwtcmVnaW9uIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fc2Vjb25kYXJ5IC5jLXRlYXNlcl9faW1hZ2UgcGljdHVyZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9iamVjdC1maXQ6IGNvdmVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX19zZWNvbmRhcnkgLmMtdGVhc2VyX19pbWFnZSB7XG4gICAgb3JkZXI6IDE7XG4gICAgaGVpZ2h0OiAxMy43NXJlbTtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSAuYy10ZWFzZXJfX2NvbnRlbnQge1xuICAgIG9yZGVyOiAyO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fdGVydGlhcnkge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cbn1cbi5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3RlcnRpYXJ5IC5jLXRlYXNlcl9faW1hZ2Uge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy1ib3R0b206IDY2LjY3JTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fdGVydGlhcnkgLmMtdGVhc2VyX19pbWFnZSAuY29tcG9uZW50LmMtaW1hZ2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3RlcnRpYXJ5IC5jLXRlYXNlcl9faW1hZ2UgLmNvbXBvbmVudC5jLWltYWdlLFxuLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fdGVydGlhcnkgLmMtdGVhc2VyX19pbWFnZSAuYy1pbWFnZV9faW1hZ2Utd3JhcHBlcixcbi5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3RlcnRpYXJ5IC5jLXRlYXNlcl9faW1hZ2UgLmNvbnRleHR1YWwtcmVnaW9uIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fdGVydGlhcnkgLmMtdGVhc2VyX19pbWFnZSBwaWN0dXJlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3RlcnRpYXJ5IC5jLXRlYXNlcl9faW1hZ2Uge1xuICAgIG9yZGVyOiAxO1xuICAgIGhlaWdodDogMTMuNzVyZW07XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX190ZXJ0aWFyeSAuYy10ZWFzZXJfX2NvbnRlbnQge1xuICAgIG9yZGVyOiAyO1xuICB9XG59XG4uY29tcG9uZW50LmMtdGVhc2VyIC5jLXRlYXNlcl9fbGFuZ3VhZ2VzLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogMC4yNXJlbTtcbiAgbWFyZ2luOiAwLjI1cmVtIDAgMCAwO1xufVxuLmNvbXBvbmVudC5jLXRlYXNlciAuYy10ZWFzZXJfX2xhbmd1YWdlcy13cmFwcGVyIGgzIHtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYm9keS0xNCk7XG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWJvZHktMTQpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtcmVndWxhcik7XG4gIG1hcmdpbjogMDtcbn1cbi5jb21wb25lbnQuYy10ZWFzZXIgLmMtdGVhc2VyX19sYW5ndWFnZXMtd3JhcHBlciB1bCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IDAuMjVyZW07XG59XG4uY29tcG9uZW50LmMtdGVhc2VyIC5jLXRlYXNlcl9fbGFuZ3VhZ2VzLXdyYXBwZXIgdWwgbGkge1xuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1ib2R5LTE0KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtYm9keS0xNCk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1yZWd1bGFyKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDBweCkgYW5kIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XG4gIC5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3RlcnRpYXJ5IC5jLXRlYXNlcl9fdGl0bGUsXG4gIC5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSAuYy10ZWFzZXJfX3RpdGxlIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1oZWFkaW5nLTE4KTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1oZWFkaW5nLTE4KTtcbiAgfVxuICAuY29tcG9uZW50LmMtbGlzdCAuYy1saXN0X19saXN0LWZlYXR1cmVkLW91dGVyLXdyYXBwZXIgLmMtbGlzdF9fbGlzdC1mZWF0dXJlZCAuY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX190ZXJ0aWFyeSAuYy10ZWFzZXJfX3RleHQsXG4gIC5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSAuYy10ZWFzZXJfX3RleHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDEwMjMuOThweCkge1xuICAuY29tcG9uZW50LmMtbGlzdCAuYy1saXN0X19saXN0LWZlYXR1cmVkLW91dGVyLXdyYXBwZXIgLmMtbGlzdF9fbGlzdC1mZWF0dXJlZCAuY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX190ZXJ0aWFyeSxcbiAgLmNvbXBvbmVudC5jLWxpc3QgLmMtbGlzdF9fbGlzdC1mZWF0dXJlZC1vdXRlci13cmFwcGVyIC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fc2Vjb25kYXJ5IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG4gIC5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3RlcnRpYXJ5IC5jLXRlYXNlcl9fY29udGVudCxcbiAgLmNvbXBvbmVudC5jLWxpc3QgLmMtbGlzdF9fbGlzdC1mZWF0dXJlZC1vdXRlci13cmFwcGVyIC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fc2Vjb25kYXJ5IC5jLXRlYXNlcl9fY29udGVudCB7XG4gICAgb3JkZXI6IDE7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiAxLjVyZW0gMS41cmVtIDAgMS41cmVtO1xuICB9XG4gIC5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3RlcnRpYXJ5IC5jLXRlYXNlcl9fdGl0bGUsXG4gIC5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSAuYy10ZWFzZXJfX3RpdGxlIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1oZWFkaW5nLTE4KTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1oZWFkaW5nLTE4KTtcbiAgfVxuICAuY29tcG9uZW50LmMtbGlzdCAuYy1saXN0X19saXN0LWZlYXR1cmVkLW91dGVyLXdyYXBwZXIgLmMtbGlzdF9fbGlzdC1mZWF0dXJlZCAuY29tcG9uZW50LmMtdGVhc2VyLmMtdGVhc2VyX190ZXJ0aWFyeSAuYy10ZWFzZXJfX3RleHQsXG4gIC5jb21wb25lbnQuYy1saXN0IC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQtb3V0ZXItd3JhcHBlciAuYy1saXN0X19saXN0LWZlYXR1cmVkIC5jb21wb25lbnQuYy10ZWFzZXIuYy10ZWFzZXJfX3NlY29uZGFyeSAuYy10ZWFzZXJfX3RleHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmNvbXBvbmVudC5jLWxpc3QgLmMtbGlzdF9fbGlzdC1mZWF0dXJlZC1vdXRlci13cmFwcGVyIC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fdGVydGlhcnkgLmMtdGVhc2VyX19pbWFnZSxcbiAgLmNvbXBvbmVudC5jLWxpc3QgLmMtbGlzdF9fbGlzdC1mZWF0dXJlZC1vdXRlci13cmFwcGVyIC5jLWxpc3RfX2xpc3QtZmVhdHVyZWQgLmNvbXBvbmVudC5jLXRlYXNlci5jLXRlYXNlcl9fc2Vjb25kYXJ5IC5jLXRlYXNlcl9faW1hZ2Uge1xuICAgIHdpZHRoOiAxNS42MjVyZW07XG4gICAgbWluLWhlaWdodDogMTAuNjI1cmVtO1xuICAgIG1heC1oZWlnaHQ6IDE1LjYyNXJlbTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn0iXX0= */
