@rivet-health/design-system 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/content-toggle/text-toggle/text-toggle.component.mjs +3 -3
- package/esm2020/lib/input/calendar/calendar.component.mjs +3 -3
- package/esm2020/lib/input/date/date.component.mjs +3 -3
- package/esm2020/lib/input/date-range/date-range.component.mjs +3 -3
- package/esm2020/lib/input/input-label/input-label.component.mjs +3 -3
- package/esm2020/lib/input/single-select/single-select.component.mjs +3 -3
- package/esm2020/lib/riv.module.mjs +6 -1
- package/esm2020/lib/visualization/issue/issue.component.mjs +22 -0
- package/esm2020/lib/visualization/legend-item/legend-item.component.mjs +3 -3
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/rivet-health-design-system.mjs +38 -15
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +38 -15
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/riv.module.d.ts +23 -22
- package/lib/visualization/issue/issue.component.d.ts +8 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -10,10 +10,10 @@ export class TextToggleComponent {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
TextToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
-
TextToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TextToggleComponent, selector: "riv-text-toggle", inputs: { showLabel: "showLabel", hideLabel: "hideLabel", open: "open" }, ngImport: i0, template: "<button class=\"toggle\" type=\"button\" (click)=\"open = !open\">\n <riv-icon [class.open]=\"open\" [name]=\"'ChevronDown'\" [size]=\"24\"></riv-icon>\n <div>{{ open ? hideLabel : showLabel }}</div>\n</button>\n<div *ngIf=\"open\">\n <ng-content></ng-content>\n</div>\n", styles: [".toggle{padding:var(--size-xxsmall);display:flex;align-items:center}.toggle:hover{cursor:pointer}button{color:inherit}riv-icon{transition:transform var(--medium-transition)}riv-icon.open{transform:rotate(-180deg)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
13
|
+
TextToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TextToggleComponent, selector: "riv-text-toggle", inputs: { showLabel: "showLabel", hideLabel: "hideLabel", open: "open" }, ngImport: i0, template: "<button class=\"toggle\" type=\"button\" (click)=\"open = !open\" type=\"button\">\n <riv-icon [class.open]=\"open\" [name]=\"'ChevronDown'\" [size]=\"24\"></riv-icon>\n <div>{{ open ? hideLabel : showLabel }}</div>\n</button>\n<div *ngIf=\"open\">\n <ng-content></ng-content>\n</div>\n", styles: [".toggle{padding:var(--size-xxsmall);display:flex;align-items:center}.toggle:hover{cursor:pointer}button{color:inherit}riv-icon{transition:transform var(--medium-transition)}riv-icon.open{transform:rotate(-180deg)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
14
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextToggleComponent, decorators: [{
|
|
15
15
|
type: Component,
|
|
16
|
-
args: [{ selector: 'riv-text-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button class=\"toggle\" type=\"button\" (click)=\"open = !open\">\n <riv-icon [class.open]=\"open\" [name]=\"'ChevronDown'\" [size]=\"24\"></riv-icon>\n <div>{{ open ? hideLabel : showLabel }}</div>\n</button>\n<div *ngIf=\"open\">\n <ng-content></ng-content>\n</div>\n", styles: [".toggle{padding:var(--size-xxsmall);display:flex;align-items:center}.toggle:hover{cursor:pointer}button{color:inherit}riv-icon{transition:transform var(--medium-transition)}riv-icon.open{transform:rotate(-180deg)}\n"] }]
|
|
16
|
+
args: [{ selector: 'riv-text-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button class=\"toggle\" type=\"button\" (click)=\"open = !open\" type=\"button\">\n <riv-icon [class.open]=\"open\" [name]=\"'ChevronDown'\" [size]=\"24\"></riv-icon>\n <div>{{ open ? hideLabel : showLabel }}</div>\n</button>\n<div *ngIf=\"open\">\n <ng-content></ng-content>\n</div>\n", styles: [".toggle{padding:var(--size-xxsmall);display:flex;align-items:center}.toggle:hover{cursor:pointer}button{color:inherit}riv-icon{transition:transform var(--medium-transition)}riv-icon.open{transform:rotate(-180deg)}\n"] }]
|
|
17
17
|
}], propDecorators: { showLabel: [{
|
|
18
18
|
type: Input
|
|
19
19
|
}], hideLabel: [{
|
|
@@ -21,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
21
21
|
}], open: [{
|
|
22
22
|
type: Input
|
|
23
23
|
}] } });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvY29udGVudC10b2dnbGUvdGV4dC10b2dnbGUvdGV4dC10b2dnbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvY29udGVudC10b2dnbGUvdGV4dC10b2dnbGUvdGV4dC10b2dnbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRMUUsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQVFFLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFHdkIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUd2QixTQUFJLEdBQVksS0FBSyxDQUFDO0tBQ3ZCOztnSEFUWSxtQkFBbUI7b0dBQW5CLG1CQUFtQixpSUNSaEMsbVNBT0E7MkZEQ2EsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQUkvQyxTQUFTO3NCQURSLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi10ZXh0LXRvZ2dsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0LXRvZ2dsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtdG9nZ2xlLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRleHRUb2dnbGVDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBzaG93TGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGhpZGVMYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgb3BlbjogYm9vbGVhbiA9IGZhbHNlO1xufVxuIiwiPGJ1dHRvbiBjbGFzcz1cInRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbiA9ICFvcGVuXCIgdHlwZT1cImJ1dHRvblwiPlxuICA8cml2LWljb24gW2NsYXNzLm9wZW5dPVwib3BlblwiIFtuYW1lXT1cIidDaGV2cm9uRG93bidcIiBbc2l6ZV09XCIyNFwiPjwvcml2LWljb24+XG4gIDxkaXY+e3sgb3BlbiA/IGhpZGVMYWJlbCA6IHNob3dMYWJlbCB9fTwvZGl2PlxuPC9idXR0b24+XG48ZGl2ICpuZ0lmPVwib3BlblwiPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -250,10 +250,10 @@ export class CalendarComponent {
|
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
253
|
-
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CalendarComponent, selector: "riv-calendar", inputs: { activeYearMonth: "activeYearMonth", displayMin: "displayMin", displayMax: "displayMax", selectableMin: "selectableMin", selectableMax: "selectableMax", omitRange: "omitRange", selectedValue: "selectedValue" }, outputs: { activeYearMonthChange: "activeYearMonthChange", dateSelect: "dateSelect" }, ngImport: i0, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [options]=\"(monthOptions$ | async) || []\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n <riv-single-select\n placeholder=\"Year...\"\n [options]=\"(yearOptions$ | async) || []\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n [class.hidden]=\"day.hidden\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch}.day:hover{background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-disabled)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}.day-wrapper.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition"] }, { kind: "component", type: i3.SingleSelectComponent, selector: "riv-single-select", inputs: ["options", "selectedOption", "filterabilityOptions", "loading", "locked", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
253
|
+
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CalendarComponent, selector: "riv-calendar", inputs: { activeYearMonth: "activeYearMonth", displayMin: "displayMin", displayMax: "displayMax", selectableMin: "selectableMin", selectableMax: "selectableMax", omitRange: "omitRange", selectedValue: "selectedValue" }, outputs: { activeYearMonthChange: "activeYearMonthChange", dateSelect: "dateSelect" }, ngImport: i0, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [options]=\"(monthOptions$ | async) || []\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n <riv-single-select\n placeholder=\"Year...\"\n [options]=\"(yearOptions$ | async) || []\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n [class.hidden]=\"day.hidden\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch}.day:hover{background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-disabled)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}.day-wrapper.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition"] }, { kind: "component", type: i3.SingleSelectComponent, selector: "riv-single-select", inputs: ["options", "selectedOption", "filterabilityOptions", "loading", "locked", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
254
254
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarComponent, decorators: [{
|
|
255
255
|
type: Component,
|
|
256
|
-
args: [{ selector: 'riv-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [options]=\"(monthOptions$ | async) || []\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n <riv-single-select\n placeholder=\"Year...\"\n [options]=\"(yearOptions$ | async) || []\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n [class.hidden]=\"day.hidden\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch}.day:hover{background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-disabled)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}.day-wrapper.hidden{display:none}\n"] }]
|
|
256
|
+
args: [{ selector: 'riv-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"controls\">\n <div>\n <ng-template #selectTrigger let-selectedOption=\"selectedOption\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ChevronDown'\"\n [iconPosition]=\"'last'\"\n type=\"button\"\n >\n {{ selectedOption.title || '...' }}\n </button>\n </ng-template>\n <riv-single-select\n placeholder=\"Month...\"\n [options]=\"(monthOptions$ | async) || []\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n <riv-single-select\n placeholder=\"Year...\"\n [options]=\"(yearOptions$ | async) || []\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"activeYearMonthChange.emit($event.date)\"\n [triggerTemplate]=\"selectTrigger\"\n ></riv-single-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n [class.hidden]=\"day.hidden\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n", styles: [".controls{display:flex;align-items:center;justify-content:space-between}.calendar{display:grid;grid-template-columns:repeat(7,calc(var(--base-grid-size) * 10));grid-auto-rows:calc(var(--base-grid-size) * 6)}.label{display:flex;justify-content:center;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy)}.day{display:flex;align-items:stretch}.day:hover{background-color:var(--surface-light-1)}.day.in-range{background-color:var(--purp-10)}.day.fade-out{background-image:linear-gradient(to right,var(--purp-10),var(--white-100))}.day.fade-in{background-image:linear-gradient(to right,var(--white-100),var(--purp-10))}.day.bleed{color:var(--type-light-disabled)}.day.rounded-ne{border-top-right-radius:var(--border-radius-medium)}.day.rounded-nw{border-top-left-radius:var(--border-radius-medium)}.day.rounded-sw{border-bottom-left-radius:var(--border-radius-medium)}.day.rounded-se{border-bottom-right-radius:var(--border-radius-medium)}.day-wrapper{flex-grow:1;display:flex;justify-content:center;align-items:center;border-radius:var(--border-radius-medium)}.day-wrapper.selected{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}.day-wrapper.today{border-radius:calc(var(--base-grid-size) * 8);border:var(--border-width) solid var(--border-light);font-weight:var(--font-weight-heavy)}.day-wrapper.hidden{display:none}\n"] }]
|
|
257
257
|
}], propDecorators: { activeYearMonth: [{
|
|
258
258
|
type: Input
|
|
259
259
|
}], displayMin: [{
|
|
@@ -277,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
277
277
|
CalendarComponent.defaultMin = timeYear.floor(timeYear.offset(new Date(), -7));
|
|
278
278
|
CalendarComponent.defaultMax = timeDay.offset(timeYear.floor(timeYear.offset(new Date(), 5)), -1);
|
|
279
279
|
})(CalendarComponent || (CalendarComponent = {}));
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFHZCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxNQUFNLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVoRCxTQUFTLGdCQUFnQixDQUFDLElBQVU7SUFDbEMsT0FBTyxRQUFRLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBb0JELDZFQUE2RTtBQUM3RSwyQkFBMkI7QUFPM0IsTUFBTSxPQUFPLGlCQUFpQjtJQU45QjtRQU9tQixxQkFBZ0Is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IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lRGF5cyxcbiAgdGltZU1vbnRoLFxuICB0aW1lTW9udGhzLFxuICB0aW1lU3VuZGF5LFxuICB0aW1lWWVhcixcbiAgdGltZVllYXJzLFxufSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7IHRpbWVGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2luZ2xlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5cbmNvbnN0IG1vbnRoRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJUInKTtcbmNvbnN0IHllYXJGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KCclWScpO1xuY29uc3QgZGF5Rm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJWUnKTtcbmNvbnN0IHdlZWtkYXlOdW1iZXJGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KCcldycpO1xuXG5mdW5jdGlvbiBnZXRXZWVrZGF5TnVtYmVyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICByZXR1cm4gcGFyc2VJbnQod2Vla2RheU51bWJlckZvcm1hdHRlcihkYXRlKSk7XG59XG5cbnR5cGUgRGF0ZU9wdGlvbiA9IFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb24gJiB7IGRhdGU6IERhdGUgfTtcblxudHlwZSBDYWxlbmRhckRhdGUgPSB7XG4gIGRhdGU6IERhdGU7XG4gIGRpc3BsYXk6IHN0cmluZztcbiAgZmFkZUluOiBib29sZWFuO1xuICBmYWRlT3V0OiBib29sZWFuO1xuICBoaWRkZW46IGJvb2xlYW47XG4gIGluQ3VycmVudE1vbnRoOiBib29sZWFuO1xuICBpblJhbmdlOiBib29sZWFuO1xuICByb3VuZGVkTmU6IGJvb2xlYW47XG4gIHJvdW5kZWROdzogYm9vbGVhbjtcbiAgcm91bmRlZFNlOiBib29sZWFuO1xuICByb3VuZGVkU3c6IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICB0b2RheTogYm9vbGVhbjtcbn07XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVZZWFyTW9udGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihuZXcgRGF0ZSgpKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhY3RpdmVZZWFyTW9udGgodjogRGF0ZSkge1xuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgYWN0aXZlWWVhck1vbnRoKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVllYXJNb250aCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU1pbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KFxuICAgIENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNaW4sXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheU1pbih2OiBEYXRlKSB7XG4gICAgdGhpcy5kaXNwbGF5TWluJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgZGlzcGxheU1pbigpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TWluJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5TWF4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4oXG4gICAgQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1heCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNwbGF5TWF4KHY6IERhdGUpIHtcbiAgICB0aGlzLmRpc3BsYXlNYXgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5TWF4KCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNYXgkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGFibGVNaW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0YWJsZU1pbih2OiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0YWJsZU1pbigpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlTWluJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RhYmxlTWF4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZSB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGFibGVNYXgodjogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGFibGVNYXgoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZU1heCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb21pdFJhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8W0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgb21pdFJhbmdlKHY6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub21pdFJhbmdlJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgb21pdFJhbmdlKCk6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub21pdFJhbmdlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZFZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgRGF0ZSB8IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRWYWx1ZSh2OiBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZSgpOiBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZhbHVlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcmVhZG9ubHkgeWVhck9wdGlvbnMkOiBPYnNlcnZhYmxlPERhdGVPcHRpb25bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRpc3BsYXlNaW4kLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNYXgkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBkaXNwbGF5TWluLFxuICAgICAgICBkaXNwbGF5TWF4LFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbjogRGF0ZSA9IHNlbGVjdGFibGVNaW4gPz8gZGlzcGxheU1pbjtcbiAgICAgICAgY29uc3QgbWF4OiBEYXRlID0gc2VsZWN0YWJsZU1heCA/PyBkaXNwbGF5TWF4O1xuICAgICAgICByZXR1cm4gdGltZVllYXJzKHRpbWVZZWFyLmZsb29yKGRpc3BsYXlNaW4pLCBkaXNwbGF5TWF4KS5tYXAoXG4gICAgICAgICAgZmxvb3JlZFllYXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICBmbG9vcmVkWWVhci5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogeWVhci5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHRpdGxlOiB5ZWFyRm9ybWF0dGVyKHllYXIpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICB5ZWFyLmdldEZ1bGxZZWFyKCkgPCBtaW4uZ2V0RnVsbFllYXIoKSB8fFxuICAgICAgICAgICAgICAgIHllYXIuZ2V0RnVsbFllYXIoKSA+IG1heC5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBkYXRlOiB5ZWFyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRZZWFyT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMueWVhck9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW3llYXJPcHRpb25zLCBhY3RpdmVZZWFyTW9udGhdKSA9PlxuICAgICAgICB5ZWFyT3B0aW9ucy5maW5kKFxuICAgICAgICAgIHkgPT4geS5pZCA9PT0gYWN0aXZlWWVhck1vbnRoLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSxcbiAgICAgICAgKSB8fCBudWxsLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBtb250aE9wdGlvbnMkOiBPYnNlcnZhYmxlPERhdGVPcHRpb25bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gICAgdGhpcy5kaXNwbGF5TWluJCxcbiAgICB0aGlzLmRpc3BsYXlNYXgkLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICAgIGRpc3BsYXlNaW4sXG4gICAgICAgIGRpc3BsYXlNYXgsXG4gICAgICAgIHNlbGVjdGFibGVNaW4sXG4gICAgICAgIHNlbGVjdGFibGVNYXgsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHNlbGVjdGFibGVNaW4gPz8gZGlzcGxheU1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gc2VsZWN0YWJsZU1heCA/PyBkaXNwbGF5TWF4O1xuICAgICAgICByZXR1cm4gdGltZU1vbnRocyhcbiAgICAgICAgICB0aW1lWWVhci5mbG9vcihhY3RpdmVZZWFyTW9udGgpLFxuICAgICAgICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChhY3RpdmVZZWFyTW9udGgsIDEpKSxcbiAgICAgICAgKS5tYXAobW9udGggPT4gKHtcbiAgICAgICAgICBpZDogbW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICAgIHRpdGxlOiBtb250aEZvcm1hdHRlcihtb250aCksXG4gICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICBtb250aC52YWx1ZU9mKCkgPCBtaW4udmFsdWVPZigpIHx8IG1vbnRoLnZhbHVlT2YoKSA+IG1heC52YWx1ZU9mKCksXG4gICAgICAgICAgZGF0ZTogbW9udGgsXG4gICAgICAgIH0pKTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkTW9udGhPcHRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5tb250aE9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW21vbnRoT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgbW9udGhPcHRpb25zLmZpbmQoXG4gICAgICAgICAgbSA9PiBtLmlkID09PSBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICApIHx8IG51bGwsXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHByZXZpb3VzTW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNaW4sIHNlbGVjdGFibGVNaW5dKSA9PiB7XG4gICAgICBjb25zdCBtaW46IERhdGUgPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRpbWVNb250aC5mbG9vcih0aW1lTW9udGgub2Zmc2V0KHllYXJNb250aCwgLTEpKTtcbiAgICAgIGlmIChwcmV2aW91cy52YWx1ZU9mKCkgPCBtaW4udmFsdWVPZigpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBuZXh0TW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNYXgsIHNlbGVjdGFibGVNYXhdKSA9PiB7XG4gICAgICBjb25zdCBtYXg6IERhdGUgPSBzZWxlY3RhYmxlTWF4ID8/IGRpc3BsYXlNYXg7XG4gICAgICBjb25zdCBuZXh0ID0gdGltZU1vbnRoLmZsb29yKHRpbWVNb250aC5vZmZzZXQoeWVhck1vbnRoLCAxKSk7XG4gICAgICBpZiAobmV4dC52YWx1ZU9mKCkgPiBtYXgudmFsdWVPZigpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZXNJblNlbGVjdGVkUmFuZ2UkOiBPYnNlcnZhYmxlPERhdGVbXT4gPVxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQucGlwZShcbiAgICAgIG1hcChzZWxlY3RlZFZhbHVlID0+IHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFZhbHVlKSByZXR1cm4gW107XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIFtzZWxlY3RlZFZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHRpbWVEYXlzKFxuICAgICAgICAgIHRpbWVEYXkuZmxvb3Ioc2VsZWN0ZWRWYWx1ZVswXSksXG4gICAgICAgICAgdGltZURheS5mbG9vcih0aW1lRGF5Lm9mZnNldChzZWxlY3RlZFZhbHVlWzFdLCAxKSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICAgKTtcblxuICByZWFkb25seSBkYXRlcyQ6IE9ic2VydmFibGU8Q2FsZW5kYXJEYXRlW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQsXG4gICAgdGhpcy5kYXRlc0luU2VsZWN0ZWRSYW5nZSQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNYXgkLFxuICAgIHRoaXMub21pdFJhbmdlJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICAgIHNlbGVjdGVkVmFsdWUsXG4gICAgICAgIGRhdGVzSW5TZWxlY3RlZFJhbmdlLFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgICBvbWl0UmFuZ2UsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZXMgPSB0aW1lRGF5cyhcbiAgICAgICAgICB0aW1lU3VuZGF5LmZsb29yKGFjdGl2ZVllYXJNb250aCksXG4gICAgICAgICAgdGltZVN1bmRheS5jZWlsKHRpbWVNb250aC5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG1pbkNhbGVuZGFyRGF0ZSA9IGNhbGVuZGFyRGF0ZXNbMF07XG4gICAgICAgIGNvbnN0IG1heENhbGVuZGFyRGF0ZSA9IGNhbGVuZGFyRGF0ZXNbY2FsZW5kYXJEYXRlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMgPSBuZXcgTWFwPG51bWJlciwgW251bWJlciwgbnVtYmVyXT4oKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlID0gZGF0ZXNJblNlbGVjdGVkUmFuZ2UuZmlsdGVyKFxuICAgICAgICAgIHNlbGVjdGVkID0+XG4gICAgICAgICAgICBzZWxlY3RlZC52YWx1ZU9mKCkgPj0gbWluQ2FsZW5kYXJEYXRlLnZhbHVlT2YoKSAmJlxuICAgICAgICAgICAgc2VsZWN0ZWQudmFsdWVPZigpIDw9IG1heENhbGVuZGFyRGF0ZS52YWx1ZU9mKCkgJiZcbiAgICAgICAgICAgIChzZWxlY3RhYmxlTWluXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWQudmFsdWVPZigpID49IHNlbGVjdGFibGVNaW4udmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICAgICAgIChzZWxlY3RhYmxlTWF4XG4gICAgICAgICAgICAgID8gc2VsZWN0ZWQudmFsdWVPZigpIDw9IHNlbGVjdGFibGVNYXgudmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgPyBzZWxlY3RlZC52YWx1ZU9mKCkgPCBvbWl0UmFuZ2VbMF0udmFsdWVPZigpIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQudmFsdWVPZigpID4gb21pdFJhbmdlWzFdLnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IHRydWUpLFxuICAgICAgICApO1xuICAgICAgICBpZiAodmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZpc2libGVTZWxlY3RlZERhdGVPZmZzZXQgPSBnZXRXZWVrZGF5TnVtYmVyKFxuICAgICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlWzBdLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLmZvckVhY2goKHNlbGVjdGVkLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB4ID0gZ2V0V2Vla2RheU51bWJlcihzZWxlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gTWF0aC5mbG9vcigoaSArIGZpcnN0VmlzaWJsZVNlbGVjdGVkRGF0ZU9mZnNldCkgLyA3KTtcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzLnNldChzZWxlY3RlZC52YWx1ZU9mKCksIFt4LCB5XSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VyaWFsaXplQ29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcge1xuICAgICAgICAgIHJldHVybiBjb29yZGluYXRlcy5qb2luKCc6Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgWy4uLnNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzLnZhbHVlcygpXS5tYXAoc2VyaWFsaXplQ29vcmRpbmF0ZXMpLFxuICAgICAgICApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldFJvdW5kZWRDb3JuZXJzKGRhdGU6IERhdGUpOiB7XG4gICAgICAgICAgbnc6IGJvb2xlYW47XG4gICAgICAgICAgbmU6IGJvb2xlYW47XG4gICAgICAgICAgc2U6IGJvb2xlYW47XG4gICAgICAgICAgc3c6IGJvb2xlYW47XG4gICAgICAgIH0ge1xuICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMuZ2V0KGRhdGUudmFsdWVPZigpKTtcbiAgICAgICAgICBpZiAoIWNvb3JkaW5hdGVzKVxuICAgICAgICAgICAgcmV0dXJuIHsgbnc6IGZhbHNlLCBuZTogZmFsc2UsIHNlOiBmYWxzZSwgc3c6IGZhbHNlIH07XG4gICAgICAgICAgY29uc3QgW3gsIHldID0gY29vcmRpbmF0ZXM7XG4gICAgICAgICAgY29uc3QgdG9wID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3gsIHkgLSAxXSksXG4gICAgICAgICAgICByaWdodCA9IHNlcmlhbGl6ZUNvb3JkaW5hdGVzKFt4ICsgMSwgeV0pLFxuICAgICAgICAgICAgYm90dG9tID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3gsIHkgKyAxXSksXG4gICAgICAgICAgICBsZWZ0ID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3ggLSAxLCB5XSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG53OlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHRvcCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhsZWZ0KSxcbiAgICAgICAgICAgIG5lOlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHRvcCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhyaWdodCksXG4gICAgICAgICAgICBzZTpcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhyaWdodCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhib3R0b20pLFxuICAgICAgICAgICAgc3c6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMobGVmdCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhib3R0b20pLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VWYWx1ZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZS5tYXAoc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudmFsdWVPZigpKSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0b2RheSA9IHRpbWVEYXkuZmxvb3IobmV3IERhdGUoKSk7XG5cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyRGF0ZXMubWFwKGRhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgbncsIG5lLCBzZSwgc3cgfSA9IGdldFJvdW5kZWRDb3JuZXJzKGRhdGUpO1xuICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgIGNvbnN0IGluUmFuZ2UgPSB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VWYWx1ZXMuaGFzKGRhdGVWYWx1ZSk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlXG4gICAgICAgICAgICA/IHNlbGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgID8gZGF0ZVZhbHVlID09PSBzZWxlY3RlZFZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IGRhdGVWYWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVswXS52YWx1ZU9mKCkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09IHNlbGVjdGVkVmFsdWVbMV0udmFsdWVPZigpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZGlzcGxheTogZGF5Rm9ybWF0dGVyKGRhdGUpLFxuICAgICAgICAgICAgZmFkZUluOlxuICAgICAgICAgICAgICBpblJhbmdlICYmXG4gICAgICAgICAgICAgIChkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICBtaW5DYWxlbmRhckRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZU1pbj8udmFsdWVPZigpID8/IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgZGF0ZVZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICAgICAgICA/IHRpbWVEYXkub2Zmc2V0KG9taXRSYW5nZVsxXSwgMSkudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogLUluZmluaXR5KSksXG4gICAgICAgICAgICBmYWRlT3V0OlxuICAgICAgICAgICAgICBpblJhbmdlICYmXG4gICAgICAgICAgICAgIChkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICBtYXhDYWxlbmRhckRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZU1heD8udmFsdWVPZigpID8/IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgICAob21pdFJhbmdlXG4gICAgICAgICAgICAgICAgICAgID8gdGltZURheS5vZmZzZXQob21pdFJhbmdlWzBdLCAtMSkudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHkpKSxcbiAgICAgICAgICAgIGhpZGRlbjpcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlIDwgKHNlbGVjdGFibGVNaW4/LnZhbHVlT2YoKSA/PyAtSW5maW5pdHkpIHx8XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA+IChzZWxlY3RhYmxlTWF4Py52YWx1ZU9mKCkgPz8gSW5maW5pdHkpIHx8XG4gICAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgICA/IG9taXRSYW5nZVswXS52YWx1ZU9mKCkgPD0gZGF0ZVZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPD0gb21pdFJhbmdlWzFdLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIDogZmFsc2UpLFxuICAgICAgICAgICAgaW5DdXJyZW50TW9udGg6XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA+PSBhY3RpdmVZZWFyTW9udGgudmFsdWVPZigpICYmXG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA8IHRpbWVNb250aC5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKS52YWx1ZU9mKCksXG4gICAgICAgICAgICBpblJhbmdlLFxuICAgICAgICAgICAgcm91bmRlZE5lOiBuZSxcbiAgICAgICAgICAgIHJvdW5kZWROdzogbncsXG4gICAgICAgICAgICByb3VuZGVkU2U6IHNlLFxuICAgICAgICAgICAgcm91bmRlZFN3OiBzdyxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgdG9kYXk6IGRhdGVWYWx1ZSA9PT0gdG9kYXkudmFsdWVPZigpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgc2VsZWN0RGF5KGRheTogQ2FsZW5kYXJEYXRlKSB7XG4gICAgaWYgKCFkYXkuaW5DdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQodGltZU1vbnRoLmZsb29yKGRheS5kYXRlKSk7XG4gICAgfVxuICAgIHRoaXMuZGF0ZVNlbGVjdC5lbWl0KGRheS5kYXRlKTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBhY3RpdmVZZWFyTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGRhdGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FsZW5kYXJDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1pbiA9IHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCAtNykpO1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1heCA9IHRpbWVEYXkub2Zmc2V0KFxuICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCA1KSksXG4gICAgLTEsXG4gICk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbHNcIj5cbiAgPGRpdj5cbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdFRyaWdnZXIgbGV0LXNlbGVjdGVkT3B0aW9uPVwic2VsZWN0ZWRPcHRpb25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcml2QnV0dG9uXG4gICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgW2ljb25dPVwiJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ2xhc3QnXCJcbiAgICAgID5cbiAgICAgICAge3sgc2VsZWN0ZWRPcHRpb24udGl0bGUgfHwgJy4uLicgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgICBwbGFjZWhvbGRlcj1cIk1vbnRoLi4uXCJcbiAgICAgIFtvcHRpb25zXT1cIihtb250aE9wdGlvbnMkIHwgYXN5bmMpIHx8IFtdXCJcbiAgICAgIFtzZWxlY3RlZE9wdGlvbl09XCJzZWxlY3RlZE1vbnRoT3B0aW9uJCB8IGFzeW5jXCJcbiAgICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCgkZXZlbnQuZGF0ZSlcIlxuICAgICAgW3RyaWdnZXJUZW1wbGF0ZV09XCJzZWxlY3RUcmlnZ2VyXCJcbiAgICA+PC9yaXYtc2luZ2xlLXNlbGVjdD5cbiAgICA8cml2LXNpbmdsZS1zZWxlY3RcbiAgICAgIHBsYWNlaG9sZGVyPVwiWWVhci4uLlwiXG4gICAgICBbb3B0aW9uc109XCIoeWVhck9wdGlvbnMkIHwgYXN5bmMpIHx8IFtdXCJcbiAgICAgIFtzZWxlY3RlZE9wdGlvbl09XCJzZWxlY3RlZFllYXJPcHRpb24kIHwgYXN5bmNcIlxuICAgICAgKHNlbGVjdGVkT3B0aW9uQ2hhbmdlKT1cImFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KCRldmVudC5kYXRlKVwiXG4gICAgICBbdHJpZ2dlclRlbXBsYXRlXT1cInNlbGVjdFRyaWdnZXJcIlxuICAgID48L3Jpdi1zaW5nbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwieyBwcmV2OiBwcmV2aW91c01vbnRoJCB8IGFzeW5jLCBuZXh0OiBuZXh0TW9udGgkIHwgYXN5bmMgfTsgbGV0IHZtXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIHJpdkJ1dHRvblxuICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgIFtpY29uXT1cIidBcnJvd0xlZnQnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhdm0ucHJldlwiXG4gICAgICAoY2xpY2spPVwidm0ucHJldiA/IGFjdGl2ZVllYXJNb250aENoYW5nZS5lbWl0KHZtLnByZXYpIDogbnVsbFwiXG4gICAgPjwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHJpdkJ1dHRvblxuICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgIFtpY29uXT1cIidBcnJvd1JpZ2h0J1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZtLm5leHRcIlxuICAgICAgKGNsaWNrKT1cInZtLm5leHQgPyBhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh2bS5uZXh0KSA6IG51bGxcIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYWxlbmRhclwiPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+U3U8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5Nbzwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlR1PC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+V2U8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5UaDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkZyPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+U2E8L3NwYW4+XG4gIDxidXR0b25cbiAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGRhdGVzJCB8IGFzeW5jXCJcbiAgICBjbGFzcz1cImRheVwiXG4gICAgW2Rpc2FibGVkXT1cImRheS5oaWRkZW5cIlxuICAgIFtjbGFzcy5ibGVlZF09XCIhZGF5LmluQ3VycmVudE1vbnRoXCJcbiAgICBbY2xhc3MuZmFkZS1pbl09XCJkYXkuZmFkZUluXCJcbiAgICBbY2xhc3MuZmFkZS1vdXRdPVwiZGF5LmZhZGVPdXRcIlxuICAgIFtjbGFzcy5pbi1yYW5nZV09XCJkYXkuaW5SYW5nZVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtbmVdPVwiZGF5LnJvdW5kZWROZVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtbnddPVwiZGF5LnJvdW5kZWROd1wiXG4gICAgW2NsYXNzLnJvdW5kZWQtc2VdPVwiZGF5LnJvdW5kZWRTZVwiXG4gICAgW2NsYXNzLnJvdW5kZWQtc3ddPVwiZGF5LnJvdW5kZWRTd1wiXG4gICAgKGNsaWNrKT1cInNlbGVjdERheShkYXkpXCJcbiAgPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImRheS13cmFwcGVyXCJcbiAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkYXkuc2VsZWN0ZWRcIlxuICAgICAgW2NsYXNzLnRvZGF5XT1cImRheS50b2RheVwiXG4gICAgICBbY2xhc3MuaGlkZGVuXT1cImRheS5oaWRkZW5cIlxuICAgID5cbiAgICAgIHt7IGRheS5kaXNwbGF5IH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsR0FDVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFHZCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxNQUFNLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVoRCxTQUFTLGdCQUFnQixDQUFDLElBQVU7SUFDbEMsT0FBTyxRQUFRLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBb0JELDZFQUE2RTtBQUM3RSwyQkFBMkI7QUFPM0IsTUFBTSxPQUFPLGlCQUFpQjtJQU45QjtRQU9tQixxQkFBZ0Is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IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lRGF5cyxcbiAgdGltZU1vbnRoLFxuICB0aW1lTW9udGhzLFxuICB0aW1lU3VuZGF5LFxuICB0aW1lWWVhcixcbiAgdGltZVllYXJzLFxufSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7IHRpbWVGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2luZ2xlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudCc7XG5cbmNvbnN0IG1vbnRoRm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJUInKTtcbmNvbnN0IHllYXJGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KCclWScpO1xuY29uc3QgZGF5Rm9ybWF0dGVyID0gdGltZUZvcm1hdCgnJWUnKTtcbmNvbnN0IHdlZWtkYXlOdW1iZXJGb3JtYXR0ZXIgPSB0aW1lRm9ybWF0KCcldycpO1xuXG5mdW5jdGlvbiBnZXRXZWVrZGF5TnVtYmVyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICByZXR1cm4gcGFyc2VJbnQod2Vla2RheU51bWJlckZvcm1hdHRlcihkYXRlKSk7XG59XG5cbnR5cGUgRGF0ZU9wdGlvbiA9IFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb24gJiB7IGRhdGU6IERhdGUgfTtcblxudHlwZSBDYWxlbmRhckRhdGUgPSB7XG4gIGRhdGU6IERhdGU7XG4gIGRpc3BsYXk6IHN0cmluZztcbiAgZmFkZUluOiBib29sZWFuO1xuICBmYWRlT3V0OiBib29sZWFuO1xuICBoaWRkZW46IGJvb2xlYW47XG4gIGluQ3VycmVudE1vbnRoOiBib29sZWFuO1xuICBpblJhbmdlOiBib29sZWFuO1xuICByb3VuZGVkTmU6IGJvb2xlYW47XG4gIHJvdW5kZWROdzogYm9vbGVhbjtcbiAgcm91bmRlZFNlOiBib29sZWFuO1xuICByb3VuZGVkU3c6IGJvb2xlYW47XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICB0b2RheTogYm9vbGVhbjtcbn07XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVZZWFyTW9udGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihuZXcgRGF0ZSgpKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhY3RpdmVZZWFyTW9udGgodjogRGF0ZSkge1xuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgYWN0aXZlWWVhck1vbnRoKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVllYXJNb250aCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU1pbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KFxuICAgIENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNaW4sXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheU1pbih2OiBEYXRlKSB7XG4gICAgdGhpcy5kaXNwbGF5TWluJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgZGlzcGxheU1pbigpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TWluJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5TWF4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZT4oXG4gICAgQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1heCxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNwbGF5TWF4KHY6IERhdGUpIHtcbiAgICB0aGlzLmRpc3BsYXlNYXgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5TWF4KCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNYXgkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGFibGVNaW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0YWJsZU1pbih2OiBEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0YWJsZU1pbigpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlTWluJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RhYmxlTWF4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0ZSB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGFibGVNYXgodjogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2VsZWN0YWJsZU1heCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGFibGVNYXgoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZU1heCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb21pdFJhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8W0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWQsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgb21pdFJhbmdlKHY6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMub21pdFJhbmdlJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgb21pdFJhbmdlKCk6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub21pdFJhbmdlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZFZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgRGF0ZSB8IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRWYWx1ZSh2OiBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZSgpOiBEYXRlIHwgW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZhbHVlJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcmVhZG9ubHkgeWVhck9wdGlvbnMkOiBPYnNlcnZhYmxlPERhdGVPcHRpb25bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRpc3BsYXlNaW4kLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNYXgkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBkaXNwbGF5TWluLFxuICAgICAgICBkaXNwbGF5TWF4LFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbjogRGF0ZSA9IHNlbGVjdGFibGVNaW4gPz8gZGlzcGxheU1pbjtcbiAgICAgICAgY29uc3QgbWF4OiBEYXRlID0gc2VsZWN0YWJsZU1heCA/PyBkaXNwbGF5TWF4O1xuICAgICAgICByZXR1cm4gdGltZVllYXJzKHRpbWVZZWFyLmZsb29yKGRpc3BsYXlNaW4pLCBkaXNwbGF5TWF4KS5tYXAoXG4gICAgICAgICAgZmxvb3JlZFllYXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICBmbG9vcmVkWWVhci5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogeWVhci5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHRpdGxlOiB5ZWFyRm9ybWF0dGVyKHllYXIpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICB5ZWFyLmdldEZ1bGxZZWFyKCkgPCBtaW4uZ2V0RnVsbFllYXIoKSB8fFxuICAgICAgICAgICAgICAgIHllYXIuZ2V0RnVsbFllYXIoKSA+IG1heC5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICBkYXRlOiB5ZWFyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRZZWFyT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMueWVhck9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW3llYXJPcHRpb25zLCBhY3RpdmVZZWFyTW9udGhdKSA9PlxuICAgICAgICB5ZWFyT3B0aW9ucy5maW5kKFxuICAgICAgICAgIHkgPT4geS5pZCA9PT0gYWN0aXZlWWVhck1vbnRoLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSxcbiAgICAgICAgKSB8fCBudWxsLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBtb250aE9wdGlvbnMkOiBPYnNlcnZhYmxlPERhdGVPcHRpb25bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFjdGl2ZVllYXJNb250aCQsXG4gICAgdGhpcy5kaXNwbGF5TWluJCxcbiAgICB0aGlzLmRpc3BsYXlNYXgkLFxuICAgIHRoaXMuc2VsZWN0YWJsZU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICAgIGRpc3BsYXlNaW4sXG4gICAgICAgIGRpc3BsYXlNYXgsXG4gICAgICAgIHNlbGVjdGFibGVNaW4sXG4gICAgICAgIHNlbGVjdGFibGVNYXgsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHNlbGVjdGFibGVNaW4gPz8gZGlzcGxheU1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gc2VsZWN0YWJsZU1heCA/PyBkaXNwbGF5TWF4O1xuICAgICAgICByZXR1cm4gdGltZU1vbnRocyhcbiAgICAgICAgICB0aW1lWWVhci5mbG9vcihhY3RpdmVZZWFyTW9udGgpLFxuICAgICAgICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChhY3RpdmVZZWFyTW9udGgsIDEpKSxcbiAgICAgICAgKS5tYXAobW9udGggPT4gKHtcbiAgICAgICAgICBpZDogbW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICAgIHRpdGxlOiBtb250aEZvcm1hdHRlcihtb250aCksXG4gICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICBtb250aC52YWx1ZU9mKCkgPCBtaW4udmFsdWVPZigpIHx8IG1vbnRoLnZhbHVlT2YoKSA+IG1heC52YWx1ZU9mKCksXG4gICAgICAgICAgZGF0ZTogbW9udGgsXG4gICAgICAgIH0pKTtcbiAgICAgIH0sXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkTW9udGhPcHRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5tb250aE9wdGlvbnMkLFxuICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW21vbnRoT3B0aW9ucywgYWN0aXZlWWVhck1vbnRoXSkgPT5cbiAgICAgICAgbW9udGhPcHRpb25zLmZpbmQoXG4gICAgICAgICAgbSA9PiBtLmlkID09PSBhY3RpdmVZZWFyTW9udGguZ2V0TW9udGgoKS50b1N0cmluZygpLFxuICAgICAgICApIHx8IG51bGwsXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHByZXZpb3VzTW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1pbiQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNaW4sIHNlbGVjdGFibGVNaW5dKSA9PiB7XG4gICAgICBjb25zdCBtaW46IERhdGUgPSBzZWxlY3RhYmxlTWluID8/IGRpc3BsYXlNaW47XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRpbWVNb250aC5mbG9vcih0aW1lTW9udGgub2Zmc2V0KHllYXJNb250aCwgLTEpKTtcbiAgICAgIGlmIChwcmV2aW91cy52YWx1ZU9mKCkgPCBtaW4udmFsdWVPZigpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9KSxcbiAgKTtcblxuICByZWFkb25seSBuZXh0TW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuZGlzcGxheU1heCQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWF4JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt5ZWFyTW9udGgsIGRpc3BsYXlNYXgsIHNlbGVjdGFibGVNYXhdKSA9PiB7XG4gICAgICBjb25zdCBtYXg6IERhdGUgPSBzZWxlY3RhYmxlTWF4ID8/IGRpc3BsYXlNYXg7XG4gICAgICBjb25zdCBuZXh0ID0gdGltZU1vbnRoLmZsb29yKHRpbWVNb250aC5vZmZzZXQoeWVhck1vbnRoLCAxKSk7XG4gICAgICBpZiAobmV4dC52YWx1ZU9mKCkgPiBtYXgudmFsdWVPZigpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZXNJblNlbGVjdGVkUmFuZ2UkOiBPYnNlcnZhYmxlPERhdGVbXT4gPVxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQucGlwZShcbiAgICAgIG1hcChzZWxlY3RlZFZhbHVlID0+IHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFZhbHVlKSByZXR1cm4gW107XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIFtzZWxlY3RlZFZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHRpbWVEYXlzKFxuICAgICAgICAgIHRpbWVEYXkuZmxvb3Ioc2VsZWN0ZWRWYWx1ZVswXSksXG4gICAgICAgICAgdGltZURheS5mbG9vcih0aW1lRGF5Lm9mZnNldChzZWxlY3RlZFZhbHVlWzFdLCAxKSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICAgKTtcblxuICByZWFkb25seSBkYXRlcyQ6IE9ic2VydmFibGU8Q2FsZW5kYXJEYXRlW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5hY3RpdmVZZWFyTW9udGgkLFxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQsXG4gICAgdGhpcy5kYXRlc0luU2VsZWN0ZWRSYW5nZSQsXG4gICAgdGhpcy5zZWxlY3RhYmxlTWluJCxcbiAgICB0aGlzLnNlbGVjdGFibGVNYXgkLFxuICAgIHRoaXMub21pdFJhbmdlJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICBhY3RpdmVZZWFyTW9udGgsXG4gICAgICAgIHNlbGVjdGVkVmFsdWUsXG4gICAgICAgIGRhdGVzSW5TZWxlY3RlZFJhbmdlLFxuICAgICAgICBzZWxlY3RhYmxlTWluLFxuICAgICAgICBzZWxlY3RhYmxlTWF4LFxuICAgICAgICBvbWl0UmFuZ2UsXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZXMgPSB0aW1lRGF5cyhcbiAgICAgICAgICB0aW1lU3VuZGF5LmZsb29yKGFjdGl2ZVllYXJNb250aCksXG4gICAgICAgICAgdGltZVN1bmRheS5jZWlsKHRpbWVNb250aC5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG1pbkNhbGVuZGFyRGF0ZSA9IGNhbGVuZGFyRGF0ZXNbMF07XG4gICAgICAgIGNvbnN0IG1heENhbGVuZGFyRGF0ZSA9IGNhbGVuZGFyRGF0ZXNbY2FsZW5kYXJEYXRlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMgPSBuZXcgTWFwPG51bWJlciwgW251bWJlciwgbnVtYmVyXT4oKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlID0gZGF0ZXNJblNlbGVjdGVkUmFuZ2UuZmlsdGVyKFxuICAgICAgICAgIHNlbGVjdGVkID0+XG4gICAgICAgICAgICBzZWxlY3RlZC52YWx1ZU9mKCkgPj0gbWluQ2FsZW5kYXJEYXRlLnZhbHVlT2YoKSAmJlxuICAgICAgICAgICAgc2VsZWN0ZWQudmFsdWVPZigpIDw9IG1heENhbGVuZGFyRGF0ZS52YWx1ZU9mKCkgJiZcbiAgICAgICAgICAgIChzZWxlY3RhYmxlTWluXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWQudmFsdWVPZigpID49IHNlbGVjdGFibGVNaW4udmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICAgICAgIChzZWxlY3RhYmxlTWF4XG4gICAgICAgICAgICAgID8gc2VsZWN0ZWQudmFsdWVPZigpIDw9IHNlbGVjdGFibGVNYXgudmFsdWVPZigpXG4gICAgICAgICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgPyBzZWxlY3RlZC52YWx1ZU9mKCkgPCBvbWl0UmFuZ2VbMF0udmFsdWVPZigpIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQudmFsdWVPZigpID4gb21pdFJhbmdlWzFdLnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IHRydWUpLFxuICAgICAgICApO1xuICAgICAgICBpZiAodmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZpc2libGVTZWxlY3RlZERhdGVPZmZzZXQgPSBnZXRXZWVrZGF5TnVtYmVyKFxuICAgICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlWzBdLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlLmZvckVhY2goKHNlbGVjdGVkLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB4ID0gZ2V0V2Vla2RheU51bWJlcihzZWxlY3RlZCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gTWF0aC5mbG9vcigoaSArIGZpcnN0VmlzaWJsZVNlbGVjdGVkRGF0ZU9mZnNldCkgLyA3KTtcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzLnNldChzZWxlY3RlZC52YWx1ZU9mKCksIFt4LCB5XSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VyaWFsaXplQ29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcge1xuICAgICAgICAgIHJldHVybiBjb29yZGluYXRlcy5qb2luKCc6Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgWy4uLnNlbGVjdGVkRGF0ZUNvb3JkaW5hdGVzLnZhbHVlcygpXS5tYXAoc2VyaWFsaXplQ29vcmRpbmF0ZXMpLFxuICAgICAgICApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGdldFJvdW5kZWRDb3JuZXJzKGRhdGU6IERhdGUpOiB7XG4gICAgICAgICAgbnc6IGJvb2xlYW47XG4gICAgICAgICAgbmU6IGJvb2xlYW47XG4gICAgICAgICAgc2U6IGJvb2xlYW47XG4gICAgICAgICAgc3c6IGJvb2xlYW47XG4gICAgICAgIH0ge1xuICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gc2VsZWN0ZWREYXRlQ29vcmRpbmF0ZXMuZ2V0KGRhdGUudmFsdWVPZigpKTtcbiAgICAgICAgICBpZiAoIWNvb3JkaW5hdGVzKVxuICAgICAgICAgICAgcmV0dXJuIHsgbnc6IGZhbHNlLCBuZTogZmFsc2UsIHNlOiBmYWxzZSwgc3c6IGZhbHNlIH07XG4gICAgICAgICAgY29uc3QgW3gsIHldID0gY29vcmRpbmF0ZXM7XG4gICAgICAgICAgY29uc3QgdG9wID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3gsIHkgLSAxXSksXG4gICAgICAgICAgICByaWdodCA9IHNlcmlhbGl6ZUNvb3JkaW5hdGVzKFt4ICsgMSwgeV0pLFxuICAgICAgICAgICAgYm90dG9tID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3gsIHkgKyAxXSksXG4gICAgICAgICAgICBsZWZ0ID0gc2VyaWFsaXplQ29vcmRpbmF0ZXMoW3ggLSAxLCB5XSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG53OlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHRvcCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhsZWZ0KSxcbiAgICAgICAgICAgIG5lOlxuICAgICAgICAgICAgICAhdmlzaWJsZURhdGVzSW5TZWxlY3RlZFJhbmdlQ29vcmRpbmF0ZXMuaGFzKHRvcCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhyaWdodCksXG4gICAgICAgICAgICBzZTpcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhyaWdodCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhib3R0b20pLFxuICAgICAgICAgICAgc3c6XG4gICAgICAgICAgICAgICF2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VDb29yZGluYXRlcy5oYXMobGVmdCkgJiZcbiAgICAgICAgICAgICAgIXZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZUNvb3JkaW5hdGVzLmhhcyhib3R0b20pLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VWYWx1ZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIHZpc2libGVEYXRlc0luU2VsZWN0ZWRSYW5nZS5tYXAoc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudmFsdWVPZigpKSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0b2RheSA9IHRpbWVEYXkuZmxvb3IobmV3IERhdGUoKSk7XG5cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyRGF0ZXMubWFwKGRhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgbncsIG5lLCBzZSwgc3cgfSA9IGdldFJvdW5kZWRDb3JuZXJzKGRhdGUpO1xuICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgIGNvbnN0IGluUmFuZ2UgPSB2aXNpYmxlRGF0ZXNJblNlbGVjdGVkUmFuZ2VWYWx1ZXMuaGFzKGRhdGVWYWx1ZSk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlXG4gICAgICAgICAgICA/IHNlbGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgID8gZGF0ZVZhbHVlID09PSBzZWxlY3RlZFZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgICA6IGRhdGVWYWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZVswXS52YWx1ZU9mKCkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09IHNlbGVjdGVkVmFsdWVbMV0udmFsdWVPZigpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZGlzcGxheTogZGF5Rm9ybWF0dGVyKGRhdGUpLFxuICAgICAgICAgICAgZmFkZUluOlxuICAgICAgICAgICAgICBpblJhbmdlICYmXG4gICAgICAgICAgICAgIChkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICBtaW5DYWxlbmRhckRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZU1pbj8udmFsdWVPZigpID8/IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgZGF0ZVZhbHVlID09PVxuICAgICAgICAgICAgICAgICAgKG9taXRSYW5nZVxuICAgICAgICAgICAgICAgICAgICA/IHRpbWVEYXkub2Zmc2V0KG9taXRSYW5nZVsxXSwgMSkudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogLUluZmluaXR5KSksXG4gICAgICAgICAgICBmYWRlT3V0OlxuICAgICAgICAgICAgICBpblJhbmdlICYmXG4gICAgICAgICAgICAgIChkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICBtYXhDYWxlbmRhckRhdGUudmFsdWVPZigpLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZU1heD8udmFsdWVPZigpID8/IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPT09XG4gICAgICAgICAgICAgICAgICAob21pdFJhbmdlXG4gICAgICAgICAgICAgICAgICAgID8gdGltZURheS5vZmZzZXQob21pdFJhbmdlWzBdLCAtMSkudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHkpKSxcbiAgICAgICAgICAgIGhpZGRlbjpcbiAgICAgICAgICAgICAgZGF0ZVZhbHVlIDwgKHNlbGVjdGFibGVNaW4/LnZhbHVlT2YoKSA/PyAtSW5maW5pdHkpIHx8XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA+IChzZWxlY3RhYmxlTWF4Py52YWx1ZU9mKCkgPz8gSW5maW5pdHkpIHx8XG4gICAgICAgICAgICAgIChvbWl0UmFuZ2VcbiAgICAgICAgICAgICAgICA/IG9taXRSYW5nZVswXS52YWx1ZU9mKCkgPD0gZGF0ZVZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBkYXRlVmFsdWUgPD0gb21pdFJhbmdlWzFdLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgIDogZmFsc2UpLFxuICAgICAgICAgICAgaW5DdXJyZW50TW9udGg6XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA+PSBhY3RpdmVZZWFyTW9udGgudmFsdWVPZigpICYmXG4gICAgICAgICAgICAgIGRhdGVWYWx1ZSA8IHRpbWVNb250aC5vZmZzZXQoYWN0aXZlWWVhck1vbnRoLCAxKS52YWx1ZU9mKCksXG4gICAgICAgICAgICBpblJhbmdlLFxuICAgICAgICAgICAgcm91bmRlZE5lOiBuZSxcbiAgICAgICAgICAgIHJvdW5kZWROdzogbncsXG4gICAgICAgICAgICByb3VuZGVkU2U6IHNlLFxuICAgICAgICAgICAgcm91bmRlZFN3OiBzdyxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgdG9kYXk6IGRhdGVWYWx1ZSA9PT0gdG9kYXkudmFsdWVPZigpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgc2VsZWN0RGF5KGRheTogQ2FsZW5kYXJEYXRlKSB7XG4gICAgaWYgKCFkYXkuaW5DdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQodGltZU1vbnRoLmZsb29yKGRheS5kYXRlKSk7XG4gICAgfVxuICAgIHRoaXMuZGF0ZVNlbGVjdC5lbWl0KGRheS5kYXRlKTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBhY3RpdmVZZWFyTW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGRhdGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ2FsZW5kYXJDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1pbiA9IHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCAtNykpO1xuICBleHBvcnQgY29uc3QgZGVmYXVsdE1heCA9IHRpbWVEYXkub2Zmc2V0KFxuICAgIHRpbWVZZWFyLmZsb29yKHRpbWVZZWFyLm9mZnNldChuZXcgRGF0ZSgpLCA1KSksXG4gICAgLTEsXG4gICk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbHNcIj5cbiAgPGRpdj5cbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdFRyaWdnZXIgbGV0LXNlbGVjdGVkT3B0aW9uPVwic2VsZWN0ZWRPcHRpb25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcml2QnV0dG9uXG4gICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgW2ljb25dPVwiJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgIFtpY29uUG9zaXRpb25dPVwiJ2xhc3QnXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIHt7IHNlbGVjdGVkT3B0aW9uLnRpdGxlIHx8ICcuLi4nIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxyaXYtc2luZ2xlLXNlbGVjdFxuICAgICAgcGxhY2Vob2xkZXI9XCJNb250aC4uLlwiXG4gICAgICBbb3B0aW9uc109XCIobW9udGhPcHRpb25zJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRNb250aE9wdGlvbiQgfCBhc3luY1wiXG4gICAgICAoc2VsZWN0ZWRPcHRpb25DaGFuZ2UpPVwiYWN0aXZlWWVhck1vbnRoQ2hhbmdlLmVtaXQoJGV2ZW50LmRhdGUpXCJcbiAgICAgIFt0cmlnZ2VyVGVtcGxhdGVdPVwic2VsZWN0VHJpZ2dlclwiXG4gICAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG4gICAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgICBwbGFjZWhvbGRlcj1cIlllYXIuLi5cIlxuICAgICAgW29wdGlvbnNdPVwiKHllYXJPcHRpb25zJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRZZWFyT3B0aW9uJCB8IGFzeW5jXCJcbiAgICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCgkZXZlbnQuZGF0ZSlcIlxuICAgICAgW3RyaWdnZXJUZW1wbGF0ZV09XCJzZWxlY3RUcmlnZ2VyXCJcbiAgICA+PC9yaXYtc2luZ2xlLXNlbGVjdD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInsgcHJldjogcHJldmlvdXNNb250aCQgfCBhc3luYywgbmV4dDogbmV4dE1vbnRoJCB8IGFzeW5jIH07IGxldCB2bVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICByaXZCdXR0b25cbiAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICBbaWNvbl09XCInQXJyb3dMZWZ0J1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZtLnByZXZcIlxuICAgICAgKGNsaWNrKT1cInZtLnByZXYgPyBhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh2bS5wcmV2KSA6IG51bGxcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIHJpdkJ1dHRvblxuICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgIFtpY29uXT1cIidBcnJvd1JpZ2h0J1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIXZtLm5leHRcIlxuICAgICAgKGNsaWNrKT1cInZtLm5leHQgPyBhY3RpdmVZZWFyTW9udGhDaGFuZ2UuZW1pdCh2bS5uZXh0KSA6IG51bGxcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNhbGVuZGFyXCI+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5TdTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPk1vPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+VHU8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5XZTwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlRoPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+RnI8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5TYTwvc3Bhbj5cbiAgPGJ1dHRvblxuICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF0ZXMkIHwgYXN5bmNcIlxuICAgIGNsYXNzPVwiZGF5XCJcbiAgICBbZGlzYWJsZWRdPVwiZGF5LmhpZGRlblwiXG4gICAgW2NsYXNzLmJsZWVkXT1cIiFkYXkuaW5DdXJyZW50TW9udGhcIlxuICAgIFtjbGFzcy5mYWRlLWluXT1cImRheS5mYWRlSW5cIlxuICAgIFtjbGFzcy5mYWRlLW91dF09XCJkYXkuZmFkZU91dFwiXG4gICAgW2NsYXNzLmluLXJhbmdlXT1cImRheS5pblJhbmdlXCJcbiAgICBbY2xhc3Mucm91bmRlZC1uZV09XCJkYXkucm91bmRlZE5lXCJcbiAgICBbY2xhc3Mucm91bmRlZC1ud109XCJkYXkucm91bmRlZE53XCJcbiAgICBbY2xhc3Mucm91bmRlZC1zZV09XCJkYXkucm91bmRlZFNlXCJcbiAgICBbY2xhc3Mucm91bmRlZC1zd109XCJkYXkucm91bmRlZFN3XCJcbiAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheSlcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICA+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiZGF5LXdyYXBwZXJcIlxuICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5zZWxlY3RlZFwiXG4gICAgICBbY2xhc3MudG9kYXldPVwiZGF5LnRvZGF5XCJcbiAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZGF5LmhpZGRlblwiXG4gICAgPlxuICAgICAge3sgZGF5LmRpc3BsYXkgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
@@ -22,10 +22,10 @@ export class DateComponent extends InputLabelComponent {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
DateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
-
DateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateComponent, selector: "riv-date", inputs: { min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <button
|
|
25
|
+
DateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateComponent, selector: "riv-date", inputs: { min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled" }, outputs: { valueChange: "valueChange" }, usesInheritance: true, ngImport: i0, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <button\n #trigger\n class=\"trigger\"\n (click)=\"open = true\"\n [disabled]=\"disabled\"\n type=\"button\"\n >\n <ng-container *ngIf=\"value; else placeholderValue\">\n <span class=\"value\">{{ value | rivDate }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n</riv-input-label>\n<riv-callout\n *ngIf=\"open\"\n [anchor]=\"trigger\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open = false\"\n>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectedValue]=\"value\"\n (dateSelect)=\"valueChange.next($event); open = false\"\n ></riv-calendar>\n </div>\n</riv-callout>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small);background-color:var(--surface-light-2);border-left:var(--border-width) solid var(--border-light)}.content{padding:var(--size-large)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalendarComponent, selector: "riv-calendar", inputs: ["activeYearMonth", "displayMin", "displayMax", "selectableMin", "selectableMax", "omitRange", "selectedValue"], outputs: ["activeYearMonthChange", "dateSelect"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i5.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText"], outputs: ["labelAction"] }, { kind: "pipe", type: i6.DatePipe, name: "rivDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
26
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateComponent, decorators: [{
|
|
27
27
|
type: Component,
|
|
28
|
-
args: [{ selector: 'riv-date', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <button
|
|
28
|
+
args: [{ selector: 'riv-date', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <button\n #trigger\n class=\"trigger\"\n (click)=\"open = true\"\n [disabled]=\"disabled\"\n type=\"button\"\n >\n <ng-container *ngIf=\"value; else placeholderValue\">\n <span class=\"value\">{{ value | rivDate }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n</riv-input-label>\n<riv-callout\n *ngIf=\"open\"\n [anchor]=\"trigger\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open = false\"\n>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectedValue]=\"value\"\n (dateSelect)=\"valueChange.next($event); open = false\"\n ></riv-calendar>\n </div>\n</riv-callout>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small);background-color:var(--surface-light-2);border-left:var(--border-width) solid var(--border-light)}.content{padding:var(--size-large)}\n"] }]
|
|
29
29
|
}], propDecorators: { min: [{
|
|
30
30
|
type: Input
|
|
31
31
|
}], max: [{
|
|
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
39
39
|
}], valueChange: [{
|
|
40
40
|
type: Output
|
|
41
41
|
}] } });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9kYXRlL2RhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvZGF0ZS9kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxhQUFjLFNBQVEsbUJBQW1CO0lBTnREOztRQVFFLFFBQUcsR0FBUyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7UUFHekMsUUFBRyxHQUFTLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQU16QyxnQkFBVyxHQUFXLGdCQUFnQixDQUFDO1FBR3ZDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsb0JBQWUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBR2IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBQ3hDOzswR0FyQlksYUFBYTs4RkFBYixhQUFhLHNOQ2pCMUIsNDJDQW9EQTsyRkRuQ2EsYUFBYTtrQkFOekIsU0FBUzsrQkFDRSxVQUFVLG1CQUdILHVCQUF1QixDQUFDLE1BQU07OEJBSS9DLEdBQUc7c0JBREYsS0FBSztnQkFJTixHQUFHO3NCQURGLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBT04sV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRpbWVNb250aCB9IGZyb20gJ2QzLXRpbWUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LWxhYmVsL2lucHV0LWxhYmVsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1kYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBJbnB1dExhYmVsQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgbWluOiBEYXRlID0gQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1pbjtcblxuICBASW5wdXQoKVxuICBtYXg6IERhdGUgPSBDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWF4O1xuXG4gIEBJbnB1dCgpXG4gIHZhbHVlPzogRGF0ZTtcblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBkYXRlLi4uJztcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGFjdGl2ZVllYXJNb250aCA9IHRpbWVNb250aC5mbG9vcihuZXcgRGF0ZSgpKTtcbiAgb3BlbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKVxuICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbn1cbiIsIjxyaXYtaW5wdXQtbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW2hlbHBdPVwiaGVscFwiXG4gIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gIFtsYWJlbEFjdGlvblRleHRdPVwibGFiZWxBY3Rpb25UZXh0XCJcbiAgKGxhYmVsQWN0aW9uKT1cImxhYmVsQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4+XG4gIDxidXR0b25cbiAgICAjdHJpZ2dlclxuICAgIGNsYXNzPVwidHJpZ2dlclwiXG4gICAgKGNsaWNrKT1cIm9wZW4gPSB0cnVlXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlOyBlbHNlIHBsYWNlaG9sZGVyVmFsdWVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj57eyB2YWx1ZSB8IHJpdkRhdGUgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlclZhbHVlPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZSBwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uXCI+XG4gICAgICA8cml2LWljb24gW25hbWVdPVwiJ0NhbGVuZGFyJ1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9yaXYtaW5wdXQtbGFiZWw+XG48cml2LWNhbGxvdXRcbiAgKm5nSWY9XCJvcGVuXCJcbiAgW2FuY2hvcl09XCJ0cmlnZ2VyXCJcbiAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgW2FsbG93ZWRQb3NpdGlvbnNdPVwiW1xuICAgICd0b3AtbGVmdCcsXG4gICAgJ3RvcC1jZW50ZXInLFxuICAgICd0b3AtcmlnaHQnLFxuICAgICdib3R0b20tcmlnaHQnLFxuICAgICdib3R0b20tY2VudGVyJyxcbiAgICAnYm90dG9tLWxlZnQnXG4gIF1cIlxuICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAoY2xvc2UpPVwib3BlbiA9IGZhbHNlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICA8cml2LWNhbGVuZGFyXG4gICAgICBbYWN0aXZlWWVhck1vbnRoXT1cImFjdGl2ZVllYXJNb250aFwiXG4gICAgICAoYWN0aXZlWWVhck1vbnRoQ2hhbmdlKT1cImFjdGl2ZVllYXJNb250aCA9ICRldmVudFwiXG4gICAgICBbZGlzcGxheU1pbl09XCJtaW5cIlxuICAgICAgW2Rpc3BsYXlNYXhdPVwibWF4XCJcbiAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInZhbHVlXCJcbiAgICAgIChkYXRlU2VsZWN0KT1cInZhbHVlQ2hhbmdlLm5leHQoJGV2ZW50KTsgb3BlbiA9IGZhbHNlXCJcbiAgICA+PC9yaXYtY2FsZW5kYXI+XG4gIDwvZGl2PlxuPC9yaXYtY2FsbG91dD5cbiJdfQ==
|