@seniorsistemas/angular-components 19.9.4 → 19.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autocomplete/README.md +4 -0
- package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +7 -1
- package/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.d.ts +3 -1
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +10 -4
- package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +5 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +2 -2
- package/esm2022/editor/lib/editor/editor.component.mjs +3 -3
- package/esm2022/insights/lib/insights/components/insights-card/insights-card.component.mjs +21 -3
- package/esm2022/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.mjs +14 -3
- package/esm2022/insights/lib/insights/insights.component.mjs +15 -4
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +2 -2
- package/esm2022/rating-scale/lib/rating-scale/models/rating-scale-node.mjs +1 -1
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +23 -3
- package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +5 -3
- package/esm2022/select/lib/select/select.component.mjs +6 -4
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +7 -3
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +11 -3
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +1 -1
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +1 -1
- package/esm2022/token-list/lib/token-list/token-list.component.mjs +7 -3
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +13 -5
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-insights.mjs +47 -7
- package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +22 -2
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +9 -5
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +6 -2
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +10 -2
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs +6 -2
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
- package/insights/README.md +12 -0
- package/insights/lib/insights/components/insights-card/insights-card.component.d.ts +22 -1
- package/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.d.ts +9 -1
- package/insights/lib/insights/insights.component.d.ts +9 -1
- package/package.json +7 -7
- package/rating-scale/README.md +38 -13
- package/rating-scale/lib/rating-scale/models/rating-scale-node.d.ts +8 -0
- package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +4 -1
- package/select/README.md +2 -0
- package/select/lib/select/components/select-option/select-option.component.d.ts +3 -1
- package/select/lib/select/select.component.d.ts +3 -1
- package/speech-recognition/README.md +1 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +3 -1
- package/split-button/README.md +2 -0
- package/split-button/lib/split-button/split-button.component.d.ts +5 -1
- package/token-list/lib/token-list/token-list.component.d.ts +3 -1
package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs
CHANGED
|
@@ -11,10 +11,10 @@ export class SelectFieldComponent {
|
|
|
11
11
|
formControl = input.required();
|
|
12
12
|
fieldUtils = inject(FormFieldUtilsService);
|
|
13
13
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: SelectFieldComponent, isStandalone: true, selector: "ng-component", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let _field = field();\n<s-field-label [field]=\"_field\"></s-field-label>\n\n<s-select\n [multiple]=\"_field.multiple ?? false\"\n [filter]=\"_field.filter ?? false\"\n [id]=\"_field.id || _field.name\"\n [options]=\"fieldUtils.getFieldProperty(_field.options)\"\n [placeholder]=\"_field.placeholder || ' '\"\n [formControl]=\"formControl()\"\n [sTooltip]=\"_field.tooltip\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n [group]=\"_field.group ?? false\"\n [showClear]=\"_field.showClear ?? false\"\n [optionLabel]=\"_field.optionLabel ?? 'label'\"\n [optionValue]=\"_field.optionValue ?? 'value'\"\n (clicked)=\"_field.onClick ? _field.onClick($event) : null\"\n (onChange)=\"_field.onChange ? _field.onChange($event) : null\"\n [emptyMessage]=\"_field.emptyMessage ?? null\"\n>\n</s-select>\n\n", dependencies: [{ kind: "component", type: FieldLabelComponent, selector: "s-field-label", inputs: ["field", "fieldContainerRef"] }, { kind: "component", type: SelectComponent, selector: "s-select", inputs: ["placeholder", "multiple", "options", "optionLabel", "optionValue", "showClear", "filter", "checkmark", "filterBy", "group", "virtualScroll", "virtualScrollItemSize", "emptyMessage", "disabled", "showOptions", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "showOptionsChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
|
|
14
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: SelectFieldComponent, isStandalone: true, selector: "ng-component", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let _field = field();\n<s-field-label [field]=\"_field\"></s-field-label>\n\n<s-select\n [multiple]=\"_field.multiple ?? false\"\n [filter]=\"_field.filter ?? false\"\n [id]=\"_field.id || _field.name\"\n [options]=\"fieldUtils.getFieldProperty(_field.options)\"\n [placeholder]=\"_field.placeholder || ' '\"\n [formControl]=\"formControl()\"\n [sTooltip]=\"_field.tooltip\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n [group]=\"_field.group ?? false\"\n [showClear]=\"_field.showClear ?? false\"\n [optionLabel]=\"_field.optionLabel ?? 'label'\"\n [optionValue]=\"_field.optionValue ?? 'value'\"\n (clicked)=\"_field.onClick ? _field.onClick($event) : null\"\n (onChange)=\"_field.onChange ? _field.onChange($event) : null\"\n [emptyMessage]=\"_field.emptyMessage ?? null\"\n>\n</s-select>\n\n", dependencies: [{ kind: "component", type: FieldLabelComponent, selector: "s-field-label", inputs: ["field", "fieldContainerRef"] }, { kind: "component", type: SelectComponent, selector: "s-select", inputs: ["placeholder", "multiple", "options", "optionLabel", "optionValue", "showClear", "filter", "checkmark", "checkIconClass", "filterBy", "group", "virtualScroll", "virtualScrollItemSize", "emptyMessage", "disabled", "showOptions", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "showOptionsChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
|
|
15
15
|
}
|
|
16
16
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectFieldComponent, decorators: [{
|
|
17
17
|
type: Component,
|
|
18
18
|
args: [{ standalone: true, imports: [FieldLabelComponent, SelectComponent, ReactiveFormsModule, TooltipDirective], template: "@let _field = field();\n<s-field-label [field]=\"_field\"></s-field-label>\n\n<s-select\n [multiple]=\"_field.multiple ?? false\"\n [filter]=\"_field.filter ?? false\"\n [id]=\"_field.id || _field.name\"\n [options]=\"fieldUtils.getFieldProperty(_field.options)\"\n [placeholder]=\"_field.placeholder || ' '\"\n [formControl]=\"formControl()\"\n [sTooltip]=\"_field.tooltip\"\n tooltipPosition=\"top\"\n [showDelay]=\"500\"\n [group]=\"_field.group ?? false\"\n [showClear]=\"_field.showClear ?? false\"\n [optionLabel]=\"_field.optionLabel ?? 'label'\"\n [optionValue]=\"_field.optionValue ?? 'value'\"\n (clicked)=\"_field.onClick ? _field.onClick($event) : null\"\n (onChange)=\"_field.onChange ? _field.onChange($event) : null\"\n [emptyMessage]=\"_field.emptyMessage ?? null\"\n>\n</s-select>\n\n" }]
|
|
19
19
|
}] });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9keW5hbWljLWZvcm0vc3JjL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9maWVsZHMvc2VsZWN0L3NlbGVjdC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtL3NyYy9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvZmllbGRzL3NlbGVjdC9zZWxlY3QtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBZSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7O0FBTTlFLE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7SUFDNUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWUsQ0FBQztJQUM1QyxVQUFVLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7d0dBSGxDLG9CQUFvQjs0RkFBcEIsb0JBQW9CLG9WQ2JqQyxtMUJBdUJBLDRDRGJjLG1CQUFtQixrR0FBRSxlQUFlLG1YQUFFLG1CQUFtQiwwVEFBRSxnQkFBZ0I7OzRGQUc1RSxvQkFBb0I7a0JBTGhDLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1GaWVsZFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tZmllbGQtdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3RGaWVsZENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9zZWxlY3QtZmllbGQnO1xuaW1wb3J0IHsgQmFzZUZpZWxkQ29tcG9uZW50Q29uZmlnIH0gZnJvbSAnLi4vYmFzZS1maWVsZC1jb21wb25lbnQnO1xuaW1wb3J0IHsgRmllbGRMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvZmllbGQtbGFiZWwvZmllbGQtbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc2VsZWN0JztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3Rvb2x0aXAnO1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbRmllbGRMYWJlbENvbXBvbmVudCwgU2VsZWN0Q29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBUb29sdGlwRGlyZWN0aXZlXSxcbiAgICB0ZW1wbGF0ZVVybDogJ3NlbGVjdC1maWVsZC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdEZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgQmFzZUZpZWxkQ29tcG9uZW50Q29uZmlnIHtcbiAgICBmaWVsZCA9IGlucHV0LnJlcXVpcmVkPFNlbGVjdEZpZWxkQ29uZmlnPigpO1xuICAgIGZvcm1Db250cm9sID0gaW5wdXQucmVxdWlyZWQ8Rm9ybUNvbnRyb2w+KCk7XG4gICAgZmllbGRVdGlscyA9IGluamVjdChGb3JtRmllbGRVdGlsc1NlcnZpY2UpO1xufVxuXG4iLCJAbGV0IF9maWVsZCA9IGZpZWxkKCk7XG48cy1maWVsZC1sYWJlbCBbZmllbGRdPVwiX2ZpZWxkXCI+PC9zLWZpZWxkLWxhYmVsPlxuXG48cy1zZWxlY3RcbiAgICBbbXVsdGlwbGVdPVwiX2ZpZWxkLm11bHRpcGxlID8/IGZhbHNlXCJcbiAgICBbZmlsdGVyXT1cIl9maWVsZC5maWx0ZXIgPz8gZmFsc2VcIlxuICAgIFtpZF09XCJfZmllbGQuaWQgfHwgX2ZpZWxkLm5hbWVcIlxuICAgIFtvcHRpb25zXT1cImZpZWxkVXRpbHMuZ2V0RmllbGRQcm9wZXJ0eShfZmllbGQub3B0aW9ucylcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJfZmllbGQucGxhY2Vob2xkZXIgfHwgJyAnXCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2woKVwiXG4gICAgW3NUb29sdGlwXT1cIl9maWVsZC50b29sdGlwXCJcbiAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgIFtzaG93RGVsYXldPVwiNTAwXCJcbiAgICBbZ3JvdXBdPVwiX2ZpZWxkLmdyb3VwID8/IGZhbHNlXCJcbiAgICBbc2hvd0NsZWFyXT1cIl9maWVsZC5zaG93Q2xlYXIgPz8gZmFsc2VcIlxuICAgIFtvcHRpb25MYWJlbF09XCJfZmllbGQub3B0aW9uTGFiZWwgPz8gJ2xhYmVsJ1wiXG4gICAgW29wdGlvblZhbHVlXT1cIl9maWVsZC5vcHRpb25WYWx1ZSA/PyAndmFsdWUnXCJcbiAgICAoY2xpY2tlZCk9XCJfZmllbGQub25DbGljayA/IF9maWVsZC5vbkNsaWNrKCRldmVudCkgOiBudWxsXCJcbiAgICAob25DaGFuZ2UpPVwiX2ZpZWxkLm9uQ2hhbmdlID8gX2ZpZWxkLm9uQ2hhbmdlKCRldmVudCkgOiBudWxsXCJcbiAgICBbZW1wdHlNZXNzYWdlXT1cIl9maWVsZC5lbXB0eU1lc3NhZ2UgPz8gbnVsbFwiXG4+XG48L3Mtc2VsZWN0PlxuXG4iXX0=
|
|
@@ -360,7 +360,7 @@ export class EditorComponent {
|
|
|
360
360
|
useExisting: forwardRef(() => EditorComponent),
|
|
361
361
|
multi: true,
|
|
362
362
|
},
|
|
363
|
-
], viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, isSignal: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: EditorToolbarButtonComponent, selector: "s-editor-toolbar-button", inputs: ["icon", "label", "active", "disabled"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
363
|
+
], viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, isSignal: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fas fa-eraser\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: EditorToolbarButtonComponent, selector: "s-editor-toolbar-button", inputs: ["icon", "label", "active", "disabled"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
364
364
|
}
|
|
365
365
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditorComponent, decorators: [{
|
|
366
366
|
type: Component,
|
|
@@ -370,6 +370,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
370
370
|
useExisting: forwardRef(() => EditorComponent),
|
|
371
371
|
multi: true,
|
|
372
372
|
},
|
|
373
|
-
], template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-remove-format\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"] }]
|
|
373
|
+
], template: "<div\n class=\"rounded flex flex-col border transition-[border-color,box-shadow] duration-150 focus-within:border-[#5c5ce6] focus-within:shadow-[0_0_0_2px_rgba(92,92,230,0.15)]\"\n [ngClass]=\"styleClass()\"\n [ngStyle]=\"style()\"\n [class.s-editor--readonly]=\"readonly()\"\n [class.s-editor--disabled]=\"formDisabled\"\n [class.pointer-events-none]=\"formDisabled\"\n [class.border-grayscale-20]=\"formDisabled\"\n [class.bg-grayscale-5]=\"formDisabled\"\n [class.border-grayscale-30]=\"!formDisabled\"\n [class.bg-grayscale-0]=\"!formDisabled\"\n [attr.aria-disabled]=\"formDisabled\"\n>\n @if (!readonly()) {\n <div\n class=\"rounded-t flex flex-wrap items-center gap-0.5 border-b border-grayscale-30 bg-[#f9f9fb] px-2 py-1.5\"\n role=\"toolbar\"\n [attr.aria-label]=\"'platform.angular_components.editor_toolbar' | translate\"\n (keydown)=\"onToolbarKeydown($event)\"\n (focusin)=\"onToolbarFocusIn($event)\"\n >\n @if (isFormatAllowed('header')) {\n <select\n class=\"rounded bg-grayscale-0 h-7 cursor-pointer border border-grayscale-30 px-1.5 text-[13px] text-[#3d3d4d] outline-none transition-colors duration-150 focus:border-[#5c5ce6] disabled:cursor-not-allowed disabled:border-grayscale-20 disabled:bg-grayscale-5 disabled:text-grayscale-30\"\n (change)=\"onHeadingChange($event)\"\n [disabled]=\"formDisabled\"\n [attr.aria-label]=\"'platform.angular_components.editor_heading_level' | translate\"\n >\n <option\n [value]=\"0\"\n [selected]=\"activeStates.currentHeading === 0\"\n >\n {{ 'platform.angular_components.editor_heading_normal' | translate }}\n </option>\n <option\n [value]=\"1\"\n [selected]=\"activeStates.currentHeading === 1\"\n >\n {{ 'platform.angular_components.editor_heading_1' | translate }}\n </option>\n <option\n [value]=\"2\"\n [selected]=\"activeStates.currentHeading === 2\"\n >\n {{ 'platform.angular_components.editor_heading_2' | translate }}\n </option>\n <option\n [value]=\"3\"\n [selected]=\"activeStates.currentHeading === 3\"\n >\n {{ 'platform.angular_components.editor_heading_3' | translate }}\n </option>\n </select>\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n @if (isFormatAllowed('bold')) {\n <s-editor-toolbar-button\n icon=\"fa fa-bold\"\n [label]=\"'platform.angular_components.editor_bold' | translate\"\n [active]=\"activeStates.isBold\"\n (clicked)=\"toggleBold()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('italic')) {\n <s-editor-toolbar-button\n icon=\"fa fa-italic\"\n [label]=\"'platform.angular_components.editor_italic' | translate\"\n [active]=\"activeStates.isItalic\"\n (clicked)=\"toggleItalic()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('underline')) {\n <s-editor-toolbar-button\n icon=\"fa fa-underline\"\n [label]=\"'platform.angular_components.editor_underline' | translate\"\n [active]=\"activeStates.isUnderline\"\n (clicked)=\"toggleUnderline()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('strike')) {\n <s-editor-toolbar-button\n icon=\"fa fa-strikethrough\"\n [label]=\"'platform.angular_components.editor_strikethrough' | translate\"\n [active]=\"activeStates.isStrike\"\n (clicked)=\"toggleStrike()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('subscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-subscript\"\n [label]=\"'platform.angular_components.editor_subscript' | translate\"\n [active]=\"activeStates.isSubscript\"\n (clicked)=\"toggleSubscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('superscript')) {\n <s-editor-toolbar-button\n icon=\"fa fa-superscript\"\n [label]=\"'platform.angular_components.editor_superscript' | translate\"\n [active]=\"activeStates.isSuperscript\"\n (clicked)=\"toggleSuperscript()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('color')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_text_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && colorInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-font text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentColor\"\n ></span>\n </span>\n <input\n #colorInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentColor\"\n [disabled]=\"formDisabled\"\n (input)=\"setColor($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('highlight')) {\n <label\n [attr.tabindex]=\"formDisabled ? null : 0\"\n class=\"relative flex h-7 w-7 items-center justify-center rounded bg-grayscale-0 transition-colors duration-150\"\n [ngClass]=\"formDisabled ? 'opacity-[.35] cursor-not-allowed' : 'cursor-pointer hover:bg-[#f0f0f8]'\"\n [attr.title]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-label]=\"'platform.angular_components.editor_background_color' | translate\"\n [attr.aria-disabled]=\"formDisabled\"\n (keydown.enter)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n (keydown.space)=\"$event.preventDefault(); !formDisabled && highlightInput.click()\"\n >\n <span class=\"flex flex-col items-center gap-px\">\n <i class=\"fa fa-highlighter text-[11px] text-[#3d3d4d]\"></i>\n <span\n class=\"h-[3px] w-3.5 rounded-xsmall\"\n [style.background-color]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n ></span>\n </span>\n <input\n #highlightInput\n type=\"color\"\n class=\"absolute inset-0 h-full w-full opacity-0\"\n [ngClass]=\"formDisabled ? 'cursor-not-allowed' : 'cursor-pointer'\"\n [value]=\"activeStates.currentHighlight === 'transparent' ? '#ffff00' : activeStates.currentHighlight\"\n [disabled]=\"formDisabled\"\n (input)=\"setHighlight($any($event.target).value)\"\n />\n </label>\n }\n\n @if (isFormatAllowed('list')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-list-ul\"\n [label]=\"'platform.angular_components.editor_bullet_list' | translate\"\n [active]=\"activeStates.isBulletList\"\n (clicked)=\"toggleBulletList()\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-list-ol\"\n [label]=\"'platform.angular_components.editor_ordered_list' | translate\"\n [active]=\"activeStates.isOrderedList\"\n (clicked)=\"toggleOrderedList()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('align')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-align-left\"\n [label]=\"'platform.angular_components.editor_align_left' | translate\"\n [active]=\"activeStates.isAlignLeft\"\n (clicked)=\"setTextAlign('left')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-center\"\n [label]=\"'platform.angular_components.editor_align_center' | translate\"\n [active]=\"activeStates.isAlignCenter\"\n (clicked)=\"setTextAlign('center')\"\n [disabled]=\"formDisabled\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-align-right\"\n [label]=\"'platform.angular_components.editor_align_right' | translate\"\n [active]=\"activeStates.isAlignRight\"\n (clicked)=\"setTextAlign('right')\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('blockquote')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-quote-right\"\n [label]=\"'platform.angular_components.editor_blockquote' | translate\"\n [active]=\"activeStates.isBlockquote\"\n (clicked)=\"toggleBlockquote()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('code-block')) {\n <s-editor-toolbar-button\n icon=\"fa fa-code\"\n [label]=\"'platform.angular_components.editor_inline_code' | translate\"\n [active]=\"activeStates.isCode\"\n (clicked)=\"toggleCode()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('link')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fa fa-link\"\n [label]=\"'platform.angular_components.editor_insert_link' | translate\"\n (clicked)=\"setLink()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (isFormatAllowed('image')) {\n <s-editor-toolbar-button\n icon=\"fa fa-image\"\n [label]=\"'platform.angular_components.editor_insert_image' | translate\"\n (clicked)=\"setImage()\"\n [disabled]=\"formDisabled\"\n />\n }\n\n @if (hasAnyFormatBeforeUndoRedo()) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n }\n\n <s-editor-toolbar-button\n icon=\"fa fa-undo\"\n [label]=\"('platform.angular_components.editor_undo' | translate) + ' (Ctrl+Z)'\"\n [disabled]=\"formDisabled || !activeStates.canUndo\"\n (clicked)=\"undo()\"\n />\n <s-editor-toolbar-button\n icon=\"fa fa-redo\"\n [label]=\"('platform.angular_components.editor_redo' | translate) + ' (Ctrl+Y)'\"\n [disabled]=\"formDisabled || !activeStates.canRedo\"\n (clicked)=\"redo()\"\n />\n\n @if (isFormatAllowed('clean')) {\n <span class=\"mx-1 inline-block h-5 w-px shrink-0 bg-[#d1d1dc]\"></span>\n <s-editor-toolbar-button\n icon=\"fas fa-eraser\"\n [label]=\"'platform.angular_components.editor_clear_formatting' | translate\"\n (clicked)=\"clearFormatting()\"\n [disabled]=\"formDisabled\"\n />\n }\n </div>\n }\n\n <div\n #editorContainer\n class=\"s-editor-content flex-1\"\n ></div>\n <input\n #imageInput\n type=\"file\"\n accept=\"image/*\"\n style=\"display: none\"\n aria-hidden=\"true\"\n (change)=\"onImageFileSelected($event)\"\n />\n</div>\n", styles: [".s-editor--readonly ::ng-deep .ProseMirror{cursor:default}.s-editor--disabled ::ng-deep .ProseMirror{cursor:not-allowed;color:#c1c1cc}.s-editor--disabled ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{color:#c1c1cc}:host(.ng-dirty.ng-invalid)>div{border-color:#c13018!important;box-shadow:none!important}.s-editor-content ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none;float:left;height:0}.s-editor-content ::ng-deep .ProseMirror{padding:12px 16px;min-height:150px;outline:none!important;color:#1e1e2e;font-size:14px;line-height:1.6}.s-editor-content ::ng-deep .ProseMirror>*+*{margin-top:.5em}.s-editor-content ::ng-deep .ProseMirror p{margin:0}.s-editor-content ::ng-deep .ProseMirror h1{font-size:1.75em;font-weight:700;line-height:1.2;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h1:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h2{font-size:1.4em;font-weight:600;line-height:1.3;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h2:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror h3{font-size:1.15em;font-weight:600;line-height:1.4;margin:.75em 0 .25em}.s-editor-content ::ng-deep .ProseMirror h3:first-child{margin-top:0}.s-editor-content ::ng-deep .ProseMirror ul{list-style:disc;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror ol{list-style:decimal;padding-left:1.5em}.s-editor-content ::ng-deep .ProseMirror li{margin:.2em 0}.s-editor-content ::ng-deep .ProseMirror li p{margin:0}.s-editor-content ::ng-deep .ProseMirror blockquote{border-left:3px solid #5c5ce6;padding-left:1em;margin:.75em 0;color:#6b6b80;font-style:italic}.s-editor-content ::ng-deep .ProseMirror code{background:#f0f0f8;border-radius:3px;padding:.15em .4em;font-family:Courier New,Courier,monospace;font-size:.875em;color:#c026d3}.s-editor-content ::ng-deep .ProseMirror pre{background:#1e1e2e;color:#cdd6f4;border-radius:6px;padding:1em 1.25em;overflow-x:auto;font-family:Courier New,Courier,monospace;font-size:.875em;line-height:1.5}.s-editor-content ::ng-deep .ProseMirror pre code{background:none;padding:0;color:inherit;font-size:inherit}.s-editor-content ::ng-deep .ProseMirror a{color:#5c5ce6;text-decoration:underline;cursor:pointer}.s-editor-content ::ng-deep .ProseMirror a:hover{color:#4040b0}.s-editor-content ::ng-deep .ProseMirror img{max-width:100%;height:auto;border-radius:4px;display:block}.s-editor-content ::ng-deep .ProseMirror hr{border:none;border-top:2px solid #e8e8f0;margin:1em 0}.s-editor-content ::ng-deep .ProseMirror sub{font-size:.75em;vertical-align:sub}.s-editor-content ::ng-deep .ProseMirror sup{font-size:.75em;vertical-align:super}\n"] }]
|
|
374
374
|
}], ctorParameters: () => [] });
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDcEQsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFDNUMsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZC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cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBlZmZlY3QsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2xvcic7XG5pbXBvcnQgSGlnaGxpZ2h0IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpZ2hsaWdodCc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBsYWNlaG9sZGVyJztcbmltcG9ydCBTdWJzY3JpcHQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0JztcbmltcG9ydCBTdXBlcnNjcmlwdCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdXBlcnNjcmlwdCc7XG5pbXBvcnQgVGV4dEFsaWduIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24nO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1zdHlsZSc7XG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSc7XG5pbXBvcnQgU3RhcnRlcktpdCBmcm9tICdAdGlwdGFwL3N0YXJ0ZXIta2l0JztcblxuaW1wb3J0IHsgTGlua0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbGluay1kaWFsb2cvbGluay1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEVkaXRvckZvcm1hdCwgRWRpdG9yU2VsZWN0aW9uQ2hhbmdlRXZlbnQsIEVkaXRvclRleHRDaGFuZ2VFdmVudCwgRXh0ZW5zaW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgRWRpdG9yVG9vbGJhckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci1idXR0b24vZWRpdG9yLXRvb2xiYXItYnV0dG9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZWRpdG9yIGRlIHRleHRvIHJpY28gKFdZU0lXWUcpIGNvbnN0cnXDrWRvIHNvYnJlIG8gVGlwdGFwL1Byb3NlTWlycm9yLlxuICogU3Vic3RpdHVpIG8gYHAtZWRpdG9yYCBkbyBQcmltZU5HIHNlbSBkZXBlbmTDqm5jaWEgZXh0ZXJuYSBkZSBsaWNlbsOnYSBjb21lcmNpYWwuXG4gKiBJbXBsZW1lbnRhIHtAbGluayBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gcGFyYSBpbnRlZ3Jhw6fDo28gY29tIEFuZ3VsYXIgRm9ybXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxzLWVkaXRvclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmljYW9cIlxuICogICBbcmVhZG9ubHldPVwiZmFsc2VcIlxuICogICAodGV4dENoYW5nZSk9XCJvblRleHRDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdDbGFzcywgTmdTdHlsZSwgVHJhbnNsYXRlTW9kdWxlLCBFZGl0b3JUb29sYmFyQnV0dG9uQ29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFZGl0b3JDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbG9jYSBvIGVkaXRvciBlbSBtb2RvIHNvbWVudGUgbGVpdHVyYS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGZvcm1hdG9zIGhhYmlsaXRhZG9zIG5hIHRvb2xiYXIuIFF1YW5kbyB2YXppbywgdG9kb3Mgb3MgZm9ybWF0b3Mgc8OjbyBleGliaWRvcy5cbiAgICAgKi9cbiAgICBmb3JtYXRzID0gaW5wdXQ8RWRpdG9yRm9ybWF0W10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZGUgZGljYSBleGliaWRvIHF1YW5kbyBvIGVkaXRvciBlc3TDoSB2YXppby5cbiAgICAgKi9cbiAgICBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFc3RpbG9zIGlubGluZSBhcGxpY2Fkb3MgYW8gY29udGFpbmVyIGRvIGVkaXRvci5cbiAgICAgKi9cbiAgICBzdHlsZSA9IGlucHV0PHsgW2tsYXNzOiBzdHJpbmddOiB1bmtub3duIH0+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xhc3NlcyBDU1MgYWRpY2lvbmFpcyBhcGxpY2FkYXMgYW8gY29udGFpbmVyIGRvIGVkaXRvci5cbiAgICAgKi9cbiAgICBzdHlsZUNsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV4dGVuc8O1ZXMgVGlwdGFwIGFkaWNpb25haXMgcGFyYSBlc3RlbmRlciBvIGNvbXBvcnRhbWVudG8gcGFkcsOjbyBkbyBlZGl0b3IuXG4gICAgICovXG4gICAgZXh0ZW5zaW9ucyA9IGlucHV0PEV4dGVuc2lvbltdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBlZGl0b3Igw6kgaW5pY2lhbGl6YWRvIGUgZXN0w6EgcHJvbnRvIHBhcmEgdXNvLlxuICAgICAqL1xuICAgIGVkaXRvckluaXQgPSBvdXRwdXQ8RWRpdG9yPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gc2VtcHJlIHF1ZSBvIGNvbnRlw7pkbyBkbyBlZGl0b3Igw6kgYWx0ZXJhZG8uXG4gICAgICovXG4gICAgdGV4dENoYW5nZSA9IG91dHB1dDxFZGl0b3JUZXh0Q2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBzZWxlw6fDo28gZGUgdGV4dG8gbm8gZWRpdG9yIG11ZGEuXG4gICAgICovXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PEVkaXRvclNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZWRpdG9yQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignZWRpdG9yQ29udGFpbmVyJyk7XG4gICAgcHJpdmF0ZSBpbWFnZUlucHV0ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdpbWFnZUlucHV0Jyk7XG4gICAgcHJpdmF0ZSBlZGl0b3I/OiBFZGl0b3I7XG4gICAgcHJpdmF0ZSBfY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICBhY3RpdmVTdGF0ZXMgPSB7XG4gICAgICAgIGlzQm9sZDogZmFsc2UsXG4gICAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgICAgaXNVbmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICBpc1N0cmlrZTogZmFsc2UsXG4gICAgICAgIGlzQnVsbGV0TGlzdDogZmFsc2UsXG4gICAgICAgIGlzT3JkZXJlZExpc3Q6IGZhbHNlLFxuICAgICAgICBpc0Jsb2NrcXVvdGU6IGZhbHNlLFxuICAgICAgICBpc0NvZGU6IGZhbHNlLFxuICAgICAgICBpc1N1YnNjcmlwdDogZmFsc2UsXG4gICAgICAgIGlzU3VwZXJzY3JpcHQ6IGZhbHNlLFxuICAgICAgICBpc0FsaWduTGVmdDogZmFsc2UsXG4gICAgICAgIGlzQWxpZ25DZW50ZXI6IGZhbHNlLFxuICAgICAgICBpc0FsaWduUmlnaHQ6IGZhbHNlLFxuICAgICAgICBjdXJyZW50SGVhZGluZzogMCxcbiAgICAgICAgY3VycmVudENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICAgIGN1cnJlbnRIaWdobGlnaHQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNhblVuZG86IGZhbHNlLFxuICAgICAgICBjYW5SZWRvOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0RWRpdGFibGUoIXRoaXMucmVhZG9ubHkoKSAmJiAhdGhpcy5mb3JtRGlzYWJsZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIoKSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy52aWV3LmRpc3BhdGNoKHRoaXMuZWRpdG9yLnN0YXRlLnRyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLnNldE1ldGEoJ2FkZFRvSGlzdG9yeScsIGZhbHNlKS5zZXRDb250ZW50KHRoaXMuX3ZhbHVlLCB7IGVtaXRVcGRhdGU6IGZhbHNlIH0pLnJ1bigpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1EaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5zZXRFZGl0YWJsZSghaXNEaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSgpLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGlzRm9ybWF0QWxsb3dlZChmb3JtYXQ6IEVkaXRvckZvcm1hdCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gdGhpcy5mb3JtYXRzKCk7XG4gICAgICAgIHJldHVybiAhZm9ybWF0cz8ubGVuZ3RoIHx8IGZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KTtcbiAgICB9XG5cbiAgICBoYXNBbnlGb3JtYXRCZWZvcmVVbmRvUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybWF0c0JlZm9yZVVuZG9SZWRvOiBFZGl0b3JGb3JtYXRbXSA9IFtcbiAgICAgICAgICAgICdoZWFkZXInLCAnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ3N0cmlrZScsICdzdWJzY3JpcHQnLCAnc3VwZXJzY3JpcHQnLFxuICAgICAgICAgICAgJ2NvbG9yJywgJ2hpZ2hsaWdodCcsICdsaXN0JywgJ2FsaWduJywgJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jaycsICdsaW5rJywgJ2ltYWdlJyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHNCZWZvcmVVbmRvUmVkby5zb21lKGYgPT4gdGhpcy5pc0Zvcm1hdEFsbG93ZWQoZikpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJvbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUl0YWxpYygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVJdGFsaWMoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVVbmRlcmxpbmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3RyaWtlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJ1bGxldExpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQnVsbGV0TGlzdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZU9yZGVyZWRMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQmxvY2txdW90ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3Vic2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1YnNjcmlwdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZVN1cGVyc2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1cGVyc2NyaXB0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0VGV4dEFsaWduKGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oYWxpZ24pLnJ1bigpO1xuICAgIH1cblxuICAgIHNldENvbG9yKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRDb2xvcihjb2xvcikucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0SGlnaGxpZ2h0KGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRIaWdobGlnaHQoeyBjb2xvciB9KS5ydW4oKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuY2xlYXJOb2RlcygpLnVuc2V0QWxsTWFya3MoKS5ydW4oKTtcbiAgICB9XG5cbiAgICBvbkhlYWRpbmdDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUpIGFzIDAgfCAxIHwgMiB8IDM7XG4gICAgICAgIGlmIChpc05hTihsZXZlbCkgfHwgbGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuc2V0UGFyYWdyYXBoKCkucnVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnNldEhlYWRpbmcoeyBsZXZlbCB9KS5ydW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldExpbmsoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVXJsID0gKHRoaXMuZWRpdG9yPy5nZXRBdHRyaWJ1dGVzKCdsaW5rJylbJ2hyZWYnXSBhcyBzdHJpbmcpID8/ICcnO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihMaW5rRGlhbG9nQ29tcG9uZW50LCB7IHNpemU6ICdzbScgfSk7XG4gICAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0aWFsVXJsID0gZXhpc3RpbmdVcmw7XG4gICAgICAgIHJlZi5jbG9zZWRcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXJsID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLmV4dGVuZE1hcmtSYW5nZSgnbGluaycpLnVuc2V0TGluaygpLnJ1bigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuZXh0ZW5kTWFya1JhbmdlKCdsaW5rJykuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRJbWFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0KCkubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIG9uSW1hZ2VGaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRJbWFnZSh7IHNyYyB9KS5ydW4oKTtcbiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS51bmRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgb25Ub29sYmFyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIVsnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnLCAnSG9tZScsICdFbmQnXS5pbmNsdWRlcyhldmVudC5rZXkpKSByZXR1cm47XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgdG9vbGJhciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0VG9vbGJhckZvY3VzYWJsZSh0b29sYmFyKTtcbiAgICAgICAgaWYgKCFmb2N1c2FibGUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZm9jdXNhYmxlLmZpbmRJbmRleChlbCA9PiBlbCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGxldCBuZXh0SW5kZXg6IG51bWJlcjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzogbmV4dEluZGV4ID0gKGN1cnJlbnRJbmRleCAtIDEgKyBmb2N1c2FibGUubGVuZ3RoKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSG9tZSc6IG5leHRJbmRleCA9IDA7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogbmV4dEluZGV4ID0gZm9jdXNhYmxlLmxlbmd0aCAtIDE7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXNhYmxlLmZvckVhY2goKGVsLCBpKSA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgaSA9PT0gbmV4dEluZGV4ID8gJzAnIDogJy0xJykpO1xuICAgICAgICBmb2N1c2FibGVbbmV4dEluZGV4XS5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uVG9vbGJhckZvY3VzSW4oZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCB0b29sYmFyID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXIpO1xuICAgICAgICBpZiAoZm9jdXNhYmxlLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZS5mb3JFYWNoKGVsID0+IGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBlbCA9PT0gdGFyZ2V0ID8gJzAnIDogJy0xJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXI6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICAgICAgdG9vbGJhci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgc2VsZWN0LCBsYWJlbFt0YWJpbmRleF0nKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBleHRlbnNpb25zOiBbXG4gICAgICAgICAgICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoe1xuICAgICAgICAgICAgICAgICAgICBsaW5rOiB7IG9wZW5PbkNsaWNrOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIFVuZGVybGluZSxcbiAgICAgICAgICAgICAgICBJbWFnZS5jb25maWd1cmUoeyBhbGxvd0Jhc2U2NDogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0QWxpZ24uY29uZmlndXJlKHsgdHlwZXM6IFsnaGVhZGluZycsICdwYXJhZ3JhcGgnXSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgQ29sb3IsXG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0LmNvbmZpZ3VyZSh7IG11bHRpY29sb3I6IHRydWUgfSksXG4gICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIuY29uZmlndXJlKHsgcGxhY2Vob2xkZXI6ICgpID0+IHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciB9KSxcbiAgICAgICAgICAgICAgICBTdWJzY3JpcHQsXG4gICAgICAgICAgICAgICAgU3VwZXJzY3JpcHQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5leHRlbnNpb25zKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZG9ubHkoKSxcbiAgICAgICAgICAgIGVkaXRvclByb3BzOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICByb2xlOiAndGV4dGJveCcsXG4gICAgICAgICAgICAgICAgICAgICdhcmlhLW11bHRpbGluZSc6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2NvbnRlbnRfYXJlYScsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gZWRpdG9yLmlzRW1wdHkgPyAnJyA6IGVkaXRvci5nZXRIVE1MKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGVkaXRvci5nZXRUZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBodG1sO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKGh0bWwpO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dENoYW5nZS5lbWl0KHsgaHRtbFZhbHVlOiBodG1sLCB0ZXh0VmFsdWU6IHRleHQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZlU3RhdGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TZWxlY3Rpb25VcGRhdGU6ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZlU3RhdGVzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0bywgZW1wdHkgfSA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7IGZyb20sIHRvLCBlbXB0eSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3luY0FjdGl2ZVN0YXRlcygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5lZGl0b3JJbml0LmVtaXQodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY0FjdGl2ZVN0YXRlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgdGhpcy5hY3RpdmVTdGF0ZXMgPSB7XG4gICAgICAgICAgICBpc0JvbGQ6IGUuaXNBY3RpdmUoJ2JvbGQnKSxcbiAgICAgICAgICAgIGlzSXRhbGljOiBlLmlzQWN0aXZlKCdpdGFsaWMnKSxcbiAgICAgICAgICAgIGlzVW5kZXJsaW5lOiBlLmlzQWN0aXZlKCd1bmRlcmxpbmUnKSxcbiAgICAgICAgICAgIGlzU3RyaWtlOiBlLmlzQWN0aXZlKCdzdHJpa2UnKSxcbiAgICAgICAgICAgIGlzQnVsbGV0TGlzdDogZS5pc0FjdGl2ZSgnYnVsbGV0TGlzdCcpLFxuICAgICAgICAgICAgaXNPcmRlcmVkTGlzdDogZS5pc0FjdGl2ZSgnb3JkZXJlZExpc3QnKSxcbiAgICAgICAgICAgIGlzQmxvY2txdW90ZTogZS5pc0FjdGl2ZSgnYmxvY2txdW90ZScpLFxuICAgICAgICAgICAgaXNDb2RlOiBlLmlzQWN0aXZlKCdjb2RlJyksXG4gICAgICAgICAgICBpc1N1YnNjcmlwdDogZS5pc0FjdGl2ZSgnc3Vic2NyaXB0JyksXG4gICAgICAgICAgICBpc1N1cGVyc2NyaXB0OiBlLmlzQWN0aXZlKCdzdXBlcnNjcmlwdCcpLFxuICAgICAgICAgICAgaXNBbGlnbkxlZnQ6IGUuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdsZWZ0JyB9KSxcbiAgICAgICAgICAgIGlzQWxpZ25DZW50ZXI6IGUuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdjZW50ZXInIH0pLFxuICAgICAgICAgICAgaXNBbGlnblJpZ2h0OiBlLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAncmlnaHQnIH0pLFxuICAgICAgICAgICAgY3VycmVudEhlYWRpbmc6IFsxLCAyLCAzXS5maW5kKChsZXZlbCkgPT4gZS5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWwgfSkpID8/IDAsXG4gICAgICAgICAgICBjdXJyZW50Q29sb3I6IChlLmdldEF0dHJpYnV0ZXMoJ3RleHRTdHlsZScpWydjb2xvciddIGFzIHN0cmluZykgfHwgJyMwMDAwMDAnLFxuICAgICAgICAgICAgY3VycmVudEhpZ2hsaWdodDogKGUuZ2V0QXR0cmlidXRlcygnaGlnaGxpZ2h0JylbJ2NvbG9yJ10gYXMgc3RyaW5nKSB8fCAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgY2FuVW5kbzogZS5jYW4oKS51bmRvKCksXG4gICAgICAgICAgICBjYW5SZWRvOiBlLmNhbigpLnJlZG8oKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJyb3VuZGVkIGZsZXggZmxleC1jb2wgYm9yZGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixib3gtc2hhZG93XSBkdXJhdGlvbi0xNTAgZm9jdXMtd2l0aGluOmJvcmRlci1bIzVjNWNlNl0gZm9jdXMtd2l0aGluOnNoYWRvdy1bMF8wXzBfMnB4X3JnYmEoOTIsOTIsMjMwLDAuMTUpXVwiXG4gICAgW25nQ2xhc3NdPVwic3R5bGVDbGFzcygpXCJcbiAgICBbbmdTdHlsZV09XCJzdHlsZSgpXCJcbiAgICBbY2xhc3Mucy1lZGl0b3ItLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgIFtjbGFzcy5zLWVkaXRvci0tZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJmb3JtRGlzYWJsZWRcIlxuICAgIFtjbGFzcy5ib3JkZXItZ3JheXNjYWxlLTIwXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJnLWdyYXlzY2FsZS01XT1cImZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJvcmRlci1ncmF5c2NhbGUtMzBdPVwiIWZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJnLWdyYXlzY2FsZS0wXT1cIiFmb3JtRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbj5cbiAgICBAaWYgKCFyZWFkb25seSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC10IGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMC41IGJvcmRlci1iIGJvcmRlci1ncmF5c2NhbGUtMzAgYmctWyNmOWY5ZmJdIHB4LTIgcHktMS41XCJcbiAgICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdG9vbGJhcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25Ub29sYmFyS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cIm9uVG9vbGJhckZvY3VzSW4oJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdoZWFkZXInKSkge1xuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIGJnLWdyYXlzY2FsZS0wIGgtNyBjdXJzb3ItcG9pbnRlciBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBweC0xLjUgdGV4dC1bMTNweF0gdGV4dC1bIzNkM2Q0ZF0gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBmb2N1czpib3JkZXItWyM1YzVjZTZdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpib3JkZXItZ3JheXNjYWxlLTIwIGRpc2FibGVkOmJnLWdyYXlzY2FsZS01IGRpc2FibGVkOnRleHQtZ3JheXNjYWxlLTMwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkhlYWRpbmdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfbGV2ZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhlYWRpbmcgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9oZWFkaW5nX25vcm1hbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhlYWRpbmcgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9oZWFkaW5nXzEnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRIZWFkaW5nID09PSAyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaGVhZGluZ18yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50SGVhZGluZyA9PT0gM1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfMycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdib2xkJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYm9sZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0JvbGRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCb2xkKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnaXRhbGljJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWl0YWxpY1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9pdGFsaWMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNJdGFsaWNcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVJdGFsaWMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCd1bmRlcmxpbmUnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtdW5kZXJsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3VuZGVybGluZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1VuZGVybGluZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVVuZGVybGluZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ3N0cmlrZScpKSB7XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1zdHJpa2V0aHJvdWdoXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N0cmlrZXRocm91Z2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNTdHJpa2VcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdHJpa2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdzdWJzY3JpcHQnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N1YnNjcmlwdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1N1YnNjcmlwdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVN1YnNjcmlwdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ3N1cGVyc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXN1cGVyc2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N1cGVyc2NyaXB0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzU3VwZXJzY3JpcHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdXBlcnNjcmlwdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2NvbG9yJykpIHtcbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZm9ybURpc2FibGVkID8gbnVsbCA6IDBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXggaC03IHctNyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1ncmF5c2NhbGUtMCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtRGlzYWJsZWQgPyAnb3BhY2l0eS1bLjM1XSBjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyIGhvdmVyOmJnLVsjZjBmMGY4XSdcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl90ZXh0X2NvbG9yJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdGV4dF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAhZm9ybURpc2FibGVkICYmIGNvbG9ySW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAhZm9ybURpc2FibGVkICYmIGNvbG9ySW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC1weFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1mb250IHRleHQtWzExcHhdIHRleHQtWyMzZDNkNGRdXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtWzNweF0gdy0zLjUgcm91bmRlZC14c21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICNjb2xvcklucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGgtZnVsbCB3LWZ1bGwgb3BhY2l0eS0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm1EaXNhYmxlZCA/ICdjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZXRDb2xvcigkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2hpZ2hsaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvcm1EaXNhYmxlZCA/IG51bGwgOiAwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGgtNyB3LTcgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYmctZ3JheXNjYWxlLTAgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybURpc2FibGVkID8gJ29wYWNpdHktWy4zNV0gY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICdjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1bI2YwZjBmOF0nXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYmFja2dyb3VuZF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2JhY2tncm91bmRfY29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgIWZvcm1EaXNhYmxlZCAmJiBoaWdobGlnaHRJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICFmb3JtRGlzYWJsZWQgJiYgaGlnaGxpZ2h0SW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC1weFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaWdobGlnaHRlciB0ZXh0LVsxMXB4XSB0ZXh0LVsjM2QzZDRkXVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVszcHhdIHctMy41IHJvdW5kZWQteHNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhpZ2hsaWdodCA9PT0gJ3RyYW5zcGFyZW50JyA/ICcjZmZmZjAwJyA6IGFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAjaGlnaGxpZ2h0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgaC1mdWxsIHctZnVsbCBvcGFjaXR5LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybURpc2FibGVkID8gJ2N1cnNvci1ub3QtYWxsb3dlZCcgOiAnY3Vyc29yLXBvaW50ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhpZ2hsaWdodCA9PT0gJ3RyYW5zcGFyZW50JyA/ICcjZmZmZjAwJyA6IGFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInNldEhpZ2hsaWdodCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2xpc3QnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlzdC11bFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9idWxsZXRfbGlzdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0J1bGxldExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCdWxsZXRMaXN0KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlzdC1vbFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9vcmRlcmVkX2xpc3QnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNPcmRlcmVkTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZU9yZGVyZWRMaXN0KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnYWxpZ24nKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYWxpZ24tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9hbGlnbl9sZWZ0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQWxpZ25MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0VGV4dEFsaWduKCdsZWZ0JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2FsaWduX2NlbnRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduQ2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0VGV4dEFsaWduKCdjZW50ZXInKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1hbGlnbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9hbGlnbl9yaWdodCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRUZXh0QWxpZ24oJ3JpZ2h0JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnYmxvY2txdW90ZScpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1xdW90ZS1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9ibG9ja3F1b3RlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZUJsb2NrcXVvdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdjb2RlLWJsb2NrJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWNvZGVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaW5saW5lX2NvZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlQ29kZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2xpbmsnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9pbnNlcnRfbGluaycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRMaW5rKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnaW1hZ2UnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaW5zZXJ0X2ltYWdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInNldEltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGhhc0FueUZvcm1hdEJlZm9yZVVuZG9SZWRvKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTEgaW5saW5lLWJsb2NrIGgtNSB3LXB4IHNocmluay0wIGJnLVsjZDFkMWRjXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXVuZG9cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdW5kbycgfCB0cmFuc2xhdGUpICsgJyAoQ3RybCtaKSdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWQgfHwgIWFjdGl2ZVN0YXRlcy5jYW5VbmRvXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ1bmRvKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1yZWRvXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3JlZG8nIHwgdHJhbnNsYXRlKSArICcgKEN0cmwrWSknXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkIHx8ICFhY3RpdmVTdGF0ZXMuY2FuUmVkb1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVkbygpXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdjbGVhbicpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1yZW1vdmUtZm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2NsZWFyX2Zvcm1hdHRpbmcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiY2xlYXJGb3JtYXR0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJzLWVkaXRvci1jb250ZW50IGZsZXgtMVwiXG4gICAgPjwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgICAjaW1hZ2VJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uSW1hZ2VGaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgLz5cbjwvZGl2PlxuIl19
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9lZGl0b3Ivc3JjL2xpYi9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDcEQsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFDNUMsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZC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cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBlZmZlY3QsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2xvcic7XG5pbXBvcnQgSGlnaGxpZ2h0IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpZ2hsaWdodCc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBsYWNlaG9sZGVyJztcbmltcG9ydCBTdWJzY3JpcHQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0JztcbmltcG9ydCBTdXBlcnNjcmlwdCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdXBlcnNjcmlwdCc7XG5pbXBvcnQgVGV4dEFsaWduIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24nO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1zdHlsZSc7XG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSc7XG5pbXBvcnQgU3RhcnRlcktpdCBmcm9tICdAdGlwdGFwL3N0YXJ0ZXIta2l0JztcblxuaW1wb3J0IHsgTGlua0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbGluay1kaWFsb2cvbGluay1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEVkaXRvckZvcm1hdCwgRWRpdG9yU2VsZWN0aW9uQ2hhbmdlRXZlbnQsIEVkaXRvclRleHRDaGFuZ2VFdmVudCwgRXh0ZW5zaW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgRWRpdG9yVG9vbGJhckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci1idXR0b24vZWRpdG9yLXRvb2xiYXItYnV0dG9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZWRpdG9yIGRlIHRleHRvIHJpY28gKFdZU0lXWUcpIGNvbnN0cnXDrWRvIHNvYnJlIG8gVGlwdGFwL1Byb3NlTWlycm9yLlxuICogU3Vic3RpdHVpIG8gYHAtZWRpdG9yYCBkbyBQcmltZU5HIHNlbSBkZXBlbmTDqm5jaWEgZXh0ZXJuYSBkZSBsaWNlbsOnYSBjb21lcmNpYWwuXG4gKiBJbXBsZW1lbnRhIHtAbGluayBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gcGFyYSBpbnRlZ3Jhw6fDo28gY29tIEFuZ3VsYXIgRm9ybXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxzLWVkaXRvclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmljYW9cIlxuICogICBbcmVhZG9ubHldPVwiZmFsc2VcIlxuICogICAodGV4dENoYW5nZSk9XCJvblRleHRDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdDbGFzcywgTmdTdHlsZSwgVHJhbnNsYXRlTW9kdWxlLCBFZGl0b3JUb29sYmFyQnV0dG9uQ29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFZGl0b3JDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbG9jYSBvIGVkaXRvciBlbSBtb2RvIHNvbWVudGUgbGVpdHVyYS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGZvcm1hdG9zIGhhYmlsaXRhZG9zIG5hIHRvb2xiYXIuIFF1YW5kbyB2YXppbywgdG9kb3Mgb3MgZm9ybWF0b3Mgc8OjbyBleGliaWRvcy5cbiAgICAgKi9cbiAgICBmb3JtYXRzID0gaW5wdXQ8RWRpdG9yRm9ybWF0W10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZGUgZGljYSBleGliaWRvIHF1YW5kbyBvIGVkaXRvciBlc3TDoSB2YXppby5cbiAgICAgKi9cbiAgICBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFc3RpbG9zIGlubGluZSBhcGxpY2Fkb3MgYW8gY29udGFpbmVyIGRvIGVkaXRvci5cbiAgICAgKi9cbiAgICBzdHlsZSA9IGlucHV0PHsgW2tsYXNzOiBzdHJpbmddOiB1bmtub3duIH0+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xhc3NlcyBDU1MgYWRpY2lvbmFpcyBhcGxpY2FkYXMgYW8gY29udGFpbmVyIGRvIGVkaXRvci5cbiAgICAgKi9cbiAgICBzdHlsZUNsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV4dGVuc8O1ZXMgVGlwdGFwIGFkaWNpb25haXMgcGFyYSBlc3RlbmRlciBvIGNvbXBvcnRhbWVudG8gcGFkcsOjbyBkbyBlZGl0b3IuXG4gICAgICovXG4gICAgZXh0ZW5zaW9ucyA9IGlucHV0PEV4dGVuc2lvbltdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBlZGl0b3Igw6kgaW5pY2lhbGl6YWRvIGUgZXN0w6EgcHJvbnRvIHBhcmEgdXNvLlxuICAgICAqL1xuICAgIGVkaXRvckluaXQgPSBvdXRwdXQ8RWRpdG9yPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gc2VtcHJlIHF1ZSBvIGNvbnRlw7pkbyBkbyBlZGl0b3Igw6kgYWx0ZXJhZG8uXG4gICAgICovXG4gICAgdGV4dENoYW5nZSA9IG91dHB1dDxFZGl0b3JUZXh0Q2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBzZWxlw6fDo28gZGUgdGV4dG8gbm8gZWRpdG9yIG11ZGEuXG4gICAgICovXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PEVkaXRvclNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBmb3JtRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZWRpdG9yQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignZWRpdG9yQ29udGFpbmVyJyk7XG4gICAgcHJpdmF0ZSBpbWFnZUlucHV0ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdpbWFnZUlucHV0Jyk7XG4gICAgcHJpdmF0ZSBlZGl0b3I/OiBFZGl0b3I7XG4gICAgcHJpdmF0ZSBfY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICBhY3RpdmVTdGF0ZXMgPSB7XG4gICAgICAgIGlzQm9sZDogZmFsc2UsXG4gICAgICAgIGlzSXRhbGljOiBmYWxzZSxcbiAgICAgICAgaXNVbmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICBpc1N0cmlrZTogZmFsc2UsXG4gICAgICAgIGlzQnVsbGV0TGlzdDogZmFsc2UsXG4gICAgICAgIGlzT3JkZXJlZExpc3Q6IGZhbHNlLFxuICAgICAgICBpc0Jsb2NrcXVvdGU6IGZhbHNlLFxuICAgICAgICBpc0NvZGU6IGZhbHNlLFxuICAgICAgICBpc1N1YnNjcmlwdDogZmFsc2UsXG4gICAgICAgIGlzU3VwZXJzY3JpcHQ6IGZhbHNlLFxuICAgICAgICBpc0FsaWduTGVmdDogZmFsc2UsXG4gICAgICAgIGlzQWxpZ25DZW50ZXI6IGZhbHNlLFxuICAgICAgICBpc0FsaWduUmlnaHQ6IGZhbHNlLFxuICAgICAgICBjdXJyZW50SGVhZGluZzogMCxcbiAgICAgICAgY3VycmVudENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICAgIGN1cnJlbnRIaWdobGlnaHQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNhblVuZG86IGZhbHNlLFxuICAgICAgICBjYW5SZWRvOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0RWRpdGFibGUoIXRoaXMucmVhZG9ubHkoKSAmJiAhdGhpcy5mb3JtRGlzYWJsZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIoKSA/PyAnJztcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy52aWV3LmRpc3BhdGNoKHRoaXMuZWRpdG9yLnN0YXRlLnRyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRFZGl0b3IoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLnNldE1ldGEoJ2FkZFRvSGlzdG9yeScsIGZhbHNlKS5zZXRDb250ZW50KHRoaXMuX3ZhbHVlLCB7IGVtaXRVcGRhdGU6IGZhbHNlIH0pLnJ1bigpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1EaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5zZXRFZGl0YWJsZSghaXNEaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSgpLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGlzRm9ybWF0QWxsb3dlZChmb3JtYXQ6IEVkaXRvckZvcm1hdCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gdGhpcy5mb3JtYXRzKCk7XG4gICAgICAgIHJldHVybiAhZm9ybWF0cz8ubGVuZ3RoIHx8IGZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KTtcbiAgICB9XG5cbiAgICBoYXNBbnlGb3JtYXRCZWZvcmVVbmRvUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybWF0c0JlZm9yZVVuZG9SZWRvOiBFZGl0b3JGb3JtYXRbXSA9IFtcbiAgICAgICAgICAgICdoZWFkZXInLCAnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ3N0cmlrZScsICdzdWJzY3JpcHQnLCAnc3VwZXJzY3JpcHQnLFxuICAgICAgICAgICAgJ2NvbG9yJywgJ2hpZ2hsaWdodCcsICdsaXN0JywgJ2FsaWduJywgJ2Jsb2NrcXVvdGUnLCAnY29kZS1ibG9jaycsICdsaW5rJywgJ2ltYWdlJyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHNCZWZvcmVVbmRvUmVkby5zb21lKGYgPT4gdGhpcy5pc0Zvcm1hdEFsbG93ZWQoZikpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJvbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUl0YWxpYygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVJdGFsaWMoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVVbmRlcmxpbmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlVW5kZXJsaW5lKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3RyaWtlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZUJ1bGxldExpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQnVsbGV0TGlzdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZU9yZGVyZWRMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQmxvY2txdW90ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQ29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU3Vic2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1YnNjcmlwdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZVN1cGVyc2NyaXB0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN1cGVyc2NyaXB0KCkucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0VGV4dEFsaWduKGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oYWxpZ24pLnJ1bigpO1xuICAgIH1cblxuICAgIHNldENvbG9yKGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRDb2xvcihjb2xvcikucnVuKCk7XG4gICAgfVxuXG4gICAgc2V0SGlnaGxpZ2h0KGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRIaWdobGlnaHQoeyBjb2xvciB9KS5ydW4oKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuY2xlYXJOb2RlcygpLnVuc2V0QWxsTWFya3MoKS5ydW4oKTtcbiAgICB9XG5cbiAgICBvbkhlYWRpbmdDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUpIGFzIDAgfCAxIHwgMiB8IDM7XG4gICAgICAgIGlmIChpc05hTihsZXZlbCkgfHwgbGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuc2V0UGFyYWdyYXBoKCkucnVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnNldEhlYWRpbmcoeyBsZXZlbCB9KS5ydW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldExpbmsoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVXJsID0gKHRoaXMuZWRpdG9yPy5nZXRBdHRyaWJ1dGVzKCdsaW5rJylbJ2hyZWYnXSBhcyBzdHJpbmcpID8/ICcnO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihMaW5rRGlhbG9nQ29tcG9uZW50LCB7IHNpemU6ICdzbScgfSk7XG4gICAgICAgIHJlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0aWFsVXJsID0gZXhpc3RpbmdVcmw7XG4gICAgICAgIHJlZi5jbG9zZWRcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXJsID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLmV4dGVuZE1hcmtSYW5nZSgnbGluaycpLnVuc2V0TGluaygpLnJ1bigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuZXh0ZW5kTWFya1JhbmdlKCdsaW5rJykuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRJbWFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0KCkubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIG9uSW1hZ2VGaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRJbWFnZSh7IHNyYyB9KS5ydW4oKTtcbiAgICAgICAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS51bmRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCk7XG4gICAgfVxuXG4gICAgb25Ub29sYmFyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIVsnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnLCAnSG9tZScsICdFbmQnXS5pbmNsdWRlcyhldmVudC5rZXkpKSByZXR1cm47XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgdG9vbGJhciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0VG9vbGJhckZvY3VzYWJsZSh0b29sYmFyKTtcbiAgICAgICAgaWYgKCFmb2N1c2FibGUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZm9jdXNhYmxlLmZpbmRJbmRleChlbCA9PiBlbCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGxldCBuZXh0SW5kZXg6IG51bWJlcjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzogbmV4dEluZGV4ID0gKGN1cnJlbnRJbmRleCAtIDEgKyBmb2N1c2FibGUubGVuZ3RoKSAlIGZvY3VzYWJsZS5sZW5ndGg7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSG9tZSc6IG5leHRJbmRleCA9IDA7IGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogbmV4dEluZGV4ID0gZm9jdXNhYmxlLmxlbmd0aCAtIDE7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXNhYmxlLmZvckVhY2goKGVsLCBpKSA9PiBlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgaSA9PT0gbmV4dEluZGV4ID8gJzAnIDogJy0xJykpO1xuICAgICAgICBmb2N1c2FibGVbbmV4dEluZGV4XS5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uVG9vbGJhckZvY3VzSW4oZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCB0b29sYmFyID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXIpO1xuICAgICAgICBpZiAoZm9jdXNhYmxlLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZS5mb3JFYWNoKGVsID0+IGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBlbCA9PT0gdGFyZ2V0ID8gJzAnIDogJy0xJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUb29sYmFyRm9jdXNhYmxlKHRvb2xiYXI6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICAgICAgdG9vbGJhci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgc2VsZWN0LCBsYWJlbFt0YWJpbmRleF0nKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBleHRlbnNpb25zOiBbXG4gICAgICAgICAgICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoe1xuICAgICAgICAgICAgICAgICAgICBsaW5rOiB7IG9wZW5PbkNsaWNrOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIFVuZGVybGluZSxcbiAgICAgICAgICAgICAgICBJbWFnZS5jb25maWd1cmUoeyBhbGxvd0Jhc2U2NDogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0QWxpZ24uY29uZmlndXJlKHsgdHlwZXM6IFsnaGVhZGluZycsICdwYXJhZ3JhcGgnXSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgQ29sb3IsXG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0LmNvbmZpZ3VyZSh7IG11bHRpY29sb3I6IHRydWUgfSksXG4gICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIuY29uZmlndXJlKHsgcGxhY2Vob2xkZXI6ICgpID0+IHRoaXMuX2N1cnJlbnRQbGFjZWhvbGRlciB9KSxcbiAgICAgICAgICAgICAgICBTdWJzY3JpcHQsXG4gICAgICAgICAgICAgICAgU3VwZXJzY3JpcHQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5leHRlbnNpb25zKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZG9ubHkoKSxcbiAgICAgICAgICAgIGVkaXRvclByb3BzOiB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICByb2xlOiAndGV4dGJveCcsXG4gICAgICAgICAgICAgICAgICAgICdhcmlhLW11bHRpbGluZSc6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2NvbnRlbnRfYXJlYScsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gZWRpdG9yLmlzRW1wdHkgPyAnJyA6IGVkaXRvci5nZXRIVE1MKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGVkaXRvci5nZXRUZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBodG1sO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKGh0bWwpO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dENoYW5nZS5lbWl0KHsgaHRtbFZhbHVlOiBodG1sLCB0ZXh0VmFsdWU6IHRleHQgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZlU3RhdGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TZWxlY3Rpb25VcGRhdGU6ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jQWN0aXZlU3RhdGVzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0bywgZW1wdHkgfSA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7IGZyb20sIHRvLCBlbXB0eSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3luY0FjdGl2ZVN0YXRlcygpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5lZGl0b3JJbml0LmVtaXQodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3luY0FjdGl2ZVN0YXRlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgdGhpcy5hY3RpdmVTdGF0ZXMgPSB7XG4gICAgICAgICAgICBpc0JvbGQ6IGUuaXNBY3RpdmUoJ2JvbGQnKSxcbiAgICAgICAgICAgIGlzSXRhbGljOiBlLmlzQWN0aXZlKCdpdGFsaWMnKSxcbiAgICAgICAgICAgIGlzVW5kZXJsaW5lOiBlLmlzQWN0aXZlKCd1bmRlcmxpbmUnKSxcbiAgICAgICAgICAgIGlzU3RyaWtlOiBlLmlzQWN0aXZlKCdzdHJpa2UnKSxcbiAgICAgICAgICAgIGlzQnVsbGV0TGlzdDogZS5pc0FjdGl2ZSgnYnVsbGV0TGlzdCcpLFxuICAgICAgICAgICAgaXNPcmRlcmVkTGlzdDogZS5pc0FjdGl2ZSgnb3JkZXJlZExpc3QnKSxcbiAgICAgICAgICAgIGlzQmxvY2txdW90ZTogZS5pc0FjdGl2ZSgnYmxvY2txdW90ZScpLFxuICAgICAgICAgICAgaXNDb2RlOiBlLmlzQWN0aXZlKCdjb2RlJyksXG4gICAgICAgICAgICBpc1N1YnNjcmlwdDogZS5pc0FjdGl2ZSgnc3Vic2NyaXB0JyksXG4gICAgICAgICAgICBpc1N1cGVyc2NyaXB0OiBlLmlzQWN0aXZlKCdzdXBlcnNjcmlwdCcpLFxuICAgICAgICAgICAgaXNBbGlnbkxlZnQ6IGUuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdsZWZ0JyB9KSxcbiAgICAgICAgICAgIGlzQWxpZ25DZW50ZXI6IGUuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdjZW50ZXInIH0pLFxuICAgICAgICAgICAgaXNBbGlnblJpZ2h0OiBlLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAncmlnaHQnIH0pLFxuICAgICAgICAgICAgY3VycmVudEhlYWRpbmc6IFsxLCAyLCAzXS5maW5kKChsZXZlbCkgPT4gZS5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWwgfSkpID8/IDAsXG4gICAgICAgICAgICBjdXJyZW50Q29sb3I6IChlLmdldEF0dHJpYnV0ZXMoJ3RleHRTdHlsZScpWydjb2xvciddIGFzIHN0cmluZykgfHwgJyMwMDAwMDAnLFxuICAgICAgICAgICAgY3VycmVudEhpZ2hsaWdodDogKGUuZ2V0QXR0cmlidXRlcygnaGlnaGxpZ2h0JylbJ2NvbG9yJ10gYXMgc3RyaW5nKSB8fCAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgY2FuVW5kbzogZS5jYW4oKS51bmRvKCksXG4gICAgICAgICAgICBjYW5SZWRvOiBlLmNhbigpLnJlZG8oKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJyb3VuZGVkIGZsZXggZmxleC1jb2wgYm9yZGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixib3gtc2hhZG93XSBkdXJhdGlvbi0xNTAgZm9jdXMtd2l0aGluOmJvcmRlci1bIzVjNWNlNl0gZm9jdXMtd2l0aGluOnNoYWRvdy1bMF8wXzBfMnB4X3JnYmEoOTIsOTIsMjMwLDAuMTUpXVwiXG4gICAgW25nQ2xhc3NdPVwic3R5bGVDbGFzcygpXCJcbiAgICBbbmdTdHlsZV09XCJzdHlsZSgpXCJcbiAgICBbY2xhc3Mucy1lZGl0b3ItLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgIFtjbGFzcy5zLWVkaXRvci0tZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJmb3JtRGlzYWJsZWRcIlxuICAgIFtjbGFzcy5ib3JkZXItZ3JheXNjYWxlLTIwXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJnLWdyYXlzY2FsZS01XT1cImZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJvcmRlci1ncmF5c2NhbGUtMzBdPVwiIWZvcm1EaXNhYmxlZFwiXG4gICAgW2NsYXNzLmJnLWdyYXlzY2FsZS0wXT1cIiFmb3JtRGlzYWJsZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbj5cbiAgICBAaWYgKCFyZWFkb25seSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC10IGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMC41IGJvcmRlci1iIGJvcmRlci1ncmF5c2NhbGUtMzAgYmctWyNmOWY5ZmJdIHB4LTIgcHktMS41XCJcbiAgICAgICAgICAgIHJvbGU9XCJ0b29sYmFyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdG9vbGJhcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25Ub29sYmFyS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cIm9uVG9vbGJhckZvY3VzSW4oJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdoZWFkZXInKSkge1xuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkIGJnLWdyYXlzY2FsZS0wIGgtNyBjdXJzb3ItcG9pbnRlciBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBweC0xLjUgdGV4dC1bMTNweF0gdGV4dC1bIzNkM2Q0ZF0gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBmb2N1czpib3JkZXItWyM1YzVjZTZdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpib3JkZXItZ3JheXNjYWxlLTIwIGRpc2FibGVkOmJnLWdyYXlzY2FsZS01IGRpc2FibGVkOnRleHQtZ3JheXNjYWxlLTMwXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkhlYWRpbmdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfbGV2ZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhlYWRpbmcgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9oZWFkaW5nX25vcm1hbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhlYWRpbmcgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9oZWFkaW5nXzEnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRIZWFkaW5nID09PSAyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaGVhZGluZ18yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50SGVhZGluZyA9PT0gM1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2hlYWRpbmdfMycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdib2xkJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWJvbGRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYm9sZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0JvbGRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCb2xkKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnaXRhbGljJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWl0YWxpY1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9pdGFsaWMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNJdGFsaWNcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVJdGFsaWMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCd1bmRlcmxpbmUnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtdW5kZXJsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3VuZGVybGluZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1VuZGVybGluZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVVuZGVybGluZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ3N0cmlrZScpKSB7XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1zdHJpa2V0aHJvdWdoXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N0cmlrZXRocm91Z2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNTdHJpa2VcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdHJpa2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdzdWJzY3JpcHQnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N1YnNjcmlwdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc1N1YnNjcmlwdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZVN1YnNjcmlwdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ3N1cGVyc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXN1cGVyc2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3N1cGVyc2NyaXB0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzU3VwZXJzY3JpcHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVTdXBlcnNjcmlwdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2NvbG9yJykpIHtcbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZm9ybURpc2FibGVkID8gbnVsbCA6IDBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGZsZXggaC03IHctNyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy1ncmF5c2NhbGUtMCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xNTBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtRGlzYWJsZWQgPyAnb3BhY2l0eS1bLjM1XSBjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyIGhvdmVyOmJnLVsjZjBmMGY4XSdcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl90ZXh0X2NvbG9yJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdGV4dF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAhZm9ybURpc2FibGVkICYmIGNvbG9ySW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAhZm9ybURpc2FibGVkICYmIGNvbG9ySW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC1weFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1mb250IHRleHQtWzExcHhdIHRleHQtWyMzZDNkNGRdXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtWzNweF0gdy0zLjUgcm91bmRlZC14c21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImFjdGl2ZVN0YXRlcy5jdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICNjb2xvcklucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGgtZnVsbCB3LWZ1bGwgb3BhY2l0eS0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm1EaXNhYmxlZCA/ICdjdXJzb3Itbm90LWFsbG93ZWQnIDogJ2N1cnNvci1wb2ludGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiYWN0aXZlU3RhdGVzLmN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJzZXRDb2xvcigkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2hpZ2hsaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImZvcm1EaXNhYmxlZCA/IG51bGwgOiAwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGgtNyB3LTcgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYmctZ3JheXNjYWxlLTAgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybURpc2FibGVkID8gJ29wYWNpdHktWy4zNV0gY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICdjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1bI2YwZjBmOF0nXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfYmFja2dyb3VuZF9jb2xvcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2JhY2tncm91bmRfY29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgIWZvcm1EaXNhYmxlZCAmJiBoaWdobGlnaHRJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICFmb3JtRGlzYWJsZWQgJiYgaGlnaGxpZ2h0SW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC1weFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaWdobGlnaHRlciB0ZXh0LVsxMXB4XSB0ZXh0LVsjM2QzZDRkXVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVszcHhdIHctMy41IHJvdW5kZWQteHNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhpZ2hsaWdodCA9PT0gJ3RyYW5zcGFyZW50JyA/ICcjZmZmZjAwJyA6IGFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAjaGlnaGxpZ2h0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgaC1mdWxsIHctZnVsbCBvcGFjaXR5LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybURpc2FibGVkID8gJ2N1cnNvci1ub3QtYWxsb3dlZCcgOiAnY3Vyc29yLXBvaW50ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhY3RpdmVTdGF0ZXMuY3VycmVudEhpZ2hsaWdodCA9PT0gJ3RyYW5zcGFyZW50JyA/ICcjZmZmZjAwJyA6IGFjdGl2ZVN0YXRlcy5jdXJyZW50SGlnaGxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInNldEhpZ2hsaWdodCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2xpc3QnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlzdC11bFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9idWxsZXRfbGlzdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0J1bGxldExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVCdWxsZXRMaXN0KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlzdC1vbFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9vcmRlcmVkX2xpc3QnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNPcmRlcmVkTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZU9yZGVyZWRMaXN0KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnYWxpZ24nKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYWxpZ24tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9hbGlnbl9sZWZ0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQWxpZ25MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0VGV4dEFsaWduKCdsZWZ0JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2FsaWduX2NlbnRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduQ2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2V0VGV4dEFsaWduKCdjZW50ZXInKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1hbGlnbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9hbGlnbl9yaWdodCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImFjdGl2ZVN0YXRlcy5pc0FsaWduUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRUZXh0QWxpZ24oJ3JpZ2h0JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnYmxvY2txdW90ZScpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1xdW90ZS1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9ibG9ja3F1b3RlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiYWN0aXZlU3RhdGVzLmlzQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZUJsb2NrcXVvdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdjb2RlLWJsb2NrJykpIHtcbiAgICAgICAgICAgICAgICA8cy1lZGl0b3ItdG9vbGJhci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLWNvZGVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaW5saW5lX2NvZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVTdGF0ZXMuaXNDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlQ29kZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0Zvcm1hdEFsbG93ZWQoJ2xpbmsnKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMSBpbmxpbmUtYmxvY2sgaC01IHctcHggc2hyaW5rLTAgYmctWyNkMWQxZGNdXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmVkaXRvcl9pbnNlcnRfbGluaycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZXRMaW5rKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzRm9ybWF0QWxsb3dlZCgnaW1hZ2UnKSkge1xuICAgICAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmEgZmEtaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfaW5zZXJ0X2ltYWdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInNldEltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGhhc0FueUZvcm1hdEJlZm9yZVVuZG9SZWRvKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTEgaW5saW5lLWJsb2NrIGgtNSB3LXB4IHNocmluay0wIGJnLVsjZDFkMWRjXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cImZhIGZhLXVuZG9cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5lZGl0b3JfdW5kbycgfCB0cmFuc2xhdGUpICsgJyAoQ3RybCtaKSdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRGlzYWJsZWQgfHwgIWFjdGl2ZVN0YXRlcy5jYW5VbmRvXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJ1bmRvKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzLWVkaXRvci10b29sYmFyLWJ1dHRvblxuICAgICAgICAgICAgICAgIGljb249XCJmYSBmYS1yZWRvXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX3JlZG8nIHwgdHJhbnNsYXRlKSArICcgKEN0cmwrWSknXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkIHx8ICFhY3RpdmVTdGF0ZXMuY2FuUmVkb1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVkbygpXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtYXRBbGxvd2VkKCdjbGVhbicpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xIGlubGluZS1ibG9jayBoLTUgdy1weCBzaHJpbmstMCBiZy1bI2QxZDFkY11cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHMtZWRpdG9yLXRvb2xiYXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmYXMgZmEtZXJhc2VyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuZWRpdG9yX2NsZWFyX2Zvcm1hdHRpbmcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiY2xlYXJGb3JtYXR0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJzLWVkaXRvci1jb250ZW50IGZsZXgtMVwiXG4gICAgPjwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgICAjaW1hZ2VJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uSW1hZ2VGaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgLz5cbjwvZGl2PlxuIl19
|