ngx-mat-tui-calendar 12.0.9 → 12.1.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/README.md +7 -6
- package/bundles/ngx-mat-tui-calendar.umd.js +148 -105
- package/bundles/ngx-mat-tui-calendar.umd.js.map +1 -1
- package/esm2015/lib/calendar-options.js +1 -1
- package/esm2015/lib/local-date.js +3 -2
- package/esm2015/lib/ngx-mat-tui-calendar.component.js +63 -36
- package/esm2015/lib/ngx-mat-tui-calendar.module.js +89 -61
- package/fesm2015/ngx-mat-tui-calendar.js +151 -96
- package/fesm2015/ngx-mat-tui-calendar.js.map +1 -1
- package/lib/calendar-options.d.ts +10 -0
- package/lib/ngx-mat-tui-calendar.component.d.ts +4 -4
- package/lib/ngx-mat-tui-calendar.module.d.ts +1 -1
- package/package.json +2 -4
@@ -14,6 +14,7 @@ import * as i3 from "@angular/material/button";
|
|
14
14
|
import * as i4 from "@fortawesome/angular-fontawesome";
|
15
15
|
import * as i5 from "@angular/material/button-toggle";
|
16
16
|
import * as i6 from "./ngx-mat-tui-calendar-wrapper/ngx-mat-tui-calendar-wrapper.component";
|
17
|
+
import * as i7 from "@angular/common";
|
17
18
|
export class NgxMatTuiCalendarComponent {
|
18
19
|
constructor(dialog) {
|
19
20
|
this.dialog = dialog;
|
@@ -33,23 +34,22 @@ export class NgxMatTuiCalendarComponent {
|
|
33
34
|
// we slice off the first color since it is gray
|
34
35
|
this.colors = distinctColors({ lightMin: 70, count: 15 }).slice(1);
|
35
36
|
this.colorIndex = 0;
|
36
|
-
this.
|
37
|
-
this.appliedOptions = this.getDefaultOptions();
|
37
|
+
this.calendarIdDefault = "main";
|
38
38
|
}
|
39
39
|
ngOnInit() {
|
40
40
|
// console.warn(`calendar.component.ts: ngOnit`)
|
41
|
-
this.
|
41
|
+
this.setOptions(this.options);
|
42
|
+
this.createTUICalendar(this.appliedOptions.ioptions);
|
42
43
|
this.bindCallbacks();
|
44
|
+
this.calendar.toggleScheduleView(true);
|
45
|
+
this.calendar.render(true);
|
46
|
+
this.calendar.toggleScheduleView(true);
|
43
47
|
}
|
44
48
|
ngOnChanges(changes) {
|
45
|
-
// console.warn(changes);
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
let options = changes.options.currentValue;
|
50
|
-
this.setOptions(options);
|
51
|
-
}
|
52
|
-
}
|
49
|
+
// console.warn(`ngOnChanges: `, changes);
|
50
|
+
// console.warn(`change.option:`, changes.options);
|
51
|
+
let options = changes.options.currentValue;
|
52
|
+
this.setOptions(options);
|
53
53
|
}
|
54
54
|
ngOnDestroy() {
|
55
55
|
this.calendar.destroy();
|
@@ -74,15 +74,19 @@ export class NgxMatTuiCalendarComponent {
|
|
74
74
|
date.setMonth(date.getMonth() + months); // date class does the modular arithmetic
|
75
75
|
date.setDate(date.getDate() + days); // date class does the modular arithmetic
|
76
76
|
this.calendar.setDate(date);
|
77
|
+
this.calendar.toggleScheduleView(true);
|
77
78
|
}
|
78
79
|
onCalendarPrev() {
|
79
80
|
this.calendar.prev();
|
81
|
+
this.calendar.toggleScheduleView(true);
|
80
82
|
}
|
81
83
|
onCalendarToday() {
|
82
84
|
this.calendar.today();
|
85
|
+
this.calendar.toggleScheduleView(true);
|
83
86
|
}
|
84
87
|
onCalendarNext() {
|
85
88
|
this.calendar.next();
|
89
|
+
this.calendar.toggleScheduleView(true);
|
86
90
|
}
|
87
91
|
onCalendarLongNext() {
|
88
92
|
let date = this.calendar.getDate().toDate();
|
@@ -104,15 +108,20 @@ export class NgxMatTuiCalendarComponent {
|
|
104
108
|
date.setMonth(date.getMonth() + months); // date class does the modular arithmetic
|
105
109
|
date.setDate(date.getDate() + days); // date class does the modular arithmetic
|
106
110
|
this.calendar.setDate(date);
|
111
|
+
this.calendar.toggleScheduleView(true);
|
107
112
|
}
|
108
113
|
onMonthView() {
|
109
114
|
this.calendar.changeView('month');
|
115
|
+
this.calendar.render(true); // <-- so that selection is cleared
|
110
116
|
}
|
111
117
|
onWeekView() {
|
118
|
+
// console.log(`onWeekView`)
|
112
119
|
this.calendar.changeView('week');
|
120
|
+
this.calendar.render(true); // <-- so that selection is cleared
|
113
121
|
}
|
114
122
|
onDayView() {
|
115
123
|
this.calendar.changeView('day');
|
124
|
+
this.calendar.render(true); // <-- so that selection is cleared
|
116
125
|
}
|
117
126
|
getDate() {
|
118
127
|
let date = this.calendar.getDate();
|
@@ -122,11 +131,12 @@ export class NgxMatTuiCalendarComponent {
|
|
122
131
|
});
|
123
132
|
return str;
|
124
133
|
}
|
125
|
-
createTUICalendar() {
|
126
|
-
let ioptions = this.preprocessIOptions(
|
134
|
+
createTUICalendar(iopts) {
|
135
|
+
let ioptions = this.preprocessIOptions(iopts);
|
127
136
|
// console.warn(`calendar.component.ts: createTUICalendar: ioptions:`, ioptions);
|
128
137
|
this.calendar = new Calendar('#calendar', ioptions);
|
129
138
|
// console.warn(`calendar.component.ts: createTUICalendar: this.calendar:`, this.calendar);
|
139
|
+
this.calendar.toggleScheduleView(true);
|
130
140
|
}
|
131
141
|
bindCallbacks() {
|
132
142
|
this.bindAfterRenderSchedule();
|
@@ -236,7 +246,7 @@ export class NgxMatTuiCalendarComponent {
|
|
236
246
|
let end = LocalDate.convertToJsDate(args.end);
|
237
247
|
let schedule = {
|
238
248
|
id,
|
239
|
-
calendarId: (args.calendarId == null) ? this.
|
249
|
+
calendarId: (args.calendarId == null) ? this.calendarIdDefault : args.calendarId,
|
240
250
|
title: args.title,
|
241
251
|
start: start,
|
242
252
|
end: end,
|
@@ -256,23 +266,23 @@ export class NgxMatTuiCalendarComponent {
|
|
256
266
|
}
|
257
267
|
updateSchedule(schedule) {
|
258
268
|
// console.log(`event-calendar.component.ts: updateSchedule:`, schedule);
|
259
|
-
let calendarId = (schedule.calendarId == null) ? this.
|
269
|
+
let calendarId = (schedule.calendarId == null) ? this.calendarIdDefault : schedule.calendarId;
|
260
270
|
this.calendar.updateSchedule(schedule.id, calendarId, schedule, false);
|
261
271
|
return this.calendar.getSchedule(schedule.id, calendarId);
|
262
272
|
}
|
263
273
|
getSchedule(args) {
|
264
274
|
// console.log(`event-calendar.component.ts: getSchedule:`, schedule);
|
265
|
-
let calendarId = (args.calendarId == null) ? this.
|
275
|
+
let calendarId = (args.calendarId == null) ? this.calendarIdDefault : args.calendarId;
|
266
276
|
return this.calendar.getSchedule(args.id, calendarId);
|
267
277
|
}
|
268
278
|
deleteScheduleAndNotifyParent(args) {
|
269
279
|
this.deleteSchedule(args);
|
270
|
-
let calendarId = (args.calendarId == null) ? this.
|
280
|
+
let calendarId = (args.calendarId == null) ? this.calendarIdDefault : args.calendarId;
|
271
281
|
this.userDeletedSchedule.emit({ id: args.id, calendarId });
|
272
282
|
}
|
273
283
|
deleteSchedule(args) {
|
274
284
|
// console.log(`event-calendar.component.ts: deleteSchedule:`, schedule);
|
275
|
-
let calendarId = (args.calendarId == null) ? this.
|
285
|
+
let calendarId = (args.calendarId == null) ? this.calendarIdDefault : args.calendarId;
|
276
286
|
this.calendar.deleteSchedule(args.id, calendarId, false);
|
277
287
|
}
|
278
288
|
deleteAllSchedules() {
|
@@ -312,18 +322,42 @@ export class NgxMatTuiCalendarComponent {
|
|
312
322
|
}
|
313
323
|
});
|
314
324
|
}
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
325
|
+
setDefaultOptions() {
|
326
|
+
this.setOptions();
|
327
|
+
}
|
328
|
+
setOptions(o) {
|
329
|
+
const get = (object, path, defaultValue) => {
|
330
|
+
let value = path
|
331
|
+
.split('.')
|
332
|
+
.reduce((o, p) => o[p], object);
|
333
|
+
return (value !== undefined) ? value : defaultValue;
|
334
|
+
};
|
335
|
+
let options = {
|
336
|
+
darkMode: get(o, "darkMode", false),
|
337
|
+
themeClass: get(o, "themeClass", null),
|
338
|
+
ioptions: (o && o.ioptions) ? this.setIOptions(o.ioptions) : this.getDefaultIOptions(),
|
339
|
+
buttons: {
|
340
|
+
previous: get(o, "buttons.previous", true),
|
341
|
+
next: get(o, "buttons.next", true),
|
342
|
+
today: get(o, "buttons.today", true),
|
343
|
+
longPrevious: get(o, "buttons.longPrevious", true),
|
344
|
+
longNext: get(o, "buttons.longNext", true),
|
345
|
+
month: get(o, "buttons.month", true),
|
346
|
+
week: get(o, "buttons.week", true),
|
347
|
+
day: get(o, "buttons.day", true),
|
348
|
+
}
|
349
|
+
};
|
350
|
+
this.appliedOptions = options;
|
351
|
+
// console.warn(`setOptions: `, this.appliedOptions);
|
321
352
|
}
|
322
353
|
setIOptions(ioptionsIn) {
|
323
354
|
let ioptions = this.preprocessIOptions(ioptionsIn);
|
324
|
-
this.calendar
|
325
|
-
|
326
|
-
|
355
|
+
if (this.calendar) {
|
356
|
+
this.calendar.setOptions(ioptions);
|
357
|
+
this.calendar.setTheme(ioptions.theme);
|
358
|
+
this.calendar.render(true);
|
359
|
+
this.calendar.toggleScheduleView(true);
|
360
|
+
}
|
327
361
|
return ioptions;
|
328
362
|
}
|
329
363
|
preprocessIOptions(ioptions) {
|
@@ -341,13 +375,6 @@ export class NgxMatTuiCalendarComponent {
|
|
341
375
|
}
|
342
376
|
return ioptions;
|
343
377
|
}
|
344
|
-
getDefaultOptions() {
|
345
|
-
return {
|
346
|
-
darkMode: false,
|
347
|
-
themeClass: null,
|
348
|
-
ioptions: this.getDefaultIOptions(),
|
349
|
-
};
|
350
|
-
}
|
351
378
|
getDefaultIOptions() {
|
352
379
|
return {
|
353
380
|
defaultView: 'month',
|
@@ -506,7 +533,7 @@ export class NgxMatTuiCalendarComponent {
|
|
506
533
|
}
|
507
534
|
}
|
508
535
|
NgxMatTuiCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgxMatTuiCalendarComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
509
|
-
NgxMatTuiCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: NgxMatTuiCalendarComponent, selector: "ngx-mat-tui-calendar", inputs: { options: "options" }, outputs: { userCreatedSchedule: "userCreatedSchedule", userUpdatedSchedule: "userUpdatedSchedule", userDeletedSchedule: "userDeletedSchedule" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"content-container\">\r\n <!-- These divs are here so that we can read the theme colors for the tui theme -->\r\n <!-- The outer div gives the default color for when user does not provide an Angular theme -->\r\n <div style=\"color: blue;\"> <div id=\"theme-primary\"></div></div>\r\n <div style=\"color: blue;\"> <div id=\"theme-highlight\"></div></div>\r\n <div style=\"color: blue;\"> <div id=\"theme-accent\"></div></div>\r\n <div style=\"color: red;\"> <div id=\"theme-warn\"></div></div>\r\n <div style=\"color: rgba(0, 0, 255, 0.2);\"> <div id=\"theme-primary-shaded\"></div></div>\r\n <div style=\"color: #3e3e3e;\"> <div id=\"theme-foreground\"></div></div>\r\n <div style=\"color: #e0e0e0;\"> <div id=\"theme-divider\"></div></div>\r\n <div style=\"color: white;\"> <div id=\"theme-background\"></div></div>\r\n \r\n <div class=\"calendar-container\">\r\n <!-- calendar titlebar -->\r\n <mat-toolbar class=\"menu-bar\" color=\"primary\">\r\n <!-- <div style=\"align-self: center;display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\"> -->\r\n <div style=\"display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n width: 100%; \">\r\n <div class=\"left-div\">\r\n <!-- LEFT -->\r\n <button mat-button \r\n class=\"navigation-button\"\r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 1.5rem !important;\" \r\n (click)=\"onCalendarLongPrev()\">\r\n <fa-icon [icon]=\"iconLongPrev\"></fa-icon>\r\n </button>\r\n <button mat-button
|
536
|
+
NgxMatTuiCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: NgxMatTuiCalendarComponent, selector: "ngx-mat-tui-calendar", inputs: { options: "options" }, outputs: { userCreatedSchedule: "userCreatedSchedule", userUpdatedSchedule: "userUpdatedSchedule", userDeletedSchedule: "userDeletedSchedule" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"content-container\">\r\n <!-- These divs are here so that we can read the theme colors for the tui theme -->\r\n <!-- The outer div gives the default color for when user does not provide an Angular theme -->\r\n <div style=\"color: blue;\"> <div id=\"theme-primary\"></div></div>\r\n <div style=\"color: blue;\"> <div id=\"theme-highlight\"></div></div>\r\n <div style=\"color: blue;\"> <div id=\"theme-accent\"></div></div>\r\n <div style=\"color: red;\"> <div id=\"theme-warn\"></div></div>\r\n <div style=\"color: rgba(0, 0, 255, 0.2);\"> <div id=\"theme-primary-shaded\"></div></div>\r\n <div style=\"color: #3e3e3e;\"> <div id=\"theme-foreground\"></div></div>\r\n <div style=\"color: #e0e0e0;\"> <div id=\"theme-divider\"></div></div>\r\n <div style=\"color: white;\"> <div id=\"theme-background\"></div></div>\r\n \r\n <div class=\"calendar-container\">\r\n <!-- calendar titlebar -->\r\n <mat-toolbar class=\"menu-bar\" color=\"primary\">\r\n <!-- <div style=\"align-self: center;display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\"> -->\r\n <div style=\"display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n width: 100%; \">\r\n <div class=\"left-div\">\r\n <!-- LEFT -->\r\n <button mat-button *ngIf=\"appliedOptions.buttons.longPrevious\"\r\n class=\"navigation-button\"\r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 1.5rem !important;\" \r\n (click)=\"onCalendarLongPrev()\">\r\n <fa-icon [icon]=\"iconLongPrev\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.previous\"\r\n class=\"navigation-button\" \r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 2rem !important;\" \r\n (click)=\"onCalendarPrev()\">\r\n <fa-icon [icon]=\"iconPrev\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.today\"\r\n class=\"navigation-button\"\r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 1.7rem !important;\" \r\n (click)=\"onCalendarToday()\">\r\n <fa-icon [icon]=\"iconToday\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.next\"\r\n class=\"navigation-button\" \r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 2rem !important;\" \r\n (click)=\"onCalendarNext()\">\r\n <fa-icon [icon]=\"iconNext\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.longNext\"\r\n class=\"navigation-button\"\r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 1.5rem !important;\" \r\n (click)=\"onCalendarLongNext()\">\r\n <fa-icon [icon]=\"iconLongNext\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"center-div\">\r\n <!-- CENTER -->\r\n <span class=\"event-calendar-title\">{{ getDate() }}</span>\r\n </div>\r\n <div class=\"right-div\">\r\n \r\n <!-- RIGHT -->\r\n <mat-button-toggle-group [hidden]=\"!appliedOptions.buttons.month && !appliedOptions.buttons.week && !appliedOptions.buttons.day\"\r\n class=\"view-button\" value=\"month\" id=\"@+id/toggleButton\" layout_width=\"wrap_content\"\r\n layout_height=\"wrap_content\">\r\n <mat-button-toggle *ngIf=\"appliedOptions.buttons.month\" mat-button value=\"month\" class=\"view-button\" (click)=\"onMonthView()\">\r\n <fa-icon [icon]=\"iconByMonth\"></fa-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"appliedOptions.buttons.week\" mat-button value=\"week\" class=\"view-button\" (click)=\"onWeekView()\">\r\n <fa-icon [icon]=\"iconByWeek\"></fa-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"appliedOptions.buttons.day\" mat-button value=\"day\" class=\"view-button\" (click)=\"onDayView()\">\r\n <fa-icon [icon]=\"iconByDay\"></fa-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </mat-toolbar>\r\n <ngx-mat-tui-calendar-wrapper></ngx-mat-tui-calendar-wrapper>\r\n </div>\r\n \r\n </section>\r\n", styles: [".calendar-container{transform-origin:top left}.menu-bar{display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:2rem!important}.mat-button{font-size:1.1rem!important}.mat-button.navigation-button{padding:0;min-width:32px}.left-div{width:33%;float:left;display:flex;white-space:nowrap;vertical-align:middle}.center-div{width:33%;float:right;text-align:center;white-space:nowrap;vertical-align:middle}.event-calendar-title{font-size:2rem;vertical-align:middle}.right-div{width:33%;display:flex;white-space:nowrap;vertical-align:middle;flex-flow:row-reverse}@media screen and (max-width: 599px){.left-div{transform:scale(.75);transform-origin:center left}.center-div{transform:scale(.5)}.right-div{transform:scale(1);transform-origin:center right}.right-div .mat-button-toggle-group.view-button{font-size:1.1rem!important}.right-div ::ng-deep .mat-button-toggle-label-content{padding:0 8px!important}}.mat-button-toggle-group.view-button{height:36px;font-size:1.25rem!important}.view-button{align-items:center}::ng-deep .mat-button-toggle-label-content{padding:0 10px!important}\n"], components: [{ type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i6.NgxMatTuiCalendarWrapperComponent, selector: "ngx-mat-tui-calendar-wrapper" }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }] });
|
510
537
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgxMatTuiCalendarComponent, decorators: [{
|
511
538
|
type: Component,
|
512
539
|
args: [{
|
@@ -525,4 +552,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
|
|
525
552
|
}], options: [{
|
526
553
|
type: Input
|
527
554
|
}] } });
|
528
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdC10dWktY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdC10dWktY2FsZW5kYXIvc3JjL2xpYi9uZ3gtbWF0LXR1aS1jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0LXR1aS1jYWxlbmRhci9zcmMvbGliL25neC1tYXQtdHVpLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUEwRCxNQUFNLGVBQWUsQ0FBQztBQUNsSixPQUFPLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXBGLE9BQU8sY0FBYyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxlQUFlLEVBR2YsT0FBTyxFQUNQLFNBQVMsRUFFVCxTQUFTLEVBQ1QsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUNMLE9BQU8sSUFBSSxRQUFRLEdBYXBCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLFdBQVc7QUFDWCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sbUZBQW1GLENBQUM7Ozs7Ozs7O0FBVzNJLE1BQU0sT0FBTywwQkFBMEI7SUFzQnJDLFlBQW1CLE1BQWlCO1FBQWpCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFyQnBDLGNBQVMsR0FBRyxlQUFlLENBQUM7UUFDNUIsZ0NBQWdDO1FBQ2hDLGlDQUFpQztRQUNqQyxhQUFRLEdBQUcsV0FBVyxDQUFDO1FB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QkFQdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxTQUFTLEVBQUU7d0JBQ1QsdUNBQXVDO3FCQUN4QztpQkFDRjtnR0FpQlcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0UsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgZGlzdGluY3RDb2xvcnMgZnJvbSAnZGlzdGluY3QtY29sb3JzJztcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiY2hyb21hLWpzXCI7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBmYUNhbGVuZGFyQ2hlY2ssXHJcbiAgZmFDYXJldFNxdWFyZUxlZnQsXHJcbiAgZmFDYXJldFNxdWFyZVJpZ2h0LFxyXG4gIGZhVGFibGUsXHJcbiAgZmFDb2x1bW5zLFxyXG4gIGZhTGlzdCxcclxuICBmYUxpc3RBbHQsXHJcbiAgZmFGb3J3YXJkLFxyXG4gIGZhRmFzdEJhY2t3YXJkLFxyXG4gIGZhQmFja3dhcmQsXHJcbiAgZmFDYXJldExlZnQsXHJcbiAgZmFDYXJldFJpZ2h0LFxyXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7XHJcbiAgZGVmYXVsdCBhcyBDYWxlbmRhcixcclxuICBJQ2FsZW5kYXJJbmZvLFxyXG4gIElFdmVudERhdGVPYmplY3QsXHJcbiAgSUV2ZW50TW9yZU9iamVjdCxcclxuICBJRXZlbnRPYmplY3QsXHJcbiAgSUV2ZW50U2NoZWR1bGVPYmplY3QsXHJcbiAgSU9wdGlvbnMsXHJcbiAgSVNjaGVkdWxlLFxyXG4gIElUaGVtZSxcclxuICBJVGltZXpvbmUsXHJcbiAgSVdlZWtPcHRpb25zLFxyXG4gIFRFdmVudEJlZm9yZUNyZWF0ZVNjaGVkdWxlLFxyXG4gIFRaRGF0ZSxcclxufSBmcm9tICd0dWktY2FsZW5kYXInO1xyXG5cclxuLy8gcHJvamVjdCBcclxuaW1wb3J0IHsgTG9jYWxEYXRlIH0gZnJvbSAnLi9sb2NhbC1kYXRlLmpzJztcclxuaW1wb3J0IHsgTmd4TWF0VHVpQ2FsZW5kYXJFZGl0b3JEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL25neC1tYXQtdHVpLWNhbGVuZGFyLWVkaXRvci1kaWFsb2cvbmd4LW1hdC10dWktY2FsZW5kYXItZWRpdG9yLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck9wdGlvbnMgfSBmcm9tICcuL2NhbGVuZGFyLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDYWxlbmRhckVkaXRvck9wdGlvbnMgfSBmcm9tICcuL2NhbGVuZGFyLWVkaXRvci1vcHRpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LW1hdC10dWktY2FsZW5kYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtbWF0LXR1aS1jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9uZ3gtbWF0LXR1aS1jYWxlbmRhci5jb21wb25lbnQuc2NzcydcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4TWF0VHVpQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBpY29uVG9kYXkgPSBmYUNhbGVuZGFyQ2hlY2s7XHJcbiAgLy8gaWNvblByZXYgPSBmYUNhcmV0U3F1YXJlTGVmdDtcclxuICAvLyBpY29uTmV4dCA9IGZhQ2FyZXRTcXVhcmVSaWdodDtcclxuICBpY29uUHJldiA9IGZhQ2FyZXRMZWZ0O1xyXG4gIGljb25OZXh0ID0gZmFDYXJldFJpZ2h0O1xyXG4gIGljb25Mb25nUHJldiA9IGZhQmFja3dhcmQ7XHJcbiAgaWNvbkxvbmdOZXh0ID0gZmFGb3J3YXJkO1xyXG4gIGljb25CeU1vbnRoID0gZmFUYWJsZTtcclxuICBpY29uQnlXZWVrID0gZmFDb2x1bW5zO1xyXG4gIGljb25CeURheSA9IGZhTGlzdEFsdDtcclxuXHJcbiAgY2FsZW5kYXI6IENhbGVuZGFyOyAgLy8gdGhlIFRVSSBDYWxlbmRhciBPYmplY3RcclxuICBjYWxlbmRhcklkOiBzdHJpbmc7XHJcbiAgY29sb3JzOiBDb2xvcltdO1xyXG4gIGNvbG9ySW5kZXg6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgdXNlckNyZWF0ZWRTY2hlZHVsZTogRXZlbnRFbWl0dGVyPElTY2hlZHVsZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHVzZXJVcGRhdGVkU2NoZWR1bGU6IEV2ZW50RW1pdHRlcjxJU2NoZWR1bGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1c2VyRGVsZXRlZFNjaGVkdWxlOiBFdmVudEVtaXR0ZXI8SVNjaGVkdWxlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBvcHRpb25zOiBDYWxlbmRhck9wdGlvbnM7XHJcbiAgYXBwbGllZE9wdGlvbnM6IENhbGVuZGFyT3B0aW9uczsgLy8gdGhpcyBpcyBuZWVkZWQgZm9yIHdoZW4gb3B0aW9ucyBpcyBub3QgY29ubmVjdGVkXHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge1xyXG4gICAgLy8gd2Ugc2xpY2Ugb2ZmIHRoZSBmaXJzdCBjb2xvciBzaW5jZSBpdCBpcyBncmF5XHJcbiAgICB0aGlzLmNvbG9ycyA9IGRpc3RpbmN0Q29sb3JzKHsgbGlnaHRNaW46IDcwLCBjb3VudDogMTUgfSkuc2xpY2UoMSk7XHJcbiAgICB0aGlzLmNvbG9ySW5kZXggPSAwO1xyXG4gICAgdGhpcy5jYWxlbmRhcklkID0gdXVpZHY0KCk7XHJcblxyXG4gICAgdGhpcy5hcHBsaWVkT3B0aW9ucyA9IHRoaXMuZ2V0RGVmYXVsdE9wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gY29uc29sZS53YXJuKGBjYWxlbmRhci5jb21wb25lbnQudHM6IG5nT25pdGApXHJcbiAgICB0aGlzLmNyZWF0ZVRVSUNhbGVuZGFyKCk7XHJcbiAgICB0aGlzLmJpbmRDYWxsYmFja3MoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIGNvbnNvbGUud2FybihjaGFuZ2VzKTtcclxuICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XHJcblxyXG4gICAgICBpZiAoY2hhbmdlcy5vcHRpb25zKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS53YXJuKGBjaGFuZ2Uub3B0aW9uOmAsIGNoYW5nZXMub3B0aW9ucyk7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBjaGFuZ2VzLm9wdGlvbnMuY3VycmVudFZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jYWxlbmRhci5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbGVuZGFyTG9uZ1ByZXYoKSB7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZSA9ICh0aGlzLmNhbGVuZGFyLmdldERhdGUoKSBhcyBUWkRhdGUpLnRvRGF0ZSgpO1xyXG4gICAgbGV0IGRheXMgPSAwO1xyXG4gICAgbGV0IG1vbnRocyA9IDA7XHJcbiAgICBsZXQgeWVhcnMgPSAwO1xyXG4gICAgc3dpdGNoICh0aGlzLmNhbGVuZGFyLmdldFZpZXdOYW1lKCkpIHtcclxuICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICBkYXlzID0gLTc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dlZWsnOlxyXG4gICAgICAgIGRheXMgPSAtMjg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICB5ZWFycyA9IC0xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFycyk7XHJcbiAgICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIG1vbnRocyk7ICAvLyBkYXRlIGNsYXNzIGRvZXMgdGhlIG1vZHVsYXIgYXJpdGhtZXRpY1xyXG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7ICAvLyBkYXRlIGNsYXNzIGRvZXMgdGhlIG1vZHVsYXIgYXJpdGhtZXRpY1xyXG4gICAgdGhpcy5jYWxlbmRhci5zZXREYXRlKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgb25DYWxlbmRhclByZXYoKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnByZXYoKTtcclxuICB9XHJcblxyXG4gIG9uQ2FsZW5kYXJUb2RheSgpIHtcclxuICAgIHRoaXMuY2FsZW5kYXIudG9kYXkoKTtcclxuICB9XHJcblxyXG4gIG9uQ2FsZW5kYXJOZXh0KCkge1xyXG4gICAgdGhpcy5jYWxlbmRhci5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbGVuZGFyTG9uZ05leHQoKSB7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZSA9ICh0aGlzLmNhbGVuZGFyLmdldERhdGUoKSBhcyBUWkRhdGUpLnRvRGF0ZSgpO1xyXG4gICAgbGV0IGRheXMgPSAwO1xyXG4gICAgbGV0IG1vbnRocyA9IDA7XHJcbiAgICBsZXQgeWVhcnMgPSAwO1xyXG4gICAgc3dpdGNoICh0aGlzLmNhbGVuZGFyLmdldFZpZXdOYW1lKCkpIHtcclxuICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICBkYXlzID0gNztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnd2Vlayc6XHJcbiAgICAgICAgZGF5cyA9IDI4O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgeWVhcnMgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFycyk7XHJcbiAgICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIG1vbnRocyk7ICAvLyBkYXRlIGNsYXNzIGRvZXMgdGhlIG1vZHVsYXIgYXJpdGhtZXRpY1xyXG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7ICAvLyBkYXRlIGNsYXNzIGRvZXMgdGhlIG1vZHVsYXIgYXJpdGhtZXRpY1xyXG4gICAgdGhpcy5jYWxlbmRhci5zZXREYXRlKGRhdGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uTW9udGhWaWV3KCkge1xyXG4gICAgdGhpcy5jYWxlbmRhci5jaGFuZ2VWaWV3KCdtb250aCcpO1xyXG4gIH1cclxuXHJcbiAgb25XZWVrVmlldygpIHtcclxuICAgIHRoaXMuY2FsZW5kYXIuY2hhbmdlVmlldygnd2VlaycpO1xyXG4gIH1cclxuXHJcbiAgb25EYXlWaWV3KCkge1xyXG4gICAgdGhpcy5jYWxlbmRhci5jaGFuZ2VWaWV3KCdkYXknKTtcclxuICB9XHJcblxyXG5cclxuICBnZXREYXRlKCkge1xyXG4gICAgbGV0IGRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldERhdGUoKTtcclxuICAgIGxldCBzdHIgPSBkYXRlLnRvRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIsIHtcclxuICAgICAgeWVhcjogJ251bWVyaWMnLFxyXG4gICAgICBtb250aDogJ3Nob3J0JyxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRVSUNhbGVuZGFyKCkge1xyXG4gICAgbGV0IGlvcHRpb25zID0gdGhpcy5wcmVwcm9jZXNzSU9wdGlvbnMobnVsbCk7XHJcbiAgICAvLyBjb25zb2xlLndhcm4oYGNhbGVuZGFyLmNvbXBvbmVudC50czogY3JlYXRlVFVJQ2FsZW5kYXI6IGlvcHRpb25zOmAsIGlvcHRpb25zKTtcclxuICAgIHRoaXMuY2FsZW5kYXIgPSBuZXcgQ2FsZW5kYXIoJyNjYWxlbmRhcicsIGlvcHRpb25zKTtcclxuICAgIC8vIGNvbnNvbGUud2FybihgY2FsZW5kYXIuY29tcG9uZW50LnRzOiBjcmVhdGVUVUlDYWxlbmRhcjogdGhpcy5jYWxlbmRhcjpgLCB0aGlzLmNhbGVuZGFyKTtcclxuICB9XHJcblxyXG5cclxuICBiaW5kQ2FsbGJhY2tzKCkge1xyXG4gICAgdGhpcy5iaW5kQWZ0ZXJSZW5kZXJTY2hlZHVsZSgpO1xyXG4gICAgdGhpcy5iaW5kQ2xpY2tUaW1lem9uZXNDb2xsYXBzZUJ0bigpO1xyXG4gICAgdGhpcy5iaW5kQ2xpY2tEYXluYW1lKCk7XHJcbiAgICB0aGlzLmJpbmRDbGlja01vcmUoKTtcclxuICAgIHRoaXMuYmluZENsaWNrU2NoZWR1bGUoKTtcclxuICAgIHRoaXMuYmluZEJlZm9yZUNyZWF0ZVNjaGVkdWxlKCk7XHJcbiAgICB0aGlzLmJpbmRCZWZvcmVVcGRhdGVTY2hlZHVsZSgpO1xyXG4gICAgdGhpcy5iaW5kQmVmb3JlRGVsZXRlU2NoZWR1bGUoKTtcclxuICB9XHJcblxyXG4gIGJpbmRBZnRlclJlbmRlclNjaGVkdWxlKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignYWZ0ZXJSZW5kZXJTY2hlZHVsZScsIGZ1bmN0aW9uIChldmVudDogeyBzY2hlZHVsZTogSVNjaGVkdWxlIH0pIHtcclxuICAgICAgLy8gY29uc29sZS53YXJuKGBhZnRlclJlbmRlclNjaGVkdWxlYCwgZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQ2xpY2tUaW1lem9uZXNDb2xsYXBzZUJ0bigpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuY2FsZW5kYXIub24oJ2NsaWNrVGltZXpvbmVzQ29sbGFwc2VCdG4nLCBmdW5jdGlvbiAodGltZXpvbmVzQ29sbGFwc2VkOiBib29sZWFuKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUud2FybihgY2xpY2tUaW1lem9uZXNDb2xsYXBzZUJ0bmAsIHRpbWV6b25lc0NvbGxhcHNlZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBiaW5kQ2xpY2tEYXluYW1lKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignY2xpY2tEYXluYW1lJywgZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnREYXRlT2JqZWN0KSB7XHJcbiAgICAgIC8vIGNvbnNvbGUud2FybihgY2xpY2tEYXluYW1lYCwgZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQ2xpY2tNb3JlKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignY2xpY2tNb3JlJywgZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnRNb3JlT2JqZWN0KSB7XHJcbiAgICAgIC8vIGNvbnNvbGUud2FybihgY2xpY2tNb3JlYCwgZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQ2xpY2tTY2hlZHVsZSgpIHtcclxuICAgIC8vIG9ubHkgd29ya3MgaWYgdXNlRGV0YWlsUG9wdXA6IGZhbHNlLFxyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignY2xpY2tTY2hlZHVsZScsIGZ1bmN0aW9uIChldmVudDogSUV2ZW50U2NoZWR1bGVPYmplY3QpIHtcclxuICAgICAgLy8gY29uc29sZS53YXJuKGBjbGlja1NjaGVkdWxlYCwgZXZlbnQpO1xyXG4gICAgICBsZXQgc2NoZWR1bGU6IElTY2hlZHVsZSA9IHsgLi4uZXZlbnQuc2NoZWR1bGUgfTtcclxuICAgICAgc2NoZWR1bGUuc3RhcnQgPSAobmV3IExvY2FsRGF0ZShzY2hlZHVsZS5zdGFydCkpLnRvRGF0ZSgpO1xyXG4gICAgICBzY2hlZHVsZS5lbmQgPSAobmV3IExvY2FsRGF0ZShzY2hlZHVsZS5lbmQpKS50b0RhdGUoKTtcclxuICAgICAgdGhhdC5vcGVuUG9wdXBTY2hlZHVsZUVkaXRvcihzY2hlZHVsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGJpbmRCZWZvcmVDcmVhdGVTY2hlZHVsZSgpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuY2FsZW5kYXIub24oJ2JlZm9yZUNyZWF0ZVNjaGVkdWxlJywgZnVuY3Rpb24gKGV2ZW50OiBURXZlbnRCZWZvcmVDcmVhdGVTY2hlZHVsZSkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgYmVmb3JlQ3JlYXRlU2NoZWR1bGVgLCBldmVudCk7XHJcbiAgICAgIGxldCBzdGFydDogRGF0ZSA9IChuZXcgTG9jYWxEYXRlKGV2ZW50LnN0YXJ0KSkudG9EYXRlKCk7XHJcbiAgICAgIHN0YXJ0LnNldEhvdXJzKDkpO1xyXG4gICAgICBsZXQgZW5kOiBEYXRlID0gKG5ldyBMb2NhbERhdGUoZXZlbnQuZW5kKSkudG9EYXRlKCk7XHJcbiAgICAgIGVuZC5zZXRIb3VycygxMCk7XHJcbiAgICAgIHRoYXQub3BlblBvcHVwU2NoZWR1bGVFZGl0b3Ioe1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBzdGFydDogc3RhcnQsXHJcbiAgICAgICAgZW5kOiBlbmQsXHJcbiAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgIH0gYXMgSVNjaGVkdWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmluZEJlZm9yZVVwZGF0ZVNjaGVkdWxlKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignYmVmb3JlVXBkYXRlU2NoZWR1bGUnLCBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudE9iamVjdCkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgYmVmb3JlVXBkYXRlU2NoZWR1bGVgLCBldmVudCk7XHJcbiAgICAgIHRoYXQudXBkYXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQmVmb3JlRGVsZXRlU2NoZWR1bGUoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICB0aGlzLmNhbGVuZGFyLm9uKCdiZWZvcmVEZWxldGVTY2hlZHVsZScsIGZ1bmN0aW9uIChldmVudDogSUV2ZW50U2NoZWR1bGVPYmplY3QpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coYGJlZm9yZURlbGV0ZVNjaGVkdWxlYCwgZXZlbnQuc2NoZWR1bGUpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgYmVmb3JlRGVsZXRlU2NoZWR1bGVgLCBldmVudC5zY2hlZHVsZSk7XHJcbiAgICAgIHRoYXQuZGVsZXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoeyBpZDogZXZlbnQuc2NoZWR1bGUuaWQsIGNhbGVuZGFySWQ6IGV2ZW50LnNjaGVkdWxlLmNhbGVuZGFySWQgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5leHRDb2xvcigpIHtcclxuICAgIGxldCBjb2xvciA9IHRoaXMuY29sb3JzW3RoaXMuY29sb3JJbmRleCsrXS5oZXgoKTtcclxuICAgIGlmICh0aGlzLmNvbG9ySW5kZXggPj0gdGhpcy5jb2xvcnMubGVuZ3RoKSB0aGlzLmNvbG9ySW5kZXggPSAwO1xyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoYXJnczogSVNjaGVkdWxlKSB7XHJcbiAgICBsZXQgc2NoZWR1bGUgPSB0aGlzLmNyZWF0ZVNjaGVkdWxlKGFyZ3MpO1xyXG4gICAgdGhpcy51c2VyQ3JlYXRlZFNjaGVkdWxlLmVtaXQoc2NoZWR1bGUpO1xyXG4gICAgcmV0dXJuIHNjaGVkdWxlO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2NoZWR1bGVzKHNjaGVkdWxlczogSVNjaGVkdWxlW10pIHtcclxuICAgIGxldCBuZXdTY2hlZHVsZXMgPSBbXTtcclxuICAgIGZvciAobGV0IHNjaGVkdWxlIG9mIHNjaGVkdWxlcykge1xyXG4gICAgICBuZXdTY2hlZHVsZXMucHVzaCh0aGlzLmNyZWF0ZVNjaGVkdWxlKHNjaGVkdWxlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3U2NoZWR1bGVzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2NoZWR1bGUoYXJnczogSVNjaGVkdWxlKTogSVNjaGVkdWxlIHtcclxuICAgIC8vIGlmIChmb3JtLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBjcmVhdGUgYSBjb2xvclxyXG4gICAgbGV0IGNvbG9yID0gdGhpcy5uZXh0Q29sb3IoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvbG9yKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgYW4gaWRcclxuICAgIGxldCBpZCA9IChhcmdzLmlkID09IG51bGwpID8gJycgOiBhcmdzLmlkLnRvU3RyaW5nKCk7XHJcbiAgICBpZiAoaWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGlkID0gdXVpZHY0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHN0YXJ0OiBEYXRlID0gTG9jYWxEYXRlLmNvbnZlcnRUb0pzRGF0ZShhcmdzLnN0YXJ0KTtcclxuICAgIGxldCBlbmQ6IERhdGUgPSBMb2NhbERhdGUuY29udmVydFRvSnNEYXRlKGFyZ3MuZW5kKTtcclxuXHJcbiAgICBsZXQgc2NoZWR1bGU6IElTY2hlZHVsZSA9IHtcclxuICAgICAgaWQsXHJcbiAgICAgIGNhbGVuZGFySWQ6IChhcmdzLmNhbGVuZGFySWQgPT0gbnVsbCkgPyB0aGlzLmNhbGVuZGFySWQgOiBhcmdzLmNhbGVuZGFySWQsXHJcbiAgICAgIHRpdGxlOiBhcmdzLnRpdGxlLFxyXG4gICAgICBzdGFydDogc3RhcnQsXHJcbiAgICAgIGVuZDogZW5kLFxyXG4gICAgICBjYXRlZ29yeTogYXJncy5jYXRlZ29yeSxcclxuICAgICAgaXNBbGxEYXk6IGFyZ3MuaXNBbGxEYXksXHJcbiAgICAgIGR1ZURhdGVDbGFzczogJycsXHJcbiAgICAgIGJnQ29sb3I6IGNvbG9yLFxyXG4gICAgfSBhcyBJU2NoZWR1bGVcclxuICAgIC8vIGNvbnNvbGUubG9nKGBldmVudC1jYWxlbmRhci5jb21wb25lbnQudHM6IGNyZWF0ZUV2ZW50OmAsIHNjaGVkdWxlKTtcclxuICAgIHRoaXMuY2FsZW5kYXIuY3JlYXRlU2NoZWR1bGVzKFtzY2hlZHVsZV0pO1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIuZ2V0U2NoZWR1bGUoc2NoZWR1bGUuaWQsIHNjaGVkdWxlLmNhbGVuZGFySWQpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoYXJnczogSVNjaGVkdWxlKSB7XHJcbiAgICBsZXQgc2NoZWR1bGUgPSB0aGlzLnVwZGF0ZVNjaGVkdWxlKGFyZ3MpO1xyXG4gICAgdGhpcy51c2VyVXBkYXRlZFNjaGVkdWxlLmVtaXQoc2NoZWR1bGUpO1xyXG4gICAgcmV0dXJuIHNjaGVkdWxlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2NoZWR1bGUoc2NoZWR1bGU6IElTY2hlZHVsZSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coYGV2ZW50LWNhbGVuZGFyLmNvbXBvbmVudC50czogdXBkYXRlU2NoZWR1bGU6YCwgc2NoZWR1bGUpO1xyXG4gICAgbGV0IGNhbGVuZGFySWQgPSAoc2NoZWR1bGUuY2FsZW5kYXJJZCA9PSBudWxsKSA/IHRoaXMuY2FsZW5kYXJJZCA6IHNjaGVkdWxlLmNhbGVuZGFySWQ7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnVwZGF0ZVNjaGVkdWxlKHNjaGVkdWxlLmlkLCBjYWxlbmRhcklkLCBzY2hlZHVsZSwgZmFsc2UpO1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIuZ2V0U2NoZWR1bGUoc2NoZWR1bGUuaWQsIGNhbGVuZGFySWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NoZWR1bGUoYXJnczogeyBpZDogc3RyaW5nLCBjYWxlbmRhcklkOiBzdHJpbmcgfSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coYGV2ZW50LWNhbGVuZGFyLmNvbXBvbmVudC50czogZ2V0U2NoZWR1bGU6YCwgc2NoZWR1bGUpO1xyXG4gICAgbGV0IGNhbGVuZGFySWQgPSAoYXJncy5jYWxlbmRhcklkID09IG51bGwpID8gdGhpcy5jYWxlbmRhcklkIDogYXJncy5jYWxlbmRhcklkO1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIuZ2V0U2NoZWR1bGUoYXJncy5pZCwgY2FsZW5kYXJJZCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTY2hlZHVsZUFuZE5vdGlmeVBhcmVudChhcmdzOiB7IGlkOiBzdHJpbmcsIGNhbGVuZGFySWQ6IHN0cmluZyB9KSB7XHJcbiAgICB0aGlzLmRlbGV0ZVNjaGVkdWxlKGFyZ3MpO1xyXG4gICAgbGV0IGNhbGVuZGFySWQgPSAoYXJncy5jYWxlbmRhcklkID09IG51bGwpID8gdGhpcy5jYWxlbmRhcklkIDogYXJncy5jYWxlbmRhcklkO1xyXG4gICAgdGhpcy51c2VyRGVsZXRlZFNjaGVkdWxlLmVtaXQoeyBpZDogYXJncy5pZCwgY2FsZW5kYXJJZCB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVNjaGVkdWxlKGFyZ3M6IHsgaWQ6IHN0cmluZywgY2FsZW5kYXJJZDogc3RyaW5nIH0pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGBldmVudC1jYWxlbmRhci5jb21wb25lbnQudHM6IGRlbGV0ZVNjaGVkdWxlOmAsIHNjaGVkdWxlKTtcclxuICAgIGxldCBjYWxlbmRhcklkID0gKGFyZ3MuY2FsZW5kYXJJZCA9PSBudWxsKSA/IHRoaXMuY2FsZW5kYXJJZCA6IGFyZ3MuY2FsZW5kYXJJZDtcclxuICAgIHRoaXMuY2FsZW5kYXIuZGVsZXRlU2NoZWR1bGUoYXJncy5pZCwgY2FsZW5kYXJJZCwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQWxsU2NoZWR1bGVzKCkge1xyXG4gICAgdGhpcy5jYWxlbmRhci5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgb3BlblBvcHVwU2NoZWR1bGVFZGl0b3Ioc2NoZWR1bGU6IElTY2hlZHVsZSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ29wZW5Qb3B1cFNjaGVkdWxlRWRpdG9yOiBjYWxldmVudDonLCBzY2hlZHVsZSk7XHJcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICBpZiAodGhpcy5hcHBsaWVkT3B0aW9ucy50aGVtZUNsYXNzKSB7XHJcbiAgICAgIGRpYWxvZ0NvbmZpZy5wYW5lbENsYXNzID0gdGhpcy5hcHBsaWVkT3B0aW9ucy50aGVtZUNsYXNzO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS53YXJuKGBvcHRpb25zOiBgLCB0aGlzLmFwcGxpZWRPcHRpb25zKTtcclxuICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0geyBzY2hlZHVsZSwgZGFya01vZGU6IHRoaXMuYXBwbGllZE9wdGlvbnMuZGFya01vZGUsIHRoZW1lQ2xhc3M6IHRoaXMuYXBwbGllZE9wdGlvbnMudGhlbWVDbGFzcyB9IGFzIENhbGVuZGFyRWRpdG9yT3B0aW9ucztcclxuICAgIGRpYWxvZ0NvbmZpZy5hdXRvRm9jdXMgPSB0cnVlO1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRUdWlDYWxlbmRhckVkaXRvckRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcclxuICAgIC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0VHVpQ2FsZW5kYXJTY2hlZHVsZUVkaXRvckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgLy8gICBkYXRhOiBzY2hlZHVsZSxcclxuICAgIC8vIH0pO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IHsgc2NoZWR1bGU6IElTY2hlZHVsZSwgcGVyZm9ybURlbGV0ZTogYm9vbGVhbiB9KSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdvcGVuUG9wdXBTY2hlZHVsZUVkaXRvcjogVGhlIGRpYWxvZyB3YXMgY2xvc2VkJywgcmVzdWx0KTtcclxuICAgICAgdGhpcy5jYWxlbmRhci5yZW5kZXIodHJ1ZSk7ICAvLyA8LS0gc28gdGhhdCBzZWxlY3Rpb24gaXMgY2xlYXJlZFxyXG4gICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5zY2hlZHVsZSkge1xyXG4gICAgICAgIGxldCBzY2hlZHVsZSA9IHJlc3VsdC5zY2hlZHVsZTtcclxuICAgICAgICBpZiAocmVzdWx0LnBlcmZvcm1EZWxldGUgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy8gZGVsZXRlXHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgb3BlblBvcHVwU2NoZWR1bGVFZGl0b3I6YWZ0ZXJDTG9zZWQ6IGRlbGV0ZVNjaGVkdWxlYCk7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZVNjaGVkdWxlQW5kTm90aWZ5UGFyZW50KHsgaWQ6IHNjaGVkdWxlLmlkLCBjYWxlbmRhcklkOiBzY2hlZHVsZS5jYWxlbmRhcklkIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZWR1bGUuaWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coYG9wZW5Qb3B1cFNjaGVkdWxlRWRpdG9yOmFmdGVyQ0xvc2VkOiBhZGRTY2hlZHVsZWApO1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVTY2hlZHVsZUFuZE5vdGlmeVBhcmVudChzY2hlZHVsZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBvcGVuUG9wdXBTY2hlZHVsZUVkaXRvcjphZnRlckNMb3NlZDogdXBkYXRlU2NoZWR1bGVgKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoc2NoZWR1bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBDYWxlbmRhck9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09IG51bGwpIHtcclxuICAgICAgb3B0aW9ucyA9IHRoaXMuZ2V0RGVmYXVsdE9wdGlvbnMoKTtcclxuICAgIH1cclxuICAgIG9wdGlvbnMuaW9wdGlvbnMgPSB0aGlzLnNldElPcHRpb25zKG9wdGlvbnMuaW9wdGlvbnMpO1xyXG4gICAgdGhpcy5hcHBsaWVkT3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcclxuICB9XHJcblxyXG4gIHNldElPcHRpb25zKGlvcHRpb25zSW46IElPcHRpb25zKSB7XHJcbiAgICBsZXQgaW9wdGlvbnMgPSB0aGlzLnByZXByb2Nlc3NJT3B0aW9ucyhpb3B0aW9uc0luKTtcclxuICAgIHRoaXMuY2FsZW5kYXIuc2V0T3B0aW9ucyhpb3B0aW9ucyk7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnNldFRoZW1lKGlvcHRpb25zLnRoZW1lKTtcclxuICAgIHRoaXMuY2FsZW5kYXIucmVuZGVyKHRydWUpO1xyXG4gICAgcmV0dXJuIGlvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJlcHJvY2Vzc0lPcHRpb25zKGlvcHRpb25zOiBJT3B0aW9ucyk6IElPcHRpb25zIHtcclxuICAgIGxldCBkZWZzOiBJT3B0aW9ucyA9IHRoaXMuZ2V0RGVmYXVsdElPcHRpb25zKCk7XHJcbiAgICBpZiAoaW9wdGlvbnMgPT0gbnVsbCkge1xyXG4gICAgICBpb3B0aW9ucyA9IGRlZnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpb3B0aW9ucyA9IHsgLi4uZGVmcywgLi4uaW9wdGlvbnMgfTtcclxuICAgIH1cclxuICAgIGlvcHRpb25zLnVzZUNyZWF0aW9uUG9wdXAgPSBmYWxzZTtcclxuICAgIGlvcHRpb25zLnVzZURldGFpbFBvcHVwID0gZmFsc2U7XHJcbiAgICBpZiAoIWlvcHRpb25zLnRoZW1lKSB7XHJcbiAgICAgIGlvcHRpb25zLnRoZW1lID0gdGhpcy5nZXREZWZhdWx0VGhlbWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpb3B0aW9ucztcclxuICB9XHJcblxyXG5cclxuICBnZXREZWZhdWx0T3B0aW9ucygpOiBDYWxlbmRhck9wdGlvbnMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGFya01vZGU6IGZhbHNlLFxyXG4gICAgICB0aGVtZUNsYXNzOiBudWxsLFxyXG4gICAgICBpb3B0aW9uczogdGhpcy5nZXREZWZhdWx0SU9wdGlvbnMoKSxcclxuICAgIH0gYXMgQ2FsZW5kYXJPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdElPcHRpb25zKCk6IElPcHRpb25zIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGRlZmF1bHRWaWV3OiAnbW9udGgnLFxyXG4gICAgICB0YXNrVmlldzogdHJ1ZSxcclxuICAgICAgdXNlQ3JlYXRpb25Qb3B1cDogZmFsc2UsXHJcbiAgICAgIHVzZURldGFpbFBvcHVwOiBmYWxzZSxcclxuICAgICAgdGhlbWU6IHRoaXMuZ2V0RGVmYXVsdFRoZW1lKCksXHJcbiAgICAgIHRlbXBsYXRlOiB7XHJcbiAgICAgICAgbW9udGhEYXluYW1lOiBmdW5jdGlvbiAoZGF5bmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImNhbGVuZGFyLXdlZWstZGF5bmFtZS1uYW1lXCI+JyArIGRheW5hbWUubGFiZWwgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB3ZWVrOiB7XHJcbiAgICAgICAgLy8gc3RhcnREYXlPZldlZWs6IHVuZGVmaW5lZCxcclxuICAgICAgICAvLyBkYXluYW1lczogdW5kZWZpbmVkLFxyXG4gICAgICAgIG5hcnJvd1dlZWtlbmQ6IGZhbHNlLFxyXG4gICAgICAgIC8vIHdvcmt3ZWVrOiB0cnVlLFxyXG4gICAgICAgIHNob3dUaW1lem9uZUNvbGxhcHNlQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIHRpbWV6b25lc0NvbGxhcHNlZDogdHJ1ZSxcclxuICAgICAgICBob3VyU3RhcnQ6IDcsXHJcbiAgICAgICAgaG91ckVuZDogMjAsXHJcbiAgICAgIH0gYXMgSVdlZWtPcHRpb25zLFxyXG4gICAgfSBhcyBJT3B0aW9ucztcclxuXHJcbiAgfVxyXG5cclxuICBnZXRDb2xvcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdGhlbWUtJHtuYW1lfWApO1xyXG4gICAgaWYgKGVsKSB7XHJcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xyXG4gICAgICAvLyBjb25zb2xlLndhcm4oYHRoZW1lLSR7bmFtZX0gY29sb3I6YCwgc3R5bGUuY29sb3IpO1xyXG4gICAgICByZXR1cm4gc3R5bGUuY29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0VGhlbWUoKTogSVRoZW1lIHtcclxuICAgIGZ1bmN0aW9uIGFkanVzdEhleE9wYWNpdHkoY29sb3IsIG9wYWNpdHkpIHtcclxuICAgICAgY29uc3QgciA9IHBhcnNlSW50KGNvbG9yLnNsaWNlKDEsIDMpLCAxNik7XHJcbiAgICAgIGNvbnN0IGcgPSBwYXJzZUludChjb2xvci5zbGljZSgzLCA1KSwgMTYpO1xyXG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoY29sb3Iuc2xpY2UoNSwgNyksIDE2KTtcclxuXHJcbiAgICAgIHJldHVybiAncmdiYSgnICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnLCAnICsgb3BhY2l0eSArICcpJztcclxuICAgIH1cclxuXHJcbiAgICAvLyBkZWZhdWx0IGtleXMgYW5kIHN0eWxlc1xyXG4gICAgLy8gVE9ETzogYXBwbHkgTWF0ZXJpYWwgRGVzaWduIFRoZW1lIFxyXG4gICAgbGV0IGJhY2tncm91bmQgPSB0aGlzLmdldENvbG9yKFwiYmFja2dyb3VuZFwiKTtcclxuICAgIGxldCBib3JkZXIgPSB0aGlzLmdldENvbG9yKFwiZGl2aWRlclwiKTtcclxuICAgIGxldCBib3JkZXJMaWdodCA9IHRoaXMuZ2V0Q29sb3IoXCJkaXZpZGVyLWxpZ2h0XCIpO1xyXG4gICAgbGV0IHNoYWRvdyA9IHRoaXMuZ2V0Q29sb3IoXCJkaXZpZGVyXCIpO1xyXG4gICAgbGV0IGhpZ2hsaWdodCA9IHRoaXMuZ2V0Q29sb3IoXCJoaWdobGlnaHRcIik7XHJcbiAgICBsZXQgcHJpbWFyeSA9IHRoaXMuZ2V0Q29sb3IoXCJwcmltYXJ5XCIpO1xyXG4gICAgbGV0IHdhcm4gPSB0aGlzLmdldENvbG9yKFwid2FyblwiKTtcclxuICAgIGxldCB0ZXh0ID0gdGhpcy5nZXRDb2xvcihcImZvcmVncm91bmRcIik7XHJcbiAgICBsZXQgcHJpbWFyeVNoYWRlZCA9IHRoaXMuZ2V0Q29sb3IoXCJwcmltYXJ5LXNoYWRlZFwiKTtcclxuXHJcbiAgICAvLyB0dWktZnVsbC1jYWxlbmRhci13ZWVrZGF5LXNjaGVkdWxlLXRpdGxlXHJcbiAgICAvL2NhbGVuZGFyLXdlZWstZGF5bmFtZS1uYW1lXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnY29tbW9uLmJvcmRlcic6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuICAgICAgJ2NvbW1vbi5iYWNrZ3JvdW5kQ29sb3InOiBiYWNrZ3JvdW5kLFxyXG4gICAgICAnY29tbW9uLmhvbGlkYXkuY29sb3InOiB3YXJuLFxyXG4gICAgICAnY29tbW9uLnNhdHVyZGF5LmNvbG9yJzogdGV4dCxcclxuICAgICAgJ2NvbW1vbi5kYXluYW1lLmNvbG9yJzogdGV4dCxcclxuICAgICAgJ2NvbW1vbi50b2RheS5jb2xvcic6ICcjMGYwJyxcclxuXHJcbiAgICAgIC8vIGNyZWF0aW9uIGd1aWRlIHN0eWxlXHJcbiAgICAgICdjb21tb24uY3JlYXRpb25HdWlkZS5iYWNrZ3JvdW5kQ29sb3InOiBwcmltYXJ5U2hhZGVkLFxyXG4gICAgICAnY29tbW9uLmNyZWF0aW9uR3VpZGUuYm9yZGVyJzogYDFweCBzb2xpZCAke2hpZ2hsaWdodH1gLFxyXG5cclxuICAgICAgLy8gbW9udGggaGVhZGVyICdkYXluYW1lJ1xyXG4gICAgICAnbW9udGguZGF5bmFtZS5oZWlnaHQnOiAnMzFweCcsXHJcbiAgICAgICdtb250aC5kYXluYW1lLmJvcmRlckxlZnQnOiBgMXB4IHNvbGlkICR7Ym9yZGVyfWAsXHJcbiAgICAgICdtb250aC5kYXluYW1lLnBhZGRpbmdMZWZ0JzogJzEwcHgnLFxyXG4gICAgICAnbW9udGguZGF5bmFtZS5wYWRkaW5nUmlnaHQnOiAnMTBweCcsXHJcbiAgICAgICdtb250aC5kYXluYW1lLmJhY2tncm91bmRDb2xvcic6ICdpbmhlcml0JyxcclxuICAgICAgJ21vbnRoLmRheW5hbWUuZm9udFNpemUnOiAnMTJweCcsXHJcbiAgICAgICdtb250aC5kYXluYW1lLmZvbnRXZWlnaHQnOiAnbm9ybWFsJyxcclxuICAgICAgJ21vbnRoLmRheW5hbWUudGV4dEFsaWduJzogJ2xlZnQnLFxyXG5cclxuICAgICAgLy8gbW9udGggZGF5IGdyaWQgY2VsbCAnZGF5J1xyXG4gICAgICAnbW9udGguaG9saWRheUV4Y2VwdFRoaXNNb250aC5jb2xvcic6ICdyZ2JhKDI1NSwgNjQsIDY0LCAwLjQpJyxcclxuICAgICAgJ21vbnRoLmRheUV4Y2VwdFRoaXNNb250aC5jb2xvcic6ICdyZ2JhKDUxLCA1MSwgNTEsIDAuNCknLFxyXG4gICAgICAnbW9udGgud2Vla2VuZC5iYWNrZ3JvdW5kQ29sb3InOiAnaW5oZXJpdCcsXHJcbiAgICAgICdtb250aC5kYXkuZm9udFNpemUnOiAnMTRweCcsXHJcbiAgICAgICdtb250aC5zY2hlZHVsZS5jb2xvcic6IGhpZ2hsaWdodCxcclxuXHJcbiAgICAgIC8vIG1vbnRoIHNjaGVkdWxlIHN0eWxlXHJcbiAgICAgICdtb250aC5zY2hlZHVsZS5ib3JkZXJSYWRpdXMnOiAnMnB4JyxcclxuICAgICAgJ21vbnRoLnNjaGVkdWxlLmhlaWdodCc6ICcyNHB4JyxcclxuICAgICAgJ21vbnRoLnNjaGVkdWxlLm1hcmdpblRvcCc6ICcycHgnLFxyXG4gICAgICAnbW9udGguc2NoZWR1bGUubWFyZ2luTGVmdCc6ICc4cHgnLFxyXG4gICAgICAnbW9udGguc2NoZWR1bGUubWFyZ2luUmlnaHQnOiAnOHB4JyxcclxuXHJcbiAgICAgIC8vIG1vbnRoIG1vcmUgdmlld1xyXG4gICAgICAnbW9udGgubW9yZVZpZXcuYm9yZGVyJzogYDFweCBzb2xpZCAke2JvcmRlcn1gLFxyXG4gICAgICAnbW9udGgubW9yZVZpZXcuYm94U2hhZG93JzogYDAgMnB4IDZweCAwICR7c2hhZG93fWAsXHJcbiAgICAgICdtb250aC5tb3JlVmlldy5iYWNrZ3JvdW5kQ29sb3InOiBiYWNrZ3JvdW5kLFxyXG4gICAgICAnbW9udGgubW9yZVZpZXcucGFkZGluZ0JvdHRvbSc6ICcxN3B4JyxcclxuICAgICAgJ21vbnRoLm1vcmVWaWV3VGl0bGUuaGVpZ2h0JzogJzQ0cHgnLFxyXG4gICAgICAnbW9udGgubW9yZVZpZXdUaXRsZS5tYXJnaW5Cb3R0b20nOiAnMTJweCcsXHJcbiAgICAgICdtb250aC5tb3JlVmlld1RpdGxlLmJhY2tncm91bmRDb2xvcic6ICdpbmhlcml0JyxcclxuICAgICAgJ21vbnRoLm1vcmVWaWV3VGl0bGUuYm9yZGVyQm90dG9tJzogJ25vbmUnLFxyXG4gICAgICAnbW9udGgubW9yZVZpZXdUaXRsZS5wYWRkaW5nJzogJzEycHggMTdweCAwIDE3cHgnLFxyXG4gICAgICAnbW9udGgubW9yZVZpZXdMaXN0LnBhZGRpbmcnOiAnMCAxN3B4JyxcclxuXHJcbiAgICAgIC8vIHdlZWsgaGVhZGVyICdkYXluYW1lJ1xyXG4gICAgICAnd2Vlay5kYXluYW1lLmhlaWdodCc6ICc0MnB4JyxcclxuICAgICAgJ3dlZWsuZGF5bmFtZS5ib3JkZXJUb3AnOiBgMXB4IHNvbGlkICR7Ym9yZGVyfWAsXHJcbiAgICAgICd3ZWVrLmRheW5hbWUuYm9yZGVyQm90dG9tJzogYDFweCBzb2xpZCAke2JvcmRlcn1gLFxyXG4gICAgICAnd2Vlay5kYXluYW1lLmJvcmRlckxlZnQnOiAnaW5oZXJpdCcsXHJcbiAgICAgICd3ZWVrLmRheW5hbWUucGFkZGluZ0xlZnQnOiAnMCcsXHJcbiAgICAgICd3ZWVrLmRheW5hbWUuYmFja2dyb3VuZENvbG9yJzogJ2luaGVyaXQnLFxyXG4gICAgICAnd2Vlay5kYXluYW1lLnRleHRBbGlnbic6ICdsZWZ0JyxcclxuICAgICAgJ3dlZWsudG9kYXkuY29sb3InOiB0ZXh0LFxyXG4gICAgICAnd2Vlay5wYXN0RGF5LmNvbG9yJzogYm9yZGVyTGlnaHQsXHJcblxyXG4gICAgICAvLyB3ZWVrIHZlcnRpY2FsIHBhbmVsICd2cGFuZWwnXHJcbiAgICAgICd3ZWVrLnZwYW5lbFNwbGl0dGVyLmJvcmRlcic6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuICAgICAgJ3dlZWsudnBhbmVsU3BsaXR0ZXIuaGVpZ2h0JzogJzNweCcsXHJcblxyXG4gICAgICAvLyB3ZWVrIGRheWdyaWQgJ2RheWdyaWQnXHJcbiAgICAgICd3ZWVrLmRheWdyaWQuYm9yZGVyUmlnaHQnOiBgMXB4IHNvbGlkICR7Ym9yZGVyfWAsXHJcbiAgICAgICd3ZWVrLmRheWdyaWQuYmFja2dyb3VuZENvbG9yJzogYmFja2dyb3VuZCxcclxuXHJcbiAgICAgICd3ZWVrLmRheWdyaWRMZWZ0LndpZHRoJzogJzcycHgnLFxyXG4gICAgICAnd2Vlay5kYXlncmlkTGVmdC5iYWNrZ3JvdW5kQ29sb3InOiBiYWNrZ3JvdW5kLFxyXG4gICAgICAnd2Vlay5kYXlncmlkTGVmdC5wYWRkaW5nUmlnaHQnOiAnOHB4JyxcclxuICAgICAgJ3dlZWsuZGF5Z3JpZExlZnQuYm9yZGVyUmlnaHQnOiBgMXB4IHNvbGlkICR7Ym9yZGVyfWAsXHJcblxyXG5cclxuICAgICAgJ3dlZWsudG9kYXkuYmFja2dyb3VuZENvbG9yJzogcHJpbWFyeVNoYWRlZCxcclxuICAgICAgJ3dlZWsud2Vla2VuZC5iYWNrZ3JvdW5kQ29sb3InOiAnaW5oZXJpdCcsXHJcblxyXG4gICAgICAvLyB3ZWVrIHRpbWVncmlkICd0aW1lZ3JpZCdcclxuICAgICAgJ3dlZWsudGltZWdyaWRMZWZ0LndpZHRoJzogJzcycHgnLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZExlZnQuYmFja2dyb3VuZENvbG9yJzogJ2luaGVyaXQnLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZExlZnQuYm9yZGVyUmlnaHQnOiBgMXB4IHNvbGlkICR7Ym9yZGVyfWAsXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkTGVmdC5mb250U2l6ZSc6ICcxMXB4JyxcclxuICAgICAgJ3dlZWsudGltZWdyaWRMZWZ0VGltZXpvbmVMYWJlbC5oZWlnaHQnOiAnNDBweCcsXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkTGVmdEFkZGl0aW9uYWxUaW1lem9uZS5iYWNrZ3JvdW5kQ29sb3InOiBiYWNrZ3JvdW5kLFxyXG5cclxuICAgICAgJ3dlZWsudGltZWdyaWRPbmVIb3VyLmhlaWdodCc6ICc1MnB4JyxcclxuICAgICAgJ3dlZWsudGltZWdyaWRIYWxmSG91ci5oZWlnaHQnOiAnMjZweCcsXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkSGFsZkhvdXIuYm9yZGVyQm90dG9tJzogJ25vbmUnLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZEhvcml6b250YWxMaW5lLmJvcmRlckJvdHRvbSc6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkLnBhZGRpbmdSaWdodCc6ICc4cHgnLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZC5ib3JkZXJSaWdodCc6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuICAgICAgJ3dlZWsudGltZWdyaWRTY2hlZHVsZS5ib3JkZXJSYWRpdXMnOiAnMnB4JyxcclxuICAgICAgJ3dlZWsudGltZWdyaWRTY2hlZHVsZS5wYWRkaW5nTGVmdCc6ICcycHgnLFxyXG5cclxuICAgICAgLy8gIzUxNWNlNiBpcyBhIHNsYXRlIGJsdWVcclxuXHJcbiAgICAgICd3ZWVrLmN1cnJlbnRUaW1lLmNvbG9yJzogaGlnaGxpZ2h0LFxyXG4gICAgICAnd2Vlay5jdXJyZW50VGltZS5mb250U2l6ZSc6ICcxMXB4JyxcclxuICAgICAgJ3dlZWsuY3VycmVudFRpbWUuZm9udFdlaWdodCc6ICdub3JtYWwnLFxyXG5cclxuICAgICAgJ3dlZWsucGFzdFRpbWUuY29sb3InOiBib3JkZXJMaWdodCxcclxuICAgICAgJ3dlZWsucGFzdFRpbWUuZm9udFdlaWdodCc6ICdub3JtYWwnLFxyXG5cclxuICAgICAgJ3dlZWsuZnV0dXJlVGltZS5jb2xvcic6IGJvcmRlcixcclxuICAgICAgJ3dlZWsuZnV0dXJlVGltZS5mb250V2VpZ2h0JzogJ25vcm1hbCcsXHJcblxyXG4gICAgICAnd2Vlay5jdXJyZW50VGltZUxpbmVQYXN0LmJvcmRlcic6IGAxcHggZGFzaGVkICR7aGlnaGxpZ2h0fWAsXHJcbiAgICAgICd3ZWVrLmN1cnJlbnRUaW1lTGluZUJ1bGxldC5iYWNrZ3JvdW5kQ29sb3InOiBoaWdobGlnaHQsXHJcbiAgICAgICd3ZWVrLmN1cnJlbnRUaW1lTGluZVRvZGF5LmJvcmRlcic6IGAxcHggc29saWQgJHtoaWdobGlnaHR9YCxcclxuICAgICAgJ3dlZWsuY3VycmVudFRpbWVMaW5lRnV0dXJlLmJvcmRlcic6ICdub25lJyxcclxuXHJcbiAgICAgIC8vIHdlZWsgY3JlYXRpb24gZ3VpZGUgc3R5bGVcclxuICAgICAgJ3dlZWsuY3JlYXRpb25HdWlkZS5jb2xvcic6IGhpZ2hsaWdodCxcclxuICAgICAgJ3dlZWsuY3JlYXRpb25HdWlkZS5mb250U2l6ZSc6ICcxMXB4JyxcclxuICAgICAgJ3dlZWsuY3JlYXRpb25HdWlkZS5mb250V2VpZ2h0JzogJ2JvbGQnLFxyXG5cclxuICAgICAgLy8gd2VlayBkYXlncmlkIHNjaGVkdWxlIHN0eWxlXHJcbiAgICAgICd3ZWVrLmRheUdyaWRTY2hlZHVsZS5ib3JkZXJSYWRpdXMnOiAnMnB4JyxcclxuICAgICAgJ3dlZWsuZGF5R3JpZFNjaGVkdWxlLmhlaWdodCc6ICcyNHB4JyxcclxuICAgICAgJ3dlZWsuZGF5R3JpZFNjaGVkdWxlLm1hcmdpblRvcCc6ICcycHgnLFxyXG4gICAgICAnd2Vlay5kYXlHcmlkU2NoZWR1bGUubWFyZ2luTGVmdCc6ICc4cHgnLFxyXG4gICAgICAnd2Vlay5kYXlHcmlkU2NoZWR1bGUubWFyZ2luUmlnaHQnOiAnOHB4J1xyXG4gICAgfSBhcyBJVGhlbWU7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImNvbnRlbnQtY29udGFpbmVyXCI+XHJcbiAgICA8IS0tIFRoZXNlIGRpdnMgYXJlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcmVhZCB0aGUgdGhlbWUgY29sb3JzIGZvciB0aGUgdHVpIHRoZW1lIC0tPlxyXG4gICAgPCEtLSBUaGUgb3V0ZXIgZGl2IGdpdmVzIHRoZSBkZWZhdWx0IGNvbG9yIGZvciB3aGVuIHVzZXIgZG9lcyBub3QgcHJvdmlkZSBhbiBBbmd1bGFyIHRoZW1lIC0tPlxyXG4gICAgPGRpdiBzdHlsZT1cImNvbG9yOiBibHVlO1wiPiA8ZGl2IGlkPVwidGhlbWUtcHJpbWFyeVwiPjwvZGl2PjwvZGl2PlxyXG4gICAgPGRpdiBzdHlsZT1cImNvbG9yOiBibHVlO1wiPiA8ZGl2IGlkPVwidGhlbWUtaGlnaGxpZ2h0XCI+PC9kaXY+PC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IGJsdWU7XCI+IDxkaXYgaWQ9XCJ0aGVtZS1hY2NlbnRcIj48L2Rpdj48L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogcmVkO1wiPiA8ZGl2IGlkPVwidGhlbWUtd2FyblwiPjwvZGl2PjwvZGl2PlxyXG4gICAgPGRpdiBzdHlsZT1cImNvbG9yOiByZ2JhKDAsIDAsIDI1NSwgMC4yKTtcIj4gPGRpdiBpZD1cInRoZW1lLXByaW1hcnktc2hhZGVkXCI+PC9kaXY+PC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6ICMzZTNlM2U7XCI+IDxkaXYgaWQ9XCJ0aGVtZS1mb3JlZ3JvdW5kXCI+PC9kaXY+PC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6ICNlMGUwZTA7XCI+IDxkaXYgaWQ9XCJ0aGVtZS1kaXZpZGVyXCI+PC9kaXY+PC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IHdoaXRlO1wiPiA8ZGl2IGlkPVwidGhlbWUtYmFja2dyb3VuZFwiPjwvZGl2PjwvZGl2PlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRhaW5lclwiPlxyXG4gICAgICA8IS0tIGNhbGVuZGFyIHRpdGxlYmFyIC0tPlxyXG4gICAgICA8bWF0LXRvb2xiYXIgY2xhc3M9XCJtZW51LWJhclwiIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICAgIDwhLS0gPGRpdiBzdHlsZT1cImFsaWduLXNlbGY6IGNlbnRlcjtkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcIj4gLS0+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgIHdpZHRoOiAxMDAlOyAgXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1kaXZcIj5cclxuICAgICAgICAgICAgPCEtLSBMRUZUIC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMHB4OyBtYXJnaW4tcmlnaHQ6IDBweDsgZm9udC1zaXplOiAxLjVyZW0gIWltcG9ydGFudDtcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DYWxlbmRhckxvbmdQcmV2KClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJpY29uTG9uZ1ByZXZcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0aW9uLWJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDBweDsgbWFyZ2luLXJpZ2h0OiAwcHg7IGZvbnQtc2l6ZTogMnJlbSAhaW1wb3J0YW50O1wiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNhbGVuZGFyUHJldigpXCI+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaWNvblByZXZcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMHB4OyBtYXJnaW4tcmlnaHQ6IDBweDsgZm9udC1zaXplOiAxLjdyZW0gIWltcG9ydGFudDtcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DYWxlbmRhclRvZGF5KClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJpY29uVG9kYXlcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0aW9uLWJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDBweDsgbWFyZ2luLXJpZ2h0OiAwcHg7IGZvbnQtc2l6ZTogMnJlbSAhaW1wb3J0YW50O1wiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNhbGVuZGFyTmV4dCgpXCI+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaWNvbk5leHRcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuYXZpZ2F0aW9uLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMHB4OyBtYXJnaW4tcmlnaHQ6IDBweDsgZm9udC1zaXplOiAxLjVyZW0gIWltcG9ydGFudDtcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DYWxlbmRhckxvbmdOZXh0KClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJpY29uTG9uZ05leHRcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyLWRpdlwiPlxyXG4gICAgICAgICAgICA8IS0tIENFTlRFUiAtLT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldmVudC1jYWxlbmRhci10aXRsZVwiPnt7IGdldERhdGUoKSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWRpdlwiPlxyXG4gIFxyXG4gICAgICAgICAgICA8IS0tIFJJR0hUIC0tPlxyXG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgY2xhc3M9XCJ2aWV3LWJ1dHRvblwiIHZhbHVlPVwibW9udGhcIiBpZD1cIkAraWQvdG9nZ2xlQnV0dG9uXCIgbGF5b3V0X3dpZHRoPVwid3JhcF9jb250ZW50XCJcclxuICAgICAgICAgICAgICBsYXlvdXRfaGVpZ2h0PVwid3JhcF9jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIG1hdC1idXR0b24gdmFsdWU9XCJtb250aFwiIGNsYXNzPVwidmlldy1idXR0b25cIiAoY2xpY2spPVwib25Nb250aFZpZXcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaWNvbkJ5TW9udGhcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgbWF0LWJ1dHRvbiB2YWx1ZT1cIndlZWtcIiBjbGFzcz1cInZpZXctYnV0dG9uXCIgKGNsaWNrKT1cIm9uV2Vla1ZpZXcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaWNvbkJ5V2Vla1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBtYXQtYnV0dG9uIHZhbHVlPVwiZGF5XCIgY2xhc3M9XCJ2aWV3LWJ1dHRvblwiIChjbGljayk9XCJvbkRheVZpZXcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaWNvbkJ5RGF5XCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtdG9vbGJhcj5cclxuICAgICAgPG5neC1tYXQtdHVpLWNhbGVuZGFyLXdyYXBwZXI+PC9uZ3gtbWF0LXR1aS1jYWxlbmRhci13cmFwcGVyPlxyXG4gICAgPC9kaXY+XHJcbiAgXHJcbiAgPC9zZWN0aW9uPlxyXG4iXX0=
|
555
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdC10dWktY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdC10dWktY2FsZW5kYXIvc3JjL2xpYi9uZ3gtbWF0LXR1aS1jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0LXR1aS1jYWxlbmRhci9zcmMvbGliL25neC1tYXQtdHVpLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxRSxNQUFNLGVBQWUsQ0FBQztBQUM3SixPQUFPLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXBGLE9BQU8sY0FBYyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxlQUFlLEVBR2YsT0FBTyxFQUNQLFNBQVMsRUFFVCxTQUFTLEVBQ1QsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUNMLE9BQU8sSUFBSSxRQUFRLEdBYXBCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLFdBQVc7QUFDWCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sbUZBQW1GLENBQUM7Ozs7Ozs7OztBQVczSSxNQUFNLE9BQU8sMEJBQTBCO0lBc0JyQyxZQUFtQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBckJwQyxjQUFTLEdBQUcsZUFBZSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxpQ0FBaUM7UUFDakMsYUFBUSxHQUFHLFdBQVcsQ0FBQztR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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgVmlld0VuY2Fwc3VsYXRpb24sIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbmltcG9ydCBkaXN0aW5jdENvbG9ycyBmcm9tICdkaXN0aW5jdC1jb2xvcnMnO1xyXG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCJjaHJvbWEtanNcIjtcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGZhQ2FsZW5kYXJDaGVjayxcclxuICBmYUNhcmV0U3F1YXJlTGVmdCxcclxuICBmYUNhcmV0U3F1YXJlUmlnaHQsXHJcbiAgZmFUYWJsZSxcclxuICBmYUNvbHVtbnMsXHJcbiAgZmFMaXN0LFxyXG4gIGZhTGlzdEFsdCxcclxuICBmYUZvcndhcmQsXHJcbiAgZmFGYXN0QmFja3dhcmQsXHJcbiAgZmFCYWNrd2FyZCxcclxuICBmYUNhcmV0TGVmdCxcclxuICBmYUNhcmV0UmlnaHQsXHJcbn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtcclxuICBkZWZhdWx0IGFzIENhbGVuZGFyLFxyXG4gIElDYWxlbmRhckluZm8sXHJcbiAgSUV2ZW50RGF0ZU9iamVjdCxcclxuICBJRXZlbnRNb3JlT2JqZWN0LFxyXG4gIElFdmVudE9iamVjdCxcclxuICBJRXZlbnRTY2hlZHVsZU9iamVjdCxcclxuICBJT3B0aW9ucyxcclxuICBJU2NoZWR1bGUsXHJcbiAgSVRoZW1lLFxyXG4gIElUaW1lem9uZSxcclxuICBJV2Vla09wdGlvbnMsXHJcbiAgVEV2ZW50QmVmb3JlQ3JlYXRlU2NoZWR1bGUsXHJcbiAgVFpEYXRlLFxyXG59IGZyb20gJ3R1aS1jYWxlbmRhcic7XHJcblxyXG4vLyBwcm9qZWN0IFxyXG5pbXBvcnQgeyBMb2NhbERhdGUgfSBmcm9tICcuL2xvY2FsLWRhdGUuanMnO1xyXG5pbXBvcnQgeyBOZ3hNYXRUdWlDYWxlbmRhckVkaXRvckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbmd4LW1hdC10dWktY2FsZW5kYXItZWRpdG9yLWRpYWxvZy9uZ3gtbWF0LXR1aS1jYWxlbmRhci1lZGl0b3ItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENhbGVuZGFyT3B0aW9ucyB9IGZyb20gJy4vY2FsZW5kYXItb3B0aW9ucyc7XHJcbmltcG9ydCB7IENhbGVuZGFyRWRpdG9yT3B0aW9ucyB9IGZyb20gJy4vY2FsZW5kYXItZWRpdG9yLW9wdGlvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtbWF0LXR1aS1jYWxlbmRhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25neC1tYXQtdHVpLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL25neC1tYXQtdHVpLWNhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ1xyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hNYXRUdWlDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIGljb25Ub2RheSA9IGZhQ2FsZW5kYXJDaGVjaztcclxuICAvLyBpY29uUHJldiA9IGZhQ2FyZXRTcXVhcmVMZWZ0O1xyXG4gIC8vIGljb25OZXh0ID0gZmFDYXJldFNxdWFyZVJpZ2h0O1xyXG4gIGljb25QcmV2ID0gZmFDYXJldExlZnQ7XHJcbiAgaWNvbk5leHQgPSBmYUNhcmV0UmlnaHQ7XHJcbiAgaWNvbkxvbmdQcmV2ID0gZmFCYWNrd2FyZDtcclxuICBpY29uTG9uZ05leHQgPSBmYUZvcndhcmQ7XHJcbiAgaWNvbkJ5TW9udGggPSBmYVRhYmxlO1xyXG4gIGljb25CeVdlZWsgPSBmYUNvbHVtbnM7XHJcbiAgaWNvbkJ5RGF5ID0gZmFMaXN0QWx0O1xyXG5cclxuICBjYWxlbmRhcjogQ2FsZW5kYXI7ICAvLyB0aGUgVFVJIENhbGVuZGFyIE9iamVjdFxyXG4gIGNhbGVuZGFySWREZWZhdWx0OiBzdHJpbmc7XHJcbiAgY29sb3JzOiBDb2xvcltdO1xyXG4gIGNvbG9ySW5kZXg6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgdXNlckNyZWF0ZWRTY2hlZHVsZTogRXZlbnRFbWl0dGVyPElTY2hlZHVsZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHVzZXJVcGRhdGVkU2NoZWR1bGU6IEV2ZW50RW1pdHRlcjxJU2NoZWR1bGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1c2VyRGVsZXRlZFNjaGVkdWxlOiBFdmVudEVtaXR0ZXI8SVNjaGVkdWxlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBvcHRpb25zOiBDYWxlbmRhck9wdGlvbnM7XHJcbiAgYXBwbGllZE9wdGlvbnM6IENhbGVuZGFyT3B0aW9uczsgLy8gdGhpcyBpcyBuZWVkZWQgZm9yIHdoZW4gb3B0aW9ucyBpcyBub3QgY29ubmVjdGVkXHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge1xyXG4gICAgLy8gd2Ugc2xpY2Ugb2ZmIHRoZSBmaXJzdCBjb2xvciBzaW5jZSBpdCBpcyBncmF5XHJcbiAgICB0aGlzLmNvbG9ycyA9IGRpc3RpbmN0Q29sb3JzKHsgbGlnaHRNaW46IDcwLCBjb3VudDogMTUgfSkuc2xpY2UoMSk7XHJcbiAgICB0aGlzLmNvbG9ySW5kZXggPSAwO1xyXG4gICAgdGhpcy5jYWxlbmRhcklkRGVmYXVsdCA9IFwibWFpblwiO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBjb25zb2xlLndhcm4oYGNhbGVuZGFyLmNvbXBvbmVudC50czogbmdPbml0YClcclxuICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xyXG4gICAgdGhpcy5jcmVhdGVUVUlDYWxlbmRhcih0aGlzLmFwcGxpZWRPcHRpb25zLmlvcHRpb25zKTtcclxuICAgIHRoaXMuYmluZENhbGxiYWNrcygpO1xyXG4gICAgdGhpcy5jYWxlbmRhci50b2dnbGVTY2hlZHVsZVZpZXcodHJ1ZSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnJlbmRlcih0cnVlKTtcclxuICAgIHRoaXMuY2FsZW5kYXIudG9nZ2xlU2NoZWR1bGVWaWV3KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gY29uc29sZS53YXJuKGBuZ09uQ2hhbmdlczogYCwgY2hhbmdlcyk7XHJcbiAgICAvLyBjb25zb2xlLndhcm4oYGNoYW5nZS5vcHRpb246YCwgY2hhbmdlcy5vcHRpb25zKTtcclxuICAgIGxldCBvcHRpb25zID0gY2hhbmdlcy5vcHRpb25zLmN1cnJlbnRWYWx1ZTtcclxuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jYWxlbmRhci5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBvbkNhbGVuZGFyTG9uZ1ByZXYoKSB7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZSA9ICh0aGlzLmNhbGVuZGFyLmdldERhdGUoKSBhcyBUWkRhdGUpLnRvRGF0ZSgpO1xyXG4gICAgbGV0IGRheXMgPSAwO1xyXG4gICAgbGV0IG1vbnRocyA9IDA7XHJcbiAgICBsZXQgeWVhcnMgPSAwO1xyXG4gICAgc3dpdGNoICh0aGlzLmNhbGVuZGFyLmdldFZpZXdOYW1lKCkpIHtcclxuICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICBkYXlzID0gLTc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dlZWsnOlxyXG4gICAgICAgIGRheXMgPSAtMjg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICB5ZWFycyA9IC0xO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFycyk7XHJcbiAgICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIG1vbnRocyk7ICAvLyBkYXRlIGNsYXNzIGRvZXMgdGhlIG1vZHVsYXIgYXJpdGhtZXRpY1xyXG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7ICAvLyBkYXRlIGNsYXNzIGRvZXMgdGhlIG1vZHVsYXIgYXJpdGhtZXRpY1xyXG4gICAgdGhpcy5jYWxlbmRhci5zZXREYXRlKGRhdGUpO1xyXG4gICAgdGhpcy5jYWxlbmRhci50b2dnbGVTY2hlZHVsZVZpZXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkNhbGVuZGFyUHJldigpIHtcclxuICAgIHRoaXMuY2FsZW5kYXIucHJldigpO1xyXG4gICAgdGhpcy5jYWxlbmRhci50b2dnbGVTY2hlZHVsZVZpZXcodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkNhbGVuZGFyVG9kYXkoKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnRvZGF5KCk7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnRvZ2dsZVNjaGVkdWxlVmlldyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG9uQ2FsZW5kYXJOZXh0KCkge1xyXG4gICAgdGhpcy5jYWxlbmRhci5uZXh0KCk7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnRvZ2dsZVNjaGVkdWxlVmlldyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG9uQ2FsZW5kYXJMb25nTmV4dCgpIHtcclxuICAgIGxldCBkYXRlOiBEYXRlID0gKHRoaXMuY2FsZW5kYXIuZ2V0RGF0ZSgpIGFzIFRaRGF0ZSkudG9EYXRlKCk7XHJcbiAgICBsZXQgZGF5cyA9IDA7XHJcbiAgICBsZXQgbW9udGhzID0gMDtcclxuICAgIGxldCB5ZWFycyA9IDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY2FsZW5kYXIuZ2V0Vmlld05hbWUoKSkge1xyXG4gICAgICBjYXNlICdkYXknOlxyXG4gICAgICAgIGRheXMgPSA3O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd3ZWVrJzpcclxuICAgICAgICBkYXlzID0gMjg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICB5ZWFycyA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHllYXJzKTtcclxuICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgbW9udGhzKTsgIC8vIGRhdGUgY2xhc3MgZG9lcyB0aGUgbW9kdWxhciBhcml0aG1ldGljXHJcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBkYXlzKTsgIC8vIGRhdGUgY2xhc3MgZG9lcyB0aGUgbW9kdWxhciBhcml0aG1ldGljXHJcbiAgICB0aGlzLmNhbGVuZGFyLnNldERhdGUoZGF0ZSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnRvZ2dsZVNjaGVkdWxlVmlldyh0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBvbk1vbnRoVmlldygpIHtcclxuICAgIHRoaXMuY2FsZW5kYXIuY2hhbmdlVmlldygnbW9udGgnKTtcclxuICAgIHRoaXMuY2FsZW5kYXIucmVuZGVyKHRydWUpOyAgLy8gPC0tIHNvIHRoYXQgc2VsZWN0aW9uIGlzIGNsZWFyZWRcclxuICB9XHJcblxyXG4gIG9uV2Vla1ZpZXcoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgb25XZWVrVmlld2ApXHJcbiAgICB0aGlzLmNhbGVuZGFyLmNoYW5nZVZpZXcoJ3dlZWsnKTtcclxuICAgIHRoaXMuY2FsZW5kYXIucmVuZGVyKHRydWUpOyAgLy8gPC0tIHNvIHRoYXQgc2VsZWN0aW9uIGlzIGNsZWFyZWRcclxuICB9XHJcblxyXG4gIG9uRGF5VmlldygpIHtcclxuICAgIHRoaXMuY2FsZW5kYXIuY2hhbmdlVmlldygnZGF5Jyk7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnJlbmRlcih0cnVlKTsgIC8vIDwtLSBzbyB0aGF0IHNlbGVjdGlvbiBpcyBjbGVhcmVkXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0RGF0ZSgpIHtcclxuICAgIGxldCBkYXRlID0gdGhpcy5jYWxlbmRhci5nZXREYXRlKCk7XHJcbiAgICBsZXQgc3RyID0gZGF0ZS50b0RhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiLCB7XHJcbiAgICAgIHllYXI6ICdudW1lcmljJyxcclxuICAgICAgbW9udGg6ICdzaG9ydCcsXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUVUlDYWxlbmRhcihpb3B0cz86IElPcHRpb25zKSB7XHJcbiAgICBsZXQgaW9wdGlvbnMgPSB0aGlzLnByZXByb2Nlc3NJT3B0aW9ucyhpb3B0cyk7XHJcbiAgICAvLyBjb25zb2xlLndhcm4oYGNhbGVuZGFyLmNvbXBvbmVudC50czogY3JlYXRlVFVJQ2FsZW5kYXI6IGlvcHRpb25zOmAsIGlvcHRpb25zKTtcclxuICAgIHRoaXMuY2FsZW5kYXIgPSBuZXcgQ2FsZW5kYXIoJyNjYWxlbmRhcicsIGlvcHRpb25zKTtcclxuICAgIC8vIGNvbnNvbGUud2FybihgY2FsZW5kYXIuY29tcG9uZW50LnRzOiBjcmVhdGVUVUlDYWxlbmRhcjogdGhpcy5jYWxlbmRhcjpgLCB0aGlzLmNhbGVuZGFyKTtcclxuICAgIHRoaXMuY2FsZW5kYXIudG9nZ2xlU2NoZWR1bGVWaWV3KHRydWUpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBiaW5kQ2FsbGJhY2tzKCkge1xyXG4gICAgdGhpcy5iaW5kQWZ0ZXJSZW5kZXJTY2hlZHVsZSgpO1xyXG4gICAgdGhpcy5iaW5kQ2xpY2tUaW1lem9uZXNDb2xsYXBzZUJ0bigpO1xyXG4gICAgdGhpcy5iaW5kQ2xpY2tEYXluYW1lKCk7XHJcbiAgICB0aGlzLmJpbmRDbGlja01vcmUoKTtcclxuICAgIHRoaXMuYmluZENsaWNrU2NoZWR1bGUoKTtcclxuICAgIHRoaXMuYmluZEJlZm9yZUNyZWF0ZVNjaGVkdWxlKCk7XHJcbiAgICB0aGlzLmJpbmRCZWZvcmVVcGRhdGVTY2hlZHVsZSgpO1xyXG4gICAgdGhpcy5iaW5kQmVmb3JlRGVsZXRlU2NoZWR1bGUoKTtcclxuICB9XHJcblxyXG4gIGJpbmRBZnRlclJlbmRlclNjaGVkdWxlKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignYWZ0ZXJSZW5kZXJTY2hlZHVsZScsIGZ1bmN0aW9uIChldmVudDogeyBzY2hlZHVsZTogSVNjaGVkdWxlIH0pIHtcclxuICAgICAgLy8gY29uc29sZS53YXJuKGBhZnRlclJlbmRlclNjaGVkdWxlYCwgZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQ2xpY2tUaW1lem9uZXNDb2xsYXBzZUJ0bigpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuY2FsZW5kYXIub24oJ2NsaWNrVGltZXpvbmVzQ29sbGFwc2VCdG4nLCBmdW5jdGlvbiAodGltZXpvbmVzQ29sbGFwc2VkOiBib29sZWFuKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUud2FybihgY2xpY2tUaW1lem9uZXNDb2xsYXBzZUJ0bmAsIHRpbWV6b25lc0NvbGxhcHNlZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBiaW5kQ2xpY2tEYXluYW1lKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignY2xpY2tEYXluYW1lJywgZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnREYXRlT2JqZWN0KSB7XHJcbiAgICAgIC8vIGNvbnNvbGUud2FybihgY2xpY2tEYXluYW1lYCwgZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQ2xpY2tNb3JlKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignY2xpY2tNb3JlJywgZnVuY3Rpb24gKGV2ZW50OiBJRXZlbnRNb3JlT2JqZWN0KSB7XHJcbiAgICAgIC8vIGNvbnNvbGUud2FybihgY2xpY2tNb3JlYCwgZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQ2xpY2tTY2hlZHVsZSgpIHtcclxuICAgIC8vIG9ubHkgd29ya3MgaWYgdXNlRGV0YWlsUG9wdXA6IGZhbHNlLFxyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignY2xpY2tTY2hlZHVsZScsIGZ1bmN0aW9uIChldmVudDogSUV2ZW50U2NoZWR1bGVPYmplY3QpIHtcclxuICAgICAgLy8gY29uc29sZS53YXJuKGBjbGlja1NjaGVkdWxlYCwgZXZlbnQpO1xyXG4gICAgICBsZXQgc2NoZWR1bGU6IElTY2hlZHVsZSA9IHsgLi4uZXZlbnQuc2NoZWR1bGUgfTtcclxuICAgICAgc2NoZWR1bGUuc3RhcnQgPSAobmV3IExvY2FsRGF0ZShzY2hlZHVsZS5zdGFydCkpLnRvRGF0ZSgpO1xyXG4gICAgICBzY2hlZHVsZS5lbmQgPSAobmV3IExvY2FsRGF0ZShzY2hlZHVsZS5lbmQpKS50b0RhdGUoKTtcclxuICAgICAgdGhhdC5vcGVuUG9wdXBTY2hlZHVsZUVkaXRvcihzY2hlZHVsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGJpbmRCZWZvcmVDcmVhdGVTY2hlZHVsZSgpIHtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuY2FsZW5kYXIub24oJ2JlZm9yZUNyZWF0ZVNjaGVkdWxlJywgZnVuY3Rpb24gKGV2ZW50OiBURXZlbnRCZWZvcmVDcmVhdGVTY2hlZHVsZSkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgYmVmb3JlQ3JlYXRlU2NoZWR1bGVgLCBldmVudCk7XHJcbiAgICAgIGxldCBzdGFydDogRGF0ZSA9IChuZXcgTG9jYWxEYXRlKGV2ZW50LnN0YXJ0KSkudG9EYXRlKCk7XHJcbiAgICAgIHN0YXJ0LnNldEhvdXJzKDkpO1xyXG4gICAgICBsZXQgZW5kOiBEYXRlID0gKG5ldyBMb2NhbERhdGUoZXZlbnQuZW5kKSkudG9EYXRlKCk7XHJcbiAgICAgIGVuZC5zZXRIb3VycygxMCk7XHJcbiAgICAgIHRoYXQub3BlblBvcHVwU2NoZWR1bGVFZGl0b3Ioe1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBzdGFydDogc3RhcnQsXHJcbiAgICAgICAgZW5kOiBlbmQsXHJcbiAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgIH0gYXMgSVNjaGVkdWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmluZEJlZm9yZVVwZGF0ZVNjaGVkdWxlKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy5jYWxlbmRhci5vbignYmVmb3JlVXBkYXRlU2NoZWR1bGUnLCBmdW5jdGlvbiAoZXZlbnQ6IElFdmVudE9iamVjdCkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgYmVmb3JlVXBkYXRlU2NoZWR1bGVgLCBldmVudCk7XHJcbiAgICAgIHRoYXQudXBkYXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiaW5kQmVmb3JlRGVsZXRlU2NoZWR1bGUoKSB7XHJcbiAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICB0aGlzLmNhbGVuZGFyLm9uKCdiZWZvcmVEZWxldGVTY2hlZHVsZScsIGZ1bmN0aW9uIChldmVudDogSUV2ZW50U2NoZWR1bGVPYmplY3QpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coYGJlZm9yZURlbGV0ZVNjaGVkdWxlYCwgZXZlbnQuc2NoZWR1bGUpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgYmVmb3JlRGVsZXRlU2NoZWR1bGVgLCBldmVudC5zY2hlZHVsZSk7XHJcbiAgICAgIHRoYXQuZGVsZXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoeyBpZDogZXZlbnQuc2NoZWR1bGUuaWQsIGNhbGVuZGFySWQ6IGV2ZW50LnNjaGVkdWxlLmNhbGVuZGFySWQgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5leHRDb2xvcigpIHtcclxuICAgIGxldCBjb2xvciA9IHRoaXMuY29sb3JzW3RoaXMuY29sb3JJbmRleCsrXS5oZXgoKTtcclxuICAgIGlmICh0aGlzLmNvbG9ySW5kZXggPj0gdGhpcy5jb2xvcnMubGVuZ3RoKSB0aGlzLmNvbG9ySW5kZXggPSAwO1xyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoYXJnczogSVNjaGVkdWxlKSB7XHJcbiAgICBsZXQgc2NoZWR1bGUgPSB0aGlzLmNyZWF0ZVNjaGVkdWxlKGFyZ3MpO1xyXG4gICAgdGhpcy51c2VyQ3JlYXRlZFNjaGVkdWxlLmVtaXQoc2NoZWR1bGUpO1xyXG4gICAgcmV0dXJuIHNjaGVkdWxlO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2NoZWR1bGVzKHNjaGVkdWxlczogSVNjaGVkdWxlW10pIHtcclxuICAgIGxldCBuZXdTY2hlZHVsZXMgPSBbXTtcclxuICAgIGZvciAobGV0IHNjaGVkdWxlIG9mIHNjaGVkdWxlcykge1xyXG4gICAgICBuZXdTY2hlZHVsZXMucHVzaCh0aGlzLmNyZWF0ZVNjaGVkdWxlKHNjaGVkdWxlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3U2NoZWR1bGVzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2NoZWR1bGUoYXJnczogSVNjaGVkdWxlKTogSVNjaGVkdWxlIHtcclxuICAgIC8vIGlmIChmb3JtLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBjcmVhdGUgYSBjb2xvclxyXG4gICAgbGV0IGNvbG9yID0gdGhpcy5uZXh0Q29sb3IoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvbG9yKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgYW4gaWRcclxuICAgIGxldCBpZCA9IChhcmdzLmlkID09IG51bGwpID8gJycgOiBhcmdzLmlkLnRvU3RyaW5nKCk7XHJcbiAgICBpZiAoaWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGlkID0gdXVpZHY0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHN0YXJ0OiBEYXRlID0gTG9jYWxEYXRlLmNvbnZlcnRUb0pzRGF0ZShhcmdzLnN0YXJ0KTtcclxuICAgIGxldCBlbmQ6IERhdGUgPSBMb2NhbERhdGUuY29udmVydFRvSnNEYXRlKGFyZ3MuZW5kKTtcclxuXHJcbiAgICBsZXQgc2NoZWR1bGU6IElTY2hlZHVsZSA9IHtcclxuICAgICAgaWQsXHJcbiAgICAgIGNhbGVuZGFySWQ6IChhcmdzLmNhbGVuZGFySWQgPT0gbnVsbCkgPyB0aGlzLmNhbGVuZGFySWREZWZhdWx0IDogYXJncy5jYWxlbmRhcklkLFxyXG4gICAgICB0aXRsZTogYXJncy50aXRsZSxcclxuICAgICAgc3RhcnQ6IHN0YXJ0LFxyXG4gICAgICBlbmQ6IGVuZCxcclxuICAgICAgY2F0ZWdvcnk6IGFyZ3MuY2F0ZWdvcnksXHJcbiAgICAgIGlzQWxsRGF5OiBhcmdzLmlzQWxsRGF5LFxyXG4gICAgICBkdWVEYXRlQ2xhc3M6ICcnLFxyXG4gICAgICBiZ0NvbG9yOiBjb2xvcixcclxuICAgIH0gYXMgSVNjaGVkdWxlXHJcbiAgICAvLyBjb25zb2xlLmxvZyhgZXZlbnQtY2FsZW5kYXIuY29tcG9uZW50LnRzOiBjcmVhdGVFdmVudDpgLCBzY2hlZHVsZSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyLmNyZWF0ZVNjaGVkdWxlcyhbc2NoZWR1bGVdKTtcclxuICAgIHJldHVybiB0aGlzLmNhbGVuZGFyLmdldFNjaGVkdWxlKHNjaGVkdWxlLmlkLCBzY2hlZHVsZS5jYWxlbmRhcklkKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNjaGVkdWxlQW5kTm90aWZ5UGFyZW50KGFyZ3M6IElTY2hlZHVsZSkge1xyXG4gICAgbGV0IHNjaGVkdWxlID0gdGhpcy51cGRhdGVTY2hlZHVsZShhcmdzKTtcclxuICAgIHRoaXMudXNlclVwZGF0ZWRTY2hlZHVsZS5lbWl0KHNjaGVkdWxlKTtcclxuICAgIHJldHVybiBzY2hlZHVsZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNjaGVkdWxlKHNjaGVkdWxlOiBJU2NoZWR1bGUpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGBldmVudC1jYWxlbmRhci5jb21wb25lbnQudHM6IHVwZGF0ZVNjaGVkdWxlOmAsIHNjaGVkdWxlKTtcclxuICAgIGxldCBjYWxlbmRhcklkID0gKHNjaGVkdWxlLmNhbGVuZGFySWQgPT0gbnVsbCkgPyB0aGlzLmNhbGVuZGFySWREZWZhdWx0IDogc2NoZWR1bGUuY2FsZW5kYXJJZDtcclxuICAgIHRoaXMuY2FsZW5kYXIudXBkYXRlU2NoZWR1bGUoc2NoZWR1bGUuaWQsIGNhbGVuZGFySWQsIHNjaGVkdWxlLCBmYWxzZSk7XHJcbiAgICByZXR1cm4gdGhpcy5jYWxlbmRhci5nZXRTY2hlZHVsZShzY2hlZHVsZS5pZCwgY2FsZW5kYXJJZCk7XHJcbiAgfVxyXG5cclxuICBnZXRTY2hlZHVsZShhcmdzOiB7IGlkOiBzdHJpbmcsIGNhbGVuZGFySWQ6IHN0cmluZyB9KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgZXZlbnQtY2FsZW5kYXIuY29tcG9uZW50LnRzOiBnZXRTY2hlZHVsZTpgLCBzY2hlZHVsZSk7XHJcbiAgICBsZXQgY2FsZW5kYXJJZCA9IChhcmdzLmNhbGVuZGFySWQgPT0gbnVsbCkgPyB0aGlzLmNhbGVuZGFySWREZWZhdWx0IDogYXJncy5jYWxlbmRhcklkO1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIuZ2V0U2NoZWR1bGUoYXJncy5pZCwgY2FsZW5kYXJJZCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTY2hlZHVsZUFuZE5vdGlmeVBhcmVudChhcmdzOiB7IGlkOiBzdHJpbmcsIGNhbGVuZGFySWQ6IHN0cmluZyB9KSB7XHJcbiAgICB0aGlzLmRlbGV0ZVNjaGVkdWxlKGFyZ3MpO1xyXG4gICAgbGV0IGNhbGVuZGFySWQgPSAoYXJncy5jYWxlbmRhcklkID09IG51bGwpID8gdGhpcy5jYWxlbmRhcklkRGVmYXVsdCA6IGFyZ3MuY2FsZW5kYXJJZDtcclxuICAgIHRoaXMudXNlckRlbGV0ZWRTY2hlZHVsZS5lbWl0KHsgaWQ6IGFyZ3MuaWQsIGNhbGVuZGFySWQgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTY2hlZHVsZShhcmdzOiB7IGlkOiBzdHJpbmcsIGNhbGVuZGFySWQ6IHN0cmluZyB9KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgZXZlbnQtY2FsZW5kYXIuY29tcG9uZW50LnRzOiBkZWxldGVTY2hlZHVsZTpgLCBzY2hlZHVsZSk7XHJcbiAgICBsZXQgY2FsZW5kYXJJZCA9IChhcmdzLmNhbGVuZGFySWQgPT0gbnVsbCkgPyB0aGlzLmNhbGVuZGFySWREZWZhdWx0IDogYXJncy5jYWxlbmRhcklkO1xyXG4gICAgdGhpcy5jYWxlbmRhci5kZWxldGVTY2hlZHVsZShhcmdzLmlkLCBjYWxlbmRhcklkLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBbGxTY2hlZHVsZXMoKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuUG9wdXBTY2hlZHVsZUVkaXRvcihzY2hlZHVsZTogSVNjaGVkdWxlKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnb3BlblBvcHVwU2NoZWR1bGVFZGl0b3I6IGNhbGV2ZW50OicsIHNjaGVkdWxlKTtcclxuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgIGlmICh0aGlzLmFwcGxpZWRPcHRpb25zLnRoZW1lQ2xhc3MpIHtcclxuICAgICAgZGlhbG9nQ29uZmlnLnBhbmVsQ2xhc3MgPSB0aGlzLmFwcGxpZWRPcHRpb25zLnRoZW1lQ2xhc3M7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLndhcm4oYG9wdGlvbnM6IGAsIHRoaXMuYXBwbGllZE9wdGlvbnMpO1xyXG4gICAgZGlhbG9nQ29uZmlnLmRhdGEgPSB7IHNjaGVkdWxlLCBkYXJrTW9kZTogdGhpcy5hcHBsaWVkT3B0aW9ucy5kYXJrTW9kZSwgdGhlbWVDbGFzczogdGhpcy5hcHBsaWVkT3B0aW9ucy50aGVtZUNsYXNzIH0gYXMgQ2FsZW5kYXJFZGl0b3JPcHRpb25zO1xyXG4gICAgZGlhbG9nQ29uZmlnLmF1dG9Gb2N1cyA9IHRydWU7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdFR1aUNhbGVuZGFyRWRpdG9yRGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xyXG4gICAgLy8gY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRUdWlDYWxlbmRhclNjaGVkdWxlRWRpdG9yRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgIGRhdGE6IHNjaGVkdWxlLFxyXG4gICAgLy8gfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogeyBzY2hlZHVsZTogSVNjaGVkdWxlLCBwZXJmb3JtRGVsZXRlOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ29wZW5Qb3B1cFNjaGVkdWxlRWRpdG9yOiBUaGUgZGlhbG9nIHdhcyBjbG9zZWQnLCByZXN1bHQpO1xyXG4gICAgICB0aGlzLmNhbGVuZGFyLnJlbmRlcih0cnVlKTsgIC8vIDwtLSBzbyB0aGF0IHNlbGVjdGlvbiBpcyBjbGVhcmVkXHJcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnNjaGVkdWxlKSB7XHJcbiAgICAgICAgbGV0IHNjaGVkdWxlID0gcmVzdWx0LnNjaGVkdWxlO1xyXG4gICAgICAgIGlmIChyZXN1bHQucGVyZm9ybURlbGV0ZSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAvLyBkZWxldGVcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBvcGVuUG9wdXBTY2hlZHVsZUVkaXRvcjphZnRlckNMb3NlZDogZGVsZXRlU2NoZWR1bGVgKTtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlU2NoZWR1bGVBbmROb3RpZnlQYXJlbnQoeyBpZDogc2NoZWR1bGUuaWQsIGNhbGVuZGFySWQ6IHNjaGVkdWxlLmNhbGVuZGFySWQgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzY2hlZHVsZS5pZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgb3BlblBvcHVwU2NoZWR1bGVFZGl0b3I6YWZ0ZXJDTG9zZWQ6IGFkZFNjaGVkdWxlYCk7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjaGVkdWxlQW5kTm90aWZ5UGFyZW50KHNjaGVkdWxlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coYG9wZW5Qb3B1cFNjaGVkdWxlRWRpdG9yOmFmdGVyQ0xvc2VkOiB1cGRhdGVTY2hlZHVsZWApO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVTY2hlZHVsZUFuZE5vdGlmeVBhcmVudChzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBzZXREZWZhdWx0T3B0aW9ucygpIHtcclxuICAgIHRoaXMuc2V0T3B0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgc2V0T3B0aW9ucyhvPzogQ2FsZW5kYXJPcHRpb25zKSB7XHJcblxyXG4gICAgY29uc3QgZ2V0ID0gKG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSA9PiB7XHJcbiAgICAgIGxldCB2YWx1ZSA9IHBhdGhcclxuICAgICAgICAuc3BsaXQoJy4nKVxyXG4gICAgICAgIC5yZWR1Y2UoKG8sIHApID0+IG9bcF0sIG9iamVjdCk7XHJcbiAgICAgIHJldHVybiAodmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3B0aW9ucyA9IHtcclxuICAgICAgZGFya01vZGU6IGdldChvLCBcImRhcmtNb2RlXCIsIGZhbHNlKSxcclxuICAgICAgdGhlbWVDbGFzczogZ2V0KG8sIFwidGhlbWVDbGFzc1wiLCBudWxsKSxcclxuICAgICAgaW9wdGlvbnM6IChvICYmIG8uaW9wdGlvbnMpID8gdGhpcy5zZXRJT3B0aW9ucyhvLmlvcHRpb25zKSA6IHRoaXMuZ2V0RGVmYXVsdElPcHRpb25zKCksXHJcbiAgICAgIGJ1dHRvbnM6IHtcclxuICAgICAgICBwcmV2aW91czogZ2V0KG8sIFwiYnV0dG9ucy5wcmV2aW91c1wiLCB0cnVlKSxcclxuICAgICAgICBuZXh0OiBnZXQobywgXCJidXR0b25zLm5leHRcIiwgdHJ1ZSksXHJcbiAgICAgICAgdG9kYXk6IGdldChvLCBcImJ1dHRvbnMudG9kYXlcIiwgdHJ1ZSksXHJcbiAgICAgICAgbG9uZ1ByZXZpb3VzOiBnZXQobywgXCJidXR0b25zLmxvbmdQcmV2aW91c1wiLCB0cnVlKSxcclxuICAgICAgICBsb25nTmV4dDogZ2V0KG8sIFwiYnV0dG9ucy5sb25nTmV4dFwiLCB0cnVlKSxcclxuICAgICAgICBtb250aDogZ2V0KG8sIFwiYnV0dG9ucy5tb250aFwiLCB0cnVlKSxcclxuICAgICAgICB3ZWVrOiBnZXQobywgXCJidXR0b25zLndlZWtcIiwgdHJ1ZSksXHJcbiAgICAgICAgZGF5OiBnZXQobywgXCJidXR0b25zLmRheVwiLCB0cnVlKSxcclxuICAgICAgfVxyXG4gICAgfSBhcyBDYWxlbmRhck9wdGlvbnM7XHJcbiAgICB0aGlzLmFwcGxpZWRPcHRpb25zID0gb3B0aW9ucztcclxuICAgIC8vIGNvbnNvbGUud2Fybihgc2V0T3B0aW9uczogYCwgdGhpcy5hcHBsaWVkT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBzZXRJT3B0aW9ucyhpb3B0aW9uc0luOiBJT3B0aW9ucykge1xyXG4gICAgbGV0IGlvcHRpb25zID0gdGhpcy5wcmVwcm9jZXNzSU9wdGlvbnMoaW9wdGlvbnNJbik7XHJcbiAgICBpZiAodGhpcy5jYWxlbmRhcikge1xyXG4gICAgICB0aGlzLmNhbGVuZGFyLnNldE9wdGlvbnMoaW9wdGlvbnMpO1xyXG4gICAgICB0aGlzLmNhbGVuZGFyLnNldFRoZW1lKGlvcHRpb25zLnRoZW1lKTtcclxuICAgICAgdGhpcy5jYWxlbmRhci5yZW5kZXIodHJ1ZSk7XHJcbiAgICAgIHRoaXMuY2FsZW5kYXIudG9nZ2xlU2NoZWR1bGVWaWV3KHRydWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJlcHJvY2Vzc0lPcHRpb25zKGlvcHRpb25zOiBJT3B0aW9ucyk6IElPcHRpb25zIHtcclxuICAgIGxldCBkZWZzOiBJT3B0aW9ucyA9IHRoaXMuZ2V0RGVmYXVsdElPcHRpb25zKCk7XHJcbiAgICBpZiAoaW9wdGlvbnMgPT0gbnVsbCkge1xyXG4gICAgICBpb3B0aW9ucyA9IGRlZnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpb3B0aW9ucyA9IHsgLi4uZGVmcywgLi4uaW9wdGlvbnMgfTtcclxuICAgIH1cclxuICAgIGlvcHRpb25zLnVzZUNyZWF0aW9uUG9wdXAgPSBmYWxzZTtcclxuICAgIGlvcHRpb25zLnVzZURldGFpbFBvcHVwID0gZmFsc2U7XHJcbiAgICBpZiAoIWlvcHRpb25zLnRoZW1lKSB7XHJcbiAgICAgIGlvcHRpb25zLnRoZW1lID0gdGhpcy5nZXREZWZhdWx0VGhlbWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpb3B0aW9ucztcclxuICB9XHJcblxyXG5cclxuICBnZXREZWZhdWx0SU9wdGlvbnMoKTogSU9wdGlvbnMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGVmYXVsdFZpZXc6ICdtb250aCcsXHJcbiAgICAgIHRhc2tWaWV3OiB0cnVlLFxyXG4gICAgICB1c2VDcmVhdGlvblBvcHVwOiBmYWxzZSxcclxuICAgICAgdXNlRGV0YWlsUG9wdXA6IGZhbHNlLFxyXG4gICAgICB0aGVtZTogdGhpcy5nZXREZWZhdWx0VGhlbWUoKSxcclxuICAgICAgdGVtcGxhdGU6IHtcclxuICAgICAgICBtb250aERheW5hbWU6IGZ1bmN0aW9uIChkYXluYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwiY2FsZW5kYXItd2Vlay1kYXluYW1lLW5hbWVcIj4nICsgZGF5bmFtZS5sYWJlbCArICc8L3NwYW4+JztcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHdlZWs6IHtcclxuICAgICAgICAvLyBzdGFydERheU9mV2VlazogdW5kZWZpbmVkLFxyXG4gICAgICAgIC8vIGRheW5hbWVzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgbmFycm93V2Vla2VuZDogZmFsc2UsXHJcbiAgICAgICAgLy8gd29ya3dlZWs6IHRydWUsXHJcbiAgICAgICAgc2hvd1RpbWV6b25lQ29sbGFwc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgdGltZXpvbmVzQ29sbGFwc2VkOiB0cnVlLFxyXG4gICAgICAgIGhvdXJTdGFydDogNyxcclxuICAgICAgICBob3VyRW5kOiAyMCxcclxuICAgICAgfSBhcyBJV2Vla09wdGlvbnMsXHJcbiAgICB9IGFzIElPcHRpb25zO1xyXG5cclxuICB9XHJcblxyXG4gIGdldENvbG9yKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB0aGVtZS0ke25hbWV9YCk7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCk7XHJcbiAgICAgIC8vIGNvbnNvbGUud2FybihgdGhlbWUtJHtuYW1lfSBjb2xvcjpgLCBzdHlsZS5jb2xvcik7XHJcbiAgICAgIHJldHVybiBzdHlsZS5jb2xvcjtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldERlZmF1bHRUaGVtZSgpOiBJVGhlbWUge1xyXG4gICAgZnVuY3Rpb24gYWRqdXN0SGV4T3BhY2l0eShjb2xvciwgb3BhY2l0eSkge1xyXG4gICAgICBjb25zdCByID0gcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSwgMyksIDE2KTtcclxuICAgICAgY29uc3QgZyA9IHBhcnNlSW50KGNvbG9yLnNsaWNlKDMsIDUpLCAxNik7XHJcbiAgICAgIGNvbnN0IGIgPSBwYXJzZUludChjb2xvci5zbGljZSg1LCA3KSwgMTYpO1xyXG5cclxuICAgICAgcmV0dXJuICdyZ2JhKCcgKyByICsgJywgJyArIGcgKyAnLCAnICsgYiArICcsICcgKyBvcGFjaXR5ICsgJyknO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGRlZmF1bHQga2V5cyBhbmQgc3R5bGVzXHJcbiAgICAvLyBUT0RPOiBhcHBseSBNYXRlcmlhbCBEZXNpZ24gVGhlbWUgXHJcbiAgICBsZXQgYmFja2dyb3VuZCA9IHRoaXMuZ2V0Q29sb3IoXCJiYWNrZ3JvdW5kXCIpO1xyXG4gICAgbGV0IGJvcmRlciA9IHRoaXMuZ2V0Q29sb3IoXCJkaXZpZGVyXCIpO1xyXG4gICAgbGV0IGJvcmRlckxpZ2h0ID0gdGhpcy5nZXRDb2xvcihcImRpdmlkZXItbGlnaHRcIik7XHJcbiAgICBsZXQgc2hhZG93ID0gdGhpcy5nZXRDb2xvcihcImRpdmlkZXJcIik7XHJcbiAgICBsZXQgaGlnaGxpZ2h0ID0gdGhpcy5nZXRDb2xvcihcImhpZ2hsaWdodFwiKTtcclxuICAgIGxldCBwcmltYXJ5ID0gdGhpcy5nZXRDb2xvcihcInByaW1hcnlcIik7XHJcbiAgICBsZXQgd2FybiA9IHRoaXMuZ2V0Q29sb3IoXCJ3YXJuXCIpO1xyXG4gICAgbGV0IHRleHQgPSB0aGlzLmdldENvbG9yKFwiZm9yZWdyb3VuZFwiKTtcclxuICAgIGxldCBwcmltYXJ5U2hhZGVkID0gdGhpcy5nZXRDb2xvcihcInByaW1hcnktc2hhZGVkXCIpO1xyXG5cclxuICAgIC8vIHR1aS1mdWxsLWNhbGVuZGFyLXdlZWtkYXktc2NoZWR1bGUtdGl0bGVcclxuICAgIC8vY2FsZW5kYXItd2Vlay1kYXluYW1lLW5hbWVcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdjb21tb24uYm9yZGVyJzogYDFweCBzb2xpZCAke2JvcmRlcn1gLFxyXG4gICAgICAnY29tbW9uLmJhY2tncm91bmRDb2xvcic6IGJhY2tncm91bmQsXHJcbiAgICAgICdjb21tb24uaG9saWRheS5jb2xvcic6IHdhcm4sXHJcbiAgICAgICdjb21tb24uc2F0dXJkYXkuY29sb3InOiB0ZXh0LFxyXG4gICAgICAnY29tbW9uLmRheW5hbWUuY29sb3InOiB0ZXh0LFxyXG4gICAgICAnY29tbW9uLnRvZGF5LmNvbG9yJzogJyMwZjAnLFxyXG5cclxuICAgICAgLy8gY3JlYXRpb24gZ3VpZGUgc3R5bGVcclxuICAgICAgJ2NvbW1vbi5jcmVhdGlvbkd1aWRlLmJhY2tncm91bmRDb2xvcic6IHByaW1hcnlTaGFkZWQsXHJcbiAgICAgICdjb21tb24uY3JlYXRpb25HdWlkZS5ib3JkZXInOiBgMXB4IHNvbGlkICR7aGlnaGxpZ2h0fWAsXHJcblxyXG4gICAgICAvLyBtb250aCBoZWFkZXIgJ2RheW5hbWUnXHJcbiAgICAgICdtb250aC5kYXluYW1lLmhlaWdodCc6ICczMXB4JyxcclxuICAgICAgJ21vbnRoLmRheW5hbWUuYm9yZGVyTGVmdCc6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuICAgICAgJ21vbnRoLmRheW5hbWUucGFkZGluZ0xlZnQnOiAnMTBweCcsXHJcbiAgICAgICdtb250aC5kYXluYW1lLnBhZGRpbmdSaWdodCc6ICcxMHB4JyxcclxuICAgICAgJ21vbnRoLmRheW5hbWUuYmFja2dyb3VuZENvbG9yJzogJ2luaGVyaXQnLFxyXG4gICAgICAnbW9udGguZGF5bmFtZS5mb250U2l6ZSc6ICcxMnB4JyxcclxuICAgICAgJ21vbnRoLmRheW5hbWUuZm9udFdlaWdodCc6ICdub3JtYWwnLFxyXG4gICAgICAnbW9udGguZGF5bmFtZS50ZXh0QWxpZ24nOiAnbGVmdCcsXHJcblxyXG4gICAgICAvLyBtb250aCBkYXkgZ3JpZCBjZWxsICdkYXknXHJcbiAgICAgICdtb250aC5ob2xpZGF5RXhjZXB0VGhpc01vbnRoLmNvbG9yJzogJ3JnYmEoMjU1LCA2NCwgNjQsIDAuNCknLFxyXG4gICAgICAnbW9udGguZGF5RXhjZXB0VGhpc01vbnRoLmNvbG9yJzogJ3JnYmEoNTEsIDUxLCA1MSwgMC40KScsXHJcbiAgICAgICdtb250aC53ZWVrZW5kLmJhY2tncm91bmRDb2xvcic6ICdpbmhlcml0JyxcclxuICAgICAgJ21vbnRoLmRheS5mb250U2l6ZSc6ICcxNHB4JyxcclxuICAgICAgJ21vbnRoLnNjaGVkdWxlLmNvbG9yJzogaGlnaGxpZ2h0LFxyXG5cclxuICAgICAgLy8gbW9udGggc2NoZWR1bGUgc3R5bGVcclxuICAgICAgJ21vbnRoLnNjaGVkdWxlLmJvcmRlclJhZGl1cyc6ICcycHgnLFxyXG4gICAgICAnbW9udGguc2NoZWR1bGUuaGVpZ2h0JzogJzI0cHgnLFxyXG4gICAgICAnbW9udGguc2NoZWR1bGUubWFyZ2luVG9wJzogJzJweCcsXHJcbiAgICAgICdtb250aC5zY2hlZHVsZS5tYXJnaW5MZWZ0JzogJzhweCcsXHJcbiAgICAgICdtb250aC5zY2hlZHVsZS5tYXJnaW5SaWdodCc6ICc4cHgnLFxyXG5cclxuICAgICAgLy8gbW9udGggbW9yZSB2aWV3XHJcbiAgICAgICdtb250aC5tb3JlVmlldy5ib3JkZXInOiBgMXB4IHNvbGlkICR7Ym9yZGVyfWAsXHJcbiAgICAgICdtb250aC5tb3JlVmlldy5ib3hTaGFkb3cnOiBgMCAycHggNnB4IDAgJHtzaGFkb3d9YCxcclxuICAgICAgJ21vbnRoLm1vcmVWaWV3LmJhY2tncm91bmRDb2xvcic6IGJhY2tncm91bmQsXHJcbiAgICAgICdtb250aC5tb3JlVmlldy5wYWRkaW5nQm90dG9tJzogJzE3cHgnLFxyXG4gICAgICAnbW9udGgubW9yZVZpZXdUaXRsZS5oZWlnaHQnOiAnNDRweCcsXHJcbiAgICAgICdtb250aC5tb3JlVmlld1RpdGxlLm1hcmdpbkJvdHRvbSc6ICcxMnB4JyxcclxuICAgICAgJ21vbnRoLm1vcmVWaWV3VGl0bGUuYmFja2dyb3VuZENvbG9yJzogJ2luaGVyaXQnLFxyXG4gICAgICAnbW9udGgubW9yZVZpZXdUaXRsZS5ib3JkZXJCb3R0b20nOiAnbm9uZScsXHJcbiAgICAgICdtb250aC5tb3JlVmlld1RpdGxlLnBhZGRpbmcnOiAnMTJweCAxN3B4IDAgMTdweCcsXHJcbiAgICAgICdtb250aC5tb3JlVmlld0xpc3QucGFkZGluZyc6ICcwIDE3cHgnLFxyXG5cclxuICAgICAgLy8gd2VlayBoZWFkZXIgJ2RheW5hbWUnXHJcbiAgICAgICd3ZWVrLmRheW5hbWUuaGVpZ2h0JzogJzQycHgnLFxyXG4gICAgICAnd2Vlay5kYXluYW1lLmJvcmRlclRvcCc6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuICAgICAgJ3dlZWsuZGF5bmFtZS5ib3JkZXJCb3R0b20nOiBgMXB4IHNvbGlkICR7Ym9yZGVyfWAsXHJcbiAgICAgICd3ZWVrLmRheW5hbWUuYm9yZGVyTGVmdCc6ICdpbmhlcml0JyxcclxuICAgICAgJ3dlZWsuZGF5bmFtZS5wYWRkaW5nTGVmdCc6ICcwJyxcclxuICAgICAgJ3dlZWsuZGF5bmFtZS5iYWNrZ3JvdW5kQ29sb3InOiAnaW5oZXJpdCcsXHJcbiAgICAgICd3ZWVrLmRheW5hbWUudGV4dEFsaWduJzogJ2xlZnQnLFxyXG4gICAgICAnd2Vlay50b2RheS5jb2xvcic6IHRleHQsXHJcbiAgICAgICd3ZWVrLnBhc3REYXkuY29sb3InOiBib3JkZXJMaWdodCxcclxuXHJcbiAgICAgIC8vIHdlZWsgdmVydGljYWwgcGFuZWwgJ3ZwYW5lbCdcclxuICAgICAgJ3dlZWsudnBhbmVsU3BsaXR0ZXIuYm9yZGVyJzogYDFweCBzb2xpZCAke2JvcmRlcn1gLFxyXG4gICAgICAnd2Vlay52cGFuZWxTcGxpdHRlci5oZWlnaHQnOiAnM3B4JyxcclxuXHJcbiAgICAgIC8vIHdlZWsgZGF5Z3JpZCAnZGF5Z3JpZCdcclxuICAgICAgJ3dlZWsuZGF5Z3JpZC5ib3JkZXJSaWdodCc6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuICAgICAgJ3dlZWsuZGF5Z3JpZC5iYWNrZ3JvdW5kQ29sb3InOiBiYWNrZ3JvdW5kLFxyXG5cclxuICAgICAgJ3dlZWsuZGF5Z3JpZExlZnQud2lkdGgnOiAnNzJweCcsXHJcbiAgICAgICd3ZWVrLmRheWdyaWRMZWZ0LmJhY2tncm91bmRDb2xvcic6IGJhY2tncm91bmQsXHJcbiAgICAgICd3ZWVrLmRheWdyaWRMZWZ0LnBhZGRpbmdSaWdodCc6ICc4cHgnLFxyXG4gICAgICAnd2Vlay5kYXlncmlkTGVmdC5ib3JkZXJSaWdodCc6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuXHJcblxyXG4gICAgICAnd2Vlay50b2RheS5iYWNrZ3JvdW5kQ29sb3InOiBwcmltYXJ5U2hhZGVkLFxyXG4gICAgICAnd2Vlay53ZWVrZW5kLmJhY2tncm91bmRDb2xvcic6ICdpbmhlcml0JyxcclxuXHJcbiAgICAgIC8vIHdlZWsgdGltZWdyaWQgJ3RpbWVncmlkJ1xyXG4gICAgICAnd2Vlay50aW1lZ3JpZExlZnQud2lkdGgnOiAnNzJweCcsXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkTGVmdC5iYWNrZ3JvdW5kQ29sb3InOiAnaW5oZXJpdCcsXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkTGVmdC5ib3JkZXJSaWdodCc6IGAxcHggc29saWQgJHtib3JkZXJ9YCxcclxuICAgICAgJ3dlZWsudGltZWdyaWRMZWZ0LmZvbnRTaXplJzogJzExcHgnLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZExlZnRUaW1lem9uZUxhYmVsLmhlaWdodCc6ICc0MHB4JyxcclxuICAgICAgJ3dlZWsudGltZWdyaWRMZWZ0QWRkaXRpb25hbFRpbWV6b25lLmJhY2tncm91bmRDb2xvcic6IGJhY2tncm91bmQsXHJcblxyXG4gICAgICAnd2Vlay50aW1lZ3JpZE9uZUhvdXIuaGVpZ2h0JzogJzUycHgnLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZEhhbGZIb3VyLmhlaWdodCc6ICcyNnB4JyxcclxuICAgICAgJ3dlZWsudGltZWdyaWRIYWxmSG91ci5ib3JkZXJCb3R0b20nOiAnbm9uZScsXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkSG9yaXpvbnRhbExpbmUuYm9yZGVyQm90dG9tJzogYDFweCBzb2xpZCAke2JvcmRlcn1gLFxyXG5cclxuICAgICAgJ3dlZWsudGltZWdyaWQucGFkZGluZ1JpZ2h0JzogJzhweCcsXHJcbiAgICAgICd3ZWVrLnRpbWVncmlkLmJvcmRlclJpZ2h0JzogYDFweCBzb2xpZCAke2JvcmRlcn1gLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZFNjaGVkdWxlLmJvcmRlclJhZGl1cyc6ICcycHgnLFxyXG4gICAgICAnd2Vlay50aW1lZ3JpZFNjaGVkdWxlLnBhZGRpbmdMZWZ0JzogJzJweCcsXHJcblxyXG4gICAgICAvLyAjNTE1Y2U2IGlzIGEgc2xhdGUgYmx1ZVxyXG5cclxuICAgICAgJ3dlZWsuY3VycmVudFRpbWUuY29sb3InOiBoaWdobGlnaHQsXHJcbiAgICAgICd3ZWVrLmN1cnJlbnRUaW1lLmZvbnRTaXplJzogJzExcHgnLFxyXG4gICAgICAnd2Vlay5jdXJyZW50VGltZS5mb250V2VpZ2h0JzogJ25vcm1hbCcsXHJcblxyXG4gICAgICAnd2Vlay5wYXN0VGltZS5jb2xvcic6IGJvcmRlckxpZ2h0LFxyXG4gICAgICAnd2Vlay5wYXN0VGltZS5mb250V2VpZ2h0JzogJ25vcm1hbCcsXHJcblxyXG4gICAgICAnd2Vlay5mdXR1cmVUaW1lLmNvbG9yJzogYm9yZGVyLFxyXG4gICAgICAnd2Vlay5mdXR1cmVUaW1lLmZvbnRXZWlnaHQnOiAnbm9ybWFsJyxcclxuXHJcbiAgICAgICd3ZWVrLmN1cnJlbnRUaW1lTGluZVBhc3QuYm9yZGVyJzogYDFweCBkYXNoZWQgJHtoaWdobGlnaHR9YCxcclxuICAgICAgJ3dlZWsuY3VycmVudFRpbWVMaW5lQnVsbGV0LmJhY2tncm91bmRDb2xvcic6IGhpZ2hsaWdodCxcclxuICAgICAgJ3dlZWsuY3VycmVudFRpbWVMaW5lVG9kYXkuYm9yZGVyJzogYDFweCBzb2xpZCAke2hpZ2hsaWdodH1gLFxyXG4gICAgICAnd2Vlay5jdXJyZW50VGltZUxpbmVGdXR1cmUuYm9yZGVyJzogJ25vbmUnLFxyXG5cclxuICAgICAgLy8gd2VlayBjcmVhdGlvbiBndWlkZSBzdHlsZVxyXG4gICAgICAnd2Vlay5jcmVhdGlvbkd1aWRlLmNvbG9yJzogaGlnaGxpZ2h0LFxyXG4gICAgICAnd2Vlay5jcmVhdGlvbkd1aWRlLmZvbnRTaXplJzogJzExcHgnLFxyXG4gICAgICAnd2Vlay5jcmVhdGlvbkd1aWRlLmZvbnRXZWlnaHQnOiAnYm9sZCcsXHJcblxyXG4gICAgICAvLyB3ZWVrIGRheWdyaWQgc2NoZWR1bGUgc3R5bGVcclxuICAgICAgJ3dlZWsuZGF5R3JpZFNjaGVkdWxlLmJvcmRlclJhZGl1cyc6ICcycHgnLFxyXG4gICAgICAnd2Vlay5kYXlHcmlkU2NoZWR1bGUuaGVpZ2h0JzogJzI0cHgnLFxyXG4gICAgICAnd2Vlay5kYXlHcmlkU2NoZWR1bGUubWFyZ2luVG9wJzogJzJweCcsXHJcbiAgICAgICd3ZWVrLmRheUdyaWRTY2hlZHVsZS5tYXJnaW5MZWZ0JzogJzhweCcsXHJcbiAgICAgICd3ZWVrLmRheUdyaWRTY2hlZHVsZS5tYXJnaW5SaWdodCc6ICc4cHgnXHJcbiAgICB9IGFzIElUaGVtZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiY29udGVudC1jb250YWluZXJcIj5cclxuICAgIDwhLS0gVGhlc2UgZGl2cyBhcmUgaGVyZSBzbyB0aGF0IHdlIGNhbiByZWFkIHRoZSB0aGVtZSBjb2xvcnMgZm9yIHRoZSB0dWkgdGhlbWUgLS0+XHJcbiAgICA8IS0tIFRoZSBvdXRlciBkaXYgZ2l2ZXMgdGhlIGRlZmF1bHQgY29sb3IgZm9yIHdoZW4gdXNlciBkb2VzIG5vdCBwcm92aWRlIGFuIEFuZ3VsYXIgdGhlbWUgLS0+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IGJsdWU7XCI+IDxkaXYgaWQ9XCJ0aGVtZS1wcmltYXJ5XCI+PC9kaXY+PC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IGJsdWU7XCI+IDxkaXYgaWQ9XCJ0aGVtZS1oaWdobGlnaHRcIj48L2Rpdj48L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogYmx1ZTtcIj4gPGRpdiBpZD1cInRoZW1lLWFjY2VudFwiPjwvZGl2PjwvZGl2PlxyXG4gICAgPGRpdiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+IDxkaXYgaWQ9XCJ0aGVtZS13YXJuXCI+PC9kaXY+PC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IHJnYmEoMCwgMCwgMjU1LCAwLjIpO1wiPiA8ZGl2IGlkPVwidGhlbWUtcHJpbWFyeS1zaGFkZWRcIj48L2Rpdj48L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogIzNlM2UzZTtcIj4gPGRpdiBpZD1cInRoZW1lLWZvcmVncm91bmRcIj48L2Rpdj48L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogI2UwZTBlMDtcIj4gPGRpdiBpZD1cInRoZW1lLWRpdmlkZXJcIj48L2Rpdj48L2Rpdj5cclxuICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogd2hpdGU7XCI+IDxkaXYgaWQ9XCJ0aGVtZS1iYWNrZ3JvdW5kXCI+PC9kaXY+PC9kaXY+XHJcbiAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY29udGFpbmVyXCI+XHJcbiAgICAgIDwhLS0gY2FsZW5kYXIgdGl0bGViYXIgLS0+XHJcbiAgICAgIDxtYXQtdG9vbGJhciBjbGFzcz1cIm1lbnUtYmFyXCIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgPCEtLSA8ZGl2IHN0eWxlPVwiYWxpZ24tc2VsZjogY2VudGVyO2Rpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1wiPiAtLT5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgd2lkdGg6IDEwMCU7ICBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWRpdlwiPlxyXG4gICAgICAgICAgICA8IS0tIExFRlQgLS0+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cImFwcGxpZWRPcHRpb25zLmJ1dHRvbnMubG9uZ1ByZXZpb3VzXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm5hdmlnYXRpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAwcHg7IG1hcmdpbi1yaWdodDogMHB4OyBmb250LXNpemU6IDEuNXJlbSAhaW1wb3J0YW50O1wiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNhbGVuZGFyTG9uZ1ByZXYoKVwiPlxyXG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImljb25Mb25nUHJldlwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAgKm5nSWY9XCJhcHBsaWVkT3B0aW9ucy5idXR0b25zLnByZXZpb3VzXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm5hdmlnYXRpb24tYnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMHB4OyBtYXJnaW4tcmlnaHQ6IDBweDsgZm9udC1zaXplOiAycmVtICFpbXBvcnRhbnQ7XCIgXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2FsZW5kYXJQcmV2KClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJpY29uUHJldlwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAgKm5nSWY9XCJhcHBsaWVkT3B0aW9ucy5idXR0b25zLnRvZGF5XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm5hdmlnYXRpb24tYnV0dG9uXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAwcHg7IG1hcmdpbi1yaWdodDogMHB4OyBmb250LXNpemU6IDEuN3JlbSAhaW1wb3J0YW50O1wiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNhbGVuZGFyVG9kYXkoKVwiPlxyXG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImljb25Ub2RheVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAgKm5nSWY9XCJhcHBsaWVkT3B0aW9ucy5idXR0b25zLm5leHRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibmF2aWdhdGlvbi1idXR0b25cIiBcclxuICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAwcHg7IG1hcmdpbi1yaWdodDogMHB4OyBmb250LXNpemU6IDJyZW0gIWltcG9ydGFudDtcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DYWxlbmRhck5leHQoKVwiPlxyXG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImljb25OZXh0XCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICAqbmdJZj1cImFwcGxpZWRPcHRpb25zLmJ1dHRvbnMubG9uZ05leHRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibmF2aWdhdGlvbi1idXR0b25cIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDBweDsgbWFyZ2luLXJpZ2h0OiAwcHg7IGZvbnQtc2l6ZTogMS41cmVtICFpbXBvcnRhbnQ7XCIgXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2FsZW5kYXJMb25nTmV4dCgpXCI+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaWNvbkxvbmdOZXh0XCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlci1kaXZcIj5cclxuICAgICAgICAgICAgPCEtLSBDRU5URVIgLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXZlbnQtY2FsZW5kYXItdGl0bGVcIj57eyBnZXREYXRlKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1kaXZcIj5cclxuICBcclxuICAgICAgICAgICAgPCEtLSBSSUdIVCAtLT5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFtoaWRkZW5dPVwiIWFwcGxpZWRPcHRpb25zLmJ1dHRvbnMubW9udGggJiYgIWFwcGxpZWRPcHRpb25zLmJ1dHRvbnMud2VlayAmJiAhYXBwbGllZE9wdGlvbnMuYnV0dG9ucy5kYXlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInZpZXctYnV0dG9uXCIgdmFsdWU9XCJtb250aFwiIGlkPVwiQCtpZC90b2dnbGVCdXR0b25cIiBsYXlvdXRfd2lkdGg9XCJ3cmFwX2NvbnRlbnRcIlxyXG4gICAgICAgICAgICAgIGxheW91dF9oZWlnaHQ9XCJ3cmFwX2NvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgKm5nSWY9XCJhcHBsaWVkT3B0aW9ucy5idXR0b25zLm1vbnRoXCIgbWF0LWJ1dHRvbiB2YWx1ZT1cIm1vbnRoXCIgY2xhc3M9XCJ2aWV3LWJ1dHRvblwiIChjbGljayk9XCJvbk1vbnRoVmlldygpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJpY29uQnlNb250aFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdJZj1cImFwcGxpZWRPcHRpb25zLmJ1dHRvbnMud2Vla1wiIG1hdC1idXR0b24gdmFsdWU9XCJ3ZWVrXCIgY2xhc3M9XCJ2aWV3LWJ1dHRvblwiIChjbGljayk9XCJvbldlZWtWaWV3KClcIj5cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImljb25CeVdlZWtcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgKm5nSWY9XCJhcHBsaWVkT3B0aW9ucy5idXR0b25zLmRheVwiIG1hdC1idXR0b24gdmFsdWU9XCJkYXlcIiBjbGFzcz1cInZpZXctYnV0dG9uXCIgKGNsaWNrKT1cIm9uRGF5VmlldygpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJpY29uQnlEYXlcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC10b29sYmFyPlxyXG4gICAgICA8bmd4LW1hdC10dWktY2FsZW5kYXItd3JhcHBlcj48L25neC1tYXQtdHVpLWNhbGVuZGFyLXdyYXBwZXI+XHJcbiAgICA8L2Rpdj5cclxuICBcclxuICA8L3NlY3Rpb24+XHJcbiJdfQ==
|