/**
 * 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.
\*------------------------------------*/
.c-site-navigation {
  display: -webkit-box;
  display: flex;
  -webkit-box-align: center;
          align-items: center;
  -webkit-box-pack: start;
          justify-content: flex-start;
  padding: 0;
  margin: 0 0 1.25rem 0;
  position: relative;
}
@media (min-width: 768px) {
  .c-site-navigation {
    margin: 0;
    height: 2.5625rem;
    background: var(--light-gray);
    padding: 0 1.25rem;
    -webkit-box-align: center;
            align-items: center;
    -webkit-box-pack: center;
            justify-content: center;
  }
}
.c-site-navigation .menu.c-site-navigation__list[data-depth="0"] {
  position: relative;
  margin: 0;
  padding: 0;
  display: -webkit-box;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
          flex-direction: row;
  -webkit-box-align: center;
          align-items: center;
  gap: 0.5rem;
}
.c-site-navigation .menu.c-site-navigation__list[data-depth="0"] > li {
  list-style: none;
}
.c-site-navigation .menu.c-site-navigation__list[data-depth="0"]:before {
  content: "";
  width: 0.75rem;
  height: 0.75rem;
  background-image: url("./images/globe.svg");
  background-position: center center;
  background-repeat: no-repeat;
  background-size: cover;
  display: block;
}
.c-site-navigation .menu.c-site-navigation__list[data-depth="0"] li {
  display: -webkit-inline-box;
  display: inline-flex;
  -webkit-box-align: center;
          align-items: center;
}
.c-site-navigation .menu.c-site-navigation__list[data-depth="0"] a {
  color: var(--color-black);
  font-size: var(--font-size-body-14);
  line-height: var(--font-line-height-body-14);
  font-weight: var(--font-weight-medium);
  text-decoration: underline;
}
.c-site-navigation .menu.c-site-navigation__list[data-depth="0"] a:hover {
  text-decoration: none;
  color: var(--color-main);
}
.c-site-navigation .menu.c-site-navigation__list[data-depth="0"] a[aria-current=true] {
  text-shadow: -0.25px 0 #000, 0.25px 0 #000;
  text-shadow: -0.25px 0 var(--color-black, #000), 0.25px 0 var(--color-black, #000);
  text-decoration: none;
}
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYnJhcmllcy9wYXJ0aWFscy9zZXR0aW5ncy9fYW5pbWF0aW9ucy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL3NldHRpbmdzL19jb2xvcnMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvc2V0dGluZ3MvX3R5cG9ncmFwaHkuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9fcGFydGlhbHMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9mdW5jdGlvbnMvX2FuaW1hdGlvbnMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9mdW5jdGlvbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvZnVuY3Rpb25zL19jYWxjdWxhdGlvbnMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9mdW5jdGlvbnMvX2NvbG9ycy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL2Z1bmN0aW9ucy9fbGF5b3V0LnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvZnVuY3Rpb25zL190eXBvZ3JhcGh5LnNjc3MiLCJsaWJyYXJpZXMvcGFydGlhbHMvbWl4aW5zL19icmVha3BvaW50cy5zY3NzIiwibGlicmFyaWVzL3BhcnRpYWxzL21peGlucy9fbGlzdHMuc2NzcyIsImxpYnJhcmllcy9wYXJ0aWFscy9taXhpbnMvX3R5cG9ncmFwaHkuc2NzcyIsImNvbXBvbmVudHMvc2l0ZS1uYXZpZ2F0aW9uL3NpdGUtbmF2aWdhdGlvbi5zY3NzIiwiY29tcG9uZW50cy9zaXRlLW5hdmlnYXRpb24vc2l0ZS1uYXZpZ2F0aW9uLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7RUFBQTtBQVFBOzt1Q0FBQTtBQ1JBOzs7RUFBQTtBQUtBOzs7Ozs7dUNBQUE7QUNMQTs7Ozs7Ozs7RUFBQTtBQVdBOzt1Q0FBQTtBQWtCQTs7dUNBQUE7QUFtQkE7O3VDQUFBO0FBZ0JBOzt1Q0FBQTtBQ2hFQTs7Ozs7OztFQUFBO0FBU0E7O3VDQUFBO0FBT0E7Ozs7Ozs7Ozt1Q0FBQTtBQXlCQTs7dUNBQUE7QUN6Q0E7Ozs7OztFQUFBO0FBU0E7O3VDQUFBO0FBa0RBOzt1Q0FBQTtBQzNEQTs7Ozs7Ozs7RUFBQTtBQVVBOzt1Q0FBQTtBQ1ZBOzs7Ozs7RUFBQTtBQVNBOzt1Q0FBQTtBQVNBOzs7Ozs7Ozt1Q0FBQTtBQ2xCQTs7Ozs7Ozs7OztFQUFBO0FBYUE7Ozs7Ozt1Q0FBQTtBQW1CQTs7Ozs7dUNBQUE7QUFlQTs7Ozs7Ozt1Q0FBQTtBQWlCQTs7Ozs7O3VDQUFBO0FDaEVBOzs7Ozs7O0VBQUE7QUFVQTs7dUNBQUE7QUFTQTs7Ozs7O3VDQUFBO0FBZUE7Ozs7Ozt1Q0FBQTtBQ2xDQTs7Ozs7O0VBQUE7QUFTQTs7dUNBQUE7QUFTQTs7Ozs7dUNBQUE7QUNsQkE7Ozs7Ozs7RUFBQTtBQVVBOzt1Q0FBQTtBQVNBOzs7Ozt1Q0FBQTtBQXFCQTs7Ozs7dUNBQUE7QUN4Q0E7Ozs7OztFQUFBO0FBU0E7O3VDQUFBO0FBU0E7Ozs7Ozt1Q0FBQTtBQ2xCQTs7Ozs7Ozs7OztFQUFBO0FBYUE7O3VDQUFBO0FBVUE7Ozs7Ozt1Q0FBQTtBQXNCQTs7Ozs7O3VDQUFBO0FBc0JBOzs7Ozs7O3VDQUFBO0FBK0JBOzs7Ozs7O3VDQUFBO0FDbEdBOzs7Ozs7Ozs7O0VBQUE7QUFhQTs7dUNBQUE7QUFhQTs7dUNBQUE7QUFxQkE7O3VDQUFBO0FBa0NBOzt1Q0FBQTtBQWdCQTs7dUNBQUE7QUFhQTs7dUNBQUE7QVIvRUE7O3VDQUFBO0FTL0JBOzs7Ozs7RUFBQTtBQVNBOzt1Q0FBQTtBQVdBOzs7Ozs7dUNBQUE7QUNsQkE7RUFDRSxvQkFBQTtFQUFBLGFBQUE7RUFDQSx5QkFBQTtVQUFBLG1CQUFBO0VBQ0EsdUJBQUE7VUFBQSwyQkFBQTtFQUNBLFVBQUE7RUFDQSxxQkFBQTtFQUNBLGtCQUFBO0FDaVVGO0FKdlNJO0VHaENKO0lBUUksU0FBQTtJQUNBLGlCQUFBO0lBQ0EsNkJBQUE7SUFDQSxrQkFBQTtJQUNBLHlCQUFBO1lBQUEsbUJBQUE7SUFDQSx3QkFBQTtZQUFBLHVCQUFBO0VDbVVGO0FBQ0Y7QUR4VEU7RUFDRSxrQkFBQTtFRjBERixTQUFBO0VBQ0EsVUFBQTtFRXpERSxvQkFBQTtFQUFBLGFBQUE7RUFDQSw4QkFBQTtFQUFBLDZCQUFBO1VBQUEsbUJBQUE7RUFDQSx5QkFBQTtVQUFBLG1CQUFBO0VBQ0EsV0FBQTtBQzJUSjtBSG5RRTtFQUNFLGdCQUFBO0FHcVFKO0FEN1RJO0VBQ0UsV0FBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0VBQ0EsMkNBQUE7RUFDQSxrQ0FBQTtFQUNBLDRCQUFBO0VBQ0Esc0JBQUE7RUFDQSxjQUFBO0FDK1ROO0FEN1RJO0VBQ0UsMkJBQUE7RUFBQSxvQkFBQTtFQUNBLHlCQUFBO1VBQUEsbUJBQUE7QUMrVE47QUQ3VEk7RUFDRSx5QkFBQTtFQUNBLG1DQUFBO0VBQ0EsNENBQUE7RUFDQSxzQ0FBQTtFQUNBLDBCQUFBO0FDK1ROO0FEOVRNO0VBQ0UscUJBQUE7RUFDQSx3QkFBQTtBQ2dVUjtBRDlUTTtFQUNFLDBDQUFBO0VBQUEsa0ZBQUE7RUFFQSxxQkFBQTtBQytUUiIsImZpbGUiOiJjb21wb25lbnRzL3NpdGUtbmF2aWdhdGlvbi9zaXRlLW5hdmlnYXRpb24uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXR0aW5ncyAtIEFuaW1hdGlvbnNcbiAqIFN0YW5kYXJkIHNldHMgb2YgYW5pbWF0aW9uIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gVHJhbnNpdGlvbnNcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gVHJhbnNpdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiR0cmFuc2l0aW9uczogKFxuICAnZWFzZUluJzogICAgICAgICBlYXNlLWluLFxuICAnZWFzZU91dCc6ICAgICAgICBlYXNlLW91dCxcbiAgJ2Vhc2VJbk91dCc6ICAgICAgZWFzZS1pbi1vdXQsXG5cbiAgJ2Vhc2VJblNpbmUnOiAgICAgY3ViaWMtYmV6aWVyKDAuMTIsIDAsIDAuMzksIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5TaW5lXG4gICdlYXNlT3V0U2luZSc6ICAgIGN1YmljLWJlemllcigwLjYxLCAxLCAwLjg4LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dFNpbmVcbiAgJ2Vhc2VJbk91dFNpbmUnOiAgY3ViaWMtYmV6aWVyKDAuMzcsIDAsIDAuNjMsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRTaW5lXG5cbiAgJ2Vhc2VJblF1YWQnOiAgICAgY3ViaWMtYmV6aWVyKDAuMTEsIDAsIDAuNSwgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YWRcbiAgJ2Vhc2VPdXRRdWFkJzogICAgY3ViaWMtYmV6aWVyKDAuNSwgMSwgMC44OSwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRRdWFkXG4gICdlYXNlSW5PdXRRdWFkJzogIGN1YmljLWJlemllcigwLjQ1LCAwLCAwLjU1LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0UXVhZFxuXG4gICdlYXNlSW5DdWJpYyc6ICAgIGN1YmljLWJlemllcigwLjMyLCAwLCAwLjY3LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQ3ViaWNcbiAgJ2Vhc2VPdXRDdWJpYyc6ICAgY3ViaWMtYmV6aWVyKDAuMzMsIDEsIDAuNjgsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0Q3ViaWNcbiAgJ2Vhc2VJbk91dEN1YmljJzogY3ViaWMtYmV6aWVyKDAuNjUsIDAsIDAuMzUsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRDdWJpY1xuXG4gICdlYXNlSW5RdWFydCc6ICAgIGN1YmljLWJlemllcigwLjUsIDAsIDAuNzUsIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5RdWFydFxuICAnZWFzZU91dFF1YXJ0JzogICBjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dFF1YXJ0XG4gICdlYXNlSW5PdXRRdWFydCc6IGN1YmljLWJlemllcigwLjc2LCAwLCAwLjI0LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0UXVhcnRcblxuICAnZWFzZUluUXVpbnQnOiAgICBjdWJpYy1iZXppZXIoMC42NCwgMCwgMC43OCwgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1aW50XG4gICdlYXNlT3V0UXVpbnQnOiAgIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dFF1aW50XG4gICdlYXNlSW5PdXRRdWludCc6IGN1YmljLWJlemllcigwLjgzLCAwLCAwLjE3LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluT3V0UXVpbnRcblxuICAnZWFzZUluRXhwbyc6ICAgICBjdWJpYy1iZXppZXIoMC43LCAwLCAwLjg0LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluRXhwb1xuICAnZWFzZU91dEV4cG8nOiAgICBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dEV4cG9cbiAgJ2Vhc2VJbk91dEV4cG8nOiAgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRFeHBvXG5cbiAgJ2Vhc2VJbkNpcmMnOiAgICAgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDEsIDAuNDUpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5DaXJjXG4gICdlYXNlT3V0Q2lyYyc6ICAgIGN1YmljLWJlemllcigwLCAwLjU1LCAwLjQ1LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dENpcmNcbiAgJ2Vhc2VJbk91dENpcmMnOiAgY3ViaWMtYmV6aWVyKDAuODUsIDAsIDAuMTUsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRDaXJjXG5cbiAgJ2Vhc2VJbkJhY2snOiAgICAgY3ViaWMtYmV6aWVyKDAuMzYsIDAsIDAuNjYsIC0wLjU2KSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluQmFja1xuICAnZWFzZU91dEJhY2snOiAgICBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRCYWNrXG4gICdlYXNlSW5PdXRCYWNrJzogIGN1YmljLWJlemllcigwLjY4LCAtMC42LCAwLjMyLCAxLjYpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRCYWNrXG4pO1xuIiwiLyoqXG4gKiBTZXR0aW5ncyAtIEJyZWFrcG9pbnRzXG4gKiAtIDAxIC0gTWFwcGluZ1xuICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gTWFwcGluZ1xuICBEZWZhdWx0IG1hcHBpbmcgb2YgZ3JpZCBicmVha3BvaW50cywgd2hpY2ggaXMgdXNlZCBpbiB0aGUgZnVuY3Rpb24gYW5kIG1peGluIGJyZWFrcG9pbnQgZmlsZXMuIEFuIGV4YW1wbGUgb2YgdXNpbmdcbiAgYnJlYWtwb2ludHMgaW4gYSBmaWxlIGlzIGJ5IHVzaW5nIHRoZSBtaXhpbiB3aXRoIHRoZSBuYW1lIG9mIGEgYnJlYWtwb2ludDogYEBpbmNsdWRlIGJwLW1pbihzbWFsbCkge31gLlxuXG4gIFRoZXNlIGJyZWFrcG9pbnRzIG1heSBiZSBhbHRlcmVkIGRlcGVuZGluZyBvbiB0aGUgdGhlbWUgbmVlZHMuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kZ3JpZC1icmVha3BvaW50czogKFxuICB4c21hbGw6IDBweCxcbiAgc21hbGw6IDM3NnB4LFxuICB4bWVkaXVtOiA2MDBweCxcbiAgbWVkaXVtOiA3NjhweCxcbiAgbWVkaXVtMjogOTQycHgsXG4gIGxhcmdlOiAxMDI0cHgsXG4gIGxhcmdlMjogMTE5NXB4LFxuICBsYXJnZXI6IDEzMjBweCxcbiAgeGxhcmdlOiAxNDQwcHgsXG4gIHh4bGFyZ2U6IDE1NjBweCxcbiAgeHh4bGFyZ2U6IDE2MDBweCxcbik7XG4iLCIvKipcbiAqIFNldHRpbmdzIC0gQ29sb3JcbiAqIFN0YW5kYXJkIHNldHMgb2YgY29sb3IgdmFyaWFibGVzIGFuZCBtYXBwaW5ncyB0byBiZSBvZiB1c2UgYWNyb3NzIHRoZSBzaXRlLCBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LlxuICpcbiAqIC0gMDEgLSBUaGVtZSBDb2xvcnNcbiAqIC0gMDIgLSBHcmF5c2NhbGVcbiAqIC0gMDMgLSBVdGlsaXRpZXNcbiAqIC0gMDQgLSBNYXBwaW5nXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFRoZW1lIENvbG9yc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbG9yLWJsdWU6ICAgICAgIzBENkVGRDtcbiRjb2xvci1pbmRpZ286ICAgICM2NjEwRjI7XG4kY29sb3ItcHVycGxlOiAgICAjNkY0MkMxO1xuJGNvbG9yLXBpbms6ICAgICAgI0Q2MzM4NDtcbiRjb2xvci1yZWQ6ICAgICAgICNEQzM1NDU7XG4kY29sb3Itb3JhbmdlOiAgICAjRkQ3RTE0O1xuJGNvbG9yLXllbGxvdzogICAgI0ZGQzEwNztcbiRjb2xvci1ncmVlbjogICAgICMxOTg3NTQ7XG4kY29sb3ItdGVhbDogICAgICAjMjBDOTk3O1xuJGNvbG9yLWN5YW46ICAgICAgIzBEQ0FGMDtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBHcmF5c2NhbGVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRjb2xvci13aGl0ZTogICAgICNGRkZGRkY7XG4kY29sb3ItZ3JheS0xMDA6ICAjRjhGOUZBO1xuJGNvbG9yLWdyYXktMjAwOiAgI0U5RUNFRjtcbiRjb2xvci1ncmF5LTMwMDogICNERUUyRTY7XG4kY29sb3ItZ3JheS00MDA6ICAjQ0VENERBO1xuJGNvbG9yLWdyYXktNTAwOiAgI0FEQjVCRDtcbiRjb2xvci1ncmF5LTYwMDogICM2Qzc1N0Q7XG4kY29sb3ItZ3JheS03MDA6ICAjNDk1MDU3O1xuJGNvbG9yLWdyYXktODAwOiAgIzM0M0E0MDtcbiRjb2xvci1ncmF5LTkwMDogICMyMTI1Mjk7XG4kY29sb3ItYmxhY2s6ICAgICAjMDAwMDAwO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFV0aWxpdGllc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbG9yLXByaW1hcnk6ICAgJGNvbG9yLWJsdWU7XG4kY29sb3Itc2Vjb25kYXJ5OiAkY29sb3ItZ3JheS02MDA7XG4kY29sb3Itc3VjY2VzczogICAkY29sb3ItZ3JlZW47XG4kY29sb3ItaW5mbzogICAgICAkY29sb3ItY3lhbjtcbiRjb2xvci13YXJuaW5nOiAgICRjb2xvci15ZWxsb3c7XG4kY29sb3ItZGFuZ2VyOiAgICAkY29sb3ItcmVkO1xuJGNvbG9yLWxpZ2h0OiAgICAgJGNvbG9yLWdyYXktMTAwO1xuJGNvbG9yLWRhcms6ICAgICAgJGNvbG9yLWdyYXktOTAwO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE1hcHBpbmdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRjb2xvcnM6IChcbiAgJ2JsdWUnOiAgICAgICAgICRjb2xvci1ibHVlLFxuICAnaW5kaWdvJzogICAgICAgJGNvbG9yLWluZGlnbyxcbiAgJ3B1cnBsZSc6ICAgICAgICRjb2xvci1wdXJwbGUsXG4gICdwaW5rJzogICAgICAgICAkY29sb3ItcGluayxcbiAgJ3JlZCc6ICAgICAgICAgICRjb2xvci1yZWQsXG4gICdvcmFuZ2UnOiAgICAgICAkY29sb3Itb3JhbmdlLFxuICAneWVsbG93JzogICAgICAgJGNvbG9yLXllbGxvdyxcbiAgJ2dyZWVuJzogICAgICAgICRjb2xvci1ncmVlbixcbiAgJ3RlYWwnOiAgICAgICAgICRjb2xvci10ZWFsLFxuICAnY3lhbic6ICAgICAgICAgJGNvbG9yLWN5YW4sXG5cbiAgJ3doaXRlJzogICAgICAgICRjb2xvci13aGl0ZSxcbiAgJ2dyYXktMTAwJzogICAgICRjb2xvci1ncmF5LTEwMCxcbiAgJ2dyYXktMjAwJzogICAgICRjb2xvci1ncmF5LTIwMCxcbiAgJ2dyYXktMzAwJzogICAgICRjb2xvci1ncmF5LTMwMCxcbiAgJ2dyYXktNDAwJzogICAgICRjb2xvci1ncmF5LTQwMCxcbiAgJ2dyYXktNTAwJzogICAgICRjb2xvci1ncmF5LTUwMCxcbiAgJ2dyYXktNjAwJzogICAgICRjb2xvci1ncmF5LTYwMCxcbiAgJ2dyYXktNzAwJzogICAgICRjb2xvci1ncmF5LTcwMCxcbiAgJ2dyYXktODAwJzogICAgICRjb2xvci1ncmF5LTgwMCxcbiAgJ2dyYXktOTAwJzogICAgICRjb2xvci1ncmF5LTkwMCxcbiAgJ2JsYWNrJzogICAgICAgICRjb2xvci1ibGFjayxcblxuICAncHJpbWFyeSc6ICAgICAgJGNvbG9yLXByaW1hcnksXG4gICdzZWNvbmRhcnknOiAgICAkY29sb3Itc2Vjb25kYXJ5LFxuICAnc3VjY2Vzcyc6ICAgICAgJGNvbG9yLXN1Y2Nlc3MsXG4gICdpbmZvJzogICAgICAgICAkY29sb3ItaW5mbyxcbiAgJ3dhcm5pbmcnOiAgICAgICRjb2xvci13YXJuaW5nLFxuICAnZGFuZ2VyJzogICAgICAgJGNvbG9yLWRhbmdlcixcbiAgJ2xpZ2h0JzogICAgICAgICRjb2xvci1saWdodCxcbiAgJ2RhcmsnOiAgICAgICAgICRjb2xvci1kYXJrLFxuKTtcbiIsIi8qKlxuICogU2V0dGluZ3MgLSBMYXlvdXRcbiAqIFN0YW5kYXJkIHNldHMgb2YgbGF5b3V0IHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gR3JpZFxuICogLSAwMiAtIFdpZHRoc1xuICogLSAwMyAtIExheWVyc1xuICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gR3JpZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbHVtbi1nYXAtbGFyZ2U6IDQwcHg7XG4kY29sdW1uLWdhcC1zbWFsbDogMjRweDtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBXaWR0aHNcbiAgLy8gJ3h4bGFyZ2UnOiAgMTkyMHB4LFxuICAvLyAneGxhcmdlJzogICAxNDQwcHgsXG4gIC8vICdsYXJnZSc6ICAgIDEyODBweCxcbiAgLy8gJ21lZGl1bSc6ICAgOTYwcHgsXG4gIC8vICdzbWFsbCc6ICAgIDc2OHB4LFxuICAvLyAneHNtYWxsJzogICA2NDBweCxcbiAgLy8gJ3h4c21hbGwnOiAgNDgwcHgsXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kd2lkdGhzOiAoXG4gIFwieHNtYWxsXCI6IDBweCxcbiAgXCJzbWFsbFwiOiAzNzZweCxcbiAgXCJ4bWVkaXVtXCI6IDYwMHB4LFxuICBcIm1lZGl1bVwiOiA3NjhweCxcbiAgXCJtZWRpdW0yXCI6IDk0MnB4LFxuICBcImxhcmdlXCI6IDEwMjRweCxcbiAgXCJsYXJnZTJcIjogMTE5NXB4LFxuICBcImxhcmdlclwiOiAxMzIwcHgsXG4gIFwieGxhcmdlXCI6IDE0NDBweCxcbiAgXCJ4eGxhcmdlXCI6IDE1NjBweCxcbiAgXCJ4eHhsYXJnZVwiOiAxNjAwcHgsXG4pO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIExheWVyc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJHotbGF5ZXJzOiAoXG4gIFwic3VwZXJcIjogMTAwLFxuICBcInRvcFwiOiA5MCxcbiAgXCJvdmVyXCI6IDEwLFxuICBcImRlZmF1bHRcIjogMSxcbiAgXCJ1bmRlclwiOiAtMSxcbiAgXCJib3R0b21sZXNzLXBpdFwiOiAtOTk5OSxcbik7XG4iLCIvKipcbiAqIFNldHRpbmdzIC0gVHlwb2dyYXBoeVxuICogU3RhbmRhcmQgc2V0cyBvZiB0eXBvZ3JhcGhpY2FsIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gSGVhZGluZyBTaXplc1xuICogLSAwMiAtIExpbmUgSGVpZ2h0c1xuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBIZWFkaW5nIFNpemVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kaGVhZGluZy1zaXplczogKFxuICB4c21hbGw6IChcbiAgICAnaDEnOiAoXG4gICAgICAnZm9udC1zaXplJzogNTZweCxcbiAgICApLFxuICAgICdoMic6IChcbiAgICAgICdmb250LXNpemUnOiA0MHB4LFxuICAgICksXG4gICAgJ2gzJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDMycHgsXG4gICAgKSxcbiAgICAnaDQnOiAoXG4gICAgICAnZm9udC1zaXplJzogMjBweCxcbiAgICApLFxuICAgICdoNSc6IChcbiAgICAgICdmb250LXNpemUnOiAxOHB4LFxuICAgICksXG4gICAgJ2g2JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDE2cHgsXG4gICAgKSxcbiAgKSxcbiAgbWVkaXVtOiAoXG4gICAgJ2gxJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDcycHgsXG4gICAgKSxcbiAgICAnaDInOiAoXG4gICAgICAnZm9udC1zaXplJzogNTZweCxcbiAgICApLFxuICAgICdoMyc6IChcbiAgICAgICdmb250LXNpemUnOiA0MHB4LFxuICAgICksXG4gICAgJ2g0JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDMycHgsXG4gICAgKSxcbiAgICAnaDUnOiAoXG4gICAgICAnZm9udC1zaXplJzogMjRweCxcbiAgICApLFxuICAgICdoNic6IChcbiAgICAgICdmb250LXNpemUnOiAxOHB4LFxuICAgICksXG4gICksXG4pO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIExpbmUgSGVpZ2h0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGxpbmUtaGVpZ2h0czogKFxuICAnaGVhZGluZyc6IDEuMixcbiAgJ2JvZHknOiAxLjYsXG4pOyIsIi8qKlxuICogUGFydGlhbHMgQ29tYmluZWRcbiAqIFBhcnRpYWxzIGNhbiBiZSBpbXBvcnRlZCBpbnRvIHRoZW1lIGZpbGVzIGVpdGhlciBvbmUgYnkgb25lLCBvciBieSB1c2luZyB0aGlzIGNvbWJpbmVkIFBhcnRpYWxzIGZpbGUuIFRvIHVzZSB0aGlzXG4gKiBmaWxlIGFzIHRoZSBpbXBvcnQgc3RhdGVtZW50LCBgQHVzZSAnW3BhdGhdL3BhcnRpYWxzL3BhcnRpYWxzJyBhcyAqYC5cbiAqXG4gKiAtIDAxIC0gU2V0dGluZ3NcbiAqIC0gMDIgLSBGdW5jdGlvbnNcbiAqIC0gMDMgLSBNaXhpbnNcbiAqL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFNldHRpbmdzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZm9yd2FyZCBcInNldHRpbmdzL2FuaW1hdGlvbnNcIjtcbkBmb3J3YXJkIFwic2V0dGluZ3MvYnJlYWtwb2ludHNcIjtcbkBmb3J3YXJkIFwic2V0dGluZ3MvY29sb3JzXCI7XG5AZm9yd2FyZCBcInNldHRpbmdzL2xheW91dFwiO1xuQGZvcndhcmQgXCJzZXR0aW5ncy90eXBvZ3JhcGh5XCI7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gRnVuY3Rpb25zXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZm9yd2FyZCBcImZ1bmN0aW9ucy9hbmltYXRpb25zXCI7XG5AZm9yd2FyZCBcImZ1bmN0aW9ucy9icmVha3BvaW50c1wiO1xuQGZvcndhcmQgXCJmdW5jdGlvbnMvY2FsY3VsYXRpb25zXCI7XG5AZm9yd2FyZCBcImZ1bmN0aW9ucy9jb2xvcnNcIjtcbkBmb3J3YXJkIFwiZnVuY3Rpb25zL2xheW91dFwiO1xuQGZvcndhcmQgXCJmdW5jdGlvbnMvdHlwb2dyYXBoeVwiO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE1peGluc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZvcndhcmQgXCJtaXhpbnMvYnJlYWtwb2ludHNcIjtcbkBmb3J3YXJkIFwibWl4aW5zL2xpc3RzXCI7XG5AZm9yd2FyZCBcIm1peGlucy90eXBvZ3JhcGh5XCI7XG4iLCIvKipcbiAqIEZ1bmN0aW9ucyAtIEFuaW1hdGlvbnNcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGFuaW1hdGlvbiB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gVHJhbnNpdGlvblxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICcuLi9zZXR0aW5ncy9hbmltYXRpb25zJyBhcyBhbmltYXRpb25zO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFRyYW5zaXRpb25cbiAgRWFzeSB0byB1c2UgZnVuY3Rpb24gdG8gcXVpY2tseSBkZWZpbmUgYSB0cmFuc2l0aW9uIHdpdGggdGhlIGFiaWxpdHkgdG8gcmVmZXJlbmNlIGEgbGlicmFyeSBtYXBwaW5nIG9mIGJlemllci1jdXJ2ZVxuICBhbmltYXRpb25zLCBhcyBkZWZpbmVkIGluIGBwYXJ0aWFscy9zZXR0aW5ncy9fYW5pbWF0aW9ucy5zY3NzYC5cbiAgLSBAcGFyYW0gJGFyZ3VtZW50OiBTdHlsZSBhcmd1bWVudHMgdGhhdCB0aGlzIHRyYW5zaXRpb24gc2hvdWxkIGJlIGFwcGxpZWQgdG8uXG4gIC0gQHBhcmFtICRkdXJhdGlvbjogVGhlIGxlbmd0aCBvZiB0aW1lIHRoZSB0cmFuc2l0aW9uIHNob3VsZCB0YWtlIHBsYWNlLlxuICAtIEBwYXJhbSAkc3R5bGU6IFRoZSBzdHlsZSBvZiB0cmFuc2l0aW9uLCBhcyBkZWZpbmVkIGluIGBwYXJ0aWFscy9zZXR0aW5ncy9fYW5pbWF0aW9ucy5zY3NzYFxuICAtIEBleGFtcGxlID0gdHJhbnNpdGlvbjogdHJhbnNpdGlvbihhbGwsIDAuNnMsIGVhc2VJbk91dFNpbmUpXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gdHJhbnNpdGlvbigkYXJndW1lbnQ6IGFsbCwgJGR1cmF0aW9uOiAwLjM1cywgJHN0eWxlOiBlYXNlSW5PdXQpIHtcbiAgQGlmIG1hcC1oYXMta2V5KGFuaW1hdGlvbnMuJHRyYW5zaXRpb25zLCAkc3R5bGUpIHtcbiAgICBAcmV0dXJuICRhcmd1bWVudCAkZHVyYXRpb24gbWFwLWdldChhbmltYXRpb25zLiR0cmFuc2l0aW9ucywgJHN0eWxlKTtcbiAgfVxuXG4gIEBlbHNlIHtcbiAgICBAd2FybiBcIk5vIHZhbHVlIGNvdWxkIGJlIHJldHJpZXZlZCBmb3IgYCN7JHN0eWxlfWAuIFwiXG4gICAgKyBcIlBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiBgJGFuaW1hdGlvbnNgIG1hcC5cIjtcbiAgfVxufSIsIi8qKlxuICogRnVuY3Rpb25zIC0gQnJlYWtwb2ludHNcbiAqIEJyZWFrcG9pbnQgdmlld3BvcnQgc2l6ZXMgYW5kIG1lZGlhIHF1ZXJpZXMuIEJyZWFrcG9pbnRzIGFyZSBkZWZpbmVkIGFzIGEgbWFwIG9mIChuYW1lOiBtaW5pbXVtIHdpZHRoKSwgb3JkZXIgZnJvbVxuICogeHNtYWxsIHRvIHhsYXJnZTogKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KS4gVGhlIG1hcCBkZWZpbmVkIGluIHRoZSBgJGdyaWQtYnJlYWtwb2ludHNgXG4gKiBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgYCRicmVha3BvaW50c2AgYXJndW1lbnQgYnkgZGVmYXVsdC5cbiAqXG4gKiAtIDAxIC0gQnJlYWtwb2ludCBOZXh0XG4gKiAtIDAyIC0gQnJlYWtwb2ludCBNaW5pbXVtXG4gKiAtIDAzIC0gQnJlYWtwb2ludCBNYXhpbXVtXG4gKiAtIDA0IC0gQnJlYWtwb2ludCBJbmZpeFxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBCcmVha3BvaW50IE5leHRcbiAgTmFtZSBvZiB0aGUgbmV4dCBicmVha3BvaW50LCBvciBudWxsIGZvciB0aGUgbGFzdCBicmVha3BvaW50LlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50LW5hbWVzOiBCcmVha3BvaW50cyBtYXBwaW5nIG5hbWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBicmVha3BvaW50LW5leHQoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMsICRicmVha3BvaW50LW5hbWVzOiBtYXAta2V5cygkYnJlYWtwb2ludHMpKSB7XG4gICRuOiBpbmRleCgkYnJlYWtwb2ludC1uYW1lcywgJG5hbWUpO1xuICBAaWYgbm90ICRuIHtcbiAgICBAZXJyb3IgXCJicmVha3BvaW50IGAjeyRuYW1lfWAgbm90IGZvdW5kIGluIGAjeyRicmVha3BvaW50c31gXCI7XG4gIH1cbiAgQHJldHVybiBpZigkbiA8IGxlbmd0aCgkYnJlYWtwb2ludC1uYW1lcyksIG50aCgkYnJlYWtwb2ludC1uYW1lcywgJG4gKyAxKSwgbnVsbCk7XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gQnJlYWtwb2ludCBNaW5pbXVtXG4gIE1pbmltdW0gYnJlYWtwb2ludCB3aWR0aC4gTnVsbCBmb3IgdGhlIHNtYWxsZXN0IChmaXJzdCkgYnJlYWtwb2ludC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtaW46IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkbmFtZSk7XG4gIEByZXR1cm4gaWYoJG1pbiAhPSAwLCAkbWluLCBudWxsKTtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBCcmVha3BvaW50IE1heGltdW1cbiAgVGhlIG1heGltdW0gdmFsdWUgaXMgcmVkdWNlZCBieSAwLjAycHggdG8gd29yayBhcm91bmQgdGhlIGxpbWl0YXRpb25zIG9mIGBtaW4tYCBhbmQgYG1heC1gIHByZWZpeGVzIGFuZCB2aWV3cG9ydHNcbiAgd2l0aCBmcmFjdGlvbmFsIHdpZHRocy4gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9tZWRpYXF1ZXJpZXMtNC8jbXEtbWluLW1heC4gVXNlcyAwLjAycHggcmF0aGVyIHRoYW4gMC4wMXB4IHRvIHdvcmtcbiAgYXJvdW5kIGEgY3VycmVudCByb3VuZGluZyBidWcgaW4gU2FmYXJpLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODI2MVxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1heDogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgQHJldHVybiBpZigkbWF4IGFuZCAkbWF4ID4gMCwgJG1heCAtIC4wMiwgbnVsbCk7XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gQnJlYWtwb2ludCBJbmZpeFxuICBSZXR1cm5zIGEgYmxhbmsgc3RyaW5nIGlmIHNtYWxsZXN0IGJyZWFrcG9pbnQsIG90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIHdpdGggYSBkYXNoIGluIGZyb250LiBVc2VmdWwgZm9yIG1ha2luZ1xuICByZXNwb25zaXZlIHV0aWxpdGllcy5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaW5maXgoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgQHJldHVybiBpZihicmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKSA9PSBudWxsLCBcIlwiLCBcIi0jeyRuYW1lfVwiKTtcbn1cbiIsIi8qKlxuICogRnVuY3Rpb25zIC0gQ2FsY3VsYXRpb25zXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBjYWxjdWxhdGUgZGlmZmVyZW50IHZhbHVlcyBmcm9tIHBlcmNlbnRhZ2VzIHRvIHNpemluZyBzdWNoIGFzIFJFTXMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBUYXJnZXQvQ29udGFpbmVyIFBlcmNlbnRhZ2VcbiAqIC0gMDMgLSBSRU1zXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gVGFyZ2V0L0NvbnRhaW5lciBQZXJjZW50YWdlXG4gIENhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSBvZiBhIHRhcmdldCBzaXplIGNvbXBhcmVkIHRvIGEgY29udGFpbmVyIHNpemUuXG4gIC0gQHBhcmFtICR0YXJnZXQ6IFNpemUgb2YgYW4gZWxlbWVudCBuZWVkaW5nIGEgY2FsY3VsYXRlZCBwZXJjZW50YWdlLlxuICAtIEBwYXJhbSAkY29udGFpbmVyOiBTaXplIG9mIHRoZSB0YXJnZXQncyBjb250YWluZXIsIG5lZWRlZCB0byBjYWxjdWxhdGUgcGVyY2VudGFnZS5cbiAgLSBAZXhhbXBsZSA9IHdpZHRoOiBjYWxjLXBlcmNlbnQoMjUwLCAxMDAwKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBjYWxjLXBlcmNlbnQoJHRhcmdldCwgJGNvbnRhaW5lcikge1xuICBAcmV0dXJuICgkdGFyZ2V0IC8gJGNvbnRhaW5lcikgKiAxMDAlO1xufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFJFTXNcbiAgQ2FsY3VsYXRlIGEgc2l6ZSBpbnRvIFJFTSB1bml0cyAtLSBtb3N0bHkgdXNlZCBmb3IgZm9udCBzaXplIHJlbmRlcmluZy5cbiAgLSBAcGFyYW0gJHNpemU6IFNpemUgb2YgYW4gZWxlbWVudCBuZWVkaW5nIGEgY2FsY3VsYXRlZCBzaXplIGludG8gUkVNcy5cbiAgLSBAcGFyYW0gJGJhc2U6IEJhc2UgZm9udCBzaXplIG9mIHRoZSBzaXRlIC0tIGRlZmF1bHRzIHRvIDE2cHguXG4gIC0gQGV4YW1wbGUgPSBmb250LXNpemU6IGNhbGMtcmVtKDI0cHgpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGJhc2UtZm9udC1zaXplOiAxNnB4ICFkZWZhdWx0O1xuXG5AZnVuY3Rpb24gcmVtKCRzaXplLCAkYmFzZTogJGJhc2UtZm9udC1zaXplKSB7XG4gICRyZW0tc2l6ZTogbWF0aC5kaXYoJHNpemUsICRiYXNlKTtcbiAgQHJldHVybiAjeyRyZW0tc2l6ZX1yZW07XG59XG4iLCIvKipcbiAqIEZ1bmN0aW9ucyAtIENvbG9yXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCBjb2xvciB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gQ29sb3JcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnLi4vc2V0dGluZ3MvY29sb3JzJyBhcyBjb2xvcnM7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gQ29sb3JcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIGNvbG9yIGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpbiAncGFydGlhbHMvc2V0dGluZ3MvX2NvbG9ycy5zY3NzLlxuICAtIEBwYXJhbSAkY29sb3I6IFRoZSBzZWxlY3RlZCBjb2xvci5cbiAgLSBAZXhhbXBsZSA9IGJhY2tncm91bmQtY29sb3I6IGNvbG9yKHByaW1hcnkpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGNvbG9yKCRjb2xvcikge1xuICBAaWYgbWFwLWhhcy1rZXkoY29sb3JzLiRjb2xvcnMsICRjb2xvcikge1xuICAgIEByZXR1cm4gbWFwLWdldChjb2xvcnMuJGNvbG9ycywgJGNvbG9yKTtcbiAgfVxuXG4gIEBlbHNlIHtcbiAgICBAd2FybiAnTm8gdmFsdWUgY291bGQgYmUgcmV0cmlldmVkIGZvciBgI3skY29sb3J9YC4nXG4gICAgKyAnUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIGluIGAkY29sb3JzYCBtYXAuJztcbiAgfVxufVxuIiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBMYXlvdXRcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGxheW91dCB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gV2lkdGhzXG4gKiAtIDAzIC0gWi1pbmRleFxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICcuLi9zZXR0aW5ncy9sYXlvdXQnIGFzIGxheW91dDtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBXaWR0aHNcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIHdpZHRoIGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpbiAncGFydGlhbHMvc2V0dGluZ3MvX2xheW91dC5zY3NzLlxuICAtIEBwYXJhbSAkd2lkdGg6IFRoZSBzZWxlY3RlZCB3aWR0aCBzaXplLlxuICAtIEBleGFtcGxlOiB3aWR0aDogd2lkdGgobGFyZ2UpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIHdpZHRoKCRzaXplKSB7XG4gIEBpZiBtYXAtaGFzLWtleShsYXlvdXQuJHdpZHRocywgJHNpemUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobGF5b3V0LiR3aWR0aHMsICRzaXplKTtcbiAgfVxuXG4gIEBlbHNlIHtcbiAgICBAd2FybiAnTm8gdmFsdWUgY291bGQgYmUgcmV0cmlldmVkIGZvciBgI3skc2l6ZX1gLidcbiAgICArICdQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgaW4gYCR6LWxheWVyc2AgbWFwLic7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBaLWluZGV4XG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCB6LWluZGV4IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpbiAncGFydGlhbHMvc2V0dGluZ3MvX2xheW91dC5zY3NzLlxuICAtIEBwYXJhbSAka2V5OiBUaGUgc2VsZWN0ZWQgbGF5ZXIgdHlwZS5cbiAgLSBAZXhhbXBsZSA9IHotaW5kZXg6IHotaW5kZXgoYm90dG9tbGVzcy1waXQpXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gei1pbmRleCgka2V5KSB7XG4gIEBpZiBtYXAtaGFzLWtleShsYXlvdXQuJHotbGF5ZXJzLCAka2V5KSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KGxheW91dC4kei1sYXllcnMsICRrZXkpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuICdObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRrZXl9YC4nXG4gICAgKyAnUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIGluIGAkei1sYXllcnNgIG1hcC4nO1xuICB9XG59XG4iLCIvKipcbiAqIEZ1bmN0aW9ucyAtIFR5cG9ncmFwaHlcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIHR5cG9ncmFwaGljYWwgdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIExpbmUgSGVpZ2h0XG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJy4uL3NldHRpbmdzL3R5cG9ncmFwaHknIGFzIHR5cG9ncmFwaHk7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gTGluZSBIZWlnaHRcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIExpbmUgSGVpZ2h0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpblxuICBgcGFydGlhbHMvc2V0dGluZ3MvX3R5cG9ncmFwaHkuc2Nzc2AuXG4gIC0gQHBhcmFtICRzaXplOiBUaGUgc2VsZWN0ZWQgTGluZSBIZWlnaHQgdHlwZS5cbiAgLSBAZXhhbXBsZTogbGluZS1oZWlnaHQ6IGxpbmUtaGVpZ2h0KGhlYWRpbmcpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGxpbmUtaGVpZ2h0KCRzaXplKSB7XG4gIEBpZiBtYXAtaGFzLWtleSh0eXBvZ3JhcGh5LiRsaW5lLWhlaWdodHMsICRzaXplKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KHR5cG9ncmFwaHkuJGxpbmUtaGVpZ2h0cywgJHNpemUpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuIFwiTm8gdmFsdWUgY291bGQgYmUgcmV0cmlldmVkIGZvciBgI3skc2l6ZX1gLiBcIlxuICAgICsgXCJQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgaW4gYCRsaW5lLWhlaWdodHNgIG1hcC5cIjtcbiAgfVxufVxuIiwiLyoqXG4gKiBNaXhpbnMgLSBCcmVha3BvaW50c1xuICogVXNlIHRoZXNlIG1peGlucyBtYWlubHkgd2hlbiBkZWZpbmluZyBtZWRpYSBicmVha3BvaW50IHNwZWNpZmljYXRpb25zIGluIHRoZW1lIGZpbGVzLiBCb3RoIHNldHRpbmdzIGFuZCBmdW5jdGlvbnNcbiAqIGFyZSBpbXBvcnRlZCBoZXJlIHRvIHN1cHBsZW1lbnQgdGhlIG1peGlucyB0aGVtc2VsdmVzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gTWluaW11bSBCcmVha3BvaW50XG4gKiAtIDAzIC0gTWF4aW11bSBCcmVha3BvaW50XG4gKiAtIDA0IC0gQmV0d2VlbiBCcmVha3BvaW50XG4gKiAtIDA1IC0gT25seSBCcmVha3BvaW50XG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJy4uL3NldHRpbmdzL2JyZWFrcG9pbnRzJyBhcyBicC1zZXR0aW5ncztcbkB1c2UgJy4uL2Z1bmN0aW9ucy9icmVha3BvaW50cycgYXMgYnAtZnVuY3Rpb25zO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIE1pbmltdW0gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSBvZiBhdCBsZWFzdCB0aGUgbWluaW11bSBicmVha3BvaW50IHdpZHRoIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBhYm92ZSB0aGUgYnJlYWtwb2ludCBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLW1pbihsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBicC1taW4oJG5hbWUsICRicmVha3BvaW50czogYnAtc2V0dGluZ3MuJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogYnAtZnVuY3Rpb25zLmJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpO1xuICBAaWYgJG1pbiB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBNYXhpbXVtIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgb2YgYXQgbW9zdCB0aGUgbWF4aW11bSBicmVha3BvaW50IHdpZHRoIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBiZWxvdyB0aGUgYnJlYWtwb2ludCBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLW1heChsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBicC1tYXgoJG5hbWUsICRicmVha3BvaW50czogYnAtc2V0dGluZ3MuJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1heDogYnAtZnVuY3Rpb25zLmJyZWFrcG9pbnQtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHMpO1xuICBAaWYgJG1heCB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDQgLSBCZXR3ZWVuIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgdGhhdCBzcGFucyBtdWx0aXBsZSBicmVha3BvaW50IHdpZHRocyAtLSBhcHBseSB0byBzY3JlZW4tc2l6ZXMgYmV0d2VlbiB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuICAtIEBwYXJhbSAkbG93ZXI6IFNlbGVjdGVkIG1pbmltdW0gYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJHVwcGVyOiBTZWxlY3RlZCBtYXhpbXVtIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtYmV0d2Vlbih4c21hbGwsIGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGJwLWJldHdlZW4oJGxvd2VyLCAkdXBwZXIsICRicmVha3BvaW50czogYnAtc2V0dGluZ3MuJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogYnAtZnVuY3Rpb25zLmJyZWFrcG9pbnQtbWluKCRsb3dlciwgJGJyZWFrcG9pbnRzKTtcbiAgJG1heDogYnAtZnVuY3Rpb25zLmJyZWFrcG9pbnQtbWF4KCR1cHBlciwgJGJyZWFrcG9pbnRzKTtcblxuICBAaWYgJG1pbiAhPSBudWxsIGFuZCAkbWF4ICE9IG51bGwge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtYXggPT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgYnAtbWluKCRsb3dlciwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1pbiA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBicC1tYXgoJHVwcGVyLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNSAtIE9ubHkgQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSBiZXR3ZWVuIHRoZSBicmVha3BvaW50J3MgbWluaW11bSBhbmQgbWF4aW11bSB3aWR0aHMgLS0gTm8gbWluaW11bSBmb3IgdGhlIHNtYWxsZXN0IGJyZWFrcG9pbnQsIGFuZFxuICBubyBtYXhpbXVtIGZvciB0aGUgbGFyZ2VzdCBvbmUuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLW9ubHkobGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gYnAtb25seSgkbmFtZSwgJGJyZWFrcG9pbnRzOiBicC1zZXR0aW5ncy4kZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cyk7XG4gICRtYXg6IGJwLWZ1bmN0aW9ucy5icmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcblxuICBAaWYgJG1pbiAhPSBudWxsIGFuZCAkbWF4ICE9IG51bGwge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtYXggPT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgYnAtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xuICAgIEBpbmNsdWRlIGJwLW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogTWl4aW5zIC0gTGlzdHNcbiAqIFVzZSB0aGVzZSBtaXhpbnMgd2hlbiBuZWVkaW5nIHRvIGVhc2lseSBkZWZpbmUgbGlzdHMgc3R5bGVzLlxuICpcbiAqIC0gMDEgLSBCYXNlXG4gKiAtIDAyIC0gQnVsbGV0c1xuICogLSAwMyAtIE51bWJlcmVkXG4gKiAtIDA0IC0gTm8gQnVsbGV0c1xuICogLSAwNSAtIElubGluZVxuICogLSAwNiAtIFJ1bGVkXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEJhc2VcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBsaXN0LS1yZXNldCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gQnVsbGV0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLWJ1bGxldHMoJGl0ZW0tc2VsZWN0b3I6IGxpKSB7XG4gIEBpbmNsdWRlIGxpc3QtLXJlc2V0O1xuXG4gID4gI3skaXRlbS1zZWxlY3Rvcn06YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcMjAyMlwiO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgfVxuXG4gIHVsIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS1pbmRlbnQpO1xuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTnVtYmVyZWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBsaXN0LS1udW1iZXJlZCgkaXRlbS1zZWxlY3RvcjogbGkpIHtcbiAgQGluY2x1ZGUgbGlzdC0tcmVzZXQ7XG4gIGNvdW50ZXItcmVzZXQ6IG51bWJlcjtcblxuICA+ICN7JGl0ZW0tc2VsZWN0b3J9OmJlZm9yZSB7XG4gICAgY29udGVudDogY291bnRlcnMobnVtYmVyLCBcIi5cIikgXCIuXCI7XG4gICAgY291bnRlci1pbmNyZW1lbnQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFNlY29uZCBMZXZlbFxuICBvbCB7XG4gICAgbWFyZ2luLXRvcDogNnB4O1xuICAgIHBhZGRpbmctbGVmdDogMzBweDtcblxuICAgID4gI3skaXRlbS1zZWxlY3Rvcn0ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgdGV4dC1pbmRlbnQ6IC0zMHB4O1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAuNWVtO1xuICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE5vIEJ1bGxldHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBsaXN0LS1uby1idWxsZXRzKCRpdGVtLXNlbGVjdG9yOiBsaSkge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG5cbiAgPiAjeyRpdGVtLXNlbGVjdG9yfSB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNSAtIElubGluZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLWlubGluZSgkaXRlbS1zZWxlY3RvcjogbGkpIHtcbiAgPiAjeyRpdGVtLXNlbGVjdG9yfSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA2IC0gUnVsZWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBsaXN0LS1ydWxlZCAoXG4gICRzcGFjaW5nOiAyZW0sXG4gICRzdHlsZTogXCJpbm5lclwiLFxuICAkYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItY29sb3IpLFxuICAkYm9yZGVyLXNpemU6IDFweCxcbiAgJGJvcmRlci1zdHlsZTogc29saWQsXG4gICRpdGVtLXNlbGVjdG9yOiBsaVxuKSB7XG4gIEBpbmNsdWRlIGxpc3QtLW5vLWJ1bGxldHM7XG5cbiAgQGlmICgkc3R5bGUgPT0gaW5uZXIgb3IgJHN0eWxlID09IGFib3ZlKSB7XG4gICAgPiAjeyRpdGVtLXNlbGVjdG9yfSB7XG4gICAgICBib3JkZXItdG9wOiAkYm9yZGVyLXNpemUgJGJvcmRlci1zdHlsZSAkYm9yZGVyLWNvbG9yO1xuICAgICAgbWFyZ2luLXRvcDogJHNwYWNpbmc7XG4gICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmc7XG4gICAgfVxuXG4gICAgQGlmICgkc3R5bGUgPT0gaW5uZXIpIHtcbiAgICAgID4gI3skaXRlbS1zZWxlY3Rvcn06Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgPiAjeyRpdGVtLXNlbGVjdG9yfTpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGlmICgkc3R5bGUgPT0gb3V0ZXIgb3IgJHN0eWxlID09IGJlbG93KSB7XG4gICAgPiAjeyRpdGVtLXNlbGVjdG9yfSB7XG4gICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXNpemUgJGJvcmRlci1zdHlsZSAkYm9yZGVyLWNvbG9yO1xuICAgICAgbWFyZ2luLWJvdHRvbTogJHNwYWNpbmc7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHNwYWNpbmc7XG4gICAgfVxuXG4gICAgQGlmICgkc3R5bGUgPT0gb3V0ZXIpIHtcbiAgICAgID4gI3skaXRlbS1zZWxlY3Rvcn06Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wOiAkYm9yZGVyLXNpemUgJGJvcmRlci1zdHlsZSAkYm9yZGVyLWNvbG9yO1xuICAgICAgICBwYWRkaW5nLXRvcDogJHNwYWNpbmc7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgID4gI3skaXRlbS1zZWxlY3Rvcn06bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIE1peGlucyAtIFR5cG9ncmFwaHlcbiAqIFVzZSB0aGVzZSBtaXhpbnMgd2hlbiBuZWVkaW5nIHRvIGVhc2lseSBkZWZpbmUgdHlwb2dyYXBoeSBzdHlsZXMsIHN1Y2ggYXMgc2l6ZXMgYW5kIHR5cG9ncmFwaGljYWwgbGF5b3V0LlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gSGVhZGluZyBTaXplXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJ2JyZWFrcG9pbnRzJyBhcyBicmVha3BvaW50cztcbkB1c2UgJy4uL2Z1bmN0aW9ucy9jYWxjdWxhdGlvbnMnIGFzIGNhbGN1bGF0aW9ucztcbkB1c2UgJy4uL3NldHRpbmdzL3R5cG9ncmFwaHknIGFzIHR5cG9ncmFwaHk7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gSGVhZGluZyBTaXplXG4gIE1lYW50IGZvciByZXNwb25zaXZlIGhlYWRpbmcgc2l6ZXMgYW5kIGlzIGJhc2VkIHVwb24gYnJlYWtwb2ludHMgYW5kIGEgbWFwcGluZyBvZiBoZWFkaW5nIHNpemVzLiBCcmVha3BvaW50cyBhcmVcbiAgZGVmaW5lZCBpbiB0aGUgYHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzYCBmaWxlIGFuZCBhcmUgdXRpbGl6ZWQgd2l0aCBhIG1peGluLCBhcyBkZWZpbmVkIGluXG4gIGBwYXJ0aWFscy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3NgLlxuICAtIEBwYXJhbSAkc2V0dGluZzogU2VsZWN0ZWQgaGVhZGluZyB0byBhcHBseSByZXNwb25zaXZlIHNpemluZyB0by5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBoZWFkaW5nLXNpemUoJHNldHRpbmcpIHtcbiAgQGVhY2ggJHNpemUsICRlbGVtZW50cyBpbiB0eXBvZ3JhcGh5LiRoZWFkaW5nLXNpemVzIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50cy5icC1taW4oJHNpemUpIHtcbiAgICAgIGZvbnQtc2l6ZTogY2FsY3VsYXRpb25zLnJlbShtYXAtZ2V0KG1hcC1nZXQoJGVsZW1lbnRzLCAkc2V0dGluZyksICdmb250LXNpemUnKSk7XG4gICAgfVxuICB9XG59XG4iLCJAaW1wb3J0IFwiX3BhcnRpYWxzXCI7XG5cbi5jLXNpdGUtbmF2aWdhdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDAgcmVtKDIwcHgpIDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIG1hcmdpbjogMDtcbiAgICBoZWlnaHQ6IHJlbSg0MXB4KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodC1ncmF5KTtcbiAgICBwYWRkaW5nOiAwIHJlbSgyMHB4KTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC8vICY6OmJlZm9yZSB7XG4gICAgLy8gICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWdodC1ncmF5KTtcbiAgICAvLyAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyAgIHRvcDogMDtcbiAgICAvLyAgIGhlaWdodDogMTAwJTtcbiAgICAvLyAgIHdpZHRoOiAxMDAlO1xuICAgIC8vICAgbGVmdDogY2FsYygxMDAlICsgMHB4KTtcbiAgICAvLyAgIHotaW5kZXg6IDA7XG4gICAgLy8gICBjb250ZW50OiBcIlwiO1xuICAgIC8vIH1cbiAgfVxuICAubWVudS5jLXNpdGUtbmF2aWdhdGlvbl9fbGlzdFtkYXRhLWRlcHRoPVwiMFwiXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIEBpbmNsdWRlIGxpc3QtLW5vLWJ1bGxldHM7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiByZW0oOHB4KTtcbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgd2lkdGg6IHJlbSgxMnB4KTtcbiAgICAgIGhlaWdodDogcmVtKDEycHgpO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi9pbWFnZXMvZ2xvYmUuc3ZnXCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgIGxpIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgYSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItYmxhY2spO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtYm9keS0xNCk7XG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1ib2R5LTE0KTtcbiAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItbWFpbik7XG4gICAgICB9XG4gICAgICAmW2FyaWEtY3VycmVudD1cInRydWVcIl0ge1xuICAgICAgICB0ZXh0LXNoYWRvdzogLTAuMjVweCAwIHZhcigtLWNvbG9yLWJsYWNrLCAjMDAwKSxcbiAgICAgICAgICAwLjI1cHggMCB2YXIoLS1jb2xvci1ibGFjaywgIzAwMCk7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogU2V0dGluZ3MgLSBBbmltYXRpb25zXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGFuaW1hdGlvbiB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIFRyYW5zaXRpb25zXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gVHJhbnNpdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gQnJlYWtwb2ludHNcbiAqIC0gMDEgLSBNYXBwaW5nXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gTWFwcGluZ1xuICBEZWZhdWx0IG1hcHBpbmcgb2YgZ3JpZCBicmVha3BvaW50cywgd2hpY2ggaXMgdXNlZCBpbiB0aGUgZnVuY3Rpb24gYW5kIG1peGluIGJyZWFrcG9pbnQgZmlsZXMuIEFuIGV4YW1wbGUgb2YgdXNpbmdcbiAgYnJlYWtwb2ludHMgaW4gYSBmaWxlIGlzIGJ5IHVzaW5nIHRoZSBtaXhpbiB3aXRoIHRoZSBuYW1lIG9mIGEgYnJlYWtwb2ludDogYEBpbmNsdWRlIGJwLW1pbihzbWFsbCkge31gLlxuXG4gIFRoZXNlIGJyZWFrcG9pbnRzIG1heSBiZSBhbHRlcmVkIGRlcGVuZGluZyBvbiB0aGUgdGhlbWUgbmVlZHMuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBTZXR0aW5ncyAtIENvbG9yXG4gKiBTdGFuZGFyZCBzZXRzIG9mIGNvbG9yIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gVGhlbWUgQ29sb3JzXG4gKiAtIDAyIC0gR3JheXNjYWxlXG4gKiAtIDAzIC0gVXRpbGl0aWVzXG4gKiAtIDA0IC0gTWFwcGluZ1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFRoZW1lIENvbG9yc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gR3JheXNjYWxlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBVdGlsaXRpZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE1hcHBpbmdcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gTGF5b3V0XG4gKiBTdGFuZGFyZCBzZXRzIG9mIGxheW91dCB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIEdyaWRcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBMYXllcnNcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBHcmlkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBXaWR0aHNcbiAgLy8gJ3h4bGFyZ2UnOiAgMTkyMHB4LFxuICAvLyAneGxhcmdlJzogICAxNDQwcHgsXG4gIC8vICdsYXJnZSc6ICAgIDEyODBweCxcbiAgLy8gJ21lZGl1bSc6ICAgOTYwcHgsXG4gIC8vICdzbWFsbCc6ICAgIDc2OHB4LFxuICAvLyAneHNtYWxsJzogICA2NDBweCxcbiAgLy8gJ3h4c21hbGwnOiAgNDgwcHgsXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBMYXllcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gVHlwb2dyYXBoeVxuICogU3RhbmRhcmQgc2V0cyBvZiB0eXBvZ3JhcGhpY2FsIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gSGVhZGluZyBTaXplc1xuICogLSAwMiAtIExpbmUgSGVpZ2h0c1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEhlYWRpbmcgU2l6ZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIExpbmUgSGVpZ2h0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogUGFydGlhbHMgQ29tYmluZWRcbiAqIFBhcnRpYWxzIGNhbiBiZSBpbXBvcnRlZCBpbnRvIHRoZW1lIGZpbGVzIGVpdGhlciBvbmUgYnkgb25lLCBvciBieSB1c2luZyB0aGlzIGNvbWJpbmVkIFBhcnRpYWxzIGZpbGUuIFRvIHVzZSB0aGlzXG4gKiBmaWxlIGFzIHRoZSBpbXBvcnQgc3RhdGVtZW50LCBgQHVzZSAnW3BhdGhdL3BhcnRpYWxzL3BhcnRpYWxzJyBhcyAqYC5cbiAqXG4gKiAtIDAxIC0gU2V0dGluZ3NcbiAqIC0gMDIgLSBGdW5jdGlvbnNcbiAqIC0gMDMgLSBNaXhpbnNcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBTZXR0aW5nc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQW5pbWF0aW9uc1xuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgYW5pbWF0aW9uIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBUcmFuc2l0aW9uXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gVHJhbnNpdGlvblxuICBFYXN5IHRvIHVzZSBmdW5jdGlvbiB0byBxdWlja2x5IGRlZmluZSBhIHRyYW5zaXRpb24gd2l0aCB0aGUgYWJpbGl0eSB0byByZWZlcmVuY2UgYSBsaWJyYXJ5IG1hcHBpbmcgb2YgYmV6aWVyLWN1cnZlXG4gIGFuaW1hdGlvbnMsIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgLlxuICAtIEBwYXJhbSAkYXJndW1lbnQ6IFN0eWxlIGFyZ3VtZW50cyB0aGF0IHRoaXMgdHJhbnNpdGlvbiBzaG91bGQgYmUgYXBwbGllZCB0by5cbiAgLSBAcGFyYW0gJGR1cmF0aW9uOiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhlIHRyYW5zaXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG4gIC0gQHBhcmFtICRzdHlsZTogVGhlIHN0eWxlIG9mIHRyYW5zaXRpb24sIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgXG4gIC0gQGV4YW1wbGUgPSB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uKGFsbCwgMC42cywgZWFzZUluT3V0U2luZSlcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIEJyZWFrcG9pbnRzXG4gKiBCcmVha3BvaW50IHZpZXdwb3J0IHNpemVzIGFuZCBtZWRpYSBxdWVyaWVzLiBCcmVha3BvaW50cyBhcmUgZGVmaW5lZCBhcyBhIG1hcCBvZiAobmFtZTogbWluaW11bSB3aWR0aCksIG9yZGVyIGZyb21cbiAqIHhzbWFsbCB0byB4bGFyZ2U6ICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkuIFRoZSBtYXAgZGVmaW5lZCBpbiB0aGUgYCRncmlkLWJyZWFrcG9pbnRzYFxuICogZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIGAkYnJlYWtwb2ludHNgIGFyZ3VtZW50IGJ5IGRlZmF1bHQuXG4gKlxuICogLSAwMSAtIEJyZWFrcG9pbnQgTmV4dFxuICogLSAwMiAtIEJyZWFrcG9pbnQgTWluaW11bVxuICogLSAwMyAtIEJyZWFrcG9pbnQgTWF4aW11bVxuICogLSAwNCAtIEJyZWFrcG9pbnQgSW5maXhcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBCcmVha3BvaW50IE5leHRcbiAgTmFtZSBvZiB0aGUgbmV4dCBicmVha3BvaW50LCBvciBudWxsIGZvciB0aGUgbGFzdCBicmVha3BvaW50LlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50LW5hbWVzOiBCcmVha3BvaW50cyBtYXBwaW5nIG5hbWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEJyZWFrcG9pbnQgTWluaW11bVxuICBNaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE51bGwgZm9yIHRoZSBzbWFsbGVzdCAoZmlyc3QpIGJyZWFrcG9pbnQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIEJyZWFrcG9pbnQgTWF4aW11bVxuICBUaGUgbWF4aW11bSB2YWx1ZSBpcyByZWR1Y2VkIGJ5IDAuMDJweCB0byB3b3JrIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2YgYG1pbi1gIGFuZCBgbWF4LWAgcHJlZml4ZXMgYW5kIHZpZXdwb3J0c1xuICB3aXRoIGZyYWN0aW9uYWwgd2lkdGhzLiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhcXVlcmllcy00LyNtcS1taW4tbWF4LiBVc2VzIDAuMDJweCByYXRoZXIgdGhhbiAwLjAxcHggdG8gd29ya1xuICBhcm91bmQgYSBjdXJyZW50IHJvdW5kaW5nIGJ1ZyBpbiBTYWZhcmkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIEJyZWFrcG9pbnQgSW5maXhcbiAgUmV0dXJucyBhIGJsYW5rIHN0cmluZyBpZiBzbWFsbGVzdCBicmVha3BvaW50LCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSB3aXRoIGEgZGFzaCBpbiBmcm9udC4gVXNlZnVsIGZvciBtYWtpbmdcbiAgcmVzcG9uc2l2ZSB1dGlsaXRpZXMuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIENhbGN1bGF0aW9uc1xuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgY2FsY3VsYXRlIGRpZmZlcmVudCB2YWx1ZXMgZnJvbSBwZXJjZW50YWdlcyB0byBzaXppbmcgc3VjaCBhcyBSRU1zLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gVGFyZ2V0L0NvbnRhaW5lciBQZXJjZW50YWdlXG4gKiAtIDAzIC0gUkVNc1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFRhcmdldC9Db250YWluZXIgUGVyY2VudGFnZVxuICBDYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2Ugb2YgYSB0YXJnZXQgc2l6ZSBjb21wYXJlZCB0byBhIGNvbnRhaW5lciBzaXplLlxuICAtIEBwYXJhbSAkdGFyZ2V0OiBTaXplIG9mIGFuIGVsZW1lbnQgbmVlZGluZyBhIGNhbGN1bGF0ZWQgcGVyY2VudGFnZS5cbiAgLSBAcGFyYW0gJGNvbnRhaW5lcjogU2l6ZSBvZiB0aGUgdGFyZ2V0J3MgY29udGFpbmVyLCBuZWVkZWQgdG8gY2FsY3VsYXRlIHBlcmNlbnRhZ2UuXG4gIC0gQGV4YW1wbGUgPSB3aWR0aDogY2FsYy1wZXJjZW50KDI1MCwgMTAwMCk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBSRU1zXG4gIENhbGN1bGF0ZSBhIHNpemUgaW50byBSRU0gdW5pdHMgLS0gbW9zdGx5IHVzZWQgZm9yIGZvbnQgc2l6ZSByZW5kZXJpbmcuXG4gIC0gQHBhcmFtICRzaXplOiBTaXplIG9mIGFuIGVsZW1lbnQgbmVlZGluZyBhIGNhbGN1bGF0ZWQgc2l6ZSBpbnRvIFJFTXMuXG4gIC0gQHBhcmFtICRiYXNlOiBCYXNlIGZvbnQgc2l6ZSBvZiB0aGUgc2l0ZSAtLSBkZWZhdWx0cyB0byAxNnB4LlxuICAtIEBleGFtcGxlID0gZm9udC1zaXplOiBjYWxjLXJlbSgyNHB4KTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIENvbG9yXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCBjb2xvciB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gQ29sb3JcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBDb2xvclxuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgY29sb3IgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fY29sb3JzLnNjc3MuXG4gIC0gQHBhcmFtICRjb2xvcjogVGhlIHNlbGVjdGVkIGNvbG9yLlxuICAtIEBleGFtcGxlID0gYmFja2dyb3VuZC1jb2xvcjogY29sb3IocHJpbWFyeSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBGdW5jdGlvbnMgLSBMYXlvdXRcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGxheW91dCB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gV2lkdGhzXG4gKiAtIDAzIC0gWi1pbmRleFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFdpZHRoc1xuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgd2lkdGggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICR3aWR0aDogVGhlIHNlbGVjdGVkIHdpZHRoIHNpemUuXG4gIC0gQGV4YW1wbGU6IHdpZHRoOiB3aWR0aChsYXJnZSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBaLWluZGV4XG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCB6LWluZGV4IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpbiAncGFydGlhbHMvc2V0dGluZ3MvX2xheW91dC5zY3NzLlxuICAtIEBwYXJhbSAka2V5OiBUaGUgc2VsZWN0ZWQgbGF5ZXIgdHlwZS5cbiAgLSBAZXhhbXBsZSA9IHotaW5kZXg6IHotaW5kZXgoYm90dG9tbGVzcy1waXQpXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBGdW5jdGlvbnMgLSBUeXBvZ3JhcGh5XG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCB0eXBvZ3JhcGhpY2FsIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBMaW5lIEhlaWdodFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIExpbmUgSGVpZ2h0XG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCBMaW5lIEhlaWdodCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW5cbiAgYHBhcnRpYWxzL3NldHRpbmdzL190eXBvZ3JhcGh5LnNjc3NgLlxuICAtIEBwYXJhbSAkc2l6ZTogVGhlIHNlbGVjdGVkIExpbmUgSGVpZ2h0IHR5cGUuXG4gIC0gQGV4YW1wbGU6IGxpbmUtaGVpZ2h0OiBsaW5lLWhlaWdodChoZWFkaW5nKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIE1peGlucyAtIEJyZWFrcG9pbnRzXG4gKiBVc2UgdGhlc2UgbWl4aW5zIG1haW5seSB3aGVuIGRlZmluaW5nIG1lZGlhIGJyZWFrcG9pbnQgc3BlY2lmaWNhdGlvbnMgaW4gdGhlbWUgZmlsZXMuIEJvdGggc2V0dGluZ3MgYW5kIGZ1bmN0aW9uc1xuICogYXJlIGltcG9ydGVkIGhlcmUgdG8gc3VwcGxlbWVudCB0aGUgbWl4aW5zIHRoZW1zZWx2ZXMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBNaW5pbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDMgLSBNYXhpbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDQgLSBCZXR3ZWVuIEJyZWFrcG9pbnRcbiAqIC0gMDUgLSBPbmx5IEJyZWFrcG9pbnRcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBNaW5pbXVtIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgb2YgYXQgbGVhc3QgdGhlIG1pbmltdW0gYnJlYWtwb2ludCB3aWR0aCAtLSBhcHBseSB0byBzY3JlZW4tc2l6ZXMgYWJvdmUgdGhlIGJyZWFrcG9pbnQgc3BlY2lmaWVkLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1taW4obGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBNYXhpbXVtIEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgb2YgYXQgbW9zdCB0aGUgbWF4aW11bSBicmVha3BvaW50IHdpZHRoIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBiZWxvdyB0aGUgYnJlYWtwb2ludCBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLW1heChsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIEJldHdlZW4gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSB0aGF0IHNwYW5zIG11bHRpcGxlIGJyZWFrcG9pbnQgd2lkdGhzIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBiZXR3ZWVuIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRsb3dlcjogU2VsZWN0ZWQgbWluaW11bSBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkdXBwZXI6IFNlbGVjdGVkIG1heGltdW0gYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1iZXR3ZWVuKHhzbWFsbCwgbGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDUgLSBPbmx5IEJyZWFrcG9pbnRcbiAgTWVkaWEvc2NyZWVuLXNpemUgYmV0d2VlbiB0aGUgYnJlYWtwb2ludCdzIG1pbmltdW0gYW5kIG1heGltdW0gd2lkdGhzIC0tIE5vIG1pbmltdW0gZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50LCBhbmRcbiAgbm8gbWF4aW11bSBmb3IgdGhlIGxhcmdlc3Qgb25lLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1vbmx5KGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogTWl4aW5zIC0gTGlzdHNcbiAqIFVzZSB0aGVzZSBtaXhpbnMgd2hlbiBuZWVkaW5nIHRvIGVhc2lseSBkZWZpbmUgbGlzdHMgc3R5bGVzLlxuICpcbiAqIC0gMDEgLSBCYXNlXG4gKiAtIDAyIC0gQnVsbGV0c1xuICogLSAwMyAtIE51bWJlcmVkXG4gKiAtIDA0IC0gTm8gQnVsbGV0c1xuICogLSAwNSAtIElubGluZVxuICogLSAwNiAtIFJ1bGVkXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gQmFzZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gQnVsbGV0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTnVtYmVyZWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIE5vIEJ1bGxldHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNSAtIElubGluZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA2IC0gUnVsZWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE1peGluc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogTWl4aW5zIC0gVHlwb2dyYXBoeVxuICogVXNlIHRoZXNlIG1peGlucyB3aGVuIG5lZWRpbmcgdG8gZWFzaWx5IGRlZmluZSB0eXBvZ3JhcGh5IHN0eWxlcywgc3VjaCBhcyBzaXplcyBhbmQgdHlwb2dyYXBoaWNhbCBsYXlvdXQuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBIZWFkaW5nIFNpemVcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBIZWFkaW5nIFNpemVcbiAgTWVhbnQgZm9yIHJlc3BvbnNpdmUgaGVhZGluZyBzaXplcyBhbmQgaXMgYmFzZWQgdXBvbiBicmVha3BvaW50cyBhbmQgYSBtYXBwaW5nIG9mIGhlYWRpbmcgc2l6ZXMuIEJyZWFrcG9pbnRzIGFyZVxuICBkZWZpbmVkIGluIHRoZSBgcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NgIGZpbGUgYW5kIGFyZSB1dGlsaXplZCB3aXRoIGEgbWl4aW4sIGFzIGRlZmluZWQgaW5cbiAgYHBhcnRpYWxzL21peGlucy9fYnJlYWtwb2ludHMuc2Nzc2AuXG4gIC0gQHBhcmFtICRzZXR0aW5nOiBTZWxlY3RlZCBoZWFkaW5nIHRvIGFwcGx5IHJlc3BvbnNpdmUgc2l6aW5nIHRvLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5jLXNpdGUtbmF2aWdhdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDAgMS4yNXJlbSAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmMtc2l0ZS1uYXZpZ2F0aW9uIHtcbiAgICBtYXJnaW46IDA7XG4gICAgaGVpZ2h0OiAyLjU2MjVyZW07XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbGlnaHQtZ3JheSk7XG4gICAgcGFkZGluZzogMCAxLjI1cmVtO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cbi5jLXNpdGUtbmF2aWdhdGlvbiAubWVudS5jLXNpdGUtbmF2aWdhdGlvbl9fbGlzdFtkYXRhLWRlcHRoPVwiMFwiXSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNXJlbTtcbn1cbi5jLXNpdGUtbmF2aWdhdGlvbiAubWVudS5jLXNpdGUtbmF2aWdhdGlvbl9fbGlzdFtkYXRhLWRlcHRoPVwiMFwiXSA+IGxpIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5jLXNpdGUtbmF2aWdhdGlvbiAubWVudS5jLXNpdGUtbmF2aWdhdGlvbl9fbGlzdFtkYXRhLWRlcHRoPVwiMFwiXTpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICB3aWR0aDogMC43NXJlbTtcbiAgaGVpZ2h0OiAwLjc1cmVtO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuL2ltYWdlcy9nbG9iZS5zdmdcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmMtc2l0ZS1uYXZpZ2F0aW9uIC5tZW51LmMtc2l0ZS1uYXZpZ2F0aW9uX19saXN0W2RhdGEtZGVwdGg9XCIwXCJdIGxpIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uYy1zaXRlLW5hdmlnYXRpb24gLm1lbnUuYy1zaXRlLW5hdmlnYXRpb25fX2xpc3RbZGF0YS1kZXB0aD1cIjBcIl0gYSB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ibGFjayk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWJvZHktMTQpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1ib2R5LTE0KTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmMtc2l0ZS1uYXZpZ2F0aW9uIC5tZW51LmMtc2l0ZS1uYXZpZ2F0aW9uX19saXN0W2RhdGEtZGVwdGg9XCIwXCJdIGE6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1tYWluKTtcbn1cbi5jLXNpdGUtbmF2aWdhdGlvbiAubWVudS5jLXNpdGUtbmF2aWdhdGlvbl9fbGlzdFtkYXRhLWRlcHRoPVwiMFwiXSBhW2FyaWEtY3VycmVudD10cnVlXSB7XG4gIHRleHQtc2hhZG93OiAtMC4yNXB4IDAgdmFyKC0tY29sb3ItYmxhY2ssICMwMDApLCAwLjI1cHggMCB2YXIoLS1jb2xvci1ibGFjaywgIzAwMCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn0iXX0= */
