@charset "UTF-8";
/*----------------------------------------------------------------------------*        theme.scss
        Theme stylesheet, extends Blocss CSS Framework
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*        CONTENTS
\*----------------------------------------------------------------------------*/
/*
    README
    INCLUDES............Include various sass files
    BASE................High-level elements like 'html', 'body', etc.
    LAYOUT..............Structural styling
    MODULES.............Reusable, modular parts of the page
    */
/*----------------------------------------------------------------------------*    $INCLUDES
    Include various sass files
\*----------------------------------------------------------------------------*/
/**
     * If you use compass enable this
     */
/*----------------------------------------------------------------------------*    $VARS
    Any variables you find set in blocss’ `_defaults.scss` that you do not wish
    to keep, simply redefine here. This means that if blocss, for example,
    sets your `$base-font-size` at 16px and you wish it to be 14px, simply
    redeclare that variable in this file. Blocss ignores its own variables
    in favour of using your own, so you can completely modify how blocss
    works without ever having to alter the framework itself.
\*----------------------------------------------------------------------------*/
/* Modules */
/* Generic */
/* Responsive */
/*----------------------------------------------------------------------------*    $OVERRIDES
    Place any variables that should override blocss’ defaults here.
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CUSTOM
    Place any of your own variables that sit on top of blocss here.
\*----------------------------------------------------------------------------*/
/*!*
 * Powered by Blocss v5.0.8 | MIT License | blocss.github.io/blocss
 * by @bramsmulders (Bram Smulders)
 */
/*----------------------------------------------------------------------------*    DEFAULTS
    Blocss' default variables. Redefine and override them in your
    application-level `_vars.scss` file.
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/**
 * TYPOGRAPHY                   Defines the typographic baseline
 * SPACING                      Spacing units to properly size your UI
 * RESPONSIVE                   Define your breakpoints
 * MISC
 */
/*----------------------------------------------------------------------------*    $TYPOGRAPHY
    Defines the typographic baseline.
    We define every size in pixels, the underlying system converts the
    respective units to the responsive REM value.
\*----------------------------------------------------------------------------*/
/**
 * Base font size & line height
 * We predefine a nice big font size, wich reads very nice on a big screen.
 * As per: http://uxdesign.smashingmagazine.com/2011/11/29/the-perfect-paragraph/
 */
/**
 * Sizes (in pixels)
 */
/**
 * Base font family
 */
/*----------------------------------------------------------------------------*    $SPACING
    Spacing units to properly size your UI
    As per: http://csswizardry.com/2011/12/measuring-and-sizing-uis-2011-style
\*----------------------------------------------------------------------------*/
/**
 * Enable vertical rhythm?
 *
 * Enabling this will ensure all margins, paddings, lineheights etc. will
 * follow the default line height.
 *
 * Disabling this will render all line-heights according
 * to the `$line-height-ratio` variable
 */
/**
 * Assign our `$base-line-height` to a new spacing var for
 * more transparency
 */
/*----------------------------------------------------------------------------*    $RESPONSIVE
    Define your breakpoints. The first value is the appendix that shall be used
    for your classes (e.g. `.unit-6-12--palm`), the second value is the media
    query that the breakpoint fires at.
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $MISC
\*----------------------------------------------------------------------------*/
/**
 * Would you like to show a baseline grid? This is handy during development.
 */
/**
 * Would you like to show media queries? This is handy during development.
 */
/**
 * Legacy support
 */
/**
 * Enable debug mode to highlight possible markup/accessibility
 * quirks in your code
 */
/*----------------------------------------------------------------------------*    $MIXINS
    A set of usefull Sass mixins, wich can be used troughout you project
\*----------------------------------------------------------------------------*/
/*  Functions
\*----------------------------------------------------------------------------*/
/**
     * Value to rem
     */
/**
     * Value to em
     */
/**
     * A small, internally-used function to remove the units from a given value.
     */
/*  CSS3
\*----------------------------------------------------------------------------*/
/**
     * Prefixer
     * Example: @include prefixer(border-radius, 5px 10px, webkit moz o ms spec);
     */
/**
     * Rem converter
     *
     * 1. Provide pixel fallback for ie8
     * 2. Loop over values
     * 3. Run trough prefixer
     *
     * Sample: @include rem(margin, 0 auto 300px, webkit moz spec, !important);
     */
/**
     * Multi rem converter
     * Remmify multiple properties in one swoop
     *
     * Beware: if only one set is provided, the mixin will fail.
     * In that case use the normal rem mixin instead
     *
     * Sample:
       @include multi-rem(
           (padding, $space 1em)
           (margin, $space auto, true)
           (border-radius, 50%)
       );
     */
/*  Typography & vertical rhythm
\*----------------------------------------------------------------------------*/
/**
     * Font face shorthand
     */
/**
     * Calculates font, rem font size & line height
     * $multiplier: multiplies line height by the given value
     * $line-height: include line height or not
     * The line height parameter can also be used as the multiplier
     *
     * Sample usage @include font-size(18px, 2);
     */
/**
     * Truncate overly long strings
     * sample value truncate(100%)
     */
/*  Media Queries
\*----------------------------------------------------------------------------*/
/**
     * Enclose a block of code with a media query as named in `$breakpoints`.
     */
/* normalize.css v3.0.0 | MIT License | git.io/normalize */
/**
 * 1. Set default font family to sans-serif.
 * 2. Prevent iOS text size adjust after orientation change, without disabling
 *    user zoom.
 */
html {
  font-family: sans-serif;
  /* 1 */
  -ms-text-size-adjust: 100%;
  /* 2 */
  -webkit-text-size-adjust: 100%;
  /* 2 */ }

/**
 * Remove default margin.
 */
body {
  margin: 0; }

/* HTML5 display definitions
   ========================================================================== */
/**
 * Correct `block` display not defined in IE 8/9.
 */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
  display: block; }

/**
 * 1. Correct `inline-block` display not defined in IE 8/9.
 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
 */
audio,
canvas,
progress,
video {
  display: inline-block;
  /* 1 */
  vertical-align: baseline;
  /* 2 */ }

/**
 * Prevent modern browsers from displaying `audio` without controls.
 * Remove excess height in iOS 5 devices.
 */
audio:not([controls]) {
  display: none;
  height: 0; }

/**
 * Address `[hidden]` styling not present in IE 8/9.
 * Hide the `template` element in IE, Safari, and Firefox < 22.
 */
[hidden],
template {
  display: none; }

/* Links
   ========================================================================== */
/**
 * Remove the gray background color from active links in IE 10.
 */
a {
  background: transparent; }

/**
 * Improve readability when focused and also mouse hovered in all browsers.
 */
a:active,
a:hover {
  outline: 0; }

/* Text-level semantics
   ========================================================================== */
/**
 * Address styling not present in IE 8/9, Safari 5, and Chrome.
 */
abbr[title] {
  border-bottom: 1px dotted; }

/**
 * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
 */
b,
strong {
  font-weight: bold; }

/**
 * Address styling not present in Safari 5 and Chrome.
 */
dfn {
  font-style: italic; }

/**
 * Address variable `h1` font-size and margin within `section` and `article`
 * contexts in Firefox 4+, Safari 5, and Chrome.
 */
h1, .h1 {
  font-size: 2em;
  margin: 0.67em 0; }

/**
 * Address styling not present in IE 8/9.
 */
mark {
  background: #ff0;
  color: #000; }

/**
 * Address inconsistent and variable font size in all browsers.
 */
small {
  font-size: 80%; }

/**
 * Prevent `sub` and `sup` affecting `line-height` in all browsers.
 */
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline; }

sup {
  top: -0.5em; }

sub {
  bottom: -0.25em; }

/* Embedded content
   ========================================================================== */
/**
 * Remove border when inside `a` element in IE 8/9.
 */
img {
  border: 0; }

/**
 * Correct overflow displayed oddly in IE 9.
 */
svg:not(:root) {
  overflow: hidden; }

/* Grouping content
   ========================================================================== */
/**
 * Address margin not present in IE 8/9 and Safari 5.
 */
figure {
  margin: 1em 40px; }

/**
 * Address differences between Firefox and other browsers.
 */
hr {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  height: 0; }

/**
 * Contain overflow in all browsers.
 */
pre {
  overflow: auto; }

/**
 * Address odd `em`-unit font size rendering in all browsers.
 */
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em; }

/* Forms
   ========================================================================== */
/**
 * Known limitation: by default, Chrome and Safari on OS X allow very limited
 * styling of `select`, unless a `border` property is set.
 */
/**
 * 1. Correct color not being inherited.
 *    Known issue: affects color of disabled elements.
 * 2. Correct font properties not being inherited.
 * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
 */
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  /* 1 */
  font: inherit;
  /* 2 */
  margin: 0;
  /* 3 */ }

/**
 * Address `overflow` set to `hidden` in IE 8/9/10.
 */
button {
  overflow: visible; }

/**
 * Address inconsistent `text-transform` inheritance for `button` and `select`.
 * All other form control elements do not inherit `text-transform` values.
 * Correct `button` style inheritance in Firefox, IE 8+, and Opera
 * Correct `select` style inheritance in Firefox.
 */
button,
select {
  text-transform: none; }

/**
 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 *    and `video` controls.
 * 2. Correct inability to style clickable `input` types in iOS.
 * 3. Improve usability and consistency of cursor style between image-type
 *    `input` and others.
 */
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  /* 2 */
  cursor: pointer;
  /* 3 */ }

/**
 * Re-set default cursor for disabled elements.
 */
button[disabled],
html input[disabled] {
  cursor: default; }

/**
 * Remove inner padding and border in Firefox 4+.
 */
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0; }

/**
 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
 * the UA stylesheet.
 */
input {
  line-height: normal; }

/**
 * It's recommended that you don't attempt to style these elements.
 * Firefox's implementation doesn't respect box-sizing, padding, or width.
 *
 * 1. Address box sizing set to `content-box` in IE 8/9/10.
 * 2. Remove excess padding in IE 8/9/10.
 */
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  /* 1 */
  padding: 0;
  /* 2 */ }

/**
 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
 * `font-size` values of the `input`, it causes the cursor style of the
 * decrement button to change from `default` to `text`.
 */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto; }

/**
 * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
 * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
 *    (include `-moz` to future-proof).
 */
input[type="search"] {
  -webkit-appearance: textfield;
  /* 1 */
  -moz-box-sizing: content-box;
  -webkit-box-sizing: content-box;
  /* 2 */
  box-sizing: content-box; }

/**
 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
 * Safari (but not Chrome) clips the cancel button when the search input has
 * padding (and `textfield` appearance).
 */
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none; }

/**
 * Define consistent border, margin, and padding.
 */
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em; }

/**
 * 1. Correct `color` not being inherited in IE 8/9.
 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
 */
legend {
  border: 0;
  /* 1 */
  padding: 0;
  /* 2 */ }

/**
 * Remove default vertical scrollbar in IE 8/9.
 */
textarea {
  overflow: auto; }

/**
 * Don't inherit the `font-weight` (applied by a rule above).
 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
 */
optgroup {
  font-weight: bold; }

/* Tables
   ========================================================================== */
/**
 * Remove most spacing between table cells.
 */
table {
  border-collapse: collapse;
  border-spacing: 0; }

td,
th {
  padding: 0; }

/*----------------------------------------------------------------------------*    $BASE
    A thin layer on top of normalize.css that provides a starting point more
    suitable for web applications. Removes the default spacing and border for
    appropriate elements.
\*----------------------------------------------------------------------------*/
/**
 * Toplevel HTML element
 * Assign our `$base-font-size` & predefine some defaults
 *
 * 1. Apply the `$base-font-size`, `$line-height-ratio` & `$face-base`
 * 2. Always add the horizontal scrollbar to prevent layout shifting
 */
html {
  font: 0.875em/1.71429 Helvetica, Arial, sans-serif;
  /* 1 */
  overflow-y: scroll;
  /* 2 */
  min-height: 100%; }

/**
 * Border box ALL the things
 * As Per: http://www.paulirish.com/2012/box-sizing-border-box-ftw/
 */
*, *:before, *:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box; }

/**
 * The usual resetting of margins, paddings, borders etc.
 */
blockquote,
dl,
dd,
ol,
ul,
h1,
.h1,
h2,
.h2,
h3,
.h3,
h4,
.h4,
h5,
.h5,
h6,
.h6,
p,
pre,
fieldset,
hr {
  margin: 0; }

fieldset,
ol,
ul {
  padding: 0; }

iframe,
fieldset {
  border: 0; }

/**
 * Remove extra vertical spacing when nesting lists.
 */
li > ul,
li > ol {
  margin-bottom: 0; }

/**
 * 1. Fix an odd quirk whereby, without this, code blocks are rendered at a
 *    font-size smaller than 1em.
 */
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  /* 1 */ }

/**
 * Suppress the focus outline on links that cannot be accessed via keyboard.
 * This prevents an unwanted focus outline from appearing around elements that
 * might still respond to pointer events.
 */
[tabindex="-1"]:focus {
  outline: none !important; }

/**
 * Image
 *
 * 1. By default all images are fluid
 * 2. Render `alt` visually offset when images don't load
 */
img {
  max-width: 100%;
  /* 1 */
  font-style: italic;
  /* 2 */ }

/**
 * Non-fluid images if you specify `width` and/or `height` attributes.
 */
img[width],
img[height] {
  max-width: none; }

/*----------------------------------------------------------------------------*    $SHARED
    Shared behaviour
\*----------------------------------------------------------------------------*/
/**
 * Applies vertical rhythm to designated elements
 * As per: http://csswizardry.com/2012/06/single-direction-margin-declarations
 */
hgroup,
.hgroup,
ul,
ol,
dl,
blockquote,
p,
address,
table,
fieldset,
pre,
hr {
  /* 1 */
  /* 3 */
  margin-bottom: 24px ;
  /* 2 */
  /* 3 */
  margin-bottom: 1.71429rem ; }

/**
 * Default indentation value for lists
 */
ul,
ol,
dd {
  /* 1 */
  /* 3 */
  margin-left: 24px ;
  /* 2 */
  /* 3 */
  margin-left: 1.71429rem ; }

/**
 * Micro clearfix
 * As per: nicolasgallagher.com/micro-clearfix-hack
 */
.cf:after, .continent:after,
.island:after,
.islet:after, .nav:after {
  content: "";
  display: table;
  clear: both; }

/*----------------------------------------------------------------------------*    $TYPOGRAPHY
    Pragmatic & practical font sizing
    As per: http://csswizardry.com/2012/02/pragmatic-practical-font-sizing-in-css/
\*----------------------------------------------------------------------------*/
/*  Sizes
    Apply various font sizes by class
\*----------------------------------------------------------------------------*/
.giga {
  /* 1 */
  /* 3 */
  font-size: 96px ;
  /* 2 */
  /* 3 */
  font-size: 6.85714rem ;
  line-height: 1; }

.mega {
  /* 1 */
  /* 3 */
  font-size: 40px ;
  /* 2 */
  /* 3 */
  font-size: 2.85714rem ;
  line-height: 1.2; }

.kilo {
  /* 1 */
  /* 3 */
  font-size: 34px ;
  /* 2 */
  /* 3 */
  font-size: 2.42857rem ;
  line-height: 1.41176; }

.alpha, h1, .h1 {
  /* 1 */
  /* 3 */
  font-size: 24px ;
  /* 2 */
  /* 3 */
  font-size: 1.71429rem ;
  line-height: 1; }

.beta, h2, .h2 {
  /* 1 */
  /* 3 */
  font-size: 22px ;
  /* 2 */
  /* 3 */
  font-size: 1.57143rem ;
  line-height: 1.09091; }

.gamma, h3, .h3 {
  /* 1 */
  /* 3 */
  font-size: 20px ;
  /* 2 */
  /* 3 */
  font-size: 1.42857rem ;
  line-height: 1.2; }

.delta, h4, .h4 {
  /* 1 */
  /* 3 */
  font-size: 18px ;
  /* 2 */
  /* 3 */
  font-size: 1.28571rem ;
  line-height: 1.33333; }

.epsilon, h5, .h5 {
  /* 1 */
  /* 3 */
  font-size: 16px ;
  /* 2 */
  /* 3 */
  font-size: 1.14286rem ;
  line-height: 1.5; }

.zeta, h6, .h6 {
  /* 1 */
  /* 3 */
  font-size: 14px ;
  /* 2 */
  /* 3 */
  font-size: 1rem ;
  line-height: 1.71429; }

.normalis {
  /* 1 */
  /* 3 */
  font-size: 14px ;
  /* 2 */
  /* 3 */
  font-size: 1rem ;
  line-height: 1.71429; }

.milli {
  /* 1 */
  /* 3 */
  font-size: 12px ;
  /* 2 */
  /* 3 */
  font-size: 0.85714rem ;
  line-height: 2; }

.micro {
  /* 1 */
  /* 3 */
  font-size: 10px ;
  /* 2 */
  /* 3 */
  font-size: 0.71429rem ;
  line-height: 2.4; }

/*  Headings
\*----------------------------------------------------------------------------*/
h1, .h1,
h2,
.h2,
h3,
.h3,
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  font-weight: bold; }

/**
 * Double stranded heading hierarchy
 */
/**
 * Heading groups and generic any-heading class.
 * To target any heading of any level simply apply a class of `.hN`
 * Sample markup:
<div class="hgroup">
    <h1 class="hN"></h1>
    <h2 class="hN"></h2>
</hgroup>
 */
hgroup .hN,
.hgroup .hN {
  margin-bottom: 0; }

/*----------------------------------------------------------------------------*    $MODULE
    Removes the `margin-bottom` of a modules last-childs
    As per: http://css-tricks.com/spacing-the-bottom-of-modules/
\*----------------------------------------------------------------------------*/
.module > *:last-child,
.module > *:last-child > *:last-child,
.module > *:last-child > *:last-child > *:last-child,
.module > *:last-child > *:last-child > *:last-child > *:last-child, .continent > *:last-child,
.island > *:last-child,
.islet > *:last-child, .continent > *:last-child > *:last-child,
.island > *:last-child > *:last-child,
.islet > *:last-child > *:last-child, .continent > *:last-child > *:last-child > *:last-child,
.island > *:last-child > *:last-child > *:last-child,
.islet > *:last-child > *:last-child > *:last-child, .continent > *:last-child > *:last-child > *:last-child > *:last-child,
.island > *:last-child > *:last-child > *:last-child > *:last-child,
.islet > *:last-child > *:last-child > *:last-child > *:last-child {
  margin-bottom: 0; }

/*! blocss-arrange v1.0.3 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    ARRANGE
    This component lets you lay out a row of cells in various ways. You can
    specify whether a cell should be wide enough to fit its content, or take up
    the remaining space in the row. It's also possible to give all cells an
    equal width, and to control their vertical alignment.
\*----------------------------------------------------------------------------*/
/**
 * Example usage:
 *
<div class="arrange">
    <div class="arrange__size-fit">
        <img src="img.png" alt="">
    </div>
    <div class="arrange__size-fill">
        Bram Smulders @bramsmulders
    </div>
</div>
 */
/*  Variables
\*----------------------------------------------------------------------------*/
/**
 * Define which namespaced breakpoints you would like to collapse the arrange
 *
 * $breakpoint-has-x:       ('palm', 'desk');
 *
 * Note: the name of the breakpoint must exist in the list of `$breakpoints`
 *       in the Blocss base repository
 */
/*  Mixins
\*----------------------------------------------------------------------------*/
/**
 * Mixin: Reset arranged modules
 *
 * 1. Reset display property
 * 2. 100% width
 * 3. Reset padding in case of `.arrange--gutter`
 * 4. Re-initiate fluid images
 */
/*  Core arrange componet
\*----------------------------------------------------------------------------*/
/**
 * `arrange` must only contain 'arrange__size-fit' and 'arrange__size-fill' child
 * nodes.
 *
 * It's recommended that you only use one 'arrange__size-fill' per component
 * instance (unless using the `arrange--equally` modifier; see below). The
 * first 'arrange__size-fill' in the component's source order will not share the
 * extra space with any subsequent nodes of that class.
 */
/**
 * 1. Rely on table layout.
 * 2. Zero out the default spacing that might be on an element (e.g., `ul`).
 * 3. Reset the table-layout algorithm in case a component is nested.
 * 4. Make sure the component fills the full width of its parent.
 */
.arrange {
  display: table;
  /* 1 */
  margin: 0;
  /* 2 */
  padding: 0;
  /* 2 */
  table-layout: auto;
  /* 3 */
  width: 100%;
  /* 4 */ }

/**
     * There are two possible types of child.
     * `size-fill` will expand to fill all of the remaining space not filled by
     * `size-fit` elements.
     *
     * 1. Zero out any default spacing that might be on an element (e.g., `li`);
     *    Margin has no effect when coupled with `display: table-cell`.
     * 2. All cells are top-aligned by default
     */
.arrange__size-fill,
.arrange__size-fit {
  display: table-cell;
  padding: 0;
  /* 1 */
  vertical-align: top;
  /* 2 */ }

/**
     * Make sure the main content block expands to fill the remaining space.
     */
.arrange__size-fill {
  width: 100%; }

/**
         * Defend against a side-effect of this layout pattern: images in
         * 'arrange__size-fit' cannot be fluid, otherwise they lose their ability to
         * provide size to a cell.
         */
.arrange__size-fit img {
  max-width: none;
  width: auto; }

/* Vertical alignment modifiers
\*----------------------------------------------------------------------------*/
.arrange--top > .arrange__size-fill,
.arrange--top > .arrange__size-fit {
  vertical-align: top; }

.arrange--middle > .arrange__size-fill,
.arrange--middle > .arrange__size-fit {
  vertical-align: middle; }

.arrange--bottom > .arrange__size-fill,
.arrange--bottom > .arrange__size-fit {
  vertical-align: bottom; }

/* Equal-width modifier
\*----------------------------------------------------------------------------*/
/**
 * This layout algorithm will create equal-width table cells, irrespective of
 * the width of their content.
 */
.arrange--equal {
  table-layout: fixed;
  /**
     * Give the cells an equal width.
     * It's recommended that only 'Arrange-sizeFill' be used for equal width cells.
     * Their inner images will automatically be responsive.
     */ }
  .arrange--equal > .arrange__size-fill,
  .arrange--equal > .arrange__size-fit {
    width: auto; }

/* Gutter-separating modifier
\*----------------------------------------------------------------------------*/
.arrange--gutter > .arrange__size-fill,
.arrange--gutter > .arrange__size-fit {
  /* 1 */
  /* 3 */
  padding-left: 24px ;
  /* 2 */
  /* 3 */
  padding-left: 1.71429rem ; }
  .arrange--gutter > .arrange__size-fill:first-child,
  .arrange--gutter > .arrange__size-fit:first-child {
    padding-left: 0; }

/* Arrange collapse
\*----------------------------------------------------------------------------*/
.arrange--collapse {
  display: block;
  /* 1 */ }
  .arrange--collapse > .arrange__size-fill,
  .arrange--collapse > .arrange__size-fit {
    display: block;
    /* 1 */
    width: 100%;
    /* 2 */
    padding-left: 0;
    /* 3 */ }
    .arrange--collapse > .arrange__size-fill img,
    .arrange--collapse > .arrange__size-fit img {
      max-width: 100%;
      /* 4 */
      height: auto;
      /* 4 */ }

/*  Responsive
\*----------------------------------------------------------------------------*/
/* Collapsed arrange based on breakpoint */
@media only screen and (max-width: 600px) {
  .arrange--collapse--palm {
    display: block;
    /* 1 */ }
    .arrange--collapse--palm > .arrange__size-fill,
    .arrange--collapse--palm > .arrange__size-fit {
      display: block;
      /* 1 */
      width: 100%;
      /* 2 */
      padding-left: 0;
      /* 3 */ }
      .arrange--collapse--palm > .arrange__size-fill img,
      .arrange--collapse--palm > .arrange__size-fit img {
        max-width: 100%;
        /* 4 */
        height: auto;
        /* 4 */ } }

@media only screen and (min-width: 601px) and (max-width: 960px) {
  .arrange--collapse--lap {
    display: block;
    /* 1 */ }
    .arrange--collapse--lap > .arrange__size-fill,
    .arrange--collapse--lap > .arrange__size-fit {
      display: block;
      /* 1 */
      width: 100%;
      /* 2 */
      padding-left: 0;
      /* 3 */ }
      .arrange--collapse--lap > .arrange__size-fill img,
      .arrange--collapse--lap > .arrange__size-fit img {
        max-width: 100%;
        /* 4 */
        height: auto;
        /* 4 */ } }

/*! blocss-buttons v1.0.0 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $BUTTONS
    Basic button structural styling. Extend in your theme stylesheet.
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Core navigation component
\*----------------------------------------------------------------------------*/
/**
 * The button classes are best applied to links, buttons, and submit inputs.
 * These components can be used in forms, as calls to action, or as part of
 * the general UI of the site/app.
 *
 * Recommended use:
 *
<a class="button  [button--modifier]" role="button" href="[url]">button text</a>
<button class="button  [button--modifier]" type="submit">button text</button>
<input class="button  [button--modifier]" type="submit" value="button text">
 */
/**
 * Button template
 *
 * Build on this component using rulesets in your application-level CSS.
 *
 * 1. Inherit text color from ancestor.
 * 2. Inherit font styles from ancestor.
 * 3. If the button’s text is 1em, and the button is (2 * font-size) tall,
 *    then there is .5em of space above and below that text. We therefore
 *    apply 1em of space to the left and right, as padding, to keep
 *    consistent spacing.
 * 4. Prevent wrapping across multiple lines.
 * 5. Corrects inability to style clickable `input` types in iOS
 */
.button {
  position: relative;
  display: inline-block;
  padding-top: 0;
  padding-bottom: 0;
  border: 1px solid;
  margin: 0;
  background: transparent;
  color: inherit;
  /* 1 */
  cursor: pointer;
  font: inherit;
  /* 2 */
  line-height: 2;
  /* 3 */
  padding-left: 1em;
  /* 3 */
  padding-right: 1em;
  /* 3 */
  text-align: center;
  text-decoration: none;
  vertical-align: middle;
  white-space: nowrap;
  /* 4 */
  -webkit-appearance: none;
  /* 5 */
  /**
     * Remove excess padding and border in Firefox 4+
     */ }
  .button:hover, .button:focus, .button:active {
    text-decoration: none; }
  .button::-moz-focus-inner {
    border: 0;
    padding: 0; }

/*  Sizes
\*----------------------------------------------------------------------------*/
/**
 * Button size modifiers
 */
.button--small {
  padding-right: 0.5em;
  padding-left: 0.5em;
  line-height: 1.5; }

.button--large {
  padding-right: 1.5em;
  padding-left: 1.5em;
  line-height: 3; }

.button--huge {
  padding-right: 2em;
  padding-left: 2em;
  line-height: 4; }

/**
 * full-width modifier
 */
.button--full {
  display: block;
  width: 100%; }

/* Font sizes
\*----------------------------------------------------------------------------*/
/**
 * Button font-size modifiers
 */
.button--alpha {
  /* 1 */
  /* 3 */
  font-size: 24px ;
  /* 2 */
  /* 3 */
  font-size: 1.71429rem ; }

.button--beta {
  /* 1 */
  /* 3 */
  font-size: 22px ;
  /* 2 */
  /* 3 */
  font-size: 1.57143rem ; }

.button--gamma {
  /* 1 */
  /* 3 */
  font-size: 20px ;
  /* 2 */
  /* 3 */
  font-size: 1.42857rem ; }

.button--delta {
  /* 1 */
  /* 3 */
  font-size: 18px ;
  /* 2 */
  /* 3 */
  font-size: 1.28571rem ; }

.button--epsilon {
  /* 1 */
  /* 3 */
  font-size: 16px ;
  /* 2 */
  /* 3 */
  font-size: 1.14286rem ; }

.button--zeta {
  /* 1 */
  /* 3 */
  font-size: 14px ;
  /* 2 */
  /* 3 */
  font-size: 1rem ; }

.button--milli {
  /* 1 */
  /* 3 */
  font-size: 12px ;
  /* 2 */
  /* 3 */
  font-size: 0.85714rem ; }

.button--micro {
  /* 1 */
  /* 3 */
  font-size: 10px ;
  /* 2 */
  /* 3 */
  font-size: 0.71429rem ; }

/**
 * Make the button inherit sizing from its parent.
 */
.button--normalis {
  vertical-align: baseline;
  font-size: inherit;
  line-height: inherit;
  padding-right: 0.5em;
  padding-left: 0.5em; }

/* Dirty firefox/IE hack, to circumvent line-height bug
\*----------------------------------------------------------------------------*/
input[type="submit"].button {
  height: 2em; }

input[type="submit"].button--small {
  height: 1.5em; }

input[type="submit"].button--large {
  height: 3em; }

input[type="submit"].button--huge {
  height: 4em; }

/*! blocss-flexembed v1.0.0 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $FLEXEMBED
    For use with multi-media embeds, such as videos or slideshows, that need to
    retain a specific aspect ratio but adapt to elements of variable widths.
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Core flexembed component
\*----------------------------------------------------------------------------*/
/*! blocss-grid v1.0.3 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $GRID
    Fluid and nestable grid system
\*----------------------------------------------------------------------------*/
/**
 * Example usage:
 *
<div class="grid  [grid--center|grid--right|grid--rev|grid--middle|grid--bottom|grid--narrow|grid--wide|grid--flush]">
    <div class="grid__cell  u-3-12  u-1-1--palm"></div>
    <div class="grid__cell  u-3-12  u-1-1--palm"></div>
    <div class="grid__cell  u-3-12  u-1-1--palm"></div>
    <div class="grid__cell  grid__cell--center  u-3-12  u-1-1--palm"></div>
</div>
 */
/**
 * Dont't modify the following variables
 */
/**
 * Enable/disable modifiers
 */
/*  Grid Core
\*----------------------------------------------------------------------------*/
/**
 * Grid container
 * Must only contain `.grid` or `.grid__cell` components as children.
 *
 * 1. Remove inter-unit whitespace that appears between `inline-block` child
 *    elements.
 * 2. Adjustment for child element margins.
 * 3. Use lists as grid
 * 4. Ensure consistent default alignment
 */
.grid {
  text-rendering: optimizespeed;
  /* 1 */
  font-size: 0;
  /* 1 */
  /* 1 */
  /* 3 */
  margin-left: -24px ;
  /* 2 */
  /* 3 */
  margin-left: -1.71429rem ;
  /* 2 */
  padding: 0;
  list-style: none;
  /* 3 */
  text-align: left;
  /* 4 */ }

/**
 * Child `grid` object adjustments
 * Used for more complex fixed-fluid hybrid grids.
 */
.grid > .grid {
  overflow: hidden;
  margin-right: 0;
  margin-left: 0; }

/**
     * Grid cells
     * No explicit width by default. Apply `.unit-x-y` classes.
     *
     * 1. Fundamentals of the non-float grid layout mechanism.
     * 2. Apply grid gutter.
     * 3. Controls vertical positioning of units.
     * 4. Keeps content correctly aligned with the grid direction.
     * 5. Reset text defaults.
     */
.grid__cell {
  /* 1 */
  /* 3 */
  padding-left: 24px ;
  /* 2 */
  /* 3 */
  padding-left: 1.71429rem ;
  display: inline-block;
  /* 1 */
  width: 100%;
  margin: 0;
  vertical-align: top;
  /* 3 */
  text-align: left;
  /* 4 */
  /* 1 */
  /* 3 */
  font-size: 14px ;
  /* 2 */
  /* 3 */
  font-size: 1rem ;
  line-height: 1.71429;
  /* 5 */ }

/**
     * Modifier: horizontally center one unit
     * Set a specific unit to be horizontally centered. Doesn't affect
     * any other units. Can still contain a child `grid` object.
     */
.grid__cell--center {
  display: block;
  margin: 0 auto; }

/**
     * Modifier: horizontally center all grid units
     * Allows for automatic unit centering irrespective of the number of
     * units in the grid.
     */
.grid--center {
  text-align: center; }
  .grid--center > .grid__cell {
    text-align: left; }

/**
     * Modifier: align grid cells vertically
     */
.grid--middle > .grid__cell {
  vertical-align: middle; }

.grid--bottom > .grid__cell {
  vertical-align: bottom; }

/**
     * Create grids with wider gutters. Extends `.grid`.
     */
.grid--wide {
  /* 1 */
  /* 3 */
  margin-left: -48px ;
  /* 2 */
  /* 3 */
  margin-left: -3.42857rem ; }
  .grid--wide > .grid__cell {
    /* 1 */
    /* 3 */
    padding-left: 48px ;
    /* 2 */
    /* 3 */
    padding-left: 3.42857rem ; }

/**
     * Modifier: Remove gutters between columns
     * Tags: ^deprecated
     * `.grid--gutterless` modifier is deprecated and will be removed in v1.1.0
     */
.grid--flush,
.grid--gutterless {
  margin: 0; }
  .grid--flush > .grid__cell,
  .grid--gutterless > .grid__cell {
    padding: 0; }

/*! blocss-dimensions v1.0.3 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $DIMENSIONS
    Sizes in human readable format. These are used in conjunction with other
    objects and abstractions found in blocss, most commonly the grid system
    and the arrange module.
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/**
 * Flags to enable or disable dimension traits
 */
/**
 * Divisions, makes it easy to create several proportional
 * dimensions (e.g., both a 2-part and a 12-part grid).
 *
 * For example, `2 4 6 12` will let you use the unit-1-2, unit-2-4,
 * unit-3-6, and unit-6-12 classes to specify that an element should
 * take up 50% of its container.
 */
/**
 * Define which namespaced breakpoints you would like to generate for each
 * of the dimensions. This is handy if you only need push on, say,
 * desk, or you only need a new unit breakpoint at mobile sizes. It allows
 * you to only compile as much CSS as you need. All are empty by
 * default, but you can add breakpoints at will.
 *
 * $breakpoint-has-x:       ('palm', 'desk');
 *
 * Note: the name of the breakpoint must exist in the list of `$breakpoints`
 *       in the Blocss base repository
 */
/**
 * You can rename the dimension prefixes to your liking
 */
/*  Mixins & functions
\*----------------------------------------------------------------------------*/
/**
 * Find the greatest common factor of two integers
 */
/**
 * Fluid units
 * USAGE: provide a space-separated list of integers, each of which
 * represents the number of parts that make up a unit component.
 * Optionally provide a modifier suffix that can be used to adjust
 * grids in different contexts (e.g. viewport dimensions).
 */
/*  Dimensions core
\*----------------------------------------------------------------------------*/
/**
 * Setup generic widths
 */
/**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
/* Avoid creating rules like '.unit-12-12 {}'' */
/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-1-12 {
  width: 8.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-2-12 {
  width: 16.66667%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-3-12 {
  width: 25%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-4-12 {
  width: 33.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-5-12 {
  width: 41.66667%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-6-12 {
  width: 50%; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-7-12 {
  width: 58.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-8-12 {
  width: 66.66667%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-9-12 {
  width: 75%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-10-12 {
  width: 83.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.u-11-12 {
  width: 91.66667%; }

/**
     * Reset dimensions
     */
.u-1-1 {
  width: 100%; }

.u-auto {
  width: auto; }

/**
  * Setup generic push
  */
[class*="push-"] {
  position: relative; }

/**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
/* Avoid creating rules like '.unit-12-12 {}'' */
/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-1-12 {
  left: 8.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-2-12 {
  left: 16.66667%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-3-12 {
  left: 25%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-4-12 {
  left: 33.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-5-12 {
  left: 41.66667%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-6-12 {
  left: 50%; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-7-12 {
  left: 58.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-8-12 {
  left: 66.66667%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-9-12 {
  left: 75%; }

/* Initialize variables */
/* Find the greatest common factor */
/* Reduced value of $i */
/* Reduced value of $n */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-10-12 {
  left: 83.33333%; }

/* Initialize variables */
/* Find the greatest common factor */
/**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
/**
             * Create units based on fractions
             */
.push-11-12 {
  left: 91.66667%; }

/**
     * Reset dimensions
     */
.push-0-0 {
  left: 0; }

/**
  * Setup generic pull
  */
/*  Responsive
\*----------------------------------------------------------------------------*/
@media only screen and (max-width: 600px) {
  /**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
  /* Avoid creating rules like '.unit-12-12 {}'' */
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-1-12--palm {
    width: 8.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-2-12--palm {
    width: 16.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-3-12--palm {
    width: 25%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-4-12--palm {
    width: 33.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-5-12--palm {
    width: 41.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-6-12--palm {
    width: 50%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-7-12--palm {
    width: 58.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-8-12--palm {
    width: 66.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-9-12--palm {
    width: 75%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-10-12--palm {
    width: 83.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-11-12--palm {
    width: 91.66667%; }
  /**
     * Reset dimensions
     */
  .u-1-1--palm {
    width: 100%; }
  .u-auto--palm {
    width: auto; } }

@media only screen and (min-width: 601px) and (max-width: 960px) {
  /**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
  /* Avoid creating rules like '.unit-12-12 {}'' */
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-1-12--lap {
    width: 8.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-2-12--lap {
    width: 16.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-3-12--lap {
    width: 25%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-4-12--lap {
    width: 33.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-5-12--lap {
    width: 41.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-6-12--lap {
    width: 50%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-7-12--lap {
    width: 58.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-8-12--lap {
    width: 66.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-9-12--lap {
    width: 75%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-10-12--lap {
    width: 83.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-11-12--lap {
    width: 91.66667%; }
  /**
     * Reset dimensions
     */
  .u-1-1--lap {
    width: 100%; }
  .u-auto--lap {
    width: auto; } }

@media only screen and (min-width: 961px) {
  /**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
  /* Avoid creating rules like '.unit-12-12 {}'' */
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-1-12--desk {
    width: 8.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-2-12--desk {
    width: 16.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-3-12--desk {
    width: 25%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-4-12--desk {
    width: 33.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-5-12--desk {
    width: 41.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-6-12--desk {
    width: 50%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-7-12--desk {
    width: 58.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-8-12--desk {
    width: 66.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-9-12--desk {
    width: 75%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-10-12--desk {
    width: 83.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .u-11-12--desk {
    width: 91.66667%; }
  /**
     * Reset dimensions
     */
  .u-1-1--desk {
    width: 100%; }
  .u-auto--desk {
    width: auto; } }

@media only screen and (max-width: 600px) {
  /**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
  /* Avoid creating rules like '.unit-12-12 {}'' */
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-1-12--palm {
    left: 8.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-2-12--palm {
    left: 16.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-3-12--palm {
    left: 25%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-4-12--palm {
    left: 33.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-5-12--palm {
    left: 41.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-6-12--palm {
    left: 50%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-7-12--palm {
    left: 58.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-8-12--palm {
    left: 66.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-9-12--palm {
    left: 75%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-10-12--palm {
    left: 83.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-11-12--palm {
    left: 91.66667%; }
  /**
     * Reset dimensions
     */
  .push-0-0--palm {
    left: 0; } }

@media only screen and (min-width: 601px) and (max-width: 960px) {
  /**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
  /* Avoid creating rules like '.unit-12-12 {}'' */
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-1-12--lap {
    left: 8.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-2-12--lap {
    left: 16.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-3-12--lap {
    left: 25%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-4-12--lap {
    left: 33.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-5-12--lap {
    left: 41.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-6-12--lap {
    left: 50%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-7-12--lap {
    left: 58.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-8-12--lap {
    left: 66.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-9-12--lap {
    left: 75%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-10-12--lap {
    left: 83.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-11-12--lap {
    left: 91.66667%; }
  /**
     * Reset dimensions
     */
  .push-0-0--lap {
    left: 0; } }

@media only screen and (min-width: 961px) {
  /**
     * Proportional units
     * Specify the proportional width of an object.
     * Primarily for, but not limited to, use with `.grid__cell` components.
     * Intentional redundancy build into each set of unit classes.
     */
  /* Avoid creating rules like '.unit-12-12 {}'' */
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-1-12--desk {
    left: 8.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-2-12--desk {
    left: 16.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-3-12--desk {
    left: 25%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-4-12--desk {
    left: 33.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-5-12--desk {
    left: 41.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-6-12--desk {
    left: 50%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-7-12--desk {
    left: 58.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-8-12--desk {
    left: 66.66667%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-9-12--desk {
    left: 75%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /* Reduced value of $i */
  /* Reduced value of $n */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-10-12--desk {
    left: 83.33333%; }
  /* Initialize variables */
  /* Find the greatest common factor */
  /**
             * Check if the reduced value of $n was also supplied in the
             * list of units to be built
             */
  /**
             * Create units based on fractions
             */
  .push-11-12--desk {
    left: 91.66667%; }
  /**
     * Reset dimensions
     */
  .push-0-0--desk {
    left: 0; } }

/*! blocss-island v1.0.0 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $ISLAND
    Simple, boxed off content
    As per: csswizardry.com/2011/10/the-island-object
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Core island component
\*----------------------------------------------------------------------------*/
/**
 * Simple, boxed off content
 *
 * Extends `%module` in `generic/_shared.scss`
 * Extends `.cf` in `generic/_clearfix.scss`
 *
 * Sample usage:
 *
<div class="island">
    I am boxed off.
</div>
 */
.continent,
.island,
.islet {
  display: block; }

.continent {
  /* 1 */
  /* 3 */
  padding: 48px ;
  /* 2 */
  /* 3 */
  padding: 3.42857rem ; }

.island {
  /* 1 */
  /* 3 */
  padding: 24px ;
  /* 2 */
  /* 3 */
  padding: 1.71429rem ; }

/* Just like `.island`, only smaller. */
.islet {
  /* 1 */
  /* 3 */
  padding: 12px ;
  /* 2 */
  /* 3 */
  padding: 0.85714rem ; }

/*! blocss-media v1.0.3 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $MEDIA
    Place any image- and text-like content side-by-side
    As per: stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code
\*----------------------------------------------------------------------------*/
/**
 * Example usage:
 *
<div class="media">
    <div class="media__img  [media__img--rev]">
        <img src="img.png" alt="">
    </div>
    <div class="media__body">
        Bram Smulders @bramsmulders
        …
    </div>
</div>
 */
/*  Variables
\*----------------------------------------------------------------------------*/
/**
 * Enable/disable modifiers
 */
/*  Core media component
\*----------------------------------------------------------------------------*/
/*! blocss-navigation v1.0.1 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $NAVIGATION
    Navigation abstractions, common navigation structures.
\*----------------------------------------------------------------------------*/
/*  Variables
\*----------------------------------------------------------------------------*/
/*  Core navigation component
\*----------------------------------------------------------------------------*/
/**
 * When used on an `ol` or `ul`, this class throws the list
 * into horizontal mode
 *
 * Sample markup:
<ul class="nav">
    <li><a>Home</a></li>
</ul>
 */
.nav {
  padding: 0;
  margin: 0;
  list-style: none; }
  .nav > li,
  .nav > li > a {
    display: inline-block; }

/**
 * Modifyer: Stacked nav
 * `.nav--stacked` extends `.nav` and renders the list into vertical mode
 *
 * Sample markup:
<ul class="nav  nav--stacked">
    <li><a>Home</a></li>
</ul>
 */
.nav--stacked > li {
  display: list-item; }
  .nav--stacked > li > a {
    display: block; }

/**
 * Modifyer: Banner nav
 * `.nav--banner` extends `.nav` and centers the list
 *
 * Sample markup:
<ul class="nav  nav--banner">
    <li><a>Home</a></li>
</ul>
 */
.nav--banner {
  text-align: center; }

/**
 * Modifyer: Breadcrumb nav
 * `.nav--breadcrumb` extends `.nav` and centers the list
 *
 * Sample markup:
<ol class="nav  [nav--breadcrumb|nav--breadcrumb-path]">
    <li [data-breadcrumb="|"]><a href="#">Home</a></li>
</ol>
 */
.nav--breadcrumb > li + li:before {
  content: "» "; }

.nav--breadcrumb-path > li + li:before {
  content: "/ "; }

.nav--breadcrumb > li + li[data-breadcrumb]:before {
  content: attr(data-breadcrumb) " "; }

/**
 * Modifyer: Paginator nav
 * `.nav--pagination` extends `.nav`
 *
 * Sample markup:
<ol class="nav  nav--pagination">
    <li class="nav--pagination__first">First</li>
    <li><a href="">1</a></li>
    <li><a href="">2</a></li>
    <li><a href="">3</a></li>
    <li class="nav--pagination__last"><a href="">Last</a></li>
</ol>
 */
.nav--pagination {
  text-align: center; }
  .nav--pagination > li {
    /* 1 */
    /* 3 */
    padding: 12px ;
    /* 2 */
    /* 3 */
    padding: 0.85714rem ; }
    .nav--pagination > li > a {
      /* 1 */
      /* 3 */
      padding: 12px ;
      /* 2 */
      /* 3 */
      padding: 0.85714rem ;
      /* 1 */
      /* 3 */
      margin: -12px ;
      /* 2 */
      /* 3 */
      margin: -0.85714rem ; }

.nav--pagination__first a:before {
  content: "« "; }

.nav--pagination__last a:after {
  content: " »"; }

/*! blocss-helpers v1.0.1 | MIT License | github.com/Blocss */
/*----------------------------------------------------------------------------*    $HELPERS
    A series of helper classes to use arbitrarily. Only use a helper class if an
    element/component doesn’t already have a class to which you could apply this
    styling, e.g. if you need to float `.nav` left then add `float:left;`
    to that ruleset as opposed to adding the `.float--left` class to the markup.
\*----------------------------------------------------------------------------*/
/**
 * Define which namespaced breakpoints you would like to generate for the
 * `.visuallyhidden` class. This is handy if you only need visuallyhidden on,
 * say, palm, or you only need a new unit breakpoint at mobile sizes. It allows
 * you to only compile as much CSS as you need. All are empty by
 * default, but you can add breakpoints at will.
 *
 * $breakpoint-has-x:       ('palm', 'desk');
 *
 * Note: the name of the breakpoint must exist in the list of `$breakpoints`
 *       in the Blocss base repository
 */
/*  Structural
\*----------------------------------------------------------------------------*/
/**
 * Display helpers
 */
.display--block {
  display: block !important; }

.display--inline-block {
  display: inline-block !important; }

.display--inline {
  display: inline !important; }

/**
 * Vertical rhythm helpers
 *
 * ^deprecated: `.flatten`
 */
.flatten,
.sign--flat {
  margin-bottom: 0 !important; }

/* half margin-bottom */
.sign--half {
  /* 1 */
  /* 3 */
  margin-bottom: 12px ;
  /* 2 */
  /* 3 */
  margin-bottom: 0.85714rem ; }

/* margin-bottom */
.sign {
  /* 1 */
  /* 3 */
  margin-bottom: 24px ;
  /* 2 */
  /* 3 */
  margin-bottom: 1.71429rem ; }

/* doubled up margin-bottom */
.sign--large {
  /* 1 */
  /* 3 */
  margin-bottom: 48px ;
  /* 2 */
  /* 3 */
  margin-bottom: 3.42857rem ; }

/**
 * Add/remove floats
 */
.float--right {
  float: right !important; }

.float--left {
  float: left !important; }

.float--none {
  float: none !important; }

/*  Textual
\*----------------------------------------------------------------------------*/
/**
 * Text alignment
 */
.text--left {
  text-align: left !important; }

.text--center {
  text-align: center !important; }

.text--right {
  text-align: right !important; }

/**
 * Font weight
 *
 * ^deprecated: `.weight--x`
 */
.text--light,
.weight--light {
  font-weight: 300 !important; }

.text--normal,
.weight--normal {
  font-weight: 400 !important; }

.text--semibold,
.weight--semibold {
  font-weight: 600 !important; }

/**
 * Capitals/lowercase
 *
 * ^deprecated: non prefixed with `text--`
 */
.text--caps,
.caps {
  text-transform: uppercase !important; }

.text--lowercase,
.lowercase {
  text-transform: lowercase !important; }

.text--firstcap,
.firstcap {
  text-transform: capitalize !important; }

/**
 * Line height helpers
 */
.line--flat {
  line-height: 1; }

.line--small {
  line-height: 1.42857; }

.line--normalis {
  line-height: 1.71429; }

.line--large {
  line-height: 2.0; }

/*  Misc
\*----------------------------------------------------------------------------*/
/**
 * Hide from screanreaders & browsers
 */
.hidden {
  display: none !important;
  visibility: hidden; }

/**
 * Hide visually and from screenreaders, but maintain layout
 */
.invisible {
  visibility: hidden; }

/**
 * Hide only visually, but have it available for screenreaders
 * as per: h5bp.com/v
 */
.visuallyhidden {
  border: 0;
  clip: rect(0 0 0 0);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 1px; }

/**
 * Visuallyhidden based on breakpoint
 */
@media only screen and (max-width: 600px) {
  .visuallyhidden--palm {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px; } }

@media only screen and (min-width: 601px) and (max-width: 960px) {
  .visuallyhidden--lap {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px; } }

/**
     * Theme includes
     */
/*----------------------------------------------------------------------------*    $COLOR
\*----------------------------------------------------------------------------*/
/* Color function
   Using colors in css example:
   background-color: color(brand);
\*------------------------------------------------------------------------*/
/**
 * Backgrounds & colors
 */
.bg--base {
  background-color: #F2F0F1; }

.color--base {
  color: #F2F0F1 !important; }

.blocklink--base {
  background-color: #F2F0F1 !important; }

.hero--base {
  background-color: #F2F0F1 !important; }
  .hero--base .hero__content:after {
    background-color: #F2F0F1 !important; }

.button--base {
  background-color: #F2F0F1 !important; }
  .button--base:hover {
    background-color: #f4f3f4 !important; }

.button--inv.button--base {
  color: #F2F0F1 !important;
  box-shadow: inset 0 0 0 1px #F2F0F1; }

.bg--base-dark {
  background-color: #636363; }

.color--base-dark {
  color: #636363 !important; }

.blocklink--base-dark {
  background-color: #636363 !important; }

.hero--base-dark {
  background-color: #636363 !important; }
  .hero--base-dark .hero__content:after {
    background-color: #636363 !important; }

.button--base-dark {
  background-color: #636363 !important; }
  .button--base-dark:hover {
    background-color: #666666 !important; }

.button--inv.button--base-dark {
  color: #636363 !important;
  box-shadow: inset 0 0 0 1px #636363; }

.bg--subtle {
  background-color: #F4EFE7; }

.color--subtle {
  color: #F4EFE7 !important; }

.blocklink--subtle {
  background-color: #F4EFE7 !important; }

.hero--subtle {
  background-color: #F4EFE7 !important; }
  .hero--subtle .hero__content:after {
    background-color: #F4EFE7 !important; }

.button--subtle {
  background-color: #F4EFE7 !important; }
  .button--subtle:hover {
    background-color: #f6f1ea !important; }

.button--inv.button--subtle {
  color: #F4EFE7 !important;
  box-shadow: inset 0 0 0 1px #F4EFE7; }

.bg--blank {
  background-color: #ffffff; }

.color--blank {
  color: #ffffff !important; }

.blocklink--blank {
  background-color: #ffffff !important; }

.hero--blank {
  background-color: #ffffff !important; }
  .hero--blank .hero__content:after {
    background-color: #ffffff !important; }

.button--blank {
  background-color: #ffffff !important; }
  .button--blank:hover {
    background-color: white !important; }

.button--inv.button--blank {
  color: #ffffff !important;
  box-shadow: inset 0 0 0 1px #ffffff; }

.bg--brand {
  background-color: #0093d6; }

.color--brand {
  color: #0093d6 !important; }

.blocklink--brand {
  background-color: #0093d6 !important; }

.hero--brand {
  background-color: #0093d6 !important; }
  .hero--brand .hero__content:after {
    background-color: #0093d6 !important; }

.button--brand {
  background-color: #0093d6 !important; }
  .button--brand:hover {
    background-color: #0097db !important; }

.button--inv.button--brand {
  color: #0093d6 !important;
  box-shadow: inset 0 0 0 1px #0093d6; }

.bg--brand-sec {
  background-color: #E1B742; }

.color--brand-sec {
  color: #E1B742 !important; }

.blocklink--brand-sec {
  background-color: #E1B742 !important; }

.hero--brand-sec {
  background-color: #E1B742 !important; }
  .hero--brand-sec .hero__content:after {
    background-color: #E1B742 !important; }

.button--brand-sec {
  background-color: #E1B742 !important; }
  .button--brand-sec:hover {
    background-color: #e2b946 !important; }

.button--inv.button--brand-sec {
  color: #E1B742 !important;
  box-shadow: inset 0 0 0 1px #E1B742; }

.bg--brand-tri {
  background-color: #3aaa35; }

.color--brand-tri {
  color: #3aaa35 !important; }

.blocklink--brand-tri {
  background-color: #3aaa35 !important; }

.hero--brand-tri {
  background-color: #3aaa35 !important; }
  .hero--brand-tri .hero__content:after {
    background-color: #3aaa35 !important; }

.button--brand-tri {
  background-color: #3aaa35 !important; }
  .button--brand-tri:hover {
    background-color: #3bae36 !important; }

.button--inv.button--brand-tri {
  color: #3aaa35 !important;
  box-shadow: inset 0 0 0 1px #3aaa35; }

/*----------------------------------------------------------------------------*    $FONT
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
       The default media queries shipped with Blocss:
       Uncomment the ones you need
    \*------------------------------------------------------------------------*/
/**
         * Desk-wide state
         */
/**
         * Desk state
         */
/**
         * Portable state
         */
/**
         * Lap state
         */
/**
         * Lapup state
         */
/**
         * Palm state
         */
/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
.big-text {
  font-size: 16px;
  font-weight: 300; }
  .big-text a {
    color: #636363; }

h3, .h3 {
  margin-bottom: 6px; }

/*----------------------------------------------------------------------------*    $TOPLEVEL
    html, body, .wrapper
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
/* commented backslash hack \*/
html, body {
  height: 100%; }

/* end hack */
* html .wrapper {
  height: 100%; }

body {
  position: relative;
  min-height: 100%;
  -webkit-font-smoothing: antialiased; }

/**
     * Make wrapper 100% height
     */
.wrapper {
  position: relative;
  min-height: 100%;
  height: auto;
  width: 100%;
  margin: 0 auto; }

.site-width {
  margin: 0 auto;
  /* 1 */
  /* 3 */
  max-width: 1200px ;
  /* 2 */
  /* 3 */
  max-width: 85.71429rem ;
  /* 1 */
  /* 3 */
  padding: 0 24px ;
  /* 2 */
  /* 3 */
  padding: 0 1.71429rem ; }

.site-width--nopadding {
  padding: 0; }

@media only screen and (max-width: 600px) {
  .site-width--nopadding--palm {
    padding: 0; } }

/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
@media only screen and (max-width: 600px) {
  .grid {
    display: flex;
    flex-direction: column-reverse; } }

/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
.content-links {
  margin-bottom: 24px; }
  .content-links ul {
    margin: 0;
    list-style: none; }
    .content-links ul a {
      text-decoration: none; }

/*----------------------------------------------------------------------------*    $FOOTER
    bottom of page
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
       The default media queries shipped with Blocss:
       Uncomment the ones you need
    \*------------------------------------------------------------------------*/
/**
         * Desk-wide state
         */
/**
         * Desk state
         */
/**
         * Portable state
         */
/**
         * Lap state
         */
/**
         * Lapup state
         */
/**
         * Palm state
         */
/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
.footer {
  margin-top: 24px; }

/*----------------------------------------------------------------------------*    $HEADER
    top of page
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
       The default media queries shipped with Blocss:
       Uncomment the ones you need
    \*------------------------------------------------------------------------*/
/**
         * Desk-wide state
         */
/**
         * Desk state
         */
/**
         * Portable state
         */
/**
         * Lap state
         */
@media only screen and (min-width: 601px) and (max-width: 960px) {
  .header__pri ul {
    display: none; }
  .logo-holder {
    position: absolute; } }

/**
         * Lapup state
         */
/**
         * Palm state
         */
@media only screen and (max-width: 600px) {
  .header__mob {
    display: block; }
  .header__pri ul {
    display: none; }
  .header__nav {
    padding-left: 40px; }
  .header-logos {
    display: flex;
    flex-wrap: wrap;
    justify-content: center; }
  .header-logos__item:last-child {
    margin-top: 24px; } }

/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
.header-logos__item {
  height: 55px;
  margin-right: 10px;
  border: solid 1px black;
  padding: 5px; }

.header-logos__item:last-child {
  margin-right: 0;
  border: none;
  padding: 0; }

/*----------------------------------------------------------------------------*    $LAYER
    page part
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
.layer {
  padding: 48px 0; }

.layer--wide {
  padding: 96px 0; }

.layer--small {
  padding: 24px 0; }

.layer--tiny {
  padding: 12px; }

.layer--nopaddingbottom {
  padding-bottom: 0; }

/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
       The default media queries shipped with Blocss:
       Uncomment the ones you need
    \*------------------------------------------------------------------------*/
/**
         * Desk-wide state
         */
/**
         * Desk state
         */
/**
         * Portable state
         */
/**
         * Lap state
         */
/**
         * Lapup state
         */
/**
         * Palm state
         */
@media only screen and (max-width: 600px) {
  .layer {
    padding: 24px 0; } }

/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
@media only screen and (max-width: 600px) {
  .card__map {
    display: none; } }

/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/
.card {
  box-shadow: 0px 0px 15px 1px rgba(0, 0, 0, 0.4);
  border-radius: 10px;
  overflow: hidden;
  margin-bottom: 24px; }

.card__header img {
  max-height: 115px;
  display: block;
  margin: 0 auto;
  padding-top: 6px; }

.card__header--border--brand {
  border-bottom: solid 3px #0093d6; }

.card__header--border--brand-sec {
  border-bottom: solid 3px #E1B742; }

.card__content {
  padding: 24px 24px 6px; }

.card__map {
  border-radius: 10px;
  overflow: hidden; }

.card__button {
  padding: 10px 30px 10px 15px;
  text-transform: uppercase;
  font-weight: bold;
  font-size: 18px;
  display: inline-block;
  text-decoration: none;
  color: #000; }

.card__button--yellow {
  background: url(../gfx/icons/right-yellow.svg);
  background-position: right center;
  background-size: 12px;
  background-repeat: no-repeat; }

.card__button--blue {
  background: url(../gfx/icons/right-blue.svg);
  background-position: right center;
  background-size: 12px;
  background-repeat: no-repeat; }

/*----------------------------------------------------------------------------*    $Helpers
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
    CONTENTS................You're reading it, LOL
    MODULE..................Includes base module & submodules
    STATE...................States the module can be in
    THEME...................Theming of the module
    */
/*----------------------------------------------------------------------------*    $FUNCTIONS
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    Main
\*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*    $CONTENTS
\*----------------------------------------------------------------------------*/
/*
CONTENTS................You're reading it, LOL
MODULE..................Includes base module & submodules
STATE...................States the module can be in
THEME...................Theming of the module
*/
/*----------------------------------------------------------------------------*    $MODULE
\*----------------------------------------------------------------------------*/
.nav-top {
  border-bottom: 1px solid #fff; }
  .nav-top li a {
    text-decoration: none;
    padding: 12px;
    color: #636363;
    font-size: 12px; }

.nav-bot li a {
  text-decoration: none;
  padding: 24px;
  color: #636363;
  font-size: 20px; }

.nav-mob__top li, .nav-mob__bot li {
  list-style-type: none;
  margin: 24px; }
  .nav-mob__top li a, .nav-mob__bot li a {
    text-decoration: none;
    color: #F2F0F1;
    font-weight: 700; }

/*----------------------------------------------------------------------------*    $STATE
\*----------------------------------------------------------------------------*/
/* Media Queries
   The default media queries shipped with Blocss:
   Uncomment the ones you need
\*------------------------------------------------------------------------*/
/**
 * Desk-wide state
 */
/**
 * Desk state
 */
/**
 * Portable state
 */
/**
 * Lap state
 */
/**
 * Lapup state
 */
/**
 * Palm state
 */
/*----------------------------------------------------------------------------*    $THEME
\*----------------------------------------------------------------------------*/

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuY3NzIiwic291cmNlcyI6WyJ0aGVtZS5zY3NzIiwiX3ZhcnMuc2NzcyIsIi4uL2xpYi9ibG9jc3MvX2Jsb2Nzcy5zY3NzIiwiLi4vbGliL2Jsb2Nzcy9fZGVmYXVsdHMuc2NzcyIsIi4uL2xpYi9ibG9jc3MvZ2VuZXJpYy9fbWl4aW5zLnNjc3MiLCIuLi9saWIvYmxvY3NzL2dlbmVyaWMvX25vcm1hbGl6ZS5zY3NzIiwiLi4vbGliL2Jsb2Nzcy9iYXNlL19iYXNlLnNjc3MiLCIuLi9saWIvYmxvY3NzL2Jhc2UvX3NoYXJlZC5zY3NzIiwiLi4vbGliL2Jsb2Nzcy9iYXNlL190eXBvZ3JhcGh5LnNjc3MiLCIuLi9saWIvYmxvY3NzL2Jhc2UvX21vZHVsZS5zY3NzIiwiLi4vbGliL2Jsb2Nzcy9nZW5lcmljL19kZWJ1Zy5zY3NzIiwiLi4vbGliL2Jsb2Nzcy1hcnJhbmdlL19hcnJhbmdlLnNjc3MiLCIuLi9saWIvYmxvY3NzLWJ1dHRvbnMvX2J1dHRvbnMuc2NzcyIsIi4uL2xpYi9ibG9jc3MtZmxleGVtYmVkL19mbGV4ZW1iZWQuc2NzcyIsIi4uL2xpYi9ibG9jc3MtZ3JpZC9fZ3JpZC5zY3NzIiwiLi4vbGliL2Jsb2Nzcy1kaW1lbnNpb25zL19kaW1lbnNpb25zLnNjc3MiLCIuLi9saWIvYmxvY3NzLWlzbGFuZC9faXNsYW5kLnNjc3MiLCIuLi9saWIvYmxvY3NzLW1lZGlhL19tZWRpYS5zY3NzIiwiLi4vbGliL2Jsb2Nzcy1uYXZpZ2F0aW9uL19uYXZpZ2F0aW9uLnNjc3MiLCIuLi9saWIvYmxvY3NzLWhlbHBlcnMvX2hlbHBlcnMuc2NzcyIsInRoZW1lL2Jhc2UvX2NvbG9yLnNjc3MiLCJ0aGVtZS9iYXNlL19mb250LnNjc3MiLCJ0aGVtZS9iYXNlL190b3BsZXZlbC5zY3NzIiwidGhlbWUvbGF5b3V0L19jb250ZW50LnNjc3MiLCJ0aGVtZS9sYXlvdXQvX2Zvb3Rlci5zY3NzIiwidGhlbWUvbGF5b3V0L19oZWFkZXIuc2NzcyIsInRoZW1lL2xheW91dC9fbGF5ZXIuc2NzcyIsInRoZW1lL21vZHVsZXMvX2NhcmQuc2NzcyIsInRoZW1lL21vZHVsZXMvX2hlbHBlcnMuc2NzcyIsInRoZW1lL25hdi9fbWFpbi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICAgICB0aGVtZS5zY3NzXG4gICAgICAgIFRoZW1lIHN0eWxlc2hlZXQsIGV4dGVuZHMgQmxvY3NzIENTUyBGcmFtZXdvcmtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAgICAgQ09OVEVOVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLypcbiAgICBSRUFETUVcbiAgICBJTkNMVURFUy4uLi4uLi4uLi4uLkluY2x1ZGUgdmFyaW91cyBzYXNzIGZpbGVzXG4gICAgQkFTRS4uLi4uLi4uLi4uLi4uLi5IaWdoLWxldmVsIGVsZW1lbnRzIGxpa2UgJ2h0bWwnLCAnYm9keScsIGV0Yy5cbiAgICBMQVlPVVQuLi4uLi4uLi4uLi4uLlN0cnVjdHVyYWwgc3R5bGluZ1xuICAgIE1PRFVMRVMuLi4uLi4uLi4uLi4uUmV1c2FibGUsIG1vZHVsYXIgcGFydHMgb2YgdGhlIHBhZ2VcbiAgICAqL1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkSU5DTFVERVNcbiAgICBJbmNsdWRlIHZhcmlvdXMgc2FzcyBmaWxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBJZiB5b3UgdXNlIGNvbXBhc3MgZW5hYmxlIHRoaXNcbiAgICAgKi9cbiAgICBAaW1wb3J0IFwidmFyc1wiO1xuICAgIEBpbXBvcnQgXCIuLi9saWIvYmxvY3NzL2Jsb2Nzc1wiO1xuICAgIEBpbXBvcnQgXCIuLi9saWIvYmxvY3NzLWFycmFuZ2UvYXJyYW5nZVwiO1xuICAgIEBpbXBvcnQgXCIuLi9saWIvYmxvY3NzLWJ1dHRvbnMvYnV0dG9uc1wiO1xuICAgIEBpbXBvcnQgXCIuLi9saWIvYmxvY3NzLWZsZXhlbWJlZC9mbGV4ZW1iZWRcIjtcbiAgICBAaW1wb3J0IFwiLi4vbGliL2Jsb2Nzcy1ncmlkL2dyaWRcIjtcbiAgICBAaW1wb3J0IFwiLi4vbGliL2Jsb2Nzcy1kaW1lbnNpb25zL2RpbWVuc2lvbnNcIjtcbiAgICBAaW1wb3J0IFwiLi4vbGliL2Jsb2Nzcy1pc2xhbmQvaXNsYW5kXCI7XG4gICAgQGltcG9ydCBcIi4uL2xpYi9ibG9jc3MtbWVkaWEvbWVkaWFcIjtcbiAgICBAaW1wb3J0IFwiLi4vbGliL2Jsb2Nzcy1uYXZpZ2F0aW9uL25hdmlnYXRpb25cIjtcbiAgICBAaW1wb3J0IFwiLi4vbGliL2Jsb2Nzcy1oZWxwZXJzL2hlbHBlcnNcIjtcblxuXG5cblxuXG4gICAgLyoqXG4gICAgICogVGhlbWUgaW5jbHVkZXNcbiAgICAgKi9cbiAgICBAaW1wb3J0IFwidGhlbWUvYmFzZS9fY29sb3Iuc2Nzc1wiO1xuQGltcG9ydCBcInRoZW1lL2Jhc2UvX2ZvbnQuc2Nzc1wiO1xuQGltcG9ydCBcInRoZW1lL2Jhc2UvX3RvcGxldmVsLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9sYXlvdXQvX2NvbnRlbnQuc2Nzc1wiO1xuQGltcG9ydCBcInRoZW1lL2xheW91dC9fZm9vdGVyLnNjc3NcIjtcbkBpbXBvcnQgXCJ0aGVtZS9sYXlvdXQvX2hlYWRlci5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbGF5b3V0L19sYXllci5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbW9kdWxlcy9fY2FyZC5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbW9kdWxlcy9faGVscGVycy5zY3NzXCI7XG5AaW1wb3J0IFwidGhlbWUvbmF2L19tYWluLnNjc3NcIjtcblxuICAgIFxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFZBUlNcbiAgICBBbnkgdmFyaWFibGVzIHlvdSBmaW5kIHNldCBpbiBibG9jc3PigJkgYF9kZWZhdWx0cy5zY3NzYCB0aGF0IHlvdSBkbyBub3Qgd2lzaFxuICAgIHRvIGtlZXAsIHNpbXBseSByZWRlZmluZSBoZXJlLiBUaGlzIG1lYW5zIHRoYXQgaWYgYmxvY3NzLCBmb3IgZXhhbXBsZSxcbiAgICBzZXRzIHlvdXIgYCRiYXNlLWZvbnQtc2l6ZWAgYXQgMTZweCBhbmQgeW91IHdpc2ggaXQgdG8gYmUgMTRweCwgc2ltcGx5XG4gICAgcmVkZWNsYXJlIHRoYXQgdmFyaWFibGUgaW4gdGhpcyBmaWxlLiBCbG9jc3MgaWdub3JlcyBpdHMgb3duIHZhcmlhYmxlc1xuICAgIGluIGZhdm91ciBvZiB1c2luZyB5b3VyIG93biwgc28geW91IGNhbiBjb21wbGV0ZWx5IG1vZGlmeSBob3cgYmxvY3NzXG4gICAgd29ya3Mgd2l0aG91dCBldmVyIGhhdmluZyB0byBhbHRlciB0aGUgZnJhbWV3b3JrIGl0c2VsZi5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyogTW9kdWxlcyAqL1xuICAgICR1c2UtYXJyYW5nZTogICAgICAgICAgICAgICAgICAgICAgIHRydWU7XG4gICAgJHVzZS1idXR0b25zOiAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgICAkdXNlLWZsZXhlbWJlZDogICAgICAgICAgICAgICAgICAgICBmYWxzZTtcbiAgICAkdXNlLWlzbGFuZDogICAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xuICAgICR1c2UtbWVkaWE6ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICR1c2UtbmF2aWdhdGlvbjogICAgICAgICAgICAgICAgICAgIHRydWU7XG5cbiAgICAkdXNlLWdyaWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xuICAgICAgICAkZ3JpZC1ndXR0ZXItbXVsdGlwbGllcjogICAgICAgIDE7XG4gICAgICAgICRlbmFibGUtZ3JpZC1yZXY6ICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgICRlbmFibGUtZ3JpZC1yaWdodDogICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgICRlbmFibGUtZ3JpZC1jZW50ZXI6ICAgICAgICAgICAgdHJ1ZTtcbiAgICAgICAgJGVuYWJsZS1ncmlkLW1pZGRsZTogICAgICAgICAgICB0cnVlO1xuICAgICAgICAkZW5hYmxlLWdyaWQtbmFycm93OiAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICAkZW5hYmxlLWdyaWQtd2lkZTogICAgICAgICAgICAgIHRydWU7XG4gICAgICAgICRlbmFibGUtZ3JpZC1mbHVzaDogICAgICAgICAgICAgdHJ1ZTtcblxuICAgIC8qIEdlbmVyaWMgKi9cbiAgICAkdXNlLXVuaXRzOiAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xuICAgICR1c2UtcHVzaDogICAgICAgICAgICAgICAgICAgICAgICAgIHRydWU7XG4gICAgJHVzZS1wdWxsOiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7XG5cbiAgICAkZGl2aXNpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAxMjtcblxuICAgIC8qIFJlc3BvbnNpdmUgKi9cbiAgICAkYnJlYWtwb2ludHM6IChcbiAgICAgICAgJ3BhbG0nICAgICAgJyhtYXgtd2lkdGg6IDYwMHB4KScsXG4gICAgICAgICdsYXAnICAgICAgICcobWluLXdpZHRoOiA2MDFweCkgYW5kIChtYXgtd2lkdGg6IDk2MHB4KScsXG4gICAgICAgICdkZXNrJyAgICAgICcobWluLXdpZHRoOiA5NjFweCknXG4gICAgKTtcblxuICAgICRicmVha3BvaW50LWhhcy11bml0czogICAgICAgICAgICAgICgncGFsbScsICdsYXAnLCAnZGVzaycpO1xuICAgICRicmVha3BvaW50LWhhcy1wdXNoOiAgICAgICAgICAgICAgICgncGFsbScsICdsYXAnLCAnZGVzaycpO1xuICAgICRicmVha3BvaW50LWhhcy1jb2xsYXBzZWQtYXJyYW5nZTogICgncGFsbScsICdsYXAnKTtcbiAgICAkYnJlYWtwb2ludC1oYXMtcHVsbDogICAgICAgICAgICAgICAoKTtcbiAgICAkYnJlYWtwb2ludC1oYXMtdmlzdWFsbHloaWRkZW46ICAgICAoJ3BhbG0nLCAnbGFwJyk7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRPVkVSUklERVNcbiAgICBQbGFjZSBhbnkgdmFyaWFibGVzIHRoYXQgc2hvdWxkIG92ZXJyaWRlIGJsb2Nzc+KAmSBkZWZhdWx0cyBoZXJlLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAkYmFzZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgICAgMTRweDtcbiAgICAkYmFzZS1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAgMjRweDtcbiAgICAkbGluZS1oZWlnaHQtcmF0aW86ICAgICAgICAgICAgICAgICAgICAgJGJhc2UtbGluZS1oZWlnaHQvJGJhc2UtZm9udC1zaXplO1xuXG4gICAgJGdpZ2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk2cHg7XG4gICAgJG1lZ2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwcHg7XG4gICAgJGtpbG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0cHg7XG5cbiAgICAkYWxwaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjRweDtcbiAgICAkYmV0YTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjJweDtcbiAgICAkZ2FtbWE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjBweDtcbiAgICAkZGVsdGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMThweDtcbiAgICAkZXBzaWxvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTZweDtcbiAgICAkemV0YTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTRweDtcblxuICAgICRtaWxsaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMnB4O1xuICAgICRtaWNybzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMHB4O1xuXG4gICAgJGZhY2UtYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLy8gJGZhY2UtYnJhbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcmVkb2thIE9uZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDVVNUT01cbiAgICBQbGFjZSBhbnkgb2YgeW91ciBvd24gdmFyaWFibGVzIHRoYXQgc2l0IG9uIHRvcCBvZiBibG9jc3MgaGVyZS5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgJGNvbG9yczogKFxuICAgICAgICAgICAgYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgI0YyRjBGMSxcbiAgICAgICAgICAgIGJhc2UtZGFyazogICAgICAgICAgICAgICAgICAgICM2MzYzNjMsXG4gICAgICAgICAgICBzdWJ0bGU6ICAgICAgICAgICAgICAgICAgICAgICAjRjRFRkU3LFxuICAgICAgICAgICAgYmxhbms6ICAgICAgICAgICAgICAgICAgICAgICAgI2ZmZmZmZixcbiAgICAgICAgICAgIGJyYW5kOiAgICAgICAgICAgICAgICAgICAgICAgICMwMDkzZDYsXG4gICAgICAgICAgICBicmFuZC1zZWM6ICAgICAgICAgICAgICAgICAgICAjRTFCNzQyLFxuICAgICAgICAgICAgYnJhbmQtdHJpOiAgICAgICAgICAgICAgICAgICAgIzNhYWEzNSxcblxuICAgICk7XG5cbiAgICAkei1pbmRleGVzOiAoXG4gICAgICAgIG1haW46IChcbiAgICAgICAgICAgICAgICBhYm92ZS1pbmhlcml0OiAoKSxcbiAgICAgICAgICAgICAgICBuZXN0ZWQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZGRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICgpXG4gICAgICAgICksXG4gICAgICAgIGhlYWRlcjogKCksXG4gICAgICAgIHRvYXN0ZXI6ICgpXG4gICAgKTtcblxuICAgICRzaXRlLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICAgIDEyMDBweDtcblxuICAgICR0cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgIGN1YmljLWJlemllciguNTUsMCwuMSwxKTtcbiIsIi8qISpcbiAqIFBvd2VyZWQgYnkgQmxvY3NzIHY1LjAuOCB8IE1JVCBMaWNlbnNlIHwgYmxvY3NzLmdpdGh1Yi5pby9ibG9jc3NcbiAqIGJ5IEBicmFtc211bGRlcnMgKEJyYW0gU211bGRlcnMpXG4gKi9cblxuQGltcG9ydCBcImRlZmF1bHRzXCI7XG5AaW1wb3J0IFwiZ2VuZXJpYy9taXhpbnNcIjtcbkBpbXBvcnQgXCJnZW5lcmljL25vcm1hbGl6ZVwiO1xuQGltcG9ydCBcImJhc2UvYmFzZVwiO1xuQGltcG9ydCBcImJhc2Uvc2hhcmVkXCI7XG5AaW1wb3J0IFwiYmFzZS90eXBvZ3JhcGh5XCI7XG5AaW1wb3J0IFwiYmFzZS9tb2R1bGVcIjtcbkBpbXBvcnQgXCJnZW5lcmljL2RlYnVnXCI7XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICBERUZBVUxUU1xuICAgIEJsb2NzcycgZGVmYXVsdCB2YXJpYWJsZXMuIFJlZGVmaW5lIGFuZCBvdmVycmlkZSB0aGVtIGluIHlvdXJcbiAgICBhcHBsaWNhdGlvbi1sZXZlbCBgX3ZhcnMuc2Nzc2AgZmlsZS5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkQ09OVEVOVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIFRZUE9HUkFQSFkgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgdHlwb2dyYXBoaWMgYmFzZWxpbmVcbiAqIFNQQUNJTkcgICAgICAgICAgICAgICAgICAgICAgU3BhY2luZyB1bml0cyB0byBwcm9wZXJseSBzaXplIHlvdXIgVUlcbiAqIFJFU1BPTlNJVkUgICAgICAgICAgICAgICAgICAgRGVmaW5lIHlvdXIgYnJlYWtwb2ludHNcbiAqIE1JU0NcbiAqL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRUWVBPR1JBUEhZXG4gICAgRGVmaW5lcyB0aGUgdHlwb2dyYXBoaWMgYmFzZWxpbmUuXG4gICAgV2UgZGVmaW5lIGV2ZXJ5IHNpemUgaW4gcGl4ZWxzLCB0aGUgdW5kZXJseWluZyBzeXN0ZW0gY29udmVydHMgdGhlXG4gICAgcmVzcGVjdGl2ZSB1bml0cyB0byB0aGUgcmVzcG9uc2l2ZSBSRU0gdmFsdWUuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBCYXNlIGZvbnQgc2l6ZSAmIGxpbmUgaGVpZ2h0XG4gKiBXZSBwcmVkZWZpbmUgYSBuaWNlIGJpZyBmb250IHNpemUsIHdpY2ggcmVhZHMgdmVyeSBuaWNlIG9uIGEgYmlnIHNjcmVlbi5cbiAqIEFzIHBlcjogaHR0cDovL3V4ZGVzaWduLnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTEvMTEvMjkvdGhlLXBlcmZlY3QtcGFyYWdyYXBoL1xuICovXG4kYmFzZS1mb250LXNpemU6ICAgICAgICAgICAgICAgIDE2cHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJGJhc2UtbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICAyNHB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRsaW5lLWhlaWdodC1yYXRpbzogICAgICAgICAgICAgJGJhc2UtbGluZS1oZWlnaHQvJGJhc2UtZm9udC1zaXplICAgIWRlZmF1bHQ7XG5cblxuLyoqXG4gKiBTaXplcyAoaW4gcGl4ZWxzKVxuICovXG4kZ2lnYTogICAgICAgICAgICAgICAgICAgICAgICAgIDk2cHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJG1lZ2E6ICAgICAgICAgICAgICAgICAgICAgICAgICA3MnB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRraWxvOiAgICAgICAgICAgICAgICAgICAgICAgICAgNDhweCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cbiRhbHBoYTogICAgICAgICAgICAgICAgICAgICAgICAgMzZweCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4kYmV0YTogICAgICAgICAgICAgICAgICAgICAgICAgIDMycHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJGdhbW1hOiAgICAgICAgICAgICAgICAgICAgICAgICAyOHB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRkZWx0YTogICAgICAgICAgICAgICAgICAgICAgICAgMjRweCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4kZXBzaWxvbjogICAgICAgICAgICAgICAgICAgICAgIDIwcHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJHpldGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAxOHB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuJG1pbGxpOiAgICAgICAgICAgICAgICAgICAgICAgICAxNHB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRtaWNybzogICAgICAgICAgICAgICAgICAgICAgICAgMTJweCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuLyoqXG4gKiBCYXNlIGZvbnQgZmFtaWx5XG4gKi9cbiRmYWNlLWJhc2U6ICAgICAgICAgICAgICAgICAgICAgc2Fucy1zZXJpZiAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFNQQUNJTkdcbiAgICBTcGFjaW5nIHVuaXRzIHRvIHByb3Blcmx5IHNpemUgeW91ciBVSVxuICAgIEFzIHBlcjogaHR0cDovL2Nzc3dpemFyZHJ5LmNvbS8yMDExLzEyL21lYXN1cmluZy1hbmQtc2l6aW5nLXVpcy0yMDExLXN0eWxlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBFbmFibGUgdmVydGljYWwgcmh5dGhtP1xuICpcbiAqIEVuYWJsaW5nIHRoaXMgd2lsbCBlbnN1cmUgYWxsIG1hcmdpbnMsIHBhZGRpbmdzLCBsaW5laGVpZ2h0cyBldGMuIHdpbGxcbiAqIGZvbGxvdyB0aGUgZGVmYXVsdCBsaW5lIGhlaWdodC5cbiAqXG4gKiBEaXNhYmxpbmcgdGhpcyB3aWxsIHJlbmRlciBhbGwgbGluZS1oZWlnaHRzIGFjY29yZGluZ1xuICogdG8gdGhlIGAkbGluZS1oZWlnaHQtcmF0aW9gIHZhcmlhYmxlXG4gKi9cbiR1c2UtdmVydGljYWwtcmh5dGhtOiAgICAgICAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuLyoqXG4gKiBBc3NpZ24gb3VyIGAkYmFzZS1saW5lLWhlaWdodGAgdG8gYSBuZXcgc3BhY2luZyB2YXIgZm9yXG4gKiBtb3JlIHRyYW5zcGFyZW5jeVxuICovXG4kc3BhY2U6ICAgICAgICAgICAgICAgICAgICAgICAgICRiYXNlLWxpbmUtaGVpZ2h0ICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJHNwYWNlLWhhbGY6ICAgICAgICAgICAgICAgICAgICAkc3BhY2UvMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkUkVTUE9OU0lWRVxuICAgIERlZmluZSB5b3VyIGJyZWFrcG9pbnRzLiBUaGUgZmlyc3QgdmFsdWUgaXMgdGhlIGFwcGVuZGl4IHRoYXQgc2hhbGwgYmUgdXNlZFxuICAgIGZvciB5b3VyIGNsYXNzZXMgKGUuZy4gYC51bml0LTYtMTItLXBhbG1gKSwgdGhlIHNlY29uZCB2YWx1ZSBpcyB0aGUgbWVkaWFcbiAgICBxdWVyeSB0aGF0IHRoZSBicmVha3BvaW50IGZpcmVzIGF0LlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRicmVha3BvaW50czogKFxuICAgICdsYXAnICAgICAgICcobWluLXdpZHRoOiA0ODBweCknLFxuICAgICdkZXNrJyAgICAgICcobWluLXdpZHRoOiA5NjBweCknXG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNSVNDXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBXb3VsZCB5b3UgbGlrZSB0byBzaG93IGEgYmFzZWxpbmUgZ3JpZD8gVGhpcyBpcyBoYW5keSBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gKi9cbiRzaG93LWJhc2VsaW5lOiAgICAgICAgICAgICAgICAgZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuLyoqXG4gKiBXb3VsZCB5b3UgbGlrZSB0byBzaG93IG1lZGlhIHF1ZXJpZXM/IFRoaXMgaXMgaGFuZHkgZHVyaW5nIGRldmVsb3BtZW50LlxuICovXG4kc2hvdy1tcTogICAgICAgICAgICAgICAgICAgICAgIGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cbi8qKlxuICogTGVnYWN5IHN1cHBvcnRcbiAqL1xuJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTg6ICAgICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuXG4vKipcbiAqIEVuYWJsZSBkZWJ1ZyBtb2RlIHRvIGhpZ2hsaWdodCBwb3NzaWJsZSBtYXJrdXAvYWNjZXNzaWJpbGl0eVxuICogcXVpcmtzIGluIHlvdXIgY29kZVxuICovXG4kZGVidWctbW9kZTogICAgICAgICAgICAgICAgICAgIGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0OyIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNSVhJTlNcbiAgICBBIHNldCBvZiB1c2VmdWxsIFNhc3MgbWl4aW5zLCB3aWNoIGNhbiBiZSB1c2VkIHRyb3VnaG91dCB5b3UgcHJvamVjdFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBGdW5jdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVmFsdWUgdG8gcmVtXG4gICAgICovXG4gICAgQGZ1bmN0aW9uIHZhbHVlVG9SZW0oJHZhbHVlKSB7XG4gICAgICAgIEByZXR1cm4gKCR2YWx1ZS8kYmFzZS1mb250LXNpemUqMXJlbSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB0byBlbVxuICAgICAqL1xuICAgIEBmdW5jdGlvbiB2YWx1ZVRvRW0oJHZhbHVlKSB7XG4gICAgICAgIEByZXR1cm4gKCR2YWx1ZS8kYmFzZS1mb250LXNpemUqMWVtKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEEgc21hbGwsIGludGVybmFsbHktdXNlZCBmdW5jdGlvbiB0byByZW1vdmUgdGhlIHVuaXRzIGZyb20gYSBnaXZlbiB2YWx1ZS5cbiAgICAgKi9cbiAgICBAZnVuY3Rpb24gc3RyaXAtdW5pdHMoJG51bWJlcikge1xuICAgICAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgICB9XG5cblxuXG4vKiAgQ1NTM1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBQcmVmaXhlclxuICAgICAqIEV4YW1wbGU6IEBpbmNsdWRlIHByZWZpeGVyKGJvcmRlci1yYWRpdXMsIDVweCAxMHB4LCB3ZWJraXQgbW96IG8gbXMgc3BlYyk7XG4gICAgICovXG4gICAgQG1peGluIHByZWZpeGVyICgkcHJvcGVydHksICR2YWx1ZSwgJHByZWZpeGVzKSB7XG5cbiAgICAgICAgQGVhY2ggJHByZWZpeCBpbiAkcHJlZml4ZXMge1xuICAgICAgICAgICAgQGlmICRwcmVmaXggIT0gc3BlYyB7XG4gICAgICAgICAgICAgICAgLSN7JHByZWZpeH0tI3skcHJvcGVydHl9OiAkdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSBpZiAkcHJlZml4ID09IHNwZWMge1xuICAgICAgICAgICAgICAgICN7JHByb3BlcnR5fTogJHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFJlbSBjb252ZXJ0ZXJcbiAgICAgKlxuICAgICAqIDEuIFByb3ZpZGUgcGl4ZWwgZmFsbGJhY2sgZm9yIGllOFxuICAgICAqIDIuIExvb3Agb3ZlciB2YWx1ZXNcbiAgICAgKiAzLiBSdW4gdHJvdWdoIHByZWZpeGVyXG4gICAgICpcbiAgICAgKiBTYW1wbGU6IEBpbmNsdWRlIHJlbShtYXJnaW4sIDAgYXV0byAzMDBweCwgd2Via2l0IG1veiBzcGVjLCAhaW1wb3J0YW50KTtcbiAgICAgKi9cbiAgICBAbWl4aW4gcmVtICgkcHJvcGVydHksICR2YWx1ZSwgJHByZWZpeGVyOiBmYWxzZSwgJGFwcGVuZDogXCJcIikge1xuXG4gICAgICAgIC8qIDEgKi9cbiAgICAgICAgQGlmICRsZWdhY3ktc3VwcG9ydC1mb3ItaWU4ID09IHRydWUge1xuICAgICAgICAgICAgLyogMyAqL1xuICAgICAgICAgICAgQGlmICRwcmVmaXhlciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcHJlZml4ZXIoI3skcHJvcGVydHl9LCAkdmFsdWUgI3skYXBwZW5kfSwgJHByZWZpeGVyKTtcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICN7JHByb3BlcnR5fTogJHZhbHVlICN7JGFwcGVuZH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiAyICovXG4gICAgICAgIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gbGlzdCB7XG4gICAgICAgICAgICAkYWxsOiAoKTtcbiAgICAgICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCR2YWx1ZSkge1xuICAgICAgICAgICAgICAgIEBpZiB0eXBlLW9mKG50aCgkdmFsdWUsICRpKSkgPT0gc3RyaW5nIG9yIHVuaXRsZXNzKG50aCgkdmFsdWUsICRpKSkgPT0gdHJ1ZSBvciB1bml0KG50aCgkdmFsdWUsICRpKSkgPT0gXCJlbVwiIG9yIHVuaXQobnRoKCR2YWx1ZSwgJGkpKSA9PSBcIiVcIiB7XG4gICAgICAgICAgICAgICAgICAgICRhbGw6IGFwcGVuZCgkYWxsLCBudGgoJHZhbHVlLCAkaSkpO1xuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkYWxsOiBhcHBlbmQoJGFsbCwgdmFsdWVUb1JlbShudGgoJHZhbHVlLCAkaSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiAzICovXG4gICAgICAgICAgICBAaWYgJHByZWZpeGVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBwcmVmaXhlcigjeyRwcm9wZXJ0eX0sICRhbGwgI3skYXBwZW5kfSwgJHByZWZpeGVyKTtcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGFsbCAjeyRhcHBlbmR9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIC8qIDMgKi9cbiAgICAgICAgICAgIEBpZiAkcHJlZml4ZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHByZWZpeGVyKCN7JHByb3BlcnR5fSwgdmFsdWVUb1JlbSgkdmFsdWUpICN7JGFwcGVuZH0sICRwcmVmaXhlcik7XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAjeyRwcm9wZXJ0eX06IHZhbHVlVG9SZW0oJHZhbHVlKSAjeyRhcHBlbmR9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aSByZW0gY29udmVydGVyXG4gICAgICogUmVtbWlmeSBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIG9uZSBzd29vcFxuICAgICAqXG4gICAgICogQmV3YXJlOiBpZiBvbmx5IG9uZSBzZXQgaXMgcHJvdmlkZWQsIHRoZSBtaXhpbiB3aWxsIGZhaWwuXG4gICAgICogSW4gdGhhdCBjYXNlIHVzZSB0aGUgbm9ybWFsIHJlbSBtaXhpbiBpbnN0ZWFkXG4gICAgICpcbiAgICAgKiBTYW1wbGU6XG4gICAgICAgQGluY2x1ZGUgbXVsdGktcmVtKFxuICAgICAgICAgICAocGFkZGluZywgJHNwYWNlIDFlbSlcbiAgICAgICAgICAgKG1hcmdpbiwgJHNwYWNlIGF1dG8sIHRydWUpXG4gICAgICAgICAgIChib3JkZXItcmFkaXVzLCA1MCUpXG4gICAgICAgKTtcbiAgICAgKi9cbiAgICBAbWl4aW4gbXVsdGktcmVtKCRzZXQpIHtcbiAgICAgICAgQGlmIHR5cGUtb2YoJHNldCkgPT0gbGlzdCB7XG4gICAgICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkc2V0KSB7XG4gICAgICAgICAgICAgICAgJHByb3BlcnR5OiBudGgobnRoKCRzZXQsICRpKSwgMSk7XG4gICAgICAgICAgICAgICAgJHZhbHVlOiBudGgobnRoKCRzZXQsICRpKSwgMik7XG5cbiAgICAgICAgICAgICAgICAkcHJlZml4ZXI6IGZhbHNlO1xuICAgICAgICAgICAgICAgIEBpZiBsZW5ndGgobnRoKCRzZXQsICRpKSkgPiAyIHtcbiAgICAgICAgICAgICAgICAgICAgJHByZWZpeGVyOiBudGgobnRoKCRzZXQsICRpKSwgMyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJGFwcGVuZDogXCJcIjtcbiAgICAgICAgICAgICAgICBAaWYgbGVuZ3RoKG50aCgkc2V0LCAkaSkpID09IDQge1xuICAgICAgICAgICAgICAgICAgICAkYXBwZW5kOiBudGgobnRoKCRzZXQsICRpKSwgNCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVtKCRwcm9wZXJ0eSwgJHZhbHVlLCAkcHJlZml4ZXIsICRhcHBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuLyogIFR5cG9ncmFwaHkgJiB2ZXJ0aWNhbCByaHl0aG1cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogRm9udCBmYWNlIHNob3J0aGFuZFxuICAgICAqL1xuICAgIEBtaXhpbiBmb250ZmFjZSgkZm9udC1mYW1pbHksICRmaWxlLXBhdGgsICR3ZWlnaHQ6IG5vcm1hbCwgJHN0eWxlOiBub3JtYWwgKSB7XG4gICAgICAgIEBmb250LWZhY2Uge1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAkd2VpZ2h0O1xuICAgICAgICAgICAgZm9udC1zdHlsZTogJHN0eWxlO1xuXG4gICAgICAgICAgICBzcmM6IHVybCgnI3skZmlsZS1wYXRofS5lb3QnKTtcbiAgICAgICAgICAgIHNyYzogdXJsKCcjeyRmaWxlLXBhdGh9LmVvdD8jaWVmaXgnKSAgICAgICAgICAgICAgIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICAgICAgICAgICAgdXJsKCcjeyRmaWxlLXBhdGh9LndvZmYnKSAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCgnd29mZicpLFxuICAgICAgICAgICAgICAgICB1cmwoJyN7JGZpbGUtcGF0aH0udHRmJykgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KCd0cnVldHlwZScpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIGZvbnQsIHJlbSBmb250IHNpemUgJiBsaW5lIGhlaWdodFxuICAgICAqICRtdWx0aXBsaWVyOiBtdWx0aXBsaWVzIGxpbmUgaGVpZ2h0IGJ5IHRoZSBnaXZlbiB2YWx1ZVxuICAgICAqICRsaW5lLWhlaWdodDogaW5jbHVkZSBsaW5lIGhlaWdodCBvciBub3RcbiAgICAgKiBUaGUgbGluZSBoZWlnaHQgcGFyYW1ldGVyIGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIG11bHRpcGxpZXJcbiAgICAgKlxuICAgICAqIFNhbXBsZSB1c2FnZSBAaW5jbHVkZSBmb250LXNpemUoMThweCwgMik7XG4gICAgICovXG4gICAgQG1peGluIGZvbnQtc2l6ZSgkZnMsICRsaW5lLWhlaWdodDogdHJ1ZSwgJG11bHRpcGxpZXI6IDEpIHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKGZvbnQtc2l6ZSwgJGZzKTtcblxuICAgICAgICAkdXNlLWxpbmUtaGVpZ2h0OiBmYWxzZTtcblxuICAgICAgICBAaWYgdHlwZS1vZigkbGluZS1oZWlnaHQpID09IGJvb2wge1xuICAgICAgICAgICAgQGlmICRsaW5lLWhlaWdodCA9PSB0cnVle1xuICAgICAgICAgICAgICAgICR1c2UtbGluZS1oZWlnaHQ6IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkbGluZS1oZWlnaHQpID09IG51bWJlciB7XG4gICAgICAgICAgICAkdXNlLWxpbmUtaGVpZ2h0OiB0cnVlO1xuICAgICAgICAgICAgJG11bHRpcGxpZXI6ICRsaW5lLWhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAkdXNlLWxpbmUtaGVpZ2h0ID09IHRydWUge1xuICAgICAgICAgICAgQGlmICR1c2UtdmVydGljYWwtcmh5dGhtID09IHRydWUge1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAoY2VpbCgkZnMgLyAkYmFzZS1saW5lLWhlaWdodCkgKiAoJGJhc2UtbGluZS1oZWlnaHQgLyAkZnMpKSAqICRtdWx0aXBsaWVyO1xuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1yYXRpbyAqICRtdWx0aXBsaWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUcnVuY2F0ZSBvdmVybHkgbG9uZyBzdHJpbmdzXG4gICAgICogc2FtcGxlIHZhbHVlIHRydW5jYXRlKDEwMCUpXG4gICAgICovXG4gICAgQG1peGluIHRydW5jYXRlKCR0cnVuY2F0aW9uLWJvdW5kYXJ5KSB7XG4gICAgICAgIG1heC13aWR0aDogJHRydW5jYXRpb24tYm91bmRhcnk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIH1cblxuXG5cbi8qICBNZWRpYSBRdWVyaWVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEVuY2xvc2UgYSBibG9jayBvZiBjb2RlIHdpdGggYSBtZWRpYSBxdWVyeSBhcyBuYW1lZCBpbiBgJGJyZWFrcG9pbnRzYC5cbiAgICAgKi9cbiAgICBAbWl4aW4gbWVkaWEtcXVlcnkoJG1lZGlhLXF1ZXJ5KSB7XG4gICAgICAgICRicmVha3BvaW50LWZvdW5kOiBmYWxzZTtcblxuICAgICAgICBAZWFjaCAkYnJlYWtwb2ludCBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgICAgICAgJG5hbWU6IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgICAgICAgICAkZGVjbGFyYXRpb246IG50aCgkYnJlYWtwb2ludCwgMik7XG5cbiAgICAgICAgICAgIEBpZiAkbWVkaWEtcXVlcnkgPT0gJG5hbWUgYW5kICRkZWNsYXJhdGlvbiB7XG4gICAgICAgICAgICAgICAgJGJyZWFrcG9pbnQtZm91bmQ6IHRydWU7XG5cbiAgICAgICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kICN7JGRlY2xhcmF0aW9ufSB7XG4gICAgICAgICAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAkYnJlYWtwb2ludC1mb3VuZCA9PSBmYWxzZSB7XG4gICAgICAgICAgICBAd2FybiBcIkJyZWFrcG9pbnQg4oCYI3skbWVkaWEtcXVlcnl94oCZIGRvZXMgbm90IGV4aXN0XCJcbiAgICAgICAgfVxuICAgIH0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKiBub3JtYWxpemUuY3NzIHYzLjAuMCB8IE1JVCBMaWNlbnNlIHwgZ2l0LmlvL25vcm1hbGl6ZSAqL1xuXG4vKipcbiAqIDEuIFNldCBkZWZhdWx0IGZvbnQgZmFtaWx5IHRvIHNhbnMtc2VyaWYuXG4gKiAyLiBQcmV2ZW50IGlPUyB0ZXh0IHNpemUgYWRqdXN0IGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZSwgd2l0aG91dCBkaXNhYmxpbmdcbiAqICAgIHVzZXIgem9vbS5cbiAqL1xuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8qIDEgKi9cbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8qIDIgKi9cbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIGRlZmF1bHQgbWFyZ2luLlxuICovXG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbi8qIEhUTUw1IGRpc3BsYXkgZGVmaW5pdGlvbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgaW4gSUUgOC85LlxuICovXG5cbmFydGljbGUsXG5hc2lkZSxcbmRldGFpbHMsXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxuaGdyb3VwLFxubWFpbixcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCBgaW5saW5lLWJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGluIElFIDgvOS5cbiAqIDIuIE5vcm1hbGl6ZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgYHByb2dyZXNzYCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cbiAqL1xuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIDEgKi9cbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyAvKiAyICovXG59XG5cbi8qKlxuICogUHJldmVudCBtb2Rlcm4gYnJvd3NlcnMgZnJvbSBkaXNwbGF5aW5nIGBhdWRpb2Agd2l0aG91dCBjb250cm9scy5cbiAqIFJlbW92ZSBleGNlc3MgaGVpZ2h0IGluIGlPUyA1IGRldmljZXMuXG4gKi9cblxuYXVkaW86bm90KFtjb250cm9sc10pIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xufVxuXG4vKipcbiAqIEFkZHJlc3MgYFtoaWRkZW5dYCBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS5cbiAqIEhpZGUgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudCBpbiBJRSwgU2FmYXJpLCBhbmQgRmlyZWZveCA8IDIyLlxuICovXG5cbltoaWRkZW5dLFxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBMaW5rc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGdyYXkgYmFja2dyb3VuZCBjb2xvciBmcm9tIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuXG5hIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogSW1wcm92ZSByZWFkYWJpbGl0eSB3aGVuIGZvY3VzZWQgYW5kIGFsc28gbW91c2UgaG92ZXJlZCBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOSwgU2FmYXJpIDUsIGFuZCBDaHJvbWUuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkO1xufVxuXG4vKipcbiAqIEFkZHJlc3Mgc3R5bGUgc2V0IHRvIGBib2xkZXJgIGluIEZpcmVmb3ggNCssIFNhZmFyaSA1LCBhbmQgQ2hyb21lLlxuICovXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gU2FmYXJpIDUgYW5kIENocm9tZS5cbiAqL1xuXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi8qKlxuICogQWRkcmVzcyB2YXJpYWJsZSBgaDFgIGZvbnQtc2l6ZSBhbmQgbWFyZ2luIHdpdGhpbiBgc2VjdGlvbmAgYW5kIGBhcnRpY2xlYFxuICogY29udGV4dHMgaW4gRmlyZWZveCA0KywgU2FmYXJpIDUsIGFuZCBDaHJvbWUuXG4gKi9cblxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LlxuICovXG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmYwO1xuICBjb2xvcjogIzAwMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIGluY29uc2lzdGVudCBhbmQgdmFyaWFibGUgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSBib3JkZXIgd2hlbiBpbnNpZGUgYGFgIGVsZW1lbnQgaW4gSUUgOC85LlxuICovXG5cbmltZyB7XG4gIGJvcmRlcjogMDtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IG92ZXJmbG93IGRpc3BsYXllZCBvZGRseSBpbiBJRSA5LlxuICovXG5cbnN2Zzpub3QoOnJvb3QpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLyogR3JvdXBpbmcgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBBZGRyZXNzIG1hcmdpbiBub3QgcHJlc2VudCBpbiBJRSA4LzkgYW5kIFNhZmFyaSA1LlxuICovXG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5cbi8qKlxuICogQWRkcmVzcyBkaWZmZXJlbmNlcyBiZXR3ZWVuIEZpcmVmb3ggYW5kIG90aGVyIGJyb3dzZXJzLlxuICovXG5cbmhyIHtcbiAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIGhlaWdodDogMDtcbn1cblxuLyoqXG4gKiBDb250YWluIG92ZXJmbG93IGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLyoqXG4gKiBBZGRyZXNzIG9kZCBgZW1gLXVuaXQgZm9udCBzaXplIHJlbmRlcmluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBLbm93biBsaW1pdGF0aW9uOiBieSBkZWZhdWx0LCBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYIGFsbG93IHZlcnkgbGltaXRlZFxuICogc3R5bGluZyBvZiBgc2VsZWN0YCwgdW5sZXNzIGEgYGJvcmRlcmAgcHJvcGVydHkgaXMgc2V0LlxuICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCBjb2xvciBub3QgYmVpbmcgaW5oZXJpdGVkLlxuICogICAgS25vd24gaXNzdWU6IGFmZmVjdHMgY29sb3Igb2YgZGlzYWJsZWQgZWxlbWVudHMuXG4gKiAyLiBDb3JyZWN0IGZvbnQgcHJvcGVydGllcyBub3QgYmVpbmcgaW5oZXJpdGVkLlxuICogMy4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94IDQrLCBTYWZhcmkgNSwgYW5kIENocm9tZS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDsgLyogMSAqL1xuICBmb250OiBpbmhlcml0OyAvKiAyICovXG4gIG1hcmdpbjogMDsgLyogMyAqL1xufVxuXG4vKipcbiAqIEFkZHJlc3MgYG92ZXJmbG93YCBzZXQgdG8gYGhpZGRlbmAgaW4gSUUgOC85LzEwLlxuICovXG5cbmJ1dHRvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4vKipcbiAqIEFkZHJlc3MgaW5jb25zaXN0ZW50IGB0ZXh0LXRyYW5zZm9ybWAgaW5oZXJpdGFuY2UgZm9yIGBidXR0b25gIGFuZCBgc2VsZWN0YC5cbiAqIEFsbCBvdGhlciBmb3JtIGNvbnRyb2wgZWxlbWVudHMgZG8gbm90IGluaGVyaXQgYHRleHQtdHJhbnNmb3JtYCB2YWx1ZXMuXG4gKiBDb3JyZWN0IGBidXR0b25gIHN0eWxlIGluaGVyaXRhbmNlIGluIEZpcmVmb3gsIElFIDgrLCBhbmQgT3BlcmFcbiAqIENvcnJlY3QgYHNlbGVjdGAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b24sXG5zZWxlY3Qge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiAxLiBBdm9pZCB0aGUgV2ViS2l0IGJ1ZyBpbiBBbmRyb2lkIDQuMC4qIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYFxuICogICAgYW5kIGB2aWRlb2AgY29udHJvbHMuXG4gKiAyLiBDb3JyZWN0IGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgYGlucHV0YCB0eXBlcyBpbiBpT1MuXG4gKiAzLiBJbXByb3ZlIHVzYWJpbGl0eSBhbmQgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGJldHdlZW4gaW1hZ2UtdHlwZVxuICogICAgYGlucHV0YCBhbmQgb3RoZXJzLlxuICovXG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgLyogMSAqL1xuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAyICovXG4gIGN1cnNvcjogcG9pbnRlcjsgLyogMyAqL1xufVxuXG4vKipcbiAqIFJlLXNldCBkZWZhdWx0IGN1cnNvciBmb3IgZGlzYWJsZWQgZWxlbWVudHMuXG4gKi9cblxuYnV0dG9uW2Rpc2FibGVkXSxcbmh0bWwgaW5wdXRbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKipcbiAqIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBib3JkZXIgaW4gRmlyZWZveCA0Ky5cbiAqL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBBZGRyZXNzIEZpcmVmb3ggNCsgc2V0dGluZyBgbGluZS1oZWlnaHRgIG9uIGBpbnB1dGAgdXNpbmcgYCFpbXBvcnRhbnRgIGluXG4gKiB0aGUgVUEgc3R5bGVzaGVldC5cbiAqL1xuXG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbi8qKlxuICogSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBhdHRlbXB0IHRvIHN0eWxlIHRoZXNlIGVsZW1lbnRzLlxuICogRmlyZWZveCdzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgcmVzcGVjdCBib3gtc2l6aW5nLCBwYWRkaW5nLCBvciB3aWR0aC5cbiAqXG4gKiAxLiBBZGRyZXNzIGJveCBzaXppbmcgc2V0IHRvIGBjb250ZW50LWJveGAgaW4gSUUgOC85LzEwLlxuICogMi4gUmVtb3ZlIGV4Y2VzcyBwYWRkaW5nIGluIElFIDgvOS8xMC5cbiAqL1xuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBGaXggdGhlIGN1cnNvciBzdHlsZSBmb3IgQ2hyb21lJ3MgaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zLiBGb3IgY2VydGFpblxuICogYGZvbnQtc2l6ZWAgdmFsdWVzIG9mIHRoZSBgaW5wdXRgLCBpdCBjYXVzZXMgdGhlIGN1cnNvciBzdHlsZSBvZiB0aGVcbiAqIGRlY3JlbWVudCBidXR0b24gdG8gY2hhbmdlIGZyb20gYGRlZmF1bHRgIHRvIGB0ZXh0YC5cbiAqL1xuXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBBZGRyZXNzIGBhcHBlYXJhbmNlYCBzZXQgdG8gYHNlYXJjaGZpZWxkYCBpbiBTYWZhcmkgNSBhbmQgQ2hyb21lLlxuICogMi4gQWRkcmVzcyBgYm94LXNpemluZ2Agc2V0IHRvIGBib3JkZXItYm94YCBpbiBTYWZhcmkgNSBhbmQgQ2hyb21lXG4gKiAgICAoaW5jbHVkZSBgLW1vemAgdG8gZnV0dXJlLXByb29mKS5cbiAqL1xuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogMiAqL1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbn1cblxuLyoqXG4gKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgc2VhcmNoIGNhbmNlbCBidXR0b24gaW4gU2FmYXJpIGFuZCBDaHJvbWUgb24gT1MgWC5cbiAqIFNhZmFyaSAoYnV0IG5vdCBDaHJvbWUpIGNsaXBzIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBoYXNcbiAqIHBhZGRpbmcgKGFuZCBgdGV4dGZpZWxkYCBhcHBlYXJhbmNlKS5cbiAqL1xuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgY29uc2lzdGVudCBib3JkZXIsIG1hcmdpbiwgYW5kIHBhZGRpbmcuXG4gKi9cblxuZmllbGRzZXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBtYXJnaW46IDAgMnB4O1xuICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCBgY29sb3JgIG5vdCBiZWluZyBpbmhlcml0ZWQgaW4gSUUgOC85LlxuICogMi4gUmVtb3ZlIHBhZGRpbmcgc28gcGVvcGxlIGFyZW4ndCBjYXVnaHQgb3V0IGlmIHRoZXkgemVybyBvdXQgZmllbGRzZXRzLlxuICovXG5cbmxlZ2VuZCB7XG4gIGJvcmRlcjogMDsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDgvOS5cbiAqL1xuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vKipcbiAqIERvbid0IGluaGVyaXQgdGhlIGBmb250LXdlaWdodGAgKGFwcGxpZWQgYnkgYSBydWxlIGFib3ZlKS5cbiAqIE5PVEU6IHRoZSBkZWZhdWx0IGNhbm5vdCBzYWZlbHkgYmUgY2hhbmdlZCBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYLlxuICovXG5cbm9wdGdyb3VwIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8qIFRhYmxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgbW9zdCBzcGFjaW5nIGJldHdlZW4gdGFibGUgY2VsbHMuXG4gKi9cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxudGQsXG50aCB7XG4gIHBhZGRpbmc6IDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJEJBU0VcbiAgICBBIHRoaW4gbGF5ZXIgb24gdG9wIG9mIG5vcm1hbGl6ZS5jc3MgdGhhdCBwcm92aWRlcyBhIHN0YXJ0aW5nIHBvaW50IG1vcmVcbiAgICBzdWl0YWJsZSBmb3Igd2ViIGFwcGxpY2F0aW9ucy4gUmVtb3ZlcyB0aGUgZGVmYXVsdCBzcGFjaW5nIGFuZCBib3JkZXIgZm9yXG4gICAgYXBwcm9wcmlhdGUgZWxlbWVudHMuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBUb3BsZXZlbCBIVE1MIGVsZW1lbnRcbiAqIEFzc2lnbiBvdXIgYCRiYXNlLWZvbnQtc2l6ZWAgJiBwcmVkZWZpbmUgc29tZSBkZWZhdWx0c1xuICpcbiAqIDEuIEFwcGx5IHRoZSBgJGJhc2UtZm9udC1zaXplYCwgYCRsaW5lLWhlaWdodC1yYXRpb2AgJiBgJGZhY2UtYmFzZWBcbiAqIDIuIEFsd2F5cyBhZGQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIHRvIHByZXZlbnQgbGF5b3V0IHNoaWZ0aW5nXG4gKi9cbmh0bWwge1xuICAgIGZvbnQ6ICN7KCRiYXNlLWZvbnQtc2l6ZS8xNnB4KSoxZW19LyN7JGxpbmUtaGVpZ2h0LXJhdGlvfSAkZmFjZS1iYXNlOyAvKiAxICovXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsOyAvKiAyICovXG4gICAgbWluLWhlaWdodDogMTAwJTtcblxuICAgIEBpZiAkc2hvdy1iYXNlbGluZSA9PSB0cnVlIHtcbiAgICAgICAgJGJhc2VsaW5lLXNpemU6IHN0cmlwLXVuaXRzKCRzcGFjZSk7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwOi8vYmFzZWhvbGQuaXQvaS8jeyRiYXNlbGluZS1zaXplfSk7IC8qIFszXSAqL1xuICAgIH1cbn1cblxuXG4vKipcbiAqIEJvcmRlciBib3ggQUxMIHRoZSB0aGluZ3NcbiAqIEFzIFBlcjogaHR0cDovL3d3dy5wYXVsaXJpc2guY29tLzIwMTIvYm94LXNpemluZy1ib3JkZXItYm94LWZ0dy9cbiAqL1xuKiB7XG4gICAgJixcbiAgICAmOmJlZm9yZSxcbiAgICAmOmFmdGVye1xuICAgICAgICBAaW5jbHVkZSBwcmVmaXhlcihib3gtc2l6aW5nLCBib3JkZXItYm94LCB3ZWJraXQgbW96IHNwZWMpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIFRoZSB1c3VhbCByZXNldHRpbmcgb2YgbWFyZ2lucywgcGFkZGluZ3MsIGJvcmRlcnMgZXRjLlxuICovXG5ibG9ja3F1b3RlLFxuZGwsXG5kZCxcbm9sLFxudWwsXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYsXG5wLFxucHJlLFxuZmllbGRzZXQsXG5ociB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG5maWVsZHNldCxcbm9sLFxudWwge1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbmlmcmFtZSxcbmZpZWxkc2V0IHtcbiAgICBib3JkZXI6IDA7XG59XG5cblxuLyoqXG4gKiBSZW1vdmUgZXh0cmEgdmVydGljYWwgc3BhY2luZyB3aGVuIG5lc3RpbmcgbGlzdHMuXG4gKi9cbmxpIHtcbiAgICA+IHVsLFxuICAgID4gb2wge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIDEuIEZpeCBhbiBvZGQgcXVpcmsgd2hlcmVieSwgd2l0aG91dCB0aGlzLCBjb2RlIGJsb2NrcyBhcmUgcmVuZGVyZWQgYXQgYVxuICogICAgZm9udC1zaXplIHNtYWxsZXIgdGhhbiAxZW0uXG4gKi9cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8qIDEgKi9cbn1cblxuXG5cbi8qKlxuICogU3VwcHJlc3MgdGhlIGZvY3VzIG91dGxpbmUgb24gbGlua3MgdGhhdCBjYW5ub3QgYmUgYWNjZXNzZWQgdmlhIGtleWJvYXJkLlxuICogVGhpcyBwcmV2ZW50cyBhbiB1bndhbnRlZCBmb2N1cyBvdXRsaW5lIGZyb20gYXBwZWFyaW5nIGFyb3VuZCBlbGVtZW50cyB0aGF0XG4gKiBtaWdodCBzdGlsbCByZXNwb25kIHRvIHBvaW50ZXIgZXZlbnRzLlxuICovXG5bdGFiaW5kZXg9XCItMVwiXTpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuXG4vKipcbiAqIEltYWdlXG4gKlxuICogMS4gQnkgZGVmYXVsdCBhbGwgaW1hZ2VzIGFyZSBmbHVpZFxuICogMi4gUmVuZGVyIGBhbHRgIHZpc3VhbGx5IG9mZnNldCB3aGVuIGltYWdlcyBkb24ndCBsb2FkXG4gKi9cbmltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlOyAvKiAxICovXG4gICAgZm9udC1zdHlsZTogaXRhbGljOyAvKiAyICovXG59XG5cblxuLyoqXG4gKiBOb24tZmx1aWQgaW1hZ2VzIGlmIHlvdSBzcGVjaWZ5IGB3aWR0aGAgYW5kL29yIGBoZWlnaHRgIGF0dHJpYnV0ZXMuXG4gKi9cbmltZ1t3aWR0aF0sXG5pbWdbaGVpZ2h0XSB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRTSEFSRURcbiAgICBTaGFyZWQgYmVoYXZpb3VyXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBBcHBsaWVzIHZlcnRpY2FsIHJoeXRobSB0byBkZXNpZ25hdGVkIGVsZW1lbnRzXG4gKiBBcyBwZXI6IGh0dHA6Ly9jc3N3aXphcmRyeS5jb20vMjAxMi8wNi9zaW5nbGUtZGlyZWN0aW9uLW1hcmdpbi1kZWNsYXJhdGlvbnNcbiAqL1xuaGdyb3VwLFxuLmhncm91cCxcbnVsLFxub2wsXG5kbCxcbmJsb2NrcXVvdGUsXG5wLFxuYWRkcmVzcyxcbnRhYmxlLFxuZmllbGRzZXQsXG5wcmUsXG5ociB7XG4gICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1ib3R0b20sICRzcGFjZSk7XG59XG5cblxuLyoqXG4gKiBEZWZhdWx0IGluZGVudGF0aW9uIHZhbHVlIGZvciBsaXN0c1xuICovXG51bCxcbm9sLFxuZGQge1xuICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tbGVmdCwgJGJhc2UtbGluZS1oZWlnaHQpO1xufVxuXG5cbi8qKlxuICogTWljcm8gY2xlYXJmaXhcbiAqIEFzIHBlcjogbmljb2xhc2dhbGxhZ2hlci5jb20vbWljcm8tY2xlYXJmaXgtaGFja1xuICovXG4uY2YsXG4lY2Yge1xuICAgICY6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRUWVBPR1JBUEhZXG4gICAgUHJhZ21hdGljICYgcHJhY3RpY2FsIGZvbnQgc2l6aW5nXG4gICAgQXMgcGVyOiBodHRwOi8vY3Nzd2l6YXJkcnkuY29tLzIwMTIvMDIvcHJhZ21hdGljLXByYWN0aWNhbC1mb250LXNpemluZy1pbi1jc3MvXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogIFNpemVzXG4gICAgQXBwbHkgdmFyaW91cyBmb250IHNpemVzIGJ5IGNsYXNzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmdpZ2Ege1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZ2lnYSk7XG59XG4ubWVnYSB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRtZWdhKTtcbn1cbi5raWxvIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGtpbG8pO1xufVxuLmFscGhhIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGFscGhhKTtcbn1cbi5iZXRhIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGJldGEpO1xufVxuLmdhbW1hIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGdhbW1hKTtcbn1cbi5kZWx0YSB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRkZWx0YSk7XG59XG4uZXBzaWxvbiB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRlcHNpbG9uKTtcbn1cbi56ZXRhIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJHpldGEpO1xufVxuLm5vcm1hbGlzIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGJhc2UtZm9udC1zaXplKTtcbn1cbi5taWxsaSB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRtaWxsaSk7XG59XG4ubWljcm8ge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkbWljcm8pO1xufVxuXG5cblxuLyogIEhlYWRpbmdzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuXG5oMSB7XG4gICAgQGV4dGVuZCAuYWxwaGE7XG59XG5oMiB7XG4gICAgQGV4dGVuZCAuYmV0YTtcbn1cbmgzIHtcbiAgICBAZXh0ZW5kIC5nYW1tYTtcbn1cbmg0IHtcbiAgICBAZXh0ZW5kIC5kZWx0YTtcbn1cbmg1IHtcbiAgICBAZXh0ZW5kIC5lcHNpbG9uO1xufVxuaDYge1xuICAgIEBleHRlbmQgLnpldGE7XG59XG5cblxuLyoqXG4gKiBEb3VibGUgc3RyYW5kZWQgaGVhZGluZyBoaWVyYXJjaHlcbiAqL1xuLmgxIHtcbiAgICBAZXh0ZW5kIGgxO1xufVxuLmgyIHtcbiAgICBAZXh0ZW5kIGgyO1xufVxuLmgzIHtcbiAgICBAZXh0ZW5kIGgzO1xufVxuLmg0IHtcbiAgICBAZXh0ZW5kIGg0O1xufVxuLmg1IHtcbiAgICBAZXh0ZW5kIGg1O1xufVxuLmg2IHtcbiAgICBAZXh0ZW5kIGg2O1xufVxuXG5cbi8qKlxuICogSGVhZGluZyBncm91cHMgYW5kIGdlbmVyaWMgYW55LWhlYWRpbmcgY2xhc3MuXG4gKiBUbyB0YXJnZXQgYW55IGhlYWRpbmcgb2YgYW55IGxldmVsIHNpbXBseSBhcHBseSBhIGNsYXNzIG9mIGAuaE5gXG4gKiBTYW1wbGUgbWFya3VwOlxuPGRpdiBjbGFzcz1cImhncm91cFwiPlxuICAgIDxoMSBjbGFzcz1cImhOXCI+PC9oMT5cbiAgICA8aDIgY2xhc3M9XCJoTlwiPjwvaDI+XG48L2hncm91cD5cbiAqL1xuaGdyb3VwLFxuLmhncm91cCB7XG4gICAgLmhOIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJE1PRFVMRVxuICAgIFJlbW92ZXMgdGhlIGBtYXJnaW4tYm90dG9tYCBvZiBhIG1vZHVsZXMgbGFzdC1jaGlsZHNcbiAgICBBcyBwZXI6IGh0dHA6Ly9jc3MtdHJpY2tzLmNvbS9zcGFjaW5nLXRoZS1ib3R0b20tb2YtbW9kdWxlcy9cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4ubW9kdWxlLFxuJW1vZHVsZSB7XG4gICAgPiAqOmxhc3QtY2hpbGQsXG4gICAgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQsXG4gICAgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQsXG4gICAgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQgPiAqOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG5AaWYgJGRlYnVnLW1vZGUgPT0gdHJ1ZSB7XG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkREVCVUdcbiAgICBjb3VwbGUgb2YgZGVidWcgc3R5bGVzLCBzd2l0Y2ggJGRlYnVnLW1vZGUgaW4gX3ZhcnMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qXG5SZWQgYm9yZGVyICAgICAgPT0gIHNvbWV0aGluZyBpcyB3cm9uZ1xuWWVsbG93IGJvcmRlciAgID09ICBzb21ldGhpbmcgbWF5IGJlIHdyb25nLCB5b3Ugc2hvdWxkIGRvdWJsZSBjaGVjay5cbkdyZWVuIGJvcmRlciAgICA9PSAgcGVyZmVjdCwgbmljZSBvbmUhXG4qL1xuXG4vKiBBcmUgdGhlcmUgYW55IGVtcHR5IGVsZW1lbnRzIGluIHlvdXIgcGFnZT8gKi9cbjplbXB0eSB7XG4gICAgb3V0bGluZTogNXB4IHNvbGlkIHllbGxvdztcbn1cblxuXG4vKipcbiAqIEltYWdlcyByZXF1aXJlIGBhbHRgIGF0dHJpYnV0ZXMsIGVtcHR5IGBhbHRgcyBhcmUgZmluZSBidXQgc2hvdWxkIGJlXG4gKiBkb3VibGUtY2hlY2tlZCwgbm8gYGFsdGAgaXMgYmFkIGFuZCBpcyBmbGFnZ2VkIHJlZC5cbiAqL1xuaW1nIHtcbiAgICBvdXRsaW5lOiA1cHggc29saWQgcmVkO1xufVxuaW1nW2FsdF0ge1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG5pbWdbYWx0PVwiXCJdIHtcbiAgICBvdXRsaW5lOiA1cHggc29saWQgeWVsbG93O1xufVxuXG5cbi8qKlxuICogTGlua3Mgc29tZXRpbWVzLCB0aG91Z2ggbm90IGFsd2F5cywgYmVuZWZpdCBmcm9tIGB0aXRsZWAgYXR0cmlidXRlcy4gTGlua3NcbiAqIHdpdGhvdXQgYXJlIG5ldmVyIGludmFsaWQgYnV0IGl04oCZcyBhIGdvb2QgaWRlYSB0byBjaGVjay5cbiAqL1xuYSB7XG4gICAgb3V0bGluZTogNXB4IHNvbGlkIHllbGxvdztcbn1cbmFbdGl0bGVdIHtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG5cbi8qIERvdWJsZS1jaGVjayBhbnkgbGlua3Mgd2hvc2UgYGhyZWZgIGlzIHNvbWV0aGluZyBxdWVzdGlvbmFibGUuICovXG5hW2hyZWY9XCIjXCJdLFxuYVtocmVmKj1cImphdmFzY3JpcHRcIl0ge1xuICAgIG91dGxpbmU6IDVweCBzb2xpZCB5ZWxsb3c7XG59XG5cblxuLyogVGhlIGB0YXJnZXRgIGF0dHJpYnV0ZSBhaW7igJl0IHRvbyBuaWNlLi4uICovXG5hW3RhcmdldF0ge1xuICAgIG91dGxpbmU6IDVweCBzb2xpZCB5ZWxsb3c7XG59XG5cblxuLyogRW5zdXJlIGFueSBsaXN0cyBvbmx5IGNvbnRhaW4gYGxpYHMgYXMgY2hpbGRyZW4uICovXG51bCxcbm9sIHtcbiAgICA+ICo6bm90KGxpKSB7XG4gICAgICAgIG91dGxpbmU6IDVweCBzb2xpZCByZWQ7XG4gICAgfVxufVxuXG5cbi8qIEl04oCZcyBhbHdheXMgbmljZSB0byBnaXZlIGB0aGBzIGBzY29wZWAgYXR0cmlidXRlcy4gKi9cbnRoIHtcbiAgICBvdXRsaW5lOiA1cHggc29saWQgeWVsbG93O1xufVxudGhbc2NvcGVdIHtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG5cbi8qIGB0cmBzIGFzIGNoaWxkcmVuIG9mIGB0YWJsZWBzIGFpbuKAmXQgZ3JlYXQsIGRpZCB5b3UgbmVlZCBhIGB0aGVhZGAvYHRib2R5YD8gKi9cbnRhYmxlID4gdHIge1xuICAgIG91dGxpbmU6IDVweCBzb2xpZCB5ZWxsb3c7XG59XG5cblxuLyogYHRmb290YCBuZWVkcyB0byBjb21lICpiZWZvcmUqIGB0Ym9keWAuICovXG50Ym9keSArIHRmb290IHtcbiAgICBvdXRsaW5lOiA1cHggc29saWQgeWVsbG93O1xufVxuXG5cbi8qIEZvcm1zIHJlcXVpcmUgYGFjdGlvbmAgYXR0cmlidXRlcyAqL1xuZm9ybSB7XG4gICAgb3V0bGluZTogNXB4IHNvbGlkIHJlZDtcbn1cbmZvcm1bYWN0aW9uXSB7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuXG4vKipcbiAqIFZhcmlvdXMgZm9ybS1maWVsZCB0eXBlcyBoYXZlIHJlcXVpcmVkIGF0dHJpYnV0ZXMuIGBpbnB1dGBzIG5lZWQgYHR5cGVgXG4gKiBhdHRyaWJ1dGVzLCBgdGV4dGFyZWFgcyBuZWVkIGByb3dzYCBhbmQgYGNvbHNgIGF0dHJpYnV0ZXMgYW5kIHN1Ym1pdCBidXR0b25zXG4gKiBuZWVkIGEgYHZhbHVlYCBhdHRyaWJ1dGUuXG4gKi9cbnRleHRhcmVhLFxuaW5wdXQge1xuICAgIG91dGxpbmU6IDVweCBzb2xpZCByZWQ7XG59XG5pbnB1dFt0eXBlXSB7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cbnRleHRhcmVhW3Jvd3NdW2NvbHNdIHtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuaW5wdXRbdHlwZT1zdWJtaXRdIHtcbiAgICBvdXRsaW5lOiA1cHggc29saWQgcmVkO1xufVxuaW5wdXRbdHlwZT1zdWJtaXRdW3ZhbHVlXSB7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuXG4vKiBBdm9pZCBpbmxpbmUgc3R5bGVzIHdoZXJlIHBvc3NpYmxlLiAqL1xuW3N0eWxlXSB7XG4gICAgb3V0bGluZTogNXB4IHNvbGlkIHllbGxvdztcbn1cblxuXG4vKiBZb3Ugc2hvdWxkIGF2b2lkIHVzaW5nIElEcyBmb3IgQ1NTLCBpcyB0aGlzIGRvaW5nIGFueSBzdHlsaW5nPyAqL1xuW2lkXSB7XG4gICAgb3V0bGluZTogNXB4IHNvbGlkIHllbGxvdztcbn1cblxuXG4vKiBBcmUgeW91IHVzaW5nIHRoZSBncmlkIHN5c3RlbSBjb3JyZWN0bHk/ICovXG4uZ3cgPiA6bm90KC5jb2wpLFxuLmdyaWQtd3JhcHBlciA+IDpub3QoLmNvbCkge1xuICAgIG91dGxpbmU6IDVweCBzb2xpZCByZWQ7XG59XG5cblxufSAvLyBkZWJ1Zy1tb2RlXG5cblxuXG5AaWYgJGRlYnVnLW1vZGUgPT0gdHJ1ZSBvciAkc2hvdy1tcSA9PSB0cnVlIHtcbi8qICBNZWRpYSBxdWVyeSBoZWxwZXJcbiAgICBEaXNwbGF5cyB0aGUgY3VycmVudCBhY3RpdmUgbWVkaWEgcXVlcnkgaW4gdGhlIGJvdHRvbSByaWdodCBjb3JuZXJcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQXBwZW5kIG1lZGlhIHF1ZXJ5IGxhYmVsIG9uIGJvZHk6YWZ0ZXJcbiAqL1xuYm9keTphZnRlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICB6LWluZGV4OiA5OTk5O1xuICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkc3BhY2UtaGFsZiAkc3BhY2UpO1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKCRiYXNlLWZvbnQtc2l6ZSoxLjEyNSwgZmFsc2UpO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjgpO1xuICAgIGNvbnRlbnQ6IFwib3JpZ2luOiAobWluLXdpZHRoOiAwKVwiO1xufVxuXG5cbi8qKlxuICogRGlzcGxheXMgY3VycmVudCBtZWRpYSBxdWVyeSBwZXIgYnJlYWtwb2ludFxuICovXG5AZWFjaCAkYnJlYWtwb2ludCBpbiAkYnJlYWtwb2ludHMge1xuICAgICRuYW1lOiBudGgoJGJyZWFrcG9pbnQsIDEpO1xuICAgICRkZWNsYXJhdGlvbjogbnRoKCRicmVha3BvaW50LCAyKTtcbiAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kICN7JGRlY2xhcmF0aW9ufSB7XG4gICAgICAgIGJvZHk6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogXCIjeyRuYW1lfTogI3skZGVjbGFyYXRpb259XCI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbn0gLy8gZGVidWctbW9kZSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qISBibG9jc3MtYXJyYW5nZSB2MS4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vQmxvY3NzICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgIEFSUkFOR0VcbiAgICBUaGlzIGNvbXBvbmVudCBsZXRzIHlvdSBsYXkgb3V0IGEgcm93IG9mIGNlbGxzIGluIHZhcmlvdXMgd2F5cy4gWW91IGNhblxuICAgIHNwZWNpZnkgd2hldGhlciBhIGNlbGwgc2hvdWxkIGJlIHdpZGUgZW5vdWdoIHRvIGZpdCBpdHMgY29udGVudCwgb3IgdGFrZSB1cFxuICAgIHRoZSByZW1haW5pbmcgc3BhY2UgaW4gdGhlIHJvdy4gSXQncyBhbHNvIHBvc3NpYmxlIHRvIGdpdmUgYWxsIGNlbGxzIGFuXG4gICAgZXF1YWwgd2lkdGgsIGFuZCB0byBjb250cm9sIHRoZWlyIHZlcnRpY2FsIGFsaWdubWVudC5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKlxuPGRpdiBjbGFzcz1cImFycmFuZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXJyYW5nZV9fc2l6ZS1maXRcIj5cbiAgICAgICAgPGltZyBzcmM9XCJpbWcucG5nXCIgYWx0PVwiXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFycmFuZ2VfX3NpemUtZmlsbFwiPlxuICAgICAgICBCcmFtIFNtdWxkZXJzIEBicmFtc211bGRlcnNcbiAgICA8L2Rpdj5cbjwvZGl2PlxuICovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vLyBNb2R1bGUgY2FuIGJlIGRpc2FibGVkIGJ5IHN3aXRjaGluZyBgJHVzZS1hcnJhbmdlYCB0byBgZmFsc2VgXG4kdXNlLWFycmFuZ2U6ICAgICAgICAgICAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuLyoqXG4gKiBEZWZpbmUgd2hpY2ggbmFtZXNwYWNlZCBicmVha3BvaW50cyB5b3Ugd291bGQgbGlrZSB0byBjb2xsYXBzZSB0aGUgYXJyYW5nZVxuICpcbiAqICRicmVha3BvaW50LWhhcy14OiAgICAgICAoJ3BhbG0nLCAnZGVzaycpO1xuICpcbiAqIE5vdGU6IHRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IG11c3QgZXhpc3QgaW4gdGhlIGxpc3Qgb2YgYCRicmVha3BvaW50c2BcbiAqICAgICAgIGluIHRoZSBCbG9jc3MgYmFzZSByZXBvc2l0b3J5XG4gKi9cbiRicmVha3BvaW50LWhhcy1jb2xsYXBzZWQtYXJyYW5nZTogICgpICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cblxuLyogIE1peGluc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogTWl4aW46IFJlc2V0IGFycmFuZ2VkIG1vZHVsZXNcbiAqXG4gKiAxLiBSZXNldCBkaXNwbGF5IHByb3BlcnR5XG4gKiAyLiAxMDAlIHdpZHRoXG4gKiAzLiBSZXNldCBwYWRkaW5nIGluIGNhc2Ugb2YgYC5hcnJhbmdlLS1ndXR0ZXJgXG4gKiA0LiBSZS1pbml0aWF0ZSBmbHVpZCBpbWFnZXNcbiAqL1xuQG1peGluIGFycmFuZ2UtY29sbGFwc2UgKCkge1xuICAgIGRpc3BsYXk6IGJsb2NrOyAvKiAxICovXG5cbiAgICA+IC5hcnJhbmdlX19zaXplLWZpbGwsXG4gICAgPiAuYXJyYW5nZV9fc2l6ZS1maXQge1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgLyogMSAqL1xuICAgICAgICB3aWR0aDogMTAwJTsgLyogMiAqL1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7IC8qIDMgKi9cblxuICAgICAgICBpbWcge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlOyAvKiA0ICovXG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87IC8qIDQgKi9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4vKiAgQ29yZSBhcnJhbmdlIGNvbXBvbmV0XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGlmICR1c2UtYXJyYW5nZSA9PSB0cnVle1xuXG4vKipcbiAqIGBhcnJhbmdlYCBtdXN0IG9ubHkgY29udGFpbiAnYXJyYW5nZV9fc2l6ZS1maXQnIGFuZCAnYXJyYW5nZV9fc2l6ZS1maWxsJyBjaGlsZFxuICogbm9kZXMuXG4gKlxuICogSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBvbmx5IHVzZSBvbmUgJ2FycmFuZ2VfX3NpemUtZmlsbCcgcGVyIGNvbXBvbmVudFxuICogaW5zdGFuY2UgKHVubGVzcyB1c2luZyB0aGUgYGFycmFuZ2UtLWVxdWFsbHlgIG1vZGlmaWVyOyBzZWUgYmVsb3cpLiBUaGVcbiAqIGZpcnN0ICdhcnJhbmdlX19zaXplLWZpbGwnIGluIHRoZSBjb21wb25lbnQncyBzb3VyY2Ugb3JkZXIgd2lsbCBub3Qgc2hhcmUgdGhlXG4gKiBleHRyYSBzcGFjZSB3aXRoIGFueSBzdWJzZXF1ZW50IG5vZGVzIG9mIHRoYXQgY2xhc3MuXG4gKi9cblxuLyoqXG4gKiAxLiBSZWx5IG9uIHRhYmxlIGxheW91dC5cbiAqIDIuIFplcm8gb3V0IHRoZSBkZWZhdWx0IHNwYWNpbmcgdGhhdCBtaWdodCBiZSBvbiBhbiBlbGVtZW50IChlLmcuLCBgdWxgKS5cbiAqIDMuIFJlc2V0IHRoZSB0YWJsZS1sYXlvdXQgYWxnb3JpdGhtIGluIGNhc2UgYSBjb21wb25lbnQgaXMgbmVzdGVkLlxuICogNC4gTWFrZSBzdXJlIHRoZSBjb21wb25lbnQgZmlsbHMgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIHBhcmVudC5cbiAqL1xuLmFycmFuZ2Uge1xuICAgIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gICAgbWFyZ2luOiAwOyAvKiAyICovXG4gICAgcGFkZGluZzogMDsgLyogMiAqL1xuICAgIHRhYmxlLWxheW91dDogYXV0bzsgLyogMyAqL1xuICAgIHdpZHRoOiAxMDAlOyAvKiA0ICovXG59XG5cblxuICAgIC8qKlxuICAgICAqIFRoZXJlIGFyZSB0d28gcG9zc2libGUgdHlwZXMgb2YgY2hpbGQuXG4gICAgICogYHNpemUtZmlsbGAgd2lsbCBleHBhbmQgdG8gZmlsbCBhbGwgb2YgdGhlIHJlbWFpbmluZyBzcGFjZSBub3QgZmlsbGVkIGJ5XG4gICAgICogYHNpemUtZml0YCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIDEuIFplcm8gb3V0IGFueSBkZWZhdWx0IHNwYWNpbmcgdGhhdCBtaWdodCBiZSBvbiBhbiBlbGVtZW50IChlLmcuLCBgbGlgKTtcbiAgICAgKiAgICBNYXJnaW4gaGFzIG5vIGVmZmVjdCB3aGVuIGNvdXBsZWQgd2l0aCBgZGlzcGxheTogdGFibGUtY2VsbGAuXG4gICAgICogMi4gQWxsIGNlbGxzIGFyZSB0b3AtYWxpZ25lZCBieSBkZWZhdWx0XG4gICAgICovXG4gICAgLmFycmFuZ2VfX3NpemUtZmlsbCxcbiAgICAuYXJyYW5nZV9fc2l6ZS1maXQge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICBwYWRkaW5nOiAwOyAvKiAxICovXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IC8qIDIgKi9cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIE1ha2Ugc3VyZSB0aGUgbWFpbiBjb250ZW50IGJsb2NrIGV4cGFuZHMgdG8gZmlsbCB0aGUgcmVtYWluaW5nIHNwYWNlLlxuICAgICAqL1xuICAgIC5hcnJhbmdlX19zaXplLWZpbGwge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogRGVmZW5kIGFnYWluc3QgYSBzaWRlLWVmZmVjdCBvZiB0aGlzIGxheW91dCBwYXR0ZXJuOiBpbWFnZXMgaW5cbiAgICAgICAgICogJ2FycmFuZ2VfX3NpemUtZml0JyBjYW5ub3QgYmUgZmx1aWQsIG90aGVyd2lzZSB0aGV5IGxvc2UgdGhlaXIgYWJpbGl0eSB0b1xuICAgICAgICAgKiBwcm92aWRlIHNpemUgdG8gYSBjZWxsLlxuICAgICAgICAgKi9cbiAgICAgICAgLmFycmFuZ2VfX3NpemUtZml0IGltZyB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgfVxuXG5cblxuLyogVmVydGljYWwgYWxpZ25tZW50IG1vZGlmaWVyc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5hcnJhbmdlLS10b3Age1xuXG4gICAgPiAuYXJyYW5nZV9fc2l6ZS1maWxsLFxuICAgID4gLmFycmFuZ2VfX3NpemUtZml0IHtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB9XG59XG5cbi5hcnJhbmdlLS1taWRkbGUge1xuXG4gICAgPiAuYXJyYW5nZV9fc2l6ZS1maWxsLFxuICAgID4gLmFycmFuZ2VfX3NpemUtZml0IHtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG59XG5cbi5hcnJhbmdlLS1ib3R0b20ge1xuXG4gICAgPiAuYXJyYW5nZV9fc2l6ZS1maWxsLFxuICAgID4gLmFycmFuZ2VfX3NpemUtZml0IHtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICB9XG59XG5cblxuXG4vKiBFcXVhbC13aWR0aCBtb2RpZmllclxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGhpcyBsYXlvdXQgYWxnb3JpdGhtIHdpbGwgY3JlYXRlIGVxdWFsLXdpZHRoIHRhYmxlIGNlbGxzLCBpcnJlc3BlY3RpdmUgb2ZcbiAqIHRoZSB3aWR0aCBvZiB0aGVpciBjb250ZW50LlxuICovXG4uYXJyYW5nZS0tZXF1YWwge1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG5cbiAgICAvKipcbiAgICAgKiBHaXZlIHRoZSBjZWxscyBhbiBlcXVhbCB3aWR0aC5cbiAgICAgKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgb25seSAnQXJyYW5nZS1zaXplRmlsbCcgYmUgdXNlZCBmb3IgZXF1YWwgd2lkdGggY2VsbHMuXG4gICAgICogVGhlaXIgaW5uZXIgaW1hZ2VzIHdpbGwgYXV0b21hdGljYWxseSBiZSByZXNwb25zaXZlLlxuICAgICAqL1xuICAgID4gLmFycmFuZ2VfX3NpemUtZmlsbCxcbiAgICA+IC5hcnJhbmdlX19zaXplLWZpdCB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbn1cblxuXG5cbi8qIEd1dHRlci1zZXBhcmF0aW5nIG1vZGlmaWVyXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmFycmFuZ2UtLWd1dHRlciB7XG5cbiAgICA+IC5hcnJhbmdlX19zaXplLWZpbGwsXG4gICAgPiAuYXJyYW5nZV9fc2l6ZS1maXQge1xuICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZy1sZWZ0LCAkc3BhY2UpO1xuXG4gICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cblxuLyogQXJyYW5nZSBjb2xsYXBzZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5hcnJhbmdlLS1jb2xsYXBzZSB7XG4gICAgQGluY2x1ZGUgYXJyYW5nZS1jb2xsYXBzZTtcbn1cblxuXG5cbi8qICBSZXNwb25zaXZlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogQ29sbGFwc2VkIGFycmFuZ2UgYmFzZWQgb24gYnJlYWtwb2ludCAqL1xuQGVhY2ggJHN0YXRlIGluICRicmVha3BvaW50LWhhcy1jb2xsYXBzZWQtYXJyYW5nZSB7XG4gICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoI3skc3RhdGV9KSB7XG4gICAgICAgIC5hcnJhbmdlLS1jb2xsYXBzZS0tI3skc3RhdGV9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFycmFuZ2UtY29sbGFwc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG59IiwiLyohIGJsb2Nzcy1idXR0b25zIHYxLjAuMCB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJEJVVFRPTlNcbiAgICBCYXNpYyBidXR0b24gc3RydWN0dXJhbCBzdHlsaW5nLiBFeHRlbmQgaW4geW91ciB0aGVtZSBzdHlsZXNoZWV0LlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vLyBNb2R1bGUgY2FuIGJlIGRpc2FibGVkIGJ5IHN3aXRjaGluZyBgJHVzZS1idXR0b25zYCB0byBgZmFsc2VgXG4kdXNlLWJ1dHRvbnM6ICAgICAgICAgICAgICAgICAgICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cblxuLyogIENvcmUgbmF2aWdhdGlvbiBjb21wb25lbnRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AaWYgJHVzZS1idXR0b25zID09IHRydWUge1xuXG4vKipcbiAqIFRoZSBidXR0b24gY2xhc3NlcyBhcmUgYmVzdCBhcHBsaWVkIHRvIGxpbmtzLCBidXR0b25zLCBhbmQgc3VibWl0IGlucHV0cy5cbiAqIFRoZXNlIGNvbXBvbmVudHMgY2FuIGJlIHVzZWQgaW4gZm9ybXMsIGFzIGNhbGxzIHRvIGFjdGlvbiwgb3IgYXMgcGFydCBvZlxuICogdGhlIGdlbmVyYWwgVUkgb2YgdGhlIHNpdGUvYXBwLlxuICpcbiAqIFJlY29tbWVuZGVkIHVzZTpcbiAqXG48YSBjbGFzcz1cImJ1dHRvbiAgW2J1dHRvbi0tbW9kaWZpZXJdXCIgcm9sZT1cImJ1dHRvblwiIGhyZWY9XCJbdXJsXVwiPmJ1dHRvbiB0ZXh0PC9hPlxuPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiAgW2J1dHRvbi0tbW9kaWZpZXJdXCIgdHlwZT1cInN1Ym1pdFwiPmJ1dHRvbiB0ZXh0PC9idXR0b24+XG48aW5wdXQgY2xhc3M9XCJidXR0b24gIFtidXR0b24tLW1vZGlmaWVyXVwiIHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cImJ1dHRvbiB0ZXh0XCI+XG4gKi9cblxuLyoqXG4gKiBCdXR0b24gdGVtcGxhdGVcbiAqXG4gKiBCdWlsZCBvbiB0aGlzIGNvbXBvbmVudCB1c2luZyBydWxlc2V0cyBpbiB5b3VyIGFwcGxpY2F0aW9uLWxldmVsIENTUy5cbiAqXG4gKiAxLiBJbmhlcml0IHRleHQgY29sb3IgZnJvbSBhbmNlc3Rvci5cbiAqIDIuIEluaGVyaXQgZm9udCBzdHlsZXMgZnJvbSBhbmNlc3Rvci5cbiAqIDMuIElmIHRoZSBidXR0b27igJlzIHRleHQgaXMgMWVtLCBhbmQgdGhlIGJ1dHRvbiBpcyAoMiAqIGZvbnQtc2l6ZSkgdGFsbCxcbiAqICAgIHRoZW4gdGhlcmUgaXMgLjVlbSBvZiBzcGFjZSBhYm92ZSBhbmQgYmVsb3cgdGhhdCB0ZXh0LiBXZSB0aGVyZWZvcmVcbiAqICAgIGFwcGx5IDFlbSBvZiBzcGFjZSB0byB0aGUgbGVmdCBhbmQgcmlnaHQsIGFzIHBhZGRpbmcsIHRvIGtlZXBcbiAqICAgIGNvbnNpc3RlbnQgc3BhY2luZy5cbiAqIDQuIFByZXZlbnQgd3JhcHBpbmcgYWNyb3NzIG11bHRpcGxlIGxpbmVzLlxuICogNS4gQ29ycmVjdHMgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSBgaW5wdXRgIHR5cGVzIGluIGlPU1xuICovXG4uYnV0dG9uIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkO1xuICAgIG1hcmdpbjogMDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogaW5oZXJpdDsgLyogMSAqL1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250OiBpbmhlcml0OyAvKiAyICovXG4gICAgbGluZS1oZWlnaHQ6IDI7IC8qIDMgKi9cbiAgICBwYWRkaW5nLWxlZnQ6IDFlbTsgLyogMyAqL1xuICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsgLyogMyAqL1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvKiA0ICovXG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOyAvKiA1ICovXG5cbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJjphY3RpdmUge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgZXhjZXNzIHBhZGRpbmcgYW5kIGJvcmRlciBpbiBGaXJlZm94IDQrXG4gICAgICovXG4gICAgJjo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICB9XG59XG5cblxuXG4vKiAgU2l6ZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEJ1dHRvbiBzaXplIG1vZGlmaWVyc1xuICovXG4uYnV0dG9uLS1zbWFsbCB7XG4gICAgcGFkZGluZy1yaWdodDogMC41ZW07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xufVxuLmJ1dHRvbi0tbGFyZ2Uge1xuICAgIHBhZGRpbmctcmlnaHQ6IDEuNWVtO1xuICAgIHBhZGRpbmctbGVmdDogMS41ZW07XG4gICAgbGluZS1oZWlnaHQ6IDM7XG59XG4uYnV0dG9uLS1odWdlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAyZW07XG4gICAgbGluZS1oZWlnaHQ6IDQ7XG59XG5cblxuLyoqXG4gKiBmdWxsLXdpZHRoIG1vZGlmaWVyXG4gKi9cbi5idXR0b24tLWZ1bGwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG5cblxuLyogRm9udCBzaXplc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogQnV0dG9uIGZvbnQtc2l6ZSBtb2RpZmllcnNcbiAqL1xuLmJ1dHRvbi0tYWxwaGEge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYWxwaGEsIGZhbHNlKTtcbn1cbi5idXR0b24tLWJldGEge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkYmV0YSwgZmFsc2UpO1xufVxuLmJ1dHRvbi0tZ2FtbWEge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZ2FtbWEsIGZhbHNlKTtcbn1cbi5idXR0b24tLWRlbHRhIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGRlbHRhLCBmYWxzZSk7XG59XG4uYnV0dG9uLS1lcHNpbG9uIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGVwc2lsb24sIGZhbHNlKTtcbn1cbi5idXR0b24tLXpldGEge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkemV0YSwgZmFsc2UpO1xufVxuLmJ1dHRvbi0tbWlsbGkge1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkbWlsbGksIGZhbHNlKTtcbn1cbi5idXR0b24tLW1pY3JvIHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJG1pY3JvLCBmYWxzZSk7XG59XG5cblxuLyoqXG4gKiBNYWtlIHRoZSBidXR0b24gaW5oZXJpdCBzaXppbmcgZnJvbSBpdHMgcGFyZW50LlxuICovXG4uYnV0dG9uLS1ub3JtYWxpcyB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNWVtO1xufVxuXG5cblxuLyogRGlydHkgZmlyZWZveC9JRSBoYWNrLCB0byBjaXJjdW12ZW50IGxpbmUtaGVpZ2h0IGJ1Z1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0ge1xuICAgICYuYnV0dG9uIHtcbiAgICAgICAgaGVpZ2h0OiAyZW07XG4gICAgfVxuICAgICYuYnV0dG9uLS1zbWFsbCB7XG4gICAgICAgIGhlaWdodDogMS41ZW07XG4gICAgfVxuICAgICYuYnV0dG9uLS1sYXJnZSB7XG4gICAgICAgIGhlaWdodDogM2VtO1xuICAgIH1cbiAgICAmLmJ1dHRvbi0taHVnZSB7XG4gICAgICAgIGhlaWdodDogNGVtO1xuICAgIH1cbn1cblxufSIsIi8qISBibG9jc3MtZmxleGVtYmVkIHYxLjAuMCB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJEZMRVhFTUJFRFxuICAgIEZvciB1c2Ugd2l0aCBtdWx0aS1tZWRpYSBlbWJlZHMsIHN1Y2ggYXMgdmlkZW9zIG9yIHNsaWRlc2hvd3MsIHRoYXQgbmVlZCB0b1xuICAgIHJldGFpbiBhIHNwZWNpZmljIGFzcGVjdCByYXRpbyBidXQgYWRhcHQgdG8gZWxlbWVudHMgb2YgdmFyaWFibGUgd2lkdGhzLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vLyBNb2R1bGUgY2FuIGJlIGRpc2FibGVkIGJ5IHN3aXRjaGluZyBgJHVzZS1mbGV4ZW1iZWRgIHRvIGBmYWxzZWBcbiR1c2UtZmxleGVtYmVkOiAgICAgICAgICAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuXG4vKiAgQ29yZSBmbGV4ZW1iZWQgY29tcG9uZW50XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGlmICR1c2UtZmxleGVtYmVkID09IHRydWUge1xuXG4vKipcbiAqIEV4YW1wbGUgSFRNTDpcbiAqXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhlbWJlZCAgZmxleGVtYmVkLS0xNmJ5OVwiPlxuICAgICAgICBbaWZyYW1lfG9iamVjdHxlbWJlZF1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleGVtYmVkICBmbGV4ZW1iZWQtLTE2Ynk5XCI+XG4gICAgICAgIDxpbWcgc3JjPVwiXCIgY2xhc3M9XCJmbGV4ZW1iZWRfX2l0ZW1cIiAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4gKlxuICovXG4uZmxleGVtYmVkIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDA7XG4gICAgcGFkZGluZzogMDtcbn1cbiAgICAuZmxleGVtYmVkX19pdGVtLFxuICAgIC5mbGV4ZW1iZWQgaWZyYW1lLFxuICAgIC5mbGV4ZW1iZWQgZW1iZWQsXG4gICAgLmZsZXhlbWJlZCBvYmplY3Qge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG5cblxuLyoqXG4gKiBNb2RpZmllcjogMTY6OSBhc3BlY3QgcmF0aW9cbiAqL1xuLmZsZXhlbWJlZC0tMTZieTkge1xuICAgIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7XG59XG5cblxuLyoqXG4gKiBNb2RpZmllcjogNDozIGFzcGVjdCByYXRpb1xuICovXG4uZmxleGVtYmVkLS00YnkzIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuXG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyohIGJsb2Nzcy1ncmlkIHYxLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJEdSSURcbiAgICBGbHVpZCBhbmQgbmVzdGFibGUgZ3JpZCBzeXN0ZW1cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKlxuPGRpdiBjbGFzcz1cImdyaWQgIFtncmlkLS1jZW50ZXJ8Z3JpZC0tcmlnaHR8Z3JpZC0tcmV2fGdyaWQtLW1pZGRsZXxncmlkLS1ib3R0b218Z3JpZC0tbmFycm93fGdyaWQtLXdpZGV8Z3JpZC0tZmx1c2hdXCI+XG4gICAgPGRpdiBjbGFzcz1cImdyaWRfX2NlbGwgIHUtMy0xMiAgdS0xLTEtLXBhbG1cIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZF9fY2VsbCAgdS0zLTEyICB1LTEtMS0tcGFsbVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJncmlkX19jZWxsICB1LTMtMTIgIHUtMS0xLS1wYWxtXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdyaWRfX2NlbGwgIGdyaWRfX2NlbGwtLWNlbnRlciAgdS0zLTEyICB1LTEtMS0tcGFsbVwiPjwvZGl2PlxuPC9kaXY+XG4gKi9cblxuLy8gTW9kdWxlIGNhbiBiZSBkaXNhYmxlZCBieSBzd2l0Y2hpbmcgYCR1c2UtZ3JpZGAgdG8gYGZhbHNlYFxuJHVzZS1ncmlkOiAgICAgICAgICAgICAgICAgICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuLy8gRGVmaW5lcyB0aGUgZ3V0dGVyIGJldHdlZW4gZ3JpZCBpdGVtcywgbXVsdGlwbGllcyBieSBgJHNwYWNlYCBmb3VuZCBpbiBCbG9jc3NcbiRncmlkLWd1dHRlci1tdWx0aXBsaWVyOiAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cbi8qKlxuICogRG9udCd0IG1vZGlmeSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlc1xuICovXG4kZ3V0dGVyOiAgICAgICAgICAgICAgICAgICAgICAgICgkc3BhY2UqJGdyaWQtZ3V0dGVyLW11bHRpcGxpZXIpO1xuXG5cbi8qKlxuICogRW5hYmxlL2Rpc2FibGUgbW9kaWZpZXJzXG4gKi9cbiRlbmFibGUtZ3JpZC1yZXY6ICAgICAgICAgICAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4kZW5hYmxlLWdyaWQtcmlnaHQ6ICAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJGVuYWJsZS1ncmlkLWNlbnRlcjogICAgICAgICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRlbmFibGUtZ3JpZC1taWRkbGU6ICAgICAgICAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4kZW5hYmxlLWdyaWQtbmFycm93OiAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJGVuYWJsZS1ncmlkLXdpZGU6ICAgICAgICAgICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRlbmFibGUtZ3JpZC1mbHVzaDogICAgICAgICAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuXG4vKiAgR3JpZCBDb3JlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGlmICR1c2UtZ3JpZCA9PSB0cnVlIHtcbi8qKlxuICogR3JpZCBjb250YWluZXJcbiAqIE11c3Qgb25seSBjb250YWluIGAuZ3JpZGAgb3IgYC5ncmlkX19jZWxsYCBjb21wb25lbnRzIGFzIGNoaWxkcmVuLlxuICpcbiAqIDEuIFJlbW92ZSBpbnRlci11bml0IHdoaXRlc3BhY2UgdGhhdCBhcHBlYXJzIGJldHdlZW4gYGlubGluZS1ibG9ja2AgY2hpbGRcbiAqICAgIGVsZW1lbnRzLlxuICogMi4gQWRqdXN0bWVudCBmb3IgY2hpbGQgZWxlbWVudCBtYXJnaW5zLlxuICogMy4gVXNlIGxpc3RzIGFzIGdyaWRcbiAqIDQuIEVuc3VyZSBjb25zaXN0ZW50IGRlZmF1bHQgYWxpZ25tZW50XG4gKi9cbi5ncmlkIHtcbiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVzcGVlZDsgLyogMSAqL1xuICAgIGZvbnQtc2l6ZTogMDsgLyogMSAqL1xuICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tbGVmdCwgLSgkZ3V0dGVyKSk7IC8qIDIgKi9cbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7IC8qIDMgKi9cbiAgICB0ZXh0LWFsaWduOiBsZWZ0OyAvKiA0ICovXG59XG5cblxuLyoqXG4gKiBDaGlsZCBgZ3JpZGAgb2JqZWN0IGFkanVzdG1lbnRzXG4gKiBVc2VkIGZvciBtb3JlIGNvbXBsZXggZml4ZWQtZmx1aWQgaHlicmlkIGdyaWRzLlxuICovXG4uZ3JpZCA+IC5ncmlkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbn1cblxuXG4gICAgLyoqXG4gICAgICogR3JpZCBjZWxsc1xuICAgICAqIE5vIGV4cGxpY2l0IHdpZHRoIGJ5IGRlZmF1bHQuIEFwcGx5IGAudW5pdC14LXlgIGNsYXNzZXMuXG4gICAgICpcbiAgICAgKiAxLiBGdW5kYW1lbnRhbHMgb2YgdGhlIG5vbi1mbG9hdCBncmlkIGxheW91dCBtZWNoYW5pc20uXG4gICAgICogMi4gQXBwbHkgZ3JpZCBndXR0ZXIuXG4gICAgICogMy4gQ29udHJvbHMgdmVydGljYWwgcG9zaXRpb25pbmcgb2YgdW5pdHMuXG4gICAgICogNC4gS2VlcHMgY29udGVudCBjb3JyZWN0bHkgYWxpZ25lZCB3aXRoIHRoZSBncmlkIGRpcmVjdGlvbi5cbiAgICAgKiA1LiBSZXNldCB0ZXh0IGRlZmF1bHRzLlxuICAgICAqL1xuICAgIC5ncmlkX19jZWxsIHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgJGd1dHRlcik7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogMSAqL1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyAvKiAzICovXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7IC8qIDQgKi9cbiAgICAgICAgQGluY2x1ZGUgZm9udC1zaXplKCRiYXNlLWZvbnQtc2l6ZSk7IC8qIDUgKi9cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyOiBob3Jpem9udGFsbHkgY2VudGVyIG9uZSB1bml0XG4gICAgICogU2V0IGEgc3BlY2lmaWMgdW5pdCB0byBiZSBob3Jpem9udGFsbHkgY2VudGVyZWQuIERvZXNuJ3QgYWZmZWN0XG4gICAgICogYW55IG90aGVyIHVuaXRzLiBDYW4gc3RpbGwgY29udGFpbiBhIGNoaWxkIGBncmlkYCBvYmplY3QuXG4gICAgICovXG4gICAgLmdyaWRfX2NlbGwtLWNlbnRlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG5cblxuQGlmICRlbmFibGUtZ3JpZC1yZXYgPT0gdHJ1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcjogUmV2ZXJzZSBncmlkIGRpcmVjdGlvblxuICAgICAqL1xuICAgIC5ncmlkLS1yZXYge1xuICAgICAgICBkaXJlY3Rpb246IHJ0bDtcblxuICAgICAgICA+IC5ncmlkX19jZWxsIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuQGlmICRlbmFibGUtZ3JpZC1yaWdodCA9PSB0cnVlIHtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmeWVyOiBHcmlkIGFsaWduIHJpZ2h0XG4gICAgICovXG4gICAgLmdyaWQtLXJpZ2h0IHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuXG59XG5cblxuQGlmICRlbmFibGUtZ3JpZC1jZW50ZXIgPT0gdHJ1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcjogaG9yaXpvbnRhbGx5IGNlbnRlciBhbGwgZ3JpZCB1bml0c1xuICAgICAqIEFsbG93cyBmb3IgYXV0b21hdGljIHVuaXQgY2VudGVyaW5nIGlycmVzcGVjdGl2ZSBvZiB0aGUgbnVtYmVyIG9mXG4gICAgICogdW5pdHMgaW4gdGhlIGdyaWQuXG4gICAgICovXG4gICAgLmdyaWQtLWNlbnRlciB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgICA+IC5ncmlkX19jZWxsIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5AaWYgJGVuYWJsZS1ncmlkLW1pZGRsZSA9PSB0cnVlIHtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyOiBhbGlnbiBncmlkIGNlbGxzIHZlcnRpY2FsbHlcbiAgICAgKi9cbiAgICAuZ3JpZC0tbWlkZGxlIHtcbiAgICAgICAgPiAuZ3JpZF9fY2VsbCB7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC5ncmlkLS1ib3R0b20ge1xuICAgICAgICA+IC5ncmlkX19jZWxsIHtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5AaWYgJGVuYWJsZS1ncmlkLW5hcnJvdyA9PSB0cnVlIHtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBncmlkcyB3aXRoIG5hcnJvd2VyIGd1dHRlcnMuIEV4dGVuZHMgYC5ncmlkYC5cbiAgICAgKi9cbiAgICAuZ3JpZC0tbmFycm93IHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAtKCRndXR0ZXIgLyAyKSk7XG5cbiAgICAgICAgPiAuZ3JpZF9fY2VsbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZy1sZWZ0LCAoJGd1dHRlciAvIDIpKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbkBpZiAkZW5hYmxlLWdyaWQtd2lkZSA9PSB0cnVlIHtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBncmlkcyB3aXRoIHdpZGVyIGd1dHRlcnMuIEV4dGVuZHMgYC5ncmlkYC5cbiAgICAgKi9cbiAgICAuZ3JpZC0td2lkZSB7XG4gICAgICAgIEBpbmNsdWRlIHJlbShtYXJnaW4tbGVmdCwgLSgkZ3V0dGVyICogMikpO1xuXG4gICAgICAgID4gLmdyaWRfX2NlbGwge1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmctbGVmdCwgKCRndXR0ZXIgKiAyKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5AaWYgJGVuYWJsZS1ncmlkLWZsdXNoID09IHRydWUge1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXI6IFJlbW92ZSBndXR0ZXJzIGJldHdlZW4gY29sdW1uc1xuICAgICAqIFRhZ3M6IF5kZXByZWNhdGVkXG4gICAgICogYC5ncmlkLS1ndXR0ZXJsZXNzYCBtb2RpZmllciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuMS4wXG4gICAgICovXG4gICAgLmdyaWQtLWZsdXNoLFxuICAgIC5ncmlkLS1ndXR0ZXJsZXNzIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgID4gLmdyaWRfX2NlbGwge1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG59IC8vIHVzZS1ncmlkIiwiLyohIGJsb2Nzcy1kaW1lbnNpb25zIHYxLjAuMyB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJERJTUVOU0lPTlNcbiAgICBTaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQuIFRoZXNlIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXJcbiAgICBvYmplY3RzIGFuZCBhYnN0cmFjdGlvbnMgZm91bmQgaW4gYmxvY3NzLCBtb3N0IGNvbW1vbmx5IHRoZSBncmlkIHN5c3RlbVxuICAgIGFuZCB0aGUgYXJyYW5nZSBtb2R1bGUuXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogIFZhcmlhYmxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogRmxhZ3MgdG8gZW5hYmxlIG9yIGRpc2FibGUgZGltZW5zaW9uIHRyYWl0c1xuICovXG4kdXNlLXVuaXRzOiAgICAgICAgICAgICAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiR1c2UtcHVzaDogICAgICAgICAgICAgICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJHVzZS1wdWxsOiAgICAgICAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cbi8qKlxuICogRGl2aXNpb25zLCBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSBzZXZlcmFsIHByb3BvcnRpb25hbFxuICogZGltZW5zaW9ucyAoZS5nLiwgYm90aCBhIDItcGFydCBhbmQgYSAxMi1wYXJ0IGdyaWQpLlxuICpcbiAqIEZvciBleGFtcGxlLCBgMiA0IDYgMTJgIHdpbGwgbGV0IHlvdSB1c2UgdGhlIHVuaXQtMS0yLCB1bml0LTItNCxcbiAqIHVuaXQtMy02LCBhbmQgdW5pdC02LTEyIGNsYXNzZXMgdG8gc3BlY2lmeSB0aGF0IGFuIGVsZW1lbnQgc2hvdWxkXG4gKiB0YWtlIHVwIDUwJSBvZiBpdHMgY29udGFpbmVyLlxuICovXG4kZGl2aXNpb25zOiAgICAgICAgICAgICAgICAgMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuLyoqXG4gKiBEZWZpbmUgd2hpY2ggbmFtZXNwYWNlZCBicmVha3BvaW50cyB5b3Ugd291bGQgbGlrZSB0byBnZW5lcmF0ZSBmb3IgZWFjaFxuICogb2YgdGhlIGRpbWVuc2lvbnMuIFRoaXMgaXMgaGFuZHkgaWYgeW91IG9ubHkgbmVlZCBwdXNoIG9uLCBzYXksXG4gKiBkZXNrLCBvciB5b3Ugb25seSBuZWVkIGEgbmV3IHVuaXQgYnJlYWtwb2ludCBhdCBtb2JpbGUgc2l6ZXMuIEl0IGFsbG93c1xuICogeW91IHRvIG9ubHkgY29tcGlsZSBhcyBtdWNoIENTUyBhcyB5b3UgbmVlZC4gQWxsIGFyZSBlbXB0eSBieVxuICogZGVmYXVsdCwgYnV0IHlvdSBjYW4gYWRkIGJyZWFrcG9pbnRzIGF0IHdpbGwuXG4gKlxuICogJGJyZWFrcG9pbnQtaGFzLXg6ICAgICAgICgncGFsbScsICdkZXNrJyk7XG4gKlxuICogTm90ZTogdGhlIG5hbWUgb2YgdGhlIGJyZWFrcG9pbnQgbXVzdCBleGlzdCBpbiB0aGUgbGlzdCBvZiBgJGJyZWFrcG9pbnRzYFxuICogICAgICAgaW4gdGhlIEJsb2NzcyBiYXNlIHJlcG9zaXRvcnlcbiAqL1xuJGJyZWFrcG9pbnQtaGFzLXVuaXRzOiAgICAgICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4kYnJlYWtwb2ludC1oYXMtcHVzaDogICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRicmVha3BvaW50LWhhcy1wdWxsOiAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG4vKipcbiAqIFlvdSBjYW4gcmVuYW1lIHRoZSBkaW1lbnNpb24gcHJlZml4ZXMgdG8geW91ciBsaWtpbmdcbiAqL1xuJG5hbWUtdW5pdHM6ICAgICAgICAgICAgICAgIHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4kbmFtZS1wdXNoOiAgICAgICAgICAgICAgICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRuYW1lLXB1bGw6ICAgICAgICAgICAgICAgICBwdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cblxuLyogIE1peGlucyAmIGZ1bmN0aW9uc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogRmluZCB0aGUgZ3JlYXRlc3QgY29tbW9uIGZhY3RvciBvZiB0d28gaW50ZWdlcnNcbiAqL1xuQGZ1bmN0aW9uIGdjZigkYSwgJGIpIHtcbiAgICBAaWYgJGIgPT0gMCB7IEByZXR1cm4gJGE7IH1cbiAgICBAZWxzZSB7IEByZXR1cm4gZ2NmKCRiLCAkYSAlICRiKTsgfVxufVxuXG5cbkBmdW5jdGlvbiBjb250YWlucygkbGlzdCwgJHZhbHVlKSB7XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBsaXN0IGNvbnRhaW5zIGEgdmFsdWVcbiAgICAgKi9cbiAgICBAaWYgdHlwZS1vZigkbGlzdCkgPT0gbGlzdCB7IEByZXR1cm4gbm90IG5vdCBpbmRleCgkbGlzdCwgJHZhbHVlKTsgfVxuICAgIEBlbHNlIHsgQHJldHVybiAkbGlzdCA9PSAkdmFsdWU7IH1cbn1cblxuLyoqXG4gKiBGbHVpZCB1bml0c1xuICogVVNBR0U6IHByb3ZpZGUgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VycywgZWFjaCBvZiB3aGljaFxuICogcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHBhcnRzIHRoYXQgbWFrZSB1cCBhIHVuaXQgY29tcG9uZW50LlxuICogT3B0aW9uYWxseSBwcm92aWRlIGEgbW9kaWZpZXIgc3VmZml4IHRoYXQgY2FuIGJlIHVzZWQgdG8gYWRqdXN0XG4gKiBncmlkcyBpbiBkaWZmZXJlbnQgY29udGV4dHMgKGUuZy4gdmlld3BvcnQgZGltZW5zaW9ucykuXG4gKi9cbkBtaXhpbiBkaW1lbnNpb25zLWJ1aWxkKCR1bml0cywgJHByZWZpeDogJG5hbWUtdW5pdHMsICRtb2RpZmllcjogJycpIHtcblxuICAgIC8qKlxuICAgICAqIFByb3BvcnRpb25hbCB1bml0c1xuICAgICAqIFNwZWNpZnkgdGhlIHByb3BvcnRpb25hbCB3aWR0aCBvZiBhbiBvYmplY3QuXG4gICAgICogUHJpbWFyaWx5IGZvciwgYnV0IG5vdCBsaW1pdGVkIHRvLCB1c2Ugd2l0aCBgLmdyaWRfX2NlbGxgIGNvbXBvbmVudHMuXG4gICAgICogSW50ZW50aW9uYWwgcmVkdW5kYW5jeSBidWlsZCBpbnRvIGVhY2ggc2V0IG9mIHVuaXQgY2xhc3Nlcy5cbiAgICAgKi9cbiAgICBAZWFjaCAkbiBpbiAkdW5pdHMge1xuICAgICAgICAvKiBBdm9pZCBjcmVhdGluZyBydWxlcyBsaWtlICcudW5pdC0xMi0xMiB7fScnICovXG4gICAgICAgICR4OiAkbiAtIDE7XG5cbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkeCB7XG4gICAgICAgICAgICAvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqL1xuICAgICAgICAgICAgJGktcjogKCk7XG4gICAgICAgICAgICAkbi1yOiAoKTtcblxuICAgICAgICAgICAgLyogRmluZCB0aGUgZ3JlYXRlc3QgY29tbW9uIGZhY3RvciAqL1xuICAgICAgICAgICAgJGc6IGdjZigkaSwgJG4pO1xuXG4gICAgICAgICAgICBAaWYgJGcgPiAxIHtcbiAgICAgICAgICAgICAgICAvKiBSZWR1Y2VkIHZhbHVlIG9mICRpICovXG4gICAgICAgICAgICAgICAgJGktcjogJGkvJGc7XG4gICAgICAgICAgICAgICAgLyogUmVkdWNlZCB2YWx1ZSBvZiAkbiAqL1xuICAgICAgICAgICAgICAgICRuLXI6ICRuLyRnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENoZWNrIGlmIHRoZSByZWR1Y2VkIHZhbHVlIG9mICRuIHdhcyBhbHNvIHN1cHBsaWVkIGluIHRoZVxuICAgICAgICAgICAgICogbGlzdCBvZiB1bml0cyB0byBiZSBidWlsdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAkY2FucmVkdWNlOiBjb250YWlucygkdW5pdHMsICRuLXIpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENyZWF0ZSB1bml0cyBiYXNlZCBvbiBmcmFjdGlvbnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLiN7JHByZWZpeH0tI3skaX0tI3skbn0jeyRtb2RpZmllcn0ge1xuICAgICAgICAgICAgICAgIEBpZiAkaS1yIGFuZCAkY2FucmVkdWNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAuI3skcHJlZml4fS0jeyRpLXJ9LSN7JG4tcn0jeyRtb2RpZmllcn07XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAkcHJlZml4ID09ICRuYW1lLXVuaXRzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBwZXJjZW50YWdlKCRpIC8gJG4pO1xuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmICRwcmVmaXggPT0gJG5hbWUtcHVzaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwZXJjZW50YWdlKCRpIC8gJG4pO1xuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmICRwcmVmaXggPT0gJG5hbWUtcHVsbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogcGVyY2VudGFnZSgkaSAvICRuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBkaW1lbnNpb25zXG4gICAgICovXG4gICAgQGlmICRwcmVmaXggPT0gJG5hbWUtdW5pdHMge1xuICAgICAgICAuI3skcHJlZml4fS0xLTEjeyRtb2RpZmllcn0ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgLiN7JHByZWZpeH0tYXV0byN7JG1vZGlmaWVyfSB7XG4gICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJHByZWZpeCA9PSAkbmFtZS1wdXNoIHtcbiAgICAgICAgLiN7JHByZWZpeH0tMC0wI3skbW9kaWZpZXJ9IHtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmICRwcmVmaXggPT0gJG5hbWUtcHVsbCB7XG4gICAgICAgIC4jeyRwcmVmaXh9LTAtMCN7JG1vZGlmaWVyfSB7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5cbi8qICBEaW1lbnNpb25zIGNvcmVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIFNldHVwIGdlbmVyaWMgd2lkdGhzXG4gKi9cbkBpZiAkdXNlLXVuaXRzID09IHRydWUge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtYnVpbGQoJGRpdmlzaW9ucyk7XG59XG5cblxuLyoqXG4gICogU2V0dXAgZ2VuZXJpYyBwdXNoXG4gICovXG5AaWYgJHVzZS1wdXNoID09IHRydWUge1xuICAgIFtjbGFzcyo9XCIjeyRuYW1lLXB1c2h9LVwiXSB7XG4gICAgICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xuICAgIH1cbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLWJ1aWxkKCRkaXZpc2lvbnMsICRuYW1lLXB1c2gpO1xufVxuXG5cbi8qKlxuICAqIFNldHVwIGdlbmVyaWMgcHVsbFxuICAqL1xuQGlmICR1c2UtcHVsbCA9PSB0cnVlIHtcbiAgICBbY2xhc3MqPVwiI3skbmFtZS1wdWxsfS1cIl0ge1xuICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTtcbiAgICB9XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1idWlsZCgkZGl2aXNpb25zLCAkbmFtZS1wdWxsKTtcbn1cblxuXG5cbi8qICBSZXNwb25zaXZlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGlmICR1c2UtdW5pdHMgPT0gdHJ1ZSB7XG4gICAgQGVhY2ggJG5hbWUgaW4gJGJyZWFrcG9pbnQtaGFzLXVuaXRzIHtcbiAgICAgICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkoJG5hbWUpIHtcbiAgICAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1idWlsZCgkZGl2aXNpb25zLCAkbmFtZS11bml0cywgJy0tI3skbmFtZX0nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQGlmICR1c2UtcHVzaCA9PSB0cnVlIHtcbiAgICBAZWFjaCAkbmFtZSBpbiAkYnJlYWtwb2ludC1oYXMtcHVzaCB7XG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KCRuYW1lKSB7XG4gICAgICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtYnVpbGQoJGRpdmlzaW9ucywgJG5hbWUtcHVzaCwgJy0tI3skbmFtZX0nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQGlmICR1c2UtcHVsbCA9PSB0cnVlIHtcbiAgICBAZWFjaCAkbmFtZSBpbiAkYnJlYWtwb2ludC1oYXMtcHVsbCB7XG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KCRuYW1lKSB7XG4gICAgICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtYnVpbGQoJGRpdmlzaW9ucywgJG5hbWUtcHVsbCwgJy0tI3skbmFtZX0nKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCIvKiEgYmxvY3NzLWlzbGFuZCB2MS4wLjAgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vQmxvY3NzICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRJU0xBTkRcbiAgICBTaW1wbGUsIGJveGVkIG9mZiBjb250ZW50XG4gICAgQXMgcGVyOiBjc3N3aXphcmRyeS5jb20vMjAxMS8xMC90aGUtaXNsYW5kLW9iamVjdFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qICBWYXJpYWJsZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vLyBNb2R1bGUgY2FuIGJlIGRpc2FibGVkIGJ5IHN3aXRjaGluZyBgJHVzZS1pc2xhbmRgIHRvIGBmYWxzZWBcbiR1c2UtaXNsYW5kOiAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuXG4vKiAgQ29yZSBpc2xhbmQgY29tcG9uZW50XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGlmICR1c2UtaXNsYW5kID09IHRydWUge1xuLyoqXG4gKiBTaW1wbGUsIGJveGVkIG9mZiBjb250ZW50XG4gKlxuICogRXh0ZW5kcyBgJW1vZHVsZWAgaW4gYGdlbmVyaWMvX3NoYXJlZC5zY3NzYFxuICogRXh0ZW5kcyBgLmNmYCBpbiBgZ2VuZXJpYy9fY2xlYXJmaXguc2Nzc2BcbiAqXG4gKiBTYW1wbGUgdXNhZ2U6XG4gKlxuPGRpdiBjbGFzcz1cImlzbGFuZFwiPlxuICAgIEkgYW0gYm94ZWQgb2ZmLlxuPC9kaXY+XG4gKi9cbi5jb250aW5lbnQsXG4uaXNsYW5kLFxuLmlzbGV0IHtcbiAgICBAZXh0ZW5kICVtb2R1bGU7XG4gICAgQGV4dGVuZCAuY2Y7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5jb250aW5lbnQge1xuICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkc3BhY2UqMik7XG59XG5cbi5pc2xhbmQge1xuICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkc3BhY2UpO1xufVxuXG4vKiBKdXN0IGxpa2UgYC5pc2xhbmRgLCBvbmx5IHNtYWxsZXIuICovXG4uaXNsZXQge1xuICAgIEBpbmNsdWRlIHJlbShwYWRkaW5nLCAkc3BhY2UvMik7XG59XG59IiwiLyohIGJsb2Nzcy1tZWRpYSB2MS4wLjMgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vQmxvY3NzICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNRURJQVxuICAgIFBsYWNlIGFueSBpbWFnZS0gYW5kIHRleHQtbGlrZSBjb250ZW50IHNpZGUtYnktc2lkZVxuICAgIEFzIHBlcjogc3R1YmJvcm5lbGxhLm9yZy9jb250ZW50LzIwMTAvMDYvMjUvdGhlLW1lZGlhLW9iamVjdC1zYXZlcy1odW5kcmVkcy1vZi1saW5lcy1vZi1jb2RlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBFeGFtcGxlIHVzYWdlOlxuICpcbjxkaXYgY2xhc3M9XCJtZWRpYVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZWRpYV9faW1nICBbbWVkaWFfX2ltZy0tcmV2XVwiPlxuICAgICAgICA8aW1nIHNyYz1cImltZy5wbmdcIiBhbHQ9XCJcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWVkaWFfX2JvZHlcIj5cbiAgICAgICAgQnJhbSBTbXVsZGVycyBAYnJhbXNtdWxkZXJzXG4gICAgICAgIOKAplxuICAgIDwvZGl2PlxuPC9kaXY+XG4gKi9cblxuLyogIFZhcmlhYmxlc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8vIE1vZHVsZSBjYW4gYmUgZGlzYWJsZWQgYnkgc3dpdGNoaW5nIGAkdXNlLW1lZGlhYCB0byBgZmFsc2VgXG4kdXNlLW1lZGlhOiAgICAgICAgICAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG4vKipcbiAqIEVuYWJsZS9kaXNhYmxlIG1vZGlmaWVyc1xuICovXG4kZW5hYmxlLW1lZGlhLXJldjogICAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuJGVuYWJsZS1tZWRpYS1uYXJyb3c6ICAgICAgICAgICB0cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcbiRlbmFibGUtbWVkaWEtd2lkZTogICAgICAgICAgICAgdHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG4kZW5hYmxlLW1lZGlhLWZsdXNoOiAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkZWZhdWx0O1xuXG5cblxuLyogIENvcmUgbWVkaWEgY29tcG9uZW50XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGlmICR1c2UtbWVkaWEgPT0gdHJ1ZSB7XG5cbi5tZWRpYSB7XG4gICAgQGV4dGVuZCAuY2Y7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4gICAgLyoqXG4gICAgICogSW1hZ2UgbG9jYXRpb24gbGVmdFxuICAgICAqL1xuICAgIC5tZWRpYV9faW1nIHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1yaWdodCwgJHNwYWNlKTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udGVudCBib2R5XG4gICAgICovXG4gICAgLm1lZGlhX19ib2R5IHtcbiAgICAgICAgQGV4dGVuZCAlbW9kdWxlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cblxuXG5cbi8qICBNb2RpZmllcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AaWYgJGVuYWJsZS1tZWRpYS1yZXYgPT0gdHJ1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnNlZCBpbWFnZSBsb2NhdGlvbiAocmlnaHQgaW5zdGVhZCBvZiBsZWZ0KVxuICAgICAqL1xuICAgIC5tZWRpYV9faW1nLS1yZXYge1xuICAgICAgICBAaW5jbHVkZSByZW0obWFyZ2luLWxlZnQsICRzcGFjZSk7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgICAgICAgLm1lZGlhX19pbWcsXG4gICAgICAgIC5tZWRpYV9faW1nLS1yZXYge1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OmJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbn1cblxuXG5AaWYgJGVuYWJsZS1tZWRpYS13aWRlID09IHRydWUge1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXI6IHdpZGVucyB0aGUgZ3V0dGVyIGJldHdlZW4gYC5tZWRpYV9faW1nYCAmIGAubWVkaWFfX2JvZHlgXG4gICAgICovXG4gICAgLm1lZGlhLS13aWRlIHtcbiAgICAgICAgLm1lZGlhX19pbWcge1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1yaWdodCwgJHNwYWNlKjIpO1xuICAgICAgICB9XG4gICAgICAgIC5tZWRpYV9faW1nLS1yZXYge1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1sZWZ0LCAkc3BhY2UqMik7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5AaWYgJGVuYWJsZS1tZWRpYS1uYXJyb3cgPT0gdHJ1ZSB7XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcjogbmFycm93cyB0aGUgZ3V0dGVyIGJldHdlZW4gYC5tZWRpYV9faW1nYCAmIGAubWVkaWFfX2JvZHlgXG4gICAgICovXG4gICAgLm1lZGlhLS1uYXJyb3cge1xuICAgICAgICAubWVkaWFfX2ltZyB7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0obWFyZ2luLXJpZ2h0LCAkc3BhY2UtaGFsZik7XG4gICAgICAgIH1cbiAgICAgICAgLm1lZGlhX19pbWctLXJldiB7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW0obWFyZ2luLWxlZnQsICRzcGFjZS1oYWxmKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbkBpZiAkZW5hYmxlLW1lZGlhLWZsdXNoID09IHRydWUge1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXI6IHJlbW92ZXMgZ3V0dGVyIGJldHdlZW4gYC5tZWRpYV9faW1nYCAmIGAubWVkaWFfX2JvZHlgXG4gICAgICogVGFnczogXmRlcHJlY2F0ZWRcbiAgICAgKiBgLm1lZGlhLS1ndXR0ZXJsZXNzYCBtb2RpZmllciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuMS4wXG4gICAgICovXG4gICAgLm1lZGlhLS1mbHVzaCxcbiAgICAubWVkaWEtLWd1dHRlcmxlc3Mge1xuICAgICAgICAubWVkaWFfX2ltZyB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICAgICAgLm1lZGlhX19pbWctLXJldiB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyohIGJsb2Nzcy1uYXZpZ2F0aW9uIHYxLjAuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9CbG9jc3MgKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJE5BVklHQVRJT05cbiAgICBOYXZpZ2F0aW9uIGFic3RyYWN0aW9ucywgY29tbW9uIG5hdmlnYXRpb24gc3RydWN0dXJlcy5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiAgVmFyaWFibGVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLy8gTW9kdWxlIGNhbiBiZSBkaXNhYmxlZCBieSBzd2l0Y2hpbmcgYCR1c2UtbmF2aWdhdGlvbmAgdG8gYGZhbHNlYFxuJHVzZS1uYXZpZ2F0aW9uOiAgICAgICAgICAgIHRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRlZmF1bHQ7XG5cblxuXG4vKiAgQ29yZSBuYXZpZ2F0aW9uIGNvbXBvbmVudFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBpZiAkdXNlLW5hdmlnYXRpb24gPT0gdHJ1ZSB7XG5cbi8qKlxuICogV2hlbiB1c2VkIG9uIGFuIGBvbGAgb3IgYHVsYCwgdGhpcyBjbGFzcyB0aHJvd3MgdGhlIGxpc3RcbiAqIGludG8gaG9yaXpvbnRhbCBtb2RlXG4gKlxuICogU2FtcGxlIG1hcmt1cDpcbjx1bCBjbGFzcz1cIm5hdlwiPlxuICAgIDxsaT48YT5Ib21lPC9hPjwvbGk+XG48L3VsPlxuICovXG4ubmF2IHtcbiAgICBAZXh0ZW5kIC5jZjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuXG4gICAgPiBsaSB7XG5cbiAgICAgICAgJixcbiAgICAgICAgPiBhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8qKlxuICogTW9kaWZ5ZXI6IFN0YWNrZWQgbmF2XG4gKiBgLm5hdi0tc3RhY2tlZGAgZXh0ZW5kcyBgLm5hdmAgYW5kIHJlbmRlcnMgdGhlIGxpc3QgaW50byB2ZXJ0aWNhbCBtb2RlXG4gKlxuICogU2FtcGxlIG1hcmt1cDpcbjx1bCBjbGFzcz1cIm5hdiAgbmF2LS1zdGFja2VkXCI+XG4gICAgPGxpPjxhPkhvbWU8L2E+PC9saT5cbjwvdWw+XG4gKi9cbi5uYXYtLXN0YWNrZWQge1xuICAgID4gbGkge1xuICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XG5cbiAgICAgICAgPiBhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8qKlxuICogTW9kaWZ5ZXI6IEJhbm5lciBuYXZcbiAqIGAubmF2LS1iYW5uZXJgIGV4dGVuZHMgYC5uYXZgIGFuZCBjZW50ZXJzIHRoZSBsaXN0XG4gKlxuICogU2FtcGxlIG1hcmt1cDpcbjx1bCBjbGFzcz1cIm5hdiAgbmF2LS1iYW5uZXJcIj5cbiAgICA8bGk+PGE+SG9tZTwvYT48L2xpPlxuPC91bD5cbiAqL1xuLm5hdi0tYmFubmVyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cblxuLyoqXG4gKiBNb2RpZnllcjogQnJlYWRjcnVtYiBuYXZcbiAqIGAubmF2LS1icmVhZGNydW1iYCBleHRlbmRzIGAubmF2YCBhbmQgY2VudGVycyB0aGUgbGlzdFxuICpcbiAqIFNhbXBsZSBtYXJrdXA6XG48b2wgY2xhc3M9XCJuYXYgIFtuYXYtLWJyZWFkY3J1bWJ8bmF2LS1icmVhZGNydW1iLXBhdGhdXCI+XG4gICAgPGxpIFtkYXRhLWJyZWFkY3J1bWI9XCJ8XCJdPjxhIGhyZWY9XCIjXCI+SG9tZTwvYT48L2xpPlxuPC9vbD5cbiAqL1xuLm5hdi0tYnJlYWRjcnVtYiA+IGxpICsgbGk6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIsK7IFwiO1xufVxuLm5hdi0tYnJlYWRjcnVtYi1wYXRoID4gbGkgKyBsaTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiLyBcIjtcbn1cbi5uYXYtLWJyZWFkY3J1bWIgPiBsaSArIGxpW2RhdGEtYnJlYWRjcnVtYl06YmVmb3JlIHtcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtYnJlYWRjcnVtYilcIiBcIjtcbn1cblxuXG4vKipcbiAqIE1vZGlmeWVyOiBQYWdpbmF0b3IgbmF2XG4gKiBgLm5hdi0tcGFnaW5hdGlvbmAgZXh0ZW5kcyBgLm5hdmBcbiAqXG4gKiBTYW1wbGUgbWFya3VwOlxuPG9sIGNsYXNzPVwibmF2ICBuYXYtLXBhZ2luYXRpb25cIj5cbiAgICA8bGkgY2xhc3M9XCJuYXYtLXBhZ2luYXRpb25fX2ZpcnN0XCI+Rmlyc3Q8L2xpPlxuICAgIDxsaT48YSBocmVmPVwiXCI+MTwvYT48L2xpPlxuICAgIDxsaT48YSBocmVmPVwiXCI+MjwvYT48L2xpPlxuICAgIDxsaT48YSBocmVmPVwiXCI+MzwvYT48L2xpPlxuICAgIDxsaSBjbGFzcz1cIm5hdi0tcGFnaW5hdGlvbl9fbGFzdFwiPjxhIGhyZWY9XCJcIj5MYXN0PC9hPjwvbGk+XG48L29sPlxuICovXG4ubmF2LS1wYWdpbmF0aW9uIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICA+IGxpIHtcbiAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRzcGFjZS1oYWxmKTtcblxuICAgICAgICA+IGEge1xuICAgICAgICAgICAgQGluY2x1ZGUgcmVtKHBhZGRpbmcsICRzcGFjZS1oYWxmKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIHJlbShtYXJnaW4sIC0kc3BhY2UtaGFsZik7XG4gICAgICAgIH1cbiAgICB9XG59XG4gICAgLm5hdi0tcGFnaW5hdGlvbl9fZmlyc3QgYTpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBcIsKrIFwiO1xuICAgIH1cbiAgICAubmF2LS1wYWdpbmF0aW9uX19sYXN0IGE6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIiDCu1wiO1xuICAgIH1cblxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qISBibG9jc3MtaGVscGVycyB2MS4wLjEgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vQmxvY3NzICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRIRUxQRVJTXG4gICAgQSBzZXJpZXMgb2YgaGVscGVyIGNsYXNzZXMgdG8gdXNlIGFyYml0cmFyaWx5LiBPbmx5IHVzZSBhIGhlbHBlciBjbGFzcyBpZiBhblxuICAgIGVsZW1lbnQvY29tcG9uZW50IGRvZXNu4oCZdCBhbHJlYWR5IGhhdmUgYSBjbGFzcyB0byB3aGljaCB5b3UgY291bGQgYXBwbHkgdGhpc1xuICAgIHN0eWxpbmcsIGUuZy4gaWYgeW91IG5lZWQgdG8gZmxvYXQgYC5uYXZgIGxlZnQgdGhlbiBhZGQgYGZsb2F0OmxlZnQ7YFxuICAgIHRvIHRoYXQgcnVsZXNldCBhcyBvcHBvc2VkIHRvIGFkZGluZyB0aGUgYC5mbG9hdC0tbGVmdGAgY2xhc3MgdG8gdGhlIG1hcmt1cC5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIERlZmluZSB3aGljaCBuYW1lc3BhY2VkIGJyZWFrcG9pbnRzIHlvdSB3b3VsZCBsaWtlIHRvIGdlbmVyYXRlIGZvciB0aGVcbiAqIGAudmlzdWFsbHloaWRkZW5gIGNsYXNzLiBUaGlzIGlzIGhhbmR5IGlmIHlvdSBvbmx5IG5lZWQgdmlzdWFsbHloaWRkZW4gb24sXG4gKiBzYXksIHBhbG0sIG9yIHlvdSBvbmx5IG5lZWQgYSBuZXcgdW5pdCBicmVha3BvaW50IGF0IG1vYmlsZSBzaXplcy4gSXQgYWxsb3dzXG4gKiB5b3UgdG8gb25seSBjb21waWxlIGFzIG11Y2ggQ1NTIGFzIHlvdSBuZWVkLiBBbGwgYXJlIGVtcHR5IGJ5XG4gKiBkZWZhdWx0LCBidXQgeW91IGNhbiBhZGQgYnJlYWtwb2ludHMgYXQgd2lsbC5cbiAqXG4gKiAkYnJlYWtwb2ludC1oYXMteDogICAgICAgKCdwYWxtJywgJ2Rlc2snKTtcbiAqXG4gKiBOb3RlOiB0aGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBtdXN0IGV4aXN0IGluIHRoZSBsaXN0IG9mIGAkYnJlYWtwb2ludHNgXG4gKiAgICAgICBpbiB0aGUgQmxvY3NzIGJhc2UgcmVwb3NpdG9yeVxuICovXG4kYnJlYWtwb2ludC1oYXMtdmlzdWFsbHloaWRkZW46ICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAhZGVmYXVsdDtcblxuXG5cbi8qICBTdHJ1Y3R1cmFsXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBEaXNwbGF5IGhlbHBlcnNcbiAqL1xuLmRpc3BsYXktLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xufVxuLmRpc3BsYXktLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG59XG4uZGlzcGxheS0taW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbn1cblxuXG4vKipcbiAqIFZlcnRpY2FsIHJoeXRobSBoZWxwZXJzXG4gKlxuICogXmRlcHJlY2F0ZWQ6IGAuZmxhdHRlbmBcbiAqL1xuLmZsYXR0ZW4sXG4uc2lnbi0tZmxhdCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xufVxuLyogaGFsZiBtYXJnaW4tYm90dG9tICovXG4uc2lnbi0taGFsZiB7XG4gICAgQGluY2x1ZGUgcmVtKG1hcmdpbi1ib3R0b20sICRzcGFjZS1oYWxmKTtcbn1cbi8qIG1hcmdpbi1ib3R0b20gKi9cbi5zaWduIHtcbiAgICBAaW5jbHVkZSByZW0obWFyZ2luLWJvdHRvbSwgJHNwYWNlKTtcbn1cbi8qIGRvdWJsZWQgdXAgbWFyZ2luLWJvdHRvbSAqL1xuLnNpZ24tLWxhcmdlIHtcbiAgICBAaW5jbHVkZSByZW0obWFyZ2luLWJvdHRvbSwgJHNwYWNlKjIpO1xufVxuXG5cbi8qKlxuICogQWRkL3JlbW92ZSBmbG9hdHNcbiAqL1xuLmZsb2F0LS1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG59XG4uZmxvYXQtLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG59XG4uZmxvYXQtLW5vbmUge1xuICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XG59XG5cblxuXG4vKiAgVGV4dHVhbFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogVGV4dCBhbGlnbm1lbnRcbiAqL1xuLnRleHQtLWxlZnQge1xuICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDtcbn1cbi50ZXh0LS1jZW50ZXIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50O1xufVxuLnRleHQtLXJpZ2h0IHtcbiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50O1xufVxuXG5cbi8qKlxuICogRm9udCB3ZWlnaHRcbiAqXG4gKiBeZGVwcmVjYXRlZDogYC53ZWlnaHQtLXhgXG4gKi9cbi50ZXh0LS1saWdodCxcbi53ZWlnaHQtLWxpZ2h0IHtcbiAgICBmb250LXdlaWdodDogMzAwICFpbXBvcnRhbnQ7XG59XG4udGV4dC0tbm9ybWFsLFxuLndlaWdodC0tbm9ybWFsIHtcbiAgICBmb250LXdlaWdodDogNDAwICFpbXBvcnRhbnQ7XG59XG4udGV4dC0tc2VtaWJvbGQsXG4ud2VpZ2h0LS1zZW1pYm9sZCB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1xufVxuXG5cbi8qKlxuICogQ2FwaXRhbHMvbG93ZXJjYXNlXG4gKlxuICogXmRlcHJlY2F0ZWQ6IG5vbiBwcmVmaXhlZCB3aXRoIGB0ZXh0LS1gXG4gKi9cbi50ZXh0LS1jYXBzLFxuLmNhcHMge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcbn1cbi50ZXh0LS1sb3dlcmNhc2UsXG4ubG93ZXJjYXNlIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlICFpbXBvcnRhbnQ7XG59XG4udGV4dC0tZmlyc3RjYXAsXG4uZmlyc3RjYXAge1xuICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplICFpbXBvcnRhbnQ7XG59XG5cblxuLyoqXG4gKiBMaW5lIGhlaWdodCBoZWxwZXJzXG4gKi9cbi5saW5lLS1mbGF0IHtcbiAgICBsaW5lLWhlaWdodDogMTtcbn1cbi5saW5lLS1zbWFsbCB7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1yYXRpby8xLjI7XG59XG4ubGluZS0tbm9ybWFsaXMge1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtcmF0aW87XG59XG4ubGluZS0tbGFyZ2Uge1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtcmF0aW8qMS4xNjY2NjY2Nztcbn1cblxuXG5cbi8qICBNaXNjXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBIaWRlIGZyb20gc2NyZWFucmVhZGVycyAmIGJyb3dzZXJzXG4gKi9cbi5oaWRkZW4ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cblxuLyoqXG4gKiBIaWRlIHZpc3VhbGx5IGFuZCBmcm9tIHNjcmVlbnJlYWRlcnMsIGJ1dCBtYWludGFpbiBsYXlvdXRcbiAqL1xuLmludmlzaWJsZSB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG5cbi8qKlxuICogSGlkZSBvbmx5IHZpc3VhbGx5LCBidXQgaGF2ZSBpdCBhdmFpbGFibGUgZm9yIHNjcmVlbnJlYWRlcnNcbiAqIGFzIHBlcjogaDVicC5jb20vdlxuICovXG5AbWl4aW4gdmlzdWFsbHloaWRkZW4ge1xuICAgIGJvcmRlcjogMDtcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xuICAgIGhlaWdodDogMXB4O1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxcHg7XG59XG5cbi52aXN1YWxseWhpZGRlbiB7XG4gICAgQGluY2x1ZGUgdmlzdWFsbHloaWRkZW47XG59XG5cbi8qKlxuICogVmlzdWFsbHloaWRkZW4gYmFzZWQgb24gYnJlYWtwb2ludFxuICovXG5AZWFjaCAkc3RhdGUgaW4gJGJyZWFrcG9pbnQtaGFzLXZpc3VhbGx5aGlkZGVuIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeSgjeyRzdGF0ZX0pIHtcbiAgICAgICAgLnZpc3VhbGx5aGlkZGVuLS0jeyRzdGF0ZX0ge1xuICAgICAgICAgICAgQGluY2x1ZGUgdmlzdWFsbHloaWRkZW47XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkQ09MT1JcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiBDb2xvciBmdW5jdGlvblxuICAgVXNpbmcgY29sb3JzIGluIGNzcyBleGFtcGxlOlxuICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoYnJhbmQpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbkBmdW5jdGlvbiBjb2xvcigka2V5KSB7XG4gICAgQGlmIG1hcC1oYXMta2V5KCRjb2xvcnMsICRrZXkpIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0KCRjb2xvcnMsICRrZXkpO1xuICAgIH1cblxuICAgIEBlcnJvciBcIlVua25vd24gYCN7JGtleX1gIGluICRjb2xvcnMuXCI7XG4gICAgQHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEJhY2tncm91bmRzICYgY29sb3JzXG4gKi9cbiAgICAgICAgQGVhY2ggJGNvbG9yIGluICRjb2xvcnMge1xuXG4gICAgICAgICAgICAkbGFiZWw6IG50aCgkY29sb3IsIDEpO1xuICAgICAgICAgICAgJHZhbHVlOiBudGgoJGNvbG9yLCAyKTtcblxuICAgICAgICAgICAgLmJnLS0jeyRsYWJlbH0ge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmNvbG9yLS0jeyRsYWJlbH0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkdmFsdWUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJsb2NrbGluay0tI3skbGFiZWx9IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdmFsdWUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5oZXJvLS0jeyRsYWJlbH17XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHZhbHVlICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgICAgICAgICAuaGVyb19fY29udGVudDphZnRlcntcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHZhbHVlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmJ1dHRvbi0tI3skbGFiZWx9e1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR2YWx1ZSAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICAgICAgJjpob3ZlcntcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkdmFsdWUsIDEpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmJ1dHRvbi0taW52LmJ1dHRvbi0tI3skbGFiZWx9e1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkdmFsdWUgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggJHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkRk9OVFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDT05URU5UU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKlxuICAgIENPTlRFTlRTLi4uLi4uLi4uLi4uLi4uLllvdSdyZSByZWFkaW5nIGl0LCBMT0xcbiAgICBNT0RVTEUuLi4uLi4uLi4uLi4uLi4uLi5JbmNsdWRlcyBiYXNlIG1vZHVsZSAmIHN1Ym1vZHVsZXNcbiAgICBTVEFURS4uLi4uLi4uLi4uLi4uLi4uLi5TdGF0ZXMgdGhlIG1vZHVsZSBjYW4gYmUgaW5cbiAgICBUSEVNRS4uLi4uLi4uLi4uLi4uLi4uLi5UaGVtaW5nIG9mIHRoZSBtb2R1bGVcbiAgICAqL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNT0RVTEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRTVEFURVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKiBNZWRpYSBRdWVyaWVzXG4gICAgICAgVGhlIGRlZmF1bHQgbWVkaWEgcXVlcmllcyBzaGlwcGVkIHdpdGggQmxvY3NzOlxuICAgICAgIFVuY29tbWVudCB0aGUgb25lcyB5b3UgbmVlZFxuICAgIFxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlc2std2lkZSBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShndC1kZXNrKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogRGVzayBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShkZXNrKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUG9ydGFibGUgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkobHQtZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExhcCBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShsYXApe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMYXB1cCBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShndC1wYWxtKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUGFsbSBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShwYWxtKXt9XG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFRIRU1FXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmJpZy10ZXh0IHtcbiAgICBmb250LXNpemU6ICRlcHNpbG9uO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG5cbiAgICBhIHtcbiAgICAgICAgY29sb3I6IGNvbG9yKGJhc2UtZGFyayk7XG4gICAgfVxufVxuXG5oMyB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNwYWNlLzQ7XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkVE9QTEVWRUxcbiAgICBodG1sLCBib2R5LCAud3JhcHBlclxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDT05URU5UU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKlxuICAgIENPTlRFTlRTLi4uLi4uLi4uLi4uLi4uLllvdSdyZSByZWFkaW5nIGl0LCBMT0xcbiAgICBNT0RVTEUuLi4uLi4uLi4uLi4uLi4uLi5JbmNsdWRlcyBiYXNlIG1vZHVsZSAmIHN1Ym1vZHVsZXNcbiAgICBTVEFURS4uLi4uLi4uLi4uLi4uLi4uLi5TdGF0ZXMgdGhlIG1vZHVsZSBjYW4gYmUgaW5cbiAgICBUSEVNRS4uLi4uLi4uLi4uLi4uLi4uLi5UaGVtaW5nIG9mIHRoZSBtb2R1bGVcbiAgICAqL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNT0RVTEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyogY29tbWVudGVkIGJhY2tzbGFzaCBoYWNrIFxcKi9cbiAgICBodG1sLCBib2R5IHsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgLyogZW5kIGhhY2sgKi9cbiAgICAqIGh0bWwgLndyYXBwZXIgeyBoZWlnaHQ6IDEwMCU7IH1cblxuICAgIGJvZHl7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBNYWtlIHdyYXBwZXIgMTAwJSBoZWlnaHRcbiAgICAgKi9cbiAgICAud3JhcHBlciB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgICAgIC5zaXRlLXdpZHRoe1xuICAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICAgICAgIEBpbmNsdWRlIHJlbShtYXgtd2lkdGgsICRzaXRlLXdpZHRoKTtcbiAgICAgICAgICAgICBAaW5jbHVkZSByZW0ocGFkZGluZywgMCAkc3BhY2UpO1xuICAgICAgICAgfVxuXG4gICAgICAgICAuc2l0ZS13aWR0aC0tbm9wYWRkaW5nIHtcbiAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgIH1cblxuICAgICAgICAgQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSkge1xuICAgICAgICAgICAgLnNpdGUtd2lkdGgtLW5vcGFkZGluZy0tcGFsbSB7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFNUQVRFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSl7XG4gICAgLmdyaWQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgfVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkVEhFTUVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uY29udGVudC1saW5rcyB7XG4gICAgbWFyZ2luLWJvdHRvbTogJHNwYWNlO1xuXG4gICAgdWwge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG5cbiAgICAgICAgYSB7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkRk9PVEVSXG4gICAgYm90dG9tIG9mIHBhZ2VcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkQ09OVEVOVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLypcbiAgICBDT05URU5UUy4uLi4uLi4uLi4uLi4uLi5Zb3UncmUgcmVhZGluZyBpdCwgTE9MXG4gICAgTU9EVUxFLi4uLi4uLi4uLi4uLi4uLi4uSW5jbHVkZXMgYmFzZSBtb2R1bGUgJiBzdWJtb2R1bGVzXG4gICAgU1RBVEUuLi4uLi4uLi4uLi4uLi4uLi4uU3RhdGVzIHRoZSBtb2R1bGUgY2FuIGJlIGluXG4gICAgVEhFTUUuLi4uLi4uLi4uLi4uLi4uLi4uVGhlbWluZyBvZiB0aGUgbW9kdWxlXG4gICAgKi9cblxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkTU9EVUxFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkU1RBVEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyogTWVkaWEgUXVlcmllc1xuICAgICAgIFRoZSBkZWZhdWx0IG1lZGlhIHF1ZXJpZXMgc2hpcHBlZCB3aXRoIEJsb2NzczpcbiAgICAgICBVbmNvbW1lbnQgdGhlIG9uZXMgeW91IG5lZWRcbiAgICBcXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXNrLXdpZGUgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlc2sgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBvcnRhYmxlIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICAvL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGx0LWRlc2spe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMYXAgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkobGFwKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogTGFwdXAgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtcGFsbSl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhbG0gc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkocGFsbSl7fVxuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRUSEVNRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5mb290ZXIge1xuICAgIG1hcmdpbi10b3A6ICRzcGFjZTtcbn1cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRIRUFERVJcbiAgICB0b3Agb2YgcGFnZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDT05URU5UU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKlxuICAgIENPTlRFTlRTLi4uLi4uLi4uLi4uLi4uLllvdSdyZSByZWFkaW5nIGl0LCBMT0xcbiAgICBNT0RVTEUuLi4uLi4uLi4uLi4uLi4uLi5JbmNsdWRlcyBiYXNlIG1vZHVsZSAmIHN1Ym1vZHVsZXNcbiAgICBTVEFURS4uLi4uLi4uLi4uLi4uLi4uLi5TdGF0ZXMgdGhlIG1vZHVsZSBjYW4gYmUgaW5cbiAgICBUSEVNRS4uLi4uLi4uLi4uLi4uLi4uLi5UaGVtaW5nIG9mIHRoZSBtb2R1bGVcbiAgICAqL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNT0RVTEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkU1RBVEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyogTWVkaWEgUXVlcmllc1xuICAgICAgIFRoZSBkZWZhdWx0IG1lZGlhIHF1ZXJpZXMgc2hpcHBlZCB3aXRoIEJsb2NzczpcbiAgICAgICBVbmNvbW1lbnQgdGhlIG9uZXMgeW91IG5lZWRcbiAgICBcXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXNrLXdpZGUgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlc2sgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIC8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZGVzayl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBvcnRhYmxlIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICAvL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGx0LWRlc2spe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMYXAgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcCl7XG4gICAgICAgICAgICAuaGVhZGVyX19wcmkgdWx7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5sb2dvLWhvbGRlcntcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMYXB1cCBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShndC1wYWxtKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogUGFsbSBzdGF0ZVxuICAgICAgICAgKi9cblxuICAgICAgICBAaW5jbHVkZSBtZWRpYS1xdWVyeShwYWxtKXtcbiAgICAgICAgICAgIC5oZWFkZXJfX21vYntcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5oZWFkZXJfX3ByaSB1bHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmhlYWRlcl9fbmF2e1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhlYWRlci1sb2dvcyB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5oZWFkZXItbG9nb3NfX2l0ZW06bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHNwYWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFRIRU1FXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmhlYWRlci1sb2dvc19faXRlbSB7XG4gICAgaGVpZ2h0OiA1NXB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICBib3JkZXI6IHNvbGlkIDFweCBibGFjaztcbiAgICBwYWRkaW5nOiA1cHg7XG59XG5cbi5oZWFkZXItbG9nb3NfX2l0ZW06bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJExBWUVSXG4gICAgcGFnZSBwYXJ0XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJENPTlRFTlRTXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qXG4gICAgQ09OVEVOVFMuLi4uLi4uLi4uLi4uLi4uWW91J3JlIHJlYWRpbmcgaXQsIExPTFxuICAgIE1PRFVMRS4uLi4uLi4uLi4uLi4uLi4uLkluY2x1ZGVzIGJhc2UgbW9kdWxlICYgc3VibW9kdWxlc1xuICAgIFNUQVRFLi4uLi4uLi4uLi4uLi4uLi4uLlN0YXRlcyB0aGUgbW9kdWxlIGNhbiBiZSBpblxuICAgIFRIRU1FLi4uLi4uLi4uLi4uLi4uLi4uLlRoZW1pbmcgb2YgdGhlIG1vZHVsZVxuICAgICovXG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJE1PRFVMRVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAubGF5ZXJ7XG4gICAgICAgIHBhZGRpbmc6ICRzcGFjZSoyIDA7XG4gICAgfVxuXG4gICAgLmxheWVyLS13aWRle1xuICAgICAgICBwYWRkaW5nOiAkc3BhY2UqNCAwO1xuICAgIH1cblxuICAgIC5sYXllci0tc21hbGx7XG4gICAgICAgIHBhZGRpbmc6ICRzcGFjZSAwO1xuICAgIH1cblxuICAgIC5sYXllci0tdGlueXtcbiAgICAgICAgcGFkZGluZzogJHNwYWNlLzI7XG4gICAgfVxuXG4gICAgLmxheWVyLS1ub3BhZGRpbmdib3R0b217XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIH1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFNUQVRFXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qIE1lZGlhIFF1ZXJpZXNcbiAgICAgICBUaGUgZGVmYXVsdCBtZWRpYSBxdWVyaWVzIHNoaXBwZWQgd2l0aCBCbG9jc3M6XG4gICAgICAgVW5jb21tZW50IHRoZSBvbmVzIHlvdSBuZWVkXG4gICAgXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogRGVzay13aWRlIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICAvL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGd0LWRlc2spe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXNrIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICAvL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQb3J0YWJsZSBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShsdC1kZXNrKXt9XG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogTGFwIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICAvL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGxhcCl7fVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExhcHVwIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICAvL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGd0LXBhbG0pe31cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBQYWxtIHN0YXRlXG4gICAgICAgICAqL1xuXG4gICAgICAgIEBpbmNsdWRlIG1lZGlhLXF1ZXJ5KHBhbG0pe1xuICAgICAgICAgICAgLmxheWVye1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICRzcGFjZSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFRIRU1FXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRTVEFURVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBpbmNsdWRlIG1lZGlhLXF1ZXJ5KHBhbG0pe1xuICAgIC5jYXJkX19tYXAge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFRIRU1FXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmNhcmQge1xuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMTVweCAxcHggcmdiYSgwLDAsMCwwLjQpO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2U7XG59XG5cbi5jYXJkX19oZWFkZXIge1xuICAgIGltZyB7XG4gICAgICAgIG1heC1oZWlnaHQ6IDExNXB4O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2UvNDtcbiAgICB9XG59XG5cbi5jYXJkX19oZWFkZXItLWJvcmRlci0tYnJhbmQge1xuICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDNweCBjb2xvcihicmFuZCk7XG59XG5cbi5jYXJkX19oZWFkZXItLWJvcmRlci0tYnJhbmQtc2VjIHtcbiAgICBib3JkZXItYm90dG9tOiBzb2xpZCAzcHggY29sb3IoYnJhbmQtc2VjKTtcbn1cblxuLmNhcmRfX2NvbnRlbnQge1xuICAgIHBhZGRpbmc6ICRzcGFjZSAkc3BhY2UgJHNwYWNlLzQ7XG59XG5cbi5jYXJkX19tYXAge1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmNhcmRfX2J1dHRvbiB7XG4gICAgcGFkZGluZzogMTBweCAzMHB4IDEwcHggMTVweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogJGRlbHRhO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6ICMwMDA7XG59XG5cbi5jYXJkX19idXR0b24tLXllbGxvdyB7XG4gICAgYmFja2dyb3VuZDogdXJsKC4uL2dmeC9pY29ucy9yaWdodC15ZWxsb3cuc3ZnKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMnB4OztcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuXG4uY2FyZF9fYnV0dG9uLS1ibHVlIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vZ2Z4L2ljb25zL3JpZ2h0LWJsdWUuc3ZnKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxMnB4OztcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJEhlbHBlcnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkQ09OVEVOVFNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLypcbiAgICBDT05URU5UUy4uLi4uLi4uLi4uLi4uLi5Zb3UncmUgcmVhZGluZyBpdCwgTE9MXG4gICAgTU9EVUxFLi4uLi4uLi4uLi4uLi4uLi4uSW5jbHVkZXMgYmFzZSBtb2R1bGUgJiBzdWJtb2R1bGVzXG4gICAgU1RBVEUuLi4uLi4uLi4uLi4uLi4uLi4uU3RhdGVzIHRoZSBtb2R1bGUgY2FuIGJlIGluXG4gICAgVEhFTUUuLi4uLi4uLi4uLi4uLi4uLi4uVGhlbWluZyBvZiB0aGUgbW9kdWxlXG4gICAgKi9cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRGVU5DVElPTlNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gei1pbmRleCgka2V5cykge1xuICAgICRtYXA6ICR6LWluZGV4ZXM7XG4gICAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gICAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSBcIm1hcFwiKSB7XG4gICAgICAgICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG5AZnVuY3Rpb24geigka2V5cy4uLikge1xuICAgIEByZXR1cm4gei1pbmRleCgka2V5cyk7XG59IiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgTWFpblxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRDT05URU5UU1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qXG5DT05URU5UUy4uLi4uLi4uLi4uLi4uLi5Zb3UncmUgcmVhZGluZyBpdCwgTE9MXG5NT0RVTEUuLi4uLi4uLi4uLi4uLi4uLi5JbmNsdWRlcyBiYXNlIG1vZHVsZSAmIHN1Ym1vZHVsZXNcblNUQVRFLi4uLi4uLi4uLi4uLi4uLi4uLlN0YXRlcyB0aGUgbW9kdWxlIGNhbiBiZSBpblxuVEhFTUUuLi4uLi4uLi4uLi4uLi4uLi4uVGhlbWluZyBvZiB0aGUgbW9kdWxlXG4qL1xuXG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAgICRNT0RVTEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4ubmF2e1xuXG59XG4ubmF2LXRvcHtcblxuXHRsaXtcblx0XHRhe1xuXHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0cGFkZGluZzogJHNwYWNlLWhhbGY7XG5cdFx0XHRjb2xvcjogY29sb3IoYmFzZS1kYXJrKTtcblx0XHRcdGZvbnQtc2l6ZTogJG1pbGxpO1xuXHRcdH1cblx0fVxuXG5ib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZmZjtcbn1cbi5uYXYtYm90e1xuXHRsaXtcblx0XHRhe1xuXHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0cGFkZGluZzogJHNwYWNlO1xuXHRcdFx0Y29sb3I6IGNvbG9yKGJhc2UtZGFyayk7XG5cdFx0XHRmb250LXNpemU6ICRnYW1tYTtcblx0XHR9XG5cdH1cbn1cbi5uYXYtbW9iX190b3AsIC5uYXYtbW9iX19ib3R7XG5cblx0bGl7XG5cdFx0bGlzdC1zdHlsZS10eXBlOiBub25lO1xuXHRcdG1hcmdpbjogJHNwYWNlO1xuXHRcdGF7XG5cdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRjb2xvcjogY29sb3IoYmFzZSk7XG5cdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdH1cblx0fVxufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgICAkU1RBVEVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiBNZWRpYSBRdWVyaWVzXG4gICBUaGUgZGVmYXVsdCBtZWRpYSBxdWVyaWVzIHNoaXBwZWQgd2l0aCBCbG9jc3M6XG4gICBVbmNvbW1lbnQgdGhlIG9uZXMgeW91IG5lZWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKlxuICogRGVzay13aWRlIHN0YXRlXG4gKi9cbi8vQGluY2x1ZGUgbWVkaWEtcXVlcnkoZ3QtZGVzayl7fVxuXG5cbi8qKlxuICogRGVzayBzdGF0ZVxuICovXG4vL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGRlc2spe31cblxuXG4vKipcbiAqIFBvcnRhYmxlIHN0YXRlXG4gKi9cbi8vQGluY2x1ZGUgbWVkaWEtcXVlcnkobHQtZGVzayl7fVxuXG5cbi8qKlxuICogTGFwIHN0YXRlXG4gKi9cbi8vQGluY2x1ZGUgbWVkaWEtcXVlcnkobGFwKXt9XG5cblxuLyoqXG4gKiBMYXB1cCBzdGF0ZVxuICovXG4vL0BpbmNsdWRlIG1lZGlhLXF1ZXJ5KGd0LXBhbG0pe31cblxuXG4vKipcbiAqIFBhbG0gc3RhdGVcbiAqL1xuLy9AaW5jbHVkZSBtZWRpYS1xdWVyeShwYWxtKXt9XG5cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gICAgJFRIRU1FXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8iXSwibWFwcGluZ3MiOiI7QUFDQTs7Z0ZBR2dGO0FBRWhGO2dGQUVnRjtBQUU1RTs7Ozs7O01BTUU7QUFLTjs7Z0ZBR2dGO0FBRTVFOztPQUVHO0FDNUJQOzs7Ozs7O2dGQVFnRjtBQUU1RSxhQUFhO0FBa0JiLGFBQWE7QUFPYixnQkFBZ0I7QUFhcEI7O2dGQUdnRjtBQXVCaEY7O2dGQUdnRjtBQzdFaEY7OztHQUdHO0FDRkg7OztnRkFJZ0Y7QUFFaEY7Z0ZBRWdGO0FBRWhGOzs7OztHQUtHO0FBTUg7Ozs7Z0ZBS2dGO0FBRWhGOzs7O0dBSUc7QUFNSDs7R0FFRztBQWdCSDs7R0FFRztBQU9IOzs7Z0ZBSWdGO0FBRWhGOzs7Ozs7OztHQVFHO0FBSUg7OztHQUdHO0FBUUg7Ozs7Z0ZBS2dGO0FBV2hGO2dGQUVnRjtBQUVoRjs7R0FFRztBQUlIOztHQUVHO0FBSUg7O0dBRUc7QUFJSDs7O0dBR0c7QUN2SUg7O2dGQUdnRjtBQUVoRjtnRkFDZ0Y7QUFFNUU7O09BRUc7QUFNSDs7T0FFRztBQU1IOztPQUVHO0FBT1A7Z0ZBQ2dGO0FBRTVFOzs7T0FHRztBQWVIOzs7Ozs7OztPQVFHO0FBd0NIOzs7Ozs7Ozs7Ozs7O09BYUc7QUF3QlA7Z0ZBQ2dGO0FBRTVFOztPQUVHO0FBZUg7Ozs7Ozs7T0FPRztBQXlCSDs7O09BR0c7QUFVUDtnRkFDZ0Y7QUFFNUU7O09BRUc7QUNqTlAsMkRBQTJEO0FBRTNEOzs7O0dBSUc7QUFFSCxBQUFBLElBQUksQ0FBQztFQUNILFdBQVcsRUFBRSxVQUFXO0VB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VyxFT29CL0QsQVB2Qk8sVU91QkcsR1B2QkosQ0FBQyxBQUFBLFdBQVc7QU93QmxCLEFQeEJPLE9Pd0JBLEdQeEJELENBQUMsQUFBQSxXQUFXO0FPeUJsQixBUHpCTyxNT3lCRCxHUHpCQSxDQUFDLEFBQUEsV0FBVyxFT3VCbEIsQVB0QnNCLFVPc0JaLEdQdEJKLENBQUMsQUFBQSxXQUFXLEdBQUcsQ0FBQyxBQUFBLFdBQVc7QU91QmpDLEFQdkJzQixPT3VCZixHUHZCRCxDQUFDLEFBQUEsV0FBVyxHQUFHLENBQUMsQUFBQSxXQUFXO0FPd0JqQyxBUHhCc0IsTU93QmhCLEdQeEJBLENBQUMsQUFBQSxXQUFXLEdBQUcsQ0FBQyxBQUFBLFdBQVcsRU9zQmpDLEFQckJxQyxVT3FCM0IsR1ByQkosQ0FBQyxBQUFBLFdBQVcsR0FBRyxDQUFDLEFBQUEsV0FBVyxHQUFHLENBQUMsQUFBQSxXQUFXO0FPc0JoRCxBUHRCcUMsT09zQjlCLEdQdEJELENBQUMsQUFBQSxXQUFXLEdBQUcsQ0FBQyxBQUFBLFdBQVcsR0FBRyxDQUFDLEFBQUEsV0FBVztBT3VCaEQsQVB2QnFDLE1PdUIvQixHUHZCQSxDQUFDLEFBQUEsV0FBVyxHQUFHLENBQUMsQUFBQSxXQUFXLEdBQUcsQ0FBQyxBQUFBLFdBQVcsRU9xQmhELEFQcEJvRCxVT29CMUMsR1BwQkosQ0FBQyxBQUFBLFdBQVcsR0FBRyxDQUFDLEFBQUEsV0FBVyxHQUFHLENBQUMsQUFBQSxXQUFXLEdBQUcsQ0FBQyxBQUFBLFdBQVc7QU9xQi9ELEFQckJvRCxPT3FCN0MsR1ByQkQsQ0FBQyxBQUFBLFdBQVcsR0FBRyxDQUFDLEFBQUEsV0FBVyxHQUFHLENBQUMsQUFBQSxXQUFXLEdBQUcsQ0FBQyxBQUFBLFdBQVc7QU9zQi9ELEFQdEJvRCxNT3NCOUMsR1B0QkEsQ0FBQyxBQUFBLFdBQVcsR0FBRyxDQUFDLEFBQUEsV0FBVyxHQUFHLENBQUMsQUFBQSxXQUFXLEdBQUcsQ0FBQyxBQUFBLFdBQVcsQ0FBQztFQUN4RCxhQUFhLEVBQUUsQ0FBRSxHQUNwQjs7QUViTCw4REFBOEQ7QUFFOUQ7Ozs7O2dGQU1nRjtBQUVoRjs7Ozs7Ozs7Ozs7R0FXRztBQUVIO2dGQUNnRjtBQUtoRjs7Ozs7OztHQU9HO0FBS0g7Z0ZBQ2dGO0FBRWhGOzs7Ozs7O0dBT0c7QUFrQkg7Z0ZBQ2dGO0FBSWhGOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFDSCxBQUFBLFFBQVEsQ0FBQztFQUNMLE9BQU8sRUFBRSxLQUFNO0VBQUUsT0FBTztFQUN4QixNQUFNLEVBQUUsQ0FBRTtFQUFFLE9BQU87RUFDbkIsT0FBTyxFQUFFLENBQUU7RUFBRSxPQUFPO0VBQ3BCLFlBQVksRUFBRSxJQUFLO0VBQUUsT0FBTztFQUM1QixLQUFLLEVBQUUsSUFBSztFQUFFLE9BQU8sRUFDeEI7O0FBR0c7Ozs7Ozs7O09BUUc7QUFDSCxBQUFBLG1CQUFtQjtBQUNuQixBQUFBLGtCQUFrQixDQUFDO0VBQ2YsT0FBTyxFQUFFLFVBQVc7RUFDcEIsT0FBTyxFQUFFLENBQUU7RUFBRSxPQUFPO0VBQ3BCLGNBQWMsRUFBRSxHQUFJO0VBQUUsT0FBTyxFQUNoQzs7QUFHRDs7T0FFRztBQUNILEFBQUEsbUJBQW1CLENBQUM7RUFDaEIsS0FBSyxFQUFFLElBQUssR0FDZjs7QUFHRzs7OztXQUlHO0FBQ0gsQUFBbUIsa0JBQUQsQ0FBQyxHQUFHLENBQUM7RUFDbkIsU0FBUyxFQUFFLElBQUs7RUFDaEIsS0FBSyxFQUFFLElBQUssR0FDZjs7QUFJVDtnRkFDZ0Y7QUFFaEYsQUFFTSxhQUZPLEdBRVAsbUJBQW1CO0FBRnpCLEFBR00sYUFITyxHQUdQLGtCQUFrQixDQUFDO0VBQ2pCLGNBQWMsRUFBRSxHQUFJLEdBQ3ZCOztBQUdMLEFBRU0sZ0JBRlUsR0FFVixtQkFBbUI7QUFGekIsQUFHTSxnQkFIVSxHQUdWLGtCQUFrQixDQUFDO0VBQ2pCLGNBQWMsRUFBRSxNQUFPLEdBQzFCOztBQUdMLEFBRU0sZ0JBRlUsR0FFVixtQkFBbUI7QUFGekIsQUFHTSxnQkFIVSxHQUdWLGtCQUFrQixDQUFDO0VBQ2pCLGNBQWMsRUFBRSxNQUFPLEdBQzFCOztBQUtMO2dGQUNnRjtBQUVoRjs7O0dBR0c7QUFDSCxBQUFBLGVBQWUsQ0FBQztFQUNaLFlBQVksRUFBRSxLQUFNO0VBRXBCOzs7O09BSUcsRUFLTjtFQVpELEFBUU0sZUFSUyxHQVFULG1CQUFtQjtFQVJ6QixBQVNNLGVBVFMsR0FTVCxrQkFBa0IsQ0FBQztJQUNqQixLQUFLLEVBQUUsSUFBSyxHQUNmOztBQUtMO2dGQUNnRjtBQUVoRixBQUVNLGdCQUZVLEdBRVYsbUJBQW1CO0FBRnpCLEFBR00sZ0JBSFUsR0FHVixrQkFBa0IsQ0FBQztFUGpJakIsT0FBTztFQUVILE9BQU87RUFJSCxZQUFZLEVIbEJnQixJQUFJLENHa0JYLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsWUFBWSxFQXBGWCxVQUFNLENBb0YwQixBQUFVLEdPd0d0RDtFQVRMLEFBRU0sZ0JBRlUsR0FFVixtQkFBbUIsQUFJaEIsWUFBWTtFQU5yQixBQUdNLGdCQUhVLEdBR1Ysa0JBQWtCLEFBR2YsWUFBWSxDQUFDO0lBQ1YsWUFBWSxFQUFFLENBQUUsR0FDbkI7O0FBTVQ7Z0ZBQ2dGO0FBRWhGLEFBQUEsa0JBQWtCLENBQUM7RUEzSmYsT0FBTyxFQUFFLEtBQU07RUFBRSxPQUFPLEVBNkozQjtFQUZELEFBekpNLGtCQXlKWSxHQXpKWixtQkFBbUI7RUF5SnpCLEFBeEpNLGtCQXdKWSxHQXhKWixrQkFBa0IsQ0FBQztJQUNqQixPQUFPLEVBQUUsS0FBTTtJQUFFLE9BQU87SUFDeEIsS0FBSyxFQUFFLElBQUs7SUFBRSxPQUFPO0lBQ3JCLFlBQVksRUFBRSxDQUFFO0lBQUUsT0FBTyxFQU01QjtJQStJTCxBQW5KUSxrQkFtSlUsR0F6SlosbUJBQW1CLENBTWpCLEdBQUc7SUFtSlgsQUFuSlEsa0JBbUpVLEdBeEpaLGtCQUFrQixDQUtoQixHQUFHLENBQUM7TUFDQSxTQUFTLEVBQUUsSUFBSztNQUFFLE9BQU87TUFDekIsTUFBTSxFQUFFLElBQUs7TUFBRSxPQUFPLEVBQ3pCOztBQXNKVDtnRkFDZ0Y7QUFFaEYsMkNBQTJDO0FQRzNCLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RU9BekMsQUFBQSx3QkFBd0IsQ0FBeEI7SUF2S0osT0FBTyxFQUFFLEtBQU07SUFBRSxPQUFPLEVBeUtuQjtJQUZELEFBcktGLHdCQXFLMEIsR0FySzFCLG1CQUFtQjtJQXFLakIsQUFwS0Ysd0JBb0swQixHQXBLMUIsa0JBQWtCLENBQUM7TUFDakIsT0FBTyxFQUFFLEtBQU07TUFBRSxPQUFPO01BQ3hCLEtBQUssRUFBRSxJQUFLO01BQUUsT0FBTztNQUNyQixZQUFZLEVBQUUsQ0FBRTtNQUFFLE9BQU8sRUFNNUI7TUEySkcsQUEvSkEsd0JBK0p3QixHQXJLMUIsbUJBQW1CLENBTWpCLEdBQUc7TUErSkgsQUEvSkEsd0JBK0p3QixHQXBLMUIsa0JBQWtCLENBS2hCLEdBQUcsQ0FBQztRQUNBLFNBQVMsRUFBRSxJQUFLO1FBQUUsT0FBTztRQUN6QixNQUFNLEVBQUUsSUFBSztRQUFFLE9BQU8sRUFDekI7O0FQNEpPLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUssT0FBTyxTQUFTLEVBQUUsS0FBSztFT0FoRSxBQUFBLHVCQUF1QixDQUF2QjtJQXZLSixPQUFPLEVBQUUsS0FBTTtJQUFFLE9BQU8sRUF5S25CO0lBRkQsQUFyS0YsdUJBcUt5QixHQXJLekIsbUJBQW1CO0lBcUtqQixBQXBLRix1QkFvS3lCLEdBcEt6QixrQkFBa0IsQ0FBQztNQUNqQixPQUFPLEVBQUUsS0FBTTtNQUFFLE9BQU87TUFDeEIsS0FBSyxFQUFFLElBQUs7TUFBRSxPQUFPO01BQ3JCLFlBQVksRUFBRSxDQUFFO01BQUUsT0FBTyxFQU01QjtNQTJKRyxBQS9KQSx1QkErSnVCLEdBckt6QixtQkFBbUIsQ0FNakIsR0FBRztNQStKSCxBQS9KQSx1QkErSnVCLEdBcEt6QixrQkFBa0IsQ0FLaEIsR0FBRyxDQUFDO1FBQ0EsU0FBUyxFQUFFLElBQUs7UUFBRSxPQUFPO1FBQ3pCLE1BQU0sRUFBRSxJQUFLO1FBQUUsT0FBTyxFQUN6Qjs7QUNqRVQsOERBQThEO0FBRTlEOztnRkFHZ0Y7QUFFaEY7Z0ZBQ2dGO0FBT2hGO2dGQUNnRjtBQUloRjs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILEFBQUEsT0FBTyxDQUFDO0VBQ0osUUFBUSxFQUFFLFFBQVM7RUFDbkIsT0FBTyxFQUFFLFlBQWE7RUFDdEIsV0FBVyxFQUFFLENBQUU7RUFDZixjQUFjLEVBQUUsQ0FBRTtFQUNsQixNQUFNLEVBQUUsU0FBVTtFQUNsQixNQUFNLEVBQUUsQ0FBRTtFQUNWLFVBQVUsRUFBRSxXQUFZO0VBQ3hCLEtBQUssRUFBRSxPQUFRO0VBQUUsT0FBTztFQUN4QixNQUFNLEVBQUUsT0FBUTtFQUNoQixJQUFJLEVBQUUsT0FBUTtFQUFFLE9BQU87RUFDdkIsV0FBVyxFQUFFLENBQUU7RUFBRSxPQUFPO0VBQ3hCLFlBQVksRUFBRSxHQUFJO0VBQUUsT0FBTztFQUMzQixhQUFhLEVBQUUsR0FBSTtFQUFFLE9BQU87RUFDNUIsVUFBVSxFQUFFLE1BQU87RUFDbkIsZUFBZSxFQUFFLElBQUs7RUFDdEIsY0FBYyxFQUFFLE1BQU87RUFDdkIsV0FBVyxFQUFFLE1BQU87RUFBRSxPQUFPO0VBQzdCLGtCQUFrQixFQUFFLElBQUs7RUFBRSxPQUFPO0VBU2xDOztPQUVHLEVBS047RUFsQ0QsQUFBQSxPQUFPLEFBb0JGLE1BQU0sRUFwQlgsQUFBQSxPQUFPLEFBcUJGLE1BQU0sRUFyQlgsQUFBQSxPQUFPLEFBc0JGLE9BQU8sQ0FBQztJQUNMLGVBQWUsRUFBRSxJQUFLLEdBQ3pCO0VBeEJMLEFBQUEsT0FBTyxBQThCRixrQkFBa0IsQ0FBQztJQUNoQixNQUFNLEVBQUUsQ0FBRTtJQUNWLE9BQU8sRUFBRSxDQUFFLEdBQ2Q7O0FBS0w7Z0ZBQ2dGO0FBRWhGOztHQUVHO0FBQ0gsQUFBQSxjQUFjLENBQUM7RUFDWCxhQUFhLEVBQUUsS0FBTTtFQUNyQixZQUFZLEVBQUUsS0FBTTtFQUNwQixXQUFXLEVBQUUsR0FBSSxHQUNwQjs7QUFDRCxBQUFBLGNBQWMsQ0FBQztFQUNYLGFBQWEsRUFBRSxLQUFNO0VBQ3JCLFlBQVksRUFBRSxLQUFNO0VBQ3BCLFdBQVcsRUFBRSxDQUFFLEdBQ2xCOztBQUNELEFBQUEsYUFBYSxDQUFDO0VBQ1YsYUFBYSxFQUFFLEdBQUk7RUFDbkIsWUFBWSxFQUFFLEdBQUk7RUFDbEIsV0FBVyxFQUFFLENBQUUsR0FDbEI7O0FBR0Q7O0dBRUc7QUFDSCxBQUFBLGFBQWEsQ0FBQztFQUNWLE9BQU8sRUFBRSxLQUFNO0VBQ2YsS0FBSyxFQUFFLElBQUssR0FDZjs7QUFJRDtnRkFDZ0Y7QUFFaEY7O0dBRUc7QUFDSCxBQUFBLGNBQWMsQ0FBQztFUnpEUCxPQUFPO0VBRUgsT0FBTztFQUlILFNBQVksRUhYZ0IsSUFBSSxDR1dYLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsU0FBWSxFQXBGWCxVQUFNLENBb0YwQixBQUFVLEdRNEIxRDs7QUFDRCxBQUFBLGFBQWEsQ0FBQztFUjVETixPQUFPO0VBRUgsT0FBTztFQUlILFNBQVksRUhWZ0IsSUFBSSxDR1VYLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsU0FBWSxFQXBGWCxVQUFNLENBb0YwQixBQUFVLEdRK0IxRDs7QUFDRCxBQUFBLGNBQWMsQ0FBQztFUi9EUCxPQUFPO0VBRUgsT0FBTztFQUlILFNBQVksRUhUZ0IsSUFBSSxDR1NYLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsU0FBWSxFQXBGWCxVQUFNLENBb0YwQixBQUFVLEdRa0MxRDs7QUFDRCxBQUFBLGNBQWMsQ0FBQztFUmxFUCxPQUFPO0VBRUgsT0FBTztFQUlILFNBQVksRUhSZ0IsSUFBSSxDR1FYLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsU0FBWSxFQXBGWCxVQUFNLENBb0YwQixBQUFVLEdRcUMxRDs7QUFDRCxBQUFBLGdCQUFnQixDQUFDO0VSckVULE9BQU87RUFFSCxPQUFPO0VBSUgsU0FBWSxFSFBnQixJQUFJLENHT1gsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxTQUFZLEVBcEZYLFVBQU0sQ0FvRjBCLEFBQVUsR1F3QzFEOztBQUNELEFBQUEsYUFBYSxDQUFDO0VSeEVOLE9BQU87RUFFSCxPQUFPO0VBSUgsU0FBWSxFSE5nQixJQUFJLENHTVgsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxTQUFZLEVBcEZYLElBQU0sQ0FvRjBCLEFBQVUsR1EyQzFEOztBQUNELEFBQUEsY0FBYyxDQUFDO0VSM0VQLE9BQU87RUFFSCxPQUFPO0VBSUgsU0FBWSxFSEpnQixJQUFJLENHSVgsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxTQUFZLEVBcEZYLFVBQU0sQ0FvRjBCLEFBQVUsR1E4QzFEOztBQUNELEFBQUEsY0FBYyxDQUFDO0VSOUVQLE9BQU87RUFFSCxPQUFPO0VBSUgsU0FBWSxFSEhnQixJQUFJLENHR1gsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxTQUFZLEVBcEZYLFVBQU0sQ0FvRjBCLEFBQVUsR1FpRDFEOztBQUdEOztHQUVHO0FBQ0gsQUFBQSxpQkFBaUIsQ0FBQztFQUNkLGNBQWMsRUFBRSxRQUFTO0VBQ3pCLFNBQVMsRUFBRSxPQUFRO0VBQ25CLFdBQVcsRUFBRSxPQUFRO0VBQ3JCLGFBQWEsRUFBRSxLQUFNO0VBQ3JCLFlBQVksRUFBRSxLQUFNLEdBQ3ZCOztBQUlEO2dGQUNnRjtBQUVoRixBQUFtQixLQUFkLENBQUEsQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLENBQ0QsT0FBTyxDQUFDO0VBQ0wsTUFBTSxFQUFFLEdBQUksR0FDZjs7QUFITCxBQUFtQixLQUFkLENBQUEsQUFBQSxJQUFDLENBQUssUUFBUSxBQUFiLENBSUQsY0FBYyxDQUFDO0VBQ1osTUFBTSxFQUFFLEtBQU0sR0FDakI7O0FBTkwsQUFBbUIsS0FBZCxDQUFBLEFBQUEsSUFBQyxDQUFLLFFBQVEsQUFBYixDQU9ELGNBQWMsQ0FBQztFQUNaLE1BQU0sRUFBRSxHQUFJLEdBQ2Y7O0FBVEwsQUFBbUIsS0FBZCxDQUFBLEFBQUEsSUFBQyxDQUFLLFFBQVEsQUFBYixDQVVELGFBQWEsQ0FBQztFQUNYLE1BQU0sRUFBRSxHQUFJLEdBQ2Y7O0FDakxMLGdFQUFnRTtBQUVoRTs7O2dGQUlnRjtBQUVoRjtnRkFDZ0Y7QUFPaEY7Z0ZBQ2dGO0FDaEJoRiwyREFBMkQ7QUFFM0Q7O2dGQUdnRjtBQUVoRjs7Ozs7Ozs7O0dBU0c7QUFRSDs7R0FFRztBQUlIOztHQUVHO0FBV0g7Z0ZBQ2dGO0FBR2hGOzs7Ozs7Ozs7R0FTRztBQUNILEFBQUEsS0FBSyxDQUFDO0VBQ0YsY0FBYyxFQUFFLGFBQWM7RUFBRSxPQUFPO0VBQ3ZDLFNBQVMsRUFBRSxDQUFFO0VBQUUsT0FBTztFVk1sQixPQUFPO0VBRUgsT0FBTztFQUlILFdBQVksRVU1Q0ssS0FBTSxDVjRDRixBQUFVO0VBSXZDLE9BQU87RUFpQkgsT0FBTztFQUlILFdBQVksRUFwRlgsV0FBTSxDQW9GMEIsQUFBVTtFVXBDaEIsT0FBTztFQUM5QyxPQUFPLEVBQUUsQ0FBRTtFQUNYLFVBQVUsRUFBRSxJQUFLO0VBQUUsT0FBTztFQUMxQixVQUFVLEVBQUUsSUFBSztFQUFFLE9BQU8sRUFDN0I7O0FBR0Q7OztHQUdHO0FBQ0gsQUFBUSxLQUFILEdBQUcsS0FBSyxDQUFDO0VBQ1YsUUFBUSxFQUFFLE1BQU87RUFDakIsWUFBWSxFQUFFLENBQUU7RUFDaEIsV0FBVyxFQUFFLENBQUUsR0FDbEI7O0FBR0c7Ozs7Ozs7OztPQVNHO0FBQ0gsQUFBQSxXQUFXLENBQUM7RVZ2QlIsT0FBTztFQUVILE9BQU87RUFJSCxZQUFZLEVVNUNLLElBQU0sQ1Y0Q0YsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxZQUFZLEVBcEZYLFVBQU0sQ0FvRjBCLEFBQVU7RVVObkQsT0FBTyxFQUFFLFlBQWE7RUFBRSxPQUFPO0VBQy9CLEtBQUssRUFBRSxJQUFLO0VBQ1osTUFBTSxFQUFFLENBQUU7RUFDVixjQUFjLEVBQUUsR0FBSTtFQUFFLE9BQU87RUFDN0IsVUFBVSxFQUFFLElBQUs7RUFBRSxPQUFPO0VWN0IxQixPQUFPO0VBRUgsT0FBTztFQUlILFNBQVksRUhuQmdCLElBQUksQ0dtQlgsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxTQUFZLEVBcEZYLElBQU0sQ0FvRjBCLEFBQVU7RUF1RjNDLFdBQVcsRUFBRyxPQUFJO0VVeEZXLE9BQU8sRUFDL0M7O0FBR0Q7Ozs7T0FJRztBQUNILEFBQUEsbUJBQW1CLENBQUM7RUFDaEIsT0FBTyxFQUFFLEtBQU07RUFDZixNQUFNLEVBQUUsTUFBTyxHQUNsQjs7QUFpQ0Q7Ozs7T0FJRztBQUNILEFBQUEsYUFBYSxDQUFDO0VBQ1YsVUFBVSxFQUFFLE1BQU8sR0FLdEI7RUFORCxBQUdNLGFBSE8sR0FHUCxXQUFXLENBQUM7SUFDVixVQUFVLEVBQUUsSUFBSyxHQUNwQjs7QUFRTDs7T0FFRztBQUNILEFBQ00sYUFETyxHQUNQLFdBQVcsQ0FBQztFQUNWLGNBQWMsRUFBRSxNQUFPLEdBQzFCOztBQUVMLEFBQ00sYUFETyxHQUNQLFdBQVcsQ0FBQztFQUNWLGNBQWMsRUFBRSxNQUFPLEdBQzFCOztBQXdCTDs7T0FFRztBQUNILEFBQUEsV0FBVyxDQUFDO0VWbklSLE9BQU87RUFFSCxPQUFPO0VBSUgsV0FBWSxFVThIUSxLQUFPLENWOUhOLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsV0FBWSxFQXBGWCxXQUFNLENBb0YwQixBQUFVLEdVMEd0RDtFQU5ELEFBR00sV0FISyxHQUdMLFdBQVcsQ0FBQztJVnRJZCxPQUFPO0lBRUgsT0FBTztJQUlILFlBQVksRVVpSVksSUFBTyxDVmpJVixBQUFVO0lBSXZDLE9BQU87SUFpQkgsT0FBTztJQUlILFlBQVksRUFwRlgsVUFBTSxDQW9GMEIsQUFBVSxHVXlHbEQ7O0FBUUw7Ozs7T0FJRztBQUNILEFBQUEsWUFBWTtBQUNaLEFBQUEsaUJBQWlCLENBQUM7RUFDZCxNQUFNLEVBQUUsQ0FBRSxHQUtiO0VBUEQsQUFJTSxZQUpNLEdBSU4sV0FBVztFQUhqQixBQUdNLGlCQUhXLEdBR1gsV0FBVyxDQUFDO0lBQ1YsT0FBTyxFQUFFLENBQUUsR0FDZDs7QUM3TlQsaUVBQWlFO0FBRWpFOzs7O2dGQUtnRjtBQUVoRjtnRkFDZ0Y7QUFFaEY7O0dBRUc7QUFLSDs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7O0dBV0c7QUFLSDs7R0FFRztBQU9IO2dGQUNnRjtBQUVoRjs7R0FFRztBQWVIOzs7Ozs7R0FNRztBQThFSDtnRkFDZ0Y7QUFFaEY7O0dBRUc7QUFoRkM7Ozs7O09BS0c7QUFFQyxpREFBaUQ7QUFJN0MsMEJBQTBCO0FBSTFCLHFDQUFxQztBQVVyQzs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsT0FBTyxDQUFQO0VBS1ksS0FBSyxFQUFFLFFBQVUsR0FPNUI7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFJakMseUJBQXlCO0FBRXpCLHlCQUF5QjtBQUk3Qjs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsT0FBTyxDQUFQO0VBS1ksS0FBSyxFQUFFLFNBQVUsR0FPNUI7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFJakMseUJBQXlCO0FBRXpCLHlCQUF5QjtBQUk3Qjs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsT0FBTyxDQUFQO0VBS1ksS0FBSyxFQUFFLEdBQVUsR0FPNUI7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFJakMseUJBQXlCO0FBRXpCLHlCQUF5QjtBQUk3Qjs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsT0FBTyxDQUFQO0VBS1ksS0FBSyxFQUFFLFNBQVUsR0FPNUI7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFVckM7OztlQUdHO0FBR0g7O2VBRUc7QUFDSCxBQUFBLE9BQU8sQ0FBUDtFQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCOztBQW5DRCwwQkFBMEI7QUFJMUIscUNBQXFDO0FBSWpDLHlCQUF5QjtBQUV6Qix5QkFBeUI7QUFJN0I7OztlQUdHO0FBR0g7O2VBRUc7QUFDSCxBQUFBLE9BQU8sQ0FBUDtFQUtZLEtBQUssRUFBRSxHQUFVLEdBTzVCOztBQW5DRCwwQkFBMEI7QUFJMUIscUNBQXFDO0FBVXJDOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxPQUFPLENBQVA7RUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81Qjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQUlqQyx5QkFBeUI7QUFFekIseUJBQXlCO0FBSTdCOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxPQUFPLENBQVA7RUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81Qjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQUlqQyx5QkFBeUI7QUFFekIseUJBQXlCO0FBSTdCOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxPQUFPLENBQVA7RUFLWSxLQUFLLEVBQUUsR0FBVSxHQU81Qjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQUlqQyx5QkFBeUI7QUFFekIseUJBQXlCO0FBSTdCOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxRQUFRLENBQVI7RUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81Qjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQVVyQzs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsUUFBUSxDQUFSO0VBS1ksS0FBSyxFQUFFLFNBQVUsR0FPNUI7O0FBTVQ7O09BRUc7QUFFQyxBQUFBLE1BQU0sQ0FBTjtFQUNJLEtBQUssRUFBRSxJQUFLLEdBQ2Y7O0FBQ0QsQUFBQSxPQUFPLENBQVA7RUFDSSxLQUFLLEVBQUUsSUFBSyxHQUNmOztBQXlCVDs7SUFFSTtDQUVBLEFBQUEsQUFBZSxLQUFkLEVBQU8sT0FBTyxBQUFkLEVBQUQ7RUFDSSxRQUFRLEVBQUMsUUFBUyxHQUNyQjs7QUE1RkQ7Ozs7O09BS0c7QUFFQyxpREFBaUQ7QUFJN0MsMEJBQTBCO0FBSTFCLHFDQUFxQztBQVVyQzs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsVUFBVSxDQUFWO0VBT1ksSUFBSSxFQUFFLFFBQVUsR0FLM0I7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFJakMseUJBQXlCO0FBRXpCLHlCQUF5QjtBQUk3Qjs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsVUFBVSxDQUFWO0VBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFJakMseUJBQXlCO0FBRXpCLHlCQUF5QjtBQUk3Qjs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsVUFBVSxDQUFWO0VBT1ksSUFBSSxFQUFFLEdBQVUsR0FLM0I7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFJakMseUJBQXlCO0FBRXpCLHlCQUF5QjtBQUk3Qjs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsVUFBVSxDQUFWO0VBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7O0FBbkNELDBCQUEwQjtBQUkxQixxQ0FBcUM7QUFVckM7OztlQUdHO0FBR0g7O2VBRUc7QUFDSCxBQUFBLFVBQVUsQ0FBVjtFQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCOztBQW5DRCwwQkFBMEI7QUFJMUIscUNBQXFDO0FBSWpDLHlCQUF5QjtBQUV6Qix5QkFBeUI7QUFJN0I7OztlQUdHO0FBR0g7O2VBRUc7QUFDSCxBQUFBLFVBQVUsQ0FBVjtFQU9ZLElBQUksRUFBRSxHQUFVLEdBSzNCOztBQW5DRCwwQkFBMEI7QUFJMUIscUNBQXFDO0FBVXJDOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxVQUFVLENBQVY7RUFPWSxJQUFJLEVBQUUsU0FBVSxHQUszQjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQUlqQyx5QkFBeUI7QUFFekIseUJBQXlCO0FBSTdCOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxVQUFVLENBQVY7RUFPWSxJQUFJLEVBQUUsU0FBVSxHQUszQjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQUlqQyx5QkFBeUI7QUFFekIseUJBQXlCO0FBSTdCOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxVQUFVLENBQVY7RUFPWSxJQUFJLEVBQUUsR0FBVSxHQUszQjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQUlqQyx5QkFBeUI7QUFFekIseUJBQXlCO0FBSTdCOzs7ZUFHRztBQUdIOztlQUVHO0FBQ0gsQUFBQSxXQUFXLENBQVg7RUFPWSxJQUFJLEVBQUUsU0FBVSxHQUszQjs7QUFuQ0QsMEJBQTBCO0FBSTFCLHFDQUFxQztBQVVyQzs7O2VBR0c7QUFHSDs7ZUFFRztBQUNILEFBQUEsV0FBVyxDQUFYO0VBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7O0FBTVQ7O09BRUc7QUFTQyxBQUFBLFNBQVMsQ0FBVDtFQUNJLElBQUksRUFBRSxDQUFFLEdBQ1g7O0FBZ0NUOztJQUVJO0FBVUo7Z0ZBQ2dGO0FYNEJoRSxNQUFNLE1BQUQsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VXMUk3Qzs7Ozs7T0FLRztFQUVDLGlEQUFpRDtFQUk3QywwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsUUFBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGFBQWEsQ0FBYjtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsYUFBYSxDQUFiO0lBS1ksS0FBSyxFQUFFLEdBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGFBQWEsQ0FBYjtJQUtZLEtBQUssRUFBRSxHQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGFBQWEsQ0FBYjtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsYUFBYSxDQUFiO0lBS1ksS0FBSyxFQUFFLFNBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsR0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGNBQWMsQ0FBZDtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGNBQWMsQ0FBZDtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBTVQ7O09BRUc7RUFFQyxBQUFBLFlBQVksQ0FBWjtJQUNJLEtBQUssRUFBRSxJQUFLLEdBQ2Y7RUFDRCxBQUFBLGFBQWEsQ0FBYjtJQUNJLEtBQUssRUFBRSxJQUFLLEdBQ2Y7O0FYNkVPLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUssT0FBTyxTQUFTLEVBQUUsS0FBSztFVzFJcEU7Ozs7O09BS0c7RUFFQyxpREFBaUQ7RUFJN0MsMEJBQTBCO0VBSTFCLHFDQUFxQztFQVVyQzs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsWUFBWSxDQUFaO0lBS1ksS0FBSyxFQUFFLFFBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxZQUFZLENBQVo7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLFlBQVksQ0FBWjtJQUtZLEtBQUssRUFBRSxHQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsWUFBWSxDQUFaO0lBS1ksS0FBSyxFQUFFLFNBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQVVyQzs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsWUFBWSxDQUFaO0lBS1ksS0FBSyxFQUFFLFNBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxZQUFZLENBQVo7SUFLWSxLQUFLLEVBQUUsR0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxZQUFZLENBQVo7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLFlBQVksQ0FBWjtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsWUFBWSxDQUFaO0lBS1ksS0FBSyxFQUFFLEdBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQU1UOztPQUVHO0VBRUMsQUFBQSxXQUFXLENBQVg7SUFDSSxLQUFLLEVBQUUsSUFBSyxHQUNmO0VBQ0QsQUFBQSxZQUFZLENBQVo7SUFDSSxLQUFLLEVBQUUsSUFBSyxHQUNmOztBWDZFTyxNQUFNLE1BQUQsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VXMUk3Qzs7Ozs7T0FLRztFQUVDLGlEQUFpRDtFQUk3QywwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsUUFBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGFBQWEsQ0FBYjtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsYUFBYSxDQUFiO0lBS1ksS0FBSyxFQUFFLEdBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsU0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGFBQWEsQ0FBYjtJQUtZLEtBQUssRUFBRSxHQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGFBQWEsQ0FBYjtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsYUFBYSxDQUFiO0lBS1ksS0FBSyxFQUFFLFNBQVUsR0FPNUI7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxhQUFhLENBQWI7SUFLWSxLQUFLLEVBQUUsR0FBVSxHQU81QjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGNBQWMsQ0FBZDtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGNBQWMsQ0FBZDtJQUtZLEtBQUssRUFBRSxTQUFVLEdBTzVCO0VBTVQ7O09BRUc7RUFFQyxBQUFBLFlBQVksQ0FBWjtJQUNJLEtBQUssRUFBRSxJQUFLLEdBQ2Y7RUFDRCxBQUFBLGFBQWEsQ0FBYjtJQUNJLEtBQUssRUFBRSxJQUFLLEdBQ2Y7O0FYNkVPLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RVcxSTdDOzs7OztPQUtHO0VBRUMsaURBQWlEO0VBSTdDLDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxRQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZ0JBQWdCLENBQWhCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFPWSxJQUFJLEVBQUUsR0FBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZ0JBQWdCLENBQWhCO0lBT1ksSUFBSSxFQUFFLEdBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQVVyQzs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZ0JBQWdCLENBQWhCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFPWSxJQUFJLEVBQUUsU0FBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxHQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsaUJBQWlCLENBQWpCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQVVyQzs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsaUJBQWlCLENBQWpCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFNVDs7T0FFRztFQVNDLEFBQUEsZUFBZSxDQUFmO0lBQ0ksSUFBSSxFQUFFLENBQUUsR0FDWDs7QVh5RU8sTUFBTSxNQUFELE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSyxPQUFPLFNBQVMsRUFBRSxLQUFLO0VXMUlwRTs7Ozs7T0FLRztFQUVDLGlEQUFpRDtFQUk3QywwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxlQUFlLENBQWY7SUFPWSxJQUFJLEVBQUUsUUFBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGVBQWUsQ0FBZjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZUFBZSxDQUFmO0lBT1ksSUFBSSxFQUFFLEdBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxlQUFlLENBQWY7SUFPWSxJQUFJLEVBQUUsU0FBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBVXJDOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxlQUFlLENBQWY7SUFPWSxJQUFJLEVBQUUsU0FBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGVBQWUsQ0FBZjtJQU9ZLElBQUksRUFBRSxHQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGVBQWUsQ0FBZjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZUFBZSxDQUFmO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxlQUFlLENBQWY7SUFPWSxJQUFJLEVBQUUsR0FBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBTVQ7O09BRUc7RUFTQyxBQUFBLGNBQWMsQ0FBZDtJQUNJLElBQUksRUFBRSxDQUFFLEdBQ1g7O0FYeUVPLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RVcxSTdDOzs7OztPQUtHO0VBRUMsaURBQWlEO0VBSTdDLDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxRQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZ0JBQWdCLENBQWhCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFPWSxJQUFJLEVBQUUsR0FBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFVckM7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxTQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZ0JBQWdCLENBQWhCO0lBT1ksSUFBSSxFQUFFLEdBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQVVyQzs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsZ0JBQWdCLENBQWhCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQUlqQyx5QkFBeUI7RUFFekIseUJBQXlCO0VBSTdCOzs7ZUFHRztFQUdIOztlQUVHO0VBQ0gsQUFBQSxnQkFBZ0IsQ0FBaEI7SUFPWSxJQUFJLEVBQUUsU0FBVSxHQUszQjtFQW5DRCwwQkFBMEI7RUFJMUIscUNBQXFDO0VBSWpDLHlCQUF5QjtFQUV6Qix5QkFBeUI7RUFJN0I7OztlQUdHO0VBR0g7O2VBRUc7RUFDSCxBQUFBLGdCQUFnQixDQUFoQjtJQU9ZLElBQUksRUFBRSxHQUFVLEdBSzNCO0VBbkNELDBCQUEwQjtFQUkxQixxQ0FBcUM7RUFJakMseUJBQXlCO0VBRXpCLHlCQUF5QjtFQUk3Qjs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsaUJBQWlCLENBQWpCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFuQ0QsMEJBQTBCO0VBSTFCLHFDQUFxQztFQVVyQzs7O2VBR0c7RUFHSDs7ZUFFRztFQUNILEFBQUEsaUJBQWlCLENBQWpCO0lBT1ksSUFBSSxFQUFFLFNBQVUsR0FLM0I7RUFNVDs7T0FFRztFQVNDLEFBQUEsZUFBZSxDQUFmO0lBQ0ksSUFBSSxFQUFFLENBQUUsR0FDWDs7QUNwSlQsNkRBQTZEO0FBRTdEOzs7Z0ZBSWdGO0FBRWhGO2dGQUNnRjtBQU9oRjtnRkFDZ0Y7QUFHaEY7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxBQUFBLFVBQVU7QUFDVixBQUFBLE9BQU87QUFDUCxBQUFBLE1BQU0sQ0FBQztFQUdILE9BQU8sRUFBRSxLQUFNLEdBQ2xCOztBQUVELEFBQUEsVUFBVSxDQUFDO0VaMEJILE9BQU87RUFFSCxPQUFPO0VBSUgsT0FBWSxFWS9CRixJQUFNLENaK0JLLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsT0FBWSxFQXBGWCxVQUFNLENBb0YwQixBQUFVLEdZdkQxRDs7QUFFRCxBQUFBLE9BQU8sQ0FBQztFWnNCQSxPQUFPO0VBRUgsT0FBTztFQUlILE9BQVksRUhsQmdCLElBQUksQ0drQlgsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxPQUFZLEVBcEZYLFVBQU0sQ0FvRjBCLEFBQVUsR1luRDFEOztBQUVELHdDQUF3QztBQUN4QyxBQUFBLE1BQU0sQ0FBQztFWmlCQyxPQUFPO0VBRUgsT0FBTztFQUlILE9BQVksRVl0QkYsSUFBTSxDWnNCSyxBQUFVO0VBSXZDLE9BQU87RUFpQkgsT0FBTztFQUlILE9BQVksRUFwRlgsVUFBTSxDQW9GMEIsQUFBVSxHWTlDMUQ7O0FDbkRELDREQUE0RDtBQUU1RDs7O2dGQUlnRjtBQUVoRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSDtnRkFDZ0Y7QUFLaEY7O0dBRUc7QUFRSDtnRkFDZ0Y7QUN0Q2hGLGlFQUFpRTtBQUVqRTs7Z0ZBR2dGO0FBRWhGO2dGQUNnRjtBQU9oRjtnRkFDZ0Y7QUFJaEY7Ozs7Ozs7O0dBUUc7QUFDSCxBQUFBLElBQUksQ0FBQztFQUVELE9BQU8sRUFBRSxDQUFFO0VBQ1gsTUFBTSxFQUFFLENBQUU7RUFDVixVQUFVLEVBQUUsSUFBSyxHQVNwQjtFQWJELEFBTU0sSUFORixHQU1FLEVBQUU7RUFOUixBQVNVLElBVE4sR0FNRSxFQUFFLEdBR0UsQ0FBQyxDQUFDO0lBQ0EsT0FBTyxFQUFDLFlBQWEsR0FDeEI7O0FBS1Q7Ozs7Ozs7O0dBUUc7QUFDSCxBQUNNLGFBRE8sR0FDUCxFQUFFLENBQUM7RUFDRCxPQUFPLEVBQUUsU0FBVSxHQUt0QjtFQVBMLEFBSVUsYUFKRyxHQUNQLEVBQUUsR0FHRSxDQUFDLENBQUM7SUFDQSxPQUFPLEVBQUUsS0FBTSxHQUNsQjs7QUFLVDs7Ozs7Ozs7R0FRRztBQUNILEFBQUEsWUFBWSxDQUFDO0VBQ1QsVUFBVSxFQUFFLE1BQU8sR0FDdEI7O0FBR0Q7Ozs7Ozs7O0dBUUc7QUFDSCxBQUEwQixnQkFBVixHQUFHLEVBQUUsR0FBRyxFQUFFLEFBQUEsT0FBTyxDQUFDO0VBQzlCLE9BQU8sRUFBRSxLQUFNLEdBQ2xCOztBQUNELEFBQStCLHFCQUFWLEdBQUcsRUFBRSxHQUFHLEVBQUUsQUFBQSxPQUFPLENBQUM7RUFDbkMsT0FBTyxFQUFFLElBQUssR0FDakI7O0FBQ0QsQUFBMkMsZ0JBQTNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQSxBQUFBLGVBQUMsQUFBQSxDQUFnQixPQUFPLENBQUM7RUFDL0MsT0FBTyxFQUFFLHFCQUFJLENBQWlCLEdBQUcsR0FDcEM7O0FBR0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsQUFBQSxnQkFBZ0IsQ0FBQztFQUNiLFVBQVUsRUFBRSxNQUFPLEdBVXRCO0VBWEQsQUFHTSxnQkFIVSxHQUdWLEVBQUUsQ0FBQztJZGxERCxPQUFPO0lBRUgsT0FBTztJQUlILE9BQVksRURpQkksSUFBTSxDQ2pCRCxBQUFVO0lBSXZDLE9BQU87SUFpQkgsT0FBTztJQUlILE9BQVksRUFwRlgsVUFBTSxDQW9GMEIsQUFBVSxHYzBCdEQ7SUFWTCxBQU1VLGdCQU5NLEdBR1YsRUFBRSxHQUdFLENBQUMsQ0FBQztNZHJESixPQUFPO01BRUgsT0FBTztNQUlILE9BQVksRURpQkksSUFBTSxDQ2pCRCxBQUFVO01BSXZDLE9BQU87TUFpQkgsT0FBTztNQUlILE9BQVksRUFwRlgsVUFBTSxDQW9GMEIsQUFBVTtNQS9CbkQsT0FBTztNQUVILE9BQU87TUFJSCxNQUFZLEVEaUJJLEtBQU0sQ0NqQkQsQUFBVTtNQUl2QyxPQUFPO01BaUJILE9BQU87TUFJSCxNQUFZLEVBcEZYLFdBQU0sQ0FvRjBCLEFBQVUsR2N5QmxEOztBQUdMLEFBQXlCLHVCQUFGLENBQUMsQ0FBQyxBQUFBLE9BQU8sQ0FBQztFQUM3QixPQUFPLEVBQUUsS0FBTSxHQUNsQjs7QUFDRCxBQUF3QixzQkFBRixDQUFDLENBQUMsQUFBQSxNQUFNLENBQUM7RUFDM0IsT0FBTyxFQUFFLEtBQU0sR0FDbEI7O0FDaklMLDhEQUE4RDtBQUU5RDs7Ozs7Z0ZBTWdGO0FBRWhGOzs7Ozs7Ozs7OztHQVdHO0FBS0g7Z0ZBQ2dGO0FBRWhGOztHQUVHO0FBQ0gsQUFBQSxlQUFlLENBQUM7RUFDWixPQUFPLEVBQUUsZ0JBQWlCLEdBQzdCOztBQUNELEFBQUEsc0JBQXNCLENBQUM7RUFDbkIsT0FBTyxFQUFFLHVCQUF3QixHQUNwQzs7QUFDRCxBQUFBLGdCQUFnQixDQUFDO0VBQ2IsT0FBTyxFQUFFLGlCQUFrQixHQUM5Qjs7QUFHRDs7OztHQUlHO0FBQ0gsQUFBQSxRQUFRO0FBQ1IsQUFBQSxXQUFXLENBQUM7RUFDUixhQUFhLEVBQUUsWUFBYSxHQUMvQjs7QUFDRCx3QkFBd0I7QUFDeEIsQUFBQSxXQUFXLENBQUM7RWZZSixPQUFPO0VBRUgsT0FBTztFQUlILGFBQVksRURpQkksSUFBTSxDQ2pCRCxBQUFVO0VBSXZDLE9BQU87RUFpQkgsT0FBTztFQUlILGFBQVksRUFwRlgsVUFBTSxDQW9GMEIsQUFBVSxHZXpDMUQ7O0FBQ0QsbUJBQW1CO0FBQ25CLEFBQUEsS0FBSyxDQUFDO0VmUUUsT0FBTztFQUVILE9BQU87RUFJSCxhQUFZLEVIbEJnQixJQUFJLENHa0JYLEFBQVU7RUFJdkMsT0FBTztFQWlCSCxPQUFPO0VBSUgsYUFBWSxFQXBGWCxVQUFNLENBb0YwQixBQUFVLEdlckMxRDs7QUFDRCw4QkFBOEI7QUFDOUIsQUFBQSxZQUFZLENBQUM7RWZJTCxPQUFPO0VBRUgsT0FBTztFQUlILGFBQVksRWVUSSxJQUFNLENmU0QsQUFBVTtFQUl2QyxPQUFPO0VBaUJILE9BQU87RUFJSCxhQUFZLEVBcEZYLFVBQU0sQ0FvRjBCLEFBQVUsR2VqQzFEOztBQUdEOztHQUVHO0FBQ0gsQUFBQSxhQUFhLENBQUM7RUFDVixLQUFLLEVBQUUsZ0JBQWlCLEdBQzNCOztBQUNELEFBQUEsWUFBWSxDQUFDO0VBQ1QsS0FBSyxFQUFFLGVBQWdCLEdBQzFCOztBQUNELEFBQUEsWUFBWSxDQUFDO0VBQ1QsS0FBSyxFQUFFLGVBQWdCLEdBQzFCOztBQUlEO2dGQUNnRjtBQUVoRjs7R0FFRztBQUNILEFBQUEsV0FBVyxDQUFDO0VBQ1IsVUFBVSxFQUFFLGVBQWdCLEdBQy9COztBQUNELEFBQUEsYUFBYSxDQUFDO0VBQ1YsVUFBVSxFQUFFLGlCQUFrQixHQUNqQzs7QUFDRCxBQUFBLFlBQVksQ0FBQztFQUNULFVBQVUsRUFBRSxnQkFBaUIsR0FDaEM7O0FBR0Q7Ozs7R0FJRztBQUNILEFBQUEsWUFBWTtBQUNaLEFBQUEsY0FBYyxDQUFDO0VBQ1gsV0FBVyxFQUFFLGNBQWUsR0FDL0I7O0FBQ0QsQUFBQSxhQUFhO0FBQ2IsQUFBQSxlQUFlLENBQUM7RUFDWixXQUFXLEVBQUUsY0FBZSxHQUMvQjs7QUFDRCxBQUFBLGVBQWU7QUFDZixBQUFBLGlCQUFpQixDQUFDO0VBQ2QsV0FBVyxFQUFFLGNBQWUsR0FDL0I7O0FBR0Q7Ozs7R0FJRztBQUNILEFBQUEsV0FBVztBQUNYLEFBQUEsS0FBSyxDQUFDO0VBQ0YsY0FBYyxFQUFFLG9CQUFxQixHQUN4Qzs7QUFDRCxBQUFBLGdCQUFnQjtBQUNoQixBQUFBLFVBQVUsQ0FBQztFQUNQLGNBQWMsRUFBRSxvQkFBcUIsR0FDeEM7O0FBQ0QsQUFBQSxlQUFlO0FBQ2YsQUFBQSxTQUFTLENBQUM7RUFDTixjQUFjLEVBQUUscUJBQXNCLEdBQ3pDOztBQUdEOztHQUVHO0FBQ0gsQUFBQSxXQUFXLENBQUM7RUFDUixXQUFXLEVBQUUsQ0FBRSxHQUNsQjs7QUFDRCxBQUFBLFlBQVksQ0FBQztFQUNULFdBQVcsRUFBRSxPQUFrQixHQUNsQzs7QUFDRCxBQUFBLGVBQWUsQ0FBQztFQUNaLFdBQVcsRWxCNUY2QixPQUFpQixHa0I2RjVEOztBQUNELEFBQUEsWUFBWSxDQUFDO0VBQ1QsV0FBVyxFQUFFLEdBQWtCLEdBQ2xDOztBQUlEO2dGQUNnRjtBQUVoRjs7R0FFRztBQUNILEFBQUEsT0FBTyxDQUFDO0VBQ0osT0FBTyxFQUFFLGVBQWdCO0VBQ3pCLFVBQVUsRUFBRSxNQUFPLEdBQ3RCOztBQUdEOztHQUVHO0FBQ0gsQUFBQSxVQUFVLENBQUM7RUFDUCxVQUFVLEVBQUUsTUFBTyxHQUN0Qjs7QUFHRDs7O0dBR0c7QUFZSCxBQUFBLGVBQWUsQ0FBQztFQVZaLE1BQU0sRUFBRSxDQUFFO0VBQ1YsSUFBSSxFQUFFLGFBQUk7RUFDVixNQUFNLEVBQUUsR0FBSTtFQUNaLE1BQU0sRUFBRSxJQUFLO0VBQ2IsUUFBUSxFQUFFLE1BQU87RUFDakIsT0FBTyxFQUFFLENBQUU7RUFDWCxRQUFRLEVBQUUsUUFBUztFQUNuQixLQUFLLEVBQUUsR0FBSSxHQUtkOztBQUVEOztHQUVHO0FmeUJhLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RWV0QnpDLEFBQUEscUJBQXFCLENBQXJCO0lBbkJKLE1BQU0sRUFBRSxDQUFFO0lBQ1YsSUFBSSxFQUFFLGFBQUk7SUFDVixNQUFNLEVBQUUsR0FBSTtJQUNaLE1BQU0sRUFBRSxJQUFLO0lBQ2IsUUFBUSxFQUFFLE1BQU87SUFDakIsT0FBTyxFQUFFLENBQUU7SUFDWCxRQUFRLEVBQUUsUUFBUztJQUNuQixLQUFLLEVBQUUsR0FBSSxHQWNOOztBZm9CTyxNQUFNLE1BQUQsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLLE9BQU8sU0FBUyxFQUFFLEtBQUs7RWV0QmhFLEFBQUEsb0JBQW9CLENBQXBCO0lBbkJKLE1BQU0sRUFBRSxDQUFFO0lBQ1YsSUFBSSxFQUFFLGFBQUk7SUFDVixNQUFNLEVBQUUsR0FBSTtJQUNaLE1BQU0sRUFBRSxJQUFLO0lBQ2IsUUFBUSxFQUFFLE1BQU87SUFDakIsT0FBTyxFQUFFLENBQUU7SUFDWCxRQUFRLEVBQUUsUUFBUztJQUNuQixLQUFLLEVBQUUsR0FBSSxHQWNOOztBbkI1Skw7O09BRUc7QW9CL0NQO2dGQUVnRjtBQUVoRjs7OzRFQUc0RTtBQVU1RTs7R0FFRztBQU1TLEFBQUEsU0FBUyxDQUFUO0VBQ0ksZ0JBQWdCLEVuQnNEVSxPQUFPLEdtQnJEcEM7O0FBRUQsQUFBQSxZQUFZLENBQVo7RUFDSSxLQUFLLEVuQmtEcUIsT0FBTyxDbUJsRG5CLFVBQVUsR0FDM0I7O0FBRUQsQUFBQSxnQkFBZ0IsQ0FBaEI7RUFDSSxnQkFBZ0IsRW5COENVLE9BQU8sQ21COUNSLFVBQVUsR0FDdEM7O0FBQ0QsQUFBQSxXQUFXLENBQVg7RUFDSSxnQkFBZ0IsRW5CMkNVLE9BQU8sQ21CM0NSLFVBQVUsR0FLdEM7RUFORCxBQUdrQixXQUhQLENBR1AsY0FBYyxBQUFBLE1BQU0sQ0FBQTtJQUNoQixnQkFBZ0IsRW5Cd0NNLE9BQU8sQ21CeENKLFVBQVUsR0FDdEM7O0FBRUwsQUFBQSxhQUFhLENBQWI7RUFDSSxnQkFBZ0IsRW5Cb0NVLE9BQU8sQ21CcENSLFVBQVUsR0FLdEM7RUFORCxBQUFBLGFBQWEsQUFHUixNQUFNLENBQUE7SUFDSCxnQkFBZ0IsRUFBRSxPQUFPLENBQVksVUFBVSxHQUNsRDs7QUFFTCxBQUFZLFlBQUEsQUFBQSxhQUFhLENBQXpCO0VBQ0ksS0FBSyxFbkI2QnFCLE9BQU8sQ21CN0JuQixVQUFVO0VBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDbkI0QkQsT0FBTyxHbUIzQnBDOztBQTVCRCxBQUFBLGNBQWMsQ0FBZDtFQUNJLGdCQUFnQixFbkJ1RFUsT0FBTyxHbUJ0RHBDOztBQUVELEFBQUEsaUJBQWlCLENBQWpCO0VBQ0ksS0FBSyxFbkJtRHFCLE9BQU8sQ21CbkRuQixVQUFVLEdBQzNCOztBQUVELEFBQUEscUJBQXFCLENBQXJCO0VBQ0ksZ0JBQWdCLEVuQitDVSxPQUFPLENtQi9DUixVQUFVLEdBQ3RDOztBQUNELEFBQUEsZ0JBQWdCLENBQWhCO0VBQ0ksZ0JBQWdCLEVuQjRDVSxPQUFPLENtQjVDUixVQUFVLEdBS3RDO0VBTkQsQUFHa0IsZ0JBSEYsQ0FHWixjQUFjLEFBQUEsTUFBTSxDQUFBO0lBQ2hCLGdCQUFnQixFbkJ5Q00sT0FBTyxDbUJ6Q0osVUFBVSxHQUN0Qzs7QUFFTCxBQUFBLGtCQUFrQixDQUFsQjtFQUNJLGdCQUFnQixFbkJxQ1UsT0FBTyxDbUJyQ1IsVUFBVSxHQUt0QztFQU5ELEFBQUEsa0JBQWtCLEFBR2IsTUFBTSxDQUFBO0lBQ0gsZ0JBQWdCLEVBQUUsT0FBTyxDQUFZLFVBQVUsR0FDbEQ7O0FBRUwsQUFBWSxZQUFBLEFBQUEsa0JBQWtCLENBQTlCO0VBQ0ksS0FBSyxFbkI4QnFCLE9BQU8sQ21COUJuQixVQUFVO0VBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDbkI2QkQsT0FBTyxHbUI1QnBDOztBQTVCRCxBQUFBLFdBQVcsQ0FBWDtFQUNJLGdCQUFnQixFbkJ3RFUsT0FBTyxHbUJ2RHBDOztBQUVELEFBQUEsY0FBYyxDQUFkO0VBQ0ksS0FBSyxFbkJvRHFCLE9BQU8sQ21CcERuQixVQUFVLEdBQzNCOztBQUVELEFBQUEsa0JBQWtCLENBQWxCO0VBQ0ksZ0JBQWdCLEVuQmdEVSxPQUFPLENtQmhEUixVQUFVLEdBQ3RDOztBQUNELEFBQUEsYUFBYSxDQUFiO0VBQ0ksZ0JBQWdCLEVuQjZDVSxPQUFPLENtQjdDUixVQUFVLEdBS3RDO0VBTkQsQUFHa0IsYUFITCxDQUdULGNBQWMsQUFBQSxNQUFNLENBQUE7SUFDaEIsZ0JBQWdCLEVuQjBDTSxPQUFPLENtQjFDSixVQUFVLEdBQ3RDOztBQUVMLEFBQUEsZUFBZSxDQUFmO0VBQ0ksZ0JBQWdCLEVuQnNDVSxPQUFPLENtQnRDUixVQUFVLEdBS3RDO0VBTkQsQUFBQSxlQUFlLEFBR1YsTUFBTSxDQUFBO0lBQ0gsZ0JBQWdCLEVBQUUsT0FBTyxDQUFZLFVBQVUsR0FDbEQ7O0FBRUwsQUFBWSxZQUFBLEFBQUEsZUFBZSxDQUEzQjtFQUNJLEtBQUssRW5CK0JxQixPQUFPLENtQi9CbkIsVUFBVTtFQUN4QixVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ25COEJELE9BQU8sR21CN0JwQzs7QUE1QkQsQUFBQSxVQUFVLENBQVY7RUFDSSxnQkFBZ0IsRW5CeURVLE9BQU8sR21CeERwQzs7QUFFRCxBQUFBLGFBQWEsQ0FBYjtFQUNJLEtBQUssRW5CcURxQixPQUFPLENtQnJEbkIsVUFBVSxHQUMzQjs7QUFFRCxBQUFBLGlCQUFpQixDQUFqQjtFQUNJLGdCQUFnQixFbkJpRFUsT0FBTyxDbUJqRFIsVUFBVSxHQUN0Qzs7QUFDRCxBQUFBLFlBQVksQ0FBWjtFQUNJLGdCQUFnQixFbkI4Q1UsT0FBTyxDbUI5Q1IsVUFBVSxHQUt0QztFQU5ELEFBR2tCLFlBSE4sQ0FHUixjQUFjLEFBQUEsTUFBTSxDQUFBO0lBQ2hCLGdCQUFnQixFbkIyQ00sT0FBTyxDbUIzQ0osVUFBVSxHQUN0Qzs7QUFFTCxBQUFBLGNBQWMsQ0FBZDtFQUNJLGdCQUFnQixFbkJ1Q1UsT0FBTyxDbUJ2Q1IsVUFBVSxHQUt0QztFQU5ELEFBQUEsY0FBYyxBQUdULE1BQU0sQ0FBQTtJQUNILGdCQUFnQixFQUFFLEtBQU8sQ0FBWSxVQUFVLEdBQ2xEOztBQUVMLEFBQVksWUFBQSxBQUFBLGNBQWMsQ0FBMUI7RUFDSSxLQUFLLEVuQmdDcUIsT0FBTyxDbUJoQ25CLFVBQVU7RUFDeEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENuQitCRCxPQUFPLEdtQjlCcEM7O0FBNUJELEFBQUEsVUFBVSxDQUFWO0VBQ0ksZ0JBQWdCLEVuQjBEVSxPQUFPLEdtQnpEcEM7O0FBRUQsQUFBQSxhQUFhLENBQWI7RUFDSSxLQUFLLEVuQnNEcUIsT0FBTyxDbUJ0RG5CLFVBQVUsR0FDM0I7O0FBRUQsQUFBQSxpQkFBaUIsQ0FBakI7RUFDSSxnQkFBZ0IsRW5Ca0RVLE9BQU8sQ21CbERSLFVBQVUsR0FDdEM7O0FBQ0QsQUFBQSxZQUFZLENBQVo7RUFDSSxnQkFBZ0IsRW5CK0NVLE9BQU8sQ21CL0NSLFVBQVUsR0FLdEM7RUFORCxBQUdrQixZQUhOLENBR1IsY0FBYyxBQUFBLE1BQU0sQ0FBQTtJQUNoQixnQkFBZ0IsRW5CNENNLE9BQU8sQ21CNUNKLFVBQVUsR0FDdEM7O0FBRUwsQUFBQSxjQUFjLENBQWQ7RUFDSSxnQkFBZ0IsRW5Cd0NVLE9BQU8sQ21CeENSLFVBQVUsR0FLdEM7RUFORCxBQUFBLGNBQWMsQUFHVCxNQUFNLENBQUE7SUFDSCxnQkFBZ0IsRUFBRSxPQUFPLENBQVksVUFBVSxHQUNsRDs7QUFFTCxBQUFZLFlBQUEsQUFBQSxjQUFjLENBQTFCO0VBQ0ksS0FBSyxFbkJpQ3FCLE9BQU8sQ21CakNuQixVQUFVO0VBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDbkJnQ0QsT0FBTyxHbUIvQnBDOztBQTVCRCxBQUFBLGNBQWMsQ0FBZDtFQUNJLGdCQUFnQixFbkIyRFUsT0FBTyxHbUIxRHBDOztBQUVELEFBQUEsaUJBQWlCLENBQWpCO0VBQ0ksS0FBSyxFbkJ1RHFCLE9BQU8sQ21CdkRuQixVQUFVLEdBQzNCOztBQUVELEFBQUEscUJBQXFCLENBQXJCO0VBQ0ksZ0JBQWdCLEVuQm1EVSxPQUFPLENtQm5EUixVQUFVLEdBQ3RDOztBQUNELEFBQUEsZ0JBQWdCLENBQWhCO0VBQ0ksZ0JBQWdCLEVuQmdEVSxPQUFPLENtQmhEUixVQUFVLEdBS3RDO0VBTkQsQUFHa0IsZ0JBSEYsQ0FHWixjQUFjLEFBQUEsTUFBTSxDQUFBO0lBQ2hCLGdCQUFnQixFbkI2Q00sT0FBTyxDbUI3Q0osVUFBVSxHQUN0Qzs7QUFFTCxBQUFBLGtCQUFrQixDQUFsQjtFQUNJLGdCQUFnQixFbkJ5Q1UsT0FBTyxDbUJ6Q1IsVUFBVSxHQUt0QztFQU5ELEFBQUEsa0JBQWtCLEFBR2IsTUFBTSxDQUFBO0lBQ0gsZ0JBQWdCLEVBQUUsT0FBTyxDQUFZLFVBQVUsR0FDbEQ7O0FBRUwsQUFBWSxZQUFBLEFBQUEsa0JBQWtCLENBQTlCO0VBQ0ksS0FBSyxFbkJrQ3FCLE9BQU8sQ21CbENuQixVQUFVO0VBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDbkJpQ0QsT0FBTyxHbUJoQ3BDOztBQTVCRCxBQUFBLGNBQWMsQ0FBZDtFQUNJLGdCQUFnQixFbkI0RFUsT0FBTyxHbUIzRHBDOztBQUVELEFBQUEsaUJBQWlCLENBQWpCO0VBQ0ksS0FBSyxFbkJ3RHFCLE9BQU8sQ21CeERuQixVQUFVLEdBQzNCOztBQUVELEFBQUEscUJBQXFCLENBQXJCO0VBQ0ksZ0JBQWdCLEVuQm9EVSxPQUFPLENtQnBEUixVQUFVLEdBQ3RDOztBQUNELEFBQUEsZ0JBQWdCLENBQWhCO0VBQ0ksZ0JBQWdCLEVuQmlEVSxPQUFPLENtQmpEUixVQUFVLEdBS3RDO0VBTkQsQUFHa0IsZ0JBSEYsQ0FHWixjQUFjLEFBQUEsTUFBTSxDQUFBO0lBQ2hCLGdCQUFnQixFbkI4Q00sT0FBTyxDbUI5Q0osVUFBVSxHQUN0Qzs7QUFFTCxBQUFBLGtCQUFrQixDQUFsQjtFQUNJLGdCQUFnQixFbkIwQ1UsT0FBTyxDbUIxQ1IsVUFBVSxHQUt0QztFQU5ELEFBQUEsa0JBQWtCLEFBR2IsTUFBTSxDQUFBO0lBQ0gsZ0JBQWdCLEVBQUUsT0FBTyxDQUFZLFVBQVUsR0FDbEQ7O0FBRUwsQUFBWSxZQUFBLEFBQUEsa0JBQWtCLENBQTlCO0VBQ0ksS0FBSyxFbkJtQ3FCLE9BQU8sQ21CbkNuQixVQUFVO0VBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDbkJrQ0QsT0FBTyxHbUJqQ3BDOztBQ3JEYjtnRkFFZ0Y7QUFFaEY7Z0ZBRWdGO0FBRTVFOzs7OztNQUtFO0FBTU47Z0ZBRWdGO0FBTWhGO2dGQUVnRjtBQUU1RTs7O2dGQUc0RTtBQUV4RTs7V0FFRztBQUlIOztXQUVHO0FBSUg7O1dBRUc7QUFJSDs7V0FFRztBQUlIOztXQUVHO0FBSUg7O1dBRUc7QUFPWDtnRkFFZ0Y7QUFFaEYsQUFBQSxTQUFTLENBQUM7RUFDTixTQUFTLEVwQmYrQixJQUFJO0VvQmdCNUMsV0FBVyxFQUFFLEdBQUksR0FLcEI7RUFQRCxBQUlJLFNBSkssQ0FJTCxDQUFDLENBQUM7SUFDRSxLQUFLLEVwQkg2QixPQUFPLEdvQkk1Qzs7QUFHTCxBQUFBLEVBQUUsRWJJRixBYUpBLEdiSUcsQ2FKQTtFQUNDLGFBQWEsRUFBRSxHQUFNLEdBQ3hCOztBQzFGRDs7Z0ZBR2dGO0FBRWhGO2dGQUVnRjtBQUU1RTs7Ozs7TUFLRTtBQU1OO2dGQUVnRjtBQUU1RSwrQkFBK0I7QUFDL0IsQUFBQSxJQUFJLEVBQUUsQUFBQSxJQUFJLENBQUM7RUFBRSxNQUFNLEVBQUUsSUFBSyxHQUFJOztBQUM5QixjQUFjO0FBQ2QsQUFBTyxDQUFOLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztFQUFFLE1BQU0sRUFBRSxJQUFLLEdBQUk7O0FBRW5DLEFBQUEsSUFBSSxDQUFBO0VBQ0EsUUFBUSxFQUFFLFFBQVM7RUFDbkIsVUFBVSxFQUFFLElBQUs7RUFDakIsc0JBQXNCLEVBQUUsV0FBWSxHQUN2Qzs7QUFHRDs7T0FFRztBQUNILEFBQUEsUUFBUSxDQUFDO0VBQ0wsUUFBUSxFQUFFLFFBQVM7RUFDbkIsVUFBVSxFQUFFLElBQUs7RUFDakIsTUFBTSxFQUFFLElBQUs7RUFDYixLQUFLLEVBQUUsSUFBSztFQUNaLE1BQU0sRUFBRSxNQUFPLEdBQ2xCOztBQUVHLEFBQUEsV0FBVyxDQUFBO0VBQ04sTUFBTSxFQUFFLE1BQU87RWxCa0JwQixPQUFPO0VBRUgsT0FBTztFQUlILFNBQVksRUhnQ1ksTUFBTSxDR2hDVCxBQUFVO0VBSXZDLE9BQU87RUFpQkgsT0FBTztFQUlILFNBQVksRUFwRlgsV0FBTSxDQW9GMEIsQUFBVTtFQS9CbkQsT0FBTztFQUVILE9BQU87RUFJSCxPQUFZLEVrQnRCTyxDQUFDLENyQklRLElBQUksQ0drQlgsQUFBVTtFQUl2QyxPQUFPO0VBVUgsT0FBTztFQUlILE9BQVksRWtCeENPLENBQUMsQ2xCckNuQixVQUFNLENBNkVZLEFBQVUsR2tCdkNuQzs7QUFFRCxBQUFBLHNCQUFzQixDQUFDO0VBQ3JCLE9BQU8sRUFBRSxDQUFFLEdBQ1o7O0FsQnNLTSxNQUFNLE1BQUQsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VrQm5LckMsQUFBQSw0QkFBNEIsQ0FBQztJQUMzQixPQUFPLEVBQUUsQ0FBRSxHQUNaOztBQzVEYjtnRkFFZ0Y7QW5CMk5oRSxNQUFNLE1BQUQsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VtQnhON0MsQUFBQSxLQUFLLENBQUM7SUFDRixPQUFPLEVBQUUsSUFBSztJQUNkLGNBQWMsRUFBRSxjQUFlLEdBQ2xDOztBQUdMO2dGQUVnRjtBQUVoRixBQUFBLGNBQWMsQ0FBQztFQUNYLGFBQWEsRXRCc0MyQixJQUFJLEdzQjVCL0M7RUFYRCxBQUdJLGNBSFUsQ0FHVixFQUFFLENBQUM7SUFDQyxNQUFNLEVBQUUsQ0FBRTtJQUNWLFVBQVUsRUFBRSxJQUFLLEdBS3BCO0lBVkwsQUFPUSxjQVBNLENBR1YsRUFBRSxDQUlFLENBQUMsQ0FBQztNQUNFLGVBQWUsRUFBRSxJQUFLLEdBQ3pCOztBQ3hCVDs7Z0ZBR2dGO0FBRWhGO2dGQUVnRjtBQUU1RTs7Ozs7TUFLRTtBQU1OO2dGQUVnRjtBQUdoRjtnRkFFZ0Y7QUFFNUU7OztnRkFHNEU7QUFFeEU7O1dBRUc7QUFJSDs7V0FFRztBQUlIOztXQUVHO0FBSUg7O1dBRUc7QUFJSDs7V0FFRztBQUlIOztXQUVHO0FBT1g7Z0ZBRWdGO0FBRWhGLEFBQUEsT0FBTyxDQUFDO0VBQ0osVUFBVSxFdkJ4QjhCLElBQUksR3VCeUIvQzs7QUMvRUQ7O2dGQUdnRjtBQUVoRjtnRkFFZ0Y7QUFFNUU7Ozs7O01BS0U7QUFNTjtnRkFFZ0Y7QUFFaEY7Z0ZBRWdGO0FBRTVFOzs7Z0ZBRzRFO0FBRXhFOztXQUVHO0FBSUg7O1dBRUc7QUFJSDs7V0FFRztBQUlIOztXQUVHO0FyQndLSyxNQUFNLE1BQUQsTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLLE9BQU8sU0FBUyxFQUFFLEtBQUs7RXFCdEs1RCxBQUFhLFlBQUQsQ0FBQyxFQUFFLENBQUE7SUFDWCxPQUFPLEVBQUUsSUFBSyxHQUNqQjtFQUNELEFBQUEsWUFBWSxDQUFBO0lBQ1IsUUFBUSxFQUFFLFFBQVMsR0FDdEI7O0FBSUw7O1dBRUc7QUFJSDs7V0FFRztBckJxSkssTUFBTSxNQUFELE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSztFcUJsSnJDLEFBQUEsWUFBWSxDQUFBO0lBQ1IsT0FBTyxFQUFFLEtBQU0sR0FDbEI7RUFDRCxBQUFhLFlBQUQsQ0FBQyxFQUFFLENBQUE7SUFDWCxPQUFPLEVBQUUsSUFBSyxHQUNqQjtFQUNELEFBQUEsWUFBWSxDQUFBO0lBQ1IsWUFBWSxFQUFFLElBQUssR0FDdEI7RUFFRCxBQUFBLGFBQWEsQ0FBQztJQUNWLE9BQU8sRUFBRSxJQUFLO0lBQ2QsU0FBUyxFQUFFLElBQUs7SUFDaEIsZUFBZSxFQUFFLE1BQU8sR0FDM0I7RUFFRCxBQUFtQixtQkFBQSxBQUFBLFdBQVcsQ0FBQztJQUMzQixVQUFVLEV4QnRDa0IsSUFBSSxHd0J1Q25DOztBQU9iO2dGQUVnRjtBQUVoRixBQUFBLG1CQUFtQixDQUFDO0VBQ2hCLE1BQU0sRUFBRSxJQUFLO0VBQ2IsWUFBWSxFQUFFLElBQUs7RUFDbkIsTUFBTSxFQUFFLGVBQWdCO0VBQ3hCLE9BQU8sRUFBRSxHQUFJLEdBQ2hCOztBQUVELEFBQW1CLG1CQUFBLEFBQUEsV0FBVyxDQUFDO0VBQzNCLFlBQVksRUFBRSxDQUFFO0VBQ2hCLE1BQU0sRUFBRSxJQUFLO0VBQ2IsT0FBTyxFQUFFLENBQUUsR0FDZDs7QUNuSEQ7O2dGQUdnRjtBQUVoRjtnRkFFZ0Y7QUFFNUU7Ozs7O01BS0U7QUFNTjtnRkFFZ0Y7QUFFNUUsQUFBQSxNQUFNLENBQUE7RUFDRixPQUFPLEVBQUUsSUFBTSxDQUFHLENBQUMsR0FDdEI7O0FBRUQsQUFBQSxZQUFZLENBQUE7RUFDUixPQUFPLEVBQUUsSUFBTSxDQUFHLENBQUMsR0FDdEI7O0FBRUQsQUFBQSxhQUFhLENBQUE7RUFDVCxPQUFPLEV6QnFCNkIsSUFBSSxDeUJyQnhCLENBQUMsR0FDcEI7O0FBRUQsQUFBQSxZQUFZLENBQUE7RUFDUixPQUFPLEVBQUUsSUFBTSxHQUNsQjs7QUFFRCxBQUFBLHVCQUF1QixDQUFBO0VBQ25CLGNBQWMsRUFBRSxDQUFFLEdBQ3JCOztBQUtMO2dGQUVnRjtBQUU1RTs7O2dGQUc0RTtBQUV4RTs7V0FFRztBQUlIOztXQUVHO0FBSUg7O1dBRUc7QUFJSDs7V0FFRztBQUlIOztXQUVHO0FBSUg7O1dBRUc7QXRCcUlLLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RXNCbElyQyxBQUFBLE1BQU0sQ0FBQTtJQUNGLE9BQU8sRXpCdENxQixJQUFJLEN5QnNDaEIsQ0FBQyxHQUNwQjs7QUFPYjtnRkFFZ0Y7QUN0R2hGO2dGQUVnRjtBdkIyTmhFLE1BQU0sTUFBRCxNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RXVCeE43QyxBQUFBLFVBQVUsQ0FBQztJQUNQLE9BQU8sRUFBRSxJQUFLLEdBQ2pCOztBQUdMO2dGQUVnRjtBQUVoRixBQUFBLEtBQUssQ0FBQztFQUNGLFVBQVUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQUk7RUFDakMsYUFBYSxFQUFFLElBQUs7RUFDcEIsUUFBUSxFQUFFLE1BQU87RUFDakIsYUFBYSxFMUJvQzJCLElBQUksRzBCbkMvQzs7QUFFRCxBQUNJLGFBRFMsQ0FDVCxHQUFHLENBQUM7RUFDQSxVQUFVLEVBQUUsS0FBTTtFQUNsQixPQUFPLEVBQUUsS0FBTTtFQUNmLE1BQU0sRUFBRSxNQUFPO0VBQ2YsV0FBVyxFQUFFLEdBQU0sR0FDdEI7O0FBR0wsQUFBQSw0QkFBNEIsQ0FBQztFQUN6QixhQUFhLEVBQUUsS0FBSyxDQUFDLEdBQUcsQzFCcURjLE9BQU8sRzBCcERoRDs7QUFFRCxBQUFBLGdDQUFnQyxDQUFDO0VBQzdCLGFBQWEsRUFBRSxLQUFLLENBQUMsR0FBRyxDMUJrRGMsT0FBTyxHMEJqRGhEOztBQUVELEFBQUEsY0FBYyxDQUFDO0VBQ1gsT0FBTyxFMUJlaUMsSUFBSSxDQUFKLElBQUksQzBCZnJCLEdBQU0sR0FDaEM7O0FBRUQsQUFBQSxVQUFVLENBQUM7RUFDUCxhQUFhLEVBQUUsSUFBSztFQUNwQixRQUFRLEVBQUUsTUFBTyxHQUNwQjs7QUFFRCxBQUFBLGFBQWEsQ0FBQztFQUNWLE9BQU8sRUFBRSxtQkFBb0I7RUFDN0IsY0FBYyxFQUFFLFNBQVU7RUFDMUIsV0FBVyxFQUFFLElBQUs7RUFDbEIsU0FBUyxFMUJhK0IsSUFBSTtFMEJaNUMsT0FBTyxFQUFFLFlBQWE7RUFDdEIsZUFBZSxFQUFFLElBQUs7RUFDdEIsS0FBSyxFQUFFLElBQUssR0FDZjs7QUFFRCxBQUFBLHFCQUFxQixDQUFDO0VBQ2xCLFVBQVUsRUFBbUMsa0NBQUM7RUFDOUMsbUJBQW1CLEVBQUUsWUFBYTtFQUNsQyxlQUFlLEVBQUUsSUFBSztFQUN0QixpQkFBaUIsRUFBRSxTQUFVLEdBQ2hDOztBQUVELEFBQUEsbUJBQW1CLENBQUM7RUFDaEIsVUFBVSxFQUFpQyxnQ0FBQztFQUM1QyxtQkFBbUIsRUFBRSxZQUFhO0VBQ2xDLGVBQWUsRUFBRSxJQUFLO0VBQ3RCLGlCQUFpQixFQUFFLFNBQVUsR0FDaEM7O0FDckVEO2dGQUVnRjtBQUVoRjtnRkFFZ0Y7QUFFNUU7Ozs7O01BS0U7QUFJTjtnRkFFZ0Y7QUNuQmhGO2dGQUVnRjtBQUVoRjtnRkFFZ0Y7QUFFaEY7Ozs7O0VBS0U7QUFNRjtnRkFFZ0Y7QUFLaEYsQUFBQSxRQUFRLENBQUE7RUFXUixhQUFhLEVBQUUsY0FBZSxHQUM3QjtFQVpELEFBR0UsUUFITSxDQUVQLEVBQUUsQ0FDRCxDQUFDLENBQUE7SUFDQSxlQUFlLEVBQUUsSUFBSztJQUN0QixPQUFPLEUxQjBEc0IsSUFBTTtJMEJ6RG5DLEtBQUssRTVCaURrQyxPQUFPO0k0QmhEOUMsU0FBUyxFNUJtQ2dDLElBQUksRzRCbEM3Qzs7QUFLSCxBQUVFLFFBRk0sQ0FDUCxFQUFFLENBQ0QsQ0FBQyxDQUFBO0VBQ0EsZUFBZSxFQUFFLElBQUs7RUFDdEIsT0FBTyxFNUJXa0MsSUFBSTtFNEJWN0MsS0FBSyxFNUJxQ2tDLE9BQU87RTRCcEM5QyxTQUFTLEU1QmtCZ0MsSUFBSSxHNEJqQjdDOztBQUdILEFBRUMsYUFGWSxDQUVaLEVBQUUsRUFGWSxBQUVkLGFBRjJCLENBRTNCLEVBQUUsQ0FBQTtFQUNELGVBQWUsRUFBRSxJQUFLO0VBQ3RCLE1BQU0sRTVCQ29DLElBQUksRzRCSzlDO0VBVkYsQUFLRSxhQUxXLENBRVosRUFBRSxDQUdELENBQUMsRUFMWSxBQUtiLGFBTDBCLENBRTNCLEVBQUUsQ0FHRCxDQUFDLENBQUE7SUFDQSxlQUFlLEVBQUUsSUFBSztJQUN0QixLQUFLLEU1QndCa0MsT0FBTztJNEJ2QjlDLFdBQVcsRUFBRSxHQUFJLEdBQ2pCOztBQUlIO2dGQUVnRjtBQUVoRjs7OzRFQUc0RTtBQUU1RTs7R0FFRztBQUlIOztHQUVHO0FBSUg7O0dBRUc7QUFJSDs7R0FFRztBQUlIOztHQUVHO0FBSUg7O0dBRUc7QUFPSDtnRkFFZ0YiLCJuYW1lcyI6W119 */
