@eui/components 18.1.0-snapshot-1723166109355 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/components/EuiTableComponent.html +1 -1
- package/docs/components/EuiTableSortableColComponent.html +1 -1
- package/docs/components/EuiTableV2Component.html +1 -1
- package/docs/dependencies.html +2 -2
- package/docs/js/search/search_index.js +2 -2
- package/esm2022/eui-table/eui-table.component.mjs +3 -3
- package/esm2022/eui-table/sortable-col/eui-table-sortable-col.component.mjs +3 -3
- package/esm2022/eui-table-v2/eui-table-v2.component.mjs +3 -3
- package/fesm2022/eui-components-eui-table-v2.mjs +2 -2
- package/fesm2022/eui-components-eui-table-v2.mjs.map +1 -1
- package/fesm2022/eui-components-eui-table.mjs +4 -4
- package/fesm2022/eui-components-eui-table.mjs.map +1 -1
- package/package.json +4 -4
@@ -155,11 +155,11 @@ export class EuiTableSortableColComponent {
|
|
155
155
|
return arr.filter((col) => col.name === el.name).length === 1;
|
156
156
|
}
|
157
157
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: EuiTableSortableColComponent, deps: [{ token: i1.EuiTableSortService }], target: i0.ɵɵFactoryTarget.Component }); }
|
158
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: EuiTableSortableColComponent, selector: "th[sortable]", inputs: { sortOn: "sortOn", sortOrder: "sortOrder", defaultMultiOrder: ["defaultMultiOrder", "defaultMultiOrder", numberAttribute], defaultOrder: ["defaultOrder", "defaultOrder", booleanAttribute], sortDisabled: ["sortDisabled", "sortDisabled", booleanAttribute], isMultiSortable: ["isMultiSortable", "isMultiSortable", booleanAttribute] }, host: { properties: { "class": "this.cssClasses" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: EuiDropdownComponent, descendants: true }], ngImport: i0, template: "<div class=\"eui-table__sortable-col-content\">\n <ng-content></ng-content>\n @if (!sortDisabled) {\n <button type=\"button\" euiSizeS euiButton euiIconButton euiBasicButton class=\"eui-table__sortable-icon-button\" (click)=\"click()\">\n @if (!order) {\n <eui-icon-svg icon=\"swap-vertical:outline\" fillColor=\"neutral-lighter\" [aria-label]=\"'eui.euitable.NO-SORTING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'asc') {\n <eui-icon-svg icon=\"arrow-up:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.ASCENDING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'desc') {\n <eui-icon-svg icon=\"arrow-down:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.DESCENDING-ICON' | translate\"></eui-icon-svg>\n }\n </button>\n }\n @if (isMultiSortable) {\n <ng-template [ngTemplateOutlet]=\"sortDropdown\"></ng-template>\n }\n</div>\n<ng-template #sortDropdown let-index>\n <eui-dropdown [hasClosedOnClickInside]=\"false\">\n <button type=\"button\" euiButton euiBasicButton euiRounded euiIconButton euiSizeS [euiDisabled]=\"sortDisabled\" (click)=\"onOpenDropdown()\">\n <span euiBadge euiPrimary euiOutline>{{ currentMultiSortPosition }}</span>\n </button>\n <eui-dropdown-content>\n <div class=\"eui-u-pt-xs eui-u-pl-s\">\n <small>{{ 'eui.euitable.CHOOSE-SORT-ORDER' | translate }}</small>\n </div>\n @if (form) {\n <form [formGroup]=\"form\">\n <ng-container formArrayName=\"columns\">\n @for (columnForm of columns.controls; let i = $index; track
|
158
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: EuiTableSortableColComponent, selector: "th[sortable]", inputs: { sortOn: "sortOn", sortOrder: "sortOrder", defaultMultiOrder: ["defaultMultiOrder", "defaultMultiOrder", numberAttribute], defaultOrder: ["defaultOrder", "defaultOrder", booleanAttribute], sortDisabled: ["sortDisabled", "sortDisabled", booleanAttribute], isMultiSortable: ["isMultiSortable", "isMultiSortable", booleanAttribute] }, host: { properties: { "class": "this.cssClasses" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: EuiDropdownComponent, descendants: true }], ngImport: i0, template: "<div class=\"eui-table__sortable-col-content\">\n <ng-content></ng-content>\n @if (!sortDisabled) {\n <button type=\"button\" euiSizeS euiButton euiIconButton euiBasicButton class=\"eui-table__sortable-icon-button\" (click)=\"click()\">\n @if (!order) {\n <eui-icon-svg icon=\"swap-vertical:outline\" fillColor=\"neutral-lighter\" [aria-label]=\"'eui.euitable.NO-SORTING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'asc') {\n <eui-icon-svg icon=\"arrow-up:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.ASCENDING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'desc') {\n <eui-icon-svg icon=\"arrow-down:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.DESCENDING-ICON' | translate\"></eui-icon-svg>\n }\n </button>\n }\n @if (isMultiSortable) {\n <ng-template [ngTemplateOutlet]=\"sortDropdown\"></ng-template>\n }\n</div>\n<ng-template #sortDropdown let-index>\n <eui-dropdown [hasClosedOnClickInside]=\"false\">\n <button type=\"button\" euiButton euiBasicButton euiRounded euiIconButton euiSizeS [euiDisabled]=\"sortDisabled\" (click)=\"onOpenDropdown()\">\n <span euiBadge euiPrimary euiOutline>{{ currentMultiSortPosition }}</span>\n </button>\n <eui-dropdown-content>\n <div class=\"eui-u-pt-xs eui-u-pl-s\">\n <small>{{ 'eui.euitable.CHOOSE-SORT-ORDER' | translate }}</small>\n </div>\n @if (form) {\n <form [formGroup]=\"form\">\n <ng-container formArrayName=\"columns\">\n @for (columnForm of columns.controls; let i = $index; track $index) {\n <div class=\"eui-u-flex eui-u-p-s\" [formGroup]=\"form.get('columns')['controls'][i]\">\n <span euiLabel class=\"eui-u-mr-s\">{{ i + 1 }}</span>\n <select euiSelect euiSizeS formControlName=\"name\" class=\"eui-u-mr-s\">\n <option value=\"\"></option>\n @for (column of multisortParams; track $index) {\n <option [value]=\"column.name\">{{ column.name }}</option>\n }\n </select>\n @if (!getOrderByIndex(i)) {\n <button type=\"button\" euiSizeS euiSecondary euiButton euiIconButton euiBasicButton (click)=\"onClickMultisortOrder(i + 1, 'asc')\">\n <eui-icon-svg icon=\"swap-vertical:outline\" [aria-label]=\"'eui.euitable.NO-SORTING-ICON' | translate\"></eui-icon-svg>\n </button>\n }\n @if (getOrderByIndex(i) === 'asc') {\n <button type=\"button\" euiSizeS euiPrimary euiButton euiIconButton euiBasicButton (click)=\"onClickMultisortOrder(i + 1, 'desc')\">\n <eui-icon-svg icon=\"arrow-up:outline\" [aria-label]=\"'eui.euitable.ASCENDING-ICON' | translate\"></eui-icon-svg>\n </button>\n }\n @if (getOrderByIndex(i) === 'desc') {\n <button type=\"button\" euiSizeS euiPrimary euiButton euiIconButton euiBasicButton (click)=\"onClickMultisortOrder(i + 1, null)\">\n <eui-icon-svg icon=\"arrow-down:outline\" [aria-label]=\"'eui.euitable.DESCENDING-ICON' | translate\"></eui-icon-svg>\n </button>\n }\n </div>\n }\n </ng-container>\n </form>\n }\n @if (error) {\n <p class=\"eui-u-mt-none eui-u-mb-none eui-u-ml-s\">\n <eui-feedback-message euiDanger>{{ 'eui.euitable.WRONG-SORT-PARAMS' | translate }}</eui-feedback-message>\n </p>\n }\n <div class=\"eui-u-flex eui-u-flex-justify-content-between eui-u-p-s\">\n <button type=\"button\" euiButton euiSizeS euiSecondary (click)=\"onCancelMultiSort()\">{{ 'eui.CANCEL' | translate }}</button>\n <button type=\"button\" euiButton euiSizeS euiPrimary (click)=\"onSubmitMultiSort()\">{{ 'eui.APPLY' | translate }}</button>\n </div>\n </eui-dropdown-content>\n </eui-dropdown>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i5.EuiDropdownComponent, selector: "eui-dropdown", inputs: ["e2eAttr", "tabIndex", "width", "position", "isBlock", "isDropDownRightAligned", "hasClosedOnClickInside", "isLabelUpdatedFromSelectedItem", "isExpandOnHover", "hasTabNavigation", "isRightClickEnabled", "euiDisabled"], outputs: ["expand"] }, { kind: "directive", type: i5.EuiDropdownContentDirective, selector: "eui-dropdown-content" }, { kind: "component", type: i6.EuiButtonComponent, selector: "button[euiButton], a[euiButton]", inputs: ["e2eAttr", "id", "euiBasicButton", "euiButtonCall", "euiBlockButton", "euiIconButton", "euiLineWrap", "isChecked", "euiDisabled"], outputs: ["buttonClick"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i7.EuiFeedbackMessageComponent, selector: "eui-feedback-message", inputs: ["isMuted"] }, { kind: "component", type: i8.EuiSelectComponent, selector: "select[euiSelect]", inputs: ["placeholder", "readonly", "isInvalid"] }, { kind: "directive", type: i8.EuiNgSelectOptionDirective, selector: "option:not([eclSelectOption]):not([eclMultiselectOption]), option[euiOption]", inputs: ["selected", "label", "ngValue"] }, { kind: "directive", type: i8.EuiSelectControlValueAccessor, selector: "select:not([multiple])[formControlName][euiSelect],select:not([multiple])[formControl][euiSelect],select:not([multiple])[ngModel][euiSelect]", inputs: ["placeholder"] }, { kind: "directive", type: i8.EuiSelectMultipleOption, selector: "option, option[euiOption]", inputs: ["ngValue", "value"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
159
159
|
}
|
160
160
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: EuiTableSortableColComponent, decorators: [{
|
161
161
|
type: Component,
|
162
|
-
args: [{ selector: 'th[sortable]', template: "<div class=\"eui-table__sortable-col-content\">\n <ng-content></ng-content>\n @if (!sortDisabled) {\n <button type=\"button\" euiSizeS euiButton euiIconButton euiBasicButton class=\"eui-table__sortable-icon-button\" (click)=\"click()\">\n @if (!order) {\n <eui-icon-svg icon=\"swap-vertical:outline\" fillColor=\"neutral-lighter\" [aria-label]=\"'eui.euitable.NO-SORTING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'asc') {\n <eui-icon-svg icon=\"arrow-up:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.ASCENDING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'desc') {\n <eui-icon-svg icon=\"arrow-down:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.DESCENDING-ICON' | translate\"></eui-icon-svg>\n }\n </button>\n }\n @if (isMultiSortable) {\n <ng-template [ngTemplateOutlet]=\"sortDropdown\"></ng-template>\n }\n</div>\n<ng-template #sortDropdown let-index>\n <eui-dropdown [hasClosedOnClickInside]=\"false\">\n <button type=\"button\" euiButton euiBasicButton euiRounded euiIconButton euiSizeS [euiDisabled]=\"sortDisabled\" (click)=\"onOpenDropdown()\">\n <span euiBadge euiPrimary euiOutline>{{ currentMultiSortPosition }}</span>\n </button>\n <eui-dropdown-content>\n <div class=\"eui-u-pt-xs eui-u-pl-s\">\n <small>{{ 'eui.euitable.CHOOSE-SORT-ORDER' | translate }}</small>\n </div>\n @if (form) {\n <form [formGroup]=\"form\">\n <ng-container formArrayName=\"columns\">\n @for (columnForm of columns.controls; let i = $index; track
|
162
|
+
args: [{ selector: 'th[sortable]', template: "<div class=\"eui-table__sortable-col-content\">\n <ng-content></ng-content>\n @if (!sortDisabled) {\n <button type=\"button\" euiSizeS euiButton euiIconButton euiBasicButton class=\"eui-table__sortable-icon-button\" (click)=\"click()\">\n @if (!order) {\n <eui-icon-svg icon=\"swap-vertical:outline\" fillColor=\"neutral-lighter\" [aria-label]=\"'eui.euitable.NO-SORTING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'asc') {\n <eui-icon-svg icon=\"arrow-up:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.ASCENDING-ICON' | translate\"></eui-icon-svg>\n }\n @if (order === 'desc') {\n <eui-icon-svg icon=\"arrow-down:outline\" fillColor=\"primary\" [aria-label]=\"'eui.euitable.DESCENDING-ICON' | translate\"></eui-icon-svg>\n }\n </button>\n }\n @if (isMultiSortable) {\n <ng-template [ngTemplateOutlet]=\"sortDropdown\"></ng-template>\n }\n</div>\n<ng-template #sortDropdown let-index>\n <eui-dropdown [hasClosedOnClickInside]=\"false\">\n <button type=\"button\" euiButton euiBasicButton euiRounded euiIconButton euiSizeS [euiDisabled]=\"sortDisabled\" (click)=\"onOpenDropdown()\">\n <span euiBadge euiPrimary euiOutline>{{ currentMultiSortPosition }}</span>\n </button>\n <eui-dropdown-content>\n <div class=\"eui-u-pt-xs eui-u-pl-s\">\n <small>{{ 'eui.euitable.CHOOSE-SORT-ORDER' | translate }}</small>\n </div>\n @if (form) {\n <form [formGroup]=\"form\">\n <ng-container formArrayName=\"columns\">\n @for (columnForm of columns.controls; let i = $index; track $index) {\n <div class=\"eui-u-flex eui-u-p-s\" [formGroup]=\"form.get('columns')['controls'][i]\">\n <span euiLabel class=\"eui-u-mr-s\">{{ i + 1 }}</span>\n <select euiSelect euiSizeS formControlName=\"name\" class=\"eui-u-mr-s\">\n <option value=\"\"></option>\n @for (column of multisortParams; track $index) {\n <option [value]=\"column.name\">{{ column.name }}</option>\n }\n </select>\n @if (!getOrderByIndex(i)) {\n <button type=\"button\" euiSizeS euiSecondary euiButton euiIconButton euiBasicButton (click)=\"onClickMultisortOrder(i + 1, 'asc')\">\n <eui-icon-svg icon=\"swap-vertical:outline\" [aria-label]=\"'eui.euitable.NO-SORTING-ICON' | translate\"></eui-icon-svg>\n </button>\n }\n @if (getOrderByIndex(i) === 'asc') {\n <button type=\"button\" euiSizeS euiPrimary euiButton euiIconButton euiBasicButton (click)=\"onClickMultisortOrder(i + 1, 'desc')\">\n <eui-icon-svg icon=\"arrow-up:outline\" [aria-label]=\"'eui.euitable.ASCENDING-ICON' | translate\"></eui-icon-svg>\n </button>\n }\n @if (getOrderByIndex(i) === 'desc') {\n <button type=\"button\" euiSizeS euiPrimary euiButton euiIconButton euiBasicButton (click)=\"onClickMultisortOrder(i + 1, null)\">\n <eui-icon-svg icon=\"arrow-down:outline\" [aria-label]=\"'eui.euitable.DESCENDING-ICON' | translate\"></eui-icon-svg>\n </button>\n }\n </div>\n }\n </ng-container>\n </form>\n }\n @if (error) {\n <p class=\"eui-u-mt-none eui-u-mb-none eui-u-ml-s\">\n <eui-feedback-message euiDanger>{{ 'eui.euitable.WRONG-SORT-PARAMS' | translate }}</eui-feedback-message>\n </p>\n }\n <div class=\"eui-u-flex eui-u-flex-justify-content-between eui-u-p-s\">\n <button type=\"button\" euiButton euiSizeS euiSecondary (click)=\"onCancelMultiSort()\">{{ 'eui.CANCEL' | translate }}</button>\n <button type=\"button\" euiButton euiSizeS euiPrimary (click)=\"onSubmitMultiSort()\">{{ 'eui.APPLY' | translate }}</button>\n </div>\n </eui-dropdown-content>\n </eui-dropdown>\n</ng-template>\n" }]
|
163
163
|
}], ctorParameters: () => [{ type: i1.EuiTableSortService }], propDecorators: { dropdown: [{
|
164
164
|
type: ViewChild,
|
165
165
|
args: [EuiDropdownComponent]
|
@@ -183,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
183
183
|
type: HostBinding,
|
184
184
|
args: ['class']
|
185
185
|
}] } });
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRhYmxlLXNvcnRhYmxlLWNvbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ldWktdGFibGUvc29ydGFibGUtY29sL2V1aS10YWJsZS1zb3J0YWJsZS1jb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZXVpLXRhYmxlL3NvcnRhYmxlLWNvbC9ldWktdGFibGUtc29ydGFibGUtY29sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFhLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPNUQsTUFBTSxPQUFPLDRCQUE0QjtJQWlCckMsSUFDSSxVQUFVO1FBQ1YsT0FBTyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEgsQ0FBQztJQUVELFlBQW9CLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBbkJuRCxjQUFTLEdBQW1CLE1BQU0sQ0FBQztRQUNMLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUN4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNy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RGVzdHJveSwgSW5wdXQsIEhvc3RCaW5kaW5nLCBWaWV3Q2hpbGQsIG51bWJlckF0dHJpYnV0ZSwgYm9vbGVhbkF0dHJpYnV0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRXVpRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcblxuaW1wb3J0IHsgRXVpVGFibGVTb3J0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2V1aS10YWJsZS1zb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlzb3J0UGFyYW0gfSBmcm9tICcuLi9tb2RlbHMvbXVsdGktc29ydC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHNlbGVjdG9yOiAndGhbc29ydGFibGVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLXRhYmxlLXNvcnRhYmxlLWNvbC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRhYmxlU29ydGFibGVDb2xDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZChFdWlEcm9wZG93bkNvbXBvbmVudCkgZHJvcGRvd246IEV1aURyb3Bkb3duQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIHNvcnRPbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYycgPSAnZGVzYyc7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgZGVmYXVsdE11bHRpT3JkZXIgPSBudWxsO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkZWZhdWx0T3JkZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzTXVsdGlTb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgPSAnZGVzYyc7XG4gICAgbXVsdGlzb3J0UGFyYW1zOiBNdWx0aXNvcnRQYXJhbVtdID0gW107XG4gICAgY3VycmVudE11bHRpU29ydFBvc2l0aW9uID0gMDtcbiAgICBlcnJvciA9IGZhbHNlO1xuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFsnZXVpLXRhYmxlX19zb3J0YWJsZS1jb2wnLCB0aGlzLnNvcnREaXNhYmxlZCA/ICdldWktdGFibGVfX3NvcnRhYmxlLWNvbC0tZGlzYWJsZWQnIDogJyddLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBldWlUYWJsZVNvcnRTZXJ2aWNlOiBFdWlUYWJsZVNvcnRTZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlTb3J0YWJsZSAmJiAhdGhpcy5zb3J0RGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRNdWx0aU9yZGVyID4gMCAmJiB0aGlzLnNvcnRPcmRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVTb3J0U2VydmljZS5hZGRNdWx0aXNvcnRQYXJhbShuZXcgTXVsdGlzb3J0UGFyYW0odGhpcy5zb3J0T24sIHRoaXMuc29ydE9yZGVyLCB0aGlzLmRlZmF1bHRNdWx0aU9yZGVyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVTb3J0U2VydmljZS5hZGRNdWx0aXNvcnRQYXJhbShuZXcgTXVsdGlzb3J0UGFyYW0odGhpcy5zb3J0T24sIG51bGwsIDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZXVpVGFibGVTb3J0U2VydmljZS5zb3J0aW5nUGFyYW1zJCwgdGhpcy5ldWlUYWJsZVNvcnRTZXJ2aWNlLm11bHRpc29ydFBhcmFtc0NoYW5nZSRdKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW3NvcnRpbmdQYXJhbXMsIG11bHRpc29ydFBhcmFtc10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aVNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nUGFyYW1zLnNvcnQgIT09IHRoaXMuc29ydE9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSBzb3J0aW5nUGFyYW1zLm9yZGVyIGFzICgnYXNjJyB8ICdkZXNjJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm11bHRpc29ydFBhcmFtcyA9IFsuLi5tdWx0aXNvcnRQYXJhbXNdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHsgY29sdW1uczogdGhpcy5ldWlUYWJsZVNvcnRTZXJ2aWNlLnRvRm9ybUdyb3VwKG11bHRpc29ydFBhcmFtcykgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nUGFyYW1zLm9yZGVyICE9PSBudWxsICYmIHNvcnRpbmdQYXJhbXMuc29ydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TXVsdGlTb3J0UG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvcnRpbmdQYXJhbXMuc29ydCAhPT0gdGhpcy5zb3J0T24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50TXVsdGlzb3J0UG9zaXRpb24obXVsdGlzb3J0UGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRPcmRlcikge1xuICAgICAgICAgICAgdGhpcy5vcmRlciA9IHRoaXMuc29ydE9yZGVyO1xuICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVNvcnRTZXJ2aWNlLnNldFNvcnQodGhpcy5zb3J0T24sIHRoaXMub3JkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGdldCBjb2x1bW5zKCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHNbJ2NvbHVtbnMnXSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc29ydERpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gJ2Rlc2MnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSAnYXNjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXVpVGFibGVTb3J0U2VydmljZS5zZXRTb3J0KHRoaXMuc29ydE9uLCB0aGlzLm9yZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xpY2tNdWx0aXNvcnRPcmRlcihpbmRleDogbnVtYmVyLCBvcmRlcjogJ2FzYycgfCAnZGVzYycgfCBudWxsKTogdm9pZCB7XG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdjb2x1bW5zJykgYXMgRm9ybUFycmF5KS5jb250cm9sc1tpbmRleCAtIDFdLmdldCgnb3JkZXInKS5wYXRjaFZhbHVlKG9yZGVyKTtcbiAgICB9XG5cbiAgICBvbk9wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdldE9yZGVyQnlJbmRleChpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgnY29sdW1ucycpIGFzIEZvcm1BcnJheSkuY29udHJvbHNbaW5kZXhdLmdldCgnb3JkZXInKS52YWx1ZTtcbiAgICB9XG5cbiAgICBvbkNhbmNlbE11bHRpU29ydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgb25TdWJtaXRNdWx0aVNvcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycjogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgfT4gPSBbXTtcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ2NvbHVtbnMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWwuZ2V0KCduYW1lJykudmFsdWUgJiYgZWwuZ2V0KCdvcmRlcicpLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goeyBuYW1lOiBlbC5nZXQoJ25hbWUnKS52YWx1ZSwgb3JkZXI6IGVsLmdldCgnb3JkZXInKS52YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvclNvcnRpbmcoYXJyKSkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aXNvcnRQYXJhbXMubWFwKChlbCkgPT4gdGhpcy5zZXRTb3J0YWJsZVBhcmFtcyhlbCwgYXJyKSk7XG4gICAgICAgICAgICB0aGlzLmV1aVRhYmxlU29ydFNlcnZpY2Uuc2V0TXVsdGlTb3J0Q29sdW1ucyh0aGlzLm11bHRpc29ydFBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTb3J0YWJsZVBhcmFtcyhlbDogTXVsdGlzb3J0UGFyYW0sIGFycjogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgfT4pOiBNdWx0aXNvcnRQYXJhbSB7XG4gICAgICAgIGNvbnN0IGN1cnJFbEFyciA9IGFyci5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGVsLm5hbWUpO1xuICAgICAgICBpZiAoY3VyckVsQXJyKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGFyci5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gZWwubmFtZSk7XG4gICAgICAgICAgICBlbC5vcmRlciA9IGN1cnJFbEFyci5vcmRlcjtcbiAgICAgICAgICAgIGVsLnBvc2l0aW9uID0gaW5kZXggKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwub3JkZXIgPSBudWxsO1xuICAgICAgICAgICAgZWwucG9zaXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEN1cnJlbnRNdWx0aXNvcnRQb3NpdGlvbihtdWx0aXNvcnRQYXJhbXM6IE11bHRpc29ydFBhcmFtW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IG11bHRpc29ydFBhcmFtcy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gdGhpcy5zb3J0T24pO1xuICAgICAgICBpZiAoY3VycmVudENvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5vcmRlciA9IGN1cnJlbnRDb2x1bW4ub3JkZXI7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNdWx0aVNvcnRQb3NpdGlvbiA9IGN1cnJlbnRDb2x1bW4ucG9zaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE11bHRpU29ydFBvc2l0aW9uID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tWYWxpZEZvclNvcnRpbmcoYXJyOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgb3JkZXI6IHN0cmluZyB9Pik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnIuZmluZCgoZWwpID0+ICF0aGlzLmlzRWxlbWVudFVuaXF1ZU5hbWUoYXJyLCBlbCkpID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0VsZW1lbnRVbmlxdWVOYW1lKGFycjogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IG9yZGVyOiBzdHJpbmcgfT4sIGVsOiB7IG5hbWU6IHN0cmluZzsgb3JkZXI6IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhcnIuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lID09PSBlbC5uYW1lKS5sZW5ndGggPT09IDE7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV1aS10YWJsZV9fc29ydGFibGUtY29sLWNvbnRlbnRcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgQGlmICghc29ydERpc2FibGVkKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGV1aVNpemVTIGV1aUJ1dHRvbiBldWlJY29uQnV0dG9uIGV1aUJhc2ljQnV0dG9uIGNsYXNzPVwiZXVpLXRhYmxlX19zb3J0YWJsZS1pY29uLWJ1dHRvblwiIChjbGljayk9XCJjbGljaygpXCI+XG4gICAgICAgICAgICBAaWYgKCFvcmRlcikge1xuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cInN3YXAtdmVydGljYWw6b3V0bGluZVwiIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRlclwiIFthcmlhLWxhYmVsXT1cIidldWkuZXVpdGFibGUuTk8tU09SVElORy1JQ09OJyB8IHRyYW5zbGF0ZVwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChvcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJhcnJvdy11cDpvdXRsaW5lXCIgZmlsbENvbG9yPVwicHJpbWFyeVwiIFthcmlhLWxhYmVsXT1cIidldWkuZXVpdGFibGUuQVNDRU5ESU5HLUlDT04nIHwgdHJhbnNsYXRlXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJhcnJvdy1kb3duOm91dGxpbmVcIiBmaWxsQ29sb3I9XCJwcmltYXJ5XCIgW2FyaWEtbGFiZWxdPVwiJ2V1aS5ldWl0YWJsZS5ERVNDRU5ESU5HLUlDT04nIHwgdHJhbnNsYXRlXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKGlzTXVsdGlTb3J0YWJsZSkge1xuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic29ydERyb3Bkb3duXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjc29ydERyb3Bkb3duIGxldC1pbmRleD5cbiAgICA8ZXVpLWRyb3Bkb3duIFtoYXNDbG9zZWRPbkNsaWNrSW5zaWRlXT1cImZhbHNlXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGV1aUJ1dHRvbiBldWlCYXNpY0J1dHRvbiBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpU2l6ZVMgW2V1aURpc2FibGVkXT1cInNvcnREaXNhYmxlZFwiIChjbGljayk9XCJvbk9wZW5Ecm9wZG93bigpXCI+XG4gICAgICAgICAgICA8c3BhbiBldWlCYWRnZSBldWlQcmltYXJ5IGV1aU91dGxpbmU+e3sgY3VycmVudE11bHRpU29ydFBvc2l0aW9uIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS11LXB0LXhzIGV1aS11LXBsLXNcIj5cbiAgICAgICAgICAgICAgICA8c21hbGw+e3sgJ2V1aS5ldWl0YWJsZS5DSE9PU0UtU09SVC1PUkRFUicgfCB0cmFuc2xhdGUgfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwiY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uRm9ybSBvZiBjb2x1bW5zLmNvbnRyb2xzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgY29sdW1uRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdS1mbGV4IGV1aS11LXAtc1wiIFtmb3JtR3JvdXBdPVwiZm9ybS5nZXQoJ2NvbHVtbnMnKVsnY29udHJvbHMnXVtpXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBldWlMYWJlbCBjbGFzcz1cImV1aS11LW1yLXNcIj57eyBpICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBldWlTZWxlY3QgZXVpU2l6ZVMgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIGNsYXNzPVwiZXVpLXUtbXItc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIG11bHRpc29ydFBhcmFtczsgdHJhY2sgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiY29sdW1uLm5hbWVcIj57eyBjb2x1bW4ubmFtZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZ2V0T3JkZXJCeUluZGV4KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBldWlTaXplUyBldWlTZWNvbmRhcnkgZXVpQnV0dG9uIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tNdWx0aXNvcnRPcmRlcihpICsgMSwgJ2FzYycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwic3dhcC12ZXJ0aWNhbDpvdXRsaW5lXCIgW2FyaWEtbGFiZWxdPVwiJ2V1aS5ldWl0YWJsZS5OTy1TT1JUSU5HLUlDT04nIHwgdHJhbnNsYXRlXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdldE9yZGVyQnlJbmRleChpKSA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGV1aVNpemVTIGV1aVByaW1hcnkgZXVpQnV0dG9uIGV1aUljb25CdXR0b24gZXVpQmFzaWNCdXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tNdWx0aXNvcnRPcmRlcihpICsgMSwgJ2Rlc2MnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImFycm93LXVwOm91dGxpbmVcIiBbYXJpYS1sYWJlbF09XCInZXVpLmV1aXRhYmxlLkFTQ0VORElORy1JQ09OJyB8IHRyYW5zbGF0ZVwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChnZXRPcmRlckJ5SW5kZXgoaSkgPT09ICdkZXNjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZXVpU2l6ZVMgZXVpUHJpbWFyeSBldWlCdXR0b24gZXVpSWNvbkJ1dHRvbiBldWlCYXNpY0J1dHRvbiAoY2xpY2spPVwib25DbGlja011bHRpc29ydE9yZGVyKGkgKyAxLCBudWxsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cImFycm93LWRvd246b3V0bGluZVwiIFthcmlhLWxhYmVsXT1cIidldWkuZXVpdGFibGUuREVTQ0VORElORy1JQ09OJyB8IHRyYW5zbGF0ZVwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXVpLXUtbXQtbm9uZSBldWktdS1tYi1ub25lIGV1aS11LW1sLXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1mZWVkYmFjay1tZXNzYWdlIGV1aURhbmdlcj57eyAnZXVpLmV1aXRhYmxlLldST05HLVNPUlQtUEFSQU1TJyB8IHRyYW5zbGF0ZSB9fTwvZXVpLWZlZWRiYWNrLW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS11LWZsZXggZXVpLXUtZmxleC1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBldWktdS1wLXNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBldWlCdXR0b24gZXVpU2l6ZVMgZXVpU2Vjb25kYXJ5IChjbGljayk9XCJvbkNhbmNlbE11bHRpU29ydCgpXCI+e3sgJ2V1aS5DQU5DRUwnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZXVpQnV0dG9uIGV1aVNpemVTIGV1aVByaW1hcnkgKGNsaWNrKT1cIm9uU3VibWl0TXVsdGlTb3J0KClcIj57eyAnZXVpLkFQUExZJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZXVpLWRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgPC9ldWktZHJvcGRvd24+XG48L25nLXRlbXBsYXRlPlxuIl19
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRhYmxlLXNvcnRhYmxlLWNvbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ldWktdGFibGUvc29ydGFibGUtY29sL2V1aS10YWJsZS1zb3J0YWJsZS1jb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZXVpLXRhYmxlL3NvcnRhYmxlLWNvbC9ldWktdGFibGUtc29ydGFibGUtY29sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFhLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7QUFPNUQsTUFBTSxPQUFPLDRCQUE0QjtJQWlCckMsSUFDSSxVQUFVO1FBQ1YsT0FBTyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEgsQ0FBQztJQUVELFlBQW9CLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBbkJuRCxjQUFTLEdBQW1CLE1BQU0sQ0FBQztRQUNMLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUN4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUV6RCxVQUFLLEdBQTBCLE1BQU0sQ0FBQztRQUM3QyxvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFDdkMsNkJBQXdCLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFHTixhQUFRLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7SUFPRyxDQUFDO0lBRWhFLFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ3hILENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RixDQUFDO1FBQ0wsQ0FBQztRQUVELGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUM7YUFDcEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDdEIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQXlCLENBQUM7Z0JBQ3pELENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlGLElBQUksYUFBYSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ3RCLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixPQUFPO29CQUNYLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFjLENBQUM7SUFDdEQsQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWEsRUFBRSxLQUE0QjtRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDekIsT0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0RixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsTUFBTSxHQUFHLEdBQTBELEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDNUQsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQUMsRUFBa0IsRUFBRSxHQUEwRDtRQUNwRyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0QsRUFBRSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQzNCLEVBQUUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNKLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxlQUFpQztRQUNqRSxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxHQUEyQztRQUNwRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDO0lBQzlFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxHQUEyQyxFQUFFLEVBQW1DO1FBQ3hHLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDOzhHQXhKUSw0QkFBNEI7a0dBQTVCLDRCQUE0Qiw4SUFJakIsZUFBZSxrREFDZixnQkFBZ0Isa0RBQ2hCLGdCQUFnQiwyREFDaEIsZ0JBQWdCLDZIQU56QixvQkFBb0IsZ0RDZm5DLCtuSkF3RUE7OzJGRDFEYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBRUksY0FBYzt3RkFJUyxRQUFRO3NCQUF4QyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDdEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ2lDLGlCQUFpQjtzQkFBdkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBQ0csWUFBWTtzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxZQUFZO3NCQUFuRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGVBQWU7c0JBQXRELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBV2xDLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEhvc3RCaW5kaW5nLCBWaWV3Q2hpbGQsIG51bWJlckF0dHJpYnV0ZSwgYm9vbGVhbkF0dHJpYnV0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRXVpRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLWRyb3Bkb3duJztcblxuaW1wb3J0IHsgRXVpVGFibGVTb3J0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2V1aS10YWJsZS1zb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlzb3J0UGFyYW0gfSBmcm9tICcuLi9tb2RlbHMvbXVsdGktc29ydC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHNlbGVjdG9yOiAndGhbc29ydGFibGVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLXRhYmxlLXNvcnRhYmxlLWNvbC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRhYmxlU29ydGFibGVDb2xDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZChFdWlEcm9wZG93bkNvbXBvbmVudCkgZHJvcGRvd246IEV1aURyb3Bkb3duQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIHNvcnRPbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNvcnRPcmRlcjogJ2FzYycgfCAnZGVzYycgPSAnZGVzYyc7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgZGVmYXVsdE11bHRpT3JkZXIgPSBudWxsO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkZWZhdWx0T3JkZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzTXVsdGlTb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgPSAnZGVzYyc7XG4gICAgbXVsdGlzb3J0UGFyYW1zOiBNdWx0aXNvcnRQYXJhbVtdID0gW107XG4gICAgY3VycmVudE11bHRpU29ydFBvc2l0aW9uID0gMDtcbiAgICBlcnJvciA9IGZhbHNlO1xuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFsnZXVpLXRhYmxlX19zb3J0YWJsZS1jb2wnLCB0aGlzLnNvcnREaXNhYmxlZCA/ICdldWktdGFibGVfX3NvcnRhYmxlLWNvbC0tZGlzYWJsZWQnIDogJyddLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBldWlUYWJsZVNvcnRTZXJ2aWNlOiBFdWlUYWJsZVNvcnRTZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlTb3J0YWJsZSAmJiAhdGhpcy5zb3J0RGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRNdWx0aU9yZGVyID4gMCAmJiB0aGlzLnNvcnRPcmRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVTb3J0U2VydmljZS5hZGRNdWx0aXNvcnRQYXJhbShuZXcgTXVsdGlzb3J0UGFyYW0odGhpcy5zb3J0T24sIHRoaXMuc29ydE9yZGVyLCB0aGlzLmRlZmF1bHRNdWx0aU9yZGVyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVTb3J0U2VydmljZS5hZGRNdWx0aXNvcnRQYXJhbShuZXcgTXVsdGlzb3J0UGFyYW0odGhpcy5zb3J0T24sIG51bGwsIDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZXVpVGFibGVTb3J0U2VydmljZS5zb3J0aW5nUGFyYW1zJCwgdGhpcy5ldWlUYWJsZVNvcnRTZXJ2aWNlLm11bHRpc29ydFBhcmFtc0NoYW5nZSRdKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW3NvcnRpbmdQYXJhbXMsIG11bHRpc29ydFBhcmFtc10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aVNvcnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nUGFyYW1zLnNvcnQgIT09IHRoaXMuc29ydE9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSBzb3J0aW5nUGFyYW1zLm9yZGVyIGFzICgnYXNjJyB8ICdkZXNjJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm11bHRpc29ydFBhcmFtcyA9IFsuLi5tdWx0aXNvcnRQYXJhbXNdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHsgY29sdW1uczogdGhpcy5ldWlUYWJsZVNvcnRTZXJ2aWNlLnRvRm9ybUdyb3VwKG11bHRpc29ydFBhcmFtcykgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nUGFyYW1zLm9yZGVyICE9PSBudWxsICYmIHNvcnRpbmdQYXJhbXMuc29ydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TXVsdGlTb3J0UG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvcnRpbmdQYXJhbXMuc29ydCAhPT0gdGhpcy5zb3J0T24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50TXVsdGlzb3J0UG9zaXRpb24obXVsdGlzb3J0UGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRPcmRlcikge1xuICAgICAgICAgICAgdGhpcy5vcmRlciA9IHRoaXMuc29ydE9yZGVyO1xuICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVNvcnRTZXJ2aWNlLnNldFNvcnQodGhpcy5zb3J0T24sIHRoaXMub3JkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGdldCBjb2x1bW5zKCk6IEZvcm1BcnJheSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHNbJ2NvbHVtbnMnXSBhcyBGb3JtQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc29ydERpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gJ2Rlc2MnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3JkZXIgPSAnYXNjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXVpVGFibGVTb3J0U2VydmljZS5zZXRTb3J0KHRoaXMuc29ydE9uLCB0aGlzLm9yZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xpY2tNdWx0aXNvcnRPcmRlcihpbmRleDogbnVtYmVyLCBvcmRlcjogJ2FzYycgfCAnZGVzYycgfCBudWxsKTogdm9pZCB7XG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdjb2x1bW5zJykgYXMgRm9ybUFycmF5KS5jb250cm9sc1tpbmRleCAtIDFdLmdldCgnb3JkZXInKS5wYXRjaFZhbHVlKG9yZGVyKTtcbiAgICB9XG5cbiAgICBvbk9wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGdldE9yZGVyQnlJbmRleChpbmRleDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgnY29sdW1ucycpIGFzIEZvcm1BcnJheSkuY29udHJvbHNbaW5kZXhdLmdldCgnb3JkZXInKS52YWx1ZTtcbiAgICB9XG5cbiAgICBvbkNhbmNlbE11bHRpU29ydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgb25TdWJtaXRNdWx0aVNvcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycjogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgfT4gPSBbXTtcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ2NvbHVtbnMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWwuZ2V0KCduYW1lJykudmFsdWUgJiYgZWwuZ2V0KCdvcmRlcicpLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2goeyBuYW1lOiBlbC5nZXQoJ25hbWUnKS52YWx1ZSwgb3JkZXI6IGVsLmdldCgnb3JkZXInKS52YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvclNvcnRpbmcoYXJyKSkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aXNvcnRQYXJhbXMubWFwKChlbCkgPT4gdGhpcy5zZXRTb3J0YWJsZVBhcmFtcyhlbCwgYXJyKSk7XG4gICAgICAgICAgICB0aGlzLmV1aVRhYmxlU29ydFNlcnZpY2Uuc2V0TXVsdGlTb3J0Q29sdW1ucyh0aGlzLm11bHRpc29ydFBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTb3J0YWJsZVBhcmFtcyhlbDogTXVsdGlzb3J0UGFyYW0sIGFycjogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IG9yZGVyOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgfT4pOiBNdWx0aXNvcnRQYXJhbSB7XG4gICAgICAgIGNvbnN0IGN1cnJFbEFyciA9IGFyci5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGVsLm5hbWUpO1xuICAgICAgICBpZiAoY3VyckVsQXJyKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGFyci5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gZWwubmFtZSk7XG4gICAgICAgICAgICBlbC5vcmRlciA9IGN1cnJFbEFyci5vcmRlcjtcbiAgICAgICAgICAgIGVsLnBvc2l0aW9uID0gaW5kZXggKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwub3JkZXIgPSBudWxsO1xuICAgICAgICAgICAgZWwucG9zaXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEN1cnJlbnRNdWx0aXNvcnRQb3NpdGlvbihtdWx0aXNvcnRQYXJhbXM6IE11bHRpc29ydFBhcmFtW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IG11bHRpc29ydFBhcmFtcy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gdGhpcy5zb3J0T24pO1xuICAgICAgICBpZiAoY3VycmVudENvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5vcmRlciA9IGN1cnJlbnRDb2x1bW4ub3JkZXI7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNdWx0aVNvcnRQb3NpdGlvbiA9IGN1cnJlbnRDb2x1bW4ucG9zaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE11bHRpU29ydFBvc2l0aW9uID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tWYWxpZEZvclNvcnRpbmcoYXJyOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgb3JkZXI6IHN0cmluZyB9Pik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnIuZmluZCgoZWwpID0+ICF0aGlzLmlzRWxlbWVudFVuaXF1ZU5hbWUoYXJyLCBlbCkpID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0VsZW1lbnRVbmlxdWVOYW1lKGFycjogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IG9yZGVyOiBzdHJpbmcgfT4sIGVsOiB7IG5hbWU6IHN0cmluZzsgb3JkZXI6IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhcnIuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lID09PSBlbC5uYW1lKS5sZW5ndGggPT09IDE7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV1aS10YWJsZV9fc29ydGFibGUtY29sLWNvbnRlbnRcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgQGlmICghc29ydERpc2FibGVkKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGV1aVNpemVTIGV1aUJ1dHRvbiBldWlJY29uQnV0dG9uIGV1aUJhc2ljQnV0dG9uIGNsYXNzPVwiZXVpLXRhYmxlX19zb3J0YWJsZS1pY29uLWJ1dHRvblwiIChjbGljayk9XCJjbGljaygpXCI+XG4gICAgICAgICAgICBAaWYgKCFvcmRlcikge1xuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cInN3YXAtdmVydGljYWw6b3V0bGluZVwiIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRlclwiIFthcmlhLWxhYmVsXT1cIidldWkuZXVpdGFibGUuTk8tU09SVElORy1JQ09OJyB8IHRyYW5zbGF0ZVwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChvcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJhcnJvdy11cDpvdXRsaW5lXCIgZmlsbENvbG9yPVwicHJpbWFyeVwiIFthcmlhLWxhYmVsXT1cIidldWkuZXVpdGFibGUuQVNDRU5ESU5HLUlDT04nIHwgdHJhbnNsYXRlXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJhcnJvdy1kb3duOm91dGxpbmVcIiBmaWxsQ29sb3I9XCJwcmltYXJ5XCIgW2FyaWEtbGFiZWxdPVwiJ2V1aS5ldWl0YWJsZS5ERVNDRU5ESU5HLUlDT04nIHwgdHJhbnNsYXRlXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgICBAaWYgKGlzTXVsdGlTb3J0YWJsZSkge1xuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic29ydERyb3Bkb3duXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjc29ydERyb3Bkb3duIGxldC1pbmRleD5cbiAgICA8ZXVpLWRyb3Bkb3duIFtoYXNDbG9zZWRPbkNsaWNrSW5zaWRlXT1cImZhbHNlXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGV1aUJ1dHRvbiBldWlCYXNpY0J1dHRvbiBldWlSb3VuZGVkIGV1aUljb25CdXR0b24gZXVpU2l6ZVMgW2V1aURpc2FibGVkXT1cInNvcnREaXNhYmxlZFwiIChjbGljayk9XCJvbk9wZW5Ecm9wZG93bigpXCI+XG4gICAgICAgICAgICA8c3BhbiBldWlCYWRnZSBldWlQcmltYXJ5IGV1aU91dGxpbmU+e3sgY3VycmVudE11bHRpU29ydFBvc2l0aW9uIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGV1aS1kcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS11LXB0LXhzIGV1aS11LXBsLXNcIj5cbiAgICAgICAgICAgICAgICA8c21hbGw+e3sgJ2V1aS5ldWl0YWJsZS5DSE9PU0UtU09SVC1PUkRFUicgfCB0cmFuc2xhdGUgfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwiY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uRm9ybSBvZiBjb2x1bW5zLmNvbnRyb2xzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS11LWZsZXggZXVpLXUtcC1zXCIgW2Zvcm1Hcm91cF09XCJmb3JtLmdldCgnY29sdW1ucycpWydjb250cm9scyddW2ldXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGV1aUxhYmVsIGNsYXNzPVwiZXVpLXUtbXItc1wiPnt7IGkgKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGV1aVNlbGVjdCBldWlTaXplUyBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgY2xhc3M9XCJldWktdS1tci1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgbXVsdGlzb3J0UGFyYW1zOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJjb2x1bW4ubmFtZVwiPnt7IGNvbHVtbi5uYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFnZXRPcmRlckJ5SW5kZXgoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGV1aVNpemVTIGV1aVNlY29uZGFyeSBldWlCdXR0b24gZXVpSWNvbkJ1dHRvbiBldWlCYXNpY0J1dHRvbiAoY2xpY2spPVwib25DbGlja011bHRpc29ydE9yZGVyKGkgKyAxLCAnYXNjJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJzd2FwLXZlcnRpY2FsOm91dGxpbmVcIiBbYXJpYS1sYWJlbF09XCInZXVpLmV1aXRhYmxlLk5PLVNPUlRJTkctSUNPTicgfCB0cmFuc2xhdGVcIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0T3JkZXJCeUluZGV4KGkpID09PSAnYXNjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZXVpU2l6ZVMgZXVpUHJpbWFyeSBldWlCdXR0b24gZXVpSWNvbkJ1dHRvbiBldWlCYXNpY0J1dHRvbiAoY2xpY2spPVwib25DbGlja011bHRpc29ydE9yZGVyKGkgKyAxLCAnZGVzYycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwiYXJyb3ctdXA6b3V0bGluZVwiIFthcmlhLWxhYmVsXT1cIidldWkuZXVpdGFibGUuQVNDRU5ESU5HLUlDT04nIHwgdHJhbnNsYXRlXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdldE9yZGVyQnlJbmRleChpKSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBldWlTaXplUyBldWlQcmltYXJ5IGV1aUJ1dHRvbiBldWlJY29uQnV0dG9uIGV1aUJhc2ljQnV0dG9uIChjbGljayk9XCJvbkNsaWNrTXVsdGlzb3J0T3JkZXIoaSArIDEsIG51bGwpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwiYXJyb3ctZG93bjpvdXRsaW5lXCIgW2FyaWEtbGFiZWxdPVwiJ2V1aS5ldWl0YWJsZS5ERVNDRU5ESU5HLUlDT04nIHwgdHJhbnNsYXRlXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJldWktdS1tdC1ub25lIGV1aS11LW1iLW5vbmUgZXVpLXUtbWwtc1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWZlZWRiYWNrLW1lc3NhZ2UgZXVpRGFuZ2VyPnt7ICdldWkuZXVpdGFibGUuV1JPTkctU09SVC1QQVJBTVMnIHwgdHJhbnNsYXRlIH19PC9ldWktZmVlZGJhY2stbWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXUtZmxleCBldWktdS1mbGV4LWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGV1aS11LXAtc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGV1aUJ1dHRvbiBldWlTaXplUyBldWlTZWNvbmRhcnkgKGNsaWNrKT1cIm9uQ2FuY2VsTXVsdGlTb3J0KClcIj57eyAnZXVpLkNBTkNFTCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBldWlCdXR0b24gZXVpU2l6ZVMgZXVpUHJpbWFyeSAoY2xpY2spPVwib25TdWJtaXRNdWx0aVNvcnQoKVwiPnt7ICdldWkuQVBQTFknIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9ldWktZHJvcGRvd24tY29udGVudD5cbiAgICA8L2V1aS1kcm9wZG93bj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|