@dereekb/dbx-form 12.0.1 → 12.0.3
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.
- package/esm2022/calendar/lib/calendar.schedule.selection.dialog.component.mjs +2 -2
- package/esm2022/lib/form/io/form.change.directive.mjs +36 -0
- package/esm2022/lib/form/io/form.input.directive.mjs +3 -1
- package/esm2022/lib/form/io/form.io.module.mjs +5 -5
- package/esm2022/lib/form/io/index.mjs +2 -2
- package/esm2022/lib/formly/field/checklist/checklist.item.field.component.mjs +2 -3
- package/esm2022/lib/formly/field/checklist/checklist.item.field.content.default.component.mjs +2 -3
- package/esm2022/lib/formly/field/field.mjs +1 -1
- package/esm2022/lib/formly/field/form.field.module.mjs +6 -7
- package/esm2022/lib/formly/field/selection/selection.module.mjs +14 -7
- package/esm2022/lib/formly/field/value/boolean/boolean.field.module.mjs +9 -6
- package/esm2022/lib/formly/field/value/date/date.field.module.mjs +6 -62
- package/esm2022/lib/formly/field/value/date/datetime.field.component.mjs +46 -20
- package/esm2022/lib/formly/field/value/date/fixeddaterange.field.component.mjs +42 -51
- package/esm2022/lib/formly/field/value/date/index.mjs +3 -1
- package/esm2022/lib/formly/field/value/number/number.field.mjs +3 -3
- package/esm2022/lib/formly/field/value/number/number.field.module.mjs +6 -7
- package/esm2022/lib/formly/field/value/phone/phone.field.component.mjs +16 -9
- package/esm2022/lib/formly/field/value/phone/phone.field.module.mjs +8 -48
- package/esm2022/lib/formly/field/value/text/text.additional.field.mjs +3 -1
- package/esm2022/lib/formly/field/value/text/text.address.field.mjs +1 -1
- package/esm2022/lib/formly/field/value/text/text.field.module.mjs +8 -6
- package/esm2022/lib/formly/field/value/value.module.mjs +15 -8
- package/esm2022/lib/formly/field/wrapper/wrapper.mjs +12 -1
- package/esm2022/lib/formly/form/form.form.mjs +1 -1
- package/esm2022/lib/formly/form/form.form.module.mjs +9 -10
- package/esm2022/lib/formly/form/search.form.component.mjs +14 -18
- package/esm2022/lib/formly/formly.context.directive.mjs +7 -20
- package/esm2022/lib/layout/form.layout.module.mjs +10 -8
- package/esm2022/lib/layout/form.spacer.directive.mjs +20 -0
- package/esm2022/lib/layout/index.mjs +2 -2
- package/esm2022/mapbox/lib/field/latlng/latlng.field.component.mjs +7 -7
- package/esm2022/mapbox/lib/field/zoom/zoom.field.component.mjs +2 -2
- package/esm2022/mapbox/lib/field/zoom/zoom.module.mjs +4 -7
- package/fesm2022/dereekb-dbx-form-calendar.mjs +1 -1
- package/fesm2022/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-form-mapbox.mjs +11 -13
- package/fesm2022/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-form.mjs +321 -366
- package/fesm2022/dereekb-dbx-form.mjs.map +1 -1
- package/lib/form/io/{form.changes.directive.d.ts → form.change.directive.d.ts} +3 -3
- package/lib/form/io/form.io.module.d.ts +3 -3
- package/lib/form/io/index.d.ts +1 -1
- package/lib/formly/field/field.d.ts +1 -1
- package/lib/formly/field/form.field.module.d.ts +7 -8
- package/lib/formly/field/selection/selection.module.d.ts +13 -6
- package/lib/formly/field/value/boolean/boolean.field.module.d.ts +4 -1
- package/lib/formly/field/value/date/date.field.module.d.ts +3 -16
- package/lib/formly/field/value/date/datetime.field.component.d.ts +37 -20
- package/lib/formly/field/value/date/fixeddaterange.field.component.d.ts +27 -25
- package/lib/formly/field/value/date/index.d.ts +2 -0
- package/lib/formly/field/value/number/number.field.d.ts +10 -10
- package/lib/formly/field/value/number/number.field.module.d.ts +1 -2
- package/lib/formly/field/value/phone/phone.field.component.d.ts +4 -4
- package/lib/formly/field/value/phone/phone.field.module.d.ts +2 -12
- package/lib/formly/field/value/text/text.additional.field.d.ts +2 -2
- package/lib/formly/field/value/text/text.address.field.d.ts +11 -11
- package/lib/formly/field/value/text/text.field.module.d.ts +5 -3
- package/lib/formly/field/value/value.module.d.ts +15 -8
- package/lib/formly/form/form.form.d.ts +3 -3
- package/lib/formly/form/form.form.module.d.ts +4 -5
- package/lib/formly/form/search.form.component.d.ts +3 -4
- package/lib/formly/formly.context.directive.d.ts +4 -5
- package/lib/layout/form.layout.module.d.ts +5 -3
- package/lib/layout/form.spacer.directive.d.ts +8 -0
- package/lib/layout/index.d.ts +1 -1
- package/mapbox/lib/field/zoom/zoom.module.d.ts +1 -2
- package/package.json +1 -1
- package/esm2022/lib/form/io/form.changes.directive.mjs +0 -36
- package/esm2022/lib/layout/form.spacer.component.mjs +0 -21
- package/lib/layout/form.spacer.component.d.ts +0 -8
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { isMonthDaySlashDate, MS_IN_MINUTE } from '@dereekb/util';
|
|
2
2
|
import { guessCurrentTimezone, dateTimezoneUtcNormal, isSameDateDayRange, dateRange, isDateInDateRange, clampDateRangeToDateRange, isSameDateRange, isSameDateDay, limitDateTimeInstance, dateTimeMinuteWholeDayDecisionFunction } from '@dereekb/date';
|
|
3
3
|
import { switchMap, shareReplay, map, startWith, distinctUntilChanged, debounceTime, throttleTime, BehaviorSubject, Subject, of, combineLatestWith, filter, combineLatest, scan, first, timer } from 'rxjs';
|
|
4
|
-
import { Component, ElementRef, Injectable,
|
|
5
|
-
import { FormControl, FormGroup } from '@angular/forms';
|
|
4
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Injectable, forwardRef, inject, signal, viewChild } from '@angular/core';
|
|
5
|
+
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
6
6
|
import { FieldType } from '@ngx-formly/material';
|
|
7
|
-
import { MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar } from '@angular/material/datepicker';
|
|
7
|
+
import { MAT_DATE_RANGE_SELECTION_STRATEGY, DateRange as DatePickerDateRange, MatCalendar, MatDatepickerModule } from '@angular/material/datepicker';
|
|
8
8
|
import { asObservableFromGetter, filterMaybe, skipFirstMaybe, SubscriptionObject, switchMapMaybeDefault } from '@dereekb/rxjs';
|
|
9
9
|
import { DbxDateTimeValueMode, dbxDateRangeIsSameDateRangeFieldValue, dbxDateTimeInputValueParseFactory, dbxDateTimeOutputValueFactory } from './date.value';
|
|
10
10
|
import { DbxDateTimeFieldMenuPresetsService } from './datetime.field.service';
|
|
11
11
|
import { DateAdapter } from '@angular/material/core';
|
|
12
12
|
import { isBefore } from 'date-fns';
|
|
13
|
+
import { MatError, MatFormFieldModule } from '@angular/material/form-field';
|
|
14
|
+
import { MatInputModule } from '@angular/material/input';
|
|
15
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
16
|
+
import { NgClass } from '@angular/common';
|
|
13
17
|
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@angular/
|
|
15
|
-
import * as i2 from "@angular/
|
|
16
|
-
import * as i3 from "@angular/
|
|
17
|
-
import * as i4 from "@angular/material/datepicker";
|
|
18
|
-
import * as i5 from "@ngbracket/ngx-layout/extended";
|
|
18
|
+
import * as i1 from "@angular/material/datepicker";
|
|
19
|
+
import * as i2 from "@angular/material/form-field";
|
|
20
|
+
import * as i3 from "@angular/forms";
|
|
19
21
|
function dbxFixedDateRangeInputValueFactory(mode, timezoneInstance) {
|
|
20
22
|
const dateInputTransformer = dbxDateTimeInputValueParseFactory(mode, timezoneInstance);
|
|
21
23
|
return (y) => {
|
|
@@ -45,6 +47,11 @@ function dbxFixedDateRangeOutputValueFactory(mode, timezoneInstance) {
|
|
|
45
47
|
const TIME_OUTPUT_THROTTLE_TIME = 10;
|
|
46
48
|
export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
47
49
|
dbxDateTimeFieldMenuPresetsService = inject(DbxDateTimeFieldMenuPresetsService);
|
|
50
|
+
calendar = viewChild.required(MatCalendar);
|
|
51
|
+
startDateInputElement = viewChild('startDateInput', { read: ElementRef });
|
|
52
|
+
endDateInputElement = viewChild('endDateInput', { read: ElementRef });
|
|
53
|
+
currentDateRangeInputSignal = signal(undefined);
|
|
54
|
+
currentSelectionModeSignal = signal('single');
|
|
48
55
|
_sub = new SubscriptionObject();
|
|
49
56
|
_inputRangeFormSub = new SubscriptionObject();
|
|
50
57
|
_inputRangeFormValueSub = new SubscriptionObject();
|
|
@@ -53,9 +60,6 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
53
60
|
_latestBoundarySub = new SubscriptionObject();
|
|
54
61
|
_disableEndSub = new SubscriptionObject();
|
|
55
62
|
_activeDateSub = new SubscriptionObject();
|
|
56
|
-
_currentDateRangeInput = {};
|
|
57
|
-
_currentSelectionMode = 'single';
|
|
58
|
-
_latestBoundary = null;
|
|
59
63
|
_config = new BehaviorSubject(undefined);
|
|
60
64
|
_selectionMode = new BehaviorSubject(undefined);
|
|
61
65
|
_dateRangeInput = new BehaviorSubject(undefined);
|
|
@@ -65,18 +69,6 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
65
69
|
selectedDateRange$ = this._selectionEvent.pipe(map((x) => x.range));
|
|
66
70
|
_formControlObs = new BehaviorSubject(undefined);
|
|
67
71
|
formControl$ = this._formControlObs.pipe(filterMaybe());
|
|
68
|
-
calendar;
|
|
69
|
-
startDateInputElement;
|
|
70
|
-
endDateInputElement;
|
|
71
|
-
get currentDateRangeInput() {
|
|
72
|
-
return this._currentDateRangeInput;
|
|
73
|
-
}
|
|
74
|
-
get currentSelectionMode() {
|
|
75
|
-
return this._currentSelectionMode;
|
|
76
|
-
}
|
|
77
|
-
get latestBoundary() {
|
|
78
|
-
return this._latestBoundary;
|
|
79
|
-
}
|
|
80
72
|
config$ = this._config.pipe(filterMaybe(), switchMap((x) => x), distinctUntilChanged(), shareReplay(1));
|
|
81
73
|
limitDateTimeInstance$ = this.config$.pipe(map(limitDateTimeInstance), shareReplay(1));
|
|
82
74
|
selectionMode$ = this._selectionMode.pipe(switchMapMaybeDefault('single'), map((x) => x ?? 'single'), distinctUntilChanged(), shareReplay(1));
|
|
@@ -305,6 +297,12 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
305
297
|
}
|
|
306
298
|
}), shareReplay(1));
|
|
307
299
|
defaultPickerFilter = () => true;
|
|
300
|
+
minDateSignal = toSignal(this.min$, { initialValue: null });
|
|
301
|
+
maxDateSignal = toSignal(this.max$, { initialValue: null });
|
|
302
|
+
endDisabledSignal = toSignal(this.endDisabled$);
|
|
303
|
+
latestBoundarySignal = toSignal(this.latestBoundary$);
|
|
304
|
+
calendarSelectionSignal = toSignal(this.calendarSelection$, { initialValue: null });
|
|
305
|
+
pickerFilterSignal = toSignal(this.pickerFilter$, { initialValue: this.defaultPickerFilter });
|
|
308
306
|
ngOnInit() {
|
|
309
307
|
this._formControlObs.next(this.formControl);
|
|
310
308
|
const dateRangeSelection = this.dateRangeSelection$.pipe(shareReplay(1));
|
|
@@ -336,8 +334,8 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
336
334
|
if (this.selectionMode) {
|
|
337
335
|
this._selectionMode.next(asObservableFromGetter(this.selectionMode));
|
|
338
336
|
}
|
|
339
|
-
this._currentSelectionModeSub.subscription = this.selectionMode$.subscribe((x) =>
|
|
340
|
-
this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) =>
|
|
337
|
+
this._currentSelectionModeSub.subscription = this.selectionMode$.subscribe((x) => this.currentSelectionModeSignal.set(x));
|
|
338
|
+
this._dateRangeInputSub.subscription = this.dateRangeInput$.subscribe((x) => this.currentDateRangeInputSignal.set(x));
|
|
341
339
|
this._inputRangeFormSub.subscription = this.valueInSystemTimezone$.subscribe((x) => {
|
|
342
340
|
setInputFormValue(x);
|
|
343
341
|
});
|
|
@@ -346,25 +344,27 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
346
344
|
.pipe(throttleTime(100), // throttle to prevent the value from changing too fast
|
|
347
345
|
switchMap(() => {
|
|
348
346
|
return this.inputRangeForm.valueChanges.pipe(debounceTime(500), filter(() => {
|
|
349
|
-
const startString = this.startDateInputElement
|
|
347
|
+
const startString = this.startDateInputElement()?.nativeElement?.value;
|
|
350
348
|
let valid = isMonthDaySlashDate(startString);
|
|
351
|
-
if (valid && this.
|
|
352
|
-
const endString = this.endDateInputElement
|
|
349
|
+
if (valid && this.currentSelectionModeSignal() !== 'single') {
|
|
350
|
+
const endString = this.endDateInputElement()?.nativeElement?.value;
|
|
353
351
|
valid = isMonthDaySlashDate(endString);
|
|
354
352
|
}
|
|
355
353
|
return valid; // must be a valid text input
|
|
356
354
|
}), map((x) => x));
|
|
357
355
|
}), distinctUntilChanged(isSameDateRange))
|
|
358
356
|
.subscribe((x) => {
|
|
359
|
-
|
|
357
|
+
const currentSelectionMode = this.currentSelectionModeSignal();
|
|
358
|
+
if (currentSelectionMode === 'single') {
|
|
360
359
|
this.setDateRange(x?.start ? { start: x.start } : null, 'input');
|
|
361
360
|
}
|
|
362
361
|
else {
|
|
363
362
|
let rangeToSet = x;
|
|
364
|
-
|
|
365
|
-
|
|
363
|
+
const latestBoundary = this.latestBoundarySignal();
|
|
364
|
+
if (currentSelectionMode === 'arbitrary_quick' && latestBoundary && x?.start && x?.end) {
|
|
365
|
+
if (!isDateInDateRange(x.start, latestBoundary)) {
|
|
366
366
|
// if the end date it outside of the current range (i.e. a range was typed in only to the start date) then set the end to the boundary end
|
|
367
|
-
const boundary = dateRange({ ...this.
|
|
367
|
+
const boundary = dateRange({ ...this.currentDateRangeInputSignal(), date: x.start });
|
|
368
368
|
rangeToSet = { start: x.start, end: boundary.end };
|
|
369
369
|
}
|
|
370
370
|
}
|
|
@@ -372,7 +372,6 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
372
372
|
}
|
|
373
373
|
});
|
|
374
374
|
}
|
|
375
|
-
this._latestBoundarySub.subscription = this.latestBoundary$.subscribe((x) => (this._latestBoundary = x));
|
|
376
375
|
this._dateRangeInput.next(asObservableFromGetter(this.fixedDateRangeField.dateRangeInput));
|
|
377
376
|
this._disableEndSub.subscription = this.endDisabled$.subscribe((disabled) => {
|
|
378
377
|
const end = this.inputRangeForm.get('end');
|
|
@@ -418,7 +417,7 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
418
417
|
this._presets.next(this.dbxDateTimeFieldMenuPresetsService.configurations$);
|
|
419
418
|
}
|
|
420
419
|
this._activeDateSub.subscription = this.calendarFocusDate$.subscribe((x) => {
|
|
421
|
-
this.calendar.activeDate = x;
|
|
420
|
+
this.calendar().activeDate = x;
|
|
422
421
|
});
|
|
423
422
|
}
|
|
424
423
|
ngOnDestroy() {
|
|
@@ -446,15 +445,15 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
446
445
|
this._selectionEvent.next({ type, range });
|
|
447
446
|
}
|
|
448
447
|
_createDateRange(date) {
|
|
449
|
-
return date ? dateRange({ ...this.
|
|
448
|
+
return date ? dateRange({ ...this.currentDateRangeInputSignal(), date }) : undefined;
|
|
450
449
|
}
|
|
451
450
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFixedDateRangeFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
452
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
451
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFixedDateRangeFieldComponent, isStandalone: true, selector: "ng-component", providers: [
|
|
453
452
|
{
|
|
454
453
|
provide: MAT_DATE_RANGE_SELECTION_STRATEGY,
|
|
455
454
|
useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)
|
|
456
455
|
}
|
|
457
|
-
], viewQueries: [{ propertyName: "calendar", first: true, predicate: MatCalendar, descendants: true }, { propertyName: "startDateInputElement", first: true, predicate: ["startDateInput"], descendants: true, read: ElementRef }, { propertyName: "endDateInputElement", first: true, predicate: ["endDateInput"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"
|
|
456
|
+
], viewQueries: [{ propertyName: "calendar", first: true, predicate: MatCalendar, descendants: true, isSignal: true }, { propertyName: "startDateInputElement", first: true, predicate: ["startDateInput"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "endDateInputElement", first: true, predicate: ["endDateInput"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelectionSignal()\" [dateFilter]=\"pickerFilterSignal()\" [minDate]=\"minDateSignal()\" [maxDate]=\"maxDateSignal()\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n @if (showRangeInput) {\n <mat-date-range-input [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"endDisabledSignal() ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"endDisabledSignal() ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n }\n </mat-form-field>\n @if (formControl.hasError('required')) {\n <mat-error>Date range is required</mat-error>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "component", type: i1.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i1.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i1.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
458
457
|
}
|
|
459
458
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFixedDateRangeFieldComponent, decorators: [{
|
|
460
459
|
type: Component,
|
|
@@ -463,17 +462,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
463
462
|
provide: MAT_DATE_RANGE_SELECTION_STRATEGY,
|
|
464
463
|
useClass: forwardRef(() => DbxFixedDateRangeFieldSelectionStrategy)
|
|
465
464
|
}
|
|
466
|
-
], template: "<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"
|
|
467
|
-
}]
|
|
468
|
-
type: ViewChild,
|
|
469
|
-
args: [MatCalendar]
|
|
470
|
-
}], startDateInputElement: [{
|
|
471
|
-
type: ViewChild,
|
|
472
|
-
args: ['startDateInput', { read: ElementRef }]
|
|
473
|
-
}], endDateInputElement: [{
|
|
474
|
-
type: ViewChild,
|
|
475
|
-
args: ['endDateInput', { read: ElementRef }]
|
|
476
|
-
}] } });
|
|
465
|
+
], imports: [MatDatepickerModule, MatFormFieldModule, FormsModule, ReactiveFormsModule, MatInputModule, MatError, NgClass], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"dbx-fixeddaterange-field\">\n <mat-calendar #calendarView [selected]=\"calendarSelectionSignal()\" [dateFilter]=\"pickerFilterSignal()\" [minDate]=\"minDateSignal()\" [maxDate]=\"maxDateSignal()\" (selectedChange)=\"selectedChange($event)\"></mat-calendar>\n <mat-form-field class=\"dbx-fixeddaterange-field-input\" appearance=\"fill\">\n @if (showRangeInput) {\n <mat-date-range-input [formGroup]=\"inputRangeForm\">\n <input #startDateInput matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input #endDateInput [ngClass]=\"endDisabledSignal() ? 'dbx-fixeddaterange-field-input-end' : ''\" [attr.tabindex]=\"endDisabledSignal() ? -1 : 0\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n }\n </mat-form-field>\n @if (formControl.hasError('required')) {\n <mat-error>Date range is required</mat-error>\n }\n</div>\n" }]
|
|
466
|
+
}] });
|
|
477
467
|
export class DbxFixedDateRangeFieldSelectionStrategy {
|
|
478
468
|
_dateAdapter = inject((DateAdapter));
|
|
479
469
|
dbxFixedDateRangeFieldComponent = inject(DbxFixedDateRangeFieldComponent);
|
|
@@ -482,9 +472,10 @@ export class DbxFixedDateRangeFieldSelectionStrategy {
|
|
|
482
472
|
return currentRange;
|
|
483
473
|
}
|
|
484
474
|
createPreview(activeDate, currentRange, event) {
|
|
485
|
-
const {
|
|
475
|
+
const { currentSelectionModeSignal, latestBoundarySignal } = this.dbxFixedDateRangeFieldComponent;
|
|
476
|
+
const currentSelectionMode = currentSelectionModeSignal();
|
|
486
477
|
if (activeDate != null && currentSelectionMode !== 'single') {
|
|
487
|
-
const latestBoundary =
|
|
478
|
+
const latestBoundary = latestBoundarySignal();
|
|
488
479
|
const date = this.dateFromAdapterDate(activeDate);
|
|
489
480
|
if (latestBoundary && (currentSelectionMode === 'normal' || isDateInDateRange(date, latestBoundary))) {
|
|
490
481
|
const exampleDateRange = this._createDateRange(latestBoundary);
|
|
@@ -527,4 +518,4 @@ export class DbxFixedDateRangeFieldSelectionStrategy {
|
|
|
527
518
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFixedDateRangeFieldSelectionStrategy, decorators: [{
|
|
528
519
|
type: Injectable
|
|
529
520
|
}] });
|
|
530
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9maXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBK0gsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9MLE9BQU8sRUFBRSxvQkFBb0IsRUFBaUMscUJBQXFCLEVBQTZCLGtCQUFrQixFQUF3RCxTQUFTLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4VyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4TixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQXFCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVB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QUFDO1FBQ2hILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLG1CQUFtQixDQUFJLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQVE7UUFDMUIsTUFBTSxHQUFHLEdBQWUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsTUFBTSxVQUFVLEdBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsTUFBTSxJQUFJLEdBQWUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFVO1FBQzVCLE1BQU0sR0FBRyxHQUFlLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBYyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEdBQWUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RCxDQUFDO3dHQXhEVSx1Q0FBdUM7NEdBQXZDLHVDQUF1Qzs7NEZBQXZDLHVDQUF1QztrQkFEbkQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgTWF5YmUsIHR5cGUgRGVjaXNpb25GdW5jdGlvbiwgdHlwZSBNaWxsaXNlY29uZHMsIHR5cGUgVGltZXpvbmVTdHJpbmcsIHR5cGUgRGF0ZU1vbnRoLCB0eXBlIERheU9mTW9udGgsIHR5cGUgWWVhck51bWJlciwgaXNNb250aERheVNsYXNoRGF0ZSwgTVNfSU5fTUlOVVRFIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBndWVzc0N1cnJlbnRUaW1lem9uZSwgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsIGRhdGVUaW1lem9uZVV0Y05vcm1hbCwgRGF0ZVJhbmdlSW5wdXQsIERhdGVSYW5nZSwgaXNTYW1lRGF0ZURheVJhbmdlLCBEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWUsIERhdGVUaW1lTWludXRlQ29uZmlnLCBkYXRlUmFuZ2UsIGlzRGF0ZUluRGF0ZVJhbmdlLCBjbGFtcERhdGVSYW5nZVRvRGF0ZVJhbmdlLCBpc1NhbWVEYXRlUmFuZ2UsIGlzU2FtZURhdGVEYXksIGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSwgZGF0ZVRpbWVNaW51dGVXaG9sZURheURlY2lzaW9uRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgc2hhcmVSZXBsYXksIG1hcCwgc3RhcnRXaXRoLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZGVib3VuY2VUaW1lLCB0aHJvdHRsZVRpbWUsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YsIGNvbWJpbmVMYXRlc3RXaXRoLCBmaWx0ZXIsIGNvbWJpbmVMYXRlc3QsIHNjYW4sIGZpcnN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcbmltcG9ydCB7IEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZVJhbmdlU2VsZWN0aW9uU3RyYXRlZ3ksIE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSwgRGF0ZVJhbmdlIGFzIERhdGVQaWNrZXJEYXRlUmFuZ2UsIE1hdENhbGVuZGFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBhc09ic2VydmFibGVGcm9tR2V0dGVyLCBmaWx0ZXJNYXliZSwgT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXIsIHNraXBGaXJzdE1heWJlLCBTdWJzY3JpcHRpb25PYmplY3QsIHN3aXRjaE1hcE1heWJlRGVmYXVsdCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIGRieERhdGVSYW5nZUlzU2FtZURhdGVSYW5nZUZpZWxkVmFsdWUsIGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeSwgZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkgfSBmcm9tICcuL2RhdGUudmFsdWUnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9kYXRldGltZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRldGltZS5maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBpc0JlZm9yZSB9IGZyb20gJ2RhdGUtZm5zJztcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dCA9IE9taXQ8RGF0ZVJhbmdlSW5wdXQsICdkYXRlJz47XG5cbmV4cG9ydCB0eXBlIERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbiA9IE9taXQ8RGF0ZVRpbWVNaW51dGVDb25maWcsICdkYXRlJz47XG5cbmV4cG9ydCB0eXBlIERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnIHwgJ25vcm1hbCcgfCAnYXJiaXRyYXJ5JyB8ICdhcmJpdHJhcnlfcXVpY2snO1xuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VQaWNraW5nID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICAvKipcbiAgICogRGF0ZSByYW5nZSBpbnB1dCB0byBidWlsZCB0aGUgZGF0ZSByYW5nZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGVSYW5nZUlucHV0OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0PjtcblxuICAvKipcbiAgICogU2VsZWN0aW9uIG1vZGUgdG8gdXNlIHdoZW4gcGlja2luZyBkYXRlcyBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rpb25Nb2RlPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPj47XG5cbiAgLyoqXG4gICAqIFZhbHVlIG1vZGUgZm9yIHRoZSBkYXRlcyBpbiB0aGUgb3V0cHV0IERhdGVSYW5nZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gREFURVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVNb2RlPzogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHBhc3MgdGhlIGRhdGUgdmFsdWUgYXMgYSBVVEMgZGF0ZSwgb3IgYSBkYXRlIGluIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVsbERheUluVVRDPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHBpY2tlciBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBwaWNrZXJDb25maWc/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBpbnB1dCB0aW1lem9uZSB0byBkZWZhdWx0IHRvLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGZ1bGxEYXlJblVUQyBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZXpvbmU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxUaW1lem9uZVN0cmluZz4+PjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgdGltZXpvbmUuIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dUaW1lem9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwcmVzZXRzIHRvIHNob3cgaW4gdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlc2V0cz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgcmFuZ2UgaW5wdXQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBzaG93UmFuZ2VJbnB1dD86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGRieEZpeGVkRGF0ZVJhbmdlSW5wdXRWYWx1ZUZhY3RvcnkobW9kZTogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2U6IE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPik6IChpbnB1dDogTWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPikgPT4gTWF5YmU8RGF0ZVJhbmdlPiB7XG4gIGNvbnN0IGRhdGVJbnB1dFRyYW5zZm9ybWVyID0gZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KG1vZGUsIHRpbWV6b25lSW5zdGFuY2UpO1xuXG4gIHJldHVybiAoeSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGVSYW5nZT47XG5cbiAgICBpZiAoeSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBzdGFydDogZGF0ZUlucHV0VHJhbnNmb3JtZXIoeS5zdGFydCkgYXMgRGF0ZSxcbiAgICAgICAgZW5kOiBkYXRlSW5wdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGRhdGU6IE1heWJlPERhdGVSYW5nZT4pID0+IE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4ge1xuICBjb25zdCBkYXRlT3V0cHV0VHJhbnNmb3JtZXIgPSBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlLCB0aW1lem9uZUluc3RhbmNlKTtcblxuICByZXR1cm4gKHkpID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKHkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgc3RhcnQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LnN0YXJ0KSBhcyBEYXRlLFxuICAgICAgICBlbmQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5jb25zdCBUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FOiBNaWxsaXNlY29uZHMgPSAxMDtcblxuZXhwb3J0IHR5cGUgRml4ZWREYXRlUmFuZ2VTY2FuVHlwZSA9ICdzdGFydCcgfCAnZW5kJyB8ICdzdGFydFJlcGVhdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRml4ZWREYXRlUmFuZ2VTY2FuIHtcbiAgLyoqXG4gICAqIFBpY2tlZCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByYW5nZSBvbiB0aGUgbGFzdCBwaWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdFBpY2tUeXBlPzogTWF5YmU8Rml4ZWREYXRlUmFuZ2VTY2FuVHlwZT47XG4gIC8qKlxuICAgKiBUaGUgbGF0ZXN0IGRhdGUgcGFzc2VkLCBpZiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdERhdGVSYW5nZT86IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj47XG4gIC8qKlxuICAgKiBUaGUgZ2VuZXJhdGVkIGJvdW5kYXJ5IHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgYm91bmRhcnk/OiBEYXRlUmFuZ2U7XG4gIC8qKlxuICAgKiBOZXcgRGF0ZSBSYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgcmFuZ2U/OiBEYXRlUmFuZ2U7XG59XG5cbnR5cGUgU2VsZWN0ZWREYXRlRXZlbnRUeXBlID0gJ2NhbGVuZGFyJyB8ICdpbnB1dCc7XG5cbmludGVyZmFjZSBTZWxlY3RlZERhdGVFdmVudCB7XG4gIHR5cGU6IFNlbGVjdGVkRGF0ZUV2ZW50VHlwZTtcbiAgcmFuZ2U/OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdmaXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZUNsYXNzOiBmb3J3YXJkUmVmKCgpID0+IERieEZpeGVkRGF0ZVJhbmdlRmllbGRTZWxlY3Rpb25TdHJhdGVneSlcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8RGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSA9IGluamVjdChEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlKTtcblxuICBwcml2YXRlIF9zdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfaW5wdXRSYW5nZUZvcm1TdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfZGF0ZVJhbmdlSW5wdXRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2N1cnJlbnRTZWxlY3Rpb25Nb2RlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9sYXRlc3RCb3VuZGFyeVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfZGlzYWJsZUVuZFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfYWN0aXZlRGF0ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9jdXJyZW50RGF0ZVJhbmdlSW5wdXQ6IE1heWJlPERieEZpeGVkRGF0ZVJhbmdlRGF0ZVJhbmdlSW5wdXQ+ID0ge307XG4gIHByaXZhdGUgX2N1cnJlbnRTZWxlY3Rpb25Nb2RlOiBEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGUgPSAnc2luZ2xlJztcbiAgcHJpdmF0ZSBfbGF0ZXN0Qm91bmRhcnk6IE1heWJlPERhdGVSYW5nZT4gPSBudWxsO1xuXG4gIHByaXZhdGUgX2NvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfZGF0ZVJhbmdlSW5wdXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD4+Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX3RpbWV6b25lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9wcmVzZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPj4ob2YoW10pKTtcblxuICBwcml2YXRlIF9zZWxlY3Rpb25FdmVudCA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkRGF0ZUV2ZW50PigpO1xuICByZWFkb25seSBzZWxlY3RlZERhdGVSYW5nZSQ6IE9ic2VydmFibGU8TWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pj4gPSB0aGlzLl9zZWxlY3Rpb25FdmVudC5waXBlKG1hcCgoeCkgPT4geC5yYW5nZSkpO1xuXG4gIHByaXZhdGUgX2Zvcm1Db250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8TWF5YmU8RGF0ZVJhbmdlPj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIEBWaWV3Q2hpbGQoTWF0Q2FsZW5kYXIpXG4gIGNhbGVuZGFyITogTWF0Q2FsZW5kYXI8RGF0ZT47XG5cbiAgQFZpZXdDaGlsZCgnc3RhcnREYXRlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc3RhcnREYXRlSW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdlbmREYXRlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgZW5kRGF0ZUlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgZ2V0IGN1cnJlbnREYXRlUmFuZ2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudERhdGVSYW5nZUlucHV0O1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZTtcbiAgfVxuXG4gIGdldCBsYXRlc3RCb3VuZGFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGF0ZXN0Qm91bmRhcnk7XG4gIH1cblxuICByZWFkb25seSBjb25maWckOiBPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbj4gPSB0aGlzLl9jb25maWcucGlwZShcbiAgICBmaWx0ZXJNYXliZSgpLFxuICAgIHN3aXRjaE1hcCgoeCkgPT4geCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSQgPSB0aGlzLmNvbmZpZyQucGlwZShtYXAobGltaXREYXRlVGltZUluc3RhbmNlKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvbk1vZGUkOiBPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4gPSB0aGlzLl9zZWxlY3Rpb25Nb2RlLnBpcGUoXG4gICAgc3dpdGNoTWFwTWF5YmVEZWZhdWx0PERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4oJ3NpbmdsZScpLFxuICAgIG1hcCgoeCkgPT4geCA/PyAnc2luZ2xlJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZUlucHV0JCA9IHRoaXMuX2RhdGVSYW5nZUlucHV0LnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSB0aW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+PiA9IHRoaXMuX3RpbWV6b25lLnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnBpcGUoXG4gICAgbWFwKChkZWZhdWx0VGltZXpvbmUpID0+IHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltZXpvbmUgPz8gZ3Vlc3NDdXJyZW50VGltZXpvbmUoKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+PiA9IHRoaXMudGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh0aW1lem9uZSkgPT4gKHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZhbHVlSW5TeXN0ZW1UaW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIG1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGg8TWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPj4oY29udHJvbC52YWx1ZSksIHNoYXJlUmVwbGF5KDEpKSksXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy50aW1lem9uZUluc3RhbmNlJCksXG4gICAgc3dpdGNoTWFwKChbeCwgdGltZXpvbmVJbnN0YW5jZV0pID0+IHtcbiAgICAgIHJldHVybiB4LnBpcGUobWFwKGRieEZpeGVkRGF0ZVJhbmdlSW5wdXRWYWx1ZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKSk7XG4gICAgfSksXG4gICAgdGhyb3R0bGVUaW1lKDIwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLCAvLyB0aHJvdHRsZSBpbmNvbWluZyB2YWx1ZXMgYW5kIHRpbWV6b25lIGNoYW5nZXNcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlUmFuZ2U+Pihpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgZGF0ZVJhbmdlU2VsZWN0aW9uRm9yTW9kZShtb2RlOiBEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGUpIHtcbiAgICBjb25zdCByZXN1bHQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGVSYW5nZUlucHV0JCwgdGhpcy5saW1pdERhdGVUaW1lSW5zdGFuY2UkXSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoW2RhdGVSYW5nZUlucHV0LCBsaW1pdEluc3RhbmNlXSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNEYXRlUmFuZ2VDb25maWd1cmF0aW9uID0gQm9vbGVhbihkYXRlUmFuZ2VJbnB1dCk7XG4gICAgICAgIGNvbnN0IG1pbk1heENsYW1wID0gKGRhdGVSYW5nZTogRGF0ZVJhbmdlKSA9PiBsaW1pdEluc3RhbmNlLmNsYW1wRGF0ZVJhbmdlKGRhdGVSYW5nZSk7XG5cbiAgICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgLy8gb25seSB1c2UgdGhlIHN0YXJ0IGRhdGUuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UkLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgICAgICAgICAgbWFwKChpbnB1dERhdGVSYW5nZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gaW5wdXREYXRlUmFuZ2U/LnN0YXJ0O1xuICAgICAgICAgICAgICByZXR1cm4gZGF0ZSA/IChtaW5NYXhDbGFtcChkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZSB9IGFzIERhdGVSYW5nZUlucHV0KSkgYXMgRGF0ZVJhbmdlKSA6IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdGFrZSB0aGUgZmlyc3QgZGF0ZSwgdGhlbiB3YWl0IHVubGVzcyB0aGUgZGF0ZSBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZS5cbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVSYW5nZSQucGlwZShcbiAgICAgICAgICAgIHNjYW4oKGFjYzogRml4ZWREYXRlUmFuZ2VTY2FuLCBuZXh0RGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHQ6IEZpeGVkRGF0ZVJhbmdlU2NhbjtcbiAgICAgICAgICAgICAgbGV0IHBpY2tUeXBlOiBNYXliZTxGaXhlZERhdGVSYW5nZVNjYW5UeXBlPiA9ICdzdGFydCc7XG5cbiAgICAgICAgICAgICAgaWYgKG5leHREYXRlUmFuZ2UgJiYgbmV4dERhdGVSYW5nZS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydDogc3RhcnRPck5leHREYXRlLCBlbmQgfSA9IG5leHREYXRlUmFuZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcG90ZW50aWFsQm91bmRhcnkgPSBkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZTogc3RhcnRPck5leHREYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpO1xuXG4gICAgICAgICAgICAgICAgLy8gb25seSBjb21lcyB0aHJvdWdoIHdoZW4gcGFzc2VkIGJ5IHRoZSB0ZXh0IGlucHV0c1xuICAgICAgICAgICAgICAgIGlmIChzdGFydE9yTmV4dERhdGUgJiYgZW5kKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNsYW1wRGF0ZVJhbmdlVG9EYXRlUmFuZ2UobmV4dERhdGVSYW5nZSwgcG90ZW50aWFsQm91bmRhcnkpIGFzIERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRhcnk6IHJhbmdlLFxuICAgICAgICAgICAgICAgICAgICByYW5nZVxuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgLy8gZm9yIG5vcm1hbCBtb2RlIHdlIHdhbnQgdG8gcHJvdGVjdCBhZ2FpbnN0IFwic3RhcnRcIiBiZWluZyBpbnB1dCwgdGhlbiB0aGUgb3V0cHV0IGJlaW5nIHBhc3NlZCxcbiAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIHRoZSBuZXh0IGNsaWNrIGJlaW5nIHRyZWF0ZWQgYXMgYW5vdGhlciBcInN0YXJ0XCIgaW5zdGVhZCBvZiBhbiBcImVuZFwiLlxuICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdub3JtYWwnICYmIGFjYy5sYXN0UGlja1R5cGUgPT09ICdzdGFydCcgJiYgaXNTYW1lRGF0ZURheShzdGFydE9yTmV4dERhdGUsIGVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZURhdGVEYXkoc3RhcnRPck5leHREYXRlLCBhY2MubGFzdERhdGVSYW5nZT8uc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGlja1R5cGUgPSAnc3RhcnRSZXBlYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxldCByYW5nZTogTWF5YmU8RGF0ZVJhbmdlPiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGxldCBib3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNEYXRlUmFuZ2VDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29uZmlndXJlZCByYW5nZS9ib3VuZGFyeSwgdGhlbiBqdXN0IHNldCB0aGUgcGljayB0eXBlIGJhc2VkIG9uIHRoZSBsYXN0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICBwaWNrVHlwZSA9IGFjYy5sYXN0UGlja1R5cGUgPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjLmxhc3RQaWNrVHlwZSA9PT0gJ3N0YXJ0UmVwZWF0Jykge1xuICAgICAgICAgICAgICAgICAgICAgIHBpY2tUeXBlID0gJ2VuZCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBpY2sgaXMgb3V0c2lkZSB0aGUgYm91bmRhcnksIHRoZW4gY29uc2lkZXIgaXQgYSBzdGFydCBwaWNrIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgcGlja1R5cGUgPSBhY2MubGFzdFBpY2tUeXBlID09PSAnc3RhcnQnICYmIGFjYy5ib3VuZGFyeSAmJiBpc0RhdGVJbkRhdGVSYW5nZShzdGFydE9yTmV4dERhdGUsIGFjYy5ib3VuZGFyeSkgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyByZWFjdCBiYXNlZCBvbiBob3cgdGhpc1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBpY2tUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RTdGFydCA9IGFjYy5sYXN0RGF0ZVJhbmdlPy5zdGFydCBhcyBEYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYm91bmRhcnlUb0NoZWNrOiBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Jc0JlZm9yZVByZXZpb3VzU2VsZWN0aW9uID0gIWxhc3RTdGFydCB8fCBpc0JlZm9yZShzdGFydE9yTmV4dERhdGUsIGxhc3RTdGFydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0U3RhcnQ6IERhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEVuZDogRGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbklzQmVmb3JlUHJldmlvdXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXJ0ID0gc3RhcnRPck5leHREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kID0gbGFzdFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeVRvQ2hlY2sgPSBwb3RlbnRpYWxCb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGFydCA9IGxhc3RTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZCA9IHN0YXJ0T3JOZXh0RGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnlUb0NoZWNrID0gZGF0ZVJhbmdlKHsgLi4uZGF0ZVJhbmdlSW5wdXQsIGRhdGU6IG5leHRTdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIGJvdW5kYXJ5IHVzaW5nIHRoZSBuZXh0IHN0YXJ0IGRhdGUuIElmIGl0IGlzIG91dHNpZGUgdGhlIHNlbGVjdGFibGUgcmFuZ2UsIHRoZW4gaXQgYmVjb21lcyBhIFwic3RhcnRcIiBwaWNrIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUoYm91bmRhcnlUb0NoZWNrLmVuZCwgbmV4dEVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQWxsb3cgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIHRvIGZpbGwgdGhlIGVudGlyZSByYW5nZSBpbnN0ZWFkIG9mIGp1c3QgcmVzZXR0aW5nIGl0IGVudGlyZWx5XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXJ0ID0gc3RhcnRPck5leHREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kID0gc3RhcnRPck5leHREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrVHlwZSA9ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gYm91bmRhcnlUb0NoZWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkgPSByYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgcGlja2luZyB0aGUgZW5kIHRoZW4gc2V0IHRoZSByYW5nZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogbmV4dFN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5leHRFbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRhaW4gdGhlIGJvdW5kYXJ5IGFzIHBvdGVudGlhbCBib3VuZGFyeSwgYW5kIHNldCBvdXIgbmV3IHJhbmdlIGZyb20gdGhlIHNpbmdsZSBkYXRlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydE9yTmV4dERhdGUgYXMgRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBzdGFydE9yTmV4dERhdGUgYXMgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjYy5ib3VuZGFyeSAmJiBpc0RhdGVJbkRhdGVSYW5nZShzdGFydE9yTmV4dERhdGUsIGFjYy5ib3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgaW4gdGhlIGRhdGUgcmFuZ2UsIHVzZXMgdGhlIHBpY2sgYXMgdGhlIGxhc3QgZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGFjYy5ib3VuZGFyeS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHN0YXJ0T3JOZXh0RGF0ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZGlmeSBib3VuZGFyeSB0byBtYXRjaCByYW5nZVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NhbWVEYXRlUmFuZ2UoYWNjLnJhbmdlLCByYW5nZSkgJiYgaXNTYW1lRGF0ZURheShyYW5nZS5lbmQsIHN0YXJ0T3JOZXh0RGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGNsaWNrZWQgb24gdGhlIGVuZCByYW5nZSwgdGhlbiBleHBhbmQgdGhlIGJvdW5kYXJ5IGFnYWluIHRvIHRoZSBmdWxsIHJhbmdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZTogcmFuZ2Uuc3RhcnQgfSBhcyBEYXRlUmFuZ2VJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyByZXRhaW4gc2FtZSBib3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gYWNjLmJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gcG90ZW50aWFsQm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiBuZXh0RGF0ZVJhbmdlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0UGlja1R5cGU6IHBpY2tUeXBlLFxuICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogcmVzdWx0Lmxhc3REYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICBib3VuZGFyeTogcmVzdWx0LmJvdW5kYXJ5ID8gKG1pbk1heENsYW1wKHJlc3VsdC5ib3VuZGFyeSkgYXMgRGF0ZVJhbmdlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHJhbmdlOiByZXN1bHQucmFuZ2UgPyAobWluTWF4Q2xhbXAocmVzdWx0LnJhbmdlKSBhcyBEYXRlUmFuZ2UpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICF4Lmxhc3REYXRlUmFuZ2UgfHwgeC5yYW5nZSAhPSBudWxsKSwgLy8gcGFzcyB0aHJvdWdoIG51bGwvZGF0ZSBjbGVhcmluZ3Mgb3IgcmFuZ2VzXG4gICAgICAgICAgICBtYXAoKHgpID0+IHgucmFuZ2UgPz8gbnVsbCkgLy8gcmV0dXJuIHRoZSByYW5nZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkb25seSBmdWxsQm91bmRhcnkkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5kYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKCdzaW5nbGUnKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgbGF0ZXN0Qm91bmRhcnkkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobW9kZSkgPT4ge1xuICAgICAgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgIC8vIGluIGFyYml0cmFyeV9xdWljayBtb2RlLCB0aGUgbGF0ZXN0IHZhbHVlIGlzIHRoZSBib3VuZGFyeSwgc2luY2Ugd2UgYWx3YXlzIHNldCB0aGUgdmFsdWUgaW1tZWRpYXRlbHkuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5mdWxsQm91bmRhcnkkO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgb24gdGhlIGRhdGUgYW55IHRpbWUgdGhlIHNlbGVjdGlvbiBldmVudCBmcm9tIHRoZSBwaWNrZXIgb2NjdXJlZCwgb3RoZXJ3aXNlIHVzZSB0aGUgc3lzdGVtIHZhbHVlXG4gICAqL1xuICByZWFkb25seSBjYWxlbmRhckZvY3VzRGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT4gPSB0aGlzLl9zZWxlY3Rpb25FdmVudC5waXBlKHN0YXJ0V2l0aChudWxsKSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKHNlbGVjdGlvbkV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2VsZWN0aW9uRXZlbnQgJiYgc2VsZWN0aW9uRXZlbnQudHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBzZWxlY3Rpb25FdmVudC5yYW5nZT8uc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIG9mKHNlbGVjdGlvbkV2ZW50LnJhbmdlLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxCb3VuZGFyeSQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoZnVsbEJvdW5kYXJ5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVsbEJvdW5kYXJ5Py5zdGFydCA/PyBzZWxlY3Rpb25FdmVudD8ucmFuZ2U/LnN0YXJ0O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZVNlbGVjdGlvbiQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoc3dpdGNoTWFwKChtb2RlKSA9PiB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUobW9kZSkpKTtcblxuICByZWFkb25seSBjYWxlbmRhclNlbGVjdGlvbiQ6IE9ic2VydmFibGU8RGF0ZVBpY2tlckRhdGVSYW5nZTxEYXRlPiB8IG51bGw+ID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeCA/IG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPERhdGU+KHguc3RhcnQsIHguZW5kKSA6IG51bGwpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVuZERpc2FibGVkJCA9IHRoaXMuc2VsZWN0aW9uTW9kZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHggPT09ICdzaW5nbGUnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRSYW5nZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbClcbiAgfSk7XG5cbiAgZ2V0IGZpeGVkRGF0ZVJhbmdlRmllbGQoKTogRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcztcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNlbGVjdGlvbk1vZGU7XG4gIH1cblxuICBnZXQgdmFsdWVNb2RlKCk6IERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy52YWx1ZU1vZGUgPz8gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTtcbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCB0aW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy50aW1lem9uZTtcbiAgfVxuXG4gIGdldCBzaG93VGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2hvd1RpbWV6b25lID8/IHRydWU7XG4gIH1cblxuICBnZXQgcHJlc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5wcmVzZXRzO1xuICB9XG5cbiAgZ2V0IHNob3dSYW5nZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNob3dSYW5nZUlucHV0ID8/IHRydWU7XG4gIH1cblxuICByZWFkb25seSBtaW5NYXhSYW5nZSQgPSB0aGlzLmxpbWl0RGF0ZVRpbWVJbnN0YW5jZSQucGlwZShcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aW1lcihNU19JTl9NSU5VVEUpKSwgLy8gcmVmcmVzaCBldmVyeSBtaW51dGVcbiAgICBtYXAoKFt4XSkgPT4geC5kYXRlUmFuZ2UoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1pbiQgPSB0aGlzLm1pbk1heFJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uc3RhcnQgPz8gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1heCQgPSB0aGlzLm1pbk1heFJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZW5kID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwaWNrZXJGaWx0ZXIkOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+PiA9IHRoaXMuY29uZmlnJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBkYXRlVGltZU1pbnV0ZVdob2xlRGF5RGVjaXNpb25GdW5jdGlvbih4LCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeDogRGF0ZSB8IG51bGwpID0+ICh4ICE9IG51bGwgPyBmaWx0ZXIoeCkgOiB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFBpY2tlckZpbHRlcjogRGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4gPSAoKSA9PiB0cnVlO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLm5leHQodGhpcy5mb3JtQ29udHJvbCk7XG5cbiAgICBjb25zdCBkYXRlUmFuZ2VTZWxlY3Rpb24gPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbiQucGlwZShzaGFyZVJlcGxheSgxKSk7XG5cbiAgICBjb25zdCBzZXRJbnB1dEZvcm1WYWx1ZSA9ICh2YWx1ZTogTWF5YmU8RGF0ZVJhbmdlPikgPT4ge1xuICAgICAgaWYgKCFpc1NhbWVEYXRlRGF5UmFuZ2UodmFsdWUsIHRoaXMuaW5wdXRSYW5nZUZvcm0udmFsdWUgYXMgUGFydGlhbDxEYXRlUmFuZ2U+KSkge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLnNldFZhbHVlKHtcbiAgICAgICAgICBzdGFydDogdmFsdWU/LnN0YXJ0ID8/IG51bGwsXG4gICAgICAgICAgZW5kOiB2YWx1ZT8uZW5kID8/IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX3N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkLnBpcGUobWFwKCh0aW1lem9uZUluc3RhbmNlKSA9PiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKSksXG4gICAgICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtjdXJyZW50VmFsdWUsIHZhbHVlRmFjdG9yeV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZGF0ZVJhbmdlU2VsZWN0aW9uLnBpcGUoXG4gICAgICAgICAgICBza2lwRmlyc3RNYXliZSgpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8RGF0ZVJhbmdlPj4oaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICAgICAgICAgIG1hcCgoeCkgPT4gW3gsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSBhcyBbdHlwZW9mIHgsIHR5cGVvZiBjdXJyZW50VmFsdWUsIHR5cGVvZiB2YWx1ZUZhY3RvcnldKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcmF3VmFsdWUsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1ZhbHVlID8gdmFsdWVGYWN0b3J5KHJhd1ZhbHVlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGlzU2FtZVJhbmdlID0gZGJ4RGF0ZVJhbmdlSXNTYW1lRGF0ZVJhbmdlRmllbGRWYWx1ZSh2YWx1ZSwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzU2FtZVJhbmdlKSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhd1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGlucHV0IHRleHQgYWdhaW5cbiAgICAgICAgICBzZXRJbnB1dEZvcm1WYWx1ZShyYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5zZWxlY3Rpb25Nb2RlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9IHgpKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRhdGVSYW5nZUlucHV0JC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQgPSB4KSk7XG5cbiAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQuc3Vic2NyaWJlKCh4OiBNYXliZTxEYXRlUmFuZ2U+KSA9PiB7XG4gICAgICBzZXRJbnB1dEZvcm1WYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNob3dSYW5nZUlucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUoMTAwKSwgLy8gdGhyb3R0bGUgdG8gcHJldmVudCB0aGUgdmFsdWUgZnJvbSBjaGFuZ2luZyB0b28gZmFzdFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFJhbmdlRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRTdHJpbmcgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWQgPSBpc01vbnRoRGF5U2xhc2hEYXRlKHN0YXJ0U3RyaW5nKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWxpZCAmJiB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFN0cmluZyA9IHRoaXMuZW5kRGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkID0gaXNNb250aERheVNsYXNoRGF0ZShlbmRTdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZDsgLy8gbXVzdCBiZSBhIHZhbGlkIHRleHQgaW5wdXRcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4geCBhcyBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlUmFuZ2UpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeDogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHg/LnN0YXJ0ID8geyBzdGFydDogeC5zdGFydCB9IDogbnVsbCwgJ2lucHV0Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByYW5nZVRvU2V0OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+ID0geDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJyAmJiB0aGlzLl9sYXRlc3RCb3VuZGFyeSAmJiB4Py5zdGFydCAmJiB4Py5lbmQpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc0RhdGVJbkRhdGVSYW5nZSh4LnN0YXJ0LCB0aGlzLl9sYXRlc3RCb3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZW5kIGRhdGUgaXQgb3V0c2lkZSBvZiB0aGUgY3VycmVudCByYW5nZSAoaS5lLiBhIHJhbmdlIHdhcyB0eXBlZCBpbiBvbmx5IHRvIHRoZSBzdGFydCBkYXRlKSB0aGVuIHNldCB0aGUgZW5kIHRvIHRoZSBib3VuZGFyeSBlbmRcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGFyeSA9IGRhdGVSYW5nZSh7IC4uLnRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dCwgZGF0ZTogeC5zdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICByYW5nZVRvU2V0ID0geyBzdGFydDogeC5zdGFydCwgZW5kOiBib3VuZGFyeS5lbmQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGVSYW5nZShyYW5nZVRvU2V0LCAnaW5wdXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2xhdGVzdEJvdW5kYXJ5U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMubGF0ZXN0Qm91bmRhcnkkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2xhdGVzdEJvdW5kYXJ5ID0geCkpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0Lm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLmZpeGVkRGF0ZVJhbmdlRmllbGQuZGF0ZVJhbmdlSW5wdXQpKTtcblxuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5lbmREaXNhYmxlZCQuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5pbnB1dFJhbmdlRm9ybS5nZXQoJ2VuZCcpO1xuXG4gICAgICBpZiAoZW5kKSB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGVuZC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dFBpY2tlckNvbmZpZyA9IHRoaXMuZml4ZWREYXRlUmFuZ2VGaWVsZC5waWNrZXJDb25maWc7XG4gICAgdGhpcy5fY29uZmlnLm5leHQoaW5wdXRQaWNrZXJDb25maWcgPyBhc09ic2VydmFibGVGcm9tR2V0dGVyKGlucHV0UGlja2VyQ29uZmlnKSA6IHVuZGVmaW5lZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB0aW1lem9uZSBpZiBwcm92aWRlZC5cbiAgICBpZiAodGhpcy50aW1lem9uZSAmJiAhdGhpcy5maXhlZERhdGVSYW5nZUZpZWxkLmZ1bGxEYXlJblVUQykge1xuICAgICAgdGhpcy5fdGltZXpvbmUubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMudGltZXpvbmUpKTtcbiAgICB9XG5cbiAgICAvLyBXYXRjaCBmb3IgZGlzYWJsZWQgY2hhbmdlcyBzbyB3ZSBjYW4gcHJvcG9nYXRlIHRoZW0gcHJvcGVybHkuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoKGRpc2FibGVkKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJhbmdlRm9ybS5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuZW5kRGlzYWJsZWQkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuaW5wdXRSYW5nZUZvcm0uZ2V0KCdlbmQnKTtcblxuICAgICAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICBlbmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcmVzZXRzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMucHJlc2V0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQodGhpcy5kYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlLmNvbmZpZ3VyYXRpb25zJCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlRGF0ZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmNhbGVuZGFyRm9jdXNEYXRlJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuYWN0aXZlRGF0ZSA9IHg7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX3N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5faW5wdXRSYW5nZUZvcm1TdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0U3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fbGF0ZXN0Qm91bmRhcnlTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NvbmZpZy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3RpbWV6b25lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcHJlc2V0cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkV2ZW50LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNlbGVjdGVkQ2hhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRlUmFuZ2UoZGF0ZSA/IHsgc3RhcnQ6IGRhdGUgfSA6IG51bGwsICdjYWxlbmRhcicpO1xuICB9XG5cbiAgc2V0RGF0ZVJhbmdlKHJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+LCB0eXBlOiBTZWxlY3RlZERhdGVFdmVudFR5cGUpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25FdmVudC5uZXh0KHsgdHlwZSwgcmFuZ2UgfSk7XG4gIH1cblxuICBfY3JlYXRlRGF0ZVJhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogTWF5YmU8RGF0ZVJhbmdlPiB7XG4gICAgcmV0dXJuIGRhdGUgPyBkYXRlUmFuZ2UoeyAuLi50aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQsIGRhdGUgfSBhcyBEYXRlUmFuZ2VJbnB1dCkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieEZpeGVkRGF0ZVJhbmdlRmllbGRTZWxlY3Rpb25TdHJhdGVneTxEPiBpbXBsZW1lbnRzIE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5PEQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0ZUFkYXB0ZXIgPSBpbmplY3QoRGF0ZUFkYXB0ZXI8RD4pO1xuICByZWFkb25seSBkYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50ID0gaW5qZWN0KERieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQpO1xuXG4gIHNlbGVjdGlvbkZpbmlzaGVkKGRhdGU6IEQgfCBudWxsLCBjdXJyZW50UmFuZ2U6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4sIGV2ZW50OiBFdmVudCk6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIC8vIHVudXNlZFxuICAgIHJldHVybiBjdXJyZW50UmFuZ2U7XG4gIH1cblxuICBjcmVhdGVQcmV2aWV3KGFjdGl2ZURhdGU6IEQgfCBudWxsLCBjdXJyZW50UmFuZ2U6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4sIGV2ZW50OiBFdmVudCk6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIGNvbnN0IHsgY3VycmVudFNlbGVjdGlvbk1vZGUgfSA9IHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudDtcbiAgICBpZiAoYWN0aXZlRGF0ZSAhPSBudWxsICYmIGN1cnJlbnRTZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xuICAgICAgY29uc3QgbGF0ZXN0Qm91bmRhcnkgPSB0aGlzLmRieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQubGF0ZXN0Qm91bmRhcnk7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGFjdGl2ZURhdGUpO1xuXG4gICAgICBpZiAobGF0ZXN0Qm91bmRhcnkgJiYgKGN1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnbm9ybWFsJyB8fCBpc0RhdGVJbkRhdGVSYW5nZShkYXRlLCBsYXRlc3RCb3VuZGFyeSkpKSB7XG4gICAgICAgIGNvbnN0IGV4YW1wbGVEYXRlUmFuZ2UgPSB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UobGF0ZXN0Qm91bmRhcnkpO1xuICAgICAgICByZXR1cm4gZXhhbXBsZURhdGVSYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlV2l0aERhdGUoYWN0aXZlRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEYXRlUmFuZ2VXaXRoRGF0ZShpbnB1dDogRCB8IG51bGwpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBsZXQgZGF0ZVJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGlucHV0KTtcbiAgICAgIGRhdGVSYW5nZSA9IHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudC5fY3JlYXRlRGF0ZVJhbmdlKGRhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UoZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURhdGVSYW5nZShpbnB1dDogTWF5YmU8RGF0ZVJhbmdlPik6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5zdGFydCksIHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5lbmQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVGcm9tQWRhcHRlckRhdGUoaW5wdXQ6IEQpIHtcbiAgICBjb25zdCBkYXk6IERheU9mTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKGlucHV0KTtcbiAgICBjb25zdCBtb250aEluZGV4OiBEYXRlTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChpbnB1dCk7XG4gICAgY29uc3QgeWVhcjogWWVhck51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoaW5wdXQpO1xuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG5cbiAgYWRhcHRlckRhdGVGcm9tRGF0ZShkYXRlOiBEYXRlKTogRCB7XG4gICAgY29uc3QgZGF5OiBEYXlPZk1vbnRoID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGhJbmRleDogRGF0ZU1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IHllYXI6IFllYXJOdW1iZXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkXCI+XG4gIDxtYXQtY2FsZW5kYXIgI2NhbGVuZGFyVmlldyBbc2VsZWN0ZWRdPVwiY2FsZW5kYXJTZWxlY3Rpb24kIHwgYXN5bmNcIiBbZGF0ZUZpbHRlcl09XCIocGlja2VyRmlsdGVyJCB8IGFzeW5jKSB8fCBkZWZhdWx0UGlja2VyRmlsdGVyXCIgW21pbkRhdGVdPVwibWluJCB8IGFzeW5jXCIgW21heERhdGVdPVwibWF4JCB8IGFzeW5jXCIgKHNlbGVjdGVkQ2hhbmdlKT1cInNlbGVjdGVkQ2hhbmdlKCRldmVudClcIj48L21hdC1jYWxlbmRhcj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0XCIgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgKm5nSWY9XCJzaG93UmFuZ2VJbnB1dFwiIFtmb3JtR3JvdXBdPVwiaW5wdXRSYW5nZUZvcm1cIj5cbiAgICAgIDxpbnB1dCAjc3RhcnREYXRlSW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCIgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgLz5cbiAgICAgIDxpbnB1dCAjZW5kRGF0ZUlucHV0IFtuZ0NsYXNzXT1cIihlbmREaXNhYmxlZCQgfCBhc3luYykgPyAnZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0LWVuZCcgOiAnJ1wiIFthdHRyLnRhYmluZGV4XT1cIihlbmREaXNhYmxlZCQgfCBhc3luYykgPyAtMSA6IDBcIiBtYXRFbmREYXRlIGZvcm1Db250cm9sTmFtZT1cImVuZFwiIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiPkRhdGUgcmFuZ2UgaXMgcmVxdWlyZWQ8L21hdC1lcnJvcj5cbjwvZGl2PlxuIl19
|
|
521
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9maXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBK0gsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9MLE9BQU8sRUFBRSxvQkFBb0IsRUFBaUMscUJBQXFCLEVBQTZCLGtCQUFrQixFQUF3RCxTQUFTLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4VyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4TixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQXFCLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySixPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixF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QyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxHQUFlLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBVTtRQUM1QixNQUFNLEdBQUcsR0FBZSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsTUFBTSxVQUFVLEdBQWMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFlLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU1QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0QsQ0FBQzt3R0ExRFUsdUNBQXVDOzRHQUF2Qyx1Q0FBdUM7OzRGQUF2Qyx1Q0FBdUM7a0JBRG5ELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIE1heWJlLCB0eXBlIERlY2lzaW9uRnVuY3Rpb24sIHR5cGUgTWlsbGlzZWNvbmRzLCB0eXBlIFRpbWV6b25lU3RyaW5nLCB0eXBlIERhdGVNb250aCwgdHlwZSBEYXlPZk1vbnRoLCB0eXBlIFllYXJOdW1iZXIsIGlzTW9udGhEYXlTbGFzaERhdGUsIE1TX0lOX01JTlVURSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgZ3Vlc3NDdXJyZW50VGltZXpvbmUsIERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlLCBkYXRlVGltZXpvbmVVdGNOb3JtYWwsIERhdGVSYW5nZUlucHV0LCBEYXRlUmFuZ2UsIGlzU2FtZURhdGVEYXlSYW5nZSwgRGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlLCBEYXRlVGltZU1pbnV0ZUNvbmZpZywgZGF0ZVJhbmdlLCBpc0RhdGVJbkRhdGVSYW5nZSwgY2xhbXBEYXRlUmFuZ2VUb0RhdGVSYW5nZSwgaXNTYW1lRGF0ZVJhbmdlLCBpc1NhbWVEYXRlRGF5LCBsaW1pdERhdGVUaW1lSW5zdGFuY2UsIGRhdGVUaW1lTWludXRlV2hvbGVEYXlEZWNpc2lvbkZ1bmN0aW9uIH0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5LCBtYXAsIHN0YXJ0V2l0aCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGRlYm91bmNlVGltZSwgdGhyb3R0bGVUaW1lLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIG9mLCBjb21iaW5lTGF0ZXN0V2l0aCwgZmlsdGVyLCBjb21iaW5lTGF0ZXN0LCBzY2FuLCBmaXJzdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT25Jbml0LCBmb3J3YXJkUmVmLCBpbmplY3QsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlQ29uZmlnLCBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneSwgTUFUX0RBVEVfUkFOR0VfU0VMRUNUSU9OX1NUUkFURUdZLCBEYXRlUmFuZ2UgYXMgRGF0ZVBpY2tlckRhdGVSYW5nZSwgTWF0Q2FsZW5kYXIsIE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIsIGZpbHRlck1heWJlLCBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlciwgc2tpcEZpcnN0TWF5YmUsIFN1YnNjcmlwdGlvbk9iamVjdCwgc3dpdGNoTWFwTWF5YmVEZWZhdWx0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZVZhbHVlTW9kZSwgZGJ4RGF0ZVJhbmdlSXNTYW1lRGF0ZVJhbmdlRmllbGRWYWx1ZSwgZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5LCBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeSB9IGZyb20gJy4vZGF0ZS52YWx1ZSc7XG5pbXBvcnQgeyBEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2RhdGV0aW1lJztcbmltcG9ydCB7IERieERhdGVUaW1lRmllbGRNZW51UHJlc2V0c1NlcnZpY2UgfSBmcm9tICcuL2RhdGV0aW1lLmZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IGlzQmVmb3JlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgTWF0RXJyb3IsIE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0ID0gT21pdDxEYXRlUmFuZ2VJbnB1dCwgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VQaWNrZXJDb25maWd1cmF0aW9uID0gT21pdDxEYXRlVGltZU1pbnV0ZUNvbmZpZywgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZScgfCAnbm9ybWFsJyB8ICdhcmJpdHJhcnknIHwgJ2FyYml0cmFyeV9xdWljayc7XG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZVBpY2tpbmcgPSAnc3RhcnQnIHwgJ2VuZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIC8qKlxuICAgKiBEYXRlIHJhbmdlIGlucHV0IHRvIGJ1aWxkIHRoZSBkYXRlIHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlSW5wdXQ6IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieEZpeGVkRGF0ZVJhbmdlRGF0ZVJhbmdlSW5wdXQ+O1xuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gbW9kZSB0byB1c2Ugd2hlbiBwaWNraW5nIGRhdGVzIG9uIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdGlvbk1vZGU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+PjtcblxuICAvKipcbiAgICogVmFsdWUgbW9kZSBmb3IgdGhlIGRhdGVzIGluIHRoZSBvdXRwdXQgRGF0ZVJhbmdlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBEQVRFXG4gICAqL1xuICByZWFkb25seSB2YWx1ZU1vZGU/OiBEYnhEYXRlVGltZVZhbHVlTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcGFzcyB0aGUgZGF0ZSB2YWx1ZSBhcyBhIFVUQyBkYXRlLCBvciBhIGRhdGUgaW4gdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICByZWFkb25seSBmdWxsRGF5SW5VVEM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcGlja2VyIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBpY2tlckNvbmZpZz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbj47XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVGhlIGlucHV0IHRpbWV6b25lIHRvIGRlZmF1bHQgdG8uXG4gICAqXG4gICAqIElnbm9yZWQgaWYgZnVsbERheUluVVRDIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSB0aW1lem9uZT86IE1heWJlPE9ic2VydmFibGVPclZhbHVlR2V0dGVyPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IHRoZSB0aW1lem9uZS4gVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHByZXNldHMgdG8gc2hvdyBpbiB0aGUgZHJvcGRvd24uXG4gICAqL1xuICByZWFkb25seSBwcmVzZXRzPzogT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSByYW5nZSBpbnB1dC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dSYW5nZUlucHV0PzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZGJ4Rml4ZWREYXRlUmFuZ2VJbnB1dFZhbHVlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGlucHV0OiBNYXliZTxEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWU+KSA9PiBNYXliZTxEYXRlUmFuZ2U+IHtcbiAgY29uc3QgZGF0ZUlucHV0VHJhbnNmb3JtZXIgPSBkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnkobW9kZSwgdGltZXpvbmVJbnN0YW5jZSk7XG5cbiAgcmV0dXJuICh5KSA9PiB7XG4gICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZVJhbmdlPjtcblxuICAgIGlmICh5KSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHN0YXJ0OiBkYXRlSW5wdXRUcmFuc2Zvcm1lcih5LnN0YXJ0KSBhcyBEYXRlLFxuICAgICAgICBlbmQ6IGRhdGVJbnB1dFRyYW5zZm9ybWVyKHkuZW5kKSBhcyBEYXRlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRieEZpeGVkRGF0ZVJhbmdlT3V0cHV0VmFsdWVGYWN0b3J5KG1vZGU6IERieERhdGVUaW1lVmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlOiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4pOiAoZGF0ZTogTWF5YmU8RGF0ZVJhbmdlPikgPT4gTWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPiB7XG4gIGNvbnN0IGRhdGVPdXRwdXRUcmFuc2Zvcm1lciA9IGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5KG1vZGUsIHRpbWV6b25lSW5zdGFuY2UpO1xuXG4gIHJldHVybiAoeSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGVSYW5nZT47XG5cbiAgICBpZiAoeSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBzdGFydDogZGF0ZU91dHB1dFRyYW5zZm9ybWVyKHkuc3RhcnQpIGFzIERhdGUsXG4gICAgICAgIGVuZDogZGF0ZU91dHB1dFRyYW5zZm9ybWVyKHkuZW5kKSBhcyBEYXRlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmNvbnN0IFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUU6IE1pbGxpc2Vjb25kcyA9IDEwO1xuXG5leHBvcnQgdHlwZSBGaXhlZERhdGVSYW5nZVNjYW5UeXBlID0gJ3N0YXJ0JyB8ICdlbmQnIHwgJ3N0YXJ0UmVwZWF0JztcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZERhdGVSYW5nZVNjYW4ge1xuICAvKipcbiAgICogUGlja2VkIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJhbmdlIG9uIHRoZSBsYXN0IHBpY2suXG4gICAqL1xuICByZWFkb25seSBsYXN0UGlja1R5cGU/OiBNYXliZTxGaXhlZERhdGVSYW5nZVNjYW5UeXBlPjtcbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgZGF0ZSBwYXNzZWQsIGlmIGFwcGxpY2FibGUuXG4gICAqL1xuICByZWFkb25seSBsYXN0RGF0ZVJhbmdlPzogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFRoZSBnZW5lcmF0ZWQgYm91bmRhcnkgcmFuZ2UuXG4gICAqL1xuICByZWFkb25seSBib3VuZGFyeT86IERhdGVSYW5nZTtcbiAgLyoqXG4gICAqIE5ldyBEYXRlIFJhbmdlXG4gICAqL1xuICByZWFkb25seSByYW5nZT86IERhdGVSYW5nZTtcbn1cblxudHlwZSBTZWxlY3RlZERhdGVFdmVudFR5cGUgPSAnY2FsZW5kYXInIHwgJ2lucHV0JztcblxuaW50ZXJmYWNlIFNlbGVjdGVkRGF0ZUV2ZW50IHtcbiAgcmVhZG9ubHkgdHlwZTogU2VsZWN0ZWREYXRlRXZlbnRUeXBlO1xuICByZWFkb25seSByYW5nZT86IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj47XG59XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJ2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTUFUX0RBVEVfUkFOR0VfU0VMRUNUSU9OX1NUUkFURUdZLFxuICAgICAgdXNlQ2xhc3M6IGZvcndhcmRSZWYoKCkgPT4gRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFNlbGVjdGlvblN0cmF0ZWd5KVxuICAgIH1cbiAgXSxcbiAgaW1wb3J0czogW01hdERhdGVwaWNrZXJNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBNYXRFcnJvciwgTmdDbGFzc10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGRieERhdGVUaW1lRmllbGRNZW51UHJlc2V0c1NlcnZpY2UgPSBpbmplY3QoRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgY2FsZW5kYXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8TWF0Q2FsZW5kYXI8RGF0ZT4+KE1hdENhbGVuZGFyKTtcbiAgcmVhZG9ubHkgc3RhcnREYXRlSW5wdXRFbGVtZW50ID0gdmlld0NoaWxkPHN0cmluZywgRWxlbWVudFJlZj4oJ3N0YXJ0RGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pO1xuICByZWFkb25seSBlbmREYXRlSW5wdXRFbGVtZW50ID0gdmlld0NoaWxkPHN0cmluZywgRWxlbWVudFJlZj4oJ2VuZERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcblxuICByZWFkb25seSBjdXJyZW50RGF0ZVJhbmdlSW5wdXRTaWduYWwgPSBzaWduYWw8TWF5YmU8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25Nb2RlU2lnbmFsID0gc2lnbmFsPERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4oJ3NpbmdsZScpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dFJhbmdlRm9ybVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRSYW5nZUZvcm1WYWx1ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRlUmFuZ2VJbnB1dFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3VycmVudFNlbGVjdGlvbk1vZGVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhdGVzdEJvdW5kYXJ5U3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNhYmxlRW5kU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVEYXRlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0aW9uTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0ZVJhbmdlSW5wdXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD4+Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWV6b25lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcmVzZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPj4ob2YoW10pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25FdmVudCA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkRGF0ZUV2ZW50PigpO1xuICByZWFkb25seSBzZWxlY3RlZERhdGVSYW5nZSQ6IE9ic2VydmFibGU8TWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pj4gPSB0aGlzLl9zZWxlY3Rpb25FdmVudC5waXBlKG1hcCgoeCkgPT4geC5yYW5nZSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1Db250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8TWF5YmU8RGF0ZVJhbmdlPj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZyQ6IE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VQaWNrZXJDb25maWd1cmF0aW9uPiA9IHRoaXMuX2NvbmZpZy5waXBlKFxuICAgIGZpbHRlck1heWJlKCksXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGltaXREYXRlVGltZUluc3RhbmNlJCA9IHRoaXMuY29uZmlnJC5waXBlKG1hcChsaW1pdERhdGVUaW1lSW5zdGFuY2UpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZSQ6IE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPiA9IHRoaXMuX3NlbGVjdGlvbk1vZGUucGlwZShcbiAgICBzd2l0Y2hNYXBNYXliZURlZmF1bHQ8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPignc2luZ2xlJyksXG4gICAgbWFwKCh4KSA9PiB4ID8/ICdzaW5nbGUnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlSW5wdXQkID0gdGhpcy5fZGF0ZVJhbmdlSW5wdXQucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5fdGltZXpvbmUucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkucGlwZShcbiAgICBtYXAoKGRlZmF1bHRUaW1lem9uZSkgPT4ge1xuICAgICAgcmV0dXJuIGRlZmF1bHRUaW1lem9uZSA/PyBndWVzc0N1cnJlbnRUaW1lem9uZSgpO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lem9uZUluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4+ID0gdGhpcy50aW1lem9uZSQucGlwZShcbiAgICBtYXAoKHRpbWV6b25lKSA9PiAodGltZXpvbmUgPyBkYXRlVGltZXpvbmVVdGNOb3JtYWwoeyB0aW1lem9uZSB9KSA6IHVuZGVmaW5lZCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmFsdWVJblN5c3RlbVRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuZm9ybUNvbnRyb2wkLnBpcGUoXG4gICAgbWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aDxNYXliZTxEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWU+Pihjb250cm9sLnZhbHVlKSwgc2hhcmVSZXBsYXkoMSkpKSxcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkKSxcbiAgICBzd2l0Y2hNYXAoKFt4LCB0aW1lem9uZUluc3RhbmNlXSkgPT4ge1xuICAgICAgcmV0dXJuIHgucGlwZShtYXAoZGJ4Rml4ZWREYXRlUmFuZ2VJbnB1dFZhbHVlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKTtcbiAgICB9KSxcbiAgICB0aHJvdHRsZVRpbWUoMjAsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksIC8vIHRocm90dGxlIGluY29taW5nIHZhbHVlcyBhbmQgdGltZXpvbmUgY2hhbmdlc1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPE1heWJlPERhdGVSYW5nZT4+KGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBkYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKG1vZGU6IERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZSkge1xuICAgIGNvbnN0IHJlc3VsdDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0ZVJhbmdlSW5wdXQkLCB0aGlzLmxpbWl0RGF0ZVRpbWVJbnN0YW5jZSRdKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChbZGF0ZVJhbmdlSW5wdXQsIGxpbWl0SW5zdGFuY2VdKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0RhdGVSYW5nZUNvbmZpZ3VyYXRpb24gPSBCb29sZWFuKGRhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgY29uc3QgbWluTWF4Q2xhbXAgPSAoZGF0ZVJhbmdlOiBEYXRlUmFuZ2UpID0+IGxpbWl0SW5zdGFuY2UuY2xhbXBEYXRlUmFuZ2UoZGF0ZVJhbmdlKTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAvLyBvbmx5IHVzZSB0aGUgc3RhcnQgZGF0ZS5cbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVSYW5nZSQucGlwZShcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgICAgICAgICBtYXAoKGlucHV0RGF0ZVJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBpbnB1dERhdGVSYW5nZT8uc3RhcnQ7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRlID8gKG1pbk1heENsYW1wKGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpKSBhcyBEYXRlUmFuZ2UpIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0YWtlIHRoZSBmaXJzdCBkYXRlLCB0aGVuIHdhaXQgdW5sZXNzIHRoZSBkYXRlIGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlJC5waXBlKFxuICAgICAgICAgICAgc2NhbigoYWNjOiBGaXhlZERhdGVSYW5nZVNjYW4sIG5leHREYXRlUmFuZ2U6IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4pID0+IHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdDogRml4ZWREYXRlUmFuZ2VTY2FuO1xuICAgICAgICAgICAgICBsZXQgcGlja1R5cGU6IE1heWJlPEZpeGVkRGF0ZVJhbmdlU2NhblR5cGU+ID0gJ3N0YXJ0JztcblxuICAgICAgICAgICAgICBpZiAobmV4dERhdGVSYW5nZSAmJiBuZXh0RGF0ZVJhbmdlLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0OiBzdGFydE9yTmV4dERhdGUsIGVuZCB9ID0gbmV4dERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3RlbnRpYWxCb3VuZGFyeSA9IGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlOiBzdGFydE9yTmV4dERhdGUgfSBhcyBEYXRlUmFuZ2VJbnB1dCk7XG5cbiAgICAgICAgICAgICAgICAvLyBvbmx5IGNvbWVzIHRocm91Z2ggd2hlbiBwYXNzZWQgYnkgdGhlIHRleHQgaW5wdXRzXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0T3JOZXh0RGF0ZSAmJiBlbmQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY2xhbXBEYXRlUmFuZ2VUb0RhdGVSYW5nZShuZXh0RGF0ZVJhbmdlLCBwb3RlbnRpYWxCb3VuZGFyeSkgYXMgRGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiBuZXh0RGF0ZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBib3VuZGFyeTogcmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAvLyBmb3Igbm9ybWFsIG1vZGUgd2Ugd2FudCB0byBwcm90ZWN0IGFnYWluc3QgXCJzdGFydFwiIGJlaW5nIGlucHV0LCB0aGVuIHRoZSBvdXRwdXQgYmVpbmcgcGFzc2VkLFxuICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gdGhlIG5leHQgY2xpY2sgYmVpbmcgdHJlYXRlZCBhcyBhbm90aGVyIFwic3RhcnRcIiBpbnN0ZWFkIG9mIGFuIFwiZW5kXCIuXG4gICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ25vcm1hbCcgJiYgYWNjLmxhc3RQaWNrVHlwZSA9PT0gJ3N0YXJ0JyAmJiBpc1NhbWVEYXRlRGF5KHN0YXJ0T3JOZXh0RGF0ZSwgZW5kKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTYW1lRGF0ZURheShzdGFydE9yTmV4dERhdGUsIGFjYy5sYXN0RGF0ZVJhbmdlPy5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwaWNrVHlwZSA9ICdzdGFydFJlcGVhdCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbGV0IHJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgbGV0IGJvdW5kYXJ5OiBNYXliZTxEYXRlUmFuZ2U+ID0gcG90ZW50aWFsQm91bmRhcnk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0RhdGVSYW5nZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb25maWd1cmVkIHJhbmdlL2JvdW5kYXJ5LCB0aGVuIGp1c3Qgc2V0IHRoZSBwaWNrIHR5cGUgYmFzZWQgb24gdGhlIGxhc3QgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgIHBpY2tUeXBlID0gYWNjLmxhc3RQaWNrVHlwZSA9PT0gJ3N0YXJ0JyA/ICdlbmQnIDogJ3N0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2MubGFzdFBpY2tUeXBlID09PSAnc3RhcnRSZXBlYXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGlja1R5cGUgPSAnZW5kJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcGljayBpcyBvdXRzaWRlIHRoZSBib3VuZGFyeSwgdGhlbiBjb25zaWRlciBpdCBhIHN0YXJ0IHBpY2sgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICBwaWNrVHlwZSA9IGFjYy5sYXN0UGlja1R5cGUgPT09ICdzdGFydCcgJiYgYWNjLmJvdW5kYXJ5ICYmIGlzRGF0ZUluRGF0ZVJhbmdlKHN0YXJ0T3JOZXh0RGF0ZSwgYWNjLmJvdW5kYXJ5KSA/ICdlbmQnIDogJ3N0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWN0IGJhc2VkIG9uIGhvdyB0aGlzXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocGlja1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFN0YXJ0ID0gYWNjLmxhc3REYXRlUmFuZ2U/LnN0YXJ0IGFzIERhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBib3VuZGFyeVRvQ2hlY2s6IERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbklzQmVmb3JlUHJldmlvdXNTZWxlY3Rpb24gPSAhbGFzdFN0YXJ0IHx8IGlzQmVmb3JlKHN0YXJ0T3JOZXh0RGF0ZSwgbGFzdFN0YXJ0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRTdGFydDogRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0RW5kOiBEYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXNCZWZvcmVQcmV2aW91c1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhcnQgPSBzdGFydE9yTmV4dERhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmQgPSBsYXN0U3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5VG9DaGVjayA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXJ0ID0gbGFzdFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kID0gc3RhcnRPck5leHREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeVRvQ2hlY2sgPSBkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZTogbmV4dFN0YXJ0IH0gYXMgRGF0ZVJhbmdlSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgYm91bmRhcnkgdXNpbmcgdGhlIG5leHQgc3RhcnQgZGF0ZS4gSWYgaXQgaXMgb3V0c2lkZSB0aGUgc2VsZWN0YWJsZSByYW5nZSwgdGhlbiBpdCBiZWNvbWVzIGEgXCJzdGFydFwiIHBpY2sgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0JlZm9yZShib3VuZGFyeVRvQ2hlY2suZW5kLCBuZXh0RW5kKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbGxvdyBjaGFuZ2luZyB0aGUgYmVoYXZpb3IgdG8gZmlsbCB0aGUgZW50aXJlIHJhbmdlIGluc3RlYWQgb2YganVzdCByZXNldHRpbmcgaXQgZW50aXJlbHlcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhcnQgPSBzdGFydE9yTmV4dERhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmQgPSBzdGFydE9yTmV4dERhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tUeXBlID0gJ3N0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkgPSBib3VuZGFyeVRvQ2hlY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBwaWNraW5nIHRoZSBlbmQgdGhlbiBzZXQgdGhlIHJhbmdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBuZXh0U3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbmV4dEVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGFpbiB0aGUgYm91bmRhcnkgYXMgcG90ZW50aWFsIGJvdW5kYXJ5LCBhbmQgc2V0IG91ciBuZXcgcmFuZ2UgZnJvbSB0aGUgc2luZ2xlIGRhdGUuXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0T3JOZXh0RGF0ZSBhcyBEYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHN0YXJ0T3JOZXh0RGF0ZSBhcyBEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjLmJvdW5kYXJ5ICYmIGlzRGF0ZUluRGF0ZVJhbmdlKHN0YXJ0T3JOZXh0RGF0ZSwgYWNjLmJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBpbiB0aGUgZGF0ZSByYW5nZSwgdXNlcyB0aGUgcGljayBhcyB0aGUgbGFzdCBkYXRlLlxuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydDogYWNjLmJvdW5kYXJ5LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgIGVuZDogc3RhcnRPck5leHREYXRlXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZ5IGJvdW5kYXJ5IHRvIG1hdGNoIHJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZURhdGVSYW5nZShhY2MucmFuZ2UsIHJhbmdlKSAmJiBpc1NhbWVEYXRlRGF5KHJhbmdlLmVuZCwgc3RhcnRPck5leHREYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgY2xpY2tlZCBvbiB0aGUgZW5kIHJhbmdlLCB0aGVuIGV4cGFuZCB0aGUgYm91bmRhcnkgYWdhaW4gdG8gdGhlIGZ1bGwgcmFuZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGRhdGVSYW5nZSh7IC4uLmRhdGVSYW5nZUlucHV0LCBkYXRlOiByYW5nZS5zdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGFpbiBzYW1lIGJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkgPSBhY2MuYm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2FyYml0cmFyeV9xdWljaycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBwb3RlbnRpYWxCb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiBuZXh0RGF0ZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgIGxhc3REYXRlUmFuZ2U6IG5leHREYXRlUmFuZ2VcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgIGxhc3RQaWNrVHlwZTogcGlja1R5cGUsXG4gICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiByZXN1bHQubGFzdERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiByZXN1bHQuYm91bmRhcnkgPyAobWluTWF4Q2xhbXAocmVzdWx0LmJvdW5kYXJ5KSBhcyBEYXRlUmFuZ2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJlc3VsdC5yYW5nZSA/IChtaW5NYXhDbGFtcChyZXN1bHQucmFuZ2UpIGFzIERhdGVSYW5nZSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4gIXgubGFzdERhdGVSYW5nZSB8fCB4LnJhbmdlICE9IG51bGwpLCAvLyBwYXNzIHRocm91Z2ggbnVsbC9kYXRlIGNsZWFyaW5ncyBvciByYW5nZXNcbiAgICAgICAgICAgIG1hcCgoeCkgPT4geC5yYW5nZSA/PyBudWxsKSAvLyByZXR1cm4gdGhlIHJhbmdlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRvbmx5IGZ1bGxCb3VuZGFyeSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUoJ3NpbmdsZScpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICByZWFkb25seSBsYXRlc3RCb3VuZGFyeSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChtb2RlKSA9PiB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2FyYml0cmFyeV9xdWljaycpIHtcbiAgICAgICAgLy8gaW4gYXJiaXRyYXJ5X3F1aWNrIG1vZGUsIHRoZSBsYXRlc3QgdmFsdWUgaXMgdGhlIGJvdW5kYXJ5LCBzaW5jZSB3ZSBhbHdheXMgc2V0IHRoZSB2YWx1ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxCb3VuZGFyeSQ7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcblxuICAvKipcbiAgICogRm9jdXNlcyBvbiB0aGUgZGF0ZSBhbnkgdGltZSB0aGUgc2VsZWN0aW9uIGV2ZW50IGZyb20gdGhlIHBpY2tlciBvY2N1cmVkLCBvdGhlcndpc2UgdXNlIHRoZSBzeXN0ZW0gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IGNhbGVuZGFyRm9jdXNEYXRlJDogT2JzZXJ2YWJsZTxEYXRlPiA9IHRoaXMuX3NlbGVjdGlvbkV2ZW50LnBpcGUoc3RhcnRXaXRoKG51bGwpKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoc2VsZWN0aW9uRXZlbnQpID0+IHtcbiAgICAgIGlmIChzZWxlY3Rpb25FdmVudCAmJiBzZWxlY3Rpb25FdmVudC50eXBlID09PSAnY2FsZW5kYXInICYmIHNlbGVjdGlvbkV2ZW50LnJhbmdlPy5zdGFydCkge1xuICAgICAgICByZXR1cm4gb2Yoc2VsZWN0aW9uRXZlbnQucmFuZ2Uuc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVsbEJvdW5kYXJ5JC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChmdWxsQm91bmRhcnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmdWxsQm91bmRhcnk/LnN0YXJ0ID8/IHNlbGVjdGlvbkV2ZW50Py5yYW5nZT8uc3RhcnQ7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBmaWx0ZXJNYXliZSgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlU2VsZWN0aW9uJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuc2VsZWN0aW9uTW9kZSQucGlwZShzd2l0Y2hNYXAoKG1vZGUpID0+IHRoaXMuZGF0ZVJhbmdlU2VsZWN0aW9uRm9yTW9kZShtb2RlKSkpO1xuXG4gIHJlYWRvbmx5IGNhbGVuZGFyU2VsZWN0aW9uJDogT2JzZXJ2YWJsZTxEYXRlUGlja2VyRGF0ZVJhbmdlPERhdGU+IHwgbnVsbD4gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4ID8gbmV3IERhdGVQaWNrZXJEYXRlUmFuZ2U8RGF0ZT4oeC5zdGFydCwgeC5lbmQpIDogbnVsbCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZW5kRGlzYWJsZWQkID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geCA9PT0gJ3NpbmdsZScpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFJhbmdlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsKVxuICB9KTtcblxuICBnZXQgZml4ZWREYXRlUmFuZ2VGaWVsZCgpOiBEYnhGaXhlZERhdGVSYW5nZUZpZWxkUHJvcHMge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbk1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2VsZWN0aW9uTW9kZTtcbiAgfVxuXG4gIGdldCB2YWx1ZU1vZGUoKTogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnZhbHVlTW9kZSA/PyBEYnhEYXRlVGltZVZhbHVlTW9kZS5EQVRFO1xuICB9XG5cbiAgZ2V0IGRlc2NyaXB0aW9uKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IHRpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnRpbWV6b25lO1xuICB9XG5cbiAgZ2V0IHNob3dUaW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93VGltZXpvbmUgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBwcmVzZXRzKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnByZXNldHM7XG4gIH1cblxuICBnZXQgc2hvd1JhbmdlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2hvd1JhbmdlSW5wdXQgPz8gdHJ1ZTtcbiAgfVxuXG4gIHJlYWRvbmx5IG1pbk1heFJhbmdlJCA9IHRoaXMubGltaXREYXRlVGltZUluc3RhbmNlJC5waXBlKFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRpbWVyKE1TX0lOX01JTlVURSkpLCAvLyByZWZyZXNoIGV2ZXJ5IG1pbnV0ZVxuICAgIG1hcCgoW3hdKSA9PiB4LmRhdGVSYW5nZSgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWluJCA9IHRoaXMubWluTWF4UmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5zdGFydCA/PyBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWF4JCA9IHRoaXMubWluTWF4UmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5lbmQgPz8gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpY2tlckZpbHRlciQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4+ID0gdGhpcy5jb25maWckLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGRhdGVUaW1lTWludXRlV2hvbGVEYXlEZWNpc2lvbkZ1bmN0aW9uKHgsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuICh4OiBEYXRlIHwgbnVsbCkgPT4gKHggIT0gbnVsbCA/IGZpbHRlcih4KSA6IHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkZWZhdWx0UGlja2VyRmlsdGVyOiBEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPiA9ICgpID0+IHRydWU7XG5cbiAgcmVhZG9ubHkgbWluRGF0ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMubWluJCwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIHJlYWRvbmx5IG1heERhdGVTaWduYWwgPSB0b1NpZ25hbCh0aGlzLm1heCQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBlbmREaXNhYmxlZFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuZW5kRGlzYWJsZWQkKTtcbiAgcmVhZG9ubHkgbGF0ZXN0Qm91bmRhcnlTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmxhdGVzdEJvdW5kYXJ5JCk7XG4gIHJlYWRvbmx5IGNhbGVuZGFyU2VsZWN0aW9uU2lnbmFsID0gdG9TaWduYWwodGhpcy5jYWxlbmRhclNlbGVjdGlvbiQsIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICByZWFkb25seSBwaWNrZXJGaWx0ZXJTaWduYWwgPSB0b1NpZ25hbCh0aGlzLnBpY2tlckZpbHRlciQsIHsgaW5pdGlhbFZhbHVlOiB0aGlzLmRlZmF1bHRQaWNrZXJGaWx0ZXIgfSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMubmV4dCh0aGlzLmZvcm1Db250cm9sKTtcblxuICAgIGNvbnN0IGRhdGVSYW5nZVNlbGVjdGlvbiA9IHRoaXMuZGF0ZVJhbmdlU2VsZWN0aW9uJC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAgIGNvbnN0IHNldElucHV0Rm9ybVZhbHVlID0gKHZhbHVlOiBNYXliZTxEYXRlUmFuZ2U+KSA9PiB7XG4gICAgICBpZiAoIWlzU2FtZURhdGVEYXlSYW5nZSh2YWx1ZSwgdGhpcy5pbnB1dFJhbmdlRm9ybS52YWx1ZSBhcyBQYXJ0aWFsPERhdGVSYW5nZT4pKSB7XG4gICAgICAgIHRoaXMuaW5wdXRSYW5nZUZvcm0uc2V0VmFsdWUoe1xuICAgICAgICAgIHN0YXJ0OiB2YWx1ZT8uc3RhcnQgPz8gbnVsbCxcbiAgICAgICAgICBlbmQ6IHZhbHVlPy5lbmQgPz8gbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fc3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQucGlwZShtYXAoKHRpbWV6b25lSW5zdGFuY2UpID0+IGRieEZpeGVkRGF0ZVJhbmdlT3V0cHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2N1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2VTZWxlY3Rpb24ucGlwZShcbiAgICAgICAgICAgIHNraXBGaXJzdE1heWJlKCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlUmFuZ2U+Pihpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgICAgICAgICAgbWFwKCh4KSA9PiBbeCwgY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldIGFzIFt0eXBlb2YgeCwgdHlwZW9mIGN1cnJlbnRWYWx1ZSwgdHlwZW9mIHZhbHVlRmFjdG9yeV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtyYXdWYWx1ZSwgY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmF3VmFsdWUgPyB2YWx1ZUZhY3RvcnkocmF3VmFsdWUpIDogbnVsbDtcbiAgICAgICAgY29uc3QgaXNTYW1lUmFuZ2UgPSBkYnhEYXRlUmFuZ2VJc1NhbWVEYXRlUmFuZ2VGaWVsZFZhbHVlKHZhbHVlLCBjdXJyZW50VmFsdWUpO1xuXG4gICAgICAgIGlmICghaXNTYW1lUmFuZ2UpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaW5wdXQgdGV4dCBhZ2FpblxuICAgICAgICAgIHNldElucHV0Rm9ybVZhbHVlKHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnNlbGVjdGlvbk1vZGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnN1YnNjcmliZSgoeCkgPT4gdGhpcy5jdXJyZW50U2VsZWN0aW9uTW9kZVNpZ25hbC5zZXQoeCkpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0ZVJhbmdlSW5wdXQkLnN1YnNjcmliZSgoeCkgPT4gdGhpcy5jdXJyZW50RGF0ZVJhbmdlSW5wdXRTaWduYWwuc2V0KHgpKTtcblxuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5zdWJzY3JpYmUoKHg6IE1heWJlPERhdGVSYW5nZT4pID0+IHtcbiAgICAgIHNldElucHV0Rm9ybVZhbHVlKHgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2hvd1JhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMDApLCAvLyB0aHJvdHRsZSB0byBwcmV2ZW50IHRoZSB2YWx1ZSBmcm9tIGNoYW5naW5nIHRvbyBmYXN0XG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0UmFuZ2VGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFN0cmluZyA9IHRoaXMuc3RhcnREYXRlSW5wdXRFbGVtZW50KCk/Lm5hdGl2ZUVsZW1lbnQ/LnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCB2YWxpZCA9IGlzTW9udGhEYXlTbGFzaERhdGUoc3RhcnRTdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkICYmIHRoaXMuY3VycmVudFNlbGVjdGlvbk1vZGVTaWduYWwoKSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFN0cmluZyA9IHRoaXMuZW5kRGF0ZUlucHV0RWxlbWVudCgpPy5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkID0gaXNNb250aERheVNsYXNoRGF0ZShlbmRTdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZDsgLy8gbXVzdCBiZSBhIHZhbGlkIHRleHQgaW5wdXRcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4geCBhcyBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlUmFuZ2UpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeDogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25Nb2RlID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uTW9kZVNpZ25hbCgpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlUmFuZ2UoeD8uc3RhcnQgPyB7IHN0YXJ0OiB4LnN0YXJ0IH0gOiBudWxsLCAnaW5wdXQnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJhbmdlVG9TZXQ6IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4gPSB4O1xuXG4gICAgICAgICAgICBjb25zdCBsYXRlc3RCb3VuZGFyeSA9IHRoaXMubGF0ZXN0Qm91bmRhcnlTaWduYWwoKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJyAmJiBsYXRlc3RCb3VuZGFyeSAmJiB4Py5zdGFydCAmJiB4Py5lbmQpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc0RhdGVJbkRhdGVSYW5nZSh4LnN0YXJ0LCBsYXRlc3RCb3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZW5kIGRhdGUgaXQgb3V0c2lkZSBvZiB0aGUgY3VycmVudCByYW5nZSAoaS5lLiBhIHJhbmdlIHdhcyB0eXBlZCBpbiBvbmx5IHRvIHRoZSBzdGFydCBkYXRlKSB0aGVuIHNldCB0aGUgZW5kIHRvIHRoZSBib3VuZGFyeSBlbmRcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGFyeSA9IGRhdGVSYW5nZSh7IC4uLnRoaXMuY3VycmVudERhdGVSYW5nZUlucHV0U2lnbmFsKCksIGRhdGU6IHguc3RhcnQgfSBhcyBEYXRlUmFuZ2VJbnB1dCk7XG4gICAgICAgICAgICAgICAgcmFuZ2VUb1NldCA9IHsgc3RhcnQ6IHguc3RhcnQsIGVuZDogYm91bmRhcnkuZW5kIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXREYXRlUmFuZ2UocmFuZ2VUb1NldCwgJ2lucHV0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5maXhlZERhdGVSYW5nZUZpZWxkLmRhdGVSYW5nZUlucHV0KSk7XG5cbiAgICB0aGlzLl9kaXNhYmxlRW5kU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZW5kRGlzYWJsZWQkLnN1YnNjcmliZSgoZGlzYWJsZWQpID0+IHtcbiAgICAgIGNvbnN0IGVuZCA9IHRoaXMuaW5wdXRSYW5nZUZvcm0uZ2V0KCdlbmQnKTtcblxuICAgICAgaWYgKGVuZCkge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICBlbmQuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRQaWNrZXJDb25maWcgPSB0aGlzLmZpeGVkRGF0ZVJhbmdlRmllbGQucGlja2VyQ29uZmlnO1xuICAgIHRoaXMuX2NvbmZpZy5uZXh0KGlucHV0UGlja2VyQ29uZmlnID8gYXNPYnNlcnZhYmxlRnJvbUdldHRlcihpbnB1dFBpY2tlckNvbmZpZykgOiB1bmRlZmluZWQpO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgdGltZXpvbmUgaWYgcHJvdmlkZWQuXG4gICAgaWYgKHRoaXMudGltZXpvbmUgJiYgIXRoaXMuZml4ZWREYXRlUmFuZ2VGaWVsZC5mdWxsRGF5SW5VVEMpIHtcbiAgICAgIHRoaXMuX3RpbWV6b25lLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnRpbWV6b25lKSk7XG4gICAgfVxuXG4gICAgLy8gV2F0Y2ggZm9yIGRpc2FibGVkIGNoYW5nZXMgc28gd2UgY2FuIHByb3BvZ2F0ZSB0aGVtIHByb3Blcmx5LlxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuaW5wdXRSYW5nZUZvcm0uZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnB1dFJhbmdlRm9ybS5lbmFibGUoKTtcblxuICAgICAgICB0aGlzLmVuZERpc2FibGVkJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoZGlzYWJsZWQpID0+IHtcbiAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmlucHV0UmFuZ2VGb3JtLmdldCgnZW5kJyk7XG5cbiAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgZW5kLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuZC5lbmFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJlc2V0cyAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnByZXNldHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcHJlc2V0cy5uZXh0KHRoaXMuZGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZS5jb25maWd1cmF0aW9ucyQpO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5jYWxlbmRhckZvY3VzRGF0ZSQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLmNhbGVuZGFyKCkuYWN0aXZlRGF0ZSA9IHg7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX3N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5faW5wdXRSYW5nZUZvcm1TdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0U3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fbGF0ZXN0Qm91bmRhcnlTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NvbmZpZy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3RpbWV6b25lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcHJlc2V0cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkV2ZW50LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNlbGVjdGVkQ2hhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRlUmFuZ2UoZGF0ZSA/IHsgc3RhcnQ6IGRhdGUgfSA6IG51bGwsICdjYWxlbmRhcicpO1xuICB9XG5cbiAgc2V0RGF0ZVJhbmdlKHJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+LCB0eXBlOiBTZWxlY3RlZERhdGVFdmVudFR5cGUpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25FdmVudC5uZXh0KHsgdHlwZSwgcmFuZ2UgfSk7XG4gIH1cblxuICBfY3JlYXRlRGF0ZVJhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogTWF5YmU8RGF0ZVJhbmdlPiB7XG4gICAgcmV0dXJuIGRhdGUgPyBkYXRlUmFuZ2UoeyAuLi50aGlzLmN1cnJlbnREYXRlUmFuZ2VJbnB1dFNpZ25hbCgpLCBkYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhGaXhlZERhdGVSYW5nZUZpZWxkU2VsZWN0aW9uU3RyYXRlZ3k8RD4gaW1wbGVtZW50cyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneTxEPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGVBZGFwdGVyID0gaW5qZWN0KERhdGVBZGFwdGVyPEQ+KTtcbiAgcmVhZG9ubHkgZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCA9IGluamVjdChEYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50KTtcblxuICBzZWxlY3Rpb25GaW5pc2hlZChkYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICAvLyB1bnVzZWRcbiAgICByZXR1cm4gY3VycmVudFJhbmdlO1xuICB9XG5cbiAgY3JlYXRlUHJldmlldyhhY3RpdmVEYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb25Nb2RlU2lnbmFsLCBsYXRlc3RCb3VuZGFyeVNpZ25hbCB9ID0gdGhpcy5kYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50O1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25Nb2RlID0gY3VycmVudFNlbGVjdGlvbk1vZGVTaWduYWwoKTtcblxuICAgIGlmIChhY3RpdmVEYXRlICE9IG51bGwgJiYgY3VycmVudFNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XG4gICAgICBjb25zdCBsYXRlc3RCb3VuZGFyeSA9IGxhdGVzdEJvdW5kYXJ5U2lnbmFsKCk7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGFjdGl2ZURhdGUpO1xuXG4gICAgICBpZiAobGF0ZXN0Qm91bmRhcnkgJiYgKGN1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnbm9ybWFsJyB8fCBpc0RhdGVJbkRhdGVSYW5nZShkYXRlLCBsYXRlc3RCb3VuZGFyeSkpKSB7XG4gICAgICAgIGNvbnN0IGV4YW1wbGVEYXRlUmFuZ2UgPSB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UobGF0ZXN0Qm91bmRhcnkpO1xuICAgICAgICByZXR1cm4gZXhhbXBsZURhdGVSYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlV2l0aERhdGUoYWN0aXZlRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEYXRlUmFuZ2VXaXRoRGF0ZShpbnB1dDogRCB8IG51bGwpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBsZXQgZGF0ZVJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGlucHV0KTtcbiAgICAgIGRhdGVSYW5nZSA9IHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudC5fY3JlYXRlRGF0ZVJhbmdlKGRhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UoZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURhdGVSYW5nZShpbnB1dDogTWF5YmU8RGF0ZVJhbmdlPik6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5zdGFydCksIHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5lbmQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVGcm9tQWRhcHRlckRhdGUoaW5wdXQ6IEQpIHtcbiAgICBjb25zdCBkYXk6IERheU9mTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKGlucHV0KTtcbiAgICBjb25zdCBtb250aEluZGV4OiBEYXRlTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChpbnB1dCk7XG4gICAgY29uc3QgeWVhcjogWWVhck51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoaW5wdXQpO1xuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG5cbiAgYWRhcHRlckRhdGVGcm9tRGF0ZShkYXRlOiBEYXRlKTogRCB7XG4gICAgY29uc3QgZGF5OiBEYXlPZk1vbnRoID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGhJbmRleDogRGF0ZU1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IHllYXI6IFllYXJOdW1iZXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkXCI+XG4gIDxtYXQtY2FsZW5kYXIgI2NhbGVuZGFyVmlldyBbc2VsZWN0ZWRdPVwiY2FsZW5kYXJTZWxlY3Rpb25TaWduYWwoKVwiIFtkYXRlRmlsdGVyXT1cInBpY2tlckZpbHRlclNpZ25hbCgpXCIgW21pbkRhdGVdPVwibWluRGF0ZVNpZ25hbCgpXCIgW21heERhdGVdPVwibWF4RGF0ZVNpZ25hbCgpXCIgKHNlbGVjdGVkQ2hhbmdlKT1cInNlbGVjdGVkQ2hhbmdlKCRldmVudClcIj48L21hdC1jYWxlbmRhcj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0XCIgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICBAaWYgKHNob3dSYW5nZUlucHV0KSB7XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW2Zvcm1Hcm91cF09XCJpbnB1dFJhbmdlRm9ybVwiPlxuICAgICAgICA8aW5wdXQgI3N0YXJ0RGF0ZUlucHV0IG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIHBsYWNlaG9sZGVyPVwiU3RhcnQgZGF0ZVwiIC8+XG4gICAgICAgIDxpbnB1dCAjZW5kRGF0ZUlucHV0IFtuZ0NsYXNzXT1cImVuZERpc2FibGVkU2lnbmFsKCkgPyAnZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0LWVuZCcgOiAnJ1wiIFthdHRyLnRhYmluZGV4XT1cImVuZERpc2FibGVkU2lnbmFsKCkgPyAtMSA6IDBcIiBtYXRFbmREYXRlIGZvcm1Db250cm9sTmFtZT1cImVuZFwiIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiAvPlxuICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICB9XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICA8bWF0LWVycm9yPkRhdGUgcmFuZ2UgaXMgcmVxdWlyZWQ8L21hdC1lcnJvcj5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
@@ -5,4 +5,6 @@ export * from './datetime.field.service';
|
|
|
5
5
|
export * from './datetime.field.component';
|
|
6
6
|
export * from './datetime.preset';
|
|
7
7
|
export * from './datetime';
|
|
8
|
-
|
|
8
|
+
export * from './datetime.field.component';
|
|
9
|
+
export * from './fixeddaterange.field.component';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0NBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGUuZmllbGQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS52YWx1ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGV0aW1lLmZpZWxkJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGV0aW1lLnByZXNldCc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGV0aW1lJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50JztcbiJdfQ==
|