pdm-ui-kit 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +28 -0
  2. package/alert/alert-dialog.component.d.ts +14 -2
  3. package/alert/alert.module.d.ts +2 -1
  4. package/calendar/date-picker.component.d.ts +2 -1
  5. package/dialog/dialog.component.d.ts +18 -26
  6. package/dialog/dialog.module.d.ts +1 -1
  7. package/esm2020/alert/alert-dialog.component.mjs +101 -11
  8. package/esm2020/alert/alert.module.mjs +5 -4
  9. package/esm2020/calendar/date-picker.component.mjs +15 -5
  10. package/esm2020/dialog/dialog.component.mjs +43 -85
  11. package/esm2020/dialog/dialog.module.mjs +10 -4
  12. package/esm2020/src/alert/alert-dialog.component.mjs +101 -11
  13. package/esm2020/src/alert/alert.module.mjs +5 -4
  14. package/esm2020/src/calendar/date-picker.component.mjs +15 -5
  15. package/esm2020/src/dialog/dialog.component.mjs +43 -85
  16. package/esm2020/src/dialog/dialog.module.mjs +10 -4
  17. package/esm2020/src/utils/cn.mjs +19 -0
  18. package/esm2020/src/utils/public-api.mjs +2 -1
  19. package/fesm2015/pdm-ui-kit-src-alert.mjs +103 -12
  20. package/fesm2015/pdm-ui-kit-src-alert.mjs.map +1 -1
  21. package/fesm2015/pdm-ui-kit-src-calendar.mjs +14 -4
  22. package/fesm2015/pdm-ui-kit-src-calendar.mjs.map +1 -1
  23. package/fesm2015/pdm-ui-kit-src-dialog.mjs +50 -85
  24. package/fesm2015/pdm-ui-kit-src-dialog.mjs.map +1 -1
  25. package/fesm2015/pdm-ui-kit-src-utils.mjs +21 -1
  26. package/fesm2015/pdm-ui-kit-src-utils.mjs.map +1 -1
  27. package/fesm2015/pdm-ui-kit.mjs +175 -112
  28. package/fesm2015/pdm-ui-kit.mjs.map +1 -1
  29. package/fesm2020/pdm-ui-kit-src-alert.mjs +103 -12
  30. package/fesm2020/pdm-ui-kit-src-alert.mjs.map +1 -1
  31. package/fesm2020/pdm-ui-kit-src-calendar.mjs +14 -4
  32. package/fesm2020/pdm-ui-kit-src-calendar.mjs.map +1 -1
  33. package/fesm2020/pdm-ui-kit-src-dialog.mjs +50 -85
  34. package/fesm2020/pdm-ui-kit-src-dialog.mjs.map +1 -1
  35. package/fesm2020/pdm-ui-kit-src-utils.mjs +21 -1
  36. package/fesm2020/pdm-ui-kit-src-utils.mjs.map +1 -1
  37. package/fesm2020/pdm-ui-kit.mjs +175 -112
  38. package/fesm2020/pdm-ui-kit.mjs.map +1 -1
  39. package/package.json +3 -1
  40. package/src/alert/alert-dialog.component.d.ts +14 -2
  41. package/src/alert/alert.module.d.ts +2 -1
  42. package/src/calendar/date-picker.component.d.ts +2 -1
  43. package/src/dialog/dialog.component.d.ts +18 -26
  44. package/src/dialog/dialog.module.d.ts +1 -1
  45. package/src/utils/cn.d.ts +15 -0
  46. package/src/utils/public-api.d.ts +1 -0
@@ -27,6 +27,7 @@ export class PdmDatePickerComponent {
27
27
  this.labelClassName = "";
28
28
  this.className = "";
29
29
  this.triggerClassName = "";
30
+ this.iconOnly = false;
30
31
  /**
31
32
  * Additional CSS classes applied to the overlay panel.
32
33
  * Backward-compatible: mapped to `overlayOptions.panelClass` when `overlayOptions` is not set.
@@ -129,15 +130,22 @@ export class PdmDatePickerComponent {
129
130
  get rootClasses() {
130
131
  return [
131
132
  "grid gap-2",
132
- this.resolvedVariant === "range" ? "w-[280px]" : "w-[197px]",
133
+ this.iconOnly
134
+ ? "inline-grid w-auto"
135
+ : this.resolvedVariant === "range"
136
+ ? "w-[280px]"
137
+ : "w-[197px]",
133
138
  this.className,
134
139
  ];
135
140
  }
136
141
  get triggerClasses() {
137
142
  const focusStyle = this._open || this.triggerFocused;
138
143
  return [
139
- "border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive relative flex w-full appearance-none box-border items-center gap-2 overflow-hidden rounded-lg border border-solid bg-background px-3 py-[7.5px] text-left text-sm shadow-sm outline-none transition-colors",
144
+ "border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:ring-2 aria-invalid:ring-destructive aria-invalid:border-destructive relative flex appearance-none box-border items-center overflow-hidden rounded-lg border border-solid bg-background text-sm shadow-sm outline-none transition-colors",
140
145
  "min-h-[36px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
146
+ this.iconOnly
147
+ ? "size-9 justify-center p-0"
148
+ : "w-full gap-2 px-3 py-[7.5px] text-left",
141
149
  focusStyle ? "border-ring ring-2 ring-ring/50" : "",
142
150
  this.invalid ? "border-destructive ring-destructive/20" : "",
143
151
  this.triggerClassName,
@@ -285,10 +293,10 @@ export class PdmDatePickerComponent {
285
293
  }
286
294
  }
287
295
  PdmDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
288
- PdmDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDatePickerComponent, selector: "pdm-date-picker", inputs: { id: "id", variant: "variant", label: "label", labelClassName: "labelClassName", className: "className", triggerClassName: "triggerClassName", panelClassName: "panelClassName", overlayOptions: "overlayOptions", placeholder: "placeholder", rangePlaceholder: "rangePlaceholder", format: "format", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", allowSameDayRange: "allowSameDayRange", closeOnSelect: "closeOnSelect", minDate: "minDate", maxDate: "maxDate", minYear: "minYear", maxYear: "maxYear", disabledDates: "disabledDates", isDateDisabled: "isDateDisabled", open: "open", value: "value", rangeValue: "rangeValue" }, outputs: { valueChange: "valueChange", rangeValueChange: "rangeValueChange", openChange: "openChange", monthChange: "monthChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <button\n #triggerEl\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n</div>\n\n<ng-template #panelTemplate>\n <div [id]=\"panelId\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PdmLabelComponent, selector: "pdm-label", inputs: ["forId", "required", "className"] }, { kind: "component", type: i4.PdmCalendarComponent, selector: "pdm-calendar", inputs: ["variant", "className", "disabledDates", "minDate", "maxDate", "minYear", "maxYear", "isDateDisabled", "allowSameDayRange", "readonly", "value", "rangeValue", "month"], outputs: ["valueChange", "rangeValueChange", "monthChange", "dateClick", "disabledDateClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
296
+ PdmDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDatePickerComponent, selector: "pdm-date-picker", inputs: { id: "id", variant: "variant", label: "label", labelClassName: "labelClassName", className: "className", triggerClassName: "triggerClassName", iconOnly: "iconOnly", panelClassName: "panelClassName", overlayOptions: "overlayOptions", placeholder: "placeholder", rangePlaceholder: "rangePlaceholder", format: "format", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", allowSameDayRange: "allowSameDayRange", closeOnSelect: "closeOnSelect", minDate: "minDate", maxDate: "maxDate", minYear: "minYear", maxYear: "maxYear", disabledDates: "disabledDates", isDateDisabled: "isDateDisabled", open: "open", value: "value", rangeValue: "rangeValue" }, outputs: { valueChange: "valueChange", rangeValueChange: "rangeValueChange", openChange: "openChange", monthChange: "monthChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerEl"], descendants: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <button\n #triggerEl\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-label]=\"iconOnly ? displayText : null\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span *ngIf=\"!iconOnly\" [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n</div>\n\n<ng-template #panelTemplate>\n <div [id]=\"panelId\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PdmLabelComponent, selector: "pdm-label", inputs: ["forId", "required", "className"] }, { kind: "component", type: i4.PdmCalendarComponent, selector: "pdm-calendar", inputs: ["variant", "className", "disabledDates", "minDate", "maxDate", "minYear", "maxYear", "isDateDisabled", "allowSameDayRange", "readonly", "value", "rangeValue", "month"], outputs: ["valueChange", "rangeValueChange", "monthChange", "dateClick", "disabledDateClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
289
297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, decorators: [{
290
298
  type: Component,
291
- args: [{ selector: "pdm-date-picker", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <button\n #triggerEl\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n</div>\n\n<ng-template #panelTemplate>\n <div [id]=\"panelId\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n</ng-template>\n" }]
299
+ args: [{ selector: "pdm-date-picker", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <button\n #triggerEl\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-label]=\"iconOnly ? displayText : null\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span *ngIf=\"!iconOnly\" [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n</div>\n\n<ng-template #panelTemplate>\n <div [id]=\"panelId\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n</ng-template>\n" }]
292
300
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { triggerRef: [{
293
301
  type: ViewChild,
294
302
  args: ["triggerEl"]
@@ -307,6 +315,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
307
315
  type: Input
308
316
  }], triggerClassName: [{
309
317
  type: Input
318
+ }], iconOnly: [{
319
+ type: Input
310
320
  }], panelClassName: [{
311
321
  type: Input
312
322
  }], overlayOptions: [{
@@ -359,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
359
369
  type: HostListener,
360
370
  args: ["document:keydown.escape"]
361
371
  }] } });
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NhbGVuZGFyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYWxlbmRhci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsTUFBTSxJQUFJLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQU1uRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLG9CQUFvQixHQUNwQixNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFaEMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFPekIsTUFBTSxPQUFPLHNCQUFzQjtJQWNsQyxZQUNrQixHQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBa0M7UUFGbEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBaEI1QyxXQUFNLEdBQWdCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDNUMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVMLGVBQVUsR0FBRyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLGVBQVUsR0FBc0IsSUFBSSxDQUFDO1FBQ3JDLGdCQUFXLEdBQXdCLElBQUksQ0FB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QUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0gsSUFBSTtzQkFEUCxLQUFLO2dCQWNGLEtBQUs7c0JBRFIsS0FBSztnQkFVRixVQUFVO3NCQURiLEtBQUs7Z0JBMkpOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0TGlzdGVuZXIsXG5cdElucHV0LFxuXHRPbkRlc3Ryb3ksXG5cdE91dHB1dCxcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZvcm1hdCBhcyBmb3JtYXREYXRlRm5zIH0gZnJvbSBcImRhdGUtZm5zXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFBkbUNhbGVuZGFyUmFuZ2UsXG5cdFBkbUNhbGVuZGFyVmFyaWFudCxcbn0gZnJvbSBcIi4vY2FsZW5kYXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQZG1PdmVybGF5T3B0aW9ucyB9IGZyb20gXCJwZG0tdWkta2l0L3NyYy9vdmVybGF5XCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJsZVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tIFwicGRtLXVpLWtpdC9zcmMvb3ZlcmxheVwiO1xuaW1wb3J0IHtcblx0bWVyZ2VPdmVybGF5UGFuZWxDbGFzcyxcblx0T1ZFUkxBWV9CQVNFX1pfSU5ERVgsXG59IGZyb20gXCJwZG0tdWkta2l0L3NyYy9vdmVybGF5XCI7XG5cbmxldCBuZXh0RGF0ZVBpY2tlcklkID0gMDtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS1kYXRlLXBpY2tlclwiLFxuXHR0ZW1wbGF0ZVVybDogXCIuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sXCIsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZG1EYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBfcmFuZ2VWYWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIF9vcGVuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZUlkID0gYHBkbS1kYXRlLXBpY2tlci0keysrbmV4dERhdGVQaWNrZXJJZH1gO1xuXHRwcml2YXRlIHRyaWdnZXJGb2N1c2VkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgYmFja2Ryb3BTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG5cdEBWaWV3Q2hpbGQoXCJ0cmlnZ2VyRWxcIikgcHJpdmF0ZSB0cmlnZ2VyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cdEBWaWV3Q2hpbGQoXCJwYW5lbFRlbXBsYXRlXCIpIHByaXZhdGUgcGFuZWxUZW1wbGF0ZVJlZiE6IGFueTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvdmVybGF5OiBPdmVybGF5LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcblx0KSB7fVxuXG5cdEBJbnB1dCgpIGlkID0gXCJcIjtcblx0QElucHV0KCkgdmFyaWFudDogUGRtQ2FsZW5kYXJWYXJpYW50IHwgc3RyaW5nID0gXCJzaW5nbGVcIjtcblx0QElucHV0KCkgbGFiZWwgPSBcIlwiO1xuXHRASW5wdXQoKSBsYWJlbENsYXNzTmFtZSA9IFwiXCI7XG5cdEBJbnB1dCgpIGNsYXNzTmFtZSA9IFwiXCI7XG5cdEBJbnB1dCgpIHRyaWdnZXJDbGFzc05hbWUgPSBcIlwiO1xuXHQvKipcblx0ICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBhcHBsaWVkIHRvIHRoZSBvdmVybGF5IHBhbmVsLlxuXHQgKiBCYWNrd2FyZC1jb21wYXRpYmxlOiBtYXBwZWQgdG8gYG92ZXJsYXlPcHRpb25zLnBhbmVsQ2xhc3NgIHdoZW4gYG92ZXJsYXlPcHRpb25zYCBpcyBub3Qgc2V0LlxuXHQgKiBXaGVuIGJvdGggYXJlIHN1cHBsaWVkLCBgb3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzc2AgdGFrZXMgcHJlY2VkZW5jZS5cblx0ICovXG5cdEBJbnB1dCgpIHBhbmVsQ2xhc3NOYW1lID0gXCJcIjtcblx0LyoqXG5cdCAqIE9wdGlvbmFsIENESyBPdmVybGF5Q29uZmlnIG92ZXJyaWRlcy5cblx0ICogU2hhbGxvdy1tZXJnZWQgb24gdG9wIG9mIGNvbXBvbmVudCBkZWZhdWx0cyDigJQgY29uc3VtZXIgYWx3YXlzIHdpbnMuXG5cdCAqIFByb3ZpZGluZyBgcG9zaXRpb25TdHJhdGVneWAgb3IgYHNjcm9sbFN0cmF0ZWd5YCByZXBsYWNlcyB0aGUgY29tcG9uZW50IGRlZmF1bHQgZW50aXJlbHkuXG5cdCAqL1xuXHRASW5wdXQoKSBvdmVybGF5T3B0aW9ucz86IFBkbU92ZXJsYXlPcHRpb25zO1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiUGljayBhIGRhdGVcIjtcblx0QElucHV0KCkgcmFuZ2VQbGFjZWhvbGRlciA9IFwiUGljayBhIGRhdGUgcmFuZ2VcIjtcblx0QElucHV0KCkgZm9ybWF0ID0gXCJNTU0gZCwgeXl5eVwiO1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHRASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXHRASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXHRASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG5cdEBJbnB1dCgpIGFsbG93U2FtZURheVJhbmdlID0gdHJ1ZTtcblx0QElucHV0KCkgY2xvc2VPblNlbGVjdCA9IHRydWU7XG5cdEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblx0QElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXHRASW5wdXQoKSBtaW5ZZWFyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblx0QElucHV0KCkgbWF4WWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuXHRASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG5cdEBPdXRwdXQoKSByYW5nZVZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQZG1DYWxlbmRhclJhbmdlIHwgbnVsbD4oKTtcblx0QE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cdEBPdXRwdXQoKSBtb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuXHRASW5wdXQoKVxuXHRzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuXHRcdGlmICh0aGlzLl9vcGVuID09PSAhIXZhbHVlKSByZXR1cm47XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLm9wZW5QYW5lbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHR9XG5cdH1cblx0Z2V0IG9wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX29wZW47XG5cdH1cblxuXHRASW5wdXQoKVxuXHRzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG5cdFx0dGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cdGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHR9XG5cblx0QElucHV0KClcblx0c2V0IHJhbmdlVmFsdWUodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKSB7XG5cdFx0dGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG5cdFx0XHQ/IHtcblx0XHRcdFx0XHRzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcblx0XHRcdFx0XHRlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpLFxuXHRcdFx0XHR9XG5cdFx0XHQ6IG51bGw7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblx0Z2V0IHJhbmdlVmFsdWUoKTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLl9yYW5nZVZhbHVlO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95T3ZlcmxheSgpO1xuXHR9XG5cblx0Z2V0IHJlc29sdmVkVmFyaWFudCgpOiBQZG1DYWxlbmRhclZhcmlhbnQge1xuXHRcdHJldHVybiB0aGlzLnZhcmlhbnQgPT09IFwicmFuZ2VcIiA/IFwicmFuZ2VcIiA6IFwic2luZ2xlXCI7XG5cdH1cblxuXHRnZXQgdHJpZ2dlcklkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgYCR7dGhpcy5pbnN0YW5jZUlkfS10cmlnZ2VyYDtcblx0fVxuXG5cdGdldCBwYW5lbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGAke3RoaXMuaWQgfHwgdGhpcy5pbnN0YW5jZUlkfS1wYW5lbGA7XG5cdH1cblxuXHRnZXQgaGFzU2luZ2xlVmFsdWUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSBcInNpbmdsZVwiICYmICEhdGhpcy5fdmFsdWU7XG5cdH1cblxuXHRnZXQgaGFzUmFuZ2VWYWx1ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09IFwicmFuZ2VcIiAmJiAhIXRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0O1xuXHR9XG5cblx0Z2V0IGRpc3BsYXlUZXh0KCk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUodGhpcy5fdmFsdWUpIDogdGhpcy5wbGFjZWhvbGRlcjtcblx0XHR9XG5cblx0XHRjb25zdCBzdGFydCA9IHRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0ID8/IG51bGw7XG5cdFx0Y29uc3QgZW5kID0gdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kID8/IG51bGw7XG5cblx0XHRpZiAoIXN0YXJ0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yYW5nZVBsYWNlaG9sZGVyO1xuXHRcdH1cblxuXHRcdGlmICghZW5kKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5mb3JtYXREYXRlKHN0YXJ0KX0gLWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke3RoaXMuZm9ybWF0RGF0ZShzdGFydCl9IC0gJHt0aGlzLmZvcm1hdERhdGUoZW5kKX1gO1xuXHR9XG5cblx0Z2V0IHRleHRDbGFzc2VzKCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBoYXNWYWx1ZSA9XG5cdFx0XHR0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJzaW5nbGVcIlxuXHRcdFx0XHQ/IHRoaXMuaGFzU2luZ2xlVmFsdWVcblx0XHRcdFx0OiB0aGlzLmhhc1JhbmdlVmFsdWU7XG5cdFx0cmV0dXJuIFtcblx0XHRcdFwibWluLXctMCBmbGV4LTEgdHJ1bmNhdGUgdGV4dC1sZWZ0IHRleHQtc20gbGVhZGluZy01XCIsXG5cdFx0XHRoYXNWYWx1ZSA/IFwidGV4dC1mb3JlZ3JvdW5kXCIgOiBcInRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiLFxuXHRcdF07XG5cdH1cblxuXHRnZXQgcm9vdENsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHRcImdyaWQgZ2FwLTJcIixcblx0XHRcdHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSBcInJhbmdlXCIgPyBcInctWzI4MHB4XVwiIDogXCJ3LVsxOTdweF1cIixcblx0XHRcdHRoaXMuY2xhc3NOYW1lLFxuXHRcdF07XG5cdH1cblxuXHRnZXQgdHJpZ2dlckNsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGZvY3VzU3R5bGUgPSB0aGlzLl9vcGVuIHx8IHRoaXMudHJpZ2dlckZvY3VzZWQ7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJib3JkZXItaW5wdXQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy0yIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgcmVsYXRpdmUgZmxleCB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGdhcC0yIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc29saWQgYmctYmFja2dyb3VuZCBweC0zIHB5LVs3LjVweF0gdGV4dC1sZWZ0IHRleHQtc20gc2hhZG93LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9yc1wiLFxuXHRcdFx0XCJtaW4taC1bMzZweF0gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MFwiLFxuXHRcdFx0Zm9jdXNTdHlsZSA/IFwiYm9yZGVyLXJpbmcgcmluZy0yIHJpbmctcmluZy81MFwiIDogXCJcIixcblx0XHRcdHRoaXMuaW52YWxpZCA/IFwiYm9yZGVyLWRlc3RydWN0aXZlIHJpbmctZGVzdHJ1Y3RpdmUvMjBcIiA6IFwiXCIsXG5cdFx0XHR0aGlzLnRyaWdnZXJDbGFzc05hbWUsXG5cdFx0XTtcblx0fVxuXG5cdHRvZ2dsZU9wZW4oKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3BlbighdGhpcy5fb3Blbik7XG5cdH1cblxuXHRvblRyaWdnZXJGb2N1cygpOiB2b2lkIHtcblx0XHR0aGlzLnRyaWdnZXJGb2N1c2VkID0gdHJ1ZTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdG9uVHJpZ2dlckJsdXIoKTogdm9pZCB7XG5cdFx0dGhpcy50cmlnZ2VyRm9jdXNlZCA9IGZhbHNlO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0b25DYWxlbmRhclZhbHVlQ2hhbmdlKHZhbHVlOiBEYXRlIHwgbnVsbCk6IHZvaWQge1xuXHRcdHRoaXMuX3ZhbHVlID0gdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlKTtcblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUgPyB0aGlzLmNsb25lRGF0ZSh0aGlzLl92YWx1ZSkgOiBudWxsKTtcblxuXHRcdGlmICh0aGlzLmNsb3NlT25TZWxlY3QgJiYgdGhpcy5fdmFsdWUpIHtcblx0XHRcdHRoaXMuc2V0T3BlbihmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uQ2FsZW5kYXJSYW5nZVZhbHVlQ2hhbmdlKHZhbHVlOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCk6IHZvaWQge1xuXHRcdHRoaXMuX3JhbmdlVmFsdWUgPSB2YWx1ZVxuXHRcdFx0PyB7XG5cdFx0XHRcdFx0c3RhcnQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5zdGFydCksXG5cdFx0XHRcdFx0ZW5kOiB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUuZW5kKSxcblx0XHRcdFx0fVxuXHRcdFx0OiBudWxsO1xuXG5cdFx0dGhpcy5yYW5nZVZhbHVlQ2hhbmdlLmVtaXQoXG5cdFx0XHR0aGlzLl9yYW5nZVZhbHVlXG5cdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0c3RhcnQ6IHRoaXMuX3JhbmdlVmFsdWUuc3RhcnRcblx0XHRcdFx0XHRcdFx0PyB0aGlzLmNsb25lRGF0ZSh0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KVxuXHRcdFx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdFx0XHRlbmQ6IHRoaXMuX3JhbmdlVmFsdWUuZW5kXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5jbG9uZURhdGUodGhpcy5fcmFuZ2VWYWx1ZS5lbmQpXG5cdFx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdDogbnVsbCxcblx0XHQpO1xuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5jbG9zZU9uU2VsZWN0ICYmXG5cdFx0XHR0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJlxuXHRcdFx0dGhpcy5fcmFuZ2VWYWx1ZT8uZW5kXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldE9wZW4oZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0b25DYWxlbmRhck1vbnRoQ2hhbmdlKG1vbnRoOiBEYXRlKTogdm9pZCB7XG5cdFx0dGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKG1vbnRoKSk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGVcIilcblx0b25Fc2NhcGUoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX29wZW4pIHtcblx0XHRcdHRoaXMuc2V0T3BlbihmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzZXRPcGVuKG5leHRPcGVuOiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX29wZW4gPT09IG5leHRPcGVuKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKG5leHRPcGVuKSB7XG5cdFx0XHR0aGlzLm9wZW5QYW5lbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9wZW5QYW5lbCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5vdmVybGF5UmVmKSByZXR1cm47XG5cblx0XHRjb25zdCB0cmlnZ2VyRWwgPSB0aGlzLnRyaWdnZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKCF0cmlnZ2VyRWwpIHJldHVybjtcblxuXHRcdHRoaXMuX29wZW4gPSB0cnVlO1xuXHRcdHRoaXMub3BlbkNoYW5nZS5lbWl0KHRydWUpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG5cdFx0Y29uc3QgcG9zaXRpb25TdHJhdGVneSA9IGNyZWF0ZUZsZXhpYmxlUG9zaXRpb25TdHJhdGVneShcblx0XHRcdHRoaXMub3ZlcmxheSxcblx0XHRcdHRyaWdnZXJFbCxcblx0XHRcdDgsXG5cdFx0KTtcblxuXHRcdC8vIENSSVRJQ0FMOiBVc2UgbWVyZ2VPdmVybGF5UGFuZWxDbGFzcyB0byBlbnN1cmUgei1pbmRleCBpcyBuZXZlciBsb3N0LlxuXHRcdC8vIENvbnN1bWVyIGNsYXNzZXMgYXJlIGFwcGVuZGVkIEFGVEVSIGJhc2Ugei1pbmRleC5cblx0XHRjb25zdCB6SW5kZXhFbmZvcmNlZCA9IG1lcmdlT3ZlcmxheVBhbmVsQ2xhc3MoXG5cdFx0XHRPVkVSTEFZX0JBU0VfWl9JTkRFWCxcblx0XHRcdHRoaXMucGFuZWxDbGFzc05hbWUsXG5cdFx0KTtcblxuXHRcdC8vIFJlc29sdmUgcGFuZWxDbGFzczogb3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzcyB3aW5zOyBvdGhlcndpc2UgdXNlIHotaW5kZXggZW5mb3JjZWQuXG5cdFx0Y29uc3QgcmVzb2x2ZWRQYW5lbENsYXNzID0gdGhpcy5vdmVybGF5T3B0aW9ucz8ucGFuZWxDbGFzc1xuXHRcdFx0PyBtZXJnZU92ZXJsYXlQYW5lbENsYXNzKFxuXHRcdFx0XHRcdE9WRVJMQVlfQkFTRV9aX0lOREVYLFxuXHRcdFx0XHRcdHRoaXMub3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzcyxcblx0XHRcdFx0KVxuXHRcdFx0OiB6SW5kZXhFbmZvcmNlZDtcblxuXHRcdHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuXHRcdFx0cG9zaXRpb25TdHJhdGVneSxcblx0XHRcdHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG5cdFx0XHQvLyBDb25zdW1lciBvdmVycmlkZXMgYXJlIHNwcmVhZCBmaXJzdC5cblx0XHRcdC4uLnRoaXMub3ZlcmxheU9wdGlvbnMsXG5cdFx0XHQvLyBwYW5lbENsYXNzIGFsd2F5cyBlbmZvcmNlZCBsYXN0IHRvIHByZXNlcnZlIHotaW5kZXguXG5cdFx0XHRwYW5lbENsYXNzOiByZXNvbHZlZFBhbmVsQ2xhc3MsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG5cdFx0XHR0aGlzLnBhbmVsVGVtcGxhdGVSZWYsXG5cdFx0XHR0aGlzLnZpZXdDb250YWluZXJSZWYsXG5cdFx0KTtcblx0XHR0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG5cblx0XHR0aGlzLmJhY2tkcm9wU3ViID0gdGhpcy5vdmVybGF5UmVmXG5cdFx0XHQub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuXHRcdFx0LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIE5vZGU7XG5cdFx0XHRcdGlmICghdHJpZ2dlckVsLmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMub3ZlcmxheVJlZiAmJiAhdGhpcy5fb3BlbikgcmV0dXJuO1xuXG5cdFx0dGhpcy5fb3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcblx0XHR0aGlzLmRlc3Ryb3lPdmVybGF5KCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmJhY2tkcm9wU3ViKSB7XG5cdFx0XHR0aGlzLmJhY2tkcm9wU3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR0aGlzLmJhY2tkcm9wU3ViID0gbnVsbDtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3ZlcmxheVJlZikge1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZm9ybWF0RGF0ZUZucyhkYXRlLCB0aGlzLmZvcm1hdCB8fCBcIk1NTSBkLCB5eXl5XCIpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZvcm1hdERhdGVGbnMoZGF0ZSwgXCJNTU0gZCwgeXl5eVwiKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG5vcm1hbGl6ZURhdGUodmFsdWU6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRGF0ZSB8IG51bGwge1xuXHRcdGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgRGF0ZSh2YWx1ZS5nZXRGdWxsWWVhcigpLCB2YWx1ZS5nZXRNb250aCgpLCB2YWx1ZS5nZXREYXRlKCkpO1xuXHR9XG5cblx0cHJpdmF0ZSBjbG9uZURhdGUoZGF0ZTogRGF0ZSk6IERhdGUge1xuXHRcdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXHR9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInJvb3RDbGFzc2VzXCI+XG4gIDxwZG0tbGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JJZF09XCJ0cmlnZ2VySWRcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbY2xhc3NOYW1lXT1cImxhYmVsQ2xhc3NOYW1lXCI+XG4gICAge3sgbGFiZWwgfX1cbiAgPC9wZG0tbGFiZWw+XG5cbiAgPGJ1dHRvblxuICAgICN0cmlnZ2VyRWxcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbaWRdPVwidHJpZ2dlcklkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlblwiXG4gICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJwYW5lbElkXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidkaWFsb2cnXCJcbiAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgW25nQ2xhc3NdPVwidHJpZ2dlckNsYXNzZXNcIlxuICAgIFthdHRyLnRpdGxlXT1cImRpc3BsYXlUZXh0XCJcbiAgICAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCJcbiAgICAoZm9jdXMpPVwib25UcmlnZ2VyRm9jdXMoKVwiXG4gICAgKGJsdXIpPVwib25UcmlnZ2VyQmx1cigpXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwiZmxleCBoLTUgdy01IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTAuNSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNOCAydjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTYgMnY0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCI0LjVcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMTYuNVwiIHJ4PVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcmVjdD5cbiAgICAgICAgPHBhdGggZD1cIk0zIDkuNWgxOFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgIDwvc3ZnPlxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuIFtuZ0NsYXNzXT1cInRleHRDbGFzc2VzXCI+e3sgZGlzcGxheVRleHQgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGFuZWxUZW1wbGF0ZT5cbiAgPGRpdiBbaWRdPVwicGFuZWxJZFwiIHJvbGU9XCJkaWFsb2dcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWwgPyB0cmlnZ2VySWQgOiBudWxsXCI+XG4gICAgPHBkbS1jYWxlbmRhclxuICAgICAgW3ZhcmlhbnRdPVwicmVzb2x2ZWRWYXJpYW50XCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICBbcmFuZ2VWYWx1ZV09XCJyYW5nZVZhbHVlXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICBbYWxsb3dTYW1lRGF5UmFuZ2VdPVwiYWxsb3dTYW1lRGF5UmFuZ2VcIlxuICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIFttaW5ZZWFyXT1cIm1pblllYXJcIlxuICAgICAgW21heFllYXJdPVwibWF4WWVhclwiXG4gICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgIFtpc0RhdGVEaXNhYmxlZF09XCJpc0RhdGVEaXNhYmxlZFwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25DYWxlbmRhclZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgKHJhbmdlVmFsdWVDaGFuZ2UpPVwib25DYWxlbmRhclJhbmdlVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAobW9udGhDaGFuZ2UpPVwib25DYWxlbmRhck1vbnRoQ2hhbmdlKCRldmVudClcIlxuICAgID48L3BkbS1jYWxlbmRhcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NhbGVuZGFyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYWxlbmRhci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsTUFBTSxJQUFJLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQU1uRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLG9CQUFvQixHQUNwQixNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFaEMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFPekIsTUFBTSxPQUFPLHNCQUFzQjtJQWNsQyxZQUNrQixHQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBa0M7UUFGbEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBaEI1QyxXQUFNLEdBQWdCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUE0QixJQUFJLENBQUM7UUFDNUMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVMLGVBQVUsR0FBRyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLGVBQVUsR0FBc0IsSUFBSSxDQUFDO1FBQ3JDLGdCQUFXLEdBQXdCLElBQUksQ0FB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Q0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0gsSUFBSTtzQkFEUCxLQUFLO2dCQWNGLEtBQUs7c0JBRFIsS0FBSztnQkFVRixVQUFVO3NCQURiLEtBQUs7Z0JBa0tOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0TGlzdGVuZXIsXG5cdElucHV0LFxuXHRPbkRlc3Ryb3ksXG5cdE91dHB1dCxcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZvcm1hdCBhcyBmb3JtYXREYXRlRm5zIH0gZnJvbSBcImRhdGUtZm5zXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFBkbUNhbGVuZGFyUmFuZ2UsXG5cdFBkbUNhbGVuZGFyVmFyaWFudCxcbn0gZnJvbSBcIi4vY2FsZW5kYXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQZG1PdmVybGF5T3B0aW9ucyB9IGZyb20gXCJwZG0tdWkta2l0L3NyYy9vdmVybGF5XCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJsZVBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tIFwicGRtLXVpLWtpdC9zcmMvb3ZlcmxheVwiO1xuaW1wb3J0IHtcblx0bWVyZ2VPdmVybGF5UGFuZWxDbGFzcyxcblx0T1ZFUkxBWV9CQVNFX1pfSU5ERVgsXG59IGZyb20gXCJwZG0tdWkta2l0L3NyYy9vdmVybGF5XCI7XG5cbmxldCBuZXh0RGF0ZVBpY2tlcklkID0gMDtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS1kYXRlLXBpY2tlclwiLFxuXHR0ZW1wbGF0ZVVybDogXCIuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sXCIsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZG1EYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBfcmFuZ2VWYWx1ZTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIF9vcGVuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZUlkID0gYHBkbS1kYXRlLXBpY2tlci0keysrbmV4dERhdGVQaWNrZXJJZH1gO1xuXHRwcml2YXRlIHRyaWdnZXJGb2N1c2VkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgYmFja2Ryb3BTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG5cdEBWaWV3Q2hpbGQoXCJ0cmlnZ2VyRWxcIikgcHJpdmF0ZSB0cmlnZ2VyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cdEBWaWV3Q2hpbGQoXCJwYW5lbFRlbXBsYXRlXCIpIHByaXZhdGUgcGFuZWxUZW1wbGF0ZVJlZiE6IGFueTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvdmVybGF5OiBPdmVybGF5LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcblx0KSB7fVxuXG5cdEBJbnB1dCgpIGlkID0gXCJcIjtcblx0QElucHV0KCkgdmFyaWFudDogUGRtQ2FsZW5kYXJWYXJpYW50IHwgc3RyaW5nID0gXCJzaW5nbGVcIjtcblx0QElucHV0KCkgbGFiZWwgPSBcIlwiO1xuXHRASW5wdXQoKSBsYWJlbENsYXNzTmFtZSA9IFwiXCI7XG5cdEBJbnB1dCgpIGNsYXNzTmFtZSA9IFwiXCI7XG5cdEBJbnB1dCgpIHRyaWdnZXJDbGFzc05hbWUgPSBcIlwiO1xuXHRASW5wdXQoKSBpY29uT25seSA9IGZhbHNlO1xuXHQvKipcblx0ICogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBhcHBsaWVkIHRvIHRoZSBvdmVybGF5IHBhbmVsLlxuXHQgKiBCYWNrd2FyZC1jb21wYXRpYmxlOiBtYXBwZWQgdG8gYG92ZXJsYXlPcHRpb25zLnBhbmVsQ2xhc3NgIHdoZW4gYG92ZXJsYXlPcHRpb25zYCBpcyBub3Qgc2V0LlxuXHQgKiBXaGVuIGJvdGggYXJlIHN1cHBsaWVkLCBgb3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzc2AgdGFrZXMgcHJlY2VkZW5jZS5cblx0ICovXG5cdEBJbnB1dCgpIHBhbmVsQ2xhc3NOYW1lID0gXCJcIjtcblx0LyoqXG5cdCAqIE9wdGlvbmFsIENESyBPdmVybGF5Q29uZmlnIG92ZXJyaWRlcy5cblx0ICogU2hhbGxvdy1tZXJnZWQgb24gdG9wIG9mIGNvbXBvbmVudCBkZWZhdWx0cyDigJQgY29uc3VtZXIgYWx3YXlzIHdpbnMuXG5cdCAqIFByb3ZpZGluZyBgcG9zaXRpb25TdHJhdGVneWAgb3IgYHNjcm9sbFN0cmF0ZWd5YCByZXBsYWNlcyB0aGUgY29tcG9uZW50IGRlZmF1bHQgZW50aXJlbHkuXG5cdCAqL1xuXHRASW5wdXQoKSBvdmVybGF5T3B0aW9ucz86IFBkbU92ZXJsYXlPcHRpb25zO1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiUGljayBhIGRhdGVcIjtcblx0QElucHV0KCkgcmFuZ2VQbGFjZWhvbGRlciA9IFwiUGljayBhIGRhdGUgcmFuZ2VcIjtcblx0QElucHV0KCkgZm9ybWF0ID0gXCJNTU0gZCwgeXl5eVwiO1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHRASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXHRASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXHRASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG5cdEBJbnB1dCgpIGFsbG93U2FtZURheVJhbmdlID0gdHJ1ZTtcblx0QElucHV0KCkgY2xvc2VPblNlbGVjdCA9IHRydWU7XG5cdEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblx0QElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXHRASW5wdXQoKSBtaW5ZZWFyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblx0QElucHV0KCkgbWF4WWVhcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cdEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuXHRASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG5cdEBPdXRwdXQoKSByYW5nZVZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQZG1DYWxlbmRhclJhbmdlIHwgbnVsbD4oKTtcblx0QE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cdEBPdXRwdXQoKSBtb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuXHRASW5wdXQoKVxuXHRzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuXHRcdGlmICh0aGlzLl9vcGVuID09PSAhIXZhbHVlKSByZXR1cm47XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLm9wZW5QYW5lbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHR9XG5cdH1cblx0Z2V0IG9wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX29wZW47XG5cdH1cblxuXHRASW5wdXQoKVxuXHRzZXQgdmFsdWUodmFsdWU6IERhdGUgfCBudWxsKSB7XG5cdFx0dGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cdGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHR9XG5cblx0QElucHV0KClcblx0c2V0IHJhbmdlVmFsdWUodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKSB7XG5cdFx0dGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG5cdFx0XHQ/IHtcblx0XHRcdFx0XHRzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcblx0XHRcdFx0XHRlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpLFxuXHRcdFx0XHR9XG5cdFx0XHQ6IG51bGw7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblx0Z2V0IHJhbmdlVmFsdWUoKTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLl9yYW5nZVZhbHVlO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95T3ZlcmxheSgpO1xuXHR9XG5cblx0Z2V0IHJlc29sdmVkVmFyaWFudCgpOiBQZG1DYWxlbmRhclZhcmlhbnQge1xuXHRcdHJldHVybiB0aGlzLnZhcmlhbnQgPT09IFwicmFuZ2VcIiA/IFwicmFuZ2VcIiA6IFwic2luZ2xlXCI7XG5cdH1cblxuXHRnZXQgdHJpZ2dlcklkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaWQgfHwgYCR7dGhpcy5pbnN0YW5jZUlkfS10cmlnZ2VyYDtcblx0fVxuXG5cdGdldCBwYW5lbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGAke3RoaXMuaWQgfHwgdGhpcy5pbnN0YW5jZUlkfS1wYW5lbGA7XG5cdH1cblxuXHRnZXQgaGFzU2luZ2xlVmFsdWUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSBcInNpbmdsZVwiICYmICEhdGhpcy5fdmFsdWU7XG5cdH1cblxuXHRnZXQgaGFzUmFuZ2VWYWx1ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09IFwicmFuZ2VcIiAmJiAhIXRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0O1xuXHR9XG5cblx0Z2V0IGRpc3BsYXlUZXh0KCk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUodGhpcy5fdmFsdWUpIDogdGhpcy5wbGFjZWhvbGRlcjtcblx0XHR9XG5cblx0XHRjb25zdCBzdGFydCA9IHRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0ID8/IG51bGw7XG5cdFx0Y29uc3QgZW5kID0gdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kID8/IG51bGw7XG5cblx0XHRpZiAoIXN0YXJ0KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yYW5nZVBsYWNlaG9sZGVyO1xuXHRcdH1cblxuXHRcdGlmICghZW5kKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5mb3JtYXREYXRlKHN0YXJ0KX0gLWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke3RoaXMuZm9ybWF0RGF0ZShzdGFydCl9IC0gJHt0aGlzLmZvcm1hdERhdGUoZW5kKX1gO1xuXHR9XG5cblx0Z2V0IHRleHRDbGFzc2VzKCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBoYXNWYWx1ZSA9XG5cdFx0XHR0aGlzLnJlc29sdmVkVmFyaWFudCA9PT0gXCJzaW5nbGVcIlxuXHRcdFx0XHQ/IHRoaXMuaGFzU2luZ2xlVmFsdWVcblx0XHRcdFx0OiB0aGlzLmhhc1JhbmdlVmFsdWU7XG5cdFx0cmV0dXJuIFtcblx0XHRcdFwibWluLXctMCBmbGV4LTEgdHJ1bmNhdGUgdGV4dC1sZWZ0IHRleHQtc20gbGVhZGluZy01XCIsXG5cdFx0XHRoYXNWYWx1ZSA/IFwidGV4dC1mb3JlZ3JvdW5kXCIgOiBcInRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiLFxuXHRcdF07XG5cdH1cblxuXHRnZXQgcm9vdENsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHRcImdyaWQgZ2FwLTJcIixcblx0XHRcdHRoaXMuaWNvbk9ubHlcblx0XHRcdFx0PyBcImlubGluZS1ncmlkIHctYXV0b1wiXG5cdFx0XHRcdDogdGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09IFwicmFuZ2VcIlxuXHRcdFx0XHRcdD8gXCJ3LVsyODBweF1cIlxuXHRcdFx0XHRcdDogXCJ3LVsxOTdweF1cIixcblx0XHRcdHRoaXMuY2xhc3NOYW1lLFxuXHRcdF07XG5cdH1cblxuXHRnZXQgdHJpZ2dlckNsYXNzZXMoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGZvY3VzU3R5bGUgPSB0aGlzLl9vcGVuIHx8IHRoaXMudHJpZ2dlckZvY3VzZWQ7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0XCJib3JkZXItaW5wdXQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy0yIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgcmVsYXRpdmUgZmxleCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zb2xpZCBiZy1iYWNrZ3JvdW5kIHRleHQtc20gc2hhZG93LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9yc1wiLFxuXHRcdFx0XCJtaW4taC1bMzZweF0gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MFwiLFxuXHRcdFx0dGhpcy5pY29uT25seVxuXHRcdFx0XHQ/IFwic2l6ZS05IGp1c3RpZnktY2VudGVyIHAtMFwiXG5cdFx0XHRcdDogXCJ3LWZ1bGwgZ2FwLTIgcHgtMyBweS1bNy41cHhdIHRleHQtbGVmdFwiLFxuXHRcdFx0Zm9jdXNTdHlsZSA/IFwiYm9yZGVyLXJpbmcgcmluZy0yIHJpbmctcmluZy81MFwiIDogXCJcIixcblx0XHRcdHRoaXMuaW52YWxpZCA/IFwiYm9yZGVyLWRlc3RydWN0aXZlIHJpbmctZGVzdHJ1Y3RpdmUvMjBcIiA6IFwiXCIsXG5cdFx0XHR0aGlzLnRyaWdnZXJDbGFzc05hbWUsXG5cdFx0XTtcblx0fVxuXG5cdHRvZ2dsZU9wZW4oKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3BlbighdGhpcy5fb3Blbik7XG5cdH1cblxuXHRvblRyaWdnZXJGb2N1cygpOiB2b2lkIHtcblx0XHR0aGlzLnRyaWdnZXJGb2N1c2VkID0gdHJ1ZTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdG9uVHJpZ2dlckJsdXIoKTogdm9pZCB7XG5cdFx0dGhpcy50cmlnZ2VyRm9jdXNlZCA9IGZhbHNlO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0b25DYWxlbmRhclZhbHVlQ2hhbmdlKHZhbHVlOiBEYXRlIHwgbnVsbCk6IHZvaWQge1xuXHRcdHRoaXMuX3ZhbHVlID0gdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlKTtcblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUgPyB0aGlzLmNsb25lRGF0ZSh0aGlzLl92YWx1ZSkgOiBudWxsKTtcblxuXHRcdGlmICh0aGlzLmNsb3NlT25TZWxlY3QgJiYgdGhpcy5fdmFsdWUpIHtcblx0XHRcdHRoaXMuc2V0T3BlbihmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uQ2FsZW5kYXJSYW5nZVZhbHVlQ2hhbmdlKHZhbHVlOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCk6IHZvaWQge1xuXHRcdHRoaXMuX3JhbmdlVmFsdWUgPSB2YWx1ZVxuXHRcdFx0PyB7XG5cdFx0XHRcdFx0c3RhcnQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5zdGFydCksXG5cdFx0XHRcdFx0ZW5kOiB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUuZW5kKSxcblx0XHRcdFx0fVxuXHRcdFx0OiBudWxsO1xuXG5cdFx0dGhpcy5yYW5nZVZhbHVlQ2hhbmdlLmVtaXQoXG5cdFx0XHR0aGlzLl9yYW5nZVZhbHVlXG5cdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0c3RhcnQ6IHRoaXMuX3JhbmdlVmFsdWUuc3RhcnRcblx0XHRcdFx0XHRcdFx0PyB0aGlzLmNsb25lRGF0ZSh0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0KVxuXHRcdFx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdFx0XHRlbmQ6IHRoaXMuX3JhbmdlVmFsdWUuZW5kXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5jbG9uZURhdGUodGhpcy5fcmFuZ2VWYWx1ZS5lbmQpXG5cdFx0XHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdDogbnVsbCxcblx0XHQpO1xuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5jbG9zZU9uU2VsZWN0ICYmXG5cdFx0XHR0aGlzLl9yYW5nZVZhbHVlPy5zdGFydCAmJlxuXHRcdFx0dGhpcy5fcmFuZ2VWYWx1ZT8uZW5kXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldE9wZW4oZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0b25DYWxlbmRhck1vbnRoQ2hhbmdlKG1vbnRoOiBEYXRlKTogdm9pZCB7XG5cdFx0dGhpcy5tb250aENoYW5nZS5lbWl0KHRoaXMuY2xvbmVEYXRlKG1vbnRoKSk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGVcIilcblx0b25Fc2NhcGUoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX29wZW4pIHtcblx0XHRcdHRoaXMuc2V0T3BlbihmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzZXRPcGVuKG5leHRPcGVuOiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX29wZW4gPT09IG5leHRPcGVuKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKG5leHRPcGVuKSB7XG5cdFx0XHR0aGlzLm9wZW5QYW5lbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9wZW5QYW5lbCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5vdmVybGF5UmVmKSByZXR1cm47XG5cblx0XHRjb25zdCB0cmlnZ2VyRWwgPSB0aGlzLnRyaWdnZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKCF0cmlnZ2VyRWwpIHJldHVybjtcblxuXHRcdHRoaXMuX29wZW4gPSB0cnVlO1xuXHRcdHRoaXMub3BlbkNoYW5nZS5lbWl0KHRydWUpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG5cdFx0Y29uc3QgcG9zaXRpb25TdHJhdGVneSA9IGNyZWF0ZUZsZXhpYmxlUG9zaXRpb25TdHJhdGVneShcblx0XHRcdHRoaXMub3ZlcmxheSxcblx0XHRcdHRyaWdnZXJFbCxcblx0XHRcdDgsXG5cdFx0KTtcblxuXHRcdC8vIENSSVRJQ0FMOiBVc2UgbWVyZ2VPdmVybGF5UGFuZWxDbGFzcyB0byBlbnN1cmUgei1pbmRleCBpcyBuZXZlciBsb3N0LlxuXHRcdC8vIENvbnN1bWVyIGNsYXNzZXMgYXJlIGFwcGVuZGVkIEFGVEVSIGJhc2Ugei1pbmRleC5cblx0XHRjb25zdCB6SW5kZXhFbmZvcmNlZCA9IG1lcmdlT3ZlcmxheVBhbmVsQ2xhc3MoXG5cdFx0XHRPVkVSTEFZX0JBU0VfWl9JTkRFWCxcblx0XHRcdHRoaXMucGFuZWxDbGFzc05hbWUsXG5cdFx0KTtcblxuXHRcdC8vIFJlc29sdmUgcGFuZWxDbGFzczogb3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzcyB3aW5zOyBvdGhlcndpc2UgdXNlIHotaW5kZXggZW5mb3JjZWQuXG5cdFx0Y29uc3QgcmVzb2x2ZWRQYW5lbENsYXNzID0gdGhpcy5vdmVybGF5T3B0aW9ucz8ucGFuZWxDbGFzc1xuXHRcdFx0PyBtZXJnZU92ZXJsYXlQYW5lbENsYXNzKFxuXHRcdFx0XHRcdE9WRVJMQVlfQkFTRV9aX0lOREVYLFxuXHRcdFx0XHRcdHRoaXMub3ZlcmxheU9wdGlvbnMucGFuZWxDbGFzcyxcblx0XHRcdFx0KVxuXHRcdFx0OiB6SW5kZXhFbmZvcmNlZDtcblxuXHRcdHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuXHRcdFx0cG9zaXRpb25TdHJhdGVneSxcblx0XHRcdHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG5cdFx0XHQvLyBDb25zdW1lciBvdmVycmlkZXMgYXJlIHNwcmVhZCBmaXJzdC5cblx0XHRcdC4uLnRoaXMub3ZlcmxheU9wdGlvbnMsXG5cdFx0XHQvLyBwYW5lbENsYXNzIGFsd2F5cyBlbmZvcmNlZCBsYXN0IHRvIHByZXNlcnZlIHotaW5kZXguXG5cdFx0XHRwYW5lbENsYXNzOiByZXNvbHZlZFBhbmVsQ2xhc3MsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG5cdFx0XHR0aGlzLnBhbmVsVGVtcGxhdGVSZWYsXG5cdFx0XHR0aGlzLnZpZXdDb250YWluZXJSZWYsXG5cdFx0KTtcblx0XHR0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG5cblx0XHR0aGlzLmJhY2tkcm9wU3ViID0gdGhpcy5vdmVybGF5UmVmXG5cdFx0XHQub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuXHRcdFx0LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIE5vZGU7XG5cdFx0XHRcdGlmICghdHJpZ2dlckVsLmNvbnRhaW5zKHRhcmdldCkpIHtcblx0XHRcdFx0XHR0aGlzLmNsb3NlUGFuZWwoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgY2xvc2VQYW5lbCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMub3ZlcmxheVJlZiAmJiAhdGhpcy5fb3BlbikgcmV0dXJuO1xuXG5cdFx0dGhpcy5fb3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcblx0XHR0aGlzLmRlc3Ryb3lPdmVybGF5KCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lPdmVybGF5KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmJhY2tkcm9wU3ViKSB7XG5cdFx0XHR0aGlzLmJhY2tkcm9wU3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR0aGlzLmJhY2tkcm9wU3ViID0gbnVsbDtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3ZlcmxheVJlZikge1xuXHRcdFx0dGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZm9ybWF0RGF0ZUZucyhkYXRlLCB0aGlzLmZvcm1hdCB8fCBcIk1NTSBkLCB5eXl5XCIpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZvcm1hdERhdGVGbnMoZGF0ZSwgXCJNTU0gZCwgeXl5eVwiKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG5vcm1hbGl6ZURhdGUodmFsdWU6IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRGF0ZSB8IG51bGwge1xuXHRcdGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgfHwgTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgRGF0ZSh2YWx1ZS5nZXRGdWxsWWVhcigpLCB2YWx1ZS5nZXRNb250aCgpLCB2YWx1ZS5nZXREYXRlKCkpO1xuXHR9XG5cblx0cHJpdmF0ZSBjbG9uZURhdGUoZGF0ZTogRGF0ZSk6IERhdGUge1xuXHRcdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXHR9XG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInJvb3RDbGFzc2VzXCI+XG4gIDxwZG0tbGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JJZF09XCJ0cmlnZ2VySWRcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbY2xhc3NOYW1lXT1cImxhYmVsQ2xhc3NOYW1lXCI+XG4gICAge3sgbGFiZWwgfX1cbiAgPC9wZG0tbGFiZWw+XG5cbiAgPGJ1dHRvblxuICAgICN0cmlnZ2VyRWxcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbaWRdPVwidHJpZ2dlcklkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlblwiXG4gICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJwYW5lbElkXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIidkaWFsb2cnXCJcbiAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpY29uT25seSA/IGRpc3BsYXlUZXh0IDogbnVsbFwiXG4gICAgW25nQ2xhc3NdPVwidHJpZ2dlckNsYXNzZXNcIlxuICAgIFthdHRyLnRpdGxlXT1cImRpc3BsYXlUZXh0XCJcbiAgICAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCJcbiAgICAoZm9jdXMpPVwib25UcmlnZ2VyRm9jdXMoKVwiXG4gICAgKGJsdXIpPVwib25UcmlnZ2VyQmx1cigpXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwiZmxleCBoLTUgdy01IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTAuNSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNOCAydjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTYgMnY0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCI0LjVcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMTYuNVwiIHJ4PVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcmVjdD5cbiAgICAgICAgPHBhdGggZD1cIk0zIDkuNWgxOFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgIDwvc3ZnPlxuICAgIDwvc3Bhbj5cblxuICAgIDxzcGFuICpuZ0lmPVwiIWljb25Pbmx5XCIgW25nQ2xhc3NdPVwidGV4dENsYXNzZXNcIj57eyBkaXNwbGF5VGV4dCB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNwYW5lbFRlbXBsYXRlPlxuICA8ZGl2IFtpZF09XCJwYW5lbElkXCIgcm9sZT1cImRpYWxvZ1wiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJsYWJlbCA/IHRyaWdnZXJJZCA6IG51bGxcIj5cbiAgICA8cGRtLWNhbGVuZGFyXG4gICAgICBbdmFyaWFudF09XCJyZXNvbHZlZFZhcmlhbnRcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIFtyYW5nZVZhbHVlXT1cInJhbmdlVmFsdWVcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgIFthbGxvd1NhbWVEYXlSYW5nZV09XCJhbGxvd1NhbWVEYXlSYW5nZVwiXG4gICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgW21pblllYXJdPVwibWluWWVhclwiXG4gICAgICBbbWF4WWVhcl09XCJtYXhZZWFyXCJcbiAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgW2lzRGF0ZURpc2FibGVkXT1cImlzRGF0ZURpc2FibGVkXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNhbGVuZGFyVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAocmFuZ2VWYWx1ZUNoYW5nZSk9XCJvbkNhbGVuZGFyUmFuZ2VWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChtb250aENoYW5nZSk9XCJvbkNhbGVuZGFyTW9udGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvcGRtLWNhbGVuZGFyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,43 +1,40 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, } from "@angular/core";
2
- import { responsive } from "pdm-ui-kit/src/utils";
3
- import { Z_INDEX } from "pdm-ui-kit/src/utils";
1
+ import { ChangeDetectionStrategy, Component, ContentChild, Directive, EventEmitter, HostListener, Input, Output, } from "@angular/core";
2
+ import { cn, responsive, Z_INDEX } from "pdm-ui-kit/src/utils";
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "@angular/common";
6
5
  import * as i2 from "@angular/cdk/a11y";
6
+ export class PdmDialogHeaderDirective {
7
+ }
8
+ PdmDialogHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogHeaderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9
+ PdmDialogHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogHeaderDirective, selector: "[pdmHeader]", ngImport: i0 });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogHeaderDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{ selector: "[pdmHeader]" }]
13
+ }] });
14
+ export class PdmDialogFooterDirective {
15
+ }
16
+ PdmDialogFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17
+ PdmDialogFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogFooterDirective, selector: "[pdmFooter]", ngImport: i0 });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogFooterDirective, decorators: [{
19
+ type: Directive,
20
+ args: [{ selector: "[pdmFooter]" }]
21
+ }] });
7
22
  /**
8
- * Modal/Dialog component con soporte responsive
9
- *
10
- * MEJORADO en v0.2.0:
11
- * - Modo 'responsive' (default): fullscreen en mobile, modal en desktop
12
- * - Tamaños predefinidos: sm, md, lg, xl
13
- * - Mejor manejo de scroll en mobile
14
- *
15
- * @example
16
- * // Responsive (recomendado)
17
- * <pdm-dialog [open]="isOpen" size="responsive">
18
- * <p>Content</p>
19
- * </pdm-dialog>
20
- *
21
- * @example
22
- * // Tamaño fijo
23
- * <pdm-dialog [open]="isOpen" size="lg">
24
- * <p>Content</p>
25
- * </pdm-dialog>
23
+ * Responsive modal/dialog component.
26
24
  */
27
25
  export class PdmDialogComponent {
28
26
  constructor() {
29
27
  this.open = false;
30
28
  this.variant = "default";
31
29
  /**
32
- * Tamaño del dialog
33
- * - responsive: fullscreen mobile, modal desktop (recomendado)
34
- * - sm: 400px max
35
- * - md: 500px max
36
- * - lg: 640px max (default)
37
- * - xl: 800px max
38
- * - desktop/mobile/mobile-fullscreen: legacy, deprecado
30
+ * Dialog size. Responsive mode is fullscreen on mobile and a modal on desktop.
39
31
  */
40
32
  this.size = "responsive";
33
+ /**
34
+ * Custom desktop maximum width, such as `800px` or `min(90vw, 800px)`.
35
+ * Overrides `size` at the `sm` breakpoint; responsive mobile mode remains fullscreen.
36
+ */
37
+ this.maxWidth = "";
41
38
  this.title = "";
42
39
  this.description = "";
43
40
  this.closeOnBackdrop = true;
@@ -76,7 +73,6 @@ export class PdmDialogComponent {
76
73
  }
77
74
  }
78
75
  get panelClassName() {
79
- // Legacy sizes (backward compatibility)
80
76
  if (this.size === "desktop") {
81
77
  return this.buildPanelClasses([
82
78
  "max-w-[640px]",
@@ -99,23 +95,19 @@ export class PdmDialogComponent {
99
95
  "sm:rounded-[10px]",
100
96
  ]);
101
97
  }
102
- // New responsive mode (recomendado)
103
98
  if (this.size === "responsive") {
104
99
  return this.buildPanelClasses([
105
- // Mobile: fullscreen con bordes redondeados solo arriba
106
100
  "w-full",
107
101
  "h-full",
108
102
  "max-h-[100dvh]",
109
103
  "rounded-t-[10px]",
110
104
  "sm:rounded-[10px]",
111
- // Desktop: modal centrado
112
105
  "sm:w-auto",
113
106
  "sm:h-auto",
114
107
  "sm:max-w-[640px]",
115
108
  "sm:max-h-[calc(100vh-4rem)]",
116
109
  ]);
117
110
  }
118
- // New size options
119
111
  const sizeMap = {
120
112
  sm: "sm:max-w-[400px]",
121
113
  md: "sm:max-w-[500px]",
@@ -124,12 +116,10 @@ export class PdmDialogComponent {
124
116
  };
125
117
  const maxWidth = sizeMap[this.size] || sizeMap.lg;
126
118
  return this.buildPanelClasses([
127
- // Mobile: fullscreen
128
119
  "w-full",
129
120
  "h-full",
130
121
  "max-h-[100dvh]",
131
122
  "rounded-t-[10px]",
132
- // Desktop: modal
133
123
  "sm:rounded-[10px]",
134
124
  "sm:w-auto",
135
125
  "sm:h-auto",
@@ -149,65 +139,25 @@ export class PdmDialogComponent {
149
139
  "text-foreground",
150
140
  "shadow-lg",
151
141
  "overflow-hidden",
152
- ...sizeClasses,
153
- this.className,
154
142
  ];
155
- return base.filter(Boolean).join(" ");
143
+ const maxWidthClass = this.maxWidth ? `sm:max-w-[${this.maxWidth}]` : "";
144
+ return cn(...base, ...sizeClasses, maxWidthClass, this.className);
156
145
  }
157
146
  get bodyWrapperClassName() {
158
- // min-h-0 is CRITICAL for flex child to shrink and allow internal scroll
159
- const base = [
160
- "flex-1",
161
- "min-h-0",
162
- "overflow-y-auto",
163
- "px-4",
164
- "py-6",
165
- "sm:px-6",
166
- this.bodyClassName,
167
- ];
168
- return base.filter(Boolean).join(" ");
147
+ return cn("flex-1 min-h-0 overflow-y-auto px-4 py-6 sm:px-6", this.bodyClassName);
169
148
  }
170
149
  get headerWrapperClassName() {
171
- const base = [
172
- "flex",
173
- "items-start",
174
- "justify-between",
175
- "gap-3",
176
- "p-4",
177
- "sm:p-6",
178
- "border-b",
179
- "border-border",
180
- this.headerClassName,
181
- ];
182
- return base.filter(Boolean).join(" ");
150
+ return cn("flex items-start justify-between gap-3 p-4 sm:p-6 border-b border-border", this.headerClassName);
183
151
  }
184
152
  get footerWrapperClassName() {
185
153
  const effectiveAlign = this.alignFooter === "right" && this.variant === "custom-close"
186
154
  ? "left"
187
155
  : this.alignFooter;
188
- const base = [
189
- "p-4",
190
- "sm:p-6",
191
- "border-t",
192
- "border-border",
193
- // Mobile: siempre full-width
194
- "flex",
195
- "flex-col",
196
- "gap-2",
197
- // Desktop: según alignFooter
198
- effectiveAlign === "full-width"
199
- ? "sm:flex-col"
200
- : "sm:flex-row sm:items-center",
201
- effectiveAlign === "left" ? "sm:justify-start" : "",
202
- effectiveAlign === "right" ? "sm:justify-end" : "",
203
- this.footerClassName,
204
- ];
205
- return base.filter(Boolean).join(" ");
156
+ return cn("p-4 sm:p-6 border-t border-border flex flex-col gap-2", effectiveAlign === "full-width"
157
+ ? "sm:flex-col"
158
+ : "sm:flex-row sm:items-center", effectiveAlign === "left" ? "sm:justify-start" : "", effectiveAlign === "right" ? "sm:justify-end" : "", this.footerClassName);
206
159
  }
207
160
  get containerClassName() {
208
- // Container con backdrop z-40
209
- // Mobile: fullscreen desde el bottom
210
- // Desktop: centrado
211
161
  return responsive({
212
162
  default: `fixed inset-x-0 bottom-0 ${Z_INDEX.modalBackdrop} flex items-end justify-center`,
213
163
  sm: `fixed inset-0 ${Z_INDEX.modalBackdrop} flex items-center justify-center p-4`,
@@ -215,16 +165,18 @@ export class PdmDialogComponent {
215
165
  }
216
166
  }
217
167
  PdmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
218
- PdmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogComponent, selector: "pdm-dialog", inputs: { open: "open", variant: "variant", size: "size", title: "title", description: "description", closeOnBackdrop: "closeOnBackdrop", closeOnEsc: "closeOnEsc", showCloseButton: "showCloseButton", showHeader: "showHeader", showFooter: "showFooter", primaryActionText: "primaryActionText", secondaryActionText: "secondaryActionText", alignFooter: "alignFooter", headerClassName: "headerClassName", bodyClassName: "bodyClassName", footerClassName: "footerClassName", className: "className" }, outputs: { openChange: "openChange", primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, ngImport: i0, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n \n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" cdkTrapFocus [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none box-border items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
168
+ PdmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDialogComponent, selector: "pdm-dialog", inputs: { open: "open", variant: "variant", size: "size", maxWidth: "maxWidth", title: "title", description: "description", closeOnBackdrop: "closeOnBackdrop", closeOnEsc: "closeOnEsc", showCloseButton: "showCloseButton", showHeader: "showHeader", showFooter: "showFooter", primaryActionText: "primaryActionText", secondaryActionText: "secondaryActionText", alignFooter: "alignFooter", headerClassName: "headerClassName", bodyClassName: "bodyClassName", footerClassName: "footerClassName", className: "className" }, outputs: { openChange: "openChange", primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, host: { listeners: { "document:keydown.escape": "onEsc()" } }, queries: [{ propertyName: "customHeader", first: true, predicate: PdmDialogHeaderDirective, descendants: true }, { propertyName: "customFooter", first: true, predicate: PdmDialogFooterDirective, descendants: true }], ngImport: i0, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n\n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" cdkTrapFocus [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <ng-container *ngIf=\"customHeader; else defaultHeader\">\n <ng-content select=\"[pdmHeader]\"></ng-content>\n </ng-container>\n <ng-template #defaultHeader>\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none box-border items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </ng-template>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"customFooter; else defaultFooter\">\n <ng-content select=\"[pdmFooter]\"></ng-content>\n </ng-container>\n <ng-template #defaultFooter>\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </ng-template>\n </div>\n </section>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
219
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDialogComponent, decorators: [{
220
170
  type: Component,
221
- args: [{ selector: "pdm-dialog", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n \n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" cdkTrapFocus [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none box-border items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </div>\n </section>\n</div>\n", styles: [":host{display:block}\n"] }]
171
+ args: [{ selector: "pdm-dialog", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"open\" [ngClass]=\"containerClassName\">\n <!-- Backdrop -->\n <div class=\"absolute inset-0 bg-foreground/30 backdrop-blur-sm\" (click)=\"onBackdropClick()\"></div>\n\n <!-- Dialog Panel -->\n <section role=\"dialog\" aria-modal=\"true\" cdkTrapFocus [ngClass]=\"panelClassName\">\n <!-- Header -->\n <div *ngIf=\"showHeader\" [ngClass]=\"headerWrapperClassName\">\n <ng-container *ngIf=\"customHeader; else defaultHeader\">\n <ng-content select=\"[pdmHeader]\"></ng-content>\n </ng-container>\n <ng-template #defaultHeader>\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"m-0 text-lg font-semibold leading-none tracking-tight text-foreground\">{{ title }}</h2>\n <p *ngIf=\"description\" class=\"m-0 mt-2 text-sm text-muted-foreground\">{{ description }}</p>\n </div>\n <button\n *ngIf=\"showCloseButton\"\n type=\"button\"\n class=\"inline-flex h-6 w-6 flex-shrink-0 appearance-none box-border items-center justify-center rounded-sm border-0 bg-transparent p-0 text-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 6L18 18M18 6L6 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"></path>\n </svg>\n </button>\n </ng-template>\n </div>\n\n <!-- Body -->\n <div [ngClass]=\"bodyWrapperClassName\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer -->\n <div *ngIf=\"showFooter\" [ngClass]=\"footerWrapperClassName\">\n <ng-container *ngIf=\"customFooter; else defaultFooter\">\n <ng-content select=\"[pdmFooter]\"></ng-content>\n </ng-container>\n <ng-template #defaultFooter>\n <ng-container *ngIf=\"variant === 'custom-close'; else defaultActions\">\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md border border-solid border-input bg-background px-4 py-2 text-sm font-medium text-foreground shadow-sm sm:w-auto\"\n (click)=\"onSecondaryAction()\"\n >\n {{ secondaryActionText }}\n </button>\n <button\n type=\"button\"\n class=\"inline-flex h-9 w-full appearance-none box-border items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow-sm sm:w-auto\"\n (click)=\"onPrimaryAction()\"\n >\n {{ primaryActionText }}\n </button>\n </ng-template>\n </ng-template>\n </div>\n </section>\n</div>\n", styles: [":host{display:block}\n"] }]
222
172
  }], propDecorators: { open: [{
223
173
  type: Input
224
174
  }], variant: [{
225
175
  type: Input
226
176
  }], size: [{
227
177
  type: Input
178
+ }], maxWidth: [{
179
+ type: Input
228
180
  }], title: [{
229
181
  type: Input
230
182
  }], description: [{
@@ -253,6 +205,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
253
205
  type: Input
254
206
  }], className: [{
255
207
  type: Input
208
+ }], customHeader: [{
209
+ type: ContentChild,
210
+ args: [PdmDialogHeaderDirective]
211
+ }], customFooter: [{
212
+ type: ContentChild,
213
+ args: [PdmDialogFooterDirective]
256
214
  }], openChange: [{
257
215
  type: Output
258
216
  }], primaryAction: [{
@@ -263,4 +221,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
263
221
  type: HostListener,
264
222
  args: ["document:keydown.escape"]
265
223
  }] } });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBbUIvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQWFILE1BQU0sT0FBTyxrQkFBa0I7SUFaL0I7UUFhVSxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsWUFBTyxHQUFxQixTQUFTLENBQUM7UUFFL0M7Ozs7Ozs7O1dBUUc7UUFDTSxTQUFJLEdBQWtCLFlBQVksQ0FBQztRQUVuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsc0JBQWlCLEdBQUcsY0FBYyxDQUFDO1FBQ25DLHdCQUFtQixHQUFHLFFBQVEsQ0FBQztRQUMvQixnQkFBVyxHQUF5QixPQUFPLENBQUM7UUFDNUMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVk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LFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUdQLEtBQUs7c0JBREosWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFdmVudEVtaXR0ZXIsXG5cdEhvc3RMaXN0ZW5lcixcblx0SW5wdXQsXG5cdE91dHB1dCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHJlc3BvbnNpdmUgfSBmcm9tIFwicGRtLXVpLWtpdC9zcmMvdXRpbHNcIjtcbmltcG9ydCB7IFpfSU5ERVggfSBmcm9tIFwicGRtLXVpLWtpdC9zcmMvdXRpbHNcIjtcblxuZXhwb3J0IHR5cGUgUGRtRGlhbG9nVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJjdXN0b20tY2xvc2VcIjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgJ3Jlc3BvbnNpdmUnIG1vZGUgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHYwLjMuMFxuICovXG5leHBvcnQgdHlwZSBQZG1EaWFsb2dTaXplID1cblx0fCBcImRlc2t0b3BcIlxuXHR8IFwibW9iaWxlXCJcblx0fCBcIm1vYmlsZS1mdWxsc2NyZWVuXCJcblx0fCBcInNtXCJcblx0fCBcIm1kXCJcblx0fCBcImxnXCJcblx0fCBcInhsXCJcblx0fCBcInJlc3BvbnNpdmVcIjtcblxuZXhwb3J0IHR5cGUgUGRtRGlhbG9nRm9vdGVyQWxpZ24gPSBcInJpZ2h0XCIgfCBcImZ1bGwtd2lkdGhcIiB8IFwibGVmdFwiO1xuXG4vKipcbiAqIE1vZGFsL0RpYWxvZyBjb21wb25lbnQgY29uIHNvcG9ydGUgcmVzcG9uc2l2ZVxuICpcbiAqIE1FSk9SQURPIGVuIHYwLjIuMDpcbiAqIC0gTW9kbyAncmVzcG9uc2l2ZScgKGRlZmF1bHQpOiBmdWxsc2NyZWVuIGVuIG1vYmlsZSwgbW9kYWwgZW4gZGVza3RvcFxuICogLSBUYW1hw7FvcyBwcmVkZWZpbmlkb3M6IHNtLCBtZCwgbGcsIHhsXG4gKiAtIE1lam9yIG1hbmVqbyBkZSBzY3JvbGwgZW4gbW9iaWxlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlc3BvbnNpdmUgKHJlY29tZW5kYWRvKVxuICogPHBkbS1kaWFsb2cgW29wZW5dPVwiaXNPcGVuXCIgc2l6ZT1cInJlc3BvbnNpdmVcIj5cbiAqICAgPHA+Q29udGVudDwvcD5cbiAqIDwvcGRtLWRpYWxvZz5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGFtYcOxbyBmaWpvXG4gKiA8cGRtLWRpYWxvZyBbb3Blbl09XCJpc09wZW5cIiBzaXplPVwibGdcIj5cbiAqICAgPHA+Q29udGVudDwvcD5cbiAqIDwvcGRtLWRpYWxvZz5cbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS1kaWFsb2dcIixcblx0dGVtcGxhdGVVcmw6IFwiLi9kaWFsb2cuY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVzOiBbXG5cdFx0YFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgYCxcblx0XSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBkbURpYWxvZ0NvbXBvbmVudCB7XG5cdEBJbnB1dCgpIG9wZW4gPSBmYWxzZTtcblx0QElucHV0KCkgdmFyaWFudDogUGRtRGlhbG9nVmFyaWFudCA9IFwiZGVmYXVsdFwiO1xuXG5cdC8qKlxuXHQgKiBUYW1hw7FvIGRlbCBkaWFsb2dcblx0ICogLSByZXNwb25zaXZlOiBmdWxsc2NyZWVuIG1vYmlsZSwgbW9kYWwgZGVza3RvcCAocmVjb21lbmRhZG8pXG5cdCAqIC0gc206IDQwMHB4IG1heFxuXHQgKiAtIG1kOiA1MDBweCBtYXhcblx0ICogLSBsZzogNjQwcHggbWF4IChkZWZhdWx0KVxuXHQgKiAtIHhsOiA4MDBweCBtYXhcblx0ICogLSBkZXNrdG9wL21vYmlsZS9tb2JpbGUtZnVsbHNjcmVlbjogbGVnYWN5LCBkZXByZWNhZG9cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFBkbURpYWxvZ1NpemUgPSBcInJlc3BvbnNpdmVcIjtcblxuXHRASW5wdXQoKSB0aXRsZSA9IFwiXCI7XG5cdEBJbnB1dCgpIGRlc2NyaXB0aW9uID0gXCJcIjtcblx0QElucHV0KCkgY2xvc2VPbkJhY2tkcm9wID0gdHJ1ZTtcblx0QElucHV0KCkgY2xvc2VPbkVzYyA9IHRydWU7XG5cdEBJbnB1dCgpIHNob3dDbG9zZUJ1dHRvbiA9IHRydWU7XG5cdEBJbnB1dCgpIHNob3dIZWFkZXIgPSB0cnVlO1xuXHRASW5wdXQoKSBzaG93Rm9vdGVyID0gdHJ1ZTtcblx0QElucHV0KCkgcHJpbWFyeUFjdGlvblRleHQgPSBcIlNhdmUgY2hhbmdlc1wiO1xuXHRASW5wdXQoKSBzZWNvbmRhcnlBY3Rpb25UZXh0ID0gXCJDYW5jZWxcIjtcblx0QElucHV0KCkgYWxpZ25Gb290ZXI6IFBkbURpYWxvZ0Zvb3RlckFsaWduID0gXCJyaWdodFwiO1xuXHRASW5wdXQoKSBoZWFkZXJDbGFzc05hbWUgPSBcIlwiO1xuXHRASW5wdXQoKSBib2R5Q2xhc3NOYW1lID0gXCJcIjtcblx0QElucHV0KCkgZm9vdGVyQ2xhc3NOYW1lID0gXCJcIjtcblx0QElucHV0KCkgY2xhc3NOYW1lID0gXCJcIjtcblxuXHRAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblx0QE91dHB1dCgpIHByaW1hcnlBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdEBPdXRwdXQoKSBzZWNvbmRhcnlBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cblx0QEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmtleWRvd24uZXNjYXBlXCIpXG5cdG9uRXNjKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZW4gJiYgdGhpcy5jbG9zZU9uRXNjKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuXHR9XG5cblx0b25QcmltYXJ5QWN0aW9uKCk6IHZvaWQge1xuXHRcdHRoaXMucHJpbWFyeUFjdGlvbi5lbWl0KCk7XG5cdH1cblxuXHRvblNlY29uZGFyeUFjdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnNlY29uZGFyeUFjdGlvbi5lbWl0KCk7XG5cdH1cblxuXHRvbkJhY2tkcm9wQ2xpY2soKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2xvc2VPbkJhY2tkcm9wKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IHBhbmVsQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG5cdFx0Ly8gTGVnYWN5IHNpemVzIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuXHRcdGlmICh0aGlzLnNpemUgPT09IFwiZGVza3RvcFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHRcdFwibWF4LXctWzY0MHB4XVwiLFxuXHRcdFx0XHRcIm1heC1oLVtjYWxjKDEwMHZoLTJyZW0pXVwiLFxuXHRcdFx0XHRcInJvdW5kZWQtWzEwcHhdXCIsXG5cdFx0XHRdKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zaXplID09PSBcIm1vYmlsZVwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHRcdFwibWF4LXctWzMyMHB4XVwiLFxuXHRcdFx0XHRcIm1pbi1oLVsyNDBweF1cIixcblx0XHRcdFx0XCJyb3VuZGVkLVsxMHB4XVwiLFxuXHRcdFx0XSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2l6ZSA9PT0gXCJtb2JpbGUtZnVsbHNjcmVlblwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHRcdFwibWF4LXctWzMyMHB4XVwiLFxuXHRcdFx0XHRcImgtW21pbigxMDBkdmgsNjQwcHgpXVwiLFxuXHRcdFx0XHRcInJvdW5kZWQtbm9uZVwiLFxuXHRcdFx0XHRcInNtOnJvdW5kZWQtWzEwcHhdXCIsXG5cdFx0XHRdKTtcblx0XHR9XG5cblx0XHQvLyBOZXcgcmVzcG9uc2l2ZSBtb2RlIChyZWNvbWVuZGFkbylcblx0XHRpZiAodGhpcy5zaXplID09PSBcInJlc3BvbnNpdmVcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuYnVpbGRQYW5lbENsYXNzZXMoW1xuXHRcdFx0XHQvLyBNb2JpbGU6IGZ1bGxzY3JlZW4gY29uIGJvcmRlcyByZWRvbmRlYWRvcyBzb2xvIGFycmliYVxuXHRcdFx0XHRcInctZnVsbFwiLFxuXHRcdFx0XHRcImgtZnVsbFwiLFxuXHRcdFx0XHRcIm1heC1oLVsxMDBkdmhdXCIsXG5cdFx0XHRcdFwicm91bmRlZC10LVsxMHB4XVwiLFxuXHRcdFx0XHRcInNtOnJvdW5kZWQtWzEwcHhdXCIsXG5cdFx0XHRcdC8vIERlc2t0b3A6IG1vZGFsIGNlbnRyYWRvXG5cdFx0XHRcdFwic206dy1hdXRvXCIsXG5cdFx0XHRcdFwic206aC1hdXRvXCIsXG5cdFx0XHRcdFwic206bWF4LXctWzY0MHB4XVwiLFxuXHRcdFx0XHRcInNtOm1heC1oLVtjYWxjKDEwMHZoLTRyZW0pXVwiLFxuXHRcdFx0XSk7XG5cdFx0fVxuXG5cdFx0Ly8gTmV3IHNpemUgb3B0aW9uc1xuXHRcdGNvbnN0IHNpemVNYXAgPSB7XG5cdFx0XHRzbTogXCJzbTptYXgtdy1bNDAwcHhdXCIsXG5cdFx0XHRtZDogXCJzbTptYXgtdy1bNTAwcHhdXCIsXG5cdFx0XHRsZzogXCJzbTptYXgtdy1bNjQwcHhdXCIsXG5cdFx0XHR4bDogXCJzbTptYXgtdy1bODAwcHhdXCIsXG5cdFx0fTtcblxuXHRcdGNvbnN0IG1heFdpZHRoID0gc2l6ZU1hcFt0aGlzLnNpemUgYXMga2V5b2YgdHlwZW9mIHNpemVNYXBdIHx8IHNpemVNYXAubGc7XG5cblx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHQvLyBNb2JpbGU6IGZ1bGxzY3JlZW5cblx0XHRcdFwidy1mdWxsXCIsXG5cdFx0XHRcImgtZnVsbFwiLFxuXHRcdFx0XCJtYXgtaC1bMTAwZHZoXVwiLFxuXHRcdFx0XCJyb3VuZGVkLXQtWzEwcHhdXCIsXG5cdFx0XHQvLyBEZXNrdG9wOiBtb2RhbFxuXHRcdFx0XCJzbTpyb3VuZGVkLVsxMHB4XVwiLFxuXHRcdFx0XCJzbTp3LWF1dG9cIixcblx0XHRcdFwic206aC1hdXRvXCIsXG5cdFx0XHRtYXhXaWR0aCxcblx0XHRcdFwic206bWF4LWgtW2NhbGMoMTAwdmgtNHJlbSldXCIsXG5cdFx0XSk7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkUGFuZWxDbGFzc2VzKHNpemVDbGFzc2VzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgYmFzZSA9IFtcblx0XHRcdFwicmVsYXRpdmVcIixcblx0XHRcdFpfSU5ERVgubW9kYWwsIC8vIHotNTAgLSBkZWJlIGVzdGFyIHNvYnJlIGJhY2tkcm9wICh6LTQwKVxuXHRcdFx0XCJmbGV4XCIsXG5cdFx0XHRcImZsZXgtY29sXCIsXG5cdFx0XHRcImJvcmRlciBib3JkZXItc29saWRcIixcblx0XHRcdFwiYm9yZGVyLWJvcmRlclwiLFxuXHRcdFx0XCJiZy1iYWNrZ3JvdW5kXCIsXG5cdFx0XHRcInRleHQtZm9yZWdyb3VuZFwiLFxuXHRcdFx0XCJzaGFkb3ctbGdcIixcblx0XHRcdFwib3ZlcmZsb3ctaGlkZGVuXCIsXG5cdFx0XHQuLi5zaXplQ2xhc3Nlcyxcblx0XHRcdHRoaXMuY2xhc3NOYW1lLFxuXHRcdF07XG5cblx0XHRyZXR1cm4gYmFzZS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cdH1cblxuXHRnZXQgYm9keVdyYXBwZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcblx0XHQvLyBtaW4taC0wIGlzIENSSVRJQ0FMIGZvciBmbGV4IGNoaWxkIHRvIHNocmluayBhbmQgYWxsb3cgaW50ZXJuYWwgc2Nyb2xsXG5cdFx0Y29uc3QgYmFzZSA9IFtcblx0XHRcdFwiZmxleC0xXCIsXG5cdFx0XHRcIm1pbi1oLTBcIixcblx0XHRcdFwib3ZlcmZsb3cteS1hdXRvXCIsXG5cdFx0XHRcInB4LTRcIixcblx0XHRcdFwicHktNlwiLFxuXHRcdFx0XCJzbTpweC02XCIsXG5cdFx0XHR0aGlzLmJvZHlDbGFzc05hbWUsXG5cdFx0XTtcblxuXHRcdHJldHVybiBiYXNlLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblx0fVxuXG5cdGdldCBoZWFkZXJXcmFwcGVyQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgYmFzZSA9IFtcblx0XHRcdFwiZmxleFwiLFxuXHRcdFx0XCJpdGVtcy1zdGFydFwiLFxuXHRcdFx0XCJqdXN0aWZ5LWJldHdlZW5cIixcblx0XHRcdFwiZ2FwLTNcIixcblx0XHRcdFwicC00XCIsXG5cdFx0XHRcInNtOnAtNlwiLFxuXHRcdFx0XCJib3JkZXItYlwiLFxuXHRcdFx0XCJib3JkZXItYm9yZGVyXCIsXG5cdFx0XHR0aGlzLmhlYWRlckNsYXNzTmFtZSxcblx0XHRdO1xuXG5cdFx0cmV0dXJuIGJhc2UuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXHR9XG5cblx0Z2V0IGZvb3RlcldyYXBwZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcblx0XHRjb25zdCBlZmZlY3RpdmVBbGlnbiA9XG5cdFx0XHR0aGlzLmFsaWduRm9vdGVyID09PSBcInJpZ2h0XCIgJiYgdGhpcy52YXJpYW50ID09PSBcImN1c3RvbS1jbG9zZVwiXG5cdFx0XHRcdD8gXCJsZWZ0XCJcblx0XHRcdFx0OiB0aGlzLmFsaWduRm9vdGVyO1xuXG5cdFx0Y29uc3QgYmFzZSA9IFtcblx0XHRcdFwicC00XCIsXG5cdFx0XHRcInNtOnAtNlwiLFxuXHRcdFx0XCJib3JkZXItdFwiLFxuXHRcdFx0XCJib3JkZXItYm9yZGVyXCIsXG5cdFx0XHQvLyBNb2JpbGU6IHNpZW1wcmUgZnVsbC13aWR0aFxuXHRcdFx0XCJmbGV4XCIsXG5cdFx0XHRcImZsZXgtY29sXCIsXG5cdFx0XHRcImdhcC0yXCIsXG5cdFx0XHQvLyBEZXNrdG9wOiBzZWfDum4gYWxpZ25Gb290ZXJcblx0XHRcdGVmZmVjdGl2ZUFsaWduID09PSBcImZ1bGwtd2lkdGhcIlxuXHRcdFx0XHQ/IFwic206ZmxleC1jb2xcIlxuXHRcdFx0XHQ6IFwic206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyXCIsXG5cdFx0XHRlZmZlY3RpdmVBbGlnbiA9PT0gXCJsZWZ0XCIgPyBcInNtOmp1c3RpZnktc3RhcnRcIiA6IFwiXCIsXG5cdFx0XHRlZmZlY3RpdmVBbGlnbiA9PT0gXCJyaWdodFwiID8gXCJzbTpqdXN0aWZ5LWVuZFwiIDogXCJcIixcblx0XHRcdHRoaXMuZm9vdGVyQ2xhc3NOYW1lLFxuXHRcdF07XG5cblx0XHRyZXR1cm4gYmFzZS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cdH1cblxuXHRnZXQgY29udGFpbmVyQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG5cdFx0Ly8gQ29udGFpbmVyIGNvbiBiYWNrZHJvcCB6LTQwXG5cdFx0Ly8gTW9iaWxlOiBmdWxsc2NyZWVuIGRlc2RlIGVsIGJvdHRvbVxuXHRcdC8vIERlc2t0b3A6IGNlbnRyYWRvXG5cdFx0cmV0dXJuIHJlc3BvbnNpdmUoe1xuXHRcdFx0ZGVmYXVsdDogYGZpeGVkIGluc2V0LXgtMCBib3R0b20tMCAke1pfSU5ERVgubW9kYWxCYWNrZHJvcH0gZmxleCBpdGVtcy1lbmQganVzdGlmeS1jZW50ZXJgLFxuXHRcdFx0c206IGBmaXhlZCBpbnNldC0wICR7Wl9JTkRFWC5tb2RhbEJhY2tkcm9wfSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTRgLFxuXHRcdH0pO1xuXHR9XG59XG4iLCI8ZGl2ICpuZ0lmPVwib3BlblwiIFtuZ0NsYXNzXT1cImNvbnRhaW5lckNsYXNzTmFtZVwiPlxuICA8IS0tIEJhY2tkcm9wIC0tPlxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy1mb3JlZ3JvdW5kLzMwIGJhY2tkcm9wLWJsdXItc21cIiAoY2xpY2spPVwib25CYWNrZHJvcENsaWNrKClcIj48L2Rpdj5cbiAgXG4gIDwhLS0gRGlhbG9nIFBhbmVsIC0tPlxuICA8c2VjdGlvbiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBjZGtUcmFwRm9jdXMgW25nQ2xhc3NdPVwicGFuZWxDbGFzc05hbWVcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0hlYWRlclwiIFtuZ0NsYXNzXT1cImhlYWRlcldyYXBwZXJDbGFzc05hbWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy0wIGZsZXgtMVwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJtLTAgdGV4dC1sZyBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCB0ZXh0LWZvcmVncm91bmRcIj57eyB0aXRsZSB9fTwvaDI+XG4gICAgICAgIDxwICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBjbGFzcz1cIm0tMCBtdC0yIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e3sgZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2xvc2VCdXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTYgdy02IGZsZXgtc2hyaW5rLTAgYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtc20gYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtZm9yZWdyb3VuZCBvcGFjaXR5LTcwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1yaW5nIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIGRpYWxvZ1wiXG4gICAgICA+XG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC00IHctNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNiA2TDE4IDE4TTE4IDZMNiAxOFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEJvZHkgLS0+XG4gICAgPGRpdiBbbmdDbGFzc109XCJib2R5V3JhcHBlckNsYXNzTmFtZVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cInNob3dGb290ZXJcIiBbbmdDbGFzc109XCJmb290ZXJXcmFwcGVyQ2xhc3NOYW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFudCA9PT0gJ2N1c3RvbS1jbG9zZSc7IGVsc2UgZGVmYXVsdEFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXNvbGlkIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctc20gc206dy1hdXRvXCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWNvbmRhcnlBY3Rpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzZWNvbmRhcnlBY3Rpb25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFjdGlvbnM+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1zb2xpZCBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtIHNtOnctYXV0b1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2Vjb25kYXJ5QWN0aW9uKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgc2Vjb25kYXJ5QWN0aW9uVGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBiZy1wcmltYXJ5IHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1zbSBzbTp3LWF1dG9cIlxuICAgICAgICAgIChjbGljayk9XCJvblByaW1hcnlBY3Rpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBwcmltYXJ5QWN0aW9uVGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9kaWFsb2cvZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBb0IvRCxNQUFNLE9BQU8sd0JBQXdCOztxSEFBeEIsd0JBQXdCO3lHQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7O0FBSXRDLE1BQU0sT0FBTyx3QkFBd0I7O3FIQUF4Qix3QkFBd0I7eUdBQXhCLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQURwQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTs7QUFHdEM7O0dBRUc7QUFhSCxNQUFNLE9BQU8sa0JBQWtCO0lBWi9CO1FBYVUsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLFlBQU8sR0FBcUIsU0FBUyxDQUFDO1FBRS9DOztXQUVHO1FBQ00sU0FBSSxHQUFrQixZQUFZLENBQUM7UUFFNUM7OztXQUdHO1FBQ00sYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxJ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ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHREaXJlY3RpdmUsXG5cdEV2ZW50RW1pdHRlcixcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0T3V0cHV0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgY24sIHJlc3BvbnNpdmUsIFpfSU5ERVggfSBmcm9tIFwicGRtLXVpLWtpdC9zcmMvdXRpbHNcIjtcblxuZXhwb3J0IHR5cGUgUGRtRGlhbG9nVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJjdXN0b20tY2xvc2VcIjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgJ3Jlc3BvbnNpdmUnIG1vZGUgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHYwLjMuMFxuICovXG5leHBvcnQgdHlwZSBQZG1EaWFsb2dTaXplID1cblx0fCBcImRlc2t0b3BcIlxuXHR8IFwibW9iaWxlXCJcblx0fCBcIm1vYmlsZS1mdWxsc2NyZWVuXCJcblx0fCBcInNtXCJcblx0fCBcIm1kXCJcblx0fCBcImxnXCJcblx0fCBcInhsXCJcblx0fCBcInJlc3BvbnNpdmVcIjtcblxuZXhwb3J0IHR5cGUgUGRtRGlhbG9nRm9vdGVyQWxpZ24gPSBcInJpZ2h0XCIgfCBcImZ1bGwtd2lkdGhcIiB8IFwibGVmdFwiO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6IFwiW3BkbUhlYWRlcl1cIiB9KVxuZXhwb3J0IGNsYXNzIFBkbURpYWxvZ0hlYWRlckRpcmVjdGl2ZSB7fVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6IFwiW3BkbUZvb3Rlcl1cIiB9KVxuZXhwb3J0IGNsYXNzIFBkbURpYWxvZ0Zvb3RlckRpcmVjdGl2ZSB7fVxuXG4vKipcbiAqIFJlc3BvbnNpdmUgbW9kYWwvZGlhbG9nIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcInBkbS1kaWFsb2dcIixcblx0dGVtcGxhdGVVcmw6IFwiLi9kaWFsb2cuY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVzOiBbXG5cdFx0YFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIGAsXG5cdF0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZG1EaWFsb2dDb21wb25lbnQge1xuXHRASW5wdXQoKSBvcGVuID0gZmFsc2U7XG5cdEBJbnB1dCgpIHZhcmlhbnQ6IFBkbURpYWxvZ1ZhcmlhbnQgPSBcImRlZmF1bHRcIjtcblxuXHQvKipcblx0ICogRGlhbG9nIHNpemUuIFJlc3BvbnNpdmUgbW9kZSBpcyBmdWxsc2NyZWVuIG9uIG1vYmlsZSBhbmQgYSBtb2RhbCBvbiBkZXNrdG9wLlxuXHQgKi9cblx0QElucHV0KCkgc2l6ZTogUGRtRGlhbG9nU2l6ZSA9IFwicmVzcG9uc2l2ZVwiO1xuXG5cdC8qKlxuXHQgKiBDdXN0b20gZGVza3RvcCBtYXhpbXVtIHdpZHRoLCBzdWNoIGFzIGA4MDBweGAgb3IgYG1pbig5MHZ3LCA4MDBweClgLlxuXHQgKiBPdmVycmlkZXMgYHNpemVgIGF0IHRoZSBgc21gIGJyZWFrcG9pbnQ7IHJlc3BvbnNpdmUgbW9iaWxlIG1vZGUgcmVtYWlucyBmdWxsc2NyZWVuLlxuXHQgKi9cblx0QElucHV0KCkgbWF4V2lkdGggPSBcIlwiO1xuXG5cdEBJbnB1dCgpIHRpdGxlID0gXCJcIjtcblx0QElucHV0KCkgZGVzY3JpcHRpb24gPSBcIlwiO1xuXHRASW5wdXQoKSBjbG9zZU9uQmFja2Ryb3AgPSB0cnVlO1xuXHRASW5wdXQoKSBjbG9zZU9uRXNjID0gdHJ1ZTtcblx0QElucHV0KCkgc2hvd0Nsb3NlQnV0dG9uID0gdHJ1ZTtcblx0QElucHV0KCkgc2hvd0hlYWRlciA9IHRydWU7XG5cdEBJbnB1dCgpIHNob3dGb290ZXIgPSB0cnVlO1xuXHRASW5wdXQoKSBwcmltYXJ5QWN0aW9uVGV4dCA9IFwiU2F2ZSBjaGFuZ2VzXCI7XG5cdEBJbnB1dCgpIHNlY29uZGFyeUFjdGlvblRleHQgPSBcIkNhbmNlbFwiO1xuXHRASW5wdXQoKSBhbGlnbkZvb3RlcjogUGRtRGlhbG9nRm9vdGVyQWxpZ24gPSBcInJpZ2h0XCI7XG5cdEBJbnB1dCgpIGhlYWRlckNsYXNzTmFtZSA9IFwiXCI7XG5cdEBJbnB1dCgpIGJvZHlDbGFzc05hbWUgPSBcIlwiO1xuXHRASW5wdXQoKSBmb290ZXJDbGFzc05hbWUgPSBcIlwiO1xuXHRASW5wdXQoKSBjbGFzc05hbWUgPSBcIlwiO1xuXG5cdEBDb250ZW50Q2hpbGQoUGRtRGlhbG9nSGVhZGVyRGlyZWN0aXZlKSBjdXN0b21IZWFkZXI/OiBQZG1EaWFsb2dIZWFkZXJEaXJlY3RpdmU7XG5cdEBDb250ZW50Q2hpbGQoUGRtRGlhbG9nRm9vdGVyRGlyZWN0aXZlKSBjdXN0b21Gb290ZXI/OiBQZG1EaWFsb2dGb290ZXJEaXJlY3RpdmU7XG5cblx0QE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cdEBPdXRwdXQoKSBwcmltYXJ5QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXHRAT3V0cHV0KCkgc2Vjb25kYXJ5QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG5cdEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXlkb3duLmVzY2FwZVwiKVxuXHRvbkVzYygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5vcGVuICYmIHRoaXMuY2xvc2VPbkVzYykge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcblx0fVxuXG5cdG9uUHJpbWFyeUFjdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnByaW1hcnlBY3Rpb24uZW1pdCgpO1xuXHR9XG5cblx0b25TZWNvbmRhcnlBY3Rpb24oKTogdm9pZCB7XG5cdFx0dGhpcy5zZWNvbmRhcnlBY3Rpb24uZW1pdCgpO1xuXHR9XG5cblx0b25CYWNrZHJvcENsaWNrKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNsb3NlT25CYWNrZHJvcCkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdGdldCBwYW5lbENsYXNzTmFtZSgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLnNpemUgPT09IFwiZGVza3RvcFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHRcdFwibWF4LXctWzY0MHB4XVwiLFxuXHRcdFx0XHRcIm1heC1oLVtjYWxjKDEwMHZoLTJyZW0pXVwiLFxuXHRcdFx0XHRcInJvdW5kZWQtWzEwcHhdXCIsXG5cdFx0XHRdKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zaXplID09PSBcIm1vYmlsZVwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHRcdFwibWF4LXctWzMyMHB4XVwiLFxuXHRcdFx0XHRcIm1pbi1oLVsyNDBweF1cIixcblx0XHRcdFx0XCJyb3VuZGVkLVsxMHB4XVwiLFxuXHRcdFx0XSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2l6ZSA9PT0gXCJtb2JpbGUtZnVsbHNjcmVlblwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHRcdFwibWF4LXctWzMyMHB4XVwiLFxuXHRcdFx0XHRcImgtW21pbigxMDBkdmgsNjQwcHgpXVwiLFxuXHRcdFx0XHRcInJvdW5kZWQtbm9uZVwiLFxuXHRcdFx0XHRcInNtOnJvdW5kZWQtWzEwcHhdXCIsXG5cdFx0XHRdKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5zaXplID09PSBcInJlc3BvbnNpdmVcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuYnVpbGRQYW5lbENsYXNzZXMoW1xuXHRcdFx0XHRcInctZnVsbFwiLFxuXHRcdFx0XHRcImgtZnVsbFwiLFxuXHRcdFx0XHRcIm1heC1oLVsxMDBkdmhdXCIsXG5cdFx0XHRcdFwicm91bmRlZC10LVsxMHB4XVwiLFxuXHRcdFx0XHRcInNtOnJvdW5kZWQtWzEwcHhdXCIsXG5cdFx0XHRcdFwic206dy1hdXRvXCIsXG5cdFx0XHRcdFwic206aC1hdXRvXCIsXG5cdFx0XHRcdFwic206bWF4LXctWzY0MHB4XVwiLFxuXHRcdFx0XHRcInNtOm1heC1oLVtjYWxjKDEwMHZoLTRyZW0pXVwiLFxuXHRcdFx0XSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2l6ZU1hcCA9IHtcblx0XHRcdHNtOiBcInNtOm1heC13LVs0MDBweF1cIixcblx0XHRcdG1kOiBcInNtOm1heC13LVs1MDBweF1cIixcblx0XHRcdGxnOiBcInNtOm1heC13LVs2NDBweF1cIixcblx0XHRcdHhsOiBcInNtOm1heC13LVs4MDBweF1cIixcblx0XHR9O1xuXHRcdGNvbnN0IG1heFdpZHRoID0gc2l6ZU1hcFt0aGlzLnNpemUgYXMga2V5b2YgdHlwZW9mIHNpemVNYXBdIHx8IHNpemVNYXAubGc7XG5cblx0XHRyZXR1cm4gdGhpcy5idWlsZFBhbmVsQ2xhc3NlcyhbXG5cdFx0XHRcInctZnVsbFwiLFxuXHRcdFx0XCJoLWZ1bGxcIixcblx0XHRcdFwibWF4LWgtWzEwMGR2aF1cIixcblx0XHRcdFwicm91bmRlZC10LVsxMHB4XVwiLFxuXHRcdFx0XCJzbTpyb3VuZGVkLVsxMHB4XVwiLFxuXHRcdFx0XCJzbTp3LWF1dG9cIixcblx0XHRcdFwic206aC1hdXRvXCIsXG5cdFx0XHRtYXhXaWR0aCxcblx0XHRcdFwic206bWF4LWgtW2NhbGMoMTAwdmgtNHJlbSldXCIsXG5cdFx0XSk7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkUGFuZWxDbGFzc2VzKHNpemVDbGFzc2VzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgYmFzZSA9IFtcblx0XHRcdFwicmVsYXRpdmVcIixcblx0XHRcdFpfSU5ERVgubW9kYWwsXG5cdFx0XHRcImZsZXhcIixcblx0XHRcdFwiZmxleC1jb2xcIixcblx0XHRcdFwiYm9yZGVyIGJvcmRlci1zb2xpZFwiLFxuXHRcdFx0XCJib3JkZXItYm9yZGVyXCIsXG5cdFx0XHRcImJnLWJhY2tncm91bmRcIixcblx0XHRcdFwidGV4dC1mb3JlZ3JvdW5kXCIsXG5cdFx0XHRcInNoYWRvdy1sZ1wiLFxuXHRcdFx0XCJvdmVyZmxvdy1oaWRkZW5cIixcblx0XHRdO1xuXHRcdGNvbnN0IG1heFdpZHRoQ2xhc3MgPSB0aGlzLm1heFdpZHRoID8gYHNtOm1heC13LVske3RoaXMubWF4V2lkdGh9XWAgOiBcIlwiO1xuXG5cdFx0cmV0dXJuIGNuKC4uLmJhc2UsIC4uLnNpemVDbGFzc2VzLCBtYXhXaWR0aENsYXNzLCB0aGlzLmNsYXNzTmFtZSk7XG5cdH1cblxuXHRnZXQgYm9keVdyYXBwZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gY24oXG5cdFx0XHRcImZsZXgtMSBtaW4taC0wIG92ZXJmbG93LXktYXV0byBweC00IHB5LTYgc206cHgtNlwiLFxuXHRcdFx0dGhpcy5ib2R5Q2xhc3NOYW1lLFxuXHRcdCk7XG5cdH1cblxuXHRnZXQgaGVhZGVyV3JhcHBlckNsYXNzTmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBjbihcblx0XHRcdFwiZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgcC00IHNtOnAtNiBib3JkZXItYiBib3JkZXItYm9yZGVyXCIsXG5cdFx0XHR0aGlzLmhlYWRlckNsYXNzTmFtZSxcblx0XHQpO1xuXHR9XG5cblx0Z2V0IGZvb3RlcldyYXBwZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcblx0XHRjb25zdCBlZmZlY3RpdmVBbGlnbiA9XG5cdFx0XHR0aGlzLmFsaWduRm9vdGVyID09PSBcInJpZ2h0XCIgJiYgdGhpcy52YXJpYW50ID09PSBcImN1c3RvbS1jbG9zZVwiXG5cdFx0XHRcdD8gXCJsZWZ0XCJcblx0XHRcdFx0OiB0aGlzLmFsaWduRm9vdGVyO1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0XCJwLTQgc206cC02IGJvcmRlci10IGJvcmRlci1ib3JkZXIgZmxleCBmbGV4LWNvbCBnYXAtMlwiLFxuXHRcdFx0ZWZmZWN0aXZlQWxpZ24gPT09IFwiZnVsbC13aWR0aFwiXG5cdFx0XHRcdD8gXCJzbTpmbGV4LWNvbFwiXG5cdFx0XHRcdDogXCJzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXJcIixcblx0XHRcdGVmZmVjdGl2ZUFsaWduID09PSBcImxlZnRcIiA/IFwic206anVzdGlmeS1zdGFydFwiIDogXCJcIixcblx0XHRcdGVmZmVjdGl2ZUFsaWduID09PSBcInJpZ2h0XCIgPyBcInNtOmp1c3RpZnktZW5kXCIgOiBcIlwiLFxuXHRcdFx0dGhpcy5mb290ZXJDbGFzc05hbWUsXG5cdFx0KTtcblx0fVxuXG5cdGdldCBjb250YWluZXJDbGFzc05hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcmVzcG9uc2l2ZSh7XG5cdFx0XHRkZWZhdWx0OiBgZml4ZWQgaW5zZXQteC0wIGJvdHRvbS0wICR7Wl9JTkRFWC5tb2RhbEJhY2tkcm9wfSBmbGV4IGl0ZW1zLWVuZCBqdXN0aWZ5LWNlbnRlcmAsXG5cdFx0XHRzbTogYGZpeGVkIGluc2V0LTAgJHtaX0lOREVYLm1vZGFsQmFja2Ryb3B9IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNGAsXG5cdFx0fSk7XG5cdH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJvcGVuXCIgW25nQ2xhc3NdPVwiY29udGFpbmVyQ2xhc3NOYW1lXCI+XG4gIDwhLS0gQmFja2Ryb3AgLS0+XG4gIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGJnLWZvcmVncm91bmQvMzAgYmFja2Ryb3AtYmx1ci1zbVwiIChjbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soKVwiPjwvZGl2PlxuXG4gIDwhLS0gRGlhbG9nIFBhbmVsIC0tPlxuICA8c2VjdGlvbiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBjZGtUcmFwRm9jdXMgW25nQ2xhc3NdPVwicGFuZWxDbGFzc05hbWVcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0hlYWRlclwiIFtuZ0NsYXNzXT1cImhlYWRlcldyYXBwZXJDbGFzc05hbWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21IZWFkZXI7IGVsc2UgZGVmYXVsdEhlYWRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcGRtSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctMCBmbGV4LTFcIj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJtLTAgdGV4dC1sZyBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCB0ZXh0LWZvcmVncm91bmRcIj57eyB0aXRsZSB9fTwvaDI+XG4gICAgICAgICAgPHAgKm5nSWY9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwibS0wIG10LTIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBkZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dDbG9zZUJ1dHRvblwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTYgdy02IGZsZXgtc2hyaW5rLTAgYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtc20gYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcC0wIHRleHQtZm9yZWdyb3VuZCBvcGFjaXR5LTcwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1yaW5nIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBkaWFsb2dcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTYgNkwxOCAxOE0xOCA2TDYgMThcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEJvZHkgLS0+XG4gICAgPGRpdiBbbmdDbGFzc109XCJib2R5V3JhcHBlckNsYXNzTmFtZVwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cInNob3dGb290ZXJcIiBbbmdDbGFzc109XCJmb290ZXJXcmFwcGVyQ2xhc3NOYW1lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tRm9vdGVyOyBlbHNlIGRlZmF1bHRGb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BkbUZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZvb3Rlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhcmlhbnQgPT09ICdjdXN0b20tY2xvc2UnOyBlbHNlIGRlZmF1bHRBY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIGJveC1ib3JkZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1zb2xpZCBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtIHNtOnctYXV0b1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZWNvbmRhcnlBY3Rpb24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2Vjb25kYXJ5QWN0aW9uVGV4dCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBY3Rpb25zPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgdy1mdWxsIGFwcGVhcmFuY2Utbm9uZSBib3gtYm9yZGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItc29saWQgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSBzbTp3LWF1dG9cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2Vjb25kYXJ5QWN0aW9uKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHNlY29uZGFyeUFjdGlvblRleHQgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgYm94LWJvcmRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBiZy1wcmltYXJ5IHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy1zbSBzbTp3LWF1dG9cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUHJpbWFyeUFjdGlvbigpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBwcmltYXJ5QWN0aW9uVGV4dCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=