@datarailsshared/datarailsshared 1.6.265 → 1.6.267
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/datarailsshared-datarailsshared-1.6.267.tgz +0 -0
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker/dr-date-picker.component.mjs +5 -5
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker-with-timeframe/dr-date-picker-with-timeframe.component.mjs +2 -2
- package/esm2022/lib/dr-inputs/date-pickers/dr-date-picker_custom-header/dr-date-picker_custom-header.component.mjs +27 -17
- package/esm2022/lib/dr-inputs/date-pickers/dr-fiscal-month-calendar-picker/dr-fiscal-month-calendar-header.component.mjs +3 -3
- package/esm2022/lib/dr-inputs/date-pickers/dr-fiscal-month-calendar-picker/dr-fiscal-month-calendar-picker.component.mjs +5 -5
- package/esm2022/lib/dr-inputs/date-pickers/week-selector/week-selector.component.mjs +68 -34
- package/fesm2022/datarailsshared-datarailsshared.mjs +134 -91
- package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
- package/lib/dr-inputs/date-pickers/dr-date-picker_custom-header/dr-date-picker_custom-header.component.d.ts +7 -5
- package/lib/dr-inputs/date-pickers/week-selector/week-selector.component.d.ts +28 -4
- package/package.json +1 -1
- package/datarailsshared-datarailsshared-1.6.265.tgz +0 -0
|
@@ -1,43 +1,74 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
2
3
|
import { CommonModule } from '@angular/common';
|
|
3
4
|
import { MatCalendar } from '@angular/material/datepicker';
|
|
4
|
-
import {
|
|
5
|
+
import { delay, startWith } from 'rxjs';
|
|
5
6
|
import { DrDatePickerService } from '../services/dr-date-picker.service';
|
|
6
7
|
import moment from 'moment';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@angular/common";
|
|
9
|
-
function
|
|
10
|
-
const
|
|
11
|
-
i0.ɵɵelementStart(0, "
|
|
12
|
-
i0.ɵɵlistener("click", function
|
|
13
|
-
i0.ɵɵtext(
|
|
14
|
-
i0.ɵɵelementEnd();
|
|
10
|
+
function WeekSelectorComponent_li_4_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
12
|
+
i0.ɵɵelementStart(0, "li")(1, "button", 5);
|
|
13
|
+
i0.ɵɵlistener("focus", function WeekSelectorComponent_li_4_Template_button_focus_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const i_r2 = restoredCtx.index; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.toggleWeekPreview($event, i_r2, true)); })("blur", function WeekSelectorComponent_li_4_Template_button_blur_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const i_r2 = restoredCtx.index; const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.toggleWeekPreview($event, i_r2, false)); })("mouseover", function WeekSelectorComponent_li_4_Template_button_mouseover_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const i_r2 = restoredCtx.index; const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.toggleWeekPreview($event, i_r2, true)); })("mouseleave", function WeekSelectorComponent_li_4_Template_button_mouseleave_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const i_r2 = restoredCtx.index; const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.toggleWeekPreview($event, i_r2, false)); })("click", function WeekSelectorComponent_li_4_Template_button_click_1_listener() { const restoredCtx = i0.ɵɵrestoreView(_r4); const week_r1 = restoredCtx.$implicit; const ctx_r8 = i0.ɵɵnextContext(); ctx_r8.service.datePickerInstance.close(); return i0.ɵɵresetView(ctx_r8.service.weekSelectionChange$.next(week_r1)); });
|
|
14
|
+
i0.ɵɵtext(2);
|
|
15
|
+
i0.ɵɵelementEnd()();
|
|
15
16
|
} if (rf & 2) {
|
|
16
17
|
const week_r1 = ctx.$implicit;
|
|
17
|
-
|
|
18
|
+
const i_r2 = ctx.index;
|
|
19
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
20
|
+
i0.ɵɵadvance(1);
|
|
21
|
+
i0.ɵɵclassProp("previewed", i_r2 === ctx_r0.previewedWeek())("selected", week_r1.selected);
|
|
22
|
+
i0.ɵɵattribute("aria-current", week_r1.selected)("aria-label", "Week " + week_r1.yearWeekNumber);
|
|
18
23
|
i0.ɵɵadvance(1);
|
|
19
24
|
i0.ɵɵtextInterpolate1(" W", week_r1.yearWeekNumber, " ");
|
|
20
25
|
} }
|
|
26
|
+
/**
|
|
27
|
+
* Provides week-based interaction for Angular Material `MatCalendar`.
|
|
28
|
+
* The component renders a list of weeks for the currently active month
|
|
29
|
+
* and keeps it synchronized with the calendar hover (preview) and selection state.
|
|
30
|
+
*
|
|
31
|
+
* Key responsibilities:
|
|
32
|
+
* - Derive logical weeks from the calendar's active month.
|
|
33
|
+
* - Detect which calendar week is currently previewed/selected and reflect it in the UI.
|
|
34
|
+
*
|
|
35
|
+
* ⚠ Stability note:
|
|
36
|
+
* - `_matCalendarBody` and `previewChange` are **private Angular Material APIs**.
|
|
37
|
+
* - This component may require adjustments after Angular Material upgrades.
|
|
38
|
+
* - Related upgrade considerations are documented in `UPGRADE_CHECKLIST.md`.
|
|
39
|
+
*
|
|
40
|
+
* If private API is going to change, and we don't have access to with properties,
|
|
41
|
+
* check the following commit with class and mutation observable implementation:
|
|
42
|
+
* https://github.com/Datarails/datarailsshared/pull/126/commits/590152cff0448c5f48bff32f9cb165bbf464112b
|
|
43
|
+
*/
|
|
21
44
|
export class WeekSelectorComponent {
|
|
22
45
|
constructor() {
|
|
23
46
|
this.service = inject(DrDatePickerService);
|
|
24
47
|
this.calendar = inject(MatCalendar);
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this.
|
|
48
|
+
this.destroyRef = inject(DestroyRef);
|
|
49
|
+
this.calendarBody = null;
|
|
50
|
+
this.previewedWeek = signal(-1);
|
|
51
|
+
this.currentMonthWeeks = signal([]);
|
|
52
|
+
this.calendar.stateChanges.pipe(startWith(null), delay(0), takeUntilDestroyed()).subscribe(() => {
|
|
53
|
+
const activeDate = moment(this.calendar.activeDate);
|
|
54
|
+
const selectedRange = this.calendar.selected;
|
|
55
|
+
this.currentMonthWeeks.set(this.getWeeksInMonth(activeDate, selectedRange));
|
|
31
56
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
57
|
+
}
|
|
58
|
+
ngAfterViewInit() {
|
|
59
|
+
// monthView and _matCalendarBody are ViewChild and can be accessed only in AfterViewInit
|
|
60
|
+
this.calendarBody = this.calendar.monthView._matCalendarBody;
|
|
61
|
+
this.calendarBody.previewChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
|
|
62
|
+
const value = event.value ? event.value.rawValue : null;
|
|
63
|
+
this.previewedWeek.set(this.currentMonthWeeks().findIndex((week) => this.isInRange(week.start, value)));
|
|
39
64
|
});
|
|
40
65
|
}
|
|
66
|
+
toggleWeekPreview(event, weekIndex, value) {
|
|
67
|
+
if (!this.calendarBody)
|
|
68
|
+
return;
|
|
69
|
+
const weekFestDayCell = this.calendarBody.rows[weekIndex][0];
|
|
70
|
+
this.calendarBody.previewChange.emit({ value: weekFestDayCell?.enabled && value ? weekFestDayCell : null, event });
|
|
71
|
+
}
|
|
41
72
|
getWeeksInMonth(date, selectedRange) {
|
|
42
73
|
const weeks = [];
|
|
43
74
|
const firstDay = moment(date).startOf('month');
|
|
@@ -48,12 +79,9 @@ export class WeekSelectorComponent {
|
|
|
48
79
|
let weekNumber = 1;
|
|
49
80
|
while (currentWeekStart.isSameOrBefore(lastWeekEnd)) {
|
|
50
81
|
const weekEnd = moment(currentWeekStart).endOf('isoWeek');
|
|
51
|
-
const days =
|
|
52
|
-
for (let i = 0; i < 7; i++) {
|
|
53
|
-
days.push(moment(currentWeekStart).add(i, 'days'));
|
|
54
|
-
}
|
|
82
|
+
const days = this.getWeekDays(currentWeekStart);
|
|
55
83
|
const isPartial = days.some((day) => !day.isSame(date, 'month'));
|
|
56
|
-
const selected =
|
|
84
|
+
const selected = this.isInRange(currentWeekStart, selectedRange.start, days);
|
|
57
85
|
// isoWeek() returns the ISO week number (1-53)
|
|
58
86
|
const yearWeekNumber = moment(currentWeekStart).isoWeek();
|
|
59
87
|
weeks.push({
|
|
@@ -70,22 +98,28 @@ export class WeekSelectorComponent {
|
|
|
70
98
|
}
|
|
71
99
|
return weeks;
|
|
72
100
|
}
|
|
101
|
+
isInRange(weekStart, value, days = this.getWeekDays(weekStart)) {
|
|
102
|
+
return days.some((day) => day.isSame(value, 'day'));
|
|
103
|
+
}
|
|
104
|
+
getWeekDays(weekStart) {
|
|
105
|
+
return Array.from(Array(7).keys()).map((i) => moment(weekStart).add(i, 'days'));
|
|
106
|
+
}
|
|
73
107
|
/** @nocollapse */ static { this.ɵfac = function WeekSelectorComponent_Factory(t) { return new (t || WeekSelectorComponent)(); }; }
|
|
74
|
-
/** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: WeekSelectorComponent, selectors: [["dr-week-selector"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 6, vars: 1, consts: [[1, "weeks"], [1, "header"], [
|
|
108
|
+
/** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: WeekSelectorComponent, selectors: [["dr-week-selector"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 6, vars: 1, consts: [[1, "weeks"], [1, "header"], ["role", "list", "aria-label", "Weeks of the month", 1, "weeks__container"], [4, "ngFor", "ngForOf"], [1, "weeks-border"], [1, "btn", 3, "focus", "blur", "mouseover", "mouseleave", "click"]], template: function WeekSelectorComponent_Template(rf, ctx) { if (rf & 1) {
|
|
75
109
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
76
110
|
i0.ɵɵtext(2, "Week");
|
|
77
111
|
i0.ɵɵelementEnd();
|
|
78
|
-
i0.ɵɵelementStart(3, "
|
|
79
|
-
i0.ɵɵtemplate(4,
|
|
112
|
+
i0.ɵɵelementStart(3, "ul", 2);
|
|
113
|
+
i0.ɵɵtemplate(4, WeekSelectorComponent_li_4_Template, 3, 7, "li", 3);
|
|
80
114
|
i0.ɵɵelementEnd()();
|
|
81
115
|
i0.ɵɵelement(5, "div", 4);
|
|
82
116
|
} if (rf & 2) {
|
|
83
117
|
i0.ɵɵadvance(4);
|
|
84
|
-
i0.ɵɵproperty("ngForOf", ctx.currentMonthWeeks);
|
|
85
|
-
} }, dependencies: [CommonModule, i1.NgForOf], styles: ["[_nghost-%COMP%]{font-size:14px;line-height:24px;font-weight:400;text-align:center;color:#333;display:flex}[_nghost-%COMP%] .weeks[_ngcontent-%COMP%]{height:100%;flex-direction:column;display:flex}[_nghost-%COMP%] .weeks-border[_ngcontent-%COMP%]{height:100%;width:1px;background-color:#dfe0e3;margin:0 4px}[_nghost-%COMP%] .weeks__container[_ngcontent-%COMP%]{display:flex;flex-direction:column;
|
|
118
|
+
i0.ɵɵproperty("ngForOf", ctx.currentMonthWeeks());
|
|
119
|
+
} }, dependencies: [CommonModule, i1.NgForOf], styles: ["[_nghost-%COMP%]{font-size:14px;line-height:24px;font-weight:400;text-align:center;color:#333;display:flex}[_nghost-%COMP%] .weeks[_ngcontent-%COMP%]{height:100%;flex-direction:column;display:flex}[_nghost-%COMP%] .weeks-border[_ngcontent-%COMP%]{height:100%;width:1px;background-color:#dfe0e3;margin:0 4px}[_nghost-%COMP%] .weeks__container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:5px;height:100%;margin:0;padding:0;list-style:none}[_nghost-%COMP%] .weeks__container[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .weeks[_ngcontent-%COMP%] .header[_ngcontent-%COMP%]{font-weight:600;color:#19181a;padding-bottom:8px;line-height:16px}[_nghost-%COMP%] .weeks[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{padding:9px 16px;border-radius:40px;cursor:pointer;background-color:transparent;border:none;height:100%}[_nghost-%COMP%] .weeks[_ngcontent-%COMP%] .btn.previewed[_ngcontent-%COMP%], [_nghost-%COMP%] .weeks[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]:hover{background-color:#f5f5f5;color:#19181a}[_nghost-%COMP%] .weeks[_ngcontent-%COMP%] .btn.selected[_ngcontent-%COMP%]{font-weight:600;background-color:#4646ce;color:#fff}"], changeDetection: 0 }); }
|
|
86
120
|
}
|
|
87
121
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WeekSelectorComponent, [{
|
|
88
122
|
type: Component,
|
|
89
|
-
args: [{ selector: 'dr-week-selector', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"weeks\">\n <div class=\"header\">Week</div>\n\n <
|
|
123
|
+
args: [{ selector: 'dr-week-selector', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"weeks\">\n <div class=\"header\">Week</div>\n\n <ul role=\"list\" class=\"weeks__container\" aria-label=\"Weeks of the month\">\n <li *ngFor=\"let week of currentMonthWeeks(); let i = index\">\n <button\n class=\"btn\"\n [class.previewed]=\"i === previewedWeek()\"\n [class.selected]=\"week.selected\"\n [attr.aria-current]=\"week.selected\"\n [attr.aria-label]=\"'Week ' + week.yearWeekNumber\"\n (focus)=\"toggleWeekPreview($event, i, true)\"\n (blur)=\"toggleWeekPreview($event, i, false)\"\n (mouseover)=\"toggleWeekPreview($event, i, true)\"\n (mouseleave)=\"toggleWeekPreview($event, i, false)\"\n (click)=\"service.datePickerInstance.close(); service.weekSelectionChange$.next(week)\">\n W{{ week.yearWeekNumber }}\n </button>\n </li>\n </ul>\n</div>\n<div class=\"weeks-border\"></div>\n", styles: [":host{font-size:14px;line-height:24px;font-weight:400;text-align:center;color:#333;display:flex}:host .weeks{height:100%;flex-direction:column;display:flex}:host .weeks-border{height:100%;width:1px;background-color:#dfe0e3;margin:0 4px}:host .weeks__container{display:flex;flex-direction:column;gap:5px;height:100%;margin:0;padding:0;list-style:none}:host .weeks__container li{flex:1}:host .weeks .header{font-weight:600;color:#19181a;padding-bottom:8px;line-height:16px}:host .weeks .btn{padding:9px 16px;border-radius:40px;cursor:pointer;background-color:transparent;border:none;height:100%}:host .weeks .btn.previewed,:host .weeks .btn:hover{background-color:#f5f5f5;color:#19181a}:host .weeks .btn.selected{font-weight:600;background-color:#4646ce;color:#fff}\n"] }]
|
|
90
124
|
}], function () { return []; }, null); })();
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vlay1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL3dlZWstc2VsZWN0b3Ivd2Vlay1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL3dlZWstc2VsZWN0b3Ivd2Vlay1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBYSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxNQUFrQixNQUFNLFFBQVEsQ0FBQzs7Ozs7SUNEaEMsOEJBSTJDO0lBSHZDLG1OQUFTLHlDQUFrQyxTQUFFLGVBQUEsaURBQXVDLENBQUEsSUFBQztJQUlyRixZQUNKO0lBQUEsaUJBQU07OztJQUhGLDRDQUFnQztJQUVoQyxlQUNKO0lBREksd0RBQ0o7O0FEZVIsTUFBTSxPQUFPLHFCQUFxQjtJQVE5QjtRQVBTLFlBQU8sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5QixhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLFFBQUcsR0FBRyxN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QyxJQUFJLENBQUM7Z0JBQ1AsVUFBVTtnQkFDVixjQUFjO2dCQUNkLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLEdBQUcsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNwQixJQUFJO2dCQUNKLFNBQVM7Z0JBQ1QsUUFBUTthQUNYLENBQUMsQ0FBQztZQUVILGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEMsVUFBVSxFQUFFLENBQUM7U0FDaEI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO3lHQWhFUSxxQkFBcUI7bUdBQXJCLHFCQUFxQjtZQ3pCbEMsOEJBQW1CLGFBQUE7WUFDSyxvQkFBSTtZQUFBLGlCQUFNO1lBRTlCLDhCQUE4QjtZQUMxQixzRUFNTTtZQUNWLGlCQUFNLEVBQUE7WUFFVix5QkFBZ0M7O1lBTEgsZUFBb0I7WUFBcEIsK0NBQW9COzRCRFluQyxZQUFZOzt1RkFLYixxQkFBcUI7Y0FSakMsU0FBUzsyQkFDSSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUdOLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGF0ZVJhbmdlLCBNYXRDYWxlbmRhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgc3RhcnRXaXRoLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERyRGF0ZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kci1kYXRlLXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBXZWVrSW5mbyB7XG4gICAgd2Vla051bWJlcjogbnVtYmVyO1xuICAgIHllYXJXZWVrTnVtYmVyOiBudW1iZXI7XG4gICAgc3RhcnQ6IE1vbWVudDtcbiAgICBlbmQ6IE1vbWVudDtcbiAgICBkYXlzOiBNb21lbnRbXTtcbiAgICBpc1BhcnRpYWw6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItd2Vlay1zZWxlY3RvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vd2Vlay1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vd2Vlay1zZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBXZWVrU2VsZWN0b3JDb21wb25lbnQge1xuICAgIHJlYWRvbmx5IHNlcnZpY2UgPSBpbmplY3QoRHJEYXRlUGlja2VyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWxlbmRhciA9IGluamVjdChNYXRDYWxlbmRhcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY3VycmVudE1vbnRoV2Vla3M6IFdlZWtJbmZvW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpbmplY3QoRGVzdHJveVJlZiwgeyBza2lwU2VsZjogdHJ1ZSB9KS5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2FsZW5kYXIuc3RhdGVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVEYXRlID0gbW9tZW50KHRoaXMuY2FsZW5kYXIuYWN0aXZlRGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZTogRGF0ZVJhbmdlPE1vbWVudD4gPSB0aGlzLmNhbGVuZGFyLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoV2Vla3MgPSB0aGlzLmdldFdlZWtzSW5Nb250aChhY3RpdmVEYXRlLCBzZWxlY3RlZFJhbmdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXZWVrc0luTW9udGgoZGF0ZTogTW9tZW50LCBzZWxlY3RlZFJhbmdlOiBEYXRlUmFuZ2U8TW9tZW50Pik6IFdlZWtJbmZvW10ge1xuICAgICAgICBjb25zdCB3ZWVrczogV2Vla0luZm9bXSA9IFtdO1xuICAgICAgICBjb25zdCBmaXJzdERheSA9IG1vbWVudChkYXRlKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgICBjb25zdCBsYXN0RGF5ID0gbW9tZW50KGRhdGUpLmVuZE9mKCdtb250aCcpO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0V2Vla1N0YXJ0ID0gbW9tZW50KGZpcnN0RGF5KS5zdGFydE9mKCdpc29XZWVrJyk7XG4gICAgICAgIGNvbnN0IGxhc3RXZWVrRW5kID0gbW9tZW50KGxhc3REYXkpLmVuZE9mKCdpc29XZWVrJyk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRXZWVrU3RhcnQgPSBtb21lbnQoZmlyc3RXZWVrU3RhcnQpO1xuICAgICAgICBsZXQgd2Vla051bWJlciA9IDE7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRXZWVrU3RhcnQuaXNTYW1lT3JCZWZvcmUobGFzdFdlZWtFbmQpKSB7XG4gICAgICAgICAgICBjb25zdCB3ZWVrRW5kID0gbW9tZW50KGN1cnJlbnRXZWVrU3RhcnQpLmVuZE9mKCdpc29XZWVrJyk7XG4gICAgICAgICAgICBjb25zdCBkYXlzOiBNb21lbnRbXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgICAgIGRheXMucHVzaChtb21lbnQoY3VycmVudFdlZWtTdGFydCkuYWRkKGksICdkYXlzJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc1BhcnRpYWwgPSBkYXlzLnNvbWUoKGRheSkgPT4gIWRheS5pc1NhbWUoZGF0ZSwgJ21vbnRoJykpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkYXlzLnNvbWUoKGRheSkgPT4gZGF5LmlzU2FtZShzZWxlY3RlZFJhbmdlLnN0YXJ0LCAnZGF5JykpO1xuXG4gICAgICAgICAgICAvLyBpc29XZWVrKCkgcmV0dXJucyB0aGUgSVNPIHdlZWsgbnVtYmVyICgxLTUzKVxuICAgICAgICAgICAgY29uc3QgeWVhcldlZWtOdW1iZXIgPSBtb21lbnQoY3VycmVudFdlZWtTdGFydCkuaXNvV2VlaygpO1xuXG4gICAgICAgICAgICB3ZWVrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB3ZWVrTnVtYmVyLFxuICAgICAgICAgICAgICAgIHllYXJXZWVrTnVtYmVyLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBtb21lbnQoY3VycmVudFdlZWtTdGFydCksXG4gICAgICAgICAgICAgICAgZW5kOiBtb21lbnQod2Vla0VuZCksXG4gICAgICAgICAgICAgICAgZGF5cyxcbiAgICAgICAgICAgICAgICBpc1BhcnRpYWwsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY3VycmVudFdlZWtTdGFydC5hZGQoMSwgJ3dlZWsnKTtcbiAgICAgICAgICAgIHdlZWtOdW1iZXIrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3ZWVrcztcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwid2Vla3NcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+V2VlazwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIndlZWtzX19jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlcnZpY2UuZGF0ZVBpY2tlckluc3RhbmNlLmNsb3NlKCk7IHNlcnZpY2Uud2Vla1NlbGVjdGlvbkNoYW5nZSQubmV4dCh3ZWVrKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwid2Vlay5zZWxlY3RlZFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgd2VlayBvZiBjdXJyZW50TW9udGhXZWVrc1wiPlxuICAgICAgICAgICAgV3t7IHdlZWsueWVhcldlZWtOdW1iZXIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ3ZWVrcy1ib3JkZXJcIj48L2Rpdj5cbiJdfQ==
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vlay1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL3dlZWstc2VsZWN0b3Ivd2Vlay1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL3dlZWstc2VsZWN0b3Ivd2Vlay1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFhLFdBQVcsRUFBbUIsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLE1BQWtCLE1BQU0sUUFBUSxDQUFDOzs7OztJQ0ZoQywwQkFBNEQsZ0JBQUE7SUFPcEQsMk5BQVMsZUFBQSx1Q0FBNkIsSUFBSSxDQUFDLENBQUEsSUFBQyw0TUFDcEMsZUFBQSx1Q0FBNkIsS0FBSyxDQUFDLENBQUEsSUFEQyxzTkFFL0IsZUFBQSx1Q0FBNkIsSUFBSSxDQUFDLENBQUEsSUFGSCx3TkFHOUIsZUFBQSx1Q0FBNkIsS0FBSyxDQUFDLENBQUEsSUFITCx3TUFJbkMseUNBQWtDLFNBQUUsZUFBQSxpREFBdUMs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Q0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEMsVUFBVSxFQUFFLENBQUM7U0FDaEI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sU0FBUyxDQUFDLFNBQWlCLEVBQUUsS0FBYSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLFdBQVcsQ0FBQyxTQUFpQjtRQUNqQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7eUdBbkZRLHFCQUFxQjttR0FBckIscUJBQXFCO1lDNUNsQyw4QkFBbUIsYUFBQTtZQUNLLG9CQUFJO1lBQUEsaUJBQU07WUFFOUIsNkJBQXlFO1lBQ3JFLG9FQWNLO1lBQ1QsaUJBQUssRUFBQTtZQUVULHlCQUFnQzs7WUFqQkgsZUFBd0I7WUFBeEIsaURBQXdCOzRCRG1DdkMsWUFBWTs7dUZBS2IscUJBQXFCO2NBUmpDLFNBQVM7MkJBQ0ksa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UsIE1hdENhbGVuZGFyLCBNYXRDYWxlbmRhckJvZHkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IGRlbGF5LCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERyRGF0ZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kci1kYXRlLXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCBtb21lbnQsIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBXZWVrSW5mbyB7XG4gICAgd2Vla051bWJlcjogbnVtYmVyO1xuICAgIHllYXJXZWVrTnVtYmVyOiBudW1iZXI7XG4gICAgc3RhcnQ6IE1vbWVudDtcbiAgICBlbmQ6IE1vbWVudDtcbiAgICBkYXlzOiBNb21lbnRbXTtcbiAgICBpc1BhcnRpYWw6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvdmlkZXMgd2Vlay1iYXNlZCBpbnRlcmFjdGlvbiBmb3IgQW5ndWxhciBNYXRlcmlhbCBgTWF0Q2FsZW5kYXJgLlxuICogVGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGlzdCBvZiB3ZWVrcyBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgbW9udGhcbiAqIGFuZCBrZWVwcyBpdCBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgY2FsZW5kYXIgaG92ZXIgKHByZXZpZXcpIGFuZCBzZWxlY3Rpb24gc3RhdGUuXG4gKlxuICogS2V5IHJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIERlcml2ZSBsb2dpY2FsIHdlZWtzIGZyb20gdGhlIGNhbGVuZGFyJ3MgYWN0aXZlIG1vbnRoLlxuICogLSBEZXRlY3Qgd2hpY2ggY2FsZW5kYXIgd2VlayBpcyBjdXJyZW50bHkgcHJldmlld2VkL3NlbGVjdGVkIGFuZCByZWZsZWN0IGl0IGluIHRoZSBVSS5cbiAqXG4gKiDimqAgU3RhYmlsaXR5IG5vdGU6XG4gKiAtIGBfbWF0Q2FsZW5kYXJCb2R5YCBhbmQgYHByZXZpZXdDaGFuZ2VgIGFyZSAqKnByaXZhdGUgQW5ndWxhciBNYXRlcmlhbCBBUElzKiouXG4gKiAtIFRoaXMgY29tcG9uZW50IG1heSByZXF1aXJlIGFkanVzdG1lbnRzIGFmdGVyIEFuZ3VsYXIgTWF0ZXJpYWwgdXBncmFkZXMuXG4gKiAtIFJlbGF0ZWQgdXBncmFkZSBjb25zaWRlcmF0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbiBgVVBHUkFERV9DSEVDS0xJU1QubWRgLlxuICpcbiAqIElmIHByaXZhdGUgQVBJIGlzIGdvaW5nIHRvIGNoYW5nZSwgYW5kIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHdpdGggcHJvcGVydGllcyxcbiAqIGNoZWNrIHRoZSBmb2xsb3dpbmcgY29tbWl0IHdpdGggY2xhc3MgYW5kIG11dGF0aW9uIG9ic2VydmFibGUgaW1wbGVtZW50YXRpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vRGF0YXJhaWxzL2RhdGFyYWlsc3NoYXJlZC9wdWxsLzEyNi9jb21taXRzLzU5MDE1MmNmZjA0NDhjNWY0OGJmZjMyZjljYjE2NWJiZjQ2NDExMmJcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci13ZWVrLXNlbGVjdG9yJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi93ZWVrLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi93ZWVrLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFdlZWtTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHJlYWRvbmx5IHNlcnZpY2UgPSBpbmplY3QoRHJEYXRlUGlja2VyU2VydmljZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhbGVuZGFyID0gaW5qZWN0KE1hdENhbGVuZGFyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBwcml2YXRlIGNhbGVuZGFyQm9keTogTWF0Q2FsZW5kYXJCb2R5PE1vbWVudD4gfCBudWxsID0gbnVsbDtcblxuICAgIHJlYWRvbmx5IHByZXZpZXdlZFdlZWsgPSBzaWduYWwoLTEpO1xuICAgIHJlYWRvbmx5IGN1cnJlbnRNb250aFdlZWtzID0gc2lnbmFsPFdlZWtJbmZvW10+KFtdKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnN0YXRlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgZGVsYXkoMCksIHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlRGF0ZSA9IG1vbWVudCh0aGlzLmNhbGVuZGFyLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZTogRGF0ZVJhbmdlPE1vbWVudD4gPSB0aGlzLmNhbGVuZGFyLnNlbGVjdGVkO1xuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNb250aFdlZWtzLnNldCh0aGlzLmdldFdlZWtzSW5Nb250aChhY3RpdmVEYXRlLCBzZWxlY3RlZFJhbmdlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIG1vbnRoVmlldyBhbmQgX21hdENhbGVuZGFyQm9keSBhcmUgVmlld0NoaWxkIGFuZCBjYW4gYmUgYWNjZXNzZWQgb25seSBpbiBBZnRlclZpZXdJbml0XG4gICAgICAgIHRoaXMuY2FsZW5kYXJCb2R5ID0gdGhpcy5jYWxlbmRhci5tb250aFZpZXcuX21hdENhbGVuZGFyQm9keTtcblxuICAgICAgICB0aGlzLmNhbGVuZGFyQm9keS5wcmV2aWV3Q2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWUgPyBldmVudC52YWx1ZS5yYXdWYWx1ZSEgOiBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLnByZXZpZXdlZFdlZWsuc2V0KHRoaXMuY3VycmVudE1vbnRoV2Vla3MoKS5maW5kSW5kZXgoKHdlZWspID0+IHRoaXMuaXNJblJhbmdlKHdlZWsuc3RhcnQsIHZhbHVlKSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlV2Vla1ByZXZpZXcoZXZlbnQ6IEV2ZW50LCB3ZWVrSW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbGVuZGFyQm9keSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHdlZWtGZXN0RGF5Q2VsbCA9IHRoaXMuY2FsZW5kYXJCb2R5LnJvd3Nbd2Vla0luZGV4XVswXTtcblxuICAgICAgICB0aGlzLmNhbGVuZGFyQm9keS5wcmV2aWV3Q2hhbmdlLmVtaXQoeyB2YWx1ZTogd2Vla0Zlc3REYXlDZWxsPy5lbmFibGVkICYmIHZhbHVlID8gd2Vla0Zlc3REYXlDZWxsIDogbnVsbCwgZXZlbnQgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXZWVrc0luTW9udGgoZGF0ZTogTW9tZW50LCBzZWxlY3RlZFJhbmdlOiBEYXRlUmFuZ2U8TW9tZW50Pik6IFdlZWtJbmZvW10ge1xuICAgICAgICBjb25zdCB3ZWVrczogV2Vla0luZm9bXSA9IFtdO1xuICAgICAgICBjb25zdCBmaXJzdERheSA9IG1vbWVudChkYXRlKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgICBjb25zdCBsYXN0RGF5ID0gbW9tZW50KGRhdGUpLmVuZE9mKCdtb250aCcpO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0V2Vla1N0YXJ0ID0gbW9tZW50KGZpcnN0RGF5KS5zdGFydE9mKCdpc29XZWVrJyk7XG4gICAgICAgIGNvbnN0IGxhc3RXZWVrRW5kID0gbW9tZW50KGxhc3REYXkpLmVuZE9mKCdpc29XZWVrJyk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRXZWVrU3RhcnQgPSBtb21lbnQoZmlyc3RXZWVrU3RhcnQpO1xuICAgICAgICBsZXQgd2Vla051bWJlciA9IDE7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRXZWVrU3RhcnQuaXNTYW1lT3JCZWZvcmUobGFzdFdlZWtFbmQpKSB7XG4gICAgICAgICAgICBjb25zdCB3ZWVrRW5kID0gbW9tZW50KGN1cnJlbnRXZWVrU3RhcnQpLmVuZE9mKCdpc29XZWVrJyk7XG4gICAgICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5nZXRXZWVrRGF5cyhjdXJyZW50V2Vla1N0YXJ0KTtcblxuICAgICAgICAgICAgY29uc3QgaXNQYXJ0aWFsID0gZGF5cy5zb21lKChkYXkpID0+ICFkYXkuaXNTYW1lKGRhdGUsICdtb250aCcpKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pc0luUmFuZ2UoY3VycmVudFdlZWtTdGFydCwgc2VsZWN0ZWRSYW5nZS5zdGFydCwgZGF5cyk7XG5cbiAgICAgICAgICAgIC8vIGlzb1dlZWsoKSByZXR1cm5zIHRoZSBJU08gd2VlayBudW1iZXIgKDEtNTMpXG4gICAgICAgICAgICBjb25zdCB5ZWFyV2Vla051bWJlciA9IG1vbWVudChjdXJyZW50V2Vla1N0YXJ0KS5pc29XZWVrKCk7XG5cbiAgICAgICAgICAgIHdlZWtzLnB1c2goe1xuICAgICAgICAgICAgICAgIHdlZWtOdW1iZXIsXG4gICAgICAgICAgICAgICAgeWVhcldlZWtOdW1iZXIsXG4gICAgICAgICAgICAgICAgc3RhcnQ6IG1vbWVudChjdXJyZW50V2Vla1N0YXJ0KSxcbiAgICAgICAgICAgICAgICBlbmQ6IG1vbWVudCh3ZWVrRW5kKSxcbiAgICAgICAgICAgICAgICBkYXlzLFxuICAgICAgICAgICAgICAgIGlzUGFydGlhbCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjdXJyZW50V2Vla1N0YXJ0LmFkZCgxLCAnd2VlaycpO1xuICAgICAgICAgICAgd2Vla051bWJlcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdlZWtzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNJblJhbmdlKHdlZWtTdGFydDogTW9tZW50LCB2YWx1ZTogTW9tZW50LCBkYXlzID0gdGhpcy5nZXRXZWVrRGF5cyh3ZWVrU3RhcnQpKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBkYXlzLnNvbWUoKGRheSkgPT4gZGF5LmlzU2FtZSh2YWx1ZSwgJ2RheScpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFdlZWtEYXlzKHdlZWtTdGFydDogTW9tZW50KTogTW9tZW50W10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShBcnJheSg3KS5rZXlzKCkpLm1hcCgoaSkgPT4gbW9tZW50KHdlZWtTdGFydCkuYWRkKGksICdkYXlzJykpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3ZWVrc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5XZWVrPC9kaXY+XG5cbiAgICA8dWwgcm9sZT1cImxpc3RcIiBjbGFzcz1cIndlZWtzX19jb250YWluZXJcIiBhcmlhLWxhYmVsPVwiV2Vla3Mgb2YgdGhlIG1vbnRoXCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgd2VlayBvZiBjdXJyZW50TW9udGhXZWVrcygpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wcmV2aWV3ZWRdPVwiaSA9PT0gcHJldmlld2VkV2VlaygpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwid2Vlay5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIndlZWsuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1dlZWsgJyArIHdlZWsueWVhcldlZWtOdW1iZXJcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJ0b2dnbGVXZWVrUHJldmlldygkZXZlbnQsIGksIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJ0b2dnbGVXZWVrUHJldmlldygkZXZlbnQsIGksIGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJ0b2dnbGVXZWVrUHJldmlldygkZXZlbnQsIGksIHRydWUpXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJ0b2dnbGVXZWVrUHJldmlldygkZXZlbnQsIGksIGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlcnZpY2UuZGF0ZVBpY2tlckluc3RhbmNlLmNsb3NlKCk7IHNlcnZpY2Uud2Vla1NlbGVjdGlvbkNoYW5nZSQubmV4dCh3ZWVrKVwiPlxuICAgICAgICAgICAgICAgIFd7eyB3ZWVrLnllYXJXZWVrTnVtYmVyIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwid2Vla3MtYm9yZGVyXCI+PC9kaXY+XG4iXX0=
|