@wkly/datetime-picker 13.0.0 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,8 +6,8 @@ import { decodeIso, error, resolveWeekOffset, validateSelection, WklyGregorianCa
6
6
  import { draftDayDifference, setDraftDayDifference, calendarMonthBounds, resolveWklyTranslation, createWeekRows, validateDrafts, } from "@wkly/presentation";
7
7
  import { coerceBoolean, WKLY_CLOCK, WKLY_CONFIG, WKLY_LOCALIZATION, WKLY_TRANSLATIONS, WklyPickerInputs, WklyPickerInputsPropertyKeys, WklyPickerOutputsPropertyKeys, } from "./config";
8
8
  import * as i0 from "@angular/core";
9
- import * as i1 from "./field.component";
10
- import * as i2 from "@angular/common";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "./field.component";
11
11
  export class WklyDateTimePickerComponent extends WklyPickerInputs {
12
12
  constructor(defaultLocale, defaults, clock, strings, defaultTranslations, platform, host, changeDetector) {
13
13
  super();
@@ -903,8 +903,8 @@ export class WklyDateTimePickerComponent extends WklyPickerInputs {
903
903
  });
904
904
  }
905
905
  }
906
- WklyDateTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: WklyDateTimePickerComponent, deps: [{ token: LOCALE_ID }, { token: WKLY_CONFIG }, { token: WKLY_CLOCK }, { token: WKLY_LOCALIZATION }, { token: WKLY_TRANSLATIONS }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
907
- WklyDateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: WklyDateTimePickerComponent, selector: "wkly-datetime-picker", providers: [
906
+ WklyDateTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WklyDateTimePickerComponent, deps: [{ token: LOCALE_ID }, { token: WKLY_CONFIG }, { token: WKLY_CLOCK }, { token: WKLY_LOCALIZATION }, { token: WKLY_TRANSLATIONS }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
907
+ WklyDateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WklyDateTimePickerComponent, selector: "wkly-datetime-picker", providers: [
908
908
  {
909
909
  provide: NG_VALUE_ACCESSOR,
910
910
  useExisting: forwardRef(() => WklyDateTimePickerComponent),
@@ -915,8 +915,8 @@ WklyDateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.
915
915
  useExisting: forwardRef(() => WklyDateTimePickerComponent),
916
916
  multi: true,
917
917
  },
918
- ], viewQueries: [{ propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n <button\n *ngIf=\"hasDate\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n <span *ngIf=\"hasDate\" class=\"year-control\">{{ title }}</span>\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n <button\n *ngIf=\"presentation === 'transient'\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span\n ><span *ngFor=\"let day of weekdays\" role=\"columnheader\">{{ day }}</span>\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(-1)\n \"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(1)\n \"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep] === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep] === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] ||\n this[WklyPickerInputsPropertyKeys.HourCycle] !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}button:hover:not(:disabled):not([aria-disabled=\"true\"]){background:var(--wkly-accent-color-alternate)}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;grid-gap:7px;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;grid-gap:8px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}.confirm:hover:not(:disabled){background:var(--wkly-accent-color-alternate)}@media (forced-colors: active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media (prefers-reduced-motion: reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"], components: [{ type: i1.WklyFieldComponent, selector: "wkly-field", inputs: ["value", "label", "hideLabel", "previousLabel", "nextLabel", "min", "max", "step", "locale", "disabled", "invalid", "labels"], outputs: ["valueChange", "complete"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
919
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: WklyDateTimePickerComponent, decorators: [{
918
+ ], viewQueries: [{ propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n <button\n *ngIf=\"hasDate\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n <span *ngIf=\"hasDate\" class=\"year-control\">{{ title }}</span>\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n <button\n *ngIf=\"presentation === 'transient'\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span\n ><span *ngFor=\"let day of weekdays\" role=\"columnheader\">{{ day }}</span>\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(-1)\n \"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(1)\n \"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep] === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep] === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] ||\n this[WklyPickerInputsPropertyKeys.HourCycle] !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}button:hover:not(:disabled):not([aria-disabled=\"true\"]){background:var(--wkly-accent-color-alternate)}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}.confirm:hover:not(:disabled){background:var(--wkly-accent-color-alternate)}@media (forced-colors: active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media (prefers-reduced-motion: reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.WklyFieldComponent, selector: "wkly-field", inputs: ["value", "label", "hideLabel", "previousLabel", "nextLabel", "min", "max", "step", "locale", "disabled", "invalid", "labels"], outputs: ["valueChange", "complete"] }] });
919
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WklyDateTimePickerComponent, decorators: [{
920
920
  type: Component,
921
921
  args: [{ selector: "wkly-datetime-picker", providers: [
922
922
  {
@@ -929,7 +929,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
929
929
  useExisting: forwardRef(() => WklyDateTimePickerComponent),
930
930
  multi: true,
931
931
  },
932
- ], template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n <button\n *ngIf=\"hasDate\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n <span *ngIf=\"hasDate\" class=\"year-control\">{{ title }}</span>\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n <button\n *ngIf=\"presentation === 'transient'\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span\n ><span *ngFor=\"let day of weekdays\" role=\"columnheader\">{{ day }}</span>\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(-1)\n \"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(1)\n \"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep] === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep] === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] ||\n this[WklyPickerInputsPropertyKeys.HourCycle] !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}button:hover:not(:disabled):not([aria-disabled=\"true\"]){background:var(--wkly-accent-color-alternate)}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;grid-gap:7px;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;grid-gap:8px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}.confirm:hover:not(:disabled){background:var(--wkly-accent-color-alternate)}@media (forced-colors: active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media (prefers-reduced-motion: reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"] }]
932
+ ], template: "<section\n class=\"wkly\"\n [attr.dir]=\"direction\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Date and time picker'\n \"\n [attr.aria-describedby]=\"this[WklyPickerInputsPropertyKeys.AriaDescribedBy]\"\n (focusout)=\"touched()\"\n>\n <header class=\"toolbar\">\n <button\n *ngIf=\"hasDate\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t(viewMode === 'calendar' ? 'manual' : 'calendar')\"\n (click)=\"toggleView()\"\n >\n {{ viewMode === \"calendar\" ? \"\u2637\" : \"\u25A6\" }}\n </button>\n <span *ngIf=\"hasDate\" class=\"year-control\">{{ title }}</span>\n <span class=\"spacer\"></span\n ><button\n type=\"button\"\n class=\"now\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n (click)=\"now()\"\n >\n {{ t(\"now\") }}\n </button>\n <button\n *ngIf=\"presentation === 'transient'\"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"t('close')\"\n (click)=\"cancel()\"\n >\n \u00D7\n </button>\n </header>\n <ng-container *ngIf=\"hasDate && viewMode === 'calendar'\">\n <div\n role=\"grid\"\n [attr.aria-label]=\"\n this[WklyPickerInputsPropertyKeys.AriaLabel] || 'Calendar'\n \"\n [attr.aria-multiselectable]=\"isRange\"\n >\n <div\n role=\"row\"\n class=\"week-head\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] === 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !== 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"columnheader\"\n aria-label=\"Week\"\n ></span\n ><span *ngFor=\"let day of weekdays\" role=\"columnheader\">{{ day }}</span>\n </div>\n <div\n #scroller\n class=\"week-scroll\"\n [style.height.px]=\"visibleCount * rowHeight\"\n (scroll)=\"scroll($event)\"\n (scrollend)=\"snapWeek()\"\n >\n <div [style.height.px]=\"scrollHeight\" class=\"scroll-space\">\n <div class=\"rows\" [style.top.px]=\"paddingTop\">\n <div\n *ngFor=\"let row of rows; trackBy: trackRow\"\n role=\"row\"\n class=\"week-row\"\n [class.no-label]=\"\n compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n >\n <span\n *ngIf=\"\n !compact &&\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] !==\n 'hidden' ||\n this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n \"\n role=\"rowheader\"\n class=\"week-number\"\n >{{ row.label }}</span\n >\n <div\n *ngFor=\"\n let cell of row.cells;\n let dayIndex = index;\n trackBy: trackCell\n \"\n role=\"gridcell\"\n [attr.data-weekday-index]=\"dayIndex\"\n [attr.aria-colindex]=\"\n dayIndex +\n (compact ||\n (this[WklyPickerInputsPropertyKeys.WeekLabelMode] ===\n 'hidden' &&\n !this[WklyPickerInputsPropertyKeys.WeekLabelFormatter])\n ? 1\n : 2)\n \"\n [attr.aria-selected]=\"selected(cell.epochDay)\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [class.range]=\"inRange(cell.epochDay)\"\n [class.hidden]=\"cell.hidden\"\n [class.odd-month]=\"cell.date && cell.date.month % 2 === 1\"\n >\n <span [class]=\"'annotation annotation--' + dayIndex\">{{\n cell.annotation\n }}</span>\n <button\n type=\"button\"\n class=\"day\"\n [attr.data-day]=\"cell.epochDay\"\n [attr.aria-label]=\"cell.accessible\"\n [attr.aria-current]=\"cell.epochDay === today ? 'date' : null\"\n [attr.aria-disabled]=\"\n cell.disabled || this[WklyPickerInputsPropertyKeys.Disabled]\n \"\n [attr.tabindex]=\"\n !cell.hidden && cell.epochDay === focused ? 0 : -1\n \"\n [class.selected]=\"selected(cell.epochDay)\"\n [class.today]=\"cell.epochDay === today\"\n (focus)=\"focused = cell.epochDay\"\n (click)=\"select(cell.epochDay)\"\n (keydown)=\"key($event, cell.epochDay)\"\n >\n {{ cell.label }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"week-navigation\">\n <button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(-1)\n \"\n [attr.aria-label]=\"t('previous')\"\n (click)=\"moveWeek(-1)\"\n >\n \u2191</button\n ><span>{{ title }}</span\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] || !canMoveWeek(1)\n \"\n [attr.aria-label]=\"t('next')\"\n (click)=\"moveWeek(1)\"\n >\n \u2193\n </button>\n </div>\n </ng-container>\n <ng-container\n *ngFor=\"let draft of drafts; let i = index; trackBy: trackDraft\"\n >\n <fieldset\n *ngIf=\"(i === 0 || isRange) && (hasTime || viewMode === 'manual')\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-label]=\"isRange ? t(i === 0 ? 'start' : 'end') : null\"\n >\n <legend *ngIf=\"isRange\">\n <ng-container\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual';\n else endpointLabel\n \"\n >\n <span class=\"end-view-toggle\">\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'date'\"\n (click)=\"toggleEndView('date')\"\n >\n {{ t(\"end\") }}\n </button>\n <button\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"endView === 'days'\"\n (click)=\"toggleEndView('days')\"\n >\n {{ inDaysLabel }}\n </button>\n </span>\n </ng-container>\n <ng-template #endpointLabel>{{\n t(i === 0 ? \"start\" : \"end\")\n }}</ng-template>\n </legend>\n <div\n *ngIf=\"\n i === 1 && hasDate && viewMode === 'manual' && endView === 'days'\n \"\n class=\"date-fields in-days-fields\"\n >\n <span class=\"resulting-end-date\" [attr.aria-label]=\"t('endDate')\">{{\n resultingEndDate\n }}</span>\n <wkly-field\n [label]=\"t('days')\"\n [hideLabel]=\"true\"\n [previousLabel]=\"t('daysPrevious')\"\n [nextLabel]=\"t('daysNext')\"\n [locale]=\"effectiveLocale\"\n [value]=\"inDays\"\n [min]=\"-9999\"\n [max]=\"9999\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"days($event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"\n hasDate && viewMode === 'manual' && (i === 0 || endView === 'date')\n \"\n class=\"date-fields\"\n >\n <wkly-field\n [label]=\"t('day')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.day\"\n [min]=\"1\"\n [max]=\"31\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'day', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('month')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.month\"\n [min]=\"1\"\n [max]=\"monthCount(draft)\"\n [labels]=\"months(draft)\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'month', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('year')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.date.year\"\n [min]=\"adapter.supportedYearRange[0]\"\n [max]=\"adapter.supportedYearRange[1]\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'year', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n </div>\n <div\n *ngIf=\"hasTime\"\n class=\"time-fields\"\n [class.seconds]=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n >\n <wkly-field\n [label]=\"t('hour')\"\n [locale]=\"effectiveLocale\"\n [value]=\"displayHour(draft)\"\n [min]=\"effectiveHourCycle === 'h12' ? 1 : 0\"\n [max]=\"effectiveHourCycle === 'h12' ? 12 : 23\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'hour', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n [label]=\"t('minute')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.minute\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.MinuteStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.MinuteStep] === 0\n ? this[WklyPickerInputsPropertyKeys.MinuteStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'minute', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <wkly-field\n *ngIf=\"this[WklyPickerInputsPropertyKeys.ShowSeconds]\"\n [label]=\"t('second')\"\n [locale]=\"effectiveLocale\"\n [value]=\"draft.second\"\n [max]=\"59\"\n [step]=\"\n this[WklyPickerInputsPropertyKeys.SecondStep] > 0 &&\n 60 % this[WklyPickerInputsPropertyKeys.SecondStep] === 0\n ? this[WklyPickerInputsPropertyKeys.SecondStep]\n : 1\n \"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [invalid]=\"!!errors.length\"\n (valueChange)=\"field(i, 'second', $event)\"\n (complete)=\"finish()\"\n ></wkly-field>\n <div class=\"period\">\n <button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) < 12\n \"\n (click)=\"period(i, 'am')\"\n >\n {{ t(\"am\") }}</button\n ><button\n type=\"button\"\n [disabled]=\"\n this[WklyPickerInputsPropertyKeys.Disabled] ||\n this[WklyPickerInputsPropertyKeys.HourCycle] !== 'switchable'\n \"\n [attr.aria-pressed]=\"effectiveHourCycle === 'h24'\"\n (click)=\"period(i, '24')\"\n >\n 24</button\n ><button\n *ngIf=\"\n effectiveHourCycle === 'h12' ||\n this[WklyPickerInputsPropertyKeys.HourCycle] === 'switchable'\n \"\n type=\"button\"\n [disabled]=\"this[WklyPickerInputsPropertyKeys.Disabled]\"\n [attr.aria-pressed]=\"\n effectiveHourCycle === 'h12' && (draft.hour || 0) >= 12\n \"\n (click)=\"period(i, 'pm')\"\n >\n {{ t(\"pm\") }}\n </button>\n </div>\n </div>\n </fieldset>\n </ng-container>\n <div class=\"validation\" role=\"status\" aria-live=\"polite\">\n <p *ngFor=\"let err of errors\">! {{ t(err.messageKey) }}</p>\n </div>\n <footer *ngIf=\"submitVisible\">\n <button\n type=\"button\"\n class=\"confirm\"\n [disabled]=\"!canSubmit\"\n (click)=\"submit()\"\n >\n {{ t(\"confirm\") }}\n </button>\n </footer>\n</section>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;--wkly-background-color: #fff;--wkly-background-color-alternate: #fafafa;--wkly-text-color: #192c28;--wkly-muted-color: #52635e;--wkly-border-color: #dce5e1;--wkly-accent-color: #176c55;--wkly-accent-color-alternate: #6ea494;--wkly-accent-text-color: #fff;--wkly-range-color: #e5f1ee;--wkly-error-color: #b42318;--wkly-focus-color: #245bd6;--wkly-size-multiplier: 1;--wkly-size-unit: 3.5em;color:var(--wkly-text-color);font:14px/1.4 system-ui,sans-serif;container-type:inline-size}.wkly{background:var(--wkly-background-color);border:1px solid var(--wkly-border-color);border-radius:14px;overflow:hidden;min-width:0;font-size:calc(14px*clamp(1,var(--wkly-size-multiplier),1.5))}button{font:inherit;color:inherit;min-width:var(--wkly-size-unit);min-height:var(--wkly-size-unit);border:0;background:transparent;border-radius:8px;cursor:pointer}button:hover:not(:disabled):not([aria-disabled=\"true\"]){background:var(--wkly-accent-color-alternate)}button:disabled,button[aria-disabled=true]{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--wkly-focus-color);outline-offset:-2px}.toolbar{display:flex;align-items:center;padding:8px;gap:3px;border-bottom:1px solid var(--wkly-border-color)}.spacer{flex:1}.year-control{padding:0 6px;font-weight:650;text-align:start;line-height:1.2}.now{color:var(--wkly-accent-color);font-weight:650}.week-head,.week-row{display:grid;grid-template-columns:28px repeat(7,minmax(0,1fr))}.week-head{font-size:.85em;color:var(--wkly-muted-color);height:34px;align-items:center;text-align:center}.week-row{height:calc(var(--wkly-size-unit) * clamp(1,var(--wkly-size-multiplier),1));align-items:end}.no-label{grid-template-columns:repeat(7,minmax(0,1fr))}.week-scroll{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;overflow-anchor:none;scrollbar-width:thin;max-height:65vh;touch-action:pan-y}.scroll-space{position:relative}.rows{position:absolute;left:0;right:0}.week-number{font-size:.85em;text-align:center;align-self:end;line-height:var(--wkly-size-unit);color:var(--wkly-muted-color)}[role=gridcell]{position:relative;min-width:0;height:var(--wkly-size-unit);text-align:center}[role=gridcell].odd-month:not(.range):not(.today){background:var(--wkly-background-color-alternate)}.day{width:100%;min-width:0;height:var(--wkly-size-unit);padding:0;border-radius:8px}.annotation{position:absolute;bottom:.25em;white-space:nowrap;font-size:1.25em;font-weight:650;line-height:1;pointer-events:none;z-index:1;color:var(--wkly-muted-color);color:color-mix(in srgb,var(--wkly-muted-color) 50%,transparent);text-shadow:0 0 2px --wkly-background-color,0 0 4px --wkly-background-color}.odd-month .annotation{text-shadow:0 0 2px --wkly-background-color-alternate,0 0 4px --wkly-background-color-alternate}.annotation:empty{display:none}.annotation--0{inset-inline-start:10%;bottom:1.75em}.annotation--1{inset-inline-start:-5%}.annotation--2{inset-inline-start:-20%}.annotation--3{inset-inline-start:-50%;inset-inline-end:-50%}.annotation--4{inset-inline-end:-20%}.annotation--5{inset-inline-end:-5%}.annotation--6{inset-inline-end:10%}.range{background:var(--wkly-range-color)}.day.selected{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);font-weight:700}.today:after{content:\"\";display:block;width:5px;height:5px;background:currentColor;border-radius:50%;position:absolute;bottom:2px;left:calc(50% - 2px)}.today{font-weight:750;box-shadow:inset 0 0 0 1px var(--wkly-accent-color)}.hidden{visibility:hidden}.week-navigation{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--wkly-border-color);font-size:.85em;color:var(--wkly-muted-color)}fieldset{border:0;padding:0 12px;margin:0;min-width:0}legend{padding-top:.85em;font-weight:650;color:var(--wkly-accent-color)}.date-fields{display:grid;grid-template-columns:1fr 2fr 1.4fr;gap:7px;padding:12px 0}.end-view-toggle{display:inline-flex}.end-view-toggle button{min-height:0;min-width:0;padding:0 6px;border-radius:0;line-height:inherit}.end-view-toggle button:first-child{padding-inline-start:0}.end-view-toggle button+button{border-inline-start:1px solid var(--wkly-text-color)}.end-view-toggle button[aria-pressed=false]{color:var(--wkly-muted-color);font-weight:400}.in-days-fields{grid-template-columns:minmax(0,1fr);gap:0;text-align:center}.resulting-end-date{font-size:11px;color:var(--wkly-muted-color);height:1.4em;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.time-fields{display:grid;grid-template-columns:1fr 1fr 52px;gap:8px;padding:14px 0;border-top:1px solid var(--wkly-border-color)}.time-fields.seconds{grid-template-columns:1fr 1fr 1fr 48px}.period{display:flex;flex-direction:column;justify-content:center;gap:2px;padding-top:1.25em}.period button{font-size:.85em}.period [aria-pressed=true]{background:var(--wkly-range-color);box-shadow:inset 0 0 0 1px var(--wkly-accent-color);font-weight:700}.validation{color:var(--wkly-error-color);font-size:.85em}.validation p{margin:.5em .85em}footer{padding:12px;border-top:1px solid var(--wkly-border-color)}.confirm{background:var(--wkly-accent-color);color:var(--wkly-accent-text-color);width:100%;font-weight:650}.confirm:hover:not(:disabled){background:var(--wkly-accent-color-alternate)}@media (forced-colors: active){.day.selected{outline:2px solid Highlight}.range{border-bottom:2px solid Highlight}.today{outline:1px dashed CanvasText}}@media (prefers-reduced-motion: reduce){*{scroll-behavior:auto!important;animation:none!important}}\n"] }]
933
933
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
934
934
  type: Inject,
935
935
  args: [LOCALE_ID]
@@ -952,4 +952,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
952
952
  type: ViewChild,
953
953
  args: ["scroller"]
954
954
  }] } });
955
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3drbHktZGF0ZXRpbWUtcGlja2VyLjEzL3NyYy9waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcHJvamVjdHMvd2tseS1kYXRldGltZS1waWNrZXIuMTMvc3JjL3BpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixTQUFTLEVBSVQsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixPQUFPLEdBR1IsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUlqQiw0QkFBNEIsR0FHN0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLGNBQWMsRUFDZCxjQUFjLEdBR2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUtqQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLDZCQUE2QixHQUc5QixNQUFNLFVBQVUsQ0FBQzs7OztBQXVCbEIsTUFBTSxPQUFPLDJCQUNYLFNBQVEsZ0JBQWdCO0lBcUR4QixZ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QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRDtZQUNFLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7WUFDMUQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLDRLQ3pGSCw2MGFBK1hBOzJGRHBTYSwyQkFBMkI7a0JBakJ2QyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDOzRCQUMxRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs7MEJBeURFLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxpQkFBaUI7OEJBQ00sTUFBTTswQkFBcEMsTUFBTTsyQkFBQyxXQUFXO3FHQWxERSxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIExPQ0FMRV9JRCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgYWJzb2x1dGVXZWVrT2YsXG4gIGNyZWF0ZVdlZWtHZW5lcmF0b3IsXG4gIGZpcnN0RXBvY2hEYXlPZixcbiAgaW50ZWdlcixcbiAgV2tseVdlZWtHZW5lcmF0b3IsXG4gIFdrbHlXZWVrT2Zmc2V0LFxufSBmcm9tIFwiQHdrbHkvY29yZVwiO1xuaW1wb3J0IHtcbiAgZGVjb2RlSXNvLFxuICBlcnJvcixcbiAgcmVzb2x2ZVdlZWtPZmZzZXQsXG4gIHZhbGlkYXRlU2VsZWN0aW9uLFxuICBXa2x5Q2FsZW5kYXJBZGFwdGVyLFxuICBXa2x5Q2FsZW5kYXJEYXRlLFxuICBXa2x5RGF0ZVRpbWUsXG4gIFdrbHlHcmVnb3JpYW5DYWxlbmRhckFkYXB0ZXIsXG4gIFdrbHlQaWNrZXJWYWx1ZSxcbiAgV2tseVZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkB3a2x5L2FkYXB0ZXJzXCI7XG5pbXBvcnQge1xuICBkcmFmdERheURpZmZlcmVuY2UsXG4gIHNldERyYWZ0RGF5RGlmZmVyZW5jZSxcbiAgY2FsZW5kYXJNb250aEJvdW5kcyxcbiAgcmVzb2x2ZVdrbHlUcmFuc2xhdGlvbixcbiAgY3JlYXRlV2Vla1Jvd3MsXG4gIHZhbGlkYXRlRHJhZnRzLFxuICBXa2x5RHJhZnQgYXMgRHJhZnQsXG4gIFdrbHlXZWVrUm93IGFzIFJvdyxcbn0gZnJvbSBcIkB3a2x5L3ByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHtcbiAgY29lcmNlQm9vbGVhbixcbiAgV0tMWV9DTE9DSyxcbiAgV0tMWV9DT05GSUcsXG4gIFdLTFlfTE9DQUxJWkFUSU9OLFxuICBXS0xZX1RSQU5TTEFUSU9OUyxcbiAgV2tseUNsb2NrLFxuICBXa2x5Q2xvc2VSZWFzb24sXG4gIFdrbHlDb25maWd1cmF0aW9uLFxuICBXa2x5SnVtcE9wdGlvbnMsXG4gIFdrbHlQaWNrZXJJbnB1dHMsXG4gIFdrbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMsXG4gIFdrbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLFxuICBXa2x5U3RyaW5ncyxcbiAgV2tseVRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5kZWNsYXJlIGNsYXNzIFJlc2l6ZU9ic2VydmVyIHtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2s6ICgpID0+IHZvaWQpO1xuICBvYnNlcnZlKGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkO1xuICBkaXNjb25uZWN0KCk6IHZvaWQ7XG59XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwid2tseS1kYXRldGltZS1waWNrZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9waWNrZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuLi8uLi93a2x5LWRhdGV0aW1lLXBpY2tlci9zcmMvcGlja2VyLmNvbXBvbmVudC5jc3NcIl0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV2tseURhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFdrbHlEYXRlVGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXa2x5RGF0ZVRpbWVQaWNrZXJDb21wb25lbnRcbiAgZXh0ZW5kcyBXa2x5UGlja2VySW5wdXRzXG4gIGltcGxlbWVudHNcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25EZXN0cm95LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICBAVmlld0NoaWxkKFwic2Nyb2xsZXJcIikgc2Nyb2xsZXI/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgcHJlc2VudGF0aW9uOiBcImlubGluZVwiIHwgXCJ0cmFuc2llbnRcIiA9IFwiaW5saW5lXCI7XG4gIHZpZXdNb2RlOiBcImNhbGVuZGFyXCIgfCBcIm1hbnVhbFwiID0gXCJjYWxlbmRhclwiO1xuICBlbmRWaWV3OiBcImRhdGVcIiB8IFwiZGF5c1wiID0gXCJkYXRlXCI7XG4gIGFkYXB0ZXIhOiBXa2x5Q2FsZW5kYXJBZGFwdGVyO1xuICBlZmZlY3RpdmVMb2NhbGUgPSBcImVuLVVTXCI7XG4gIGVmZmVjdGl2ZU9mZnNldDogV2tseVdlZWtPZmZzZXQgPSAwO1xuICBlZmZlY3RpdmVIb3VyQ3ljbGU6IFwiaDEyXCIgfCBcImgyNFwiID0gXCJoMjRcIjtcbiAgZGlyZWN0aW9uID0gXCJsdHJcIjtcbiAgcm93czogUm93W10gPSBbXTtcbiAgd2Vla2RheXM6IHN0cmluZ1tdID0gW107XG4gIGRyYWZ0czogRHJhZnRbXSA9IFtdO1xuICBlcnJvcnM6IHJlYWRvbmx5IFdrbHlWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICB0b2RheSA9IDA7XG4gIGZvY3VzZWQgPSAwO1xuICBhbmNob3JXZWVrID0gMDtcbiAgZmlyc3RXZWVrID0gMDtcbiAgdmlzaWJsZUNvdW50ID0gNjtcbiAgcm93SGVpZ2h0ID0gNzY7XG4gIHNjcm9sbEhlaWdodCA9IDE1MjA3NjtcbiAgcGFkZGluZ1RvcCA9IDA7XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG4gIGNvbXBhY3QgPSBmYWxzZTtcbiAgcmVhZG9ubHkgV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cyA9IFdrbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXM7XG4gIHByaXZhdGUgYmFzZVdlZWsgPSAwO1xuICBwcml2YXRlIGZpcnN0U3VwcG9ydGVkRGF5ID0gMDtcbiAgcHJpdmF0ZSBsYXN0U3VwcG9ydGVkRGF5ID0gMDtcbiAgcHJpdmF0ZSBmaXJzdFN1cHBvcnRlZFdlZWsgPSAwO1xuICBwcml2YXRlIGxhc3RTdXBwb3J0ZWRXZWVrID0gMDtcbiAgcHJpdmF0ZSBnZW5lcmF0b3IhOiBXa2x5V2Vla0dlbmVyYXRvcjtcbiAgcHJpdmF0ZSBpbml0aWFsTW9udGggPSBcIlwiO1xuICBwcml2YXRlIGNsaXBNb250aCA9IGZhbHNlO1xuICBwcml2YXRlIGJyb3dzZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xuICBwcml2YXRlIHNjcm9sbEVuZFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgc25hcFBlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBXa2x5UGlja2VyVmFsdWUpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JDaGFuZ2VkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgY29uZmlnRXJyb3JzOiBXa2x5VmFsaWRhdGlvbkVycm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBwZW5kaW5nVmFsdWU6IFdrbHlQaWNrZXJWYWx1ZSA9IG51bGw7XG4gIHByaXZhdGUgZW1pdHRlZFZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtYW51YWxEYXRlRW5kcG9pbnQgPSAwO1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBkZWZhdWx0TG9jYWxlOiBzdHJpbmcsXG4gICAgQEluamVjdChXS0xZX0NPTkZJRykgcHJpdmF0ZSBkZWZhdWx0czogV2tseUNvbmZpZ3VyYXRpb24sXG4gICAgQEluamVjdChXS0xZX0NMT0NLKSBwcml2YXRlIGNsb2NrOiBXa2x5Q2xvY2ssXG4gICAgQEluamVjdChXS0xZX0xPQ0FMSVpBVElPTikgcHJpdmF0ZSBzdHJpbmdzOiBXa2x5U3RyaW5ncyxcbiAgICBASW5qZWN0KFdLTFlfVFJBTlNMQVRJT05TKSBwcml2YXRlIGRlZmF1bHRUcmFuc2xhdGlvbnM6IFdrbHlUcmFuc2xhdGlvbnMsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm06IE9iamVjdCxcbiAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3Qua2V5cyhjaGFuZ2VzKS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgY2hhbmdlc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZhbHVlXSAmJlxuICAgICAgICB0aGlzLmVtaXR0ZWRWYWx1ZSA9PT1cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW1pdHRlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9jdXMgPSB0aGlzLmZvY3VzZWQ7XG4gICAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgICAgaWYgKFxuICAgICAgICBjaGFuZ2VzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdIHx8XG4gICAgICAgIGNoYW5nZXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Nb2RlXSB8fFxuICAgICAgICBjaGFuZ2VzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuQ2FsZW5kYXJBZGFwdGVyXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubG9hZCh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbih0aGlzLmZvY3VzZWQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVjaygpO1xuICAgICAgICBpZiAoY2hhbmdlc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZpZXdwb3J0UHJlc2V0XSlcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uKGZvY3VzLCB0cnVlKTtcbiAgICAgICAgZWxzZSB0aGlzLnNjcm9sbFRvRXBvY2hEYXkoZm9jdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgdGhpcy5jb25maWd1cmUoKTtcbiAgICBjb25zdCBpbml0aWFsRXBvY2hEYXkgPSB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuSW5pdGlhbEVwb2NoRGF5XTtcbiAgICB0aGlzLnRvZGF5ID0gdGhpcy5icm93c2VyXG4gICAgICA/IE1hdGguZmxvb3IodGhpcy5jbG9jay5ub3coKS5nZXRUaW1lKCkgLyA4NjQwMDAwMClcbiAgICAgIDogaW5pdGlhbEVwb2NoRGF5ID09PSBudWxsXG4gICAgICAgID8gMFxuICAgICAgICA6IGluaXRpYWxFcG9jaERheTtcbiAgICB0aGlzLmZvY3VzZWQgPVxuICAgICAgaW5pdGlhbEVwb2NoRGF5ID09PSBudWxsXG4gICAgICAgID8gdGhpcy5kZWZhdWx0cy5pbml0aWFsRXBvY2hEYXkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy50b2RheVxuICAgICAgICAgIDogdGhpcy5kZWZhdWx0cy5pbml0aWFsRXBvY2hEYXlcbiAgICAgICAgOiBpbml0aWFsRXBvY2hEYXk7XG4gICAgdGhpcy5sb2FkKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WYWx1ZV0pO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMucG9zaXRpb24odGhpcy5mb2N1c2VkLCB0cnVlKTtcbiAgfVxuICBjb25maWd1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWdFcnJvcnMgPSBbXTtcbiAgICBbXG4gICAgICBXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlNob3dTZWNvbmRzLFxuICAgICAgV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5BbGxvd1JhbmdlQWNyb3NzRGlzYWJsZWQsXG4gICAgICBXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlJlcXVpcmVkLFxuICAgICAgV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZCxcbiAgICAgIFdrbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuQ2xvc2VPbkJhY2tkcm9wLFxuICAgIF0uZm9yRWFjaChcbiAgICAgIChrZXkpID0+ICgodGhpcyBhcyBhbnkpW2tleV0gPSBjb2VyY2VCb29sZWFuKCh0aGlzIGFzIGFueSlba2V5XSkpLFxuICAgICk7XG4gICAgdGhpcy5lZmZlY3RpdmVMb2NhbGUgPVxuICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkxvY2FsZV0gfHxcbiAgICAgIHRoaXMuZGVmYXVsdHMubG9jYWxlIHx8XG4gICAgICB0aGlzLmRlZmF1bHRMb2NhbGU7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSAvXihhcnxoZXxmYXx1cikoLXwkKS8udGVzdCh0aGlzLmVmZmVjdGl2ZUxvY2FsZSlcbiAgICAgID8gXCJydGxcIlxuICAgICAgOiBcImx0clwiO1xuICAgIHRoaXMuYWRhcHRlciA9XG4gICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuQ2FsZW5kYXJBZGFwdGVyXSB8fFxuICAgICAgbmV3IFdrbHlHcmVnb3JpYW5DYWxlbmRhckFkYXB0ZXIodGhpcy5lZmZlY3RpdmVMb2NhbGUpO1xuICAgIHRyeSB7XG4gICAgICBsZXQgZmlyc3REYXk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpcnN0RGF5ID0gZ2V0TG9jYWxlRmlyc3REYXlPZldlZWsodGhpcy5lZmZlY3RpdmVMb2NhbGUpO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHRoaXMuZWZmZWN0aXZlT2Zmc2V0ID0gcmVzb2x2ZVdlZWtPZmZzZXQoXG4gICAgICAgIHRoaXMuZWZmZWN0aXZlTG9jYWxlLFxuICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla09mZnNldF0sXG4gICAgICAgIHRoaXMuZGVmYXVsdHMud2Vla09mZnNldCxcbiAgICAgICAgZmlyc3REYXksXG4gICAgICApO1xuICAgICAgaW50ZWdlcih0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0NhY2hlU2l6ZV0pO1xuICAgICAgaW50ZWdlcih0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuT3ZlcnNjYW5XZWVrc10pO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0NhY2hlU2l6ZV0gPCAwIHx8XG4gICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5PdmVyc2NhbldlZWtzXSA8IDAgfHxcbiAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk92ZXJzY2FuV2Vla3NdID4gNTBcbiAgICAgIClcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoKTtcbiAgICAgIGlmIChcbiAgICAgICAgIVtcbiAgICAgICAgICBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgXCJkYXRlXCIsXG4gICAgICAgICAgXCJ0aW1lXCIsXG4gICAgICAgICAgXCJkYXRldGltZS1yYW5nZVwiLFxuICAgICAgICAgIFwiZGF0ZS1yYW5nZVwiLFxuICAgICAgICAgIFwidGltZS1yYW5nZVwiLFxuICAgICAgICBdLmluY2x1ZGVzKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Nb2RlXSlcbiAgICAgIClcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoKTtcbiAgICAgIGNvbnN0IHByZXNldCA9IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WaWV3cG9ydFByZXNldF07XG4gICAgICBpZiAocHJlc2V0LmtpbmQgPT09IFwid2Vla3NcIikge1xuICAgICAgICBpbnRlZ2VyKHByZXNldC52aXNpYmxlV2Vla0NvdW50KTtcbiAgICAgICAgaWYgKHByZXNldC52aXNpYmxlV2Vla0NvdW50IDwgMSB8fCBwcmVzZXQudmlzaWJsZVdlZWtDb3VudCA+IDUyKVxuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlc2V0LmtpbmQgPT09IFwiZnVsbC1tb250aC1hbmQtYXJvdW5kXCIpXG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBbXG4gICAgICAgICAgcHJlc2V0LmV4dHJhV2Vla3NCZWZvcmUgfHwgMCxcbiAgICAgICAgICBwcmVzZXQuZXh0cmFXZWVrc0FmdGVyIHx8IDAsXG4gICAgICAgIF0pIHtcbiAgICAgICAgICBpbnRlZ2VyKG4pO1xuICAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gNTIpIHRocm93IG5ldyBSYW5nZUVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJhdG9yID0gY3JlYXRlV2Vla0dlbmVyYXRvcih7XG4gICAgICAgIHdlZWtPZmZzZXQ6IHRoaXMuZWZmZWN0aXZlT2Zmc2V0LFxuICAgICAgICBjYWNoZVNpemU6IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrQ2FjaGVTaXplXSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHRoaXMuY29uZmlnRXJyb3JzLnB1c2goXG4gICAgICAgIGVycm9yKFxuICAgICAgICAgIFwiY29uZmlndXJhdGlvbi1lcnJvclwiLFxuICAgICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrT2Zmc2V0XSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmdlbmVyYXRvciA9IGNyZWF0ZVdlZWtHZW5lcmF0b3IoKTtcbiAgICAgIHRoaXMuZWZmZWN0aXZlT2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5zZXRTdXBwb3J0ZWRTY3JvbGxSYW5nZSgpO1xuICAgIHRoaXMuZWZmZWN0aXZlSG91ckN5Y2xlID1cbiAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Ib3VyQ3ljbGVdID09PSBcImgxMlwiXG4gICAgICAgID8gXCJoMTJcIlxuICAgICAgICA6IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Ib3VyQ3ljbGVdID09PSBcImxvY2FsZVwiXG4gICAgICAgICAgPyBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmVmZmVjdGl2ZUxvY2FsZSwge1xuICAgICAgICAgICAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgdGltZVpvbmU6IFwiVVRDXCIsXG4gICAgICAgICAgICB9KS5yZXNvbHZlZE9wdGlvbnMoKS5ob3VyMTJcbiAgICAgICAgICAgID8gXCJoMTJcIlxuICAgICAgICAgICAgOiBcImgyNFwiXG4gICAgICAgICAgOiBcImgyNFwiO1xuICAgIHRoaXMud2Vla2RheXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLmZvcm1hdFdlZWtkYXkodGhpcy5lZmZlY3RpdmVPZmZzZXQgKyBpLCBcInNob3J0XCIpLFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRTdXBwb3J0ZWRTY3JvbGxSYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgW2ZpcnN0LCBsYXN0XSA9IHRoaXMuYWRhcHRlci5zdXBwb3J0ZWRFcG9jaERheVJhbmdlO1xuICAgIGNvbnN0IFtmaXJzdFllYXIsIGxhc3RZZWFyXSA9IHRoaXMuYWRhcHRlci5zdXBwb3J0ZWRZZWFyUmFuZ2U7XG4gICAgY29uc3QgeWVhck9mID0gKGRheTogbnVtYmVyKSA9PiB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoZGF5KS55ZWFyO1xuICAgIGlmICh5ZWFyT2YoZmlyc3QpIDwgZmlyc3RZZWFyKSB7XG4gICAgICBsZXQgbG93ID0gZmlyc3QsXG4gICAgICAgIGhpZ2ggPSBsYXN0O1xuICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgY29uc3QgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgICAgaWYgKHllYXJPZihtaWQpIDwgZmlyc3RZZWFyKSBsb3cgPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpZ2ggPSBtaWQ7XG4gICAgICB9XG4gICAgICBmaXJzdCA9IGxvdztcbiAgICB9XG4gICAgaWYgKHllYXJPZihsYXN0KSA+IGxhc3RZZWFyKSB7XG4gICAgICBsZXQgbG93ID0gZmlyc3QsXG4gICAgICAgIGhpZ2ggPSBsYXN0O1xuICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgY29uc3QgbWlkID0gTWF0aC5jZWlsKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgICBpZiAoeWVhck9mKG1pZCkgPiBsYXN0WWVhcikgaGlnaCA9IG1pZCAtIDE7XG4gICAgICAgIGVsc2UgbG93ID0gbWlkO1xuICAgICAgfVxuICAgICAgbGFzdCA9IGxvdztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZmlyc3QgPiBsYXN0IHx8XG4gICAgICB5ZWFyT2YoZmlyc3QpIDwgZmlyc3RZZWFyIHx8XG4gICAgICB5ZWFyT2YoZmlyc3QpID4gbGFzdFllYXIgfHxcbiAgICAgIHllYXJPZihsYXN0KSA8IGZpcnN0WWVhciB8fFxuICAgICAgeWVhck9mKGxhc3QpID4gbGFzdFllYXJcbiAgICApXG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk5vIHN1cHBvcnRlZCBkYXlzIHdpdGhpbiB0aGUgY2FsZW5kYXIgeWVhciByYW5nZVwiKTtcbiAgICB0aGlzLmZpcnN0U3VwcG9ydGVkRGF5ID0gZmlyc3Q7XG4gICAgdGhpcy5sYXN0U3VwcG9ydGVkRGF5ID0gbGFzdDtcbiAgICB0aGlzLmZpcnN0U3VwcG9ydGVkV2VlayA9IGFic29sdXRlV2Vla09mKGZpcnN0LCB0aGlzLmVmZmVjdGl2ZU9mZnNldCk7XG4gICAgdGhpcy5sYXN0U3VwcG9ydGVkV2VlayA9IGFic29sdXRlV2Vla09mKGxhc3QsIHRoaXMuZWZmZWN0aXZlT2Zmc2V0KTtcbiAgfVxuICBwcml2YXRlIGNsYW1wRmlyc3RXZWVrKHdlZWs6IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gS2VlcCBzdXBwb3J0ZWQgd2Vla3MgaW5zaWRlIHRoZSB2aWV3cG9ydDsgcmVuZGVyUm93cyBhZGRzIHRoZSBidWZmZXIgcm93cy5cbiAgICBjb25zdCBsYXN0ID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmZpcnN0U3VwcG9ydGVkV2VlayxcbiAgICAgIHRoaXMubGFzdFN1cHBvcnRlZFdlZWsgLSB0aGlzLnZpc2libGVDb3VudCArIDEsXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5maXJzdFN1cHBvcnRlZFdlZWssIE1hdGgubWluKGxhc3QsIHdlZWspKTtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFNjcm9sbCgpO1xuICAgIGlmICh0aGlzLmJyb3dzZXIgJiYgdHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb21wYWN0ID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPCAzMzg7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgXCIud2Vlay1yb3dcIixcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgLy8gQ1NTIGhlaWdodHMgYW5kIHNjcm9sbFRvcCB1c2UgbGF5b3V0IHBpeGVsczsgY2xpZW50IHJlY3RhbmdsZXMgaW5jbHVkZSB6b29tLlxuICAgICAgICBjb25zdCBoZWlnaHQgPSByb3cgPyBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUocm93KS5oZWlnaHQpIDogMDtcbiAgICAgICAgaWYgKGhlaWdodCAmJiBoZWlnaHQgIT09IHRoaXMucm93SGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLnJvd0hlaWdodCAqIDIwMDE7XG4gICAgICAgICAgdGhpcy5yZW5kZXJSb3dzKCk7XG4gICAgICAgICAgdGhpcy5yZXNldFNjcm9sbCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5vYnNlcnZlcikgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMuc2Nyb2xsRW5kVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbEVuZFRpbWVyKTtcbiAgICBpZiAodGhpcy5nZW5lcmF0b3IpIHRoaXMuZ2VuZXJhdG9yLmNsZWFyQ2FjaGUoKTtcbiAgfVxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVdrbHlUcmFuc2xhdGlvbihcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuZWZmZWN0aXZlTG9jYWxlLFxuICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlRyYW5zbGF0aW9uc10gfHxcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNsYXRpb25zLFxuICAgICAgdGhpcy5zdHJpbmdzLFxuICAgICk7XG4gIH1cbiAgZ2V0IGlzUmFuZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Nb2RlXS5lbmRzV2l0aChcIi1yYW5nZVwiKTtcbiAgfVxuICBnZXQgaGFzRGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Nb2RlXS5zdGFydHNXaXRoKFwidGltZVwiKTtcbiAgfVxuICBnZXQgaGFzVGltZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdICE9PSBcImRhdGVcIiAmJlxuICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdICE9PSBcImRhdGUtcmFuZ2VcIlxuICAgICk7XG4gIH1cbiAgZ2V0IHN1Ym1pdFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uID09PSBcInRyYW5zaWVudFwiICYmXG4gICAgICAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdICE9PSBcImRhdGVcIiB8fFxuICAgICAgICB0aGlzLnZpZXdNb2RlID09PSBcIm1hbnVhbFwiKVxuICAgICk7XG4gIH1cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGQgPSB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoXG4gICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgIHRoaXMuZmlyc3RTdXBwb3J0ZWREYXksXG4gICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICB0aGlzLmxhc3RTdXBwb3J0ZWREYXksXG4gICAgICAgICAgICBmaXJzdEVwb2NoRGF5T2YodGhpcy5hbmNob3JXZWVrLCB0aGlzLmVmZmVjdGl2ZU9mZnNldCksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmZvcm1hdE1vbnRoKGQpICsgXCIgXCIgKyB0aGlzLmFkYXB0ZXIuZm9ybWF0WWVhcihkKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0IGNhblN1Ym1pdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0gJiZcbiAgICAgICF0aGlzLmVycm9ycy5sZW5ndGggJiZcbiAgICAgIHRoaXMucGVuZGluZ1ZhbHVlICE9PSBudWxsXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGJsYW5rKGRheTogbnVtYmVyKTogRHJhZnQge1xuICAgIGNvbnN0IHNhZmUgPSBNYXRoLm1heChcbiAgICAgIHRoaXMuZmlyc3RTdXBwb3J0ZWREYXksXG4gICAgICBNYXRoLm1pbih0aGlzLmxhc3RTdXBwb3J0ZWREYXksIGRheSksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogdGhpcy5hZGFwdGVyLmVwb2NoRGF5VG9EYXRlKHNhZmUpLFxuICAgICAgaG91cjogMCxcbiAgICAgIG1pbnV0ZTogMCxcbiAgICAgIHNlY29uZDogMCxcbiAgICAgIHByZXNlbnQ6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgbG9hZCh2YWx1ZTogV2tseVBpY2tlclZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5kcmFmdHMgPSBbdGhpcy5ibGFuayh0aGlzLmZvY3VzZWQpLCB0aGlzLmJsYW5rKHRoaXMuZm9jdXNlZCldO1xuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZVNlbGVjdGlvbih2YWx1ZSwgdGhpcywgdGhpcy5hZGFwdGVyKTtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgIXZhbGlkYXRpb24ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBbdmFsdWVdIDogdmFsdWU7XG4gICAgICB2YWx1ZXMuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICBjb25zdCBkID0gZGVjb2RlSXNvKHYpO1xuICAgICAgICB0aGlzLmRyYWZ0c1tpXSA9IHtcbiAgICAgICAgICBkYXRlOiB0aGlzLmhhc0RhdGVcbiAgICAgICAgICAgID8gdGhpcy5hZGFwdGVyLmVwb2NoRGF5VG9EYXRlKGQuZXBvY2hEYXkpXG4gICAgICAgICAgICA6IHRoaXMuYmxhbmsodGhpcy50b2RheSkuZGF0ZSxcbiAgICAgICAgICBob3VyOiBkLmhvdXIsXG4gICAgICAgICAgbWludXRlOiBkLm1pbnV0ZSxcbiAgICAgICAgICBzZWNvbmQ6IGQuc2Vjb25kLFxuICAgICAgICAgIHByZXNlbnQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpID09PSAwICYmIHRoaXMuaGFzRGF0ZSkgdGhpcy5mb2N1c2VkID0gZC5lcG9jaERheTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGlvbi5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGVuZGluZ1ZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMucmVwb3J0KHZhbGlkYXRpb24pO1xuICAgIH0gZWxzZSB0aGlzLmNoZWNrKCk7XG4gIH1cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogV2tseVBpY2tlclZhbHVlKTogdm9pZCB7XG4gICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZhbHVlXSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmxvYWQodmFsdWUpO1xuICAgICAgdGhpcy5wb3NpdGlvbih0aGlzLmZvY3VzZWQsIHRydWUpO1xuICAgIH1cbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFdrbHlQaWNrZXJWYWx1ZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0gPSBkaXNhYmxlZDtcbiAgfVxuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5sZW5ndGggPyB7IHdrbHk6IHRoaXMuZXJyb3JzIH0gOiBudWxsO1xuICB9XG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZWQgPSBmbjtcbiAgfVxuICB0b3VjaGVkKCk6IHZvaWQge1xuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5vblRvdWNoZWQoKSk7XG4gIH1cbiAgcHJpdmF0ZSByZXBvcnQoZXJyb3JzOiByZWFkb25seSBXa2x5VmFsaWRhdGlvbkVycm9yW10pOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5lcnJvcnMpICE9PSBKU09OLnN0cmluZ2lmeShlcnJvcnMpO1xuICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLlZhbGlkYXRpb25DaGFuZ2VdLmVtaXQoZXJyb3JzKTtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBjaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZURyYWZ0cyh7XG4gICAgICBkcmFmdHM6IHRoaXMuZHJhZnRzLFxuICAgICAgY29uZmlnRXJyb3JzOiB0aGlzLmNvbmZpZ0Vycm9ycyxcbiAgICAgIGFkYXB0ZXI6IHRoaXMuYWRhcHRlcixcbiAgICAgIHNlbGVjdGlvbjogdGhpcyxcbiAgICAgIG1vZGU6IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Nb2RlXSxcbiAgICAgIGlzUmFuZ2U6IHRoaXMuaXNSYW5nZSxcbiAgICAgIGhhc0RhdGU6IHRoaXMuaGFzRGF0ZSxcbiAgICAgIGhhc1RpbWU6IHRoaXMuaGFzVGltZSxcbiAgICAgIHNob3dTZWNvbmRzOiB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2hvd1NlY29uZHNdLFxuICAgICAgcmVxdWlyZWQ6IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5SZXF1aXJlZF0sXG4gICAgfSk7XG4gICAgdGhpcy5wZW5kaW5nVmFsdWUgPSByZXN1bHQucGVuZGluZ1ZhbHVlO1xuICAgIHRoaXMucmVwb3J0KHJlc3VsdC5lcnJvcnMpO1xuICB9XG4gIHRyYWNrRHJhZnQoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gRW5kcG9pbnQgY29udHJvbHMga2VlcCB0aGVpciBpZGVudGl0eSBhbmQgZm9jdXMgd2hlbiBkcmFmdCBvYmplY3RzIHN3YXAuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIHByaXZhdGUgb3JkZXJEcmFmdHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmFuZ2UgfHwgIXRoaXMuZHJhZnRzLmV2ZXJ5KChkcmFmdCkgPT4gZHJhZnQucHJlc2VudCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5kcmFmdHMuc29tZSgoZHJhZnQpID0+IGRyYWZ0LnVuc3VwcG9ydGVkRXBvY2hEYXkgIT09IHVuZGVmaW5lZCkpXG4gICAgICByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmRyYWZ0c1swXSxcbiAgICAgICAgYiA9IHRoaXMuZHJhZnRzWzFdO1xuICAgICAgY29uc3Qga2V5ID0gKGQ6IERyYWZ0KSA9PlxuICAgICAgICB0aGlzLmFkYXB0ZXIuZGF0ZVRvRXBvY2hEYXkoZC5kYXRlKSAqIDg2NDAwICtcbiAgICAgICAgKGQuaG91ciB8fCAwKSAqIDM2MDAgK1xuICAgICAgICAoZC5taW51dGUgfHwgMCkgKiA2MCArXG4gICAgICAgIChkLnNlY29uZCB8fCAwKTtcbiAgICAgIGlmIChrZXkoYSkgPiBrZXkoYikpIHRoaXMuZHJhZnRzID0gW2IsIGFdO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIC8vIEltcG9zc2libGUgb3IgaW5jb21wbGV0ZSBkYXRlcyByZW1haW4gZWRpdGFibGUgdW50aWwgY29ycmVjdGVkLlxuICAgIH1cbiAgfVxuICBmaW5pc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0pIHJldHVybjtcbiAgICB0aGlzLm9yZGVyRHJhZnRzKCk7XG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwibWFudWFsXCIgJiYgdGhpcy5oYXNEYXRlKSB0aGlzLnBvc2l0aW9uT25NYW51YWxEYXRlKCk7XG4gICAgdGhpcy5jaGVjaygpO1xuICAgIGlmICh0aGlzLnByZXNlbnRhdGlvbiA9PT0gXCJpbmxpbmVcIiAmJiB0aGlzLmNhblN1Ym1pdCkgdGhpcy5jb21taXQoKTtcbiAgfVxuICBwcml2YXRlIGNvbW1pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucGVuZGluZ1ZhbHVlO1xuICAgIGlmIChcbiAgICAgIEpTT04uc3RyaW5naWZ5KG5leHQpICE9PVxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZhbHVlXSlcbiAgICApIHtcbiAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WYWx1ZV0gPSBuZXh0O1xuICAgICAgdGhpcy5lbWl0dGVkVmFsdWUgPSBKU09OLnN0cmluZ2lmeShuZXh0KTtcbiAgICAgIHRoaXMub25DaGFuZ2UobmV4dCk7XG4gICAgICB0aGlzW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLlZhbHVlQ2hhbmdlXS5lbWl0KG5leHQpO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG4gIHN1Ym1pdChyZWFzb246IFdrbHlDbG9zZVJlYXNvbiA9IFwic3VibWl0XCIpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrKCk7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdCkgcmV0dXJuO1xuICAgIHRoaXMuY29tbWl0KCk7XG4gICAgaWYgKHRoaXMucHJlc2VudGF0aW9uID09PSBcInRyYW5zaWVudFwiKVxuICAgICAgdGhpc1tXa2x5UGlja2VyT3V0cHV0c1Byb3BlcnR5S2V5cy5DbG9zZWRdLmVtaXQocmVhc29uKTtcbiAgfVxuICBjYW5jZWwocmVhc29uOiBXa2x5Q2xvc2VSZWFzb24gPSBcImNsb3NlLWJ1dHRvblwiKTogdm9pZCB7XG4gICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0pIHJldHVybjtcbiAgICB0aGlzLmxvYWQodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZhbHVlXSk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB0aGlzW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLkNsb3NlZF0uZW1pdChyZWFzb24pO1xuICB9XG4gIG5vdygpOiB2b2lkIHtcbiAgICBpZiAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSkgcmV0dXJuO1xuICAgIGNvbnN0IG4gPSB0aGlzLmNsb2NrLm5vdygpO1xuICAgIGNvbnN0IGRheSA9IE1hdGguZmxvb3Iobi5nZXRUaW1lKCkgLyA4NjQwMDAwMCk7XG4gICAgdGhpcy5kcmFmdHMgPSBbMCwgMV0ubWFwKChpbmRleCkgPT4gKHtcbiAgICAgIC4uLnRoaXMuY2xvY2tEcmFmdChkYXksIG4pLFxuICAgICAgcHJlc2VudDogaW5kZXggPT09IDAgfHwgdGhpcy5pc1JhbmdlLFxuICAgIH0pKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmhhc0RhdGUgJiZcbiAgICAgIChkYXkgPCB0aGlzLmZpcnN0U3VwcG9ydGVkRGF5IHx8IGRheSA+IHRoaXMubGFzdFN1cHBvcnRlZERheSlcbiAgICApIHtcbiAgICAgIHRoaXMucmVwb3J0KFtlcnJvcihcInVuc3VwcG9ydGVkLWFkYXB0ZXItZGF0ZVwiLCBkYXkpXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9jdXNlZCA9IGRheTtcbiAgICB0aGlzLnBvc2l0aW9uKGRheSwgdHJ1ZSk7XG4gICAgdGhpcy5jaGVjaygpO1xuICAgIHRoaXMuc3VibWl0KFwibm93XCIpO1xuICB9XG4gIHByaXZhdGUgY2xvY2tEcmFmdChkYXk6IG51bWJlciwgbm93OiBEYXRlKTogRHJhZnQge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmJsYW5rKGRheSksXG4gICAgICBob3VyOiBub3cuZ2V0VVRDSG91cnMoKSxcbiAgICAgIG1pbnV0ZTpcbiAgICAgICAgTWF0aC5mbG9vcihcbiAgICAgICAgICBub3cuZ2V0VVRDTWludXRlcygpIC8gdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1pbnV0ZVN0ZXBdLFxuICAgICAgICApICogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1pbnV0ZVN0ZXBdLFxuICAgICAgc2Vjb25kOiB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2hvd1NlY29uZHNdXG4gICAgICAgID8gTWF0aC5mbG9vcihcbiAgICAgICAgICAgIG5vdy5nZXRVVENTZWNvbmRzKCkgLyB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2Vjb25kU3RlcF0sXG4gICAgICAgICAgKSAqIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5TZWNvbmRTdGVwXVxuICAgICAgICA6IDAsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGluaXRpYWxpemVNYW51YWxSYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1JhbmdlIHx8XG4gICAgICAhdGhpcy5oYXNEYXRlIHx8XG4gICAgICB0aGlzLmRyYWZ0cy5ldmVyeSgoZHJhZnQpID0+IGRyYWZ0LnByZXNlbnQpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGxldCBzZWVkID0gdGhpcy5kcmFmdHMuZmluZCgoZHJhZnQpID0+IGRyYWZ0LnByZXNlbnQpO1xuICAgIGlmICghc2VlZCkge1xuICAgICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WYWx1ZV0gIT09IG51bGwpIHJldHVybjtcbiAgICAgIGNvbnN0IG5vdyA9IHRoaXMuY2xvY2subm93KCk7XG4gICAgICBjb25zdCBpbml0aWFsRXBvY2hEYXkgPVxuICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuSW5pdGlhbEVwb2NoRGF5XTtcbiAgICAgIGNvbnN0IGRheSA9XG4gICAgICAgIGluaXRpYWxFcG9jaERheSA9PT0gbnVsbFxuICAgICAgICAgID8gdGhpcy5kZWZhdWx0cy5pbml0aWFsRXBvY2hEYXkgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBNYXRoLmZsb29yKG5vdy5nZXRUaW1lKCkgLyA4NjQwMDAwMClcbiAgICAgICAgICAgIDogdGhpcy5kZWZhdWx0cy5pbml0aWFsRXBvY2hEYXlcbiAgICAgICAgICA6IGluaXRpYWxFcG9jaERheTtcbiAgICAgIHNlZWQgPSB7IC4uLnRoaXMuY2xvY2tEcmFmdChkYXksIG5vdyksIHByZXNlbnQ6IHRydWUgfTtcbiAgICB9XG4gICAgLy8gQ29tcGxldGUgbWlzc2luZyBlbmRwb2ludHMgd2l0aG91dCByZXBsYWNpbmcgc2VsZWN0ZWQgb3IgaW52YWxpZCBkcmFmdHMuXG4gICAgY29uc3QgaW5pdGlhbCA9IHNlZWQ7XG4gICAgdGhpcy5kcmFmdHMgPSB0aGlzLmRyYWZ0cy5tYXAoKGRyYWZ0KSA9PlxuICAgICAgZHJhZnQucHJlc2VudCA/IGRyYWZ0IDogeyAuLi5pbml0aWFsLCBkYXRlOiB7IC4uLmluaXRpYWwuZGF0ZSB9IH0sXG4gICAgKTtcbiAgICB0aGlzLmZpbmlzaCgpO1xuICAgIC8vIFBvc2l0aW9uaW5nIHJlbmRlcnMgYmVmb3JlIHZhbGlkYXRpb247IHJlZnJlc2ggY29tcGxldGlvbiBjb250cm9scyBhZnRlcndhcmQuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICB0b2dnbGVWaWV3KCk6IHZvaWQge1xuICAgIGlmICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdIHx8ICF0aGlzLmhhc0RhdGUpIHJldHVybjtcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy52aWV3TW9kZSA9PT0gXCJjYWxlbmRhclwiID8gXCJtYW51YWxcIiA6IFwiY2FsZW5kYXJcIjtcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJtYW51YWxcIikgdGhpcy5pbml0aWFsaXplTWFudWFsUmFuZ2UoKTtcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJjYWxlbmRhclwiKSB0aGlzLnBvc2l0aW9uT25NYW51YWxEYXRlKCk7XG4gICAgdGhpc1tXa2x5UGlja2VyT3V0cHV0c1Byb3BlcnR5S2V5cy5WaWV3TW9kZUNoYW5nZV0uZW1pdCh0aGlzLnZpZXdNb2RlKTtcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJjYWxlbmRhclwiKSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXRTY3JvbGwoKSk7XG4gIH1cbiAgcHJpdmF0ZSBwb3NpdGlvbk9uTWFudWFsRGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBkcmFmdCA9IHRoaXMuZHJhZnRzW3RoaXMubWFudWFsRGF0ZUVuZHBvaW50XTtcbiAgICBpZiAoIWRyYWZ0IHx8ICFkcmFmdC5wcmVzZW50KSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIC8vIEEgdmFsaWQgZGF5IGZvbGxvd3MgdGhlIHNlbGVjdGlvbi4gQW4gaW1wb3NzaWJsZSBkYXkga2VlcHMgaXRzIGRyYWZ0XG4gICAgICAvLyBmaWVsZHMgYnV0IHN0aWxsIHNob3dzIHRoZSBjaG9zZW4gbW9udGggaW4gdGhlIGNhbGVuZGFyLlxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5hZGFwdGVyLmRhdGVUb0Vwb2NoRGF5KGRyYWZ0LmRhdGUpO1xuICAgICAgdGhpcy5mb2N1c2VkID0gdGFyZ2V0O1xuICAgICAgdGhpcy5wb3NpdGlvbih0YXJnZXQsIHRydWUpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5hZGFwdGVyLmRhdGVUb0Vwb2NoRGF5KHsgLi4uZHJhZnQuZGF0ZSwgZGF5OiAxIH0pO1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBmaXJzdDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbihmaXJzdCwgdHJ1ZSk7XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cbiAgfVxuICBtb250aHMoZHJhZnQ6IERyYWZ0KTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmdldE1vbnRocyhkcmFmdC5kYXRlLnllYXIpLm1hcCgobSkgPT4gbS5sYWJlbCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICBtb250aENvdW50KGRyYWZ0OiBEcmFmdCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubW9udGhzKGRyYWZ0KS5sZW5ndGggfHwgMTI7XG4gIH1cbiAgZ2V0IGluRGF5cygpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gZHJhZnREYXlEaWZmZXJlbmNlKHRoaXMuZHJhZnRzLCB0aGlzLmFkYXB0ZXIpO1xuICB9XG4gIGdldCBpbkRheXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRheXMgPSB0aGlzLmluRGF5cztcbiAgICByZXR1cm4gdGhpcy50KFwiaW5EYXlzXCIpLnJlcGxhY2UoXG4gICAgICAve3tcXHMqZGF5c1xccyp9fS9nLFxuICAgICAgZGF5cyA9PT0gbnVsbFxuICAgICAgICA/IHRoaXMudChcImRheXNVbmF2YWlsYWJsZVwiKVxuICAgICAgICA6IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmVmZmVjdGl2ZUxvY2FsZSwge1xuICAgICAgICAgICAgdXNlR3JvdXBpbmc6IGZhbHNlLFxuICAgICAgICAgIH0pLmZvcm1hdChkYXlzKSxcbiAgICApO1xuICB9XG4gIGdldCByZXN1bHRpbmdFbmREYXRlKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gdGhpcy5kcmFmdHNbMV07XG4gICAgICBpZiAoXG4gICAgICAgIGRyYWZ0LnVuc3VwcG9ydGVkRXBvY2hEYXkgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLmFkYXB0ZXIudmFsaWRhdGVEYXRlKGRyYWZ0LmRhdGUpLmxlbmd0aFxuICAgICAgKVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuYWRhcHRlci5mb3JtYXREYXkoZHJhZnQuZGF0ZSksXG4gICAgICAgIHRoaXMuYWRhcHRlci5mb3JtYXRNb250aChkcmFmdC5kYXRlKSxcbiAgICAgICAgdGhpcy5hZGFwdGVyLmZvcm1hdFllYXIoZHJhZnQuZGF0ZSksXG4gICAgICBdLmpvaW4oXCIgXCIpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuICB0b2dnbGVFbmRWaWV3KHZpZXc6IFwiZGF0ZVwiIHwgXCJkYXlzXCIpOiB2b2lkIHtcbiAgICBpZiAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSkgcmV0dXJuO1xuICAgIHRoaXMuZW5kVmlldyA9IHZpZXc7XG4gIH1cbiAgZGF5cyh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdKSByZXR1cm47XG4gICAgdGhpcy5tYW51YWxEYXRlRW5kcG9pbnQgPSAxO1xuICAgIHNldERyYWZ0RGF5RGlmZmVyZW5jZSh0aGlzLmRyYWZ0cywgdGhpcy5hZGFwdGVyLCB2YWx1ZSk7XG4gICAgdGhpcy5jaGVjaygpO1xuICB9XG4gIGZpZWxkKGluZGV4OiBudW1iZXIsIGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0pIHJldHVybjtcbiAgICBjb25zdCBkcmFmdCA9IHRoaXMuZHJhZnRzW2luZGV4XTtcbiAgICBkcmFmdC5wcmVzZW50ID0gdHJ1ZTtcbiAgICBpZiAoZmllbGQgPT09IFwiZGF5XCIgfHwgZmllbGQgPT09IFwieWVhclwiIHx8IGZpZWxkID09PSBcIm1vbnRoXCIpIHtcbiAgICAgIHRoaXMubWFudWFsRGF0ZUVuZHBvaW50ID0gaW5kZXg7XG4gICAgICBkZWxldGUgZHJhZnQudW5zdXBwb3J0ZWRFcG9jaERheTtcbiAgICAgIGxldCBkYXRlID0geyAuLi5kcmFmdC5kYXRlLCBbZmllbGRdOiB2YWx1ZSB9IGFzIFdrbHlDYWxlbmRhckRhdGU7XG4gICAgICBpZiAoZmllbGQgPT09IFwibW9udGhcIikge1xuICAgICAgICBsZXQgbW9udGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9udGggPSB0aGlzLmFkYXB0ZXJcbiAgICAgICAgICAgIC5nZXRNb250aHMoZGF0ZS55ZWFyKVxuICAgICAgICAgICAgLmZpbmQoKG0pID0+IG0ubW9udGggPT09IHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgZGF0ZSA9IHsgLi4uZGF0ZSwgbW9udGhDb2RlOiBtb250aCA/IG1vbnRoLm1vbnRoQ29kZSA6IFwiXCIgfTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZCA9PT0gXCJ5ZWFyXCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtb250aHMgPSB0aGlzLmFkYXB0ZXIuZ2V0TW9udGhzKHZhbHVlKTtcbiAgICAgICAgICBjb25zdCBtb250aCA9IG1vbnRocy5maW5kKChtKSA9PiBtLm1vbnRoQ29kZSA9PT0gZGF0ZS5tb250aENvZGUpO1xuICAgICAgICAgIGlmIChtb250aCkgZGF0ZSA9IHsgLi4uZGF0ZSwgbW9udGg6IG1vbnRoLm1vbnRoIH07XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9XG4gICAgICBkcmFmdC5kYXRlID0gZGF0ZTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkID09PSBcImhvdXJcIiAmJiB0aGlzLmVmZmVjdGl2ZUhvdXJDeWNsZSA9PT0gXCJoMTJcIilcbiAgICAgIGRyYWZ0LmhvdXIgPVxuICAgICAgICB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdmFsdWUgPj0gMSAmJiB2YWx1ZSA8PSAxMlxuICAgICAgICAgICAgPyAodmFsdWUgJSAxMikgKyAoKGRyYWZ0LmhvdXIgfHwgMCkgPj0gMTIgPyAxMiA6IDApXG4gICAgICAgICAgICA6IDI0ICsgdmFsdWU7XG4gICAgZWxzZSAoZHJhZnQgYXMgYW55KVtmaWVsZF0gPSB2YWx1ZTtcbiAgICB0aGlzLmNoZWNrKCk7XG4gIH1cbiAgZGlzcGxheUhvdXIoZHJhZnQ6IERyYWZ0KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIGRyYWZ0LmhvdXIgPT09IG51bGxcbiAgICAgID8gbnVsbFxuICAgICAgOiB0aGlzLmVmZmVjdGl2ZUhvdXJDeWNsZSA9PT0gXCJoMTJcIlxuICAgICAgICA/IGRyYWZ0LmhvdXIgJSAxMiB8fCAxMlxuICAgICAgICA6IGRyYWZ0LmhvdXI7XG4gIH1cbiAgcGVyaW9kKGluZGV4OiBudW1iZXIsIHBlcmlvZDogXCJhbVwiIHwgXCJwbVwiIHwgXCIyNFwiKTogdm9pZCB7XG4gICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0pIHJldHVybjtcbiAgICBpZiAocGVyaW9kID09PSBcIjI0XCIpIHRoaXMuZWZmZWN0aXZlSG91ckN5Y2xlID0gXCJoMjRcIjtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuZWZmZWN0aXZlSG91ckN5Y2xlID0gXCJoMTJcIjtcbiAgICAgIHRoaXMuZHJhZnRzW2luZGV4XS5ob3VyID1cbiAgICAgICAgKCh0aGlzLmRyYWZ0c1tpbmRleF0uaG91ciB8fCAwKSAlIDEyKSArIChwZXJpb2QgPT09IFwicG1cIiA/IDEyIDogMCk7XG4gICAgICB0aGlzLmRyYWZ0c1tpbmRleF0ucHJlc2VudCA9IHRydWU7XG4gICAgICB0aGlzLmZpbmlzaCgpO1xuICAgIH1cbiAgfVxuICBzZWxlY3RlZChkYXk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyYWZ0cy5zb21lKChkKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZC5wcmVzZW50ICYmIHRoaXMuYWRhcHRlci5kYXRlVG9FcG9jaERheShkLmRhdGUpID09PSBkYXk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBpblJhbmdlKGRheTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzUmFuZ2UgfHwgIXRoaXMuZHJhZnRzLmV2ZXJ5KChkKSA9PiBkLnByZXNlbnQpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmFkYXB0ZXIuZGF0ZVRvRXBvY2hEYXkodGhpcy5kcmFmdHNbMF0uZGF0ZSksXG4gICAgICAgIGIgPSB0aGlzLmFkYXB0ZXIuZGF0ZVRvRXBvY2hEYXkodGhpcy5kcmFmdHNbMV0uZGF0ZSk7XG4gICAgICByZXR1cm4gZGF5ID4gTWF0aC5taW4oYSwgYikgJiYgZGF5IDwgTWF0aC5tYXgoYSwgYik7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBkYXlEaXNhYmxlZChkYXk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChkYXkgPCB0aGlzLmZpcnN0U3VwcG9ydGVkRGF5IHx8IGRheSA+IHRoaXMubGFzdFN1cHBvcnRlZERheSlcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5hZGFwdGVyLmVwb2NoRGF5VG9EYXRlKGRheSk7XG4gICAgICBjb25zdCBpc0RhdGVEaXNhYmxlZCA9IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Jc0RhdGVEaXNhYmxlZF07XG4gICAgICBpZiAoXG4gICAgICAgIGlzRGF0ZURpc2FibGVkICYmXG4gICAgICAgIGlzRGF0ZURpc2FibGVkKGRheSwge1xuICAgICAgICAgIG1vZGU6IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Nb2RlXSxcbiAgICAgICAgICBlbmRwb2ludDogdGhpcy5pc1JhbmdlXG4gICAgICAgICAgICA/IHRoaXMuZHJhZnRzWzBdPy5wcmVzZW50ICYmICF0aGlzLmRyYWZ0c1sxXT8ucHJlc2VudFxuICAgICAgICAgICAgICA/IFwiZW5kXCJcbiAgICAgICAgICAgICAgOiBcInN0YXJ0XCJcbiAgICAgICAgICAgIDogXCJzaW5nbGVcIixcbiAgICAgICAgICBjYWxlbmRhckRhdGU6IGRhdGUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgbWluID0gdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1pbl07XG4gICAgICBjb25zdCBtYXggPSB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTWF4XTtcbiAgICAgIGlmIChtaW4gJiYgZGF5IDwgZGVjb2RlSXNvKG1pbikuZXBvY2hEYXkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKG1heCAmJiBkYXkgPiBkZWNvZGVJc28obWF4KS5lcG9jaERheSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHNlbGVjdChkYXk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdIHx8IHRoaXMuZGF5RGlzYWJsZWQoZGF5KSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmZvY3VzZWQgPSBkYXk7XG4gICAgY29uc3QgaW5kZXggPVxuICAgICAgdGhpcy5pc1JhbmdlICYmIHRoaXMuZHJhZnRzWzBdLnByZXNlbnQgJiYgIXRoaXMuZHJhZnRzWzFdLnByZXNlbnQgPyAxIDogMDtcbiAgICBpZiAodGhpcy5pc1JhbmdlICYmIGluZGV4ID09PSAwKSB0aGlzLmRyYWZ0c1sxXS5wcmVzZW50ID0gZmFsc2U7XG4gICAgZGVsZXRlIHRoaXMuZHJhZnRzW2luZGV4XS51bnN1cHBvcnRlZEVwb2NoRGF5O1xuICAgIHRoaXMuZHJhZnRzW2luZGV4XS5kYXRlID0gdGhpcy5hZGFwdGVyLmVwb2NoRGF5VG9EYXRlKGRheSk7XG4gICAgdGhpcy5kcmFmdHNbaW5kZXhdLnByZXNlbnQgPSB0cnVlO1xuICAgIHRoaXMub3JkZXJEcmFmdHMoKTtcbiAgICB0aGlzLnJlbmRlclJvd3MoKTtcbiAgICB0aGlzLmZpbmlzaCgpO1xuICAgIGlmIChcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uID09PSBcInRyYW5zaWVudFwiICYmXG4gICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTW9kZV0gPT09IFwiZGF0ZVwiICYmXG4gICAgICB0aGlzLnZpZXdNb2RlID09PSBcImNhbGVuZGFyXCJcbiAgICApXG4gICAgICB0aGlzLnN1Ym1pdChcImF1dG8tc3VibWl0XCIpO1xuICB9XG4gIGtleShldmVudDogS2V5Ym9hcmRFdmVudCwgZGF5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgZGVsdGEgPSAwO1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dMZWZ0XCIpIGRlbHRhID0gLTE7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpIGRlbHRhID0gMTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikgZGVsdGEgPSAtNztcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSBkZWx0YSA9IDc7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJQYWdlVXBcIilcbiAgICAgIGRlbHRhID0gLTcgKiAoZXZlbnQuc2hpZnRLZXkgPyB0aGlzLnZpc2libGVDb3VudCA6IDEpO1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiUGFnZURvd25cIilcbiAgICAgIGRlbHRhID0gNyAqIChldmVudC5zaGlmdEtleSA/IHRoaXMudmlzaWJsZUNvdW50IDogMSk7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJIb21lXCIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNjcm9sbFRvRXBvY2hEYXkodGhpcy50b2RheSwgeyBmb2N1czogdHJ1ZSB9KTtcbiAgICB9XG4gICAgaWYgKGRlbHRhKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZGF5ICsgZGVsdGE7XG4gICAgICBpZiAodGFyZ2V0ID49IHRoaXMuZmlyc3RTdXBwb3J0ZWREYXkgJiYgdGFyZ2V0IDw9IHRoaXMubGFzdFN1cHBvcnRlZERheSlcbiAgICAgICAgdGhpcy5zY3JvbGxUb0Vwb2NoRGF5KHRhcmdldCwgeyBmb2N1czogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBwb3NpdGlvbihcbiAgICBkYXk6IG51bWJlcixcbiAgICBwcmVzZXQgPSBmYWxzZSxcbiAgICBvcHRpb25zOiBXa2x5SnVtcE9wdGlvbnMgPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgZGF5ID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmZpcnN0U3VwcG9ydGVkRGF5LFxuICAgICAgTWF0aC5taW4odGhpcy5sYXN0U3VwcG9ydGVkRGF5LCBkYXkpLFxuICAgICk7XG4gICAgdGhpcy5hbmNob3JXZWVrID0gYWJzb2x1dGVXZWVrT2YoZGF5LCB0aGlzLmVmZmVjdGl2ZU9mZnNldCk7XG4gICAgY29uc3Qgdmlld3BvcnRQcmVzZXQgPSB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmlld3BvcnRQcmVzZXRdO1xuICAgIHRoaXMuY2xpcE1vbnRoID0gcHJlc2V0ICYmIHZpZXdwb3J0UHJlc2V0LmtpbmQgPT09IFwiZnVsbC1tb250aFwiO1xuICAgIGlmIChwcmVzZXQgJiYgdmlld3BvcnRQcmVzZXQua2luZCAhPT0gXCJ3ZWVrc1wiKSB7XG4gICAgICBjb25zdCBkID0gdGhpcy5hZGFwdGVyLmVwb2NoRGF5VG9EYXRlKGRheSk7XG4gICAgICB0aGlzLmluaXRpYWxNb250aCA9IGQueWVhciArIFwiL1wiICsgZC5tb250aENvZGU7XG4gICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSBjYWxlbmRhck1vbnRoQm91bmRzKHRoaXMuYWRhcHRlciwgZGF5KTtcbiAgICAgIHRoaXMuZmlyc3RXZWVrID0gYWJzb2x1dGVXZWVrT2Yoc3RhcnQsIHRoaXMuZWZmZWN0aXZlT2Zmc2V0KTtcbiAgICAgIHRoaXMudmlzaWJsZUNvdW50ID1cbiAgICAgICAgYWJzb2x1dGVXZWVrT2YoZW5kLCB0aGlzLmVmZmVjdGl2ZU9mZnNldCkgLSB0aGlzLmZpcnN0V2VlayArIDE7XG4gICAgICBpZiAoXG4gICAgICAgIHZpZXdwb3J0UHJlc2V0LmtpbmQgPT09IFwiZnVsbC1tb250aC1hbmQtYXJvdW5kXCIgJiZcbiAgICAgICAgIXRoaXMuY29uZmlnRXJyb3JzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IHZpZXdwb3J0UHJlc2V0LmV4dHJhV2Vla3NCZWZvcmUgfHwgMCxcbiAgICAgICAgICBhZnRlciA9IHZpZXdwb3J0UHJlc2V0LmV4dHJhV2Vla3NBZnRlciB8fCAwO1xuICAgICAgICB0aGlzLmZpcnN0V2VlayAtPSBiZWZvcmU7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvdW50ICs9IGJlZm9yZSArIGFmdGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmlld3BvcnRQcmVzZXQua2luZCA9PT0gXCJ3ZWVrc1wiKVxuICAgICAgICB0aGlzLnZpc2libGVDb3VudCA9IHRoaXMuY29uZmlnRXJyb3JzLmxlbmd0aFxuICAgICAgICAgID8gNlxuICAgICAgICAgIDogdmlld3BvcnRQcmVzZXQudmlzaWJsZVdlZWtDb3VudDtcbiAgICAgIHRoaXMuZmlyc3RXZWVrID1cbiAgICAgICAgdGhpcy5hbmNob3JXZWVrIC1cbiAgICAgICAgKG9wdGlvbnMuYWxpZ24gPT09IFwic3RhcnRcIlxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogb3B0aW9ucy5hbGlnbiA9PT0gXCJlbmRcIlxuICAgICAgICAgICAgPyB0aGlzLnZpc2libGVDb3VudCAtIDFcbiAgICAgICAgICAgIDogTWF0aC5mbG9vcih0aGlzLnZpc2libGVDb3VudCAvIDIpKTtcbiAgICB9XG4gICAgdGhpcy5maXJzdFdlZWsgPSB0aGlzLmNsYW1wRmlyc3RXZWVrKHRoaXMuZmlyc3RXZWVrKTtcbiAgICB0aGlzLmJhc2VXZWVrID0gdGhpcy5maXJzdFdlZWsgLSAxMDAwO1xuICAgIHRoaXMucmVuZGVyUm93cygpO1xuICAgIC8vIEFwcGx5IHRoZSBuZXcgcnVud2F5IGJlZm9yZSB3cml0aW5nIHNjcm9sbFRvcCBvciBsb2NhdGluZyBhIGZvY3VzIHRhcmdldC5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnJlc2V0U2Nyb2xsKCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNldFNjcm9sbCgpOiB2b2lkIHtcbiAgICAvLyBSb3VuZCB3ZWVrIGJvdW5kYXJpZXMgdG8gYXZvaWQgc2Nyb2xsVG9wIHRydW5jYXRpb24gdW5kZXIgQ1NTIHpvb20uXG4gICAgaWYgKHRoaXMuc2Nyb2xsZXIpXG4gICAgICB0aGlzLnNjcm9sbGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gTWF0aC5yb3VuZCgxMDAwICogdGhpcy5yb3dIZWlnaHQpO1xuICB9XG4gIHNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuc25hcFBlbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2NoZWR1bGVTbmFwKCk7XG4gICAgLy8gUXVhbnRpemUgZGlzcGxhY2VtZW50IGFyb3VuZCB0aGUgcmVzZXQgcG9pbnQsIGVxdWFsbHkgaW4gYm90aCBkaXJlY3Rpb25zLlxuICAgIGNvbnN0IHJlbGF0aXZlUm93cyA9IGVsZW1lbnQuc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQgLSAxMDAwO1xuICAgIGNvbnN0IGluZGV4ID1cbiAgICAgIDEwMDAgKyBNYXRoLnNpZ24ocmVsYXRpdmVSb3dzKSAqIE1hdGgucm91bmQoTWF0aC5hYnMocmVsYXRpdmVSb3dzKSk7XG4gICAgY29uc3QgcmVxdWVzdGVkRmlyc3QgPSB0aGlzLmJhc2VXZWVrICsgaW5kZXg7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmNsYW1wRmlyc3RXZWVrKHJlcXVlc3RlZEZpcnN0KTtcbiAgICBpZiAocmVxdWVzdGVkRmlyc3QgIT09IGZpcnN0KSB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IE1hdGgucm91bmQoKGZpcnN0IC0gdGhpcy5iYXNlV2VlaykgKiB0aGlzLnJvd0hlaWdodCk7XG4gICAgfVxuICAgIGlmIChmaXJzdCA9PT0gdGhpcy5maXJzdFdlZWspIHJldHVybjtcbiAgICB0aGlzLmNsaXBNb250aCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyc3RXZWVrID0gZmlyc3Q7XG4gICAgdGhpcy5hbmNob3JXZWVrID0gZmlyc3QgKyBNYXRoLmZsb29yKHRoaXMudmlzaWJsZUNvdW50IC8gMik7XG4gICAgaWYgKGluZGV4IDwgMTAwIHx8IGluZGV4ID4gMTkwMCkge1xuICAgICAgLy8gUHJlc2VydmUgc2lnbmVkIGRpc3BsYWNlbWVudCBmcm9tIHRoaXMgd2VlazsgbW9kdWxvIHR1cm5zIGZyYWN0aW9uYWxcbiAgICAgIC8vIHJvdW5kaW5nIGp1c3QgYmVsb3cgYSBib3VuZGFyeSBpbnRvIGFsbW9zdCBhIGZ1bGwgcm93IGFmdGVyIHJlYmFzaW5nLlxuICAgICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgLSAoZmlyc3QgLSB0aGlzLmJhc2VXZWVrKSAqIHRoaXMucm93SGVpZ2h0O1xuICAgICAgdGhpcy5iYXNlV2VlayA9IGZpcnN0IC0gMTAwMDtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gTWF0aC5yb3VuZCgxMDAwICogdGhpcy5yb3dIZWlnaHQgKyBvZmZzZXQpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlclJvd3MoKTtcbiAgfVxuICBwcml2YXRlIHNjaGVkdWxlU25hcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JvbGxFbmRUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsRW5kVGltZXIpO1xuICAgIHRoaXMuc2Nyb2xsRW5kVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc25hcFdlZWsoKSwgMjAwKTtcbiAgfVxuICBzbmFwV2VlaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY3JvbGxFbmRUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsRW5kVGltZXIpO1xuICAgIHRoaXMuc2Nyb2xsRW5kVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCF0aGlzLnNuYXBQZW5kaW5nIHx8ICF0aGlzLnNjcm9sbGVyKSByZXR1cm47XG4gICAgdGhpcy5zbmFwUGVuZGluZyA9IGZhbHNlO1xuICAgIC8vIEFsaWduIHRoZSBjdXJyZW50IHZpcnR1YWwgd2VlayB3aXRob3V0IHJlYnVpbGRpbmcgb3IgcmViYXNpbmcgaXRzIHJvd3MuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2Nyb2xsZXIubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB0YXJnZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgKHRoaXMuZmlyc3RXZWVrIC0gdGhpcy5iYXNlV2VlaykgKiB0aGlzLnJvd0hlaWdodCxcbiAgICApO1xuICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCAhPT0gdGFyZ2V0KSBlbGVtZW50LnNjcm9sbFRvcCA9IHRhcmdldDtcbiAgfVxuICBwcml2YXRlIHNob3dGaXJzdFdlZWsod2VlazogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmNsYW1wRmlyc3RXZWVrKHdlZWspO1xuICAgIGlmIChmaXJzdCA9PT0gdGhpcy5maXJzdFdlZWspIHJldHVybjtcbiAgICB0aGlzLmNsaXBNb250aCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyc3RXZWVrID0gZmlyc3Q7XG4gICAgdGhpcy5hbmNob3JXZWVrID0gZmlyc3QgKyBNYXRoLmZsb29yKHRoaXMudmlzaWJsZUNvdW50IC8gMik7XG4gICAgdGhpcy5iYXNlV2VlayA9IGZpcnN0IC0gMTAwMDtcbiAgICB0aGlzLnJlbmRlclJvd3MoKTtcbiAgICB0aGlzLnJlc2V0U2Nyb2xsKCk7XG4gIH1cbiAgY2FuTW92ZVdlZWsoZGVsdGE6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsYW1wRmlyc3RXZWVrKHRoaXMuZmlyc3RXZWVrICsgZGVsdGEpICE9PSB0aGlzLmZpcnN0V2VlaztcbiAgfVxuICBtb3ZlV2VlayhkZWx0YTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdKVxuICAgICAgdGhpcy5zaG93Rmlyc3RXZWVrKHRoaXMuZmlyc3RXZWVrICsgZGVsdGEpO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyUm93cygpOiB2b2lkIHtcbiAgICAvLyBLZWVwIHRoZSB2aXJ0dWFsIHNjcm9sbCBvZmZzZXQgaGVyZTsgcm93IGRhdGEgaXMgc2hhcmVkIGFjcm9zcyBBbmd1bGFyIHZlcnNpb25zLlxuICAgIGNvbnN0IG92ZXJzY2FuID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oNTAsIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5PdmVyc2NhbldlZWtzXSB8fCAwKSxcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5maXJzdFdlZWsgLSBvdmVyc2NhbjtcbiAgICB0aGlzLnBhZGRpbmdUb3AgPSAoc3RhcnQgLSB0aGlzLmJhc2VXZWVrKSAqIHRoaXMucm93SGVpZ2h0O1xuICAgIHRoaXMucm93cyA9IGNyZWF0ZVdlZWtSb3dzKHtcbiAgICAgIGdlbmVyYXRvcjogdGhpcy5nZW5lcmF0b3IsXG4gICAgICBhZGFwdGVyOiB0aGlzLmFkYXB0ZXIsXG4gICAgICBzdGFydFdlZWs6IHN0YXJ0LFxuICAgICAgY291bnQ6IHRoaXMudmlzaWJsZUNvdW50ICsgMiAqIG92ZXJzY2FuLFxuICAgICAgZmlyc3RWaXNpYmxlV2VlazogdGhpcy5maXJzdFdlZWssXG4gICAgICBmaXJzdFN1cHBvcnRlZERheTogdGhpcy5maXJzdFN1cHBvcnRlZERheSxcbiAgICAgIGxhc3RTdXBwb3J0ZWREYXk6IHRoaXMubGFzdFN1cHBvcnRlZERheSxcbiAgICAgIGNsaXBNb250aDogdGhpcy5jbGlwTW9udGgsXG4gICAgICBpbml0aWFsTW9udGg6IHRoaXMuaW5pdGlhbE1vbnRoLFxuICAgICAgd2Vla0xhYmVsTW9kZTogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbE1vZGVdLFxuICAgICAgd2Vla0xhYmVsRm9ybWF0dGVyOlxuICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsRm9ybWF0dGVyXSB8fCBudWxsLFxuICAgICAgaXNEYXlEaXNhYmxlZDogKGRheSkgPT4gdGhpcy5kYXlEaXNhYmxlZChkYXkpLFxuICAgIH0pO1xuICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmlld3BvcnRDaGFuZ2VdLmVtaXQoe1xuICAgICAgZmlyc3RWaXNpYmxlQWJzb2x1dGVXZWVrOiB0aGlzLmZpcnN0V2VlayxcbiAgICAgIGxhc3RWaXNpYmxlQWJzb2x1dGVXZWVrOiB0aGlzLmZpcnN0V2VlayArIHRoaXMudmlzaWJsZUNvdW50IC0gMSxcbiAgICAgIGFuY2hvckFic29sdXRlV2VlazogdGhpcy5hbmNob3JXZWVrLFxuICAgIH0pO1xuICB9XG4gIC8vIFJldGFpbiBkYXkgRE9NIG5vZGVzIGFuZCBrZXlib2FyZCBmb2N1cyB3aGVuIHJvdyBtZXRhZGF0YSBpcyByZWdlbmVyYXRlZC5cbiAgdHJhY2tDZWxsKF9pOiBudW1iZXIsIGNlbGw6IHsgZXBvY2hEYXk6IG51bWJlciB9KTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2VsbC5lcG9jaERheTtcbiAgfVxuICB0cmFja1JvdyhfaTogbnVtYmVyLCByb3c6IFJvdyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHJvdy53ZWVrLmFic29sdXRlV2VlaztcbiAgfVxuICBzY3JvbGxUb0Vwb2NoRGF5KGRheTogbnVtYmVyLCBvcHRpb25zOiBXa2x5SnVtcE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGludGVnZXIoZGF5KTtcbiAgICB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoZGF5KTtcbiAgICBkYXkgPSBNYXRoLm1heChcbiAgICAgIHRoaXMuZmlyc3RTdXBwb3J0ZWREYXksXG4gICAgICBNYXRoLm1pbih0aGlzLmxhc3RTdXBwb3J0ZWREYXksIGRheSksXG4gICAgKTtcbiAgICAvLyBwb3NpdGlvbiByZW5kZXJzIHN5bmNocm9ub3VzbHk7IHB1Ymxpc2ggdGhlIHRhYiBzdG9wIGJlZm9yZSB0aGF0IHJlbmRlci5cbiAgICBpZiAob3B0aW9ucy5mb2N1cykgdGhpcy5mb2N1c2VkID0gZGF5O1xuICAgIHRoaXMucG9zaXRpb24oZGF5LCBmYWxzZSwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuc2VsZWN0KSB0aGlzLnNlbGVjdChkYXkpO1xuICAgIGlmIChvcHRpb25zLmZvY3VzKSB0aGlzLmZvY3VzRGF5KCk7XG4gIH1cbiAgc2Nyb2xsVG9BYnNvbHV0ZVdlZWsod2VlazogbnVtYmVyLCBvcHRpb25zOiBXa2x5SnVtcE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIC8vIEEgYm91bmRhcnkgd2VlayBjYW4gc3RhcnQgYmVmb3JlIHRoZSBhZGFwdGVyJ3MgZmlyc3Qgc3VwcG9ydGVkIGRheS5cbiAgICBjb25zdCBmaXJzdCA9IGZpcnN0RXBvY2hEYXlPZih3ZWVrLCB0aGlzLmVmZmVjdGl2ZU9mZnNldCk7XG4gICAgdGhpcy5zY3JvbGxUb0Vwb2NoRGF5KFxuICAgICAgd2VlayA9PT0gdGhpcy5maXJzdFN1cHBvcnRlZFdlZWtcbiAgICAgICAgPyBNYXRoLm1heChmaXJzdCwgdGhpcy5maXJzdFN1cHBvcnRlZERheSlcbiAgICAgICAgOiBmaXJzdCxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxuICBzY3JvbGxUb0NhbGVuZGFyRGF0ZShcbiAgICBkYXRlOiBXa2x5Q2FsZW5kYXJEYXRlLFxuICAgIG9wdGlvbnM6IFdrbHlKdW1wT3B0aW9ucyA9IHt9LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvRXBvY2hEYXkodGhpcy5hZGFwdGVyLmRhdGVUb0Vwb2NoRGF5KGRhdGUpLCBvcHRpb25zKTtcbiAgfVxuICBzY3JvbGxUb1ZhbHVlKHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM6IFdrbHlKdW1wT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb0Vwb2NoRGF5KGRlY29kZUlzbyh2YWx1ZSkuZXBvY2hEYXksIG9wdGlvbnMpO1xuICB9XG4gIGZvY3VzRGF5KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5icm93c2VyKSByZXR1cm47XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgY29uc3QgZGF5ID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJ1tkYXRhLWRheT1cIicgKyB0aGlzLmZvY3VzZWQgKyAnXCJdJyxcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIFwiYnV0dG9uOm5vdCg6ZGlzYWJsZWQpLGlucHV0Om5vdCg6ZGlzYWJsZWQpXCIsXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgKGRheSB8fCBmYWxsYmFjayk/LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHNlY3Rpb25cbiAgY2xhc3M9XCJ3a2x5XCJcbiAgW2F0dHIuZGlyXT1cImRpcmVjdGlvblwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkFyaWFMYWJlbF0gfHwgJ0RhdGUgYW5kIHRpbWUgcGlja2VyJ1xuICBcIlxuICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5BcmlhRGVzY3JpYmVkQnldXCJcbiAgKGZvY3Vzb3V0KT1cInRvdWNoZWQoKVwiXG4+XG4gIDxoZWFkZXIgY2xhc3M9XCJ0b29sYmFyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJoYXNEYXRlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KHZpZXdNb2RlID09PSAnY2FsZW5kYXInID8gJ21hbnVhbCcgOiAnY2FsZW5kYXInKVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlVmlldygpXCJcbiAgICA+XG4gICAgICB7eyB2aWV3TW9kZSA9PT0gXCJjYWxlbmRhclwiID8gXCLimLdcIiA6IFwi4pamXCIgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiAqbmdJZj1cImhhc0RhdGVcIiBjbGFzcz1cInllYXItY29udHJvbFwiPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwic3BhY2VyXCI+PC9zcGFuXG4gICAgPjxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJub3dcIlxuICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgKGNsaWNrKT1cIm5vdygpXCJcbiAgICA+XG4gICAgICB7eyB0KFwibm93XCIpIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJwcmVzZW50YXRpb24gPT09ICd0cmFuc2llbnQnXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjbG9zZScpXCJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgPlxuICAgICAgw5dcbiAgICA8L2J1dHRvbj5cbiAgPC9oZWFkZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNEYXRlICYmIHZpZXdNb2RlID09PSAnY2FsZW5kYXInXCI+XG4gICAgPGRpdlxuICAgICAgcm9sZT1cImdyaWRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkFyaWFMYWJlbF0gfHwgJ0NhbGVuZGFyJ1xuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT1cImlzUmFuZ2VcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cInJvd1wiXG4gICAgICAgIGNsYXNzPVwid2Vlay1oZWFkXCJcbiAgICAgICAgW2NsYXNzLm5vLWxhYmVsXT1cIlxuICAgICAgICAgIGNvbXBhY3QgfHxcbiAgICAgICAgICAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbE1vZGVdID09PSAnaGlkZGVuJyAmJlxuICAgICAgICAgICAgIXRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrTGFiZWxGb3JtYXR0ZXJdKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhY29tcGFjdCAmJlxuICAgICAgICAgICAgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrTGFiZWxNb2RlXSAhPT0gJ2hpZGRlbicgfHxcbiAgICAgICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbEZvcm1hdHRlcl0pXG4gICAgICAgICAgXCJcbiAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiV2Vla1wiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPjxzcGFuICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla2RheXNcIiByb2xlPVwiY29sdW1uaGVhZGVyXCI+e3sgZGF5IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICNzY3JvbGxlclxuICAgICAgICBjbGFzcz1cIndlZWstc2Nyb2xsXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJ2aXNpYmxlQ291bnQgKiByb3dIZWlnaHRcIlxuICAgICAgICAoc2Nyb2xsKT1cInNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgKHNjcm9sbGVuZCk9XCJzbmFwV2VlaygpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cInNjcm9sbEhlaWdodFwiIGNsYXNzPVwic2Nyb2xsLXNwYWNlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd3NcIiBbc3R5bGUudG9wLnB4XT1cInBhZGRpbmdUb3BcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzOyB0cmFja0J5OiB0cmFja1Jvd1wiXG4gICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgICBjbGFzcz1cIndlZWstcm93XCJcbiAgICAgICAgICAgICAgW2NsYXNzLm5vLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgIGNvbXBhY3QgfHxcbiAgICAgICAgICAgICAgICAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbE1vZGVdID09PVxuICAgICAgICAgICAgICAgICAgJ2hpZGRlbicgJiZcbiAgICAgICAgICAgICAgICAgICF0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsRm9ybWF0dGVyXSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgIWNvbXBhY3QgJiZcbiAgICAgICAgICAgICAgICAgICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsTW9kZV0gIT09XG4gICAgICAgICAgICAgICAgICAgICdoaWRkZW4nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrTGFiZWxGb3JtYXR0ZXJdKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInJvd2hlYWRlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3ZWVrLW51bWJlclwiXG4gICAgICAgICAgICAgICAgPnt7IHJvdy5sYWJlbCB9fTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjZWxsIG9mIHJvdy5jZWxscztcbiAgICAgICAgICAgICAgICAgIGxldCBkYXlJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tDZWxsXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtd2Vla2RheS1pbmRleF09XCJkYXlJbmRleFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb2xpbmRleF09XCJcbiAgICAgICAgICAgICAgICAgIGRheUluZGV4ICtcbiAgICAgICAgICAgICAgICAgIChjb21wYWN0IHx8XG4gICAgICAgICAgICAgICAgICAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbE1vZGVdID09PVxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJyAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbEZvcm1hdHRlcl0pXG4gICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICA6IDIpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGVkKGNlbGwuZXBvY2hEYXkpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgY2VsbC5kaXNhYmxlZCB8fCB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmFuZ2VdPVwiaW5SYW5nZShjZWxsLmVwb2NoRGF5KVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJjZWxsLmhpZGRlblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm9kZC1tb250aF09XCJjZWxsLmRhdGUgJiYgY2VsbC5kYXRlLm1vbnRoICUgMiA9PT0gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2Fubm90YXRpb24gYW5ub3RhdGlvbi0tJyArIGRheUluZGV4XCI+e3tcbiAgICAgICAgICAgICAgICAgIGNlbGwuYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXlcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1kYXldPVwiY2VsbC5lcG9jaERheVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNlbGwuYWNjZXNzaWJsZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiY2VsbC5lcG9jaERheSA9PT0gdG9kYXkgPyAnZGF0ZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNlbGwuZGlzYWJsZWQgfHwgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIlxuICAgICAgICAgICAgICAgICAgICAhY2VsbC5oaWRkZW4gJiYgY2VsbC5lcG9jaERheSA9PT0gZm9jdXNlZCA/IDAgOiAtMVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZChjZWxsLmVwb2NoRGF5KVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MudG9kYXldPVwiY2VsbC5lcG9jaERheSA9PT0gdG9kYXlcIlxuICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImZvY3VzZWQgPSBjZWxsLmVwb2NoRGF5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoY2VsbC5lcG9jaERheSlcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwia2V5KCRldmVudCwgY2VsbC5lcG9jaERheSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGNlbGwubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwid2Vlay1uYXZpZ2F0aW9uXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSB8fCAhY2FuTW92ZVdlZWsoLTEpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgncHJldmlvdXMnKVwiXG4gICAgICAgIChjbGljayk9XCJtb3ZlV2VlaygtMSlcIlxuICAgICAgPlxuICAgICAgICDihpE8L2J1dHRvblxuICAgICAgPjxzcGFuPnt7IHRpdGxlIH19PC9zcGFuXG4gICAgICA+PGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0gfHwgIWNhbk1vdmVXZWVrKDEpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnbmV4dCcpXCJcbiAgICAgICAgKGNsaWNrKT1cIm1vdmVXZWVrKDEpXCJcbiAgICAgID5cbiAgICAgICAg4oaTXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9XCJsZXQgZHJhZnQgb2YgZHJhZnRzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0RyYWZ0XCJcbiAgPlxuICAgIDxmaWVsZHNldFxuICAgICAgKm5nSWY9XCIoaSA9PT0gMCB8fCBpc1JhbmdlKSAmJiAoaGFzVGltZSB8fCB2aWV3TW9kZSA9PT0gJ21hbnVhbCcpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNSYW5nZSA/IHQoaSA9PT0gMCA/ICdzdGFydCcgOiAnZW5kJykgOiBudWxsXCJcbiAgICA+XG4gICAgICA8bGVnZW5kICpuZ0lmPVwiaXNSYW5nZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGkgPT09IDEgJiYgaGFzRGF0ZSAmJiB2aWV3TW9kZSA9PT0gJ21hbnVhbCc7XG4gICAgICAgICAgICBlbHNlIGVuZHBvaW50TGFiZWxcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbmQtdmlldy10b2dnbGVcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImVuZFZpZXcgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFbmRWaWV3KCdkYXRlJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB0KFwiZW5kXCIpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImVuZFZpZXcgPT09ICdkYXlzJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFbmRWaWV3KCdkYXlzJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBpbkRheXNMYWJlbCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNlbmRwb2ludExhYmVsPnt7XG4gICAgICAgICAgdChpID09PSAwID8gXCJzdGFydFwiIDogXCJlbmRcIilcbiAgICAgICAgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPC9sZWdlbmQ+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaSA9PT0gMSAmJiBoYXNEYXRlICYmIHZpZXdNb2RlID09PSAnbWFudWFsJyAmJiBlbmRWaWV3ID09PSAnZGF5cydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRlLWZpZWxkcyBpbi1kYXlzLWZpZWxkc1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmVzdWx0aW5nLWVuZC1kYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdlbmREYXRlJylcIj57e1xuICAgICAgICAgIHJlc3VsdGluZ0VuZERhdGVcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDx3a2x5LWZpZWxkXG4gICAgICAgICAgW2xhYmVsXT1cInQoJ2RheXMnKVwiXG4gICAgICAgICAgW2hpZGVMYWJlbF09XCJ0cnVlXCJcbiAgICAgICAgICBbcHJldmlvdXNMYWJlbF09XCJ0KCdkYXlzUHJldmlvdXMnKVwiXG4gICAgICAgICAgW25leHRMYWJlbF09XCJ0KCdkYXlzTmV4dCcpXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImVmZmVjdGl2ZUxvY2FsZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImluRGF5c1wiXG4gICAgICAgICAgW21pbl09XCItOTk5OVwiXG4gICAgICAgICAgW21heF09XCI5OTk5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgW2ludmFsaWRdPVwiISFlcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZGF5cygkZXZlbnQpXCJcbiAgICAgICAgICAoY29tcGxldGUpPVwiZmluaXNoKClcIlxuICAgICAgICA+PC93a2x5LWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaGFzRGF0ZSAmJiB2aWV3TW9kZSA9PT0gJ21hbnVhbCcgJiYgKGkgPT09IDAgfHwgZW5kVmlldyA9PT0gJ2RhdGUnKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImRhdGUtZmllbGRzXCJcbiAgICAgID5cbiAgICAgICAgPHdrbHktZmllbGRcbiAgICAgICAgICBbbGFiZWxdPVwidCgnZGF5JylcIlxuICAgICAgICAgIFtsb2NhbGVdPVwiZWZmZWN0aXZlTG9jYWxlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiZHJhZnQuZGF0ZS5kYXlcIlxuICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgW21heF09XCIzMVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgICAgIFtpbnZhbGlkXT1cIiEhZXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpZWxkKGksICdkYXknLCAkZXZlbnQpXCJcbiAgICAgICAgICAoY29tcGxldGUpPVwiZmluaXNoKClcIlxuICAgICAgICA+PC93a2x5LWZpZWxkPlxuICAgICAgICA8d2tseS1maWVsZFxuICAgICAgICAgIFtsYWJlbF09XCJ0KCdtb250aCcpXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImVmZmVjdGl2ZUxvY2FsZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImRyYWZ0LmRhdGUubW9udGhcIlxuICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgW21heF09XCJtb250aENvdW50KGRyYWZ0KVwiXG4gICAgICAgICAgW2xhYmVsc109XCJtb250aHMoZHJhZnQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgW2ludmFsaWRdPVwiISFlcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGQoaSwgJ21vbnRoJywgJGV2ZW50KVwiXG4gICAgICAgICAgKGNvbXBsZXRlKT1cImZpbmlzaCgpXCJcbiAgICAgICAgPjwvd2tseS1maWVsZD5cbiAgICAgICAgPHdrbHktZmllbGRcbiAgICAgICAgICBbbGFiZWxdPVwidCgneWVhcicpXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImVmZmVjdGl2ZUxvY2FsZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImRyYWZ0LmRhdGUueWVhclwiXG4gICAgICAgICAgW21pbl09XCJhZGFwdGVyLnN1cHBvcnRlZFllYXJSYW5nZVswXVwiXG4gICAgICAgICAgW21heF09XCJhZGFwdGVyLnN1cHBvcnRlZFllYXJSYW5nZVsxXVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgICAgIFtpbnZhbGlkXT1cIiEhZXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpZWxkKGksICd5ZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgKGNvbXBsZXRlKT1cImZpbmlzaCgpXCJcbiAgICAgICAgPjwvd2tseS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImhhc1RpbWVcIlxuICAgICAgICBjbGFzcz1cInRpbWUtZmllbGRzXCJcbiAgICAgICAgW2NsYXNzLnNlY29uZHNdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlNob3dTZWNvbmRzXVwiXG4gICAgICA+XG4gICAgICAgIDx3a2x5LWZpZWxkXG4gICAgICAgICAgW2xhYmVsXT1cInQoJ2hvdXInKVwiXG4gICAgICAgICAgW2xvY2FsZV09XCJlZmZlY3RpdmVMb2NhbGVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJkaXNwbGF5SG91cihkcmFmdClcIlxuICAgICAgICAgIFttaW5dPVwiZWZmZWN0aXZlSG91ckN5Y2xlID09PSAnaDEyJyA/IDEgOiAwXCJcbiAgICAgICAgICBbbWF4XT1cImVmZmVjdGl2ZUhvdXJDeWNsZSA9PT0gJ2gxMicgPyAxMiA6IDIzXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgW2ludmFsaWRdPVwiISFlcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGQoaSwgJ2hvdXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAoY29tcGxldGUpPVwiZmluaXNoKClcIlxuICAgICAgICA+PC93a2x5LWZpZWxkPlxuICAgICAgICA8d2tseS1maWVsZFxuICAgICAgICAgIFtsYWJlbF09XCJ0KCdtaW51dGUnKVwiXG4gICAgICAgICAgW2xvY2FsZV09XCJlZmZlY3RpdmVMb2NhbGVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJkcmFmdC5taW51dGVcIlxuICAgICAgICAgIFttYXhdPVwiNTlcIlxuICAgICAgICAgIFtzdGVwXT1cIlxuICAgICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1pbnV0ZVN0ZXBdID4gMCAmJlxuICAgICAgICAgICAgNjAgJSB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTWludXRlU3RlcF0gPT09IDBcbiAgICAgICAgICAgICAgPyB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTWludXRlU3RlcF1cbiAgICAgICAgICAgICAgOiAxXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgW2ludmFsaWRdPVwiISFlcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGQoaSwgJ21pbnV0ZScsICRldmVudClcIlxuICAgICAgICAgIChjb21wbGV0ZSk9XCJmaW5pc2goKVwiXG4gICAgICAgID48L3drbHktZmllbGQ+XG4gICAgICAgIDx3a2x5LWZpZWxkXG4gICAgICAgICAgKm5nSWY9XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2hvd1NlY29uZHNdXCJcbiAgICAgICAgICBbbGFiZWxdPVwidCgnc2Vjb25kJylcIlxuICAgICAgICAgIFtsb2NhbGVdPVwiZWZmZWN0aXZlTG9jYWxlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiZHJhZnQuc2Vjb25kXCJcbiAgICAgICAgICBbbWF4XT1cIjU5XCJcbiAgICAgICAgICBbc3RlcF09XCJcbiAgICAgICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5TZWNvbmRTdGVwXSA+IDAgJiZcbiAgICAgICAgICAgIDYwICUgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlNlY29uZFN0ZXBdID09PSAwXG4gICAgICAgICAgICAgID8gdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlNlY29uZFN0ZXBdXG4gICAgICAgICAgICAgIDogMVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgICAgIFtpbnZhbGlkXT1cIiEhZXJyb3JzLmxlbmd0aFwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpZWxkKGksICdzZWNvbmQnLCAkZXZlbnQpXCJcbiAgICAgICAgICAoY29tcGxldGUpPVwiZmluaXNoKClcIlxuICAgICAgICA+PC93a2x5LWZpZWxkPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVyaW9kXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgZWZmZWN0aXZlSG91ckN5Y2xlID09PSAnaDEyJyB8fFxuICAgICAgICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuSG91ckN5Y2xlXSA9PT0gJ3N3aXRjaGFibGUnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiXG4gICAgICAgICAgICAgIGVmZmVjdGl2ZUhvdXJDeWNsZSA9PT0gJ2gxMicgJiYgKGRyYWZ0LmhvdXIgfHwgMCkgPCAxMlxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwZXJpb2QoaSwgJ2FtJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHQoXCJhbVwiKSB9fTwvYnV0dG9uXG4gICAgICAgICAgPjxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdIHx8XG4gICAgICAgICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Ib3VyQ3ljbGVdICE9PSAnc3dpdGNoYWJsZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZWZmZWN0aXZlSG91ckN5Y2xlID09PSAnaDI0J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwicGVyaW9kKGksICcyNCcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAyNDwvYnV0dG9uXG4gICAgICAgICAgPjxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGVmZmVjdGl2ZUhvdXJDeWNsZSA9PT0gJ2gxMicgfHxcbiAgICAgICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkhvdXJDeWNsZV0gPT09ICdzd2l0Y2hhYmxlJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cIlxuICAgICAgICAgICAgICBlZmZlY3RpdmVIb3VyQ3ljbGUgPT09ICdoMTInICYmIChkcmFmdC5ob3VyIHx8IDApID49IDEyXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInBlcmlvZChpLCAncG0nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdChcInBtXCIpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9maWVsZHNldD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJ2YWxpZGF0aW9uXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgIDxwICpuZ0Zvcj1cImxldCBlcnIgb2YgZXJyb3JzXCI+ISB7eyB0KGVyci5tZXNzYWdlS2V5KSB9fTwvcD5cbiAgPC9kaXY+XG4gIDxmb290ZXIgKm5nSWY9XCJzdWJtaXRWaXNpYmxlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNvbmZpcm1cIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjYW5TdWJtaXRcIlxuICAgICAgKGNsaWNrKT1cInN1Ym1pdCgpXCJcbiAgICA+XG4gICAgICB7eyB0KFwiY29uZmlybVwiKSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Zvb3Rlcj5cbjwvc2VjdGlvbj5cbiJdfQ==
955
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3drbHktZGF0ZXRpbWUtcGlja2VyLjE1L3NyYy9waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vcHJvamVjdHMvd2tseS1kYXRldGltZS1waWNrZXIuMTUvc3JjL3BpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixTQUFTLEVBSVQsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixPQUFPLEdBR1IsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUlqQiw0QkFBNEIsR0FHN0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLGNBQWMsRUFDZCxjQUFjLEdBR2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUtqQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLDZCQUE2QixHQUc5QixNQUFNLFVBQVUsQ0FBQzs7OztBQXVCbEIsTUFBTSxPQUFPLDJCQUNYLFNBQVEsZ0JBQWdCO0lBcUR4QixZ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QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRDtZQUNFLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7WUFDMUQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLDRLQ3pGSCw2MGFBK1hBOzRGRHBTYSwyQkFBMkI7a0JBakJ2QyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDOzRCQUMxRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs7MEJBeURFLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUN4QixNQUFNOzJCQUFDLFdBQVc7cUdBbERFLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgTE9DQUxFX0lELFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBQTEFURk9STV9JRCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlRmlyc3REYXlPZldlZWssIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuICBhYnNvbHV0ZVdlZWtPZixcbiAgY3JlYXRlV2Vla0dlbmVyYXRvcixcbiAgZmlyc3RFcG9jaERheU9mLFxuICBpbnRlZ2VyLFxuICBXa2x5V2Vla0dlbmVyYXRvcixcbiAgV2tseVdlZWtPZmZzZXQsXG59IGZyb20gXCJAd2tseS9jb3JlXCI7XG5pbXBvcnQge1xuICBkZWNvZGVJc28sXG4gIGVycm9yLFxuICByZXNvbHZlV2Vla09mZnNldCxcbiAgdmFsaWRhdGVTZWxlY3Rpb24sXG4gIFdrbHlDYWxlbmRhckFkYXB0ZXIsXG4gIFdrbHlDYWxlbmRhckRhdGUsXG4gIFdrbHlEYXRlVGltZSxcbiAgV2tseUdyZWdvcmlhbkNhbGVuZGFyQWRhcHRlcixcbiAgV2tseVBpY2tlclZhbHVlLFxuICBXa2x5VmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiQHdrbHkvYWRhcHRlcnNcIjtcbmltcG9ydCB7XG4gIGRyYWZ0RGF5RGlmZmVyZW5jZSxcbiAgc2V0RHJhZnREYXlEaWZmZXJlbmNlLFxuICBjYWxlbmRhck1vbnRoQm91bmRzLFxuICByZXNvbHZlV2tseVRyYW5zbGF0aW9uLFxuICBjcmVhdGVXZWVrUm93cyxcbiAgdmFsaWRhdGVEcmFmdHMsXG4gIFdrbHlEcmFmdCBhcyBEcmFmdCxcbiAgV2tseVdlZWtSb3cgYXMgUm93LFxufSBmcm9tIFwiQHdrbHkvcHJlc2VudGF0aW9uXCI7XG5pbXBvcnQge1xuICBjb2VyY2VCb29sZWFuLFxuICBXS0xZX0NMT0NLLFxuICBXS0xZX0NPTkZJRyxcbiAgV0tMWV9MT0NBTElaQVRJT04sXG4gIFdLTFlfVFJBTlNMQVRJT05TLFxuICBXa2x5Q2xvY2ssXG4gIFdrbHlDbG9zZVJlYXNvbixcbiAgV2tseUNvbmZpZ3VyYXRpb24sXG4gIFdrbHlKdW1wT3B0aW9ucyxcbiAgV2tseVBpY2tlcklucHV0cyxcbiAgV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cyxcbiAgV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMsXG4gIFdrbHlTdHJpbmdzLFxuICBXa2x5VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmRlY2xhcmUgY2xhc3MgUmVzaXplT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihjYWxsYmFjazogKCkgPT4gdm9pZCk7XG4gIG9ic2VydmUoZWxlbWVudDogRWxlbWVudCk6IHZvaWQ7XG4gIGRpc2Nvbm5lY3QoKTogdm9pZDtcbn1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJ3a2x5LWRhdGV0aW1lLXBpY2tlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3BpY2tlci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4uLy4uL3drbHktZGF0ZXRpbWUtcGlja2VyL3NyYy9waWNrZXIuY29tcG9uZW50LmNzc1wiXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBXa2x5RGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV2tseURhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdrbHlEYXRlVGltZVBpY2tlckNvbXBvbmVudFxuICBleHRlbmRzIFdrbHlQaWNrZXJJbnB1dHNcbiAgaW1wbGVtZW50c1xuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgVmFsaWRhdG9yXG57XG4gIEBWaWV3Q2hpbGQoXCJzY3JvbGxlclwiKSBzY3JvbGxlcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcmVzZW50YXRpb246IFwiaW5saW5lXCIgfCBcInRyYW5zaWVudFwiID0gXCJpbmxpbmVcIjtcbiAgdmlld01vZGU6IFwiY2FsZW5kYXJcIiB8IFwibWFudWFsXCIgPSBcImNhbGVuZGFyXCI7XG4gIGVuZFZpZXc6IFwiZGF0ZVwiIHwgXCJkYXlzXCIgPSBcImRhdGVcIjtcbiAgYWRhcHRlciE6IFdrbHlDYWxlbmRhckFkYXB0ZXI7XG4gIGVmZmVjdGl2ZUxvY2FsZSA9IFwiZW4tVVNcIjtcbiAgZWZmZWN0aXZlT2Zmc2V0OiBXa2x5V2Vla09mZnNldCA9IDA7XG4gIGVmZmVjdGl2ZUhvdXJDeWNsZTogXCJoMTJcIiB8IFwiaDI0XCIgPSBcImgyNFwiO1xuICBkaXJlY3Rpb24gPSBcImx0clwiO1xuICByb3dzOiBSb3dbXSA9IFtdO1xuICB3ZWVrZGF5czogc3RyaW5nW10gPSBbXTtcbiAgZHJhZnRzOiBEcmFmdFtdID0gW107XG4gIGVycm9yczogcmVhZG9ubHkgV2tseVZhbGlkYXRpb25FcnJvcltdID0gW107XG4gIHRvZGF5ID0gMDtcbiAgZm9jdXNlZCA9IDA7XG4gIGFuY2hvcldlZWsgPSAwO1xuICBmaXJzdFdlZWsgPSAwO1xuICB2aXNpYmxlQ291bnQgPSA2O1xuICByb3dIZWlnaHQgPSA3NjtcbiAgc2Nyb2xsSGVpZ2h0ID0gMTUyMDc2O1xuICBwYWRkaW5nVG9wID0gMDtcbiAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgY29tcGFjdCA9IGZhbHNlO1xuICByZWFkb25seSBXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzID0gV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cztcbiAgcHJpdmF0ZSBiYXNlV2VlayA9IDA7XG4gIHByaXZhdGUgZmlyc3RTdXBwb3J0ZWREYXkgPSAwO1xuICBwcml2YXRlIGxhc3RTdXBwb3J0ZWREYXkgPSAwO1xuICBwcml2YXRlIGZpcnN0U3VwcG9ydGVkV2VlayA9IDA7XG4gIHByaXZhdGUgbGFzdFN1cHBvcnRlZFdlZWsgPSAwO1xuICBwcml2YXRlIGdlbmVyYXRvciE6IFdrbHlXZWVrR2VuZXJhdG9yO1xuICBwcml2YXRlIGluaXRpYWxNb250aCA9IFwiXCI7XG4gIHByaXZhdGUgY2xpcE1vbnRoID0gZmFsc2U7XG4gIHByaXZhdGUgYnJvd3NlciA9IGZhbHNlO1xuICBwcml2YXRlIG9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG4gIHByaXZhdGUgc2Nyb2xsRW5kVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgcHJpdmF0ZSBzbmFwUGVuZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IFdrbHlQaWNrZXJWYWx1ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBjb25maWdFcnJvcnM6IFdrbHlWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIHBlbmRpbmdWYWx1ZTogV2tseVBpY2tlclZhbHVlID0gbnVsbDtcbiAgcHJpdmF0ZSBlbWl0dGVkVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1hbnVhbERhdGVFbmRwb2ludCA9IDA7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIGRlZmF1bHRMb2NhbGU6IHN0cmluZyxcbiAgICBASW5qZWN0KFdLTFlfQ09ORklHKSBwcml2YXRlIGRlZmF1bHRzOiBXa2x5Q29uZmlndXJhdGlvbixcbiAgICBASW5qZWN0KFdLTFlfQ0xPQ0spIHByaXZhdGUgY2xvY2s6IFdrbHlDbG9jayxcbiAgICBASW5qZWN0KFdLTFlfTE9DQUxJWkFUSU9OKSBwcml2YXRlIHN0cmluZ3M6IFdrbHlTdHJpbmdzLFxuICAgIEBJbmplY3QoV0tMWV9UUkFOU0xBVElPTlMpIHByaXZhdGUgZGVmYXVsdFRyYW5zbGF0aW9uczogV2tseVRyYW5zbGF0aW9ucyxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybTogT2JqZWN0LFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5icm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm0pO1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBjaGFuZ2VzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdICYmXG4gICAgICAgIHRoaXMuZW1pdHRlZFZhbHVlID09PVxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WYWx1ZV0pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbWl0dGVkVmFsdWUgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBmb2N1cyA9IHRoaXMuZm9jdXNlZDtcbiAgICAgIHRoaXMuY29uZmlndXJlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WYWx1ZV0gfHxcbiAgICAgICAgY2hhbmdlc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdIHx8XG4gICAgICAgIGNoYW5nZXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5DYWxlbmRhckFkYXB0ZXJdXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5sb2FkKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WYWx1ZV0pO1xuICAgICAgICB0aGlzLnBvc2l0aW9uKHRoaXMuZm9jdXNlZCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrKCk7XG4gICAgICAgIGlmIChjaGFuZ2VzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmlld3BvcnRQcmVzZXRdKVxuICAgICAgICAgIHRoaXMucG9zaXRpb24oZm9jdXMsIHRydWUpO1xuICAgICAgICBlbHNlIHRoaXMuc2Nyb2xsVG9FcG9jaERheShmb2N1cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgIGNvbnN0IGluaXRpYWxFcG9jaERheSA9IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Jbml0aWFsRXBvY2hEYXldO1xuICAgIHRoaXMudG9kYXkgPSB0aGlzLmJyb3dzZXJcbiAgICAgID8gTWF0aC5mbG9vcih0aGlzLmNsb2NrLm5vdygpLmdldFRpbWUoKSAvIDg2NDAwMDAwKVxuICAgICAgOiBpbml0aWFsRXBvY2hEYXkgPT09IG51bGxcbiAgICAgICAgPyAwXG4gICAgICAgIDogaW5pdGlhbEVwb2NoRGF5O1xuICAgIHRoaXMuZm9jdXNlZCA9XG4gICAgICBpbml0aWFsRXBvY2hEYXkgPT09IG51bGxcbiAgICAgICAgPyB0aGlzLmRlZmF1bHRzLmluaXRpYWxFcG9jaERheSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLnRvZGF5XG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRzLmluaXRpYWxFcG9jaERheVxuICAgICAgICA6IGluaXRpYWxFcG9jaERheTtcbiAgICB0aGlzLmxvYWQodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZhbHVlXSk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wb3NpdGlvbih0aGlzLmZvY3VzZWQsIHRydWUpO1xuICB9XG4gIGNvbmZpZ3VyZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ0Vycm9ycyA9IFtdO1xuICAgIFtcbiAgICAgIFdrbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2hvd1NlY29uZHMsXG4gICAgICBXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkFsbG93UmFuZ2VBY3Jvc3NEaXNhYmxlZCxcbiAgICAgIFdrbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuUmVxdWlyZWQsXG4gICAgICBXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkLFxuICAgICAgV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5DbG9zZU9uQmFja2Ryb3AsXG4gICAgXS5mb3JFYWNoKFxuICAgICAgKGtleSkgPT4gKCh0aGlzIGFzIGFueSlba2V5XSA9IGNvZXJjZUJvb2xlYW4oKHRoaXMgYXMgYW55KVtrZXldKSksXG4gICAgKTtcbiAgICB0aGlzLmVmZmVjdGl2ZUxvY2FsZSA9XG4gICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTG9jYWxlXSB8fFxuICAgICAgdGhpcy5kZWZhdWx0cy5sb2NhbGUgfHxcbiAgICAgIHRoaXMuZGVmYXVsdExvY2FsZTtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IC9eKGFyfGhlfGZhfHVyKSgtfCQpLy50ZXN0KHRoaXMuZWZmZWN0aXZlTG9jYWxlKVxuICAgICAgPyBcInJ0bFwiXG4gICAgICA6IFwibHRyXCI7XG4gICAgdGhpcy5hZGFwdGVyID1cbiAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5DYWxlbmRhckFkYXB0ZXJdIHx8XG4gICAgICBuZXcgV2tseUdyZWdvcmlhbkNhbGVuZGFyQWRhcHRlcih0aGlzLmVmZmVjdGl2ZUxvY2FsZSk7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBmaXJzdERheTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmlyc3REYXkgPSBnZXRMb2NhbGVGaXJzdERheU9mV2Vlayh0aGlzLmVmZmVjdGl2ZUxvY2FsZSk7XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgdGhpcy5lZmZlY3RpdmVPZmZzZXQgPSByZXNvbHZlV2Vla09mZnNldChcbiAgICAgICAgdGhpcy5lZmZlY3RpdmVMb2NhbGUsXG4gICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrT2Zmc2V0XSxcbiAgICAgICAgdGhpcy5kZWZhdWx0cy53ZWVrT2Zmc2V0LFxuICAgICAgICBmaXJzdERheSxcbiAgICAgICk7XG4gICAgICBpbnRlZ2VyKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrQ2FjaGVTaXplXSk7XG4gICAgICBpbnRlZ2VyKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5PdmVyc2NhbldlZWtzXSk7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrQ2FjaGVTaXplXSA8IDAgfHxcbiAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk92ZXJzY2FuV2Vla3NdIDwgMCB8fFxuICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuT3ZlcnNjYW5XZWVrc10gPiA1MFxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpO1xuICAgICAgaWYgKFxuICAgICAgICAhW1xuICAgICAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICBcImRhdGVcIixcbiAgICAgICAgICBcInRpbWVcIixcbiAgICAgICAgICBcImRhdGV0aW1lLXJhbmdlXCIsXG4gICAgICAgICAgXCJkYXRlLXJhbmdlXCIsXG4gICAgICAgICAgXCJ0aW1lLXJhbmdlXCIsXG4gICAgICAgIF0uaW5jbHVkZXModGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdKVxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpO1xuICAgICAgY29uc3QgcHJlc2V0ID0gdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZpZXdwb3J0UHJlc2V0XTtcbiAgICAgIGlmIChwcmVzZXQua2luZCA9PT0gXCJ3ZWVrc1wiKSB7XG4gICAgICAgIGludGVnZXIocHJlc2V0LnZpc2libGVXZWVrQ291bnQpO1xuICAgICAgICBpZiAocHJlc2V0LnZpc2libGVXZWVrQ291bnQgPCAxIHx8IHByZXNldC52aXNpYmxlV2Vla0NvdW50ID4gNTIpXG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVzZXQua2luZCA9PT0gXCJmdWxsLW1vbnRoLWFuZC1hcm91bmRcIilcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIFtcbiAgICAgICAgICBwcmVzZXQuZXh0cmFXZWVrc0JlZm9yZSB8fCAwLFxuICAgICAgICAgIHByZXNldC5leHRyYVdlZWtzQWZ0ZXIgfHwgMCxcbiAgICAgICAgXSkge1xuICAgICAgICAgIGludGVnZXIobik7XG4gICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiA1MikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgdGhpcy5nZW5lcmF0b3IgPSBjcmVhdGVXZWVrR2VuZXJhdG9yKHtcbiAgICAgICAgd2Vla09mZnNldDogdGhpcy5lZmZlY3RpdmVPZmZzZXQsXG4gICAgICAgIGNhY2hlU2l6ZTogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtDYWNoZVNpemVdLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhpcy5jb25maWdFcnJvcnMucHVzaChcbiAgICAgICAgZXJyb3IoXG4gICAgICAgICAgXCJjb25maWd1cmF0aW9uLWVycm9yXCIsXG4gICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtPZmZzZXRdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuZ2VuZXJhdG9yID0gY3JlYXRlV2Vla0dlbmVyYXRvcigpO1xuICAgICAgdGhpcy5lZmZlY3RpdmVPZmZzZXQgPSAwO1xuICAgIH1cbiAgICB0aGlzLnNldFN1cHBvcnRlZFNjcm9sbFJhbmdlKCk7XG4gICAgdGhpcy5lZmZlY3RpdmVIb3VyQ3ljbGUgPVxuICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkhvdXJDeWNsZV0gPT09IFwiaDEyXCJcbiAgICAgICAgPyBcImgxMlwiXG4gICAgICAgIDogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkhvdXJDeWNsZV0gPT09IFwibG9jYWxlXCJcbiAgICAgICAgICA/IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuZWZmZWN0aXZlTG9jYWxlLCB7XG4gICAgICAgICAgICAgIGhvdXI6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICB0aW1lWm9uZTogXCJVVENcIixcbiAgICAgICAgICAgIH0pLnJlc29sdmVkT3B0aW9ucygpLmhvdXIxMlxuICAgICAgICAgICAgPyBcImgxMlwiXG4gICAgICAgICAgICA6IFwiaDI0XCJcbiAgICAgICAgICA6IFwiaDI0XCI7XG4gICAgdGhpcy53ZWVrZGF5cyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIuZm9ybWF0V2Vla2RheSh0aGlzLmVmZmVjdGl2ZU9mZnNldCArIGksIFwic2hvcnRcIiksXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHNldFN1cHBvcnRlZFNjcm9sbFJhbmdlKCk6IHZvaWQge1xuICAgIGxldCBbZmlyc3QsIGxhc3RdID0gdGhpcy5hZGFwdGVyLnN1cHBvcnRlZEVwb2NoRGF5UmFuZ2U7XG4gICAgY29uc3QgW2ZpcnN0WWVhciwgbGFzdFllYXJdID0gdGhpcy5hZGFwdGVyLnN1cHBvcnRlZFllYXJSYW5nZTtcbiAgICBjb25zdCB5ZWFyT2YgPSAoZGF5OiBudW1iZXIpID0+IHRoaXMuYWRhcHRlci5lcG9jaERheVRvRGF0ZShkYXkpLnllYXI7XG4gICAgaWYgKHllYXJPZihmaXJzdCkgPCBmaXJzdFllYXIpIHtcbiAgICAgIGxldCBsb3cgPSBmaXJzdCxcbiAgICAgICAgaGlnaCA9IGxhc3Q7XG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgICBpZiAoeWVhck9mKG1pZCkgPCBmaXJzdFllYXIpIGxvdyA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaGlnaCA9IG1pZDtcbiAgICAgIH1cbiAgICAgIGZpcnN0ID0gbG93O1xuICAgIH1cbiAgICBpZiAoeWVhck9mKGxhc3QpID4gbGFzdFllYXIpIHtcbiAgICAgIGxldCBsb3cgPSBmaXJzdCxcbiAgICAgICAgaGlnaCA9IGxhc3Q7XG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICBjb25zdCBtaWQgPSBNYXRoLmNlaWwoKGxvdyArIGhpZ2gpIC8gMik7XG4gICAgICAgIGlmICh5ZWFyT2YobWlkKSA+IGxhc3RZZWFyKSBoaWdoID0gbWlkIC0gMTtcbiAgICAgICAgZWxzZSBsb3cgPSBtaWQ7XG4gICAgICB9XG4gICAgICBsYXN0ID0gbG93O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBmaXJzdCA+IGxhc3QgfHxcbiAgICAgIHllYXJPZihmaXJzdCkgPCBmaXJzdFllYXIgfHxcbiAgICAgIHllYXJPZihmaXJzdCkgPiBsYXN0WWVhciB8fFxuICAgICAgeWVhck9mKGxhc3QpIDwgZmlyc3RZZWFyIHx8XG4gICAgICB5ZWFyT2YobGFzdCkgPiBsYXN0WWVhclxuICAgIClcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gc3VwcG9ydGVkIGRheXMgd2l0aGluIHRoZSBjYWxlbmRhciB5ZWFyIHJhbmdlXCIpO1xuICAgIHRoaXMuZmlyc3RTdXBwb3J0ZWREYXkgPSBmaXJzdDtcbiAgICB0aGlzLmxhc3RTdXBwb3J0ZWREYXkgPSBsYXN0O1xuICAgIHRoaXMuZmlyc3RTdXBwb3J0ZWRXZWVrID0gYWJzb2x1dGVXZWVrT2YoZmlyc3QsIHRoaXMuZWZmZWN0aXZlT2Zmc2V0KTtcbiAgICB0aGlzLmxhc3RTdXBwb3J0ZWRXZWVrID0gYWJzb2x1dGVXZWVrT2YobGFzdCwgdGhpcy5lZmZlY3RpdmVPZmZzZXQpO1xuICB9XG4gIHByaXZhdGUgY2xhbXBGaXJzdFdlZWsod2VlazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBLZWVwIHN1cHBvcnRlZCB3ZWVrcyBpbnNpZGUgdGhlIHZpZXdwb3J0OyByZW5kZXJSb3dzIGFkZHMgdGhlIGJ1ZmZlciByb3dzLlxuICAgIGNvbnN0IGxhc3QgPSBNYXRoLm1heChcbiAgICAgIHRoaXMuZmlyc3RTdXBwb3J0ZWRXZWVrLFxuICAgICAgdGhpcy5sYXN0U3VwcG9ydGVkV2VlayAtIHRoaXMudmlzaWJsZUNvdW50ICsgMSxcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmZpcnN0U3VwcG9ydGVkV2VlaywgTWF0aC5taW4obGFzdCwgd2VlaykpO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0U2Nyb2xsKCk7XG4gICAgaWYgKHRoaXMuYnJvd3NlciAmJiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBhY3QgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8IDMzODtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBcIi53ZWVrLXJvd1wiLFxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAvLyBDU1MgaGVpZ2h0cyBhbmQgc2Nyb2xsVG9wIHVzZSBsYXlvdXQgcGl4ZWxzOyBjbGllbnQgcmVjdGFuZ2xlcyBpbmNsdWRlIHpvb20uXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHJvdyA/IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShyb3cpLmhlaWdodCkgOiAwO1xuICAgICAgICBpZiAoaGVpZ2h0ICYmIGhlaWdodCAhPT0gdGhpcy5yb3dIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMucm93SGVpZ2h0ICogMjAwMTtcbiAgICAgICAgICB0aGlzLnJlbmRlclJvd3MoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLm9ic2VydmVyKSB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAodGhpcy5zY3JvbGxFbmRUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsRW5kVGltZXIpO1xuICAgIGlmICh0aGlzLmdlbmVyYXRvcikgdGhpcy5nZW5lcmF0b3IuY2xlYXJDYWNoZSgpO1xuICB9XG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlV2tseVRyYW5zbGF0aW9uKFxuICAgICAga2V5LFxuICAgICAgdGhpcy5lZmZlY3RpdmVMb2NhbGUsXG4gICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVHJhbnNsYXRpb25zXSB8fFxuICAgICAgICB0aGlzLmRlZmF1bHRUcmFuc2xhdGlvbnMsXG4gICAgICB0aGlzLnN0cmluZ3MsXG4gICAgKTtcbiAgfVxuICBnZXQgaXNSYW5nZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdLmVuZHNXaXRoKFwiLXJhbmdlXCIpO1xuICB9XG4gIGdldCBoYXNEYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdLnN0YXJ0c1dpdGgoXCJ0aW1lXCIpO1xuICB9XG4gIGdldCBoYXNUaW1lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTW9kZV0gIT09IFwiZGF0ZVwiICYmXG4gICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTW9kZV0gIT09IFwiZGF0ZS1yYW5nZVwiXG4gICAgKTtcbiAgfVxuICBnZXQgc3VibWl0VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcmVzZW50YXRpb24gPT09IFwidHJhbnNpZW50XCIgJiZcbiAgICAgICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTW9kZV0gIT09IFwiZGF0ZVwiIHx8XG4gICAgICAgIHRoaXMudmlld01vZGUgPT09IFwibWFudWFsXCIpXG4gICAgKTtcbiAgfVxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZCA9IHRoaXMuYWRhcHRlci5lcG9jaERheVRvRGF0ZShcbiAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgdGhpcy5maXJzdFN1cHBvcnRlZERheSxcbiAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgIHRoaXMubGFzdFN1cHBvcnRlZERheSxcbiAgICAgICAgICAgIGZpcnN0RXBvY2hEYXlPZih0aGlzLmFuY2hvcldlZWssIHRoaXMuZWZmZWN0aXZlT2Zmc2V0KSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZm9ybWF0TW9udGgoZCkgKyBcIiBcIiArIHRoaXMuYWRhcHRlci5mb3JtYXRZZWFyKGQpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuICBnZXQgY2FuU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSAmJlxuICAgICAgIXRoaXMuZXJyb3JzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5wZW5kaW5nVmFsdWUgIT09IG51bGxcbiAgICApO1xuICB9XG4gIHByaXZhdGUgYmxhbmsoZGF5OiBudW1iZXIpOiBEcmFmdCB7XG4gICAgY29uc3Qgc2FmZSA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5maXJzdFN1cHBvcnRlZERheSxcbiAgICAgIE1hdGgubWluKHRoaXMubGFzdFN1cHBvcnRlZERheSwgZGF5KSxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRlOiB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoc2FmZSksXG4gICAgICBob3VyOiAwLFxuICAgICAgbWludXRlOiAwLFxuICAgICAgc2Vjb25kOiAwLFxuICAgICAgcHJlc2VudDogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBsb2FkKHZhbHVlOiBXa2x5UGlja2VyVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWZ0cyA9IFt0aGlzLmJsYW5rKHRoaXMuZm9jdXNlZCksIHRoaXMuYmxhbmsodGhpcy5mb2N1c2VkKV07XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlU2VsZWN0aW9uKHZhbHVlLCB0aGlzLCB0aGlzLmFkYXB0ZXIpO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiAhdmFsaWRhdGlvbi5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IFt2YWx1ZV0gOiB2YWx1ZTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGQgPSBkZWNvZGVJc28odik7XG4gICAgICAgIHRoaXMuZHJhZnRzW2ldID0ge1xuICAgICAgICAgIGRhdGU6IHRoaXMuaGFzRGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoZC5lcG9jaERheSlcbiAgICAgICAgICAgIDogdGhpcy5ibGFuayh0aGlzLnRvZGF5KS5kYXRlLFxuICAgICAgICAgIGhvdXI6IGQuaG91cixcbiAgICAgICAgICBtaW51dGU6IGQubWludXRlLFxuICAgICAgICAgIHNlY29uZDogZC5zZWNvbmQsXG4gICAgICAgICAgcHJlc2VudDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGkgPT09IDAgJiYgdGhpcy5oYXNEYXRlKSB0aGlzLmZvY3VzZWQgPSBkLmVwb2NoRGF5O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0aW9uLmxlbmd0aCkge1xuICAgICAgdGhpcy5wZW5kaW5nVmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5yZXBvcnQodmFsaWRhdGlvbik7XG4gICAgfSBlbHNlIHRoaXMuY2hlY2soKTtcbiAgfVxuICB3cml0ZVZhbHVlKHZhbHVlOiBXa2x5UGlja2VyVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMubG9hZCh2YWx1ZSk7XG4gICAgICB0aGlzLnBvc2l0aW9uKHRoaXMuZm9jdXNlZCwgdHJ1ZSk7XG4gICAgfVxuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogV2tseVBpY2tlclZhbHVlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSA9IGRpc2FibGVkO1xuICB9XG4gIHZhbGlkYXRlKF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA/IHsgd2tseTogdGhpcy5lcnJvcnMgfSA6IG51bGw7XG4gIH1cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlZCA9IGZuO1xuICB9XG4gIHRvdWNoZWQoKTogdm9pZCB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLm9uVG91Y2hlZCgpKTtcbiAgfVxuICBwcml2YXRlIHJlcG9ydChlcnJvcnM6IHJlYWRvbmx5IFdrbHlWYWxpZGF0aW9uRXJyb3JbXSk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmVycm9ycykgIT09IEpTT04uc3RyaW5naWZ5KGVycm9ycyk7XG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmFsaWRhdGlvbkNoYW5nZV0uZW1pdChlcnJvcnMpO1xuICAgICAgdGhpcy52YWxpZGF0b3JDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIGNoZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlRHJhZnRzKHtcbiAgICAgIGRyYWZ0czogdGhpcy5kcmFmdHMsXG4gICAgICBjb25maWdFcnJvcnM6IHRoaXMuY29uZmlnRXJyb3JzLFxuICAgICAgYWRhcHRlcjogdGhpcy5hZGFwdGVyLFxuICAgICAgc2VsZWN0aW9uOiB0aGlzLFxuICAgICAgbW9kZTogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdLFxuICAgICAgaXNSYW5nZTogdGhpcy5pc1JhbmdlLFxuICAgICAgaGFzRGF0ZTogdGhpcy5oYXNEYXRlLFxuICAgICAgaGFzVGltZTogdGhpcy5oYXNUaW1lLFxuICAgICAgc2hvd1NlY29uZHM6IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5TaG93U2Vjb25kc10sXG4gICAgICByZXF1aXJlZDogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlJlcXVpcmVkXSxcbiAgICB9KTtcbiAgICB0aGlzLnBlbmRpbmdWYWx1ZSA9IHJlc3VsdC5wZW5kaW5nVmFsdWU7XG4gICAgdGhpcy5yZXBvcnQocmVzdWx0LmVycm9ycyk7XG4gIH1cbiAgdHJhY2tEcmFmdChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBFbmRwb2ludCBjb250cm9scyBrZWVwIHRoZWlyIGlkZW50aXR5IGFuZCBmb2N1cyB3aGVuIGRyYWZ0IG9iamVjdHMgc3dhcC5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgcHJpdmF0ZSBvcmRlckRyYWZ0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSYW5nZSB8fCAhdGhpcy5kcmFmdHMuZXZlcnkoKGRyYWZ0KSA9PiBkcmFmdC5wcmVzZW50KSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmRyYWZ0cy5zb21lKChkcmFmdCkgPT4gZHJhZnQudW5zdXBwb3J0ZWRFcG9jaERheSAhPT0gdW5kZWZpbmVkKSlcbiAgICAgIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IHRoaXMuZHJhZnRzWzBdLFxuICAgICAgICBiID0gdGhpcy5kcmFmdHNbMV07XG4gICAgICBjb25zdCBrZXkgPSAoZDogRHJhZnQpID0+XG4gICAgICAgIHRoaXMuYWRhcHRlci5kYXRlVG9FcG9jaERheShkLmRhdGUpICogODY0MDAgK1xuICAgICAgICAoZC5ob3VyIHx8IDApICogMzYwMCArXG4gICAgICAgIChkLm1pbnV0ZSB8fCAwKSAqIDYwICtcbiAgICAgICAgKGQuc2Vjb25kIHx8IDApO1xuICAgICAgaWYgKGtleShhKSA+IGtleShiKSkgdGhpcy5kcmFmdHMgPSBbYiwgYV07XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy8gSW1wb3NzaWJsZSBvciBpbmNvbXBsZXRlIGRhdGVzIHJlbWFpbiBlZGl0YWJsZSB1bnRpbCBjb3JyZWN0ZWQuXG4gICAgfVxuICB9XG4gIGZpbmlzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSkgcmV0dXJuO1xuICAgIHRoaXMub3JkZXJEcmFmdHMoKTtcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJtYW51YWxcIiAmJiB0aGlzLmhhc0RhdGUpIHRoaXMucG9zaXRpb25Pbk1hbnVhbERhdGUoKTtcbiAgICB0aGlzLmNoZWNrKCk7XG4gICAgaWYgKHRoaXMucHJlc2VudGF0aW9uID09PSBcImlubGluZVwiICYmIHRoaXMuY2FuU3VibWl0KSB0aGlzLmNvbW1pdCgpO1xuICB9XG4gIHByaXZhdGUgY29tbWl0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TdWJtaXQpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5wZW5kaW5nVmFsdWU7XG4gICAgaWYgKFxuICAgICAgSlNPTi5zdHJpbmdpZnkobmV4dCkgIT09XG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdKVxuICAgICkge1xuICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZhbHVlXSA9IG5leHQ7XG4gICAgICB0aGlzLmVtaXR0ZWRWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KG5leHQpO1xuICAgICAgdGhpcy5vbkNoYW5nZShuZXh0KTtcbiAgICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuVmFsdWVDaGFuZ2VdLmVtaXQobmV4dCk7XG4gICAgfVxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cbiAgc3VibWl0KHJlYXNvbjogV2tseUNsb3NlUmVhc29uID0gXCJzdWJtaXRcIik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2soKTtcbiAgICBpZiAoIXRoaXMuY2FuU3VibWl0KSByZXR1cm47XG4gICAgdGhpcy5jb21taXQoKTtcbiAgICBpZiAodGhpcy5wcmVzZW50YXRpb24gPT09IFwidHJhbnNpZW50XCIpXG4gICAgICB0aGlzW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLkNsb3NlZF0uZW1pdChyZWFzb24pO1xuICB9XG4gIGNhbmNlbChyZWFzb246IFdrbHlDbG9zZVJlYXNvbiA9IFwiY2xvc2UtYnV0dG9uXCIpOiB2b2lkIHtcbiAgICBpZiAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSkgcmV0dXJuO1xuICAgIHRoaXMubG9hZCh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuVmFsdWVdKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXNbV2tseVBpY2tlck91dHB1dHNQcm9wZXJ0eUtleXMuQ2xvc2VkXS5lbWl0KHJlYXNvbik7XG4gIH1cbiAgbm93KCk6IHZvaWQge1xuICAgIGlmICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdKSByZXR1cm47XG4gICAgY29uc3QgbiA9IHRoaXMuY2xvY2subm93KCk7XG4gICAgY29uc3QgZGF5ID0gTWF0aC5mbG9vcihuLmdldFRpbWUoKSAvIDg2NDAwMDAwKTtcbiAgICB0aGlzLmRyYWZ0cyA9IFswLCAxXS5tYXAoKGluZGV4KSA9PiAoe1xuICAgICAgLi4udGhpcy5jbG9ja0RyYWZ0KGRheSwgbiksXG4gICAgICBwcmVzZW50OiBpbmRleCA9PT0gMCB8fCB0aGlzLmlzUmFuZ2UsXG4gICAgfSkpO1xuICAgIGlmIChcbiAgICAgIHRoaXMuaGFzRGF0ZSAmJlxuICAgICAgKGRheSA8IHRoaXMuZmlyc3RTdXBwb3J0ZWREYXkgfHwgZGF5ID4gdGhpcy5sYXN0U3VwcG9ydGVkRGF5KVxuICAgICkge1xuICAgICAgdGhpcy5yZXBvcnQoW2Vycm9yKFwidW5zdXBwb3J0ZWQtYWRhcHRlci1kYXRlXCIsIGRheSldKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb2N1c2VkID0gZGF5O1xuICAgIHRoaXMucG9zaXRpb24oZGF5LCB0cnVlKTtcbiAgICB0aGlzLmNoZWNrKCk7XG4gICAgdGhpcy5zdWJtaXQoXCJub3dcIik7XG4gIH1cbiAgcHJpdmF0ZSBjbG9ja0RyYWZ0KGRheTogbnVtYmVyLCBub3c6IERhdGUpOiBEcmFmdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuYmxhbmsoZGF5KSxcbiAgICAgIGhvdXI6IG5vdy5nZXRVVENIb3VycygpLFxuICAgICAgbWludXRlOlxuICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgIG5vdy5nZXRVVENNaW51dGVzKCkgLyB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTWludXRlU3RlcF0sXG4gICAgICAgICkgKiB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTWludXRlU3RlcF0sXG4gICAgICBzZWNvbmQ6IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5TaG93U2Vjb25kc11cbiAgICAgICAgPyBNYXRoLmZsb29yKFxuICAgICAgICAgICAgbm93LmdldFVUQ1NlY29uZHMoKSAvIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5TZWNvbmRTdGVwXSxcbiAgICAgICAgICApICogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlNlY29uZFN0ZXBdXG4gICAgICAgIDogMCxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgaW5pdGlhbGl6ZU1hbnVhbFJhbmdlKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzUmFuZ2UgfHxcbiAgICAgICF0aGlzLmhhc0RhdGUgfHxcbiAgICAgIHRoaXMuZHJhZnRzLmV2ZXJ5KChkcmFmdCkgPT4gZHJhZnQucHJlc2VudClcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgbGV0IHNlZWQgPSB0aGlzLmRyYWZ0cy5maW5kKChkcmFmdCkgPT4gZHJhZnQucHJlc2VudCk7XG4gICAgaWYgKCFzZWVkKSB7XG4gICAgICBpZiAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlZhbHVlXSAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgY29uc3Qgbm93ID0gdGhpcy5jbG9jay5ub3coKTtcbiAgICAgIGNvbnN0IGluaXRpYWxFcG9jaERheSA9XG4gICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Jbml0aWFsRXBvY2hEYXldO1xuICAgICAgY29uc3QgZGF5ID1cbiAgICAgICAgaW5pdGlhbEVwb2NoRGF5ID09PSBudWxsXG4gICAgICAgICAgPyB0aGlzLmRlZmF1bHRzLmluaXRpYWxFcG9jaERheSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IE1hdGguZmxvb3Iobm93LmdldFRpbWUoKSAvIDg2NDAwMDAwKVxuICAgICAgICAgICAgOiB0aGlzLmRlZmF1bHRzLmluaXRpYWxFcG9jaERheVxuICAgICAgICAgIDogaW5pdGlhbEVwb2NoRGF5O1xuICAgICAgc2VlZCA9IHsgLi4udGhpcy5jbG9ja0RyYWZ0KGRheSwgbm93KSwgcHJlc2VudDogdHJ1ZSB9O1xuICAgIH1cbiAgICAvLyBDb21wbGV0ZSBtaXNzaW5nIGVuZHBvaW50cyB3aXRob3V0IHJlcGxhY2luZyBzZWxlY3RlZCBvciBpbnZhbGlkIGRyYWZ0cy5cbiAgICBjb25zdCBpbml0aWFsID0gc2VlZDtcbiAgICB0aGlzLmRyYWZ0cyA9IHRoaXMuZHJhZnRzLm1hcCgoZHJhZnQpID0+XG4gICAgICBkcmFmdC5wcmVzZW50ID8gZHJhZnQgOiB7IC4uLmluaXRpYWwsIGRhdGU6IHsgLi4uaW5pdGlhbC5kYXRlIH0gfSxcbiAgICApO1xuICAgIHRoaXMuZmluaXNoKCk7XG4gICAgLy8gUG9zaXRpb25pbmcgcmVuZGVycyBiZWZvcmUgdmFsaWRhdGlvbjsgcmVmcmVzaCBjb21wbGV0aW9uIGNvbnRyb2xzIGFmdGVyd2FyZC5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIHRvZ2dsZVZpZXcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0gfHwgIXRoaXMuaGFzRGF0ZSkgcmV0dXJuO1xuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLnZpZXdNb2RlID09PSBcImNhbGVuZGFyXCIgPyBcIm1hbnVhbFwiIDogXCJjYWxlbmRhclwiO1xuICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSBcIm1hbnVhbFwiKSB0aGlzLmluaXRpYWxpemVNYW51YWxSYW5nZSgpO1xuICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSBcImNhbGVuZGFyXCIpIHRoaXMucG9zaXRpb25Pbk1hbnVhbERhdGUoKTtcbiAgICB0aGlzW1drbHlQaWNrZXJPdXRwdXRzUHJvcGVydHlLZXlzLlZpZXdNb2RlQ2hhbmdlXS5lbWl0KHRoaXMudmlld01vZGUpO1xuICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSBcImNhbGVuZGFyXCIpIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNldFNjcm9sbCgpKTtcbiAgfVxuICBwcml2YXRlIHBvc2l0aW9uT25NYW51YWxEYXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRyYWZ0ID0gdGhpcy5kcmFmdHNbdGhpcy5tYW51YWxEYXRlRW5kcG9pbnRdO1xuICAgIGlmICghZHJhZnQgfHwgIWRyYWZ0LnByZXNlbnQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgLy8gQSB2YWxpZCBkYXkgZm9sbG93cyB0aGUgc2VsZWN0aW9uLiBBbiBpbXBvc3NpYmxlIGRheSBrZWVwcyBpdHMgZHJhZnRcbiAgICAgIC8vIGZpZWxkcyBidXQgc3RpbGwgc2hvd3MgdGhlIGNob3NlbiBtb250aCBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmFkYXB0ZXIuZGF0ZVRvRXBvY2hEYXkoZHJhZnQuZGF0ZSk7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0YXJnZXQ7XG4gICAgICB0aGlzLnBvc2l0aW9uKHRhcmdldCwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmFkYXB0ZXIuZGF0ZVRvRXBvY2hEYXkoeyAuLi5kcmFmdC5kYXRlLCBkYXk6IDEgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZpcnN0O1xuICAgICAgICB0aGlzLnBvc2l0aW9uKGZpcnN0LCB0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICB9XG4gIG1vbnRocyhkcmFmdDogRHJhZnQpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZ2V0TW9udGhzKGRyYWZ0LmRhdGUueWVhcikubWFwKChtKSA9PiBtLmxhYmVsKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIG1vbnRoQ291bnQoZHJhZnQ6IERyYWZ0KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tb250aHMoZHJhZnQpLmxlbmd0aCB8fCAxMjtcbiAgfVxuICBnZXQgaW5EYXlzKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiBkcmFmdERheURpZmZlcmVuY2UodGhpcy5kcmFmdHMsIHRoaXMuYWRhcHRlcik7XG4gIH1cbiAgZ2V0IGluRGF5c0xhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5cyA9IHRoaXMuaW5EYXlzO1xuICAgIHJldHVybiB0aGlzLnQoXCJpbkRheXNcIikucmVwbGFjZShcbiAgICAgIC97e1xccypkYXlzXFxzKn19L2csXG4gICAgICBkYXlzID09PSBudWxsXG4gICAgICAgID8gdGhpcy50KFwiZGF5c1VuYXZhaWxhYmxlXCIpXG4gICAgICAgIDogbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuZWZmZWN0aXZlTG9jYWxlLCB7XG4gICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgfSkuZm9ybWF0KGRheXMpLFxuICAgICk7XG4gIH1cbiAgZ2V0IHJlc3VsdGluZ0VuZERhdGUoKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZHJhZnQgPSB0aGlzLmRyYWZ0c1sxXTtcbiAgICAgIGlmIChcbiAgICAgICAgZHJhZnQudW5zdXBwb3J0ZWRFcG9jaERheSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuYWRhcHRlci52YWxpZGF0ZURhdGUoZHJhZnQuZGF0ZSkubGVuZ3RoXG4gICAgICApXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hZGFwdGVyLmZvcm1hdERheShkcmFmdC5kYXRlKSxcbiAgICAgICAgdGhpcy5hZGFwdGVyLmZvcm1hdE1vbnRoKGRyYWZ0LmRhdGUpLFxuICAgICAgICB0aGlzLmFkYXB0ZXIuZm9ybWF0WWVhcihkcmFmdC5kYXRlKSxcbiAgICAgIF0uam9pbihcIiBcIik7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG4gIHRvZ2dsZUVuZFZpZXcodmlldzogXCJkYXRlXCIgfCBcImRheXNcIik6IHZvaWQge1xuICAgIGlmICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdKSByZXR1cm47XG4gICAgdGhpcy5lbmRWaWV3ID0gdmlldztcbiAgfVxuICBkYXlzKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0pIHJldHVybjtcbiAgICB0aGlzLm1hbnVhbERhdGVFbmRwb2ludCA9IDE7XG4gICAgc2V0RHJhZnREYXlEaWZmZXJlbmNlKHRoaXMuZHJhZnRzLCB0aGlzLmFkYXB0ZXIsIHZhbHVlKTtcbiAgICB0aGlzLmNoZWNrKCk7XG4gIH1cbiAgZmllbGQoaW5kZXg6IG51bWJlciwgZmllbGQ6IHN0cmluZywgdmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSkgcmV0dXJuO1xuICAgIGNvbnN0IGRyYWZ0ID0gdGhpcy5kcmFmdHNbaW5kZXhdO1xuICAgIGRyYWZ0LnByZXNlbnQgPSB0cnVlO1xuICAgIGlmIChmaWVsZCA9PT0gXCJkYXlcIiB8fCBmaWVsZCA9PT0gXCJ5ZWFyXCIgfHwgZmllbGQgPT09IFwibW9udGhcIikge1xuICAgICAgdGhpcy5tYW51YWxEYXRlRW5kcG9pbnQgPSBpbmRleDtcbiAgICAgIGRlbGV0ZSBkcmFmdC51bnN1cHBvcnRlZEVwb2NoRGF5O1xuICAgICAgbGV0IGRhdGUgPSB7IC4uLmRyYWZ0LmRhdGUsIFtmaWVsZF06IHZhbHVlIH0gYXMgV2tseUNhbGVuZGFyRGF0ZTtcbiAgICAgIGlmIChmaWVsZCA9PT0gXCJtb250aFwiKSB7XG4gICAgICAgIGxldCBtb250aDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtb250aCA9IHRoaXMuYWRhcHRlclxuICAgICAgICAgICAgLmdldE1vbnRocyhkYXRlLnllYXIpXG4gICAgICAgICAgICAuZmluZCgobSkgPT4gbS5tb250aCA9PT0gdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICBkYXRlID0geyAuLi5kYXRlLCBtb250aENvZGU6IG1vbnRoID8gbW9udGgubW9udGhDb2RlIDogXCJcIiB9O1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkID09PSBcInllYXJcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1vbnRocyA9IHRoaXMuYWRhcHRlci5nZXRNb250aHModmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG1vbnRoID0gbW9udGhzLmZpbmQoKG0pID0+IG0ubW9udGhDb2RlID09PSBkYXRlLm1vbnRoQ29kZSk7XG4gICAgICAgICAgaWYgKG1vbnRoKSBkYXRlID0geyAuLi5kYXRlLCBtb250aDogbW9udGgubW9udGggfTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cbiAgICAgIGRyYWZ0LmRhdGUgPSBkYXRlO1xuICAgIH0gZWxzZSBpZiAoZmllbGQgPT09IFwiaG91clwiICYmIHRoaXMuZWZmZWN0aXZlSG91ckN5Y2xlID09PSBcImgxMlwiKVxuICAgICAgZHJhZnQuaG91ciA9XG4gICAgICAgIHZhbHVlID09PSBudWxsXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDEyXG4gICAgICAgICAgICA/ICh2YWx1ZSAlIDEyKSArICgoZHJhZnQuaG91ciB8fCAwKSA+PSAxMiA/IDEyIDogMClcbiAgICAgICAgICAgIDogMjQgKyB2YWx1ZTtcbiAgICBlbHNlIChkcmFmdCBhcyBhbnkpW2ZpZWxkXSA9IHZhbHVlO1xuICAgIHRoaXMuY2hlY2soKTtcbiAgfVxuICBkaXNwbGF5SG91cihkcmFmdDogRHJhZnQpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gZHJhZnQuaG91ciA9PT0gbnVsbFxuICAgICAgPyBudWxsXG4gICAgICA6IHRoaXMuZWZmZWN0aXZlSG91ckN5Y2xlID09PSBcImgxMlwiXG4gICAgICAgID8gZHJhZnQuaG91ciAlIDEyIHx8IDEyXG4gICAgICAgIDogZHJhZnQuaG91cjtcbiAgfVxuICBwZXJpb2QoaW5kZXg6IG51bWJlciwgcGVyaW9kOiBcImFtXCIgfCBcInBtXCIgfCBcIjI0XCIpOiB2b2lkIHtcbiAgICBpZiAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSkgcmV0dXJuO1xuICAgIGlmIChwZXJpb2QgPT09IFwiMjRcIikgdGhpcy5lZmZlY3RpdmVIb3VyQ3ljbGUgPSBcImgyNFwiO1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5lZmZlY3RpdmVIb3VyQ3ljbGUgPSBcImgxMlwiO1xuICAgICAgdGhpcy5kcmFmdHNbaW5kZXhdLmhvdXIgPVxuICAgICAgICAoKHRoaXMuZHJhZnRzW2luZGV4XS5ob3VyIHx8IDApICUgMTIpICsgKHBlcmlvZCA9PT0gXCJwbVwiID8gMTIgOiAwKTtcbiAgICAgIHRoaXMuZHJhZnRzW2luZGV4XS5wcmVzZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgfVxuICB9XG4gIHNlbGVjdGVkKGRheTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZnRzLnNvbWUoKGQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkLnByZXNlbnQgJiYgdGhpcy5hZGFwdGVyLmRhdGVUb0Vwb2NoRGF5KGQuZGF0ZSkgPT09IGRheTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGluUmFuZ2UoZGF5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNSYW5nZSB8fCAhdGhpcy5kcmFmdHMuZXZlcnkoKGQpID0+IGQucHJlc2VudCkpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IHRoaXMuYWRhcHRlci5kYXRlVG9FcG9jaERheSh0aGlzLmRyYWZ0c1swXS5kYXRlKSxcbiAgICAgICAgYiA9IHRoaXMuYWRhcHRlci5kYXRlVG9FcG9jaERheSh0aGlzLmRyYWZ0c1sxXS5kYXRlKTtcbiAgICAgIHJldHVybiBkYXkgPiBNYXRoLm1pbihhLCBiKSAmJiBkYXkgPCBNYXRoLm1heChhLCBiKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGRheURpc2FibGVkKGRheTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKGRheSA8IHRoaXMuZmlyc3RTdXBwb3J0ZWREYXkgfHwgZGF5ID4gdGhpcy5sYXN0U3VwcG9ydGVkRGF5KVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoZGF5KTtcbiAgICAgIGNvbnN0IGlzRGF0ZURpc2FibGVkID0gdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLklzRGF0ZURpc2FibGVkXTtcbiAgICAgIGlmIChcbiAgICAgICAgaXNEYXRlRGlzYWJsZWQgJiZcbiAgICAgICAgaXNEYXRlRGlzYWJsZWQoZGF5LCB7XG4gICAgICAgICAgbW9kZTogdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk1vZGVdLFxuICAgICAgICAgIGVuZHBvaW50OiB0aGlzLmlzUmFuZ2VcbiAgICAgICAgICAgID8gdGhpcy5kcmFmdHNbMF0/LnByZXNlbnQgJiYgIXRoaXMuZHJhZnRzWzFdPy5wcmVzZW50XG4gICAgICAgICAgICAgID8gXCJlbmRcIlxuICAgICAgICAgICAgICA6IFwic3RhcnRcIlxuICAgICAgICAgICAgOiBcInNpbmdsZVwiLFxuICAgICAgICAgIGNhbGVuZGFyRGF0ZTogZGF0ZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCBtaW4gPSB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTWluXTtcbiAgICAgIGNvbnN0IG1heCA9IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5NYXhdO1xuICAgICAgaWYgKG1pbiAmJiBkYXkgPCBkZWNvZGVJc28obWluKS5lcG9jaERheSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAobWF4ICYmIGRheSA+IGRlY29kZUlzbyhtYXgpLmVwb2NoRGF5KSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgc2VsZWN0KGRheTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0gfHwgdGhpcy5kYXlEaXNhYmxlZChkYXkpKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZm9jdXNlZCA9IGRheTtcbiAgICBjb25zdCBpbmRleCA9XG4gICAgICB0aGlzLmlzUmFuZ2UgJiYgdGhpcy5kcmFmdHNbMF0ucHJlc2VudCAmJiAhdGhpcy5kcmFmdHNbMV0ucHJlc2VudCA/IDEgOiAwO1xuICAgIGlmICh0aGlzLmlzUmFuZ2UgJiYgaW5kZXggPT09IDApIHRoaXMuZHJhZnRzWzFdLnByZXNlbnQgPSBmYWxzZTtcbiAgICBkZWxldGUgdGhpcy5kcmFmdHNbaW5kZXhdLnVuc3VwcG9ydGVkRXBvY2hEYXk7XG4gICAgdGhpcy5kcmFmdHNbaW5kZXhdLmRhdGUgPSB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoZGF5KTtcbiAgICB0aGlzLmRyYWZ0c1tpbmRleF0ucHJlc2VudCA9IHRydWU7XG4gICAgdGhpcy5vcmRlckRyYWZ0cygpO1xuICAgIHRoaXMucmVuZGVyUm93cygpO1xuICAgIHRoaXMuZmluaXNoKCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wcmVzZW50YXRpb24gPT09IFwidHJhbnNpZW50XCIgJiZcbiAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Nb2RlXSA9PT0gXCJkYXRlXCIgJiZcbiAgICAgIHRoaXMudmlld01vZGUgPT09IFwiY2FsZW5kYXJcIlxuICAgIClcbiAgICAgIHRoaXMuc3VibWl0KFwiYXV0by1zdWJtaXRcIik7XG4gIH1cbiAga2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkYXk6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBkZWx0YSA9IDA7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0xlZnRcIikgZGVsdGEgPSAtMTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93UmlnaHRcIikgZGVsdGEgPSAxO1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSBkZWx0YSA9IC03O1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIGRlbHRhID0gNztcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIlBhZ2VVcFwiKVxuICAgICAgZGVsdGEgPSAtNyAqIChldmVudC5zaGlmdEtleSA/IHRoaXMudmlzaWJsZUNvdW50IDogMSk7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJQYWdlRG93blwiKVxuICAgICAgZGVsdGEgPSA3ICogKGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy52aXNpYmxlQ291bnQgOiAxKTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkhvbWVcIikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9FcG9jaERheSh0aGlzLnRvZGF5LCB7IGZvY3VzOiB0cnVlIH0pO1xuICAgIH1cbiAgICBpZiAoZGVsdGEpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBkYXkgKyBkZWx0YTtcbiAgICAgIGlmICh0YXJnZXQgPj0gdGhpcy5maXJzdFN1cHBvcnRlZERheSAmJiB0YXJnZXQgPD0gdGhpcy5sYXN0U3VwcG9ydGVkRGF5KVxuICAgICAgICB0aGlzLnNjcm9sbFRvRXBvY2hEYXkodGFyZ2V0LCB7IGZvY3VzOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHBvc2l0aW9uKFxuICAgIGRheTogbnVtYmVyLFxuICAgIHByZXNldCA9IGZhbHNlLFxuICAgIG9wdGlvbnM6IFdrbHlKdW1wT3B0aW9ucyA9IHt9LFxuICApOiB2b2lkIHtcbiAgICBkYXkgPSBNYXRoLm1heChcbiAgICAgIHRoaXMuZmlyc3RTdXBwb3J0ZWREYXksXG4gICAgICBNYXRoLm1pbih0aGlzLmxhc3RTdXBwb3J0ZWREYXksIGRheSksXG4gICAgKTtcbiAgICB0aGlzLmFuY2hvcldlZWsgPSBhYnNvbHV0ZVdlZWtPZihkYXksIHRoaXMuZWZmZWN0aXZlT2Zmc2V0KTtcbiAgICBjb25zdCB2aWV3cG9ydFByZXNldCA9IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5WaWV3cG9ydFByZXNldF07XG4gICAgdGhpcy5jbGlwTW9udGggPSBwcmVzZXQgJiYgdmlld3BvcnRQcmVzZXQua2luZCA9PT0gXCJmdWxsLW1vbnRoXCI7XG4gICAgaWYgKHByZXNldCAmJiB2aWV3cG9ydFByZXNldC5raW5kICE9PSBcIndlZWtzXCIpIHtcbiAgICAgIGNvbnN0IGQgPSB0aGlzLmFkYXB0ZXIuZXBvY2hEYXlUb0RhdGUoZGF5KTtcbiAgICAgIHRoaXMuaW5pdGlhbE1vbnRoID0gZC55ZWFyICsgXCIvXCIgKyBkLm1vbnRoQ29kZTtcbiAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IGNhbGVuZGFyTW9udGhCb3VuZHModGhpcy5hZGFwdGVyLCBkYXkpO1xuICAgICAgdGhpcy5maXJzdFdlZWsgPSBhYnNvbHV0ZVdlZWtPZihzdGFydCwgdGhpcy5lZmZlY3RpdmVPZmZzZXQpO1xuICAgICAgdGhpcy52aXNpYmxlQ291bnQgPVxuICAgICAgICBhYnNvbHV0ZVdlZWtPZihlbmQsIHRoaXMuZWZmZWN0aXZlT2Zmc2V0KSAtIHRoaXMuZmlyc3RXZWVrICsgMTtcbiAgICAgIGlmIChcbiAgICAgICAgdmlld3BvcnRQcmVzZXQua2luZCA9PT0gXCJmdWxsLW1vbnRoLWFuZC1hcm91bmRcIiAmJlxuICAgICAgICAhdGhpcy5jb25maWdFcnJvcnMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYmVmb3JlID0gdmlld3BvcnRQcmVzZXQuZXh0cmFXZWVrc0JlZm9yZSB8fCAwLFxuICAgICAgICAgIGFmdGVyID0gdmlld3BvcnRQcmVzZXQuZXh0cmFXZWVrc0FmdGVyIHx8IDA7XG4gICAgICAgIHRoaXMuZmlyc3RXZWVrIC09IGJlZm9yZTtcbiAgICAgICAgdGhpcy52aXNpYmxlQ291bnQgKz0gYmVmb3JlICsgYWZ0ZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2aWV3cG9ydFByZXNldC5raW5kID09PSBcIndlZWtzXCIpXG4gICAgICAgIHRoaXMudmlzaWJsZUNvdW50ID0gdGhpcy5jb25maWdFcnJvcnMubGVuZ3RoXG4gICAgICAgICAgPyA2XG4gICAgICAgICAgOiB2aWV3cG9ydFByZXNldC52aXNpYmxlV2Vla0NvdW50O1xuICAgICAgdGhpcy5maXJzdFdlZWsgPVxuICAgICAgICB0aGlzLmFuY2hvcldlZWsgLVxuICAgICAgICAob3B0aW9ucy5hbGlnbiA9PT0gXCJzdGFydFwiXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBvcHRpb25zLmFsaWduID09PSBcImVuZFwiXG4gICAgICAgICAgICA/IHRoaXMudmlzaWJsZUNvdW50IC0gMVxuICAgICAgICAgICAgOiBNYXRoLmZsb29yKHRoaXMudmlzaWJsZUNvdW50IC8gMikpO1xuICAgIH1cbiAgICB0aGlzLmZpcnN0V2VlayA9IHRoaXMuY2xhbXBGaXJzdFdlZWsodGhpcy5maXJzdFdlZWspO1xuICAgIHRoaXMuYmFzZVdlZWsgPSB0aGlzLmZpcnN0V2VlayAtIDEwMDA7XG4gICAgdGhpcy5yZW5kZXJSb3dzKCk7XG4gICAgLy8gQXBwbHkgdGhlIG5ldyBydW53YXkgYmVmb3JlIHdyaXRpbmcgc2Nyb2xsVG9wIG9yIGxvY2F0aW5nIGEgZm9jdXMgdGFyZ2V0LlxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmVzZXRTY3JvbGwoKTtcbiAgfVxuICBwcml2YXRlIHJlc2V0U2Nyb2xsKCk6IHZvaWQge1xuICAgIC8vIFJvdW5kIHdlZWsgYm91bmRhcmllcyB0byBhdm9pZCBzY3JvbGxUb3AgdHJ1bmNhdGlvbiB1bmRlciBDU1Mgem9vbS5cbiAgICBpZiAodGhpcy5zY3JvbGxlcilcbiAgICAgIHRoaXMuc2Nyb2xsZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBNYXRoLnJvdW5kKDEwMDAgKiB0aGlzLnJvd0hlaWdodCk7XG4gIH1cbiAgc2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5zbmFwUGVuZGluZyA9IHRydWU7XG4gICAgdGhpcy5zY2hlZHVsZVNuYXAoKTtcbiAgICAvLyBRdWFudGl6ZSBkaXNwbGFjZW1lbnQgYXJvdW5kIHRoZSByZXNldCBwb2ludCwgZXF1YWxseSBpbiBib3RoIGRpcmVjdGlvbnMuXG4gICAgY29uc3QgcmVsYXRpdmVSb3dzID0gZWxlbWVudC5zY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCAtIDEwMDA7XG4gICAgY29uc3QgaW5kZXggPVxuICAgICAgMTAwMCArIE1hdGguc2lnbihyZWxhdGl2ZVJvd3MpICogTWF0aC5yb3VuZChNYXRoLmFicyhyZWxhdGl2ZVJvd3MpKTtcbiAgICBjb25zdCByZXF1ZXN0ZWRGaXJzdCA9IHRoaXMuYmFzZVdlZWsgKyBpbmRleDtcbiAgICBjb25zdCBmaXJzdCA9IHRoaXMuY2xhbXBGaXJzdFdlZWsocmVxdWVzdGVkRmlyc3QpO1xuICAgIGlmIChyZXF1ZXN0ZWRGaXJzdCAhPT0gZmlyc3QpIHtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gTWF0aC5yb3VuZCgoZmlyc3QgLSB0aGlzLmJhc2VXZWVrKSAqIHRoaXMucm93SGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKGZpcnN0ID09PSB0aGlzLmZpcnN0V2VlaykgcmV0dXJuO1xuICAgIHRoaXMuY2xpcE1vbnRoID0gZmFsc2U7XG4gICAgdGhpcy5maXJzdFdlZWsgPSBmaXJzdDtcbiAgICB0aGlzLmFuY2hvcldlZWsgPSBmaXJzdCArIE1hdGguZmxvb3IodGhpcy52aXNpYmxlQ291bnQgLyAyKTtcbiAgICBpZiAoaW5kZXggPCAxMDAgfHwgaW5kZXggPiAxOTAwKSB7XG4gICAgICAvLyBQcmVzZXJ2ZSBzaWduZWQgZGlzcGxhY2VtZW50IGZyb20gdGhpcyB3ZWVrOyBtb2R1bG8gdHVybnMgZnJhY3Rpb25hbFxuICAgICAgLy8gcm91bmRpbmcganVzdCBiZWxvdyBhIGJvdW5kYXJ5IGludG8gYWxtb3N0IGEgZnVsbCByb3cgYWZ0ZXIgcmViYXNpbmcuXG4gICAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCAtIChmaXJzdCAtIHRoaXMuYmFzZVdlZWspICogdGhpcy5yb3dIZWlnaHQ7XG4gICAgICB0aGlzLmJhc2VXZWVrID0gZmlyc3QgLSAxMDAwO1xuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBNYXRoLnJvdW5kKDEwMDAgKiB0aGlzLnJvd0hlaWdodCArIG9mZnNldCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyUm93cygpO1xuICB9XG4gIHByaXZhdGUgc2NoZWR1bGVTbmFwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNjcm9sbEVuZFRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxFbmRUaW1lcik7XG4gICAgdGhpcy5zY3JvbGxFbmRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zbmFwV2VlaygpLCAyMDApO1xuICB9XG4gIHNuYXBXZWVrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNjcm9sbEVuZFRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxFbmRUaW1lcik7XG4gICAgdGhpcy5zY3JvbGxFbmRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIXRoaXMuc25hcFBlbmRpbmcgfHwgIXRoaXMuc2Nyb2xsZXIpIHJldHVybjtcbiAgICB0aGlzLnNuYXBQZW5kaW5nID0gZmFsc2U7XG4gICAgLy8gQWxpZ24gdGhlIGN1cnJlbnQgdmlydHVhbCB3ZWVrIHdpdGhvdXQgcmVidWlsZGluZyBvciByZWJhc2luZyBpdHMgcm93cy5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zY3JvbGxlci5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRhcmdldCA9IE1hdGgucm91bmQoXG4gICAgICAodGhpcy5maXJzdFdlZWsgLSB0aGlzLmJhc2VXZWVrKSAqIHRoaXMucm93SGVpZ2h0LFxuICAgICk7XG4gICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wICE9PSB0YXJnZXQpIGVsZW1lbnQuc2Nyb2xsVG9wID0gdGFyZ2V0O1xuICB9XG4gIHByaXZhdGUgc2hvd0ZpcnN0V2Vlayh3ZWVrOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdCA9IHRoaXMuY2xhbXBGaXJzdFdlZWsod2Vlayk7XG4gICAgaWYgKGZpcnN0ID09PSB0aGlzLmZpcnN0V2VlaykgcmV0dXJuO1xuICAgIHRoaXMuY2xpcE1vbnRoID0gZmFsc2U7XG4gICAgdGhpcy5maXJzdFdlZWsgPSBmaXJzdDtcbiAgICB0aGlzLmFuY2hvcldlZWsgPSBmaXJzdCArIE1hdGguZmxvb3IodGhpcy52aXNpYmxlQ291bnQgLyAyKTtcbiAgICB0aGlzLmJhc2VXZWVrID0gZmlyc3QgLSAxMDAwO1xuICAgIHRoaXMucmVuZGVyUm93cygpO1xuICAgIHRoaXMucmVzZXRTY3JvbGwoKTtcbiAgfVxuICBjYW5Nb3ZlV2VlayhkZWx0YTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhbXBGaXJzdFdlZWsodGhpcy5maXJzdFdlZWsgKyBkZWx0YSkgIT09IHRoaXMuZmlyc3RXZWVrO1xuICB9XG4gIG1vdmVXZWVrKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0pXG4gICAgICB0aGlzLnNob3dGaXJzdFdlZWsodGhpcy5maXJzdFdlZWsgKyBkZWx0YSk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJSb3dzKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIHZpcnR1YWwgc2Nyb2xsIG9mZnNldCBoZXJlOyByb3cgZGF0YSBpcyBzaGFyZWQgYWNyb3NzIEFuZ3VsYXIgdmVyc2lvbnMuXG4gICAgY29uc3Qgb3ZlcnNjYW4gPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbig1MCwgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLk92ZXJzY2FuV2Vla3NdIHx8IDApLFxuICAgICk7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpcnN0V2VlayAtIG92ZXJzY2FuO1xuICAgIHRoaXMucGFkZGluZ1RvcCA9IChzdGFydCAtIHRoaXMuYmFzZVdlZWspICogdGhpcy5yb3dIZWlnaHQ7XG4gICAgdGhpcy5yb3dzID0gY3JlYXRlV2Vla1Jvd3Moe1xuICAgICAgZ2VuZXJhdG9yOiB0aGlzLmdlbmVyYXRvcixcbiAgICAgIGFkYXB0ZXI6IHRoaXMuYWRhcHRlcixcbiAgICAgIHN0YXJ0V2Vlazogc3RhcnQsXG4gICAgICBjb3VudDogdGhpcy52aXNpYmxlQ291bnQgKyAyICogb3ZlcnNjYW4sXG4gICAgICBmaXJzdFZpc2libGVXZWVrOiB0aGlzLmZpcnN0V2VlayxcbiAgICAgIGZpcnN0U3VwcG9ydGVkRGF5OiB0aGlzLmZpcnN0U3VwcG9ydGVkRGF5LFxuICAgICAgbGFzdFN1cHBvcnRlZERheTogdGhpcy5sYXN0U3VwcG9ydGVkRGF5LFxuICAgICAgY2xpcE1vbnRoOiB0aGlzLmNsaXBNb250aCxcbiAgICAgIGluaXRpYWxNb250aDogdGhpcy5pbml0aWFsTW9udGgsXG4gICAgICB3ZWVrTGFiZWxNb2RlOiB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsTW9kZV0sXG4gICAgICB3ZWVrTGFiZWxGb3JtYXR0ZXI6XG4gICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrTGFiZWxGb3JtYXR0ZXJdIHx8IG51bGwsXG4gICAgICBpc0RheURpc2FibGVkOiAoZGF5KSA9PiB0aGlzLmRheURpc2FibGVkKGRheSksXG4gICAgfSk7XG4gICAgdGhpc1tXa2x5UGlja2VyT3V0cHV0c1Byb3BlcnR5S2V5cy5WaWV3cG9ydENoYW5nZV0uZW1pdCh7XG4gICAgICBmaXJzdFZpc2libGVBYnNvbHV0ZVdlZWs6IHRoaXMuZmlyc3RXZWVrLFxuICAgICAgbGFzdFZpc2libGVBYnNvbHV0ZVdlZWs6IHRoaXMuZmlyc3RXZWVrICsgdGhpcy52aXNpYmxlQ291bnQgLSAxLFxuICAgICAgYW5jaG9yQWJzb2x1dGVXZWVrOiB0aGlzLmFuY2hvcldlZWssXG4gICAgfSk7XG4gIH1cbiAgLy8gUmV0YWluIGRheSBET00gbm9kZXMgYW5kIGtleWJvYXJkIGZvY3VzIHdoZW4gcm93IG1ldGFkYXRhIGlzIHJlZ2VuZXJhdGVkLlxuICB0cmFja0NlbGwoX2k6IG51bWJlciwgY2VsbDogeyBlcG9jaERheTogbnVtYmVyIH0pOiBudW1iZXIge1xuICAgIHJldHVybiBjZWxsLmVwb2NoRGF5O1xuICB9XG4gIHRyYWNrUm93KF9pOiBudW1iZXIsIHJvdzogUm93KTogbnVtYmVyIHtcbiAgICByZXR1cm4gcm93LndlZWsuYWJzb2x1dGVXZWVrO1xuICB9XG4gIHNjcm9sbFRvRXBvY2hEYXkoZGF5OiBudW1iZXIsIG9wdGlvbnM6IFdrbHlKdW1wT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgaW50ZWdlcihkYXkpO1xuICAgIHRoaXMuYWRhcHRlci5lcG9jaERheVRvRGF0ZShkYXkpO1xuICAgIGRheSA9IE1hdGgubWF4KFxuICAgICAgdGhpcy5maXJzdFN1cHBvcnRlZERheSxcbiAgICAgIE1hdGgubWluKHRoaXMubGFzdFN1cHBvcnRlZERheSwgZGF5KSxcbiAgICApO1xuICAgIC8vIHBvc2l0aW9uIHJlbmRlcnMgc3luY2hyb25vdXNseTsgcHVibGlzaCB0aGUgdGFiIHN0b3AgYmVmb3JlIHRoYXQgcmVuZGVyLlxuICAgIGlmIChvcHRpb25zLmZvY3VzKSB0aGlzLmZvY3VzZWQgPSBkYXk7XG4gICAgdGhpcy5wb3NpdGlvbihkYXksIGZhbHNlLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5zZWxlY3QpIHRoaXMuc2VsZWN0KGRheSk7XG4gICAgaWYgKG9wdGlvbnMuZm9jdXMpIHRoaXMuZm9jdXNEYXkoKTtcbiAgfVxuICBzY3JvbGxUb0Fic29sdXRlV2Vlayh3ZWVrOiBudW1iZXIsIG9wdGlvbnM6IFdrbHlKdW1wT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgLy8gQSBib3VuZGFyeSB3ZWVrIGNhbiBzdGFydCBiZWZvcmUgdGhlIGFkYXB0ZXIncyBmaXJzdCBzdXBwb3J0ZWQgZGF5LlxuICAgIGNvbnN0IGZpcnN0ID0gZmlyc3RFcG9jaERheU9mKHdlZWssIHRoaXMuZWZmZWN0aXZlT2Zmc2V0KTtcbiAgICB0aGlzLnNjcm9sbFRvRXBvY2hEYXkoXG4gICAgICB3ZWVrID09PSB0aGlzLmZpcnN0U3VwcG9ydGVkV2Vla1xuICAgICAgICA/IE1hdGgubWF4KGZpcnN0LCB0aGlzLmZpcnN0U3VwcG9ydGVkRGF5KVxuICAgICAgICA6IGZpcnN0LFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9XG4gIHNjcm9sbFRvQ2FsZW5kYXJEYXRlKFxuICAgIGRhdGU6IFdrbHlDYWxlbmRhckRhdGUsXG4gICAgb3B0aW9uczogV2tseUp1bXBPcHRpb25zID0ge30sXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9FcG9jaERheSh0aGlzLmFkYXB0ZXIuZGF0ZVRvRXBvY2hEYXkoZGF0ZSksIG9wdGlvbnMpO1xuICB9XG4gIHNjcm9sbFRvVmFsdWUodmFsdWU6IHN0cmluZywgb3B0aW9uczogV2tseUp1bXBPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvRXBvY2hEYXkoZGVjb2RlSXNvKHZhbHVlKS5lcG9jaERheSwgb3B0aW9ucyk7XG4gIH1cbiAgZm9jdXNEYXkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJyb3dzZXIpIHJldHVybjtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zdCBkYXkgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnW2RhdGEtZGF5PVwiJyArIHRoaXMuZm9jdXNlZCArICdcIl0nLFxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgXCJidXR0b246bm90KDpkaXNhYmxlZCksaW5wdXQ6bm90KDpkaXNhYmxlZClcIixcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAoZGF5IHx8IGZhbGxiYWNrKT8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8c2VjdGlvblxuICBjbGFzcz1cIndrbHlcIlxuICBbYXR0ci5kaXJdPVwiZGlyZWN0aW9uXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuQXJpYUxhYmVsXSB8fCAnRGF0ZSBhbmQgdGltZSBwaWNrZXInXG4gIFwiXG4gIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkFyaWFEZXNjcmliZWRCeV1cIlxuICAoZm9jdXNvdXQpPVwidG91Y2hlZCgpXCJcbj5cbiAgPGhlYWRlciBjbGFzcz1cInRvb2xiYXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImhhc0RhdGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQodmlld01vZGUgPT09ICdjYWxlbmRhcicgPyAnbWFudWFsJyA6ICdjYWxlbmRhcicpXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVWaWV3KClcIlxuICAgID5cbiAgICAgIHt7IHZpZXdNb2RlID09PSBcImNhbGVuZGFyXCIgPyBcIuKYt1wiIDogXCLilqZcIiB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxzcGFuICpuZ0lmPVwiaGFzRGF0ZVwiIGNsYXNzPVwieWVhci1jb250cm9sXCI+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJzcGFjZXJcIj48L3NwYW5cbiAgICA+PGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cIm5vd1wiXG4gICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAoY2xpY2spPVwibm93KClcIlxuICAgID5cbiAgICAgIHt7IHQoXCJub3dcIikgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInByZXNlbnRhdGlvbiA9PT0gJ3RyYW5zaWVudCdcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2Nsb3NlJylcIlxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICA+XG4gICAgICDDl1xuICAgIDwvYnV0dG9uPlxuICA8L2hlYWRlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0RhdGUgJiYgdmlld01vZGUgPT09ICdjYWxlbmRhcidcIj5cbiAgICA8ZGl2XG4gICAgICByb2xlPVwiZ3JpZFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuQXJpYUxhYmVsXSB8fCAnQ2FsZW5kYXInXG4gICAgICBcIlxuICAgICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwiaXNSYW5nZVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByb2xlPVwicm93XCJcbiAgICAgICAgY2xhc3M9XCJ3ZWVrLWhlYWRcIlxuICAgICAgICBbY2xhc3Mubm8tbGFiZWxdPVwiXG4gICAgICAgICAgY29tcGFjdCB8fFxuICAgICAgICAgICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsTW9kZV0gPT09ICdoaWRkZW4nICYmXG4gICAgICAgICAgICAhdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbEZvcm1hdHRlcl0pXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICFjb21wYWN0ICYmXG4gICAgICAgICAgICAodGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbE1vZGVdICE9PSAnaGlkZGVuJyB8fFxuICAgICAgICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsRm9ybWF0dGVyXSlcbiAgICAgICAgICBcIlxuICAgICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJXZWVrXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgICA+PHNwYW4gKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrZGF5c1wiIHJvbGU9XCJjb2x1bW5oZWFkZXJcIj57eyBkYXkgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgI3Njcm9sbGVyXG4gICAgICAgIGNsYXNzPVwid2Vlay1zY3JvbGxcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInZpc2libGVDb3VudCAqIHJvd0hlaWdodFwiXG4gICAgICAgIChzY3JvbGwpPVwic2Nyb2xsKCRldmVudClcIlxuICAgICAgICAoc2Nyb2xsZW5kKT1cInNuYXBXZWVrKClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwic2Nyb2xsSGVpZ2h0XCIgY2xhc3M9XCJzY3JvbGwtc3BhY2VcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93c1wiIFtzdHlsZS50b3AucHhdPVwicGFkZGluZ1RvcFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IHRyYWNrQnk6IHRyYWNrUm93XCJcbiAgICAgICAgICAgICAgcm9sZT1cInJvd1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwid2Vlay1yb3dcIlxuICAgICAgICAgICAgICBbY2xhc3Mubm8tbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgY29tcGFjdCB8fFxuICAgICAgICAgICAgICAgICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsTW9kZV0gPT09XG4gICAgICAgICAgICAgICAgICAnaGlkZGVuJyAmJlxuICAgICAgICAgICAgICAgICAgIXRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrTGFiZWxGb3JtYXR0ZXJdKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhY29tcGFjdCAmJlxuICAgICAgICAgICAgICAgICAgKHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5XZWVrTGFiZWxNb2RlXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbicgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLldlZWtMYWJlbEZvcm1hdHRlcl0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICByb2xlPVwicm93aGVhZGVyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIndlZWstbnVtYmVyXCJcbiAgICAgICAgICAgICAgICA+e3sgcm93LmxhYmVsIH19PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNlbGwgb2Ygcm93LmNlbGxzO1xuICAgICAgICAgICAgICAgICAgbGV0IGRheUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0NlbGxcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS13ZWVrZGF5LWluZGV4XT1cImRheUluZGV4XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbGluZGV4XT1cIlxuICAgICAgICAgICAgICAgICAgZGF5SW5kZXggK1xuICAgICAgICAgICAgICAgICAgKGNvbXBhY3QgfHxcbiAgICAgICAgICAgICAgICAgICh0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsTW9kZV0gPT09XG4gICAgICAgICAgICAgICAgICAgICdoaWRkZW4nICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuV2Vla0xhYmVsRm9ybWF0dGVyXSlcbiAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgIDogMilcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0ZWQoY2VsbC5lcG9jaERheSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICBjZWxsLmRpc2FibGVkIHx8IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5yYW5nZV09XCJpblJhbmdlKGNlbGwuZXBvY2hEYXkpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImNlbGwuaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub2RkLW1vbnRoXT1cImNlbGwuZGF0ZSAmJiBjZWxsLmRhdGUubW9udGggJSAyID09PSAxXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCInYW5ub3RhdGlvbiBhbm5vdGF0aW9uLS0nICsgZGF5SW5kZXhcIj57e1xuICAgICAgICAgICAgICAgICAgY2VsbC5hbm5vdGF0aW9uXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRheVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWRheV09XCJjZWxsLmVwb2NoRGF5XCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY2VsbC5hY2Nlc3NpYmxlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJjZWxsLmVwb2NoRGF5ID09PSB0b2RheSA/ICdkYXRlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5kaXNhYmxlZCB8fCB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiXG4gICAgICAgICAgICAgICAgICAgICFjZWxsLmhpZGRlbiAmJiBjZWxsLmVwb2NoRGF5ID09PSBmb2N1c2VkID8gMCA6IC0xXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkKGNlbGwuZXBvY2hEYXkpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy50b2RheV09XCJjZWxsLmVwb2NoRGF5ID09PSB0b2RheVwiXG4gICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiZm9jdXNlZCA9IGNlbGwuZXBvY2hEYXlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChjZWxsLmVwb2NoRGF5KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJrZXkoJGV2ZW50LCBjZWxsLmVwb2NoRGF5KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgY2VsbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWVrLW5hdmlnYXRpb25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdIHx8ICFjYW5Nb3ZlV2VlaygtMSlcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdwcmV2aW91cycpXCJcbiAgICAgICAgKGNsaWNrKT1cIm1vdmVXZWVrKC0xKVwiXG4gICAgICA+XG4gICAgICAgIOKGkTwvYnV0dG9uXG4gICAgICA+PHNwYW4+e3sgdGl0bGUgfX08L3NwYW5cbiAgICAgID48YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXSB8fCAhY2FuTW92ZVdlZWsoMSlcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCduZXh0JylcIlxuICAgICAgICAoY2xpY2spPVwibW92ZVdlZWsoMSlcIlxuICAgICAgPlxuICAgICAgICDihpNcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBkcmFmdCBvZiBkcmFmdHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrRHJhZnRcIlxuICA+XG4gICAgPGZpZWxkc2V0XG4gICAgICAqbmdJZj1cIihpID09PSAwIHx8IGlzUmFuZ2UpICYmIChoYXNUaW1lIHx8IHZpZXdNb2RlID09PSAnbWFudWFsJylcIlxuICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc1JhbmdlID8gdChpID09PSAwID8gJ3N0YXJ0JyA6ICdlbmQnKSA6IG51bGxcIlxuICAgID5cbiAgICAgIDxsZWdlbmQgKm5nSWY9XCJpc1JhbmdlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgaSA9PT0gMSAmJiBoYXNEYXRlICYmIHZpZXdNb2RlID09PSAnbWFudWFsJztcbiAgICAgICAgICAgIGVsc2UgZW5kcG9pbnRMYWJlbFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImVuZC12aWV3LXRvZ2dsZVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZW5kVmlldyA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVuZFZpZXcoJ2RhdGUnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHQoXCJlbmRcIikgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF1cIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiZW5kVmlldyA9PT0gJ2RheXMnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVuZFZpZXcoJ2RheXMnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGluRGF5c0xhYmVsIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2VuZHBvaW50TGFiZWw+e3tcbiAgICAgICAgICB0KGkgPT09IDAgPyBcInN0YXJ0XCIgOiBcImVuZFwiKVxuICAgICAgICB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xlZ2VuZD5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBpID09PSAxICYmIGhhc0RhdGUgJiYgdmlld01vZGUgPT09ICdtYW51YWwnICYmIGVuZFZpZXcgPT09ICdkYXlzJ1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImRhdGUtZmllbGRzIGluLWRheXMtZmllbGRzXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRpbmctZW5kLWRhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2VuZERhdGUnKVwiPnt7XG4gICAgICAgICAgcmVzdWx0aW5nRW5kRGF0ZVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPHdrbHktZmllbGRcbiAgICAgICAgICBbbGFiZWxdPVwidCgnZGF5cycpXCJcbiAgICAgICAgICBbaGlkZUxhYmVsXT1cInRydWVcIlxuICAgICAgICAgIFtwcmV2aW91c0xhYmVsXT1cInQoJ2RheXNQcmV2aW91cycpXCJcbiAgICAgICAgICBbbmV4dExhYmVsXT1cInQoJ2RheXNOZXh0JylcIlxuICAgICAgICAgIFtsb2NhbGVdPVwiZWZmZWN0aXZlTG9jYWxlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiaW5EYXlzXCJcbiAgICAgICAgICBbbWluXT1cIi05OTk5XCJcbiAgICAgICAgICBbbWF4XT1cIjk5OTlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgICAgICBbaW52YWxpZF09XCIhIWVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJkYXlzKCRldmVudClcIlxuICAgICAgICAgIChjb21wbGV0ZSk9XCJmaW5pc2goKVwiXG4gICAgICAgID48L3drbHktZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBoYXNEYXRlICYmIHZpZXdNb2RlID09PSAnbWFudWFsJyAmJiAoaSA9PT0gMCB8fCBlbmRWaWV3ID09PSAnZGF0ZScpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiZGF0ZS1maWVsZHNcIlxuICAgICAgPlxuICAgICAgICA8d2tseS1maWVsZFxuICAgICAgICAgIFtsYWJlbF09XCJ0KCdkYXknKVwiXG4gICAgICAgICAgW2xvY2FsZV09XCJlZmZlY3RpdmVMb2NhbGVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJkcmFmdC5kYXRlLmRheVwiXG4gICAgICAgICAgW21pbl09XCIxXCJcbiAgICAgICAgICBbbWF4XT1cIjMxXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgW2ludmFsaWRdPVwiISFlcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGQoaSwgJ2RheScsICRldmVudClcIlxuICAgICAgICAgIChjb21wbGV0ZSk9XCJmaW5pc2goKVwiXG4gICAgICAgID48L3drbHktZmllbGQ+XG4gICAgICAgIDx3a2x5LWZpZWxkXG4gICAgICAgICAgW2xhYmVsXT1cInQoJ21vbnRoJylcIlxuICAgICAgICAgIFtsb2NhbGVdPVwiZWZmZWN0aXZlTG9jYWxlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiZHJhZnQuZGF0ZS5tb250aFwiXG4gICAgICAgICAgW21pbl09XCIxXCJcbiAgICAgICAgICBbbWF4XT1cIm1vbnRoQ291bnQoZHJhZnQpXCJcbiAgICAgICAgICBbbGFiZWxzXT1cIm1vbnRocyhkcmFmdClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgICAgICBbaW52YWxpZF09XCIhIWVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmaWVsZChpLCAnbW9udGgnLCAkZXZlbnQpXCJcbiAgICAgICAgICAoY29tcGxldGUpPVwiZmluaXNoKClcIlxuICAgICAgICA+PC93a2x5LWZpZWxkPlxuICAgICAgICA8d2tseS1maWVsZFxuICAgICAgICAgIFtsYWJlbF09XCJ0KCd5ZWFyJylcIlxuICAgICAgICAgIFtsb2NhbGVdPVwiZWZmZWN0aXZlTG9jYWxlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiZHJhZnQuZGF0ZS55ZWFyXCJcbiAgICAgICAgICBbbWluXT1cImFkYXB0ZXIuc3VwcG9ydGVkWWVhclJhbmdlWzBdXCJcbiAgICAgICAgICBbbWF4XT1cImFkYXB0ZXIuc3VwcG9ydGVkWWVhclJhbmdlWzFdXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgW2ludmFsaWRdPVwiISFlcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGQoaSwgJ3llYXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAoY29tcGxldGUpPVwiZmluaXNoKClcIlxuICAgICAgICA+PC93a2x5LWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiaGFzVGltZVwiXG4gICAgICAgIGNsYXNzPVwidGltZS1maWVsZHNcIlxuICAgICAgICBbY2xhc3Muc2Vjb25kc109XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2hvd1NlY29uZHNdXCJcbiAgICAgID5cbiAgICAgICAgPHdrbHktZmllbGRcbiAgICAgICAgICBbbGFiZWxdPVwidCgnaG91cicpXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImVmZmVjdGl2ZUxvY2FsZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImRpc3BsYXlIb3VyKGRyYWZ0KVwiXG4gICAgICAgICAgW21pbl09XCJlZmZlY3RpdmVIb3VyQ3ljbGUgPT09ICdoMTInID8gMSA6IDBcIlxuICAgICAgICAgIFttYXhdPVwiZWZmZWN0aXZlSG91ckN5Y2xlID09PSAnaDEyJyA/IDEyIDogMjNcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgICAgICBbaW52YWxpZF09XCIhIWVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmaWVsZChpLCAnaG91cicsICRldmVudClcIlxuICAgICAgICAgIChjb21wbGV0ZSk9XCJmaW5pc2goKVwiXG4gICAgICAgID48L3drbHktZmllbGQ+XG4gICAgICAgIDx3a2x5LWZpZWxkXG4gICAgICAgICAgW2xhYmVsXT1cInQoJ21pbnV0ZScpXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImVmZmVjdGl2ZUxvY2FsZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImRyYWZ0Lm1pbnV0ZVwiXG4gICAgICAgICAgW21heF09XCI1OVwiXG4gICAgICAgICAgW3N0ZXBdPVwiXG4gICAgICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuTWludXRlU3RlcF0gPiAwICYmXG4gICAgICAgICAgICA2MCAlIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5NaW51dGVTdGVwXSA9PT0gMFxuICAgICAgICAgICAgICA/IHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5NaW51dGVTdGVwXVxuICAgICAgICAgICAgICA6IDFcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgICAgICBbaW52YWxpZF09XCIhIWVycm9ycy5sZW5ndGhcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmaWVsZChpLCAnbWludXRlJywgJGV2ZW50KVwiXG4gICAgICAgICAgKGNvbXBsZXRlKT1cImZpbmlzaCgpXCJcbiAgICAgICAgPjwvd2tseS1maWVsZD5cbiAgICAgICAgPHdrbHktZmllbGRcbiAgICAgICAgICAqbmdJZj1cInRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5TaG93U2Vjb25kc11cIlxuICAgICAgICAgIFtsYWJlbF09XCJ0KCdzZWNvbmQnKVwiXG4gICAgICAgICAgW2xvY2FsZV09XCJlZmZlY3RpdmVMb2NhbGVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJkcmFmdC5zZWNvbmRcIlxuICAgICAgICAgIFttYXhdPVwiNTlcIlxuICAgICAgICAgIFtzdGVwXT1cIlxuICAgICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLlNlY29uZFN0ZXBdID4gMCAmJlxuICAgICAgICAgICAgNjAgJSB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2Vjb25kU3RlcF0gPT09IDBcbiAgICAgICAgICAgICAgPyB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuU2Vjb25kU3RlcF1cbiAgICAgICAgICAgICAgOiAxXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgW2ludmFsaWRdPVwiISFlcnJvcnMubGVuZ3RoXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGQoaSwgJ3NlY29uZCcsICRldmVudClcIlxuICAgICAgICAgIChjb21wbGV0ZSk9XCJmaW5pc2goKVwiXG4gICAgICAgID48L3drbHktZmllbGQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXJpb2RcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBlZmZlY3RpdmVIb3VyQ3ljbGUgPT09ICdoMTInIHx8XG4gICAgICAgICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5Ib3VyQ3ljbGVdID09PSAnc3dpdGNoYWJsZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuRGlzYWJsZWRdXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJcbiAgICAgICAgICAgICAgZWZmZWN0aXZlSG91ckN5Y2xlID09PSAnaDEyJyAmJiAoZHJhZnQuaG91ciB8fCAwKSA8IDEyXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInBlcmlvZChpLCAnYW0nKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdChcImFtXCIpIH19PC9idXR0b25cbiAgICAgICAgICA+PGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIHRoaXNbV2tseVBpY2tlcklucHV0c1Byb3BlcnR5S2V5cy5EaXNhYmxlZF0gfHxcbiAgICAgICAgICAgICAgdGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkhvdXJDeWNsZV0gIT09ICdzd2l0Y2hhYmxlJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJlZmZlY3RpdmVIb3VyQ3ljbGUgPT09ICdoMjQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwZXJpb2QoaSwgJzI0JylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDI0PC9idXR0b25cbiAgICAgICAgICA+PGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgZWZmZWN0aXZlSG91ckN5Y2xlID09PSAnaDEyJyB8fFxuICAgICAgICAgICAgICB0aGlzW1drbHlQaWNrZXJJbnB1dHNQcm9wZXJ0eUtleXMuSG91ckN5Y2xlXSA9PT0gJ3N3aXRjaGFibGUnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpc1tXa2x5UGlja2VySW5wdXRzUHJvcGVydHlLZXlzLkRpc2FibGVkXVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwiXG4gICAgICAgICAgICAgIGVmZmVjdGl2ZUhvdXJDeWNsZSA9PT0gJ2gxMicgJiYgKGRyYWZ0LmhvdXIgfHwgMCkgPj0gMTJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicGVyaW9kKGksICdwbScpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0KFwicG1cIikgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cInZhbGlkYXRpb25cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgPHAgKm5nRm9yPVwibGV0IGVyciBvZiBlcnJvcnNcIj4hIHt7IHQoZXJyLm1lc3NhZ2VLZXkpIH19PC9wPlxuICA8L2Rpdj5cbiAgPGZvb3RlciAqbmdJZj1cInN1Ym1pdFZpc2libGVcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY29uZmlybVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWNhblN1Ym1pdFwiXG4gICAgICAoY2xpY2spPVwic3VibWl0KClcIlxuICAgID5cbiAgICAgIHt7IHQoXCJjb25maXJtXCIpIH19XG4gICAgPC9idXR0b24+XG4gIDwvZm9vdGVyPlxuPC9zZWN0aW9uPlxuIl19