pdm-ui-kit 0.4.0 → 0.4.1

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.
Files changed (49) hide show
  1. package/esm2020/lib/components/alert/alert.component.mjs +3 -3
  2. package/esm2020/lib/components/alert-dialog/alert-dialog.component.mjs +3 -3
  3. package/esm2020/lib/components/avatar/avatar.component.mjs +3 -3
  4. package/esm2020/lib/components/badge/badge.component.mjs +3 -3
  5. package/esm2020/lib/components/button/button.component.mjs +2 -2
  6. package/esm2020/lib/components/button-group/button-group.component.mjs +2 -2
  7. package/esm2020/lib/components/calendar/calendar.component.mjs +114 -92
  8. package/esm2020/lib/components/card/card.component.mjs +3 -3
  9. package/esm2020/lib/components/carousel/carousel.component.mjs +3 -3
  10. package/esm2020/lib/components/chart/chart.component.mjs +3 -3
  11. package/esm2020/lib/components/checkbox/checkbox.component.mjs +3 -3
  12. package/esm2020/lib/components/collapsible/collapsible.component.mjs +3 -3
  13. package/esm2020/lib/components/combobox/combobox.component.mjs +3 -3
  14. package/esm2020/lib/components/command/command.component.mjs +3 -3
  15. package/esm2020/lib/components/context-menu/context-menu.component.mjs +3 -3
  16. package/esm2020/lib/components/data-table/data-table.component.mjs +3 -3
  17. package/esm2020/lib/components/date-picker/date-picker.component.mjs +2 -2
  18. package/esm2020/lib/components/dialog/dialog.component.mjs +4 -4
  19. package/esm2020/lib/components/draggable-table/draggable-table.component.mjs +3 -3
  20. package/esm2020/lib/components/drawer/drawer.component.mjs +4 -4
  21. package/esm2020/lib/components/dropdown-menu/dropdown-menu.component.mjs +3 -3
  22. package/esm2020/lib/components/empty/empty.component.mjs +2 -2
  23. package/esm2020/lib/components/hover-card/hover-card.component.mjs +3 -3
  24. package/esm2020/lib/components/input/input.component.mjs +3 -3
  25. package/esm2020/lib/components/input-group/input-group.component.mjs +3 -3
  26. package/esm2020/lib/components/input-otp/input-otp.component.mjs +2 -2
  27. package/esm2020/lib/components/input-password/input-password.component.mjs +3 -3
  28. package/esm2020/lib/components/kbd/kbd.component.mjs +3 -3
  29. package/esm2020/lib/components/menubar/menubar.component.mjs +3 -3
  30. package/esm2020/lib/components/native-select/native-select.component.mjs +3 -3
  31. package/esm2020/lib/components/pagination/pagination.component.mjs +3 -3
  32. package/esm2020/lib/components/popover/popover.component.mjs +3 -3
  33. package/esm2020/lib/components/radio-group/radio-group.component.mjs +3 -3
  34. package/esm2020/lib/components/scroll-area/scroll-area.component.mjs +3 -3
  35. package/esm2020/lib/components/select/select.component.mjs +3 -3
  36. package/esm2020/lib/components/sheet/sheet.component.mjs +3 -3
  37. package/esm2020/lib/components/slider/slider.component.mjs +3 -3
  38. package/esm2020/lib/components/sonner/sonner.component.mjs +3 -3
  39. package/esm2020/lib/components/switch/switch.component.mjs +2 -2
  40. package/esm2020/lib/components/table/table.component.mjs +3 -3
  41. package/esm2020/lib/components/tabs/tabs.component.mjs +3 -3
  42. package/esm2020/lib/components/textarea/textarea.component.mjs +3 -3
  43. package/esm2020/lib/components/toggle-group/toggle-group.component.mjs +3 -3
  44. package/fesm2015/pdm-ui-kit.mjs +189 -169
  45. package/fesm2015/pdm-ui-kit.mjs.map +1 -1
  46. package/fesm2020/pdm-ui-kit.mjs +193 -171
  47. package/fesm2020/pdm-ui-kit.mjs.map +1 -1
  48. package/lib/components/calendar/calendar.component.d.ts +4 -5
  49. package/package.json +1 -1
@@ -1,15 +1,15 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output, } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/common";
4
4
  const DAY_MS = 24 * 60 * 60 * 1000;
5
5
  export class PdmCalendarComponent {
6
- constructor(cdr) {
7
- this.cdr = cdr;
6
+ constructor() {
8
7
  this._value = null;
9
8
  this._rangeValue = null;
10
9
  this._month = null;
11
- this.variant = 'single';
12
- this.className = '';
10
+ this.cdr = inject(ChangeDetectorRef);
11
+ this.variant = "single";
12
+ this.className = "";
13
13
  this.disabledDates = [];
14
14
  this.minDate = null;
15
15
  this.maxDate = null;
@@ -23,20 +23,20 @@ export class PdmCalendarComponent {
23
23
  this.monthChange = new EventEmitter();
24
24
  this.dateClick = new EventEmitter();
25
25
  this.disabledDateClick = new EventEmitter();
26
- this.weekdays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
26
+ this.weekdays = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
27
27
  this.monthOptions = [
28
- { value: 0, label: 'Jan' },
29
- { value: 1, label: 'Feb' },
30
- { value: 2, label: 'Mar' },
31
- { value: 3, label: 'Apr' },
32
- { value: 4, label: 'May' },
33
- { value: 5, label: 'Jun' },
34
- { value: 6, label: 'Jul' },
35
- { value: 7, label: 'Aug' },
36
- { value: 8, label: 'Sep' },
37
- { value: 9, label: 'Oct' },
38
- { value: 10, label: 'Nov' },
39
- { value: 11, label: 'Dec' }
28
+ { value: 0, label: "Jan" },
29
+ { value: 1, label: "Feb" },
30
+ { value: 2, label: "Mar" },
31
+ { value: 3, label: "Apr" },
32
+ { value: 4, label: "May" },
33
+ { value: 5, label: "Jun" },
34
+ { value: 6, label: "Jul" },
35
+ { value: 7, label: "Aug" },
36
+ { value: 8, label: "Sep" },
37
+ { value: 9, label: "Oct" },
38
+ { value: 10, label: "Nov" },
39
+ { value: 11, label: "Dec" },
40
40
  ];
41
41
  this.trackByIndex = (index) => {
42
42
  return index;
@@ -55,7 +55,7 @@ export class PdmCalendarComponent {
55
55
  this._rangeValue = value
56
56
  ? {
57
57
  start: this.normalizeDate(value.start),
58
- end: this.normalizeDate(value.end)
58
+ end: this.normalizeDate(value.end),
59
59
  }
60
60
  : null;
61
61
  }
@@ -69,22 +69,22 @@ export class PdmCalendarComponent {
69
69
  return this._month;
70
70
  }
71
71
  get resolvedVariant() {
72
- return this.variant === 'range' ? 'range' : 'single';
72
+ return this.variant === "range" ? "range" : "single";
73
73
  }
74
74
  get visibleMonths() {
75
75
  const baseMonth = this.getAnchorMonth();
76
- if (this.resolvedVariant === 'single') {
76
+ if (this.resolvedVariant === "single") {
77
77
  return [
78
78
  {
79
79
  date: baseMonth,
80
80
  title: this.formatMonthYear(baseMonth),
81
- titleStyle: 'dropdowns',
81
+ titleStyle: "dropdowns",
82
82
  dropdownMonth: this.formatMonthShort(baseMonth),
83
83
  dropdownYear: String(baseMonth.getFullYear()),
84
84
  showPrevButton: true,
85
85
  showNextButton: true,
86
- weeks: this.buildMonthWeeks(baseMonth, false)
87
- }
86
+ weeks: this.buildMonthWeeks(baseMonth, false),
87
+ },
88
88
  ];
89
89
  }
90
90
  const nextMonth = this.addMonths(baseMonth, 1);
@@ -92,19 +92,19 @@ export class PdmCalendarComponent {
92
92
  {
93
93
  date: baseMonth,
94
94
  title: this.formatMonthYear(baseMonth),
95
- titleStyle: 'plain',
95
+ titleStyle: "plain",
96
96
  showPrevButton: true,
97
97
  showNextButton: false,
98
- weeks: this.buildMonthWeeks(baseMonth, true)
98
+ weeks: this.buildMonthWeeks(baseMonth, true),
99
99
  },
100
100
  {
101
101
  date: nextMonth,
102
102
  title: this.formatMonthYear(nextMonth),
103
- titleStyle: 'plain',
103
+ titleStyle: "plain",
104
104
  showPrevButton: false,
105
105
  showNextButton: true,
106
- weeks: this.buildMonthWeeks(nextMonth, true)
107
- }
106
+ weeks: this.buildMonthWeeks(nextMonth, true),
107
+ },
108
108
  ];
109
109
  }
110
110
  get singleHeaderMonth() {
@@ -116,8 +116,10 @@ export class PdmCalendarComponent {
116
116
  get yearOptions() {
117
117
  const baseYear = new Date().getFullYear();
118
118
  const selectedYear = this.singleHeaderYear;
119
- let minYear = this.minYear ?? (this.minDate ? this.minDate.getFullYear() : baseYear - 100);
120
- let maxYear = this.maxYear ?? (this.maxDate ? this.maxDate.getFullYear() : baseYear + 10);
119
+ let minYear = this.minYear ??
120
+ (this.minDate ? this.minDate.getFullYear() : baseYear - 100);
121
+ let maxYear = this.maxYear ??
122
+ (this.maxDate ? this.maxDate.getFullYear() : baseYear + 10);
121
123
  const years = [];
122
124
  if (selectedYear < minYear) {
123
125
  minYear = selectedYear;
@@ -137,99 +139,109 @@ export class PdmCalendarComponent {
137
139
  }
138
140
  get rootClasses() {
139
141
  return [
140
- 'border-border bg-background relative rounded-[10px] border p-3 shadow-sm',
141
- this.resolvedVariant === 'range'
142
- ? 'inline-flex items-start justify-center gap-4 shrink-0 grow-0 basis-auto'
143
- : 'inline-flex flex-col gap-4 shrink-0 grow-0 basis-auto',
144
- this.className
142
+ "border-border bg-background relative rounded-[10px] border border-solid p-3 shadow-sm",
143
+ this.resolvedVariant === "range"
144
+ ? "inline-flex items-start justify-center gap-4 shrink-0 grow-0 basis-auto"
145
+ : "inline-flex flex-col gap-4 shrink-0 grow-0 basis-auto",
146
+ this.className,
145
147
  ];
146
148
  }
147
149
  get rootStyle() {
148
- const width = this.resolvedVariant === 'range' ? '488px' : '250px';
150
+ const width = this.resolvedVariant === "range" ? "488px" : "250px";
149
151
  return {
150
152
  width,
151
153
  minWidth: width,
152
154
  maxWidth: width,
153
- minHeight: '293px',
154
- flex: '0 0 auto',
155
- alignSelf: 'flex-start'
155
+ minHeight: "293px",
156
+ flex: "0 0 auto",
157
+ alignSelf: "flex-start",
156
158
  };
157
159
  }
158
160
  monthPanelClasses(_index) {
159
- return ['flex flex-col items-start', this.resolvedVariant === 'range' ? 'w-[224px] gap-4' : 'w-full gap-0'];
161
+ return [
162
+ "flex flex-col items-start",
163
+ this.resolvedVariant === "range" ? "w-[224px] gap-4" : "w-full gap-0",
164
+ ];
160
165
  }
161
166
  headerClasses(month) {
162
- return ['flex w-full items-center justify-between', month.titleStyle === 'dropdowns' ? '' : 'mb-4'];
167
+ return [
168
+ "flex w-full items-center justify-between",
169
+ month.titleStyle === "dropdowns" ? "" : "mb-4",
170
+ ];
163
171
  }
164
172
  navButtonClasses() {
165
173
  return [
166
- 'flex h-8 w-8 appearance-none box-border items-center justify-center rounded-md border-0 bg-transparent p-0 text-foreground',
167
- 'disabled:pointer-events-none disabled:opacity-40'
174
+ "flex h-8 w-8 appearance-none box-border items-center justify-center rounded-md border-0 bg-transparent p-0 text-foreground",
175
+ "disabled:pointer-events-none disabled:opacity-40",
168
176
  ];
169
177
  }
170
178
  navPlaceholderClasses() {
171
- return ['h-7 w-7 shrink-0'];
179
+ return ["h-7 w-7 shrink-0"];
172
180
  }
173
181
  dropdownWrapClasses() {
174
- return ['flex w-40 items-center justify-center gap-2'];
182
+ return ["flex w-40 items-center justify-center gap-2"];
175
183
  }
176
184
  dropdownClasses(widthClass) {
177
- return ['flex h-8 items-center justify-center gap-1 px-1', widthClass];
185
+ return ["flex h-8 items-center justify-center gap-1 px-1", widthClass];
178
186
  }
179
187
  dropdownSelectClasses() {
180
188
  return [
181
- 'text-foreground h-full bg-transparent text-sm font-medium leading-5',
182
- 'appearance-none box-border border-0 outline-none ring-0 focus:outline-none focus:ring-0 text-center cursor-pointer'
189
+ "text-foreground h-full bg-transparent text-sm font-medium leading-5",
190
+ "appearance-none box-border border-0 outline-none ring-0 focus:outline-none focus:ring-0 text-center cursor-pointer",
183
191
  ];
184
192
  }
185
193
  get dropdownSelectStyle() {
186
194
  return {
187
- appearance: 'none',
188
- WebkitAppearance: 'none',
189
- MozAppearance: 'none',
190
- background: 'transparent',
191
- border: '0',
192
- boxShadow: 'none',
193
- outline: '0',
194
- padding: '0',
195
- margin: '0'
195
+ appearance: "none",
196
+ WebkitAppearance: "none",
197
+ MozAppearance: "none",
198
+ background: "transparent",
199
+ border: "0",
200
+ boxShadow: "none",
201
+ outline: "0",
202
+ padding: "0",
203
+ margin: "0",
196
204
  };
197
205
  }
198
206
  calendarGridWrapClasses() {
199
- return ['flex w-full flex-col items-start'];
207
+ return ["flex w-full flex-col items-start"];
200
208
  }
201
209
  weekdayRowClasses() {
202
- return ['flex w-full items-center'];
210
+ return ["flex w-full items-center"];
203
211
  }
204
212
  weekdayCellClasses() {
205
- return ['text-muted-foreground flex h-[21px] w-8 items-center justify-center rounded-md text-xs leading-4'];
213
+ return [
214
+ "text-muted-foreground flex h-[21px] w-8 items-center justify-center rounded-md text-xs leading-4",
215
+ ];
206
216
  }
207
217
  weekRowClasses() {
208
- return ['flex w-full items-start pt-2'];
218
+ return ["flex w-full items-start pt-2"];
209
219
  }
210
220
  dayCellClasses(cell) {
211
221
  return [
212
- 'relative flex h-8 w-8 shrink-0 items-center justify-center',
213
- cell.rangeFill ? 'bg-accent' : '',
214
- cell.rangeLeftCap ? 'rounded-l-md' : '',
215
- cell.rangeRightCap ? 'rounded-r-md' : ''
222
+ "relative flex h-8 w-8 shrink-0 items-center justify-center",
223
+ cell.rangeFill ? "bg-accent" : "",
224
+ cell.rangeLeftCap ? "rounded-l-md" : "",
225
+ cell.rangeRightCap ? "rounded-r-md" : "",
216
226
  ];
217
227
  }
218
228
  dayButtonClasses(cell) {
219
229
  return [
220
- 'relative z-10 flex h-8 w-8 appearance-none box-border items-center justify-center rounded-md border-0 p-0 text-sm leading-5',
230
+ "relative z-10 flex h-8 w-8 appearance-none box-border items-center justify-center rounded-md border-0 p-0 text-sm leading-5",
221
231
  cell.selected
222
- ? 'bg-primary text-primary-foreground'
232
+ ? "bg-primary text-primary-foreground"
223
233
  : cell.rangeFill
224
- ? 'bg-transparent text-accent-foreground'
225
- : 'bg-transparent text-foreground',
226
- cell.muted && !cell.rangeFill ? 'opacity-50' : '',
227
- cell.disabled ? 'cursor-not-allowed opacity-40' : '',
228
- !cell.disabled && !this.readonly && !cell.selected ? 'hover:bg-accent/70' : ''
234
+ ? "bg-transparent text-accent-foreground"
235
+ : "bg-transparent text-foreground",
236
+ cell.muted && !cell.rangeFill ? "opacity-50" : "",
237
+ cell.disabled ? "cursor-not-allowed opacity-40" : "",
238
+ !cell.disabled && !this.readonly && !cell.selected
239
+ ? "hover:bg-accent/70"
240
+ : "",
229
241
  ];
230
242
  }
231
243
  dayLabelClasses(_cell) {
232
- return ['font-normal'];
244
+ return ["font-normal"];
233
245
  }
234
246
  goToPreviousMonth() {
235
247
  this.setAnchorMonth(this.addMonths(this.getAnchorMonth(), -1));
@@ -263,7 +275,7 @@ export class PdmCalendarComponent {
263
275
  return;
264
276
  }
265
277
  this.dateClick.emit(date);
266
- if (this.resolvedVariant === 'single') {
278
+ if (this.resolvedVariant === "single") {
267
279
  this._value = date;
268
280
  this.valueChange.emit(this.cloneDate(date));
269
281
  this.syncVisibleMonthToDate(date);
@@ -295,7 +307,10 @@ export class PdmCalendarComponent {
295
307
  return;
296
308
  }
297
309
  this._rangeValue = { start, end };
298
- this.rangeValueChange.emit({ start: this.cloneDate(start), end: this.cloneDate(end) });
310
+ this.rangeValueChange.emit({
311
+ start: this.cloneDate(start),
312
+ end: this.cloneDate(end),
313
+ });
299
314
  this.syncVisibleMonthToDate(start);
300
315
  }
301
316
  buildMonthWeeks(month, includeRange) {
@@ -328,11 +343,18 @@ export class PdmCalendarComponent {
328
343
  }
329
344
  buildCell(date, visibleMonth, includeRange) {
330
345
  const normalized = this.cloneDate(date);
331
- const inCurrentMonth = normalized.getMonth() === visibleMonth.getMonth() && normalized.getFullYear() === visibleMonth.getFullYear();
346
+ const inCurrentMonth = normalized.getMonth() === visibleMonth.getMonth() &&
347
+ normalized.getFullYear() === visibleMonth.getFullYear();
332
348
  const disabled = this.isBlocked(normalized);
333
- const selectedSingle = this.resolvedVariant === 'single' && !!this._value && this.isSameDay(normalized, this._value);
334
- const rangeStart = includeRange && !!this._rangeValue?.start && this.isSameDay(normalized, this._rangeValue.start);
335
- const rangeEnd = includeRange && !!this._rangeValue?.end && this.isSameDay(normalized, this._rangeValue.end);
349
+ const selectedSingle = this.resolvedVariant === "single" &&
350
+ !!this._value &&
351
+ this.isSameDay(normalized, this._value);
352
+ const rangeStart = includeRange &&
353
+ !!this._rangeValue?.start &&
354
+ this.isSameDay(normalized, this._rangeValue.start);
355
+ const rangeEnd = includeRange &&
356
+ !!this._rangeValue?.end &&
357
+ this.isSameDay(normalized, this._rangeValue.end);
336
358
  const inRange = includeRange &&
337
359
  !!this._rangeValue?.start &&
338
360
  !!this._rangeValue?.end &&
@@ -347,7 +369,7 @@ export class PdmCalendarComponent {
347
369
  inRange,
348
370
  rangeFill: inRange,
349
371
  rangeLeftCap: false,
350
- rangeRightCap: false
372
+ rangeRightCap: false,
351
373
  };
352
374
  }
353
375
  getAnchorMonth() {
@@ -355,10 +377,10 @@ export class PdmCalendarComponent {
355
377
  if (this._month) {
356
378
  candidate = this.cloneDate(this._month);
357
379
  }
358
- else if (this.resolvedVariant === 'single' && this._value) {
380
+ else if (this.resolvedVariant === "single" && this._value) {
359
381
  candidate = this.startOfMonth(this._value);
360
382
  }
361
- else if (this.resolvedVariant === 'range' && this._rangeValue?.start) {
383
+ else if (this.resolvedVariant === "range" && this._rangeValue?.start) {
362
384
  candidate = this.startOfMonth(this._rangeValue.start);
363
385
  }
364
386
  else {
@@ -441,7 +463,7 @@ export class PdmCalendarComponent {
441
463
  return this.dateValue(a) - this.dateValue(b);
442
464
  }
443
465
  dateValue(date) {
444
- return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) / DAY_MS;
466
+ return (Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()) / DAY_MS);
445
467
  }
446
468
  isSameDay(a, b) {
447
469
  return this.compareDate(a, b) === 0;
@@ -451,23 +473,23 @@ export class PdmCalendarComponent {
451
473
  }
452
474
  dateKey(date) {
453
475
  const y = date.getFullYear();
454
- const m = String(date.getMonth() + 1).padStart(2, '0');
455
- const d = String(date.getDate()).padStart(2, '0');
476
+ const m = String(date.getMonth() + 1).padStart(2, "0");
477
+ const d = String(date.getDate()).padStart(2, "0");
456
478
  return `${y}-${m}-${d}`;
457
479
  }
458
480
  formatMonthShort(date) {
459
- return date.toLocaleString('en-US', { month: 'short' });
481
+ return date.toLocaleString("en-US", { month: "short" });
460
482
  }
461
483
  formatMonthYear(date) {
462
- return date.toLocaleString('en-US', { month: 'long', year: 'numeric' });
484
+ return date.toLocaleString("en-US", { month: "long", year: "numeric" });
463
485
  }
464
486
  }
465
- PdmCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCalendarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
487
+ PdmCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
466
488
  PdmCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmCalendarComponent, selector: "pdm-calendar", inputs: { variant: "variant", className: "className", disabledDates: "disabledDates", minDate: "minDate", maxDate: "maxDate", minYear: "minYear", maxYear: "maxYear", isDateDisabled: "isDateDisabled", allowSameDayRange: "allowSameDayRange", readonly: "readonly", value: "value", rangeValue: "rangeValue", month: "month" }, outputs: { valueChange: "valueChange", rangeValueChange: "rangeValueChange", monthChange: "monthChange", dateClick: "dateClick", disabledDateClick: "disabledDateClick" }, ngImport: i0, template: "<div [ngClass]=\"rootClasses\" [ngStyle]=\"rootStyle\">\n <div *ngFor=\"let month of visibleMonths; let monthIndex = index; trackBy: trackByIndex\" [ngClass]=\"monthPanelClasses(monthIndex)\">\n <div [ngClass]=\"headerClasses(month)\">\n <button\n *ngIf=\"month.showPrevButton; else prevPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Previous month\"\n (click)=\"goToPreviousMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m15 18-6-6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #prevPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n\n <ng-container *ngIf=\"month.titleStyle === 'dropdowns'; else plainTitle\">\n <div [ngClass]=\"dropdownWrapClasses()\">\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[72px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderMonth\"\n aria-label=\"Month\"\n (change)=\"onSingleMonthChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let monthOption of monthOptions\"\n [value]=\"monthOption.value\"\n [selected]=\"monthOption.value === singleHeaderMonth\"\n >\n {{ monthOption.label }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[82px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderYear\"\n aria-label=\"Year\"\n (change)=\"onSingleYearChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let year of yearOptions\"\n [value]=\"year\"\n [selected]=\"year === singleHeaderYear\"\n >\n {{ year }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-template #plainTitle>\n <div class=\"flex min-w-0 flex-1 items-center justify-center\">\n <p class=\"m-0 text-foreground text-center text-sm font-medium leading-5\">\n {{ month.title }}\n </p>\n </div>\n </ng-template>\n\n <button\n *ngIf=\"month.showNextButton; else nextPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Next month\"\n (click)=\"goToNextMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #nextPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n </div>\n\n <div [ngClass]=\"calendarGridWrapClasses()\">\n <div [ngClass]=\"weekdayRowClasses()\">\n <div *ngFor=\"let day of weekdays; trackBy: trackByIndex\" [ngClass]=\"weekdayCellClasses()\">\n <span>{{ day }}</span>\n </div>\n </div>\n\n <div *ngFor=\"let week of month.weeks; trackBy: trackByIndex\" [ngClass]=\"weekRowClasses()\">\n <div *ngFor=\"let cell of week; trackBy: trackByDate\" [ngClass]=\"dayCellClasses(cell)\">\n <button\n type=\"button\"\n [ngClass]=\"dayButtonClasses(cell)\"\n [disabled]=\"readonly\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled || readonly\"\n [attr.title]=\"cell.date | date : 'yyyy-MM-dd'\"\n (click)=\"onDatePressed(cell)\"\n >\n <span [ngClass]=\"dayLabelClasses(cell)\">{{ cell.label }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
467
489
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmCalendarComponent, decorators: [{
468
490
  type: Component,
469
- args: [{ selector: 'pdm-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\" [ngStyle]=\"rootStyle\">\n <div *ngFor=\"let month of visibleMonths; let monthIndex = index; trackBy: trackByIndex\" [ngClass]=\"monthPanelClasses(monthIndex)\">\n <div [ngClass]=\"headerClasses(month)\">\n <button\n *ngIf=\"month.showPrevButton; else prevPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Previous month\"\n (click)=\"goToPreviousMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m15 18-6-6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #prevPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n\n <ng-container *ngIf=\"month.titleStyle === 'dropdowns'; else plainTitle\">\n <div [ngClass]=\"dropdownWrapClasses()\">\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[72px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderMonth\"\n aria-label=\"Month\"\n (change)=\"onSingleMonthChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let monthOption of monthOptions\"\n [value]=\"monthOption.value\"\n [selected]=\"monthOption.value === singleHeaderMonth\"\n >\n {{ monthOption.label }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[82px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderYear\"\n aria-label=\"Year\"\n (change)=\"onSingleYearChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let year of yearOptions\"\n [value]=\"year\"\n [selected]=\"year === singleHeaderYear\"\n >\n {{ year }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-template #plainTitle>\n <div class=\"flex min-w-0 flex-1 items-center justify-center\">\n <p class=\"m-0 text-foreground text-center text-sm font-medium leading-5\">\n {{ month.title }}\n </p>\n </div>\n </ng-template>\n\n <button\n *ngIf=\"month.showNextButton; else nextPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Next month\"\n (click)=\"goToNextMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #nextPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n </div>\n\n <div [ngClass]=\"calendarGridWrapClasses()\">\n <div [ngClass]=\"weekdayRowClasses()\">\n <div *ngFor=\"let day of weekdays; trackBy: trackByIndex\" [ngClass]=\"weekdayCellClasses()\">\n <span>{{ day }}</span>\n </div>\n </div>\n\n <div *ngFor=\"let week of month.weeks; trackBy: trackByIndex\" [ngClass]=\"weekRowClasses()\">\n <div *ngFor=\"let cell of week; trackBy: trackByDate\" [ngClass]=\"dayCellClasses(cell)\">\n <button\n type=\"button\"\n [ngClass]=\"dayButtonClasses(cell)\"\n [disabled]=\"readonly\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled || readonly\"\n [attr.title]=\"cell.date | date : 'yyyy-MM-dd'\"\n (click)=\"onDatePressed(cell)\"\n >\n <span [ngClass]=\"dayLabelClasses(cell)\">{{ cell.label }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
470
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { variant: [{
491
+ args: [{ selector: "pdm-calendar", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\" [ngStyle]=\"rootStyle\">\n <div *ngFor=\"let month of visibleMonths; let monthIndex = index; trackBy: trackByIndex\" [ngClass]=\"monthPanelClasses(monthIndex)\">\n <div [ngClass]=\"headerClasses(month)\">\n <button\n *ngIf=\"month.showPrevButton; else prevPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Previous month\"\n (click)=\"goToPreviousMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m15 18-6-6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #prevPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n\n <ng-container *ngIf=\"month.titleStyle === 'dropdowns'; else plainTitle\">\n <div [ngClass]=\"dropdownWrapClasses()\">\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[72px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderMonth\"\n aria-label=\"Month\"\n (change)=\"onSingleMonthChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let monthOption of monthOptions\"\n [value]=\"monthOption.value\"\n [selected]=\"monthOption.value === singleHeaderMonth\"\n >\n {{ monthOption.label }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n <div [ngClass]=\"dropdownClasses('w-16 sm:w-[82px]')\">\n <select\n [ngClass]=\"dropdownSelectClasses()\"\n [ngStyle]=\"dropdownSelectStyle\"\n [value]=\"singleHeaderYear\"\n aria-label=\"Year\"\n (change)=\"onSingleYearChange($any($event.target).value)\"\n >\n <option\n *ngFor=\"let year of yearOptions\"\n [value]=\"year\"\n [selected]=\"year === singleHeaderYear\"\n >\n {{ year }}\n </option>\n </select>\n <svg viewBox=\"0 0 24 24\" class=\"h-3 w-3 text-foreground\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m6 9 6 6 6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </div>\n </div>\n </ng-container>\n\n <ng-template #plainTitle>\n <div class=\"flex min-w-0 flex-1 items-center justify-center\">\n <p class=\"m-0 text-foreground text-center text-sm font-medium leading-5\">\n {{ month.title }}\n </p>\n </div>\n </ng-template>\n\n <button\n *ngIf=\"month.showNextButton; else nextPlaceholder\"\n type=\"button\"\n [ngClass]=\"navButtonClasses()\"\n aria-label=\"Next month\"\n (click)=\"goToNextMonth()\"\n [disabled]=\"readonly\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </button>\n <ng-template #nextPlaceholder>\n <div [ngClass]=\"navPlaceholderClasses()\" aria-hidden=\"true\"></div>\n </ng-template>\n </div>\n\n <div [ngClass]=\"calendarGridWrapClasses()\">\n <div [ngClass]=\"weekdayRowClasses()\">\n <div *ngFor=\"let day of weekdays; trackBy: trackByIndex\" [ngClass]=\"weekdayCellClasses()\">\n <span>{{ day }}</span>\n </div>\n </div>\n\n <div *ngFor=\"let week of month.weeks; trackBy: trackByIndex\" [ngClass]=\"weekRowClasses()\">\n <div *ngFor=\"let cell of week; trackBy: trackByDate\" [ngClass]=\"dayCellClasses(cell)\">\n <button\n type=\"button\"\n [ngClass]=\"dayButtonClasses(cell)\"\n [disabled]=\"readonly\"\n [attr.aria-selected]=\"cell.selected\"\n [attr.aria-disabled]=\"cell.disabled || readonly\"\n [attr.title]=\"cell.date | date : 'yyyy-MM-dd'\"\n (click)=\"onDatePressed(cell)\"\n >\n <span [ngClass]=\"dayLabelClasses(cell)\">{{ cell.label }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
492
+ }], propDecorators: { variant: [{
471
493
  type: Input
472
494
  }], className: [{
473
495
  type: Input
@@ -504,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
504
526
  }], month: [{
505
527
  type: Input
506
528
  }] } });
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBZ0NuSCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFPbkMsTUFBTSxPQUFPLG9CQUFvQjtJQUsvQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUpsQyxXQUFNLEdBQWdCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDNUMsV0FBTSxHQUFnQixJQUFJLENBQUM7UUFJMUIsWUFBTyxHQUFnQyxRQUFRLENBQUM7UUFDaEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBZ0IsSUFBSSxDQUFDO1FBQzVCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQXFDLElBQUksQ0FBQztRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDL0QsZ0JBQVcsR0FBRyxJQUFJ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QUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFVLEVBQUUsTUFBYztRQUMxQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDaEYsQ0FBQztJQUVPLFNBQVMsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNoQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBVTtRQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQVU7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7aUhBM2lCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixpaUJDdkNqQyw4eUpBa0hBOzJGRDNFYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNO3dHQVN0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0gsS0FBSztzQkFEUixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFBkbUNhbGVuZGFyVmFyaWFudCA9ICdzaW5nbGUnIHwgJ3JhbmdlJztcblxuZXhwb3J0IGludGVyZmFjZSBQZG1DYWxlbmRhclJhbmdlIHtcbiAgc3RhcnQ6IERhdGUgfCBudWxsO1xuICBlbmQ6IERhdGUgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUGRtQ2FsZW5kYXJDZWxsIHtcbiAgZGF0ZTogRGF0ZTtcbiAgbGFiZWw6IG51bWJlcjtcbiAgbXV0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgaW5SYW5nZTogYm9vbGVhbjtcbiAgcmFuZ2VGaWxsOiBib29sZWFuO1xuICByYW5nZUxlZnRDYXA6IGJvb2xlYW47XG4gIHJhbmdlUmlnaHRDYXA6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQZG1DYWxlbmRhck1vbnRoVmlldyB7XG4gIGRhdGU6IERhdGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlU3R5bGU6ICdkcm9wZG93bnMnIHwgJ3BsYWluJztcbiAgZHJvcGRvd25Nb250aD86IHN0cmluZztcbiAgZHJvcGRvd25ZZWFyPzogc3RyaW5nO1xuICBzaG93UHJldkJ1dHRvbjogYm9vbGVhbjtcbiAgc2hvd05leHRCdXR0b246IGJvb2xlYW47XG4gIHdlZWtzOiByZWFkb25seSAocmVhZG9ubHkgUGRtQ2FsZW5kYXJDZWxsW10pW107XG59XG5cbmNvbnN0IERBWV9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbUNhbGVuZGFyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmFuZ2VWYWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tb250aDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASW5wdXQoKSB2YXJpYW50OiBQZG1DYWxlbmRhclZhcmlhbnQgfCBzdHJpbmcgPSAnc2luZ2xlJztcbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWluWWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIG1heFllYXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBhbGxvd1NhbWVEYXlSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHJhbmdlVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkYXRlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBPdXRwdXQoKSBkaXNhYmxlZERhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJhbmdlVmFsdWUodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKSB7XG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBnZXQgcmFuZ2VWYWx1ZSgpOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlVmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbW9udGgodmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbW9udGggPSB2YWx1ZSA/IHRoaXMuc3RhcnRPZk1vbnRoKHZhbHVlKSA6IG51bGw7XG4gIH1cbiAgZ2V0IG1vbnRoKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbW9udGg7XG4gIH1cblxuICByZWFkb25seSB3ZWVrZGF5cyA9IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbW9udGhPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6IDAsIGxhYmVsOiAnSmFuJyB9LFxuICAgIHsgdmFsdWU6IDEsIGxhYmVsOiAnRmViJyB9LFxuICAgIHsgdmFsdWU6IDIsIGxhYmVsOiAnTWFyJyB9LFxuICAgIHsgdmFsdWU6IDMsIGxhYmVsOiAnQXByJyB9LFxuICAgIHsgdmFsdWU6IDQsIGxhYmVsOiAnTWF5JyB9LFxuICAgIHsgdmFsdWU6IDUsIGxhYmVsOiAnSnVuJyB9LFxuICAgIHsgdmFsdWU6IDYsIGxhYmVsOiAnSnVsJyB9LFxuICAgIHsgdmFsdWU6IDcsIGxhYmVsOiAnQXVnJyB9LFxuICAgIHsgdmFsdWU6IDgsIGxhYmVsOiAnU2VwJyB9LFxuICAgIHsgdmFsdWU6IDksIGxhYmVsOiAnT2N0JyB9LFxuICAgIHsgdmFsdWU6IDEwLCBsYWJlbDogJ05vdicgfSxcbiAgICB7IHZhbHVlOiAxMSwgbGFiZWw6ICdEZWMnIH1cbiAgXSBhcyBjb25zdDtcblxuICBnZXQgcmVzb2x2ZWRWYXJpYW50KCk6IFBkbUNhbGVuZGFyVmFyaWFudCB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFudCA9PT0gJ3JhbmdlJyA/ICdyYW5nZScgOiAnc2luZ2xlJztcbiAgfVxuXG4gIGdldCB2aXNpYmxlTW9udGhzKCk6IHJlYWRvbmx5IFBkbUNhbGVuZGFyTW9udGhWaWV3W10ge1xuICAgIGNvbnN0IGJhc2VNb250aCA9IHRoaXMuZ2V0QW5jaG9yTW9udGgoKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiBiYXNlTW9udGgsXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKGJhc2VNb250aCksXG4gICAgICAgICAgdGl0bGVTdHlsZTogJ2Ryb3Bkb3ducycsXG4gICAgICAgICAgZHJvcGRvd25Nb250aDogdGhpcy5mb3JtYXRNb250aFNob3J0KGJhc2VNb250aCksXG4gICAgICAgICAgZHJvcGRvd25ZZWFyOiBTdHJpbmcoYmFzZU1vbnRoLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgICAgIHNob3dQcmV2QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHNob3dOZXh0QnV0dG9uOiB0cnVlLFxuICAgICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhiYXNlTW9udGgsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuYWRkTW9udGhzKGJhc2VNb250aCwgMSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZGF0ZTogYmFzZU1vbnRoLFxuICAgICAgICB0aXRsZTogdGhpcy5mb3JtYXRNb250aFllYXIoYmFzZU1vbnRoKSxcbiAgICAgICAgdGl0bGVTdHlsZTogJ3BsYWluJyxcbiAgICAgICAgc2hvd1ByZXZCdXR0b246IHRydWUsXG4gICAgICAgIHNob3dOZXh0QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgd2Vla3M6IHRoaXMuYnVpbGRNb250aFdlZWtzKGJhc2VNb250aCwgdHJ1ZSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRhdGU6IG5leHRNb250aCxcbiAgICAgICAgdGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKG5leHRNb250aCksXG4gICAgICAgIHRpdGxlU3R5bGU6ICdwbGFpbicsXG4gICAgICAgIHNob3dQcmV2QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc2hvd05leHRCdXR0b246IHRydWUsXG4gICAgICAgIHdlZWtzOiB0aGlzLmJ1aWxkTW9udGhXZWVrcyhuZXh0TW9udGgsIHRydWUpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEFuY2hvck1vbnRoKCkuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldCBzaW5nbGVIZWFkZXJZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QW5jaG9yTW9udGgoKS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0IHllYXJPcHRpb25zKCk6IHJlYWRvbmx5IG51bWJlcltdIHtcbiAgICBjb25zdCBiYXNlWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBzZWxlY3RlZFllYXIgPSB0aGlzLnNpbmdsZUhlYWRlclllYXI7XG4gICAgbGV0IG1pblllYXIgPSB0aGlzLm1pblllYXIgPz8gKHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpIDogYmFzZVllYXIgLSAxMDApO1xuICAgIGxldCBtYXhZZWFyID0gdGhpcy5tYXhZZWFyID8/ICh0aGlzLm1heERhdGUgPyB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKSA6IGJhc2VZZWFyICsgMTApO1xuICAgIGNvbnN0IHllYXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA8IG1pblllYXIpIHtcbiAgICAgIG1pblllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkWWVhciA+IG1heFllYXIpIHtcbiAgICAgIG1heFllYXIgPSBzZWxlY3RlZFllYXI7XG4gICAgfVxuXG4gICAgaWYgKG1pblllYXIgPiBtYXhZZWFyKSB7XG4gICAgICBjb25zdCBuZXh0TWluID0gbWF4WWVhcjtcbiAgICAgIG1heFllYXIgPSBtaW5ZZWFyO1xuICAgICAgbWluWWVhciA9IG5leHRNaW47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgeWVhciA9IG1pblllYXI7IHllYXIgPD0gbWF4WWVhcjsgeWVhciArPSAxKSB7XG4gICAgICB5ZWFycy5wdXNoKHllYXIpO1xuICAgIH1cblxuICAgIHJldHVybiB5ZWFycztcbiAgfVxuXG4gIGdldCByb290Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUgcm91bmRlZC1bMTBweF0gYm9yZGVyIHAtMyBzaGFkb3ctc20nLFxuICAgICAgdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdyYW5nZSdcbiAgICAgICAgPyAnaW5saW5lLWZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1jZW50ZXIgZ2FwLTQgc2hyaW5rLTAgZ3Jvdy0wIGJhc2lzLWF1dG8nXG4gICAgICAgIDogJ2lubGluZS1mbGV4IGZsZXgtY29sIGdhcC00IHNocmluay0wIGdyb3ctMCBiYXNpcy1hdXRvJyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIGdldCByb290U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICc0ODhweCcgOiAnMjUwcHgnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoLFxuICAgICAgbWluV2lkdGg6IHdpZHRoLFxuICAgICAgbWF4V2lkdGg6IHdpZHRoLFxuICAgICAgbWluSGVpZ2h0OiAnMjkzcHgnLFxuICAgICAgZmxleDogJzAgMCBhdXRvJyxcbiAgICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnXG4gICAgfTtcbiAgfVxuXG4gIG1vbnRoUGFuZWxDbGFzc2VzKF9pbmRleDogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQnLCB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyA/ICd3LVsyMjRweF0gZ2FwLTQnIDogJ3ctZnVsbCBnYXAtMCddO1xuICB9XG5cbiAgaGVhZGVyQ2xhc3Nlcyhtb250aDogUGRtQ2FsZW5kYXJNb250aFZpZXcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbicsIG1vbnRoLnRpdGxlU3R5bGUgPT09ICdkcm9wZG93bnMnID8gJycgOiAnbWItNCddO1xuICB9XG5cbiAgbmF2QnV0dG9uQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdmbGV4IGgtOCB3LTggYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtZm9yZWdyb3VuZCcsXG4gICAgICAnZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTQwJ1xuICAgIF07XG4gIH1cblxuICBuYXZQbGFjZWhvbGRlckNsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2gtNyB3LTcgc2hyaW5rLTAnXTtcbiAgfVxuXG4gIGRyb3Bkb3duV3JhcENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy00MCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTInXTtcbiAgfVxuXG4gIGRyb3Bkb3duQ2xhc3Nlcyh3aWR0aENsYXNzOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZmxleCBoLTggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTEnLCB3aWR0aENsYXNzXTtcbiAgfVxuXG4gIGRyb3Bkb3duU2VsZWN0Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICd0ZXh0LWZvcmVncm91bmQgaC1mdWxsIGJnLXRyYW5zcGFyZW50IHRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy01JyxcbiAgICAgICdhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBib3JkZXItMCBvdXRsaW5lLW5vbmUgcmluZy0wIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgdGV4dC1jZW50ZXIgY3Vyc29yLXBvaW50ZXInXG4gICAgXTtcbiAgfVxuXG4gIGdldCBkcm9wZG93blNlbGVjdFN0eWxlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgYm9yZGVyOiAnMCcsXG4gICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgIG91dGxpbmU6ICcwJyxcbiAgICAgIHBhZGRpbmc6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfTtcbiAgfVxuXG4gIGNhbGVuZGFyR3JpZFdyYXBDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydmbGV4IHctZnVsbCBmbGV4LWNvbCBpdGVtcy1zdGFydCddO1xuICB9XG5cbiAgd2Vla2RheVJvd0NsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2ZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciddO1xuICB9XG5cbiAgd2Vla2RheUNlbGxDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWyd0ZXh0LW11dGVkLWZvcmVncm91bmQgZmxleCBoLVsyMXB4XSB3LTggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgdGV4dC14cyBsZWFkaW5nLTQnXTtcbiAgfVxuXG4gIHdlZWtSb3dDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydmbGV4IHctZnVsbCBpdGVtcy1zdGFydCBwdC0yJ107XG4gIH1cblxuICBkYXlDZWxsQ2xhc3NlcyhjZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdyZWxhdGl2ZSBmbGV4IGgtOCB3LTggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJyxcbiAgICAgIGNlbGwucmFuZ2VGaWxsID8gJ2JnLWFjY2VudCcgOiAnJyxcbiAgICAgIGNlbGwucmFuZ2VMZWZ0Q2FwID8gJ3JvdW5kZWQtbC1tZCcgOiAnJyxcbiAgICAgIGNlbGwucmFuZ2VSaWdodENhcCA/ICdyb3VuZGVkLXItbWQnIDogJydcbiAgICBdO1xuICB9XG5cbiAgZGF5QnV0dG9uQ2xhc3NlcyhjZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdyZWxhdGl2ZSB6LTEwIGZsZXggaC04IHctOCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItMCBwLTAgdGV4dC1zbSBsZWFkaW5nLTUnLFxuICAgICAgY2VsbC5zZWxlY3RlZFxuICAgICAgICA/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuICAgICAgICA6IGNlbGwucmFuZ2VGaWxsXG4gICAgICAgICAgPyAnYmctdHJhbnNwYXJlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcbiAgICAgICAgICA6ICdiZy10cmFuc3BhcmVudCB0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgY2VsbC5tdXRlZCAmJiAhY2VsbC5yYW5nZUZpbGwgPyAnb3BhY2l0eS01MCcgOiAnJyxcbiAgICAgIGNlbGwuZGlzYWJsZWQgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNDAnIDogJycsXG4gICAgICAhY2VsbC5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAhY2VsbC5zZWxlY3RlZCA/ICdob3ZlcjpiZy1hY2NlbnQvNzAnIDogJydcbiAgICBdO1xuICB9XG5cbiAgZGF5TGFiZWxDbGFzc2VzKF9jZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnZm9udC1ub3JtYWwnXTtcbiAgfVxuXG4gIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RGF0ZSA9IChfaW5kZXg6IG51bWJlciwgY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRlS2V5KGNlbGwuZGF0ZSk7XG4gIH1cblxuICBnb1RvUHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFuY2hvck1vbnRoKHRoaXMuYWRkTW9udGhzKHRoaXMuZ2V0QW5jaG9yTW9udGgoKSwgLTEpKTtcbiAgfVxuXG4gIGdvVG9OZXh0TW9udGgoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aCh0aGlzLmFkZE1vbnRocyh0aGlzLmdldEFuY2hvck1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlTW9udGhDaGFuZ2UobW9udGhWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIobW9udGhWYWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihtb250aCkgfHwgbW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldEFuY2hvck1vbnRoKCk7XG4gICAgdGhpcy5zZXRBbmNob3JNb250aChuZXcgRGF0ZShhbmNob3IuZ2V0RnVsbFllYXIoKSwgbW9udGgsIDEpKTtcbiAgfVxuXG4gIG9uU2luZ2xlWWVhckNoYW5nZSh5ZWFyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoeWVhclZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHllYXIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5nZXRBbmNob3JNb250aCgpO1xuICAgIHRoaXMuc2V0QW5jaG9yTW9udGgobmV3IERhdGUoeWVhciwgYW5jaG9yLmdldE1vbnRoKCksIDEpKTtcbiAgfVxuXG4gIG9uRGF0ZVByZXNzZWQoY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMuY2xvbmVEYXRlKGNlbGwuZGF0ZSk7XG5cbiAgICBpZiAoY2VsbC5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVDbGljay5lbWl0KGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlQ2xpY2suZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZGF0ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICB0aGlzLnN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVJhbmdlU2VsZWN0aW9uKGRhdGUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSYW5nZVNlbGVjdGlvbihkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3JhbmdlVmFsdWU7XG4gICAgY29uc3QgY3VycmVudFN0YXJ0ID0gY3VycmVudD8uc3RhcnQgPyB0aGlzLmNsb25lRGF0ZShjdXJyZW50LnN0YXJ0KSA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudEVuZCA9IGN1cnJlbnQ/LmVuZCA/IHRoaXMuY2xvbmVEYXRlKGN1cnJlbnQuZW5kKSA6IG51bGw7XG5cbiAgICBpZiAoIWN1cnJlbnRTdGFydCB8fCAoY3VycmVudFN0YXJ0ICYmIGN1cnJlbnRFbmQpKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgdGhpcy5zeW5jVmlzaWJsZU1vbnRoVG9EYXRlKGRhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FtZURheShjdXJyZW50U3RhcnQsIGRhdGUpICYmICF0aGlzLmFsbG93U2FtZURheVJhbmdlKSB7XG4gICAgICB0aGlzLl9yYW5nZVZhbHVlID0geyBzdGFydDogZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICB0aGlzLnJhbmdlVmFsdWVDaGFuZ2UuZW1pdCh7IHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShkYXRlKSwgZW5kOiBudWxsIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGRhdGUgOiBjdXJyZW50U3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGN1cnJlbnRTdGFydCA6IGRhdGU7XG5cbiAgICBpZiAodGhpcy5yYW5nZUNvbnRhaW5zQmxvY2tlZERhdGUoc3RhcnQsIGVuZCkpIHtcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlQ2xpY2suZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHsgc3RhcnQsIGVuZCB9O1xuICAgIHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKHN0YXJ0KSwgZW5kOiB0aGlzLmNsb25lRGF0ZShlbmQpIH0pO1xuICAgIHRoaXMuc3luY1Zpc2libGVNb250aFRvRGF0ZShzdGFydCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTW9udGhXZWVrcyhtb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogcmVhZG9ubHkgKHJlYWRvbmx5IFBkbUNhbGVuZGFyQ2VsbFtdKVtdIHtcbiAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLnN0YXJ0T2ZNb250aChtb250aCk7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0T2ZXZWVrKGZpcnN0T2ZNb250aCk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5lbmRPZldlZWsodGhpcy5lbmRPZk1vbnRoKGZpcnN0T2ZNb250aCkpO1xuICAgIGNvbnN0IHdlZWtzOiBQZG1DYWxlbmRhckNlbGxbXVtdID0gW107XG5cbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuICAgIHdoaWxlICh0aGlzLmNvbXBhcmVEYXRlKGN1cnNvciwgZW5kKSA8PSAwKSB7XG4gICAgICBjb25zdCByb3c6IFBkbUNhbGVuZGFyQ2VsbFtdID0gW107XG5cbiAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCArPSAxKSB7XG4gICAgICAgIHJvdy5wdXNoKHRoaXMuYnVpbGRDZWxsKGN1cnNvciwgbW9udGgsIGluY2x1ZGVSYW5nZSkpO1xuICAgICAgICBjdXJzb3IgPSB0aGlzLmFkZERheXMoY3Vyc29yLCAxKTtcbiAgICAgIH1cblxuICAgICAgd2Vla3MucHVzaChyb3cpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHdlZWtzKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCByb3cubGVuZ3RoOyBjb2wgKz0gMSkge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93W2NvbF07XG4gICAgICAgIGlmICghY2VsbC5pblJhbmdlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsZWZ0SW5Sb3cgPSBjb2wgPiAwID8gcm93W2NvbCAtIDFdLmluUmFuZ2UgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcmlnaHRJblJvdyA9IGNvbCA8IHJvdy5sZW5ndGggLSAxID8gcm93W2NvbCArIDFdLmluUmFuZ2UgOiBmYWxzZTtcblxuICAgICAgICBjZWxsLnJhbmdlTGVmdENhcCA9ICFsZWZ0SW5Sb3c7XG4gICAgICAgIGNlbGwucmFuZ2VSaWdodENhcCA9ICFyaWdodEluUm93O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDZWxsKGRhdGU6IERhdGUsIHZpc2libGVNb250aDogRGF0ZSwgaW5jbHVkZVJhbmdlOiBib29sZWFuKTogUGRtQ2FsZW5kYXJDZWxsIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5jbG9uZURhdGUoZGF0ZSk7XG4gICAgY29uc3QgaW5DdXJyZW50TW9udGggPSBub3JtYWxpemVkLmdldE1vbnRoKCkgPT09IHZpc2libGVNb250aC5nZXRNb250aCgpICYmIG5vcm1hbGl6ZWQuZ2V0RnVsbFllYXIoKSA9PT0gdmlzaWJsZU1vbnRoLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzQmxvY2tlZChub3JtYWxpemVkKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkU2luZ2xlID0gdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmICEhdGhpcy5fdmFsdWUgJiYgdGhpcy5pc1NhbWVEYXkobm9ybWFsaXplZCwgdGhpcy5fdmFsdWUpO1xuICAgIGNvbnN0IHJhbmdlU3RhcnQgPSBpbmNsdWRlUmFuZ2UgJiYgISF0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KTtcbiAgICBjb25zdCByYW5nZUVuZCA9IGluY2x1ZGVSYW5nZSAmJiAhIXRoaXMuX3JhbmdlVmFsdWU/LmVuZCAmJiB0aGlzLmlzU2FtZURheShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLmVuZCk7XG4gICAgY29uc3QgaW5SYW5nZSA9XG4gICAgICBpbmNsdWRlUmFuZ2UgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uc3RhcnQgJiZcbiAgICAgICEhdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kICYmXG4gICAgICB0aGlzLmNvbXBhcmVEYXRlKG5vcm1hbGl6ZWQsIHRoaXMuX3JhbmdlVmFsdWUuc3RhcnQpID49IDAgJiZcbiAgICAgIHRoaXMuY29tcGFyZURhdGUobm9ybWFsaXplZCwgdGhpcy5fcmFuZ2VWYWx1ZS5lbmQpIDw9IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbm9ybWFsaXplZCxcbiAgICAgIGxhYmVsOiBub3JtYWxpemVkLmdldERhdGUoKSxcbiAgICAgIG11dGVkOiAhaW5DdXJyZW50TW9udGgsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFNpbmdsZSB8fCByYW5nZVN0YXJ0IHx8IHJhbmdlRW5kLFxuICAgICAgaW5SYW5nZSxcbiAgICAgIHJhbmdlRmlsbDogaW5SYW5nZSxcbiAgICAgIHJhbmdlTGVmdENhcDogZmFsc2UsXG4gICAgICByYW5nZVJpZ2h0Q2FwOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEFuY2hvck1vbnRoKCk6IERhdGUge1xuICAgIGxldCBjYW5kaWRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl9tb250aCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5jbG9uZURhdGUodGhpcy5fbW9udGgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnICYmIHRoaXMuX3ZhbHVlKSB7XG4gICAgICBjYW5kaWRhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLl92YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gJ3JhbmdlJyAmJiB0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCkge1xuICAgICAgY2FuZGlkYXRlID0gdGhpcy5zdGFydE9mTW9udGgodGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuc3RhcnRPZk1vbnRoKG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShjYW5kaWRhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydE9mTW9udGgobmV3IERhdGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QW5jaG9yTW9udGgobW9udGg6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5zdGFydE9mTW9udGgobW9udGgpO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZShub3JtYWxpemVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tb250aCA9IG5vcm1hbGl6ZWQ7XG4gICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKHRoaXMuX21vbnRoKSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgIGlmICghdGhpcy5fbW9udGggfHwgIXRoaXMuaXNTYW1lTW9udGgodGhpcy5fbW9udGgsIG5leHRNb250aCkpIHtcbiAgICAgIHRoaXMuX21vbnRoID0gbmV4dE1vbnRoO1xuICAgICAgdGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKG5leHRNb250aCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNCbG9ja2VkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5taW5EYXRlKSA8IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5jb21wYXJlRGF0ZShkYXRlLCB0aGlzLm1heERhdGUpID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYmxvY2tlZFNldCA9IG5ldyBTZXQoKHRoaXMuZGlzYWJsZWREYXRlcyB8fCBbXSkubWFwKChpdGVtKSA9PiB0aGlzLmRhdGVLZXkoaXRlbSkpKTtcbiAgICBpZiAoYmxvY2tlZFNldC5oYXModGhpcy5kYXRlS2V5KGRhdGUpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhdGhpcy5pc0RhdGVEaXNhYmxlZD8uKHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VDb250YWluc0Jsb2NrZWREYXRlKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpOiBib29sZWFuIHtcbiAgICBsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuXG4gICAgd2hpbGUgKHRoaXMuY29tcGFyZURhdGUoY3Vyc29yLCBlbmQpIDw9IDApIHtcbiAgICAgIGlmICh0aGlzLmlzQmxvY2tlZChjdXJzb3IpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY3Vyc29yID0gdGhpcy5hZGREYXlzKGN1cnNvciwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0RnVsbFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVEYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZERhdGUoZGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBkYXRlIGlzIERhdGUge1xuICAgIHJldHVybiAhIWRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIU51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0T2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIC1kYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kT2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIDYgLSBkYXRlLmdldERheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTW9udGhzKGRhdGU6IERhdGUsIG1vbnRoczogbnVtYmVyKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgbW9udGhzLCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGVWYWx1ZShhKSAtIHRoaXMuZGF0ZVZhbHVlKGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRlVmFsdWUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkgLyBEQVlfTVM7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZURheShhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUoYSwgYikgPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZU1vbnRoKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKCkgJiYgYS5nZXRNb250aCgpID09PSBiLmdldE1vbnRoKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGVLZXkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeSA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgZCA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eX0tJHttfS0ke2R9YDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhTaG9ydChkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb250aFllYXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnLCB5ZWFyOiAnbnVtZXJpYycgfSk7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwicm9vdENsYXNzZXNcIiBbbmdTdHlsZV09XCJyb290U3R5bGVcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgbW9udGggb2YgdmlzaWJsZU1vbnRoczsgbGV0IG1vbnRoSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwibW9udGhQYW5lbENsYXNzZXMobW9udGhJbmRleClcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImhlYWRlckNsYXNzZXMobW9udGgpXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibW9udGguc2hvd1ByZXZCdXR0b247IGVsc2UgcHJldlBsYWNlaG9sZGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5hdkJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXNNb250aCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZD1cIm0xNSAxOC02LTYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNwcmV2UGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2UGxhY2Vob2xkZXJDbGFzc2VzKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aC50aXRsZVN0eWxlID09PSAnZHJvcGRvd25zJzsgZWxzZSBwbGFpblRpdGxlXCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZHJvcGRvd25XcmFwQ2xhc3NlcygpXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzZXMoJ3ctMTYgc206dy1bNzJweF0nKVwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJkcm9wZG93blNlbGVjdENsYXNzZXMoKVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImRyb3Bkb3duU2VsZWN0U3R5bGVcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2luZ2xlSGVhZGVyTW9udGhcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9udGhcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2luZ2xlTW9udGhDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoT3B0aW9uIG9mIG1vbnRoT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm1vbnRoT3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwibW9udGhPcHRpb24udmFsdWUgPT09IHNpbmdsZUhlYWRlck1vbnRoXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoT3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtMyB3LTMgdGV4dC1mb3JlZ3JvdW5kXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJtNiA5IDYgNiA2LTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImRyb3Bkb3duQ2xhc3Nlcygndy0xNiBzbTp3LVs4MnB4XScpXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRyb3Bkb3duU2VsZWN0Q2xhc3NlcygpXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZHJvcGRvd25TZWxlY3RTdHlsZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzaW5nbGVIZWFkZXJZZWFyXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlllYXJcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2luZ2xlWWVhckNoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInllYXJcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJ5ZWFyID09PSBzaW5nbGVIZWFkZXJZZWFyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC0zIHctMyB0ZXh0LWZvcmVncm91bmRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIm02IDkgNiA2IDYtNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3BsYWluVGl0bGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTAgZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibS0wIHRleHQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNVwiPlxuICAgICAgICAgICAge3sgbW9udGgudGl0bGUgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1vbnRoLnNob3dOZXh0QnV0dG9uOyBlbHNlIG5leHRQbGFjZWhvbGRlclwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbbmdDbGFzc109XCJuYXZCdXR0b25DbGFzc2VzKClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvTmV4dE1vbnRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtNCB3LTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cGF0aCBkPVwibTkgMTggNi02LTYtNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbmV4dFBsYWNlaG9sZGVyPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIm5hdlBsYWNlaG9sZGVyQ2xhc3NlcygpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBbbmdDbGFzc109XCJjYWxlbmRhckdyaWRXcmFwQ2xhc3NlcygpXCI+XG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cIndlZWtkYXlSb3dDbGFzc2VzKClcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtkYXlzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBbbmdDbGFzc109XCJ3ZWVrZGF5Q2VsbENsYXNzZXMoKVwiPlxuICAgICAgICAgIDxzcGFuPnt7IGRheSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2VlayBvZiBtb250aC53ZWVrczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwid2Vla1Jvd0NsYXNzZXMoKVwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjZWxsIG9mIHdlZWs7IHRyYWNrQnk6IHRyYWNrQnlEYXRlXCIgW25nQ2xhc3NdPVwiZGF5Q2VsbENsYXNzZXMoY2VsbClcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRheUJ1dHRvbkNsYXNzZXMoY2VsbClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiY2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImNlbGwuZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiY2VsbC5kYXRlIHwgZGF0ZSA6ICd5eXl5LU1NLWRkJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25EYXRlUHJlc3NlZChjZWxsKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiZGF5TGFiZWxDbGFzc2VzKGNlbGwpXCI+e3sgY2VsbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDOzs7QUFnQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQU9uQyxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBTVMsV0FBTSxHQUFnQixJQUFJLENBQUM7UUFDM0IsZ0JBQVcsR0FBNEIsSUFBSSxDQUFDO1FBQzVDLFdBQU0sR0FBZ0IsSUFBSSxDQUFDO1FBRWxCLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV4QyxZQUFPLEdBQWdDLFFBQVEsQ0FBQztRQUNoRCxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2Ysa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsWUFBTyxHQUFnQixJQUFJLENBQUM7UUFDNUIsWUFBTyxHQUFnQixJQUFJLENBQUM7UUFDNUIsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFDOUIsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFDOUIsbUJBQWMsR0FBcUMsSUFBSSxDQUFDO1FBQ3hELHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUN6QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWhCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUM5QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBMkIs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Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0gsS0FBSztzQkFEUixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFjRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0RXZlbnRFbWl0dGVyLFxuXHRpbmplY3QsXG5cdElucHV0LFxuXHRPdXRwdXQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIFBkbUNhbGVuZGFyVmFyaWFudCA9IFwic2luZ2xlXCIgfCBcInJhbmdlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGRtQ2FsZW5kYXJSYW5nZSB7XG5cdHN0YXJ0OiBEYXRlIHwgbnVsbDtcblx0ZW5kOiBEYXRlIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFBkbUNhbGVuZGFyQ2VsbCB7XG5cdGRhdGU6IERhdGU7XG5cdGxhYmVsOiBudW1iZXI7XG5cdG11dGVkOiBib29sZWFuO1xuXHRkaXNhYmxlZDogYm9vbGVhbjtcblx0c2VsZWN0ZWQ6IGJvb2xlYW47XG5cdGluUmFuZ2U6IGJvb2xlYW47XG5cdHJhbmdlRmlsbDogYm9vbGVhbjtcblx0cmFuZ2VMZWZ0Q2FwOiBib29sZWFuO1xuXHRyYW5nZVJpZ2h0Q2FwOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGRtQ2FsZW5kYXJNb250aFZpZXcge1xuXHRkYXRlOiBEYXRlO1xuXHR0aXRsZTogc3RyaW5nO1xuXHR0aXRsZVN0eWxlOiBcImRyb3Bkb3duc1wiIHwgXCJwbGFpblwiO1xuXHRkcm9wZG93bk1vbnRoPzogc3RyaW5nO1xuXHRkcm9wZG93blllYXI/OiBzdHJpbmc7XG5cdHNob3dQcmV2QnV0dG9uOiBib29sZWFuO1xuXHRzaG93TmV4dEJ1dHRvbjogYm9vbGVhbjtcblx0d2Vla3M6IHJlYWRvbmx5IChyZWFkb25seSBQZG1DYWxlbmRhckNlbGxbXSlbXTtcbn1cblxuY29uc3QgREFZX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS1jYWxlbmRhclwiLFxuXHR0ZW1wbGF0ZVVybDogXCIuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sXCIsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZG1DYWxlbmRhckNvbXBvbmVudCB7XG5cdHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgX3JhbmdlVmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBfbW9udGg6IERhdGUgfCBudWxsID0gbnVsbDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cblx0QElucHV0KCkgdmFyaWFudDogUGRtQ2FsZW5kYXJWYXJpYW50IHwgc3RyaW5nID0gXCJzaW5nbGVcIjtcblx0QElucHV0KCkgY2xhc3NOYW1lID0gXCJcIjtcblx0QElucHV0KCkgZGlzYWJsZWREYXRlczogRGF0ZVtdID0gW107XG5cdEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblx0QElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXHRASW5wdXQoKSBtaW5ZZWFyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblx0QElucHV0KCkgbWF4WWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdEBJbnB1dCgpIGlzRGF0ZURpc2FibGVkOiAoKGRhdGU6IERhdGUpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cdEBJbnB1dCgpIGFsbG93U2FtZURheVJhbmdlID0gdHJ1ZTtcblx0QElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuXHRAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuXHRAT3V0cHV0KCkgcmFuZ2VWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGRtQ2FsZW5kYXJSYW5nZSB8IG51bGw+KCk7XG5cdEBPdXRwdXQoKSBtb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblx0QE91dHB1dCgpIGRhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblx0QE91dHB1dCgpIGRpc2FibGVkRGF0ZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG5cdEBJbnB1dCgpXG5cdHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSB8IG51bGwpIHtcblx0XHR0aGlzLl92YWx1ZSA9IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZSk7XG5cdH1cblx0Z2V0IHZhbHVlKCk6IERhdGUgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fdmFsdWU7XG5cdH1cblxuXHRASW5wdXQoKVxuXHRzZXQgcmFuZ2VWYWx1ZSh2YWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwpIHtcblx0XHR0aGlzLl9yYW5nZVZhbHVlID0gdmFsdWVcblx0XHRcdD8ge1xuXHRcdFx0XHRcdHN0YXJ0OiB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUuc3RhcnQpLFxuXHRcdFx0XHRcdGVuZDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLmVuZCksXG5cdFx0XHRcdH1cblx0XHRcdDogbnVsbDtcblx0fVxuXHRnZXQgcmFuZ2VWYWx1ZSgpOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX3JhbmdlVmFsdWU7XG5cdH1cblxuXHRASW5wdXQoKVxuXHRzZXQgbW9udGgodmFsdWU6IERhdGUgfCBudWxsKSB7XG5cdFx0dGhpcy5fbW9udGggPSB2YWx1ZSA/IHRoaXMuc3RhcnRPZk1vbnRoKHZhbHVlKSA6IG51bGw7XG5cdH1cblx0Z2V0IG1vbnRoKCk6IERhdGUgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9udGg7XG5cdH1cblxuXHRyZWFkb25seSB3ZWVrZGF5cyA9IFtcIlN1XCIsIFwiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCJdIGFzIGNvbnN0O1xuXHRyZWFkb25seSBtb250aE9wdGlvbnMgPSBbXG5cdFx0eyB2YWx1ZTogMCwgbGFiZWw6IFwiSmFuXCIgfSxcblx0XHR7IHZhbHVlOiAxLCBsYWJlbDogXCJGZWJcIiB9LFxuXHRcdHsgdmFsdWU6IDIsIGxhYmVsOiBcIk1hclwiIH0sXG5cdFx0eyB2YWx1ZTogMywgbGFiZWw6IFwiQXByXCIgfSxcblx0XHR7IHZhbHVlOiA0LCBsYWJlbDogXCJNYXlcIiB9LFxuXHRcdHsgdmFsdWU6IDUsIGxhYmVsOiBcIkp1blwiIH0sXG5cdFx0eyB2YWx1ZTogNiwgbGFiZWw6IFwiSnVsXCIgfSxcblx0XHR7IHZhbHVlOiA3LCBsYWJlbDogXCJBdWdcIiB9LFxuXHRcdHsgdmFsdWU6IDgsIGxhYmVsOiBcIlNlcFwiIH0sXG5cdFx0eyB2YWx1ZTogOSwgbGFiZWw6IFwiT2N0XCIgfSxcblx0XHR7IHZhbHVlOiAxMCwgbGFiZWw6IFwiTm92XCIgfSxcblx0XHR7IHZhbHVlOiAxMSwgbGFiZWw6IFwiRGVjXCIgfSxcblx0XSBhcyBjb25zdDtcblxuXHRnZXQgcmVzb2x2ZWRWYXJpYW50KCk6IFBkbUNhbGVuZGFyVmFyaWFudCB7XG5cdFx0cmV0dXJuIHRoaXMudmFyaWFudCA9PT0gXCJyYW5nZVwiID8gXCJyYW5nZVwiIDogXCJzaW5nbGVcIjtcblx0fVxuXG5cdGdldCB2aXNpYmxlTW9udGhzKCk6IHJlYWRvbmx5IFBkbUNhbGVuZGFyTW9udGhWaWV3W10ge1xuXHRcdGNvbnN0IGJhc2VNb250aCA9IHRoaXMuZ2V0QW5jaG9yTW9udGgoKTtcblxuXHRcdGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGRhdGU6IGJhc2VNb250aCxcblx0XHRcdFx0XHR0aXRsZTogdGhpcy5mb3JtYXRNb250aFllYXIoYmFzZU1vbnRoKSxcblx0XHRcdFx0XHR0aXRsZVN0eWxlOiBcImRyb3Bkb3duc1wiLFxuXHRcdFx0XHRcdGRyb3Bkb3duTW9udGg6IHRoaXMuZm9ybWF0TW9udGhTaG9ydChiYXNlTW9udGgpLFxuXHRcdFx0XHRcdGRyb3Bkb3duWWVhcjogU3RyaW5nKGJhc2VNb250aC5nZXRGdWxsWWVhcigpKSxcblx0XHRcdFx0XHRzaG93UHJldkJ1dHRvbjogdHJ1ZSxcblx0XHRcdFx0XHRzaG93TmV4dEJ1dHRvbjogdHJ1ZSxcblx0XHRcdFx0XHR3ZWVrczogdGhpcy5idWlsZE1vbnRoV2Vla3MoYmFzZU1vbnRoLCBmYWxzZSksXG5cdFx0XHRcdH0sXG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5leHRNb250aCA9IHRoaXMuYWRkTW9udGhzKGJhc2VNb250aCwgMSk7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZGF0ZTogYmFzZU1vbnRoLFxuXHRcdFx0XHR0aXRsZTogdGhpcy5mb3JtYXRNb250aFllYXIoYmFzZU1vbnRoKSxcblx0XHRcdFx0dGl0bGVTdHlsZTogXCJwbGFpblwiLFxuXHRcdFx0XHRzaG93UHJldkJ1dHRvbjogdHJ1ZSxcblx0XHRcdFx0c2hvd05leHRCdXR0b246IGZhbHNlLFxuXHRcdFx0XHR3ZWVrczogdGhpcy5idWlsZE1vbnRoV2Vla3MoYmFzZU1vbnRoLCB0cnVlKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGU6IG5leHRNb250aCxcblx0XHRcdFx0dGl0bGU6IHRoaXMuZm9ybWF0TW9udGhZZWFyKG5leHRNb250aCksXG5cdFx0XHRcdHRpdGxlU3R5bGU6IFwicGxhaW5cIixcblx0XHRcdFx0c2hvd1ByZXZCdXR0b246IGZhbHNlLFxuXHRcdFx0XHRzaG93TmV4dEJ1dHRvbjogdHJ1ZSxcblx0XHRcdFx0d2Vla3M6IHRoaXMuYnVpbGRNb250aFdlZWtzKG5leHRNb250aCwgdHJ1ZSksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cblxuXHRnZXQgc2luZ2xlSGVhZGVyTW9udGgoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBbmNob3JNb250aCgpLmdldE1vbnRoKCk7XG5cdH1cblxuXHRnZXQgc2luZ2xlSGVhZGVyWWVhcigpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmdldEFuY2hvck1vbnRoKCkuZ2V0RnVsbFllYXIoKTtcblx0fVxuXG5cdGdldCB5ZWFyT3B0aW9ucygpOiByZWFkb25seSBudW1iZXJbXSB7XG5cdFx0Y29uc3QgYmFzZVllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5zaW5nbGVIZWFkZXJZZWFyO1xuXHRcdGxldCBtaW5ZZWFyID1cblx0XHRcdHRoaXMubWluWWVhciA/P1xuXHRcdFx0KHRoaXMubWluRGF0ZSA/IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpIDogYmFzZVllYXIgLSAxMDApO1xuXHRcdGxldCBtYXhZZWFyID1cblx0XHRcdHRoaXMubWF4WWVhciA/P1xuXHRcdFx0KHRoaXMubWF4RGF0ZSA/IHRoaXMubWF4RGF0ZS5nZXRGdWxsWWVhcigpIDogYmFzZVllYXIgKyAxMCk7XG5cdFx0Y29uc3QgeWVhcnM6IG51bWJlcltdID0gW107XG5cblx0XHRpZiAoc2VsZWN0ZWRZZWFyIDwgbWluWWVhcikge1xuXHRcdFx0bWluWWVhciA9IHNlbGVjdGVkWWVhcjtcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRZZWFyID4gbWF4WWVhcikge1xuXHRcdFx0bWF4WWVhciA9IHNlbGVjdGVkWWVhcjtcblx0XHR9XG5cblx0XHRpZiAobWluWWVhciA+IG1heFllYXIpIHtcblx0XHRcdGNvbnN0IG5leHRNaW4gPSBtYXhZZWFyO1xuXHRcdFx0bWF4WWVhciA9IG1pblllYXI7XG5cdFx0XHRtaW5ZZWFyID0gbmV4dE1pbjtcblx0XHR9XG5cblx0XHRmb3IgKGxldCB5ZWFyID0gbWluWWVhcjsgeWVhciA8PSBtYXhZZWFyOyB5ZWFyICs9IDEpIHtcblx0XHRcdHllYXJzLnB1c2goeWVhcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHllYXJzO1xuXHR9XG5cblx0Z2V0IHJvb3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQgcmVsYXRpdmUgcm91bmRlZC1bMTBweF0gYm9yZGVyIGJvcmRlci1zb2xpZCBwLTMgc2hhZG93LXNtXCIsXG5cdFx0XHR0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJyYW5nZVwiXG5cdFx0XHRcdD8gXCJpbmxpbmUtZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWNlbnRlciBnYXAtNCBzaHJpbmstMCBncm93LTAgYmFzaXMtYXV0b1wiXG5cdFx0XHRcdDogXCJpbmxpbmUtZmxleCBmbGV4LWNvbCBnYXAtNCBzaHJpbmstMCBncm93LTAgYmFzaXMtYXV0b1wiLFxuXHRcdFx0dGhpcy5jbGFzc05hbWUsXG5cdFx0XTtcblx0fVxuXG5cdGdldCByb290U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG5cdFx0Y29uc3Qgd2lkdGggPSB0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJyYW5nZVwiID8gXCI0ODhweFwiIDogXCIyNTBweFwiO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHdpZHRoLFxuXHRcdFx0bWluV2lkdGg6IHdpZHRoLFxuXHRcdFx0bWF4V2lkdGg6IHdpZHRoLFxuXHRcdFx0bWluSGVpZ2h0OiBcIjI5M3B4XCIsXG5cdFx0XHRmbGV4OiBcIjAgMCBhdXRvXCIsXG5cdFx0XHRhbGlnblNlbGY6IFwiZmxleC1zdGFydFwiLFxuXHRcdH07XG5cdH1cblxuXHRtb250aFBhbmVsQ2xhc3NlcyhfaW5kZXg6IG51bWJlcik6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0XCIsXG5cdFx0XHR0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJyYW5nZVwiID8gXCJ3LVsyMjRweF0gZ2FwLTRcIiA6IFwidy1mdWxsIGdhcC0wXCIsXG5cdFx0XTtcblx0fVxuXG5cdGhlYWRlckNsYXNzZXMobW9udGg6IFBkbUNhbGVuZGFyTW9udGhWaWV3KTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHRcImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIixcblx0XHRcdG1vbnRoLnRpdGxlU3R5bGUgPT09IFwiZHJvcGRvd25zXCIgPyBcIlwiIDogXCJtYi00XCIsXG5cdFx0XTtcblx0fVxuXG5cdG5hdkJ1dHRvbkNsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHRcImZsZXggaC04IHctOCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1mb3JlZ3JvdW5kXCIsXG5cdFx0XHRcImRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS00MFwiLFxuXHRcdF07XG5cdH1cblxuXHRuYXZQbGFjZWhvbGRlckNsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbXCJoLTcgdy03IHNocmluay0wXCJdO1xuXHR9XG5cblx0ZHJvcGRvd25XcmFwQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIFtcImZsZXggdy00MCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTJcIl07XG5cdH1cblxuXHRkcm9wZG93bkNsYXNzZXMod2lkdGhDbGFzczogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbXCJmbGV4IGgtOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMVwiLCB3aWR0aENsYXNzXTtcblx0fVxuXG5cdGRyb3Bkb3duU2VsZWN0Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdFwidGV4dC1mb3JlZ3JvdW5kIGgtZnVsbCBiZy10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNVwiLFxuXHRcdFx0XCJhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBib3JkZXItMCBvdXRsaW5lLW5vbmUgcmluZy0wIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgdGV4dC1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIixcblx0XHRdO1xuXHR9XG5cblx0Z2V0IGRyb3Bkb3duU2VsZWN0U3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFwcGVhcmFuY2U6IFwibm9uZVwiLFxuXHRcdFx0V2Via2l0QXBwZWFyYW5jZTogXCJub25lXCIsXG5cdFx0XHRNb3pBcHBlYXJhbmNlOiBcIm5vbmVcIixcblx0XHRcdGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdGJvcmRlcjogXCIwXCIsXG5cdFx0XHRib3hTaGFkb3c6IFwibm9uZVwiLFxuXHRcdFx0b3V0bGluZTogXCIwXCIsXG5cdFx0XHRwYWRkaW5nOiBcIjBcIixcblx0XHRcdG1hcmdpbjogXCIwXCIsXG5cdFx0fTtcblx0fVxuXG5cdGNhbGVuZGFyR3JpZFdyYXBDbGFzc2VzKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gW1wiZmxleCB3LWZ1bGwgZmxleC1jb2wgaXRlbXMtc3RhcnRcIl07XG5cdH1cblxuXHR3ZWVrZGF5Um93Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIFtcImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlclwiXTtcblx0fVxuXG5cdHdlZWtkYXlDZWxsQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdFwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZsZXggaC1bMjFweF0gdy04IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIHRleHQteHMgbGVhZGluZy00XCIsXG5cdFx0XTtcblx0fVxuXG5cdHdlZWtSb3dDbGFzc2VzKCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gW1wiZmxleCB3LWZ1bGwgaXRlbXMtc3RhcnQgcHQtMlwiXTtcblx0fVxuXG5cdGRheUNlbGxDbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJyZWxhdGl2ZSBmbGV4IGgtOCB3LTggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCIsXG5cdFx0XHRjZWxsLnJhbmdlRmlsbCA/IFwiYmctYWNjZW50XCIgOiBcIlwiLFxuXHRcdFx0Y2VsbC5yYW5nZUxlZnRDYXAgPyBcInJvdW5kZWQtbC1tZFwiIDogXCJcIixcblx0XHRcdGNlbGwucmFuZ2VSaWdodENhcCA/IFwicm91bmRlZC1yLW1kXCIgOiBcIlwiLFxuXHRcdF07XG5cdH1cblxuXHRkYXlCdXR0b25DbGFzc2VzKGNlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJyZWxhdGl2ZSB6LTEwIGZsZXggaC04IHctOCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItMCBwLTAgdGV4dC1zbSBsZWFkaW5nLTVcIixcblx0XHRcdGNlbGwuc2VsZWN0ZWRcblx0XHRcdFx0PyBcImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmRcIlxuXHRcdFx0XHQ6IGNlbGwucmFuZ2VGaWxsXG5cdFx0XHRcdFx0PyBcImJnLXRyYW5zcGFyZW50IHRleHQtYWNjZW50LWZvcmVncm91bmRcIlxuXHRcdFx0XHRcdDogXCJiZy10cmFuc3BhcmVudCB0ZXh0LWZvcmVncm91bmRcIixcblx0XHRcdGNlbGwubXV0ZWQgJiYgIWNlbGwucmFuZ2VGaWxsID8gXCJvcGFjaXR5LTUwXCIgOiBcIlwiLFxuXHRcdFx0Y2VsbC5kaXNhYmxlZCA/IFwiY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNDBcIiA6IFwiXCIsXG5cdFx0XHQhY2VsbC5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAhY2VsbC5zZWxlY3RlZFxuXHRcdFx0XHQ/IFwiaG92ZXI6YmctYWNjZW50LzcwXCJcblx0XHRcdFx0OiBcIlwiLFxuXHRcdF07XG5cdH1cblxuXHRkYXlMYWJlbENsYXNzZXMoX2NlbGw6IFBkbUNhbGVuZGFyQ2VsbCk6IHN0cmluZ1tdIHtcblx0XHRyZXR1cm4gW1wiZm9udC1ub3JtYWxcIl07XG5cdH1cblxuXHR0cmFja0J5SW5kZXggPSAoaW5kZXg6IG51bWJlcik6IG51bWJlciA9PiB7XG5cdFx0cmV0dXJuIGluZGV4O1xuXHR9O1xuXG5cdHRyYWNrQnlEYXRlID0gKF9pbmRleDogbnVtYmVyLCBjZWxsOiBQZG1DYWxlbmRhckNlbGwpOiBzdHJpbmcgPT4ge1xuXHRcdHJldHVybiB0aGlzLmRhdGVLZXkoY2VsbC5kYXRlKTtcblx0fTtcblxuXHRnb1RvUHJldmlvdXNNb250aCgpOiB2b2lkIHtcblx0XHR0aGlzLnNldEFuY2hvck1vbnRoKHRoaXMuYWRkTW9udGhzKHRoaXMuZ2V0QW5jaG9yTW9udGgoKSwgLTEpKTtcblx0fVxuXG5cdGdvVG9OZXh0TW9udGgoKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRBbmNob3JNb250aCh0aGlzLmFkZE1vbnRocyh0aGlzLmdldEFuY2hvck1vbnRoKCksIDEpKTtcblx0fVxuXG5cdG9uU2luZ2xlTW9udGhDaGFuZ2UobW9udGhWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9udGggPSBOdW1iZXIobW9udGhWYWx1ZSk7XG5cdFx0aWYgKE51bWJlci5pc05hTihtb250aCkgfHwgbW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhbmNob3IgPSB0aGlzLmdldEFuY2hvck1vbnRoKCk7XG5cdFx0dGhpcy5zZXRBbmNob3JNb250aChuZXcgRGF0ZShhbmNob3IuZ2V0RnVsbFllYXIoKSwgbW9udGgsIDEpKTtcblx0fVxuXG5cdG9uU2luZ2xlWWVhckNoYW5nZSh5ZWFyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHllYXIgPSBOdW1iZXIoeWVhclZhbHVlKTtcblx0XHRpZiAoTnVtYmVyLmlzTmFOKHllYXIpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYW5jaG9yID0gdGhpcy5nZXRBbmNob3JNb250aCgpO1xuXHRcdHRoaXMuc2V0QW5jaG9yTW9udGgobmV3IERhdGUoeWVhciwgYW5jaG9yLmdldE1vbnRoKCksIDEpKTtcblx0fVxuXG5cdG9uRGF0ZVByZXNzZWQoY2VsbDogUGRtQ2FsZW5kYXJDZWxsKTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0ZSA9IHRoaXMuY2xvbmVEYXRlKGNlbGwuZGF0ZSk7XG5cblx0XHRpZiAoY2VsbC5kaXNhYmxlZCkge1xuXHRcdFx0dGhpcy5kaXNhYmxlZERhdGVDbGljay5lbWl0KGRhdGUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5kYXRlQ2xpY2suZW1pdChkYXRlKTtcblxuXHRcdGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0dGhpcy5fdmFsdWUgPSBkYXRlO1xuXHRcdFx0dGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcblx0XHRcdHRoaXMuc3luY1Zpc2libGVNb250aFRvRGF0ZShkYXRlKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlUmFuZ2VTZWxlY3Rpb24oZGF0ZSk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZVJhbmdlU2VsZWN0aW9uKGRhdGU6IERhdGUpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5fcmFuZ2VWYWx1ZTtcblx0XHRjb25zdCBjdXJyZW50U3RhcnQgPSBjdXJyZW50Py5zdGFydCA/IHRoaXMuY2xvbmVEYXRlKGN1cnJlbnQuc3RhcnQpIDogbnVsbDtcblx0XHRjb25zdCBjdXJyZW50RW5kID0gY3VycmVudD8uZW5kID8gdGhpcy5jbG9uZURhdGUoY3VycmVudC5lbmQpIDogbnVsbDtcblxuXHRcdGlmICghY3VycmVudFN0YXJ0IHx8IChjdXJyZW50U3RhcnQgJiYgY3VycmVudEVuZCkpIHtcblx0XHRcdHRoaXMuX3JhbmdlVmFsdWUgPSB7IHN0YXJ0OiBkYXRlLCBlbmQ6IG51bGwgfTtcblx0XHRcdHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKGRhdGUpLCBlbmQ6IG51bGwgfSk7XG5cdFx0XHR0aGlzLnN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNTYW1lRGF5KGN1cnJlbnRTdGFydCwgZGF0ZSkgJiYgIXRoaXMuYWxsb3dTYW1lRGF5UmFuZ2UpIHtcblx0XHRcdHRoaXMuX3JhbmdlVmFsdWUgPSB7IHN0YXJ0OiBkYXRlLCBlbmQ6IG51bGwgfTtcblx0XHRcdHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMuY2xvbmVEYXRlKGRhdGUpLCBlbmQ6IG51bGwgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhcnQgPVxuXHRcdFx0dGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGRhdGUgOiBjdXJyZW50U3RhcnQ7XG5cdFx0Y29uc3QgZW5kID0gdGhpcy5jb21wYXJlRGF0ZShkYXRlLCBjdXJyZW50U3RhcnQpIDwgMCA/IGN1cnJlbnRTdGFydCA6IGRhdGU7XG5cblx0XHRpZiAodGhpcy5yYW5nZUNvbnRhaW5zQmxvY2tlZERhdGUoc3RhcnQsIGVuZCkpIHtcblx0XHRcdHRoaXMuZGlzYWJsZWREYXRlQ2xpY2suZW1pdCh0aGlzLmNsb25lRGF0ZShkYXRlKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fcmFuZ2VWYWx1ZSA9IHsgc3RhcnQsIGVuZCB9O1xuXHRcdHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KHtcblx0XHRcdHN0YXJ0OiB0aGlzLmNsb25lRGF0ZShzdGFydCksXG5cdFx0XHRlbmQ6IHRoaXMuY2xvbmVEYXRlKGVuZCksXG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jVmlzaWJsZU1vbnRoVG9EYXRlKHN0YXJ0KTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRNb250aFdlZWtzKFxuXHRcdG1vbnRoOiBEYXRlLFxuXHRcdGluY2x1ZGVSYW5nZTogYm9vbGVhbixcblx0KTogcmVhZG9ubHkgKHJlYWRvbmx5IFBkbUNhbGVuZGFyQ2VsbFtdKVtdIHtcblx0XHRjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLnN0YXJ0T2ZNb250aChtb250aCk7XG5cdFx0Y29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0T2ZXZWVrKGZpcnN0T2ZNb250aCk7XG5cdFx0Y29uc3QgZW5kID0gdGhpcy5lbmRPZldlZWsodGhpcy5lbmRPZk1vbnRoKGZpcnN0T2ZNb250aCkpO1xuXHRcdGNvbnN0IHdlZWtzOiBQZG1DYWxlbmRhckNlbGxbXVtdID0gW107XG5cblx0XHRsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuXHRcdHdoaWxlICh0aGlzLmNvbXBhcmVEYXRlKGN1cnNvciwgZW5kKSA8PSAwKSB7XG5cdFx0XHRjb25zdCByb3c6IFBkbUNhbGVuZGFyQ2VsbFtdID0gW107XG5cblx0XHRcdGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCArPSAxKSB7XG5cdFx0XHRcdHJvdy5wdXNoKHRoaXMuYnVpbGRDZWxsKGN1cnNvciwgbW9udGgsIGluY2x1ZGVSYW5nZSkpO1xuXHRcdFx0XHRjdXJzb3IgPSB0aGlzLmFkZERheXMoY3Vyc29yLCAxKTtcblx0XHRcdH1cblxuXHRcdFx0d2Vla3MucHVzaChyb3cpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qgcm93IG9mIHdlZWtzKSB7XG5cdFx0XHRmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCByb3cubGVuZ3RoOyBjb2wgKz0gMSkge1xuXHRcdFx0XHRjb25zdCBjZWxsID0gcm93W2NvbF07XG5cdFx0XHRcdGlmICghY2VsbC5pblJhbmdlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBsZWZ0SW5Sb3cgPSBjb2wgPiAwID8gcm93W2NvbCAtIDFdLmluUmFuZ2UgOiBmYWxzZTtcblx0XHRcdFx0Y29uc3QgcmlnaHRJblJvdyA9IGNvbCA8IHJvdy5sZW5ndGggLSAxID8gcm93W2NvbCArIDFdLmluUmFuZ2UgOiBmYWxzZTtcblxuXHRcdFx0XHRjZWxsLnJhbmdlTGVmdENhcCA9ICFsZWZ0SW5Sb3c7XG5cdFx0XHRcdGNlbGwucmFuZ2VSaWdodENhcCA9ICFyaWdodEluUm93O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB3ZWVrcztcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRDZWxsKFxuXHRcdGRhdGU6IERhdGUsXG5cdFx0dmlzaWJsZU1vbnRoOiBEYXRlLFxuXHRcdGluY2x1ZGVSYW5nZTogYm9vbGVhbixcblx0KTogUGRtQ2FsZW5kYXJDZWxsIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gdGhpcy5jbG9uZURhdGUoZGF0ZSk7XG5cdFx0Y29uc3QgaW5DdXJyZW50TW9udGggPVxuXHRcdFx0bm9ybWFsaXplZC5nZXRNb250aCgpID09PSB2aXNpYmxlTW9udGguZ2V0TW9udGgoKSAmJlxuXHRcdFx0bm9ybWFsaXplZC5nZXRGdWxsWWVhcigpID09PSB2aXNpYmxlTW9udGguZ2V0RnVsbFllYXIoKTtcblx0XHRjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNCbG9ja2VkKG5vcm1hbGl6ZWQpO1xuXG5cdFx0Y29uc3Qgc2VsZWN0ZWRTaW5nbGUgPVxuXHRcdFx0dGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09IFwic2luZ2xlXCIgJiZcblx0XHRcdCEhdGhpcy5fdmFsdWUgJiZcblx0XHRcdHRoaXMuaXNTYW1lRGF5KG5vcm1hbGl6ZWQsIHRoaXMuX3ZhbHVlKTtcblx0XHRjb25zdCByYW5nZVN0YXJ0ID1cblx0XHRcdGluY2x1ZGVSYW5nZSAmJlxuXHRcdFx0ISF0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJlxuXHRcdFx0dGhpcy5pc1NhbWVEYXkobm9ybWFsaXplZCwgdGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCk7XG5cdFx0Y29uc3QgcmFuZ2VFbmQgPVxuXHRcdFx0aW5jbHVkZVJhbmdlICYmXG5cdFx0XHQhIXRoaXMuX3JhbmdlVmFsdWU/LmVuZCAmJlxuXHRcdFx0dGhpcy5pc1NhbWVEYXkobm9ybWFsaXplZCwgdGhpcy5fcmFuZ2VWYWx1ZS5lbmQpO1xuXHRcdGNvbnN0IGluUmFuZ2UgPVxuXHRcdFx0aW5jbHVkZVJhbmdlICYmXG5cdFx0XHQhIXRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0ICYmXG5cdFx0XHQhIXRoaXMuX3JhbmdlVmFsdWU/LmVuZCAmJlxuXHRcdFx0dGhpcy5jb21wYXJlRGF0ZShub3JtYWxpemVkLCB0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KSA+PSAwICYmXG5cdFx0XHR0aGlzLmNvbXBhcmVEYXRlKG5vcm1hbGl6ZWQsIHRoaXMuX3JhbmdlVmFsdWUuZW5kKSA8PSAwO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGRhdGU6IG5vcm1hbGl6ZWQsXG5cdFx0XHRsYWJlbDogbm9ybWFsaXplZC5nZXREYXRlKCksXG5cdFx0XHRtdXRlZDogIWluQ3VycmVudE1vbnRoLFxuXHRcdFx0ZGlzYWJsZWQsXG5cdFx0XHRzZWxlY3RlZDogc2VsZWN0ZWRTaW5nbGUgfHwgcmFuZ2VTdGFydCB8fCByYW5nZUVuZCxcblx0XHRcdGluUmFuZ2UsXG5cdFx0XHRyYW5nZUZpbGw6IGluUmFuZ2UsXG5cdFx0XHRyYW5nZUxlZnRDYXA6IGZhbHNlLFxuXHRcdFx0cmFuZ2VSaWdodENhcDogZmFsc2UsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0QW5jaG9yTW9udGgoKTogRGF0ZSB7XG5cdFx0bGV0IGNhbmRpZGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG5cdFx0aWYgKHRoaXMuX21vbnRoKSB7XG5cdFx0XHRjYW5kaWRhdGUgPSB0aGlzLmNsb25lRGF0ZSh0aGlzLl9tb250aCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJzaW5nbGVcIiAmJiB0aGlzLl92YWx1ZSkge1xuXHRcdFx0Y2FuZGlkYXRlID0gdGhpcy5zdGFydE9mTW9udGgodGhpcy5fdmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09IFwicmFuZ2VcIiAmJiB0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCkge1xuXHRcdFx0Y2FuZGlkYXRlID0gdGhpcy5zdGFydE9mTW9udGgodGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbmRpZGF0ZSA9IHRoaXMuc3RhcnRPZk1vbnRoKG5ldyBEYXRlKCkpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5pc1ZhbGlkRGF0ZShjYW5kaWRhdGUpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdGFydE9mTW9udGgobmV3IERhdGUoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhbmRpZGF0ZTtcblx0fVxuXG5cdHByaXZhdGUgc2V0QW5jaG9yTW9udGgobW9udGg6IERhdGUpOiB2b2lkIHtcblx0XHRjb25zdCBub3JtYWxpemVkID0gdGhpcy5zdGFydE9mTW9udGgobW9udGgpO1xuXHRcdGlmICghdGhpcy5pc1ZhbGlkRGF0ZShub3JtYWxpemVkKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9tb250aCA9IG5vcm1hbGl6ZWQ7XG5cdFx0dGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKHRoaXMuX21vbnRoKSk7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNWaXNpYmxlTW9udGhUb0RhdGUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuXHRcdGNvbnN0IG5leHRNb250aCA9IHRoaXMuc3RhcnRPZk1vbnRoKGRhdGUpO1xuXHRcdGlmICghdGhpcy5fbW9udGggfHwgIXRoaXMuaXNTYW1lTW9udGgodGhpcy5fbW9udGgsIG5leHRNb250aCkpIHtcblx0XHRcdHRoaXMuX21vbnRoID0gbmV4dE1vbnRoO1xuXHRcdFx0dGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKG5leHRNb250aCkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaXNCbG9ja2VkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuY29tcGFyZURhdGUoZGF0ZSwgdGhpcy5taW5EYXRlKSA8IDApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5jb21wYXJlRGF0ZShkYXRlLCB0aGlzLm1heERhdGUpID4gMCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYmxvY2tlZFNldCA9IG5ldyBTZXQoXG5cdFx0XHQodGhpcy5kaXNhYmxlZERhdGVzIHx8IFtdKS5tYXAoKGl0ZW0pID0+IHRoaXMuZGF0ZUtleShpdGVtKSksXG5cdFx0KTtcblx0XHRpZiAoYmxvY2tlZFNldC5oYXModGhpcy5kYXRlS2V5KGRhdGUpKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICEhdGhpcy5pc0RhdGVEaXNhYmxlZD8uKHRoaXMuY2xvbmVEYXRlKGRhdGUpKTtcblx0fVxuXG5cdHByaXZhdGUgcmFuZ2VDb250YWluc0Jsb2NrZWREYXRlKHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUpOiBib29sZWFuIHtcblx0XHRsZXQgY3Vyc29yID0gdGhpcy5jbG9uZURhdGUoc3RhcnQpO1xuXG5cdFx0d2hpbGUgKHRoaXMuY29tcGFyZURhdGUoY3Vyc29yLCBlbmQpIDw9IDApIHtcblx0XHRcdGlmICh0aGlzLmlzQmxvY2tlZChjdXJzb3IpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Y3Vyc29yID0gdGhpcy5hZGREYXlzKGN1cnNvciwgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cHJpdmF0ZSBub3JtYWxpemVEYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUgfCBudWxsIHtcblx0XHRpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0RnVsbFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKTtcblx0fVxuXG5cdHByaXZhdGUgY2xvbmVEYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcblx0XHRyZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcblx0fVxuXG5cdHByaXZhdGUgaXNWYWxpZERhdGUoZGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBkYXRlIGlzIERhdGUge1xuXHRcdHJldHVybiAhIWRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIU51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSk7XG5cdH1cblxuXHRwcml2YXRlIHN0YXJ0T2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxKTtcblx0fVxuXG5cdHByaXZhdGUgZW5kT2ZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG5cdH1cblxuXHRwcml2YXRlIHN0YXJ0T2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIC1kYXRlLmdldERheSgpKTtcblx0fVxuXG5cdHByaXZhdGUgZW5kT2ZXZWVrKGRhdGU6IERhdGUpOiBEYXRlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGREYXlzKGRhdGUsIDYgLSBkYXRlLmdldERheSgpKTtcblx0fVxuXG5cdHByaXZhdGUgYWRkTW9udGhzKGRhdGU6IERhdGUsIG1vbnRoczogbnVtYmVyKTogRGF0ZSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgbW9udGhzLCAxKTtcblx0fVxuXG5cdHByaXZhdGUgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlIHtcblx0XHRyZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmRhdGVWYWx1ZShhKSAtIHRoaXMuZGF0ZVZhbHVlKGIpO1xuXHR9XG5cblx0cHJpdmF0ZSBkYXRlVmFsdWUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkgLyBEQVlfTVNcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBpc1NhbWVEYXkoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKGEsIGIpID09PSAwO1xuXHR9XG5cblx0cHJpdmF0ZSBpc1NhbWVNb250aChhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpICYmIGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBkYXRlS2V5KGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cdFx0Y29uc3QgbSA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCBcIjBcIik7XG5cdFx0Y29uc3QgZCA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgXCIwXCIpO1xuXHRcdHJldHVybiBgJHt5fS0ke219LSR7ZH1gO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JtYXRNb250aFNob3J0KGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwgeyBtb250aDogXCJzaG9ydFwiIH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JtYXRNb250aFllYXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7IG1vbnRoOiBcImxvbmdcIiwgeWVhcjogXCJudW1lcmljXCIgfSk7XG5cdH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwicm9vdENsYXNzZXNcIiBbbmdTdHlsZV09XCJyb290U3R5bGVcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgbW9udGggb2YgdmlzaWJsZU1vbnRoczsgbGV0IG1vbnRoSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwibW9udGhQYW5lbENsYXNzZXMobW9udGhJbmRleClcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cImhlYWRlckNsYXNzZXMobW9udGgpXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibW9udGguc2hvd1ByZXZCdXR0b247IGVsc2UgcHJldlBsYWNlaG9sZGVyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIm5hdkJ1dHRvbkNsYXNzZXMoKVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXNNb250aCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPHBhdGggZD1cIm0xNSAxOC02LTYgNi02XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG5nLXRlbXBsYXRlICNwcmV2UGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwibmF2UGxhY2Vob2xkZXJDbGFzc2VzKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb250aC50aXRsZVN0eWxlID09PSAnZHJvcGRvd25zJzsgZWxzZSBwbGFpblRpdGxlXCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZHJvcGRvd25XcmFwQ2xhc3NlcygpXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkcm9wZG93bkNsYXNzZXMoJ3ctMTYgc206dy1bNzJweF0nKVwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJkcm9wZG93blNlbGVjdENsYXNzZXMoKVwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImRyb3Bkb3duU2VsZWN0U3R5bGVcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2luZ2xlSGVhZGVyTW9udGhcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9udGhcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2luZ2xlTW9udGhDaGFuZ2UoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoT3B0aW9uIG9mIG1vbnRoT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm1vbnRoT3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwibW9udGhPcHRpb24udmFsdWUgPT09IHNpbmdsZUhlYWRlck1vbnRoXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG1vbnRoT3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtMyB3LTMgdGV4dC1mb3JlZ3JvdW5kXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJtNiA5IDYgNiA2LTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImRyb3Bkb3duQ2xhc3Nlcygndy0xNiBzbTp3LVs4MnB4XScpXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRyb3Bkb3duU2VsZWN0Q2xhc3NlcygpXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZHJvcGRvd25TZWxlY3RTdHlsZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzaW5nbGVIZWFkZXJZZWFyXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlllYXJcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2luZ2xlWWVhckNoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInllYXJcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJ5ZWFyID09PSBzaW5nbGVIZWFkZXJZZWFyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC0zIHctMyB0ZXh0LWZvcmVncm91bmRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIm02IDkgNiA2IDYtNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3BsYWluVGl0bGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTAgZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibS0wIHRleHQtZm9yZWdyb3VuZCB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctNVwiPlxuICAgICAgICAgICAge3sgbW9udGgudGl0bGUgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1vbnRoLnNob3dOZXh0QnV0dG9uOyBlbHNlIG5leHRQbGFjZWhvbGRlclwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbbmdDbGFzc109XCJuYXZCdXR0b25DbGFzc2VzKClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBtb250aFwiXG4gICAgICAgIChjbGljayk9XCJnb1RvTmV4dE1vbnRoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImgtNCB3LTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8cGF0aCBkPVwibTkgMTggNi02LTYtNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbmV4dFBsYWNlaG9sZGVyPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIm5hdlBsYWNlaG9sZGVyQ2xhc3NlcygpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBbbmdDbGFzc109XCJjYWxlbmRhckdyaWRXcmFwQ2xhc3NlcygpXCI+XG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cIndlZWtkYXlSb3dDbGFzc2VzKClcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtkYXlzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIiBbbmdDbGFzc109XCJ3ZWVrZGF5Q2VsbENsYXNzZXMoKVwiPlxuICAgICAgICAgIDxzcGFuPnt7IGRheSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2VlayBvZiBtb250aC53ZWVrczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCIgW25nQ2xhc3NdPVwid2Vla1Jvd0NsYXNzZXMoKVwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjZWxsIG9mIHdlZWs7IHRyYWNrQnk6IHRyYWNrQnlEYXRlXCIgW25nQ2xhc3NdPVwiZGF5Q2VsbENsYXNzZXMoY2VsbClcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRheUJ1dHRvbkNsYXNzZXMoY2VsbClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiY2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImNlbGwuZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiY2VsbC5kYXRlIHwgZGF0ZSA6ICd5eXl5LU1NLWRkJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25EYXRlUHJlc3NlZChjZWxsKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiZGF5TGFiZWxDbGFzc2VzKGNlbGwpXCI+e3sgY2VsbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==