@fundamental-ngx/platform 0.43.0-rc.9 → 0.43.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/esm2020/dynamic-page/dynamic-page.component.mjs +1 -1
- package/esm2020/form/combobox/combobox/combobox.component.mjs +1 -1
- package/esm2020/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +2 -2
- package/esm2020/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +1 -1
- package/esm2020/form/multi-input/multi-input.component.mjs +7 -4
- package/esm2020/form/step-input/number/number-step-input.component.mjs +1 -1
- package/esm2020/settings-generator/settings-generator-content/settings-generator-content.component.mjs +1 -1
- package/esm2020/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.mjs +4 -3
- package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
- package/esm2020/smart-filter-bar/smart-filter-bar.component.mjs +3 -3
- package/esm2020/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +3 -3
- package/esm2020/table/components/table-header-row/table-header-row.component.mjs +8 -4
- package/esm2020/table/components/table-p13-dialog/sorting/sorting.component.mjs +3 -3
- package/esm2020/table/components/table-row/table-row.component.mjs +4 -3
- package/esm2020/table/table.component.mjs +29 -11
- package/esm2020/table-helpers/constants/index.mjs +3 -2
- package/esm2020/table-helpers/directives/table-scrollable.directive.mjs +9 -1
- package/esm2020/table-helpers/directives/table-virtual-scroll.directive.mjs +6 -2
- package/esm2020/table-helpers/interfaces/table-state.interface.mjs +1 -1
- package/esm2020/table-helpers/services/table-scroll-dispatcher.service.mjs +1 -1
- package/esm2020/table-helpers/services/table.service.mjs +3 -2
- package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
- package/esm2020/value-help-dialog/components/define-tab/define-tab.component.mjs +1 -1
- package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-dynamic-page.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-form.mjs +9 -7
- package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-settings-generator.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +5 -5
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +14 -3
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs +41 -19
- package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-variant-management.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-dynamic-page.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-form.mjs +10 -7
- package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-settings-generator.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +5 -5
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +17 -3
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs +41 -19
- package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-variant-management.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/form/multi-input/multi-input.component.d.ts +3 -1
- package/fundamental-ngx-platform-v0.43.0.tgz +0 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/table/components/table-header-row/table-header-row.component.d.ts +3 -1
- package/table/table.component.d.ts +7 -1
- package/table-helpers/directives/table-scrollable.directive.d.ts +2 -0
- package/table-helpers/interfaces/table-state.interface.d.ts +1 -0
- package/table-helpers/services/table-scroll-dispatcher.service.d.ts +2 -0
- package/fundamental-ngx-platform-v0.43.0-rc.9.tgz +0 -0
|
@@ -9,6 +9,7 @@ import * as i2 from "../../smart-filter-bar.class";
|
|
|
9
9
|
import * as i3 from "../../smart-filter-bar.service";
|
|
10
10
|
import * as i4 from "@angular/forms";
|
|
11
11
|
import * as i5 from "@fundamental-ngx/platform/form";
|
|
12
|
+
import * as i6 from "@fundamental-ngx/i18n";
|
|
12
13
|
export class SmartFilterBarConditionFieldComponent extends BaseSmartFilterBarConditionField {
|
|
13
14
|
/** @hidden */
|
|
14
15
|
constructor(dialogService, smartFilterBar, smartFilterBarService, injector) {
|
|
@@ -16,9 +17,9 @@ export class SmartFilterBarConditionFieldComponent extends BaseSmartFilterBarCon
|
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
SmartFilterBarConditionFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SmartFilterBarConditionFieldComponent, deps: [{ token: i1.DialogService }, { token: i2.SmartFilterBar }, { token: i3.SmartFilterBarService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
SmartFilterBarConditionFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SmartFilterBarConditionFieldComponent, selector: "fdp-smart-filter-bar-condition-field", usesInheritance: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-multi-input\n [id]=\"id\"\n [addOnButtonClickFn]=\"openConditionsDialog\"\n [autofocus]=\"true\"\n [dataSource]=\"formItem.choices || []\"\n [formControlName]=\"name\"\n [name]=\"name\"\n [placeholder]=\"formItem.placeholder || formItem.message\"\n displayKey=\"displayValue\"\n >\n </fdp-multi-input>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i5.PlatformMultiInputComponent, selector: "fdp-multi-input", inputs: ["tokenHiddenId", "type", "autofocus", "selected", "selectionMode", "hasByLine", "disabled", "fillControlMode", "triggers", "closeOnOutsideClick", "addOnButtonClickFn", "displayFn"], outputs: ["selectionChange"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
20
|
+
SmartFilterBarConditionFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SmartFilterBarConditionFieldComponent, selector: "fdp-smart-filter-bar-condition-field", usesInheritance: true, ngImport: i0, template: "<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-multi-input\n [id]=\"id\"\n [addOnButtonClickFn]=\"openConditionsDialog\"\n [autofocus]=\"true\"\n [dataSource]=\"formItem.choices || []\"\n [formControlName]=\"name\"\n [name]=\"name\"\n [placeholder]=\"formItem.placeholder || formItem.message\"\n displayKey=\"displayValue\"\n [glyphAriaLabel]=\"'platformSmartFilterBar.manageFieldConditions' | fdTranslate\"\n >\n </fdp-multi-input>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i5.PlatformMultiInputComponent, selector: "fdp-multi-input", inputs: ["tokenHiddenId", "type", "autofocus", "glyphAriaLabel", "selected", "selectionMode", "hasByLine", "disabled", "fillControlMode", "triggers", "closeOnOutsideClick", "addOnButtonClickFn", "displayFn"], outputs: ["selectionChange"] }, { kind: "pipe", type: i6.FdTranslatePipe, name: "fdTranslate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
20
21
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SmartFilterBarConditionFieldComponent, decorators: [{
|
|
21
22
|
type: Component,
|
|
22
|
-
args: [{ selector: 'fdp-smart-filter-bar-condition-field', encapsulation: ViewEncapsulation.None, template: "<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-multi-input\n [id]=\"id\"\n [addOnButtonClickFn]=\"openConditionsDialog\"\n [autofocus]=\"true\"\n [dataSource]=\"formItem.choices || []\"\n [formControlName]=\"name\"\n [name]=\"name\"\n [placeholder]=\"formItem.placeholder || formItem.message\"\n displayKey=\"displayValue\"\n >\n </fdp-multi-input>\n </ng-container>\n</ng-container>\n" }]
|
|
23
|
+
args: [{ selector: 'fdp-smart-filter-bar-condition-field', encapsulation: ViewEncapsulation.None, template: "<ng-container [formGroup]=\"form\">\n <ng-container [formGroupName]=\"formGroupName\">\n <fdp-multi-input\n [id]=\"id\"\n [addOnButtonClickFn]=\"openConditionsDialog\"\n [autofocus]=\"true\"\n [dataSource]=\"formItem.choices || []\"\n [formControlName]=\"name\"\n [name]=\"name\"\n [placeholder]=\"formItem.placeholder || formItem.message\"\n displayKey=\"displayValue\"\n [glyphAriaLabel]=\"'platformSmartFilterBar.manageFieldConditions' | fdTranslate\"\n >\n </fdp-multi-input>\n </ng-container>\n</ng-container>\n" }]
|
|
23
24
|
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.SmartFilterBar }, { type: i3.SmartFilterBarService }, { type: i0.Injector }]; } });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3NtYXJ0LWZpbHRlci1iYXIvY29tcG9uZW50cy9zbWFydC1maWx0ZXItYmFyLWNvbmRpdGlvbi1maWVsZC9zbWFydC1maWx0ZXItYmFyLWNvbmRpdGlvbi1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvc21hcnQtZmlsdGVyLWJhci9jb21wb25lbnRzL3NtYXJ0LWZpbHRlci1iYXItY29uZGl0aW9uLWZpZWxkL3NtYXJ0LWZpbHRlci1iYXItY29uZGl0aW9uLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBTzlELE1BQU0sT0FBTyxxQ0FBc0MsU0FBUSxnQ0FBZ0M7SUFDdkYsY0FBYztJQUNkLFlBQ0ksYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIscUJBQTRDLEVBQzVDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7O2tJQVRRLHFDQUFxQztzSEFBckMscUNBQXFDLG1HQ1hsRCxvb0JBZ0JBOzJGRExhLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDSSxzQ0FBc0MsaUJBRWpDLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kaWFsb2cnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc21hcnQtZmlsdGVyLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VTbWFydEZpbHRlckJhckNvbmRpdGlvbkZpZWxkIH0gZnJvbSAnLi9iYXNlLXNtYXJ0LWZpbHRlci1iYXItY29uZGl0aW9uLWZpZWxkJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyIH0gZnJvbSAnLi4vLi4vc21hcnQtZmlsdGVyLWJhci5jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXNtYXJ0LWZpbHRlci1iYXItY29uZGl0aW9uLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU21hcnRGaWx0ZXJCYXJDb25kaXRpb25GaWVsZENvbXBvbmVudCBleHRlbmRzIEJhc2VTbWFydEZpbHRlckJhckNvbmRpdGlvbkZpZWxkIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBzbWFydEZpbHRlckJhcjogU21hcnRGaWx0ZXJCYXIsXG4gICAgICAgIHNtYXJ0RmlsdGVyQmFyU2VydmljZTogU21hcnRGaWx0ZXJCYXJTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZGlhbG9nU2VydmljZSwgc21hcnRGaWx0ZXJCYXIsIHNtYXJ0RmlsdGVyQmFyU2VydmljZSwgaW5qZWN0b3IpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09XCJmb3JtR3JvdXBOYW1lXCI+XG4gICAgICAgIDxmZHAtbXVsdGktaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbYWRkT25CdXR0b25DbGlja0ZuXT1cIm9wZW5Db25kaXRpb25zRGlhbG9nXCJcbiAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJmb3JtSXRlbS5jaG9pY2VzIHx8IFtdXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmb3JtSXRlbS5wbGFjZWhvbGRlciB8fCBmb3JtSXRlbS5tZXNzYWdlXCJcbiAgICAgICAgICAgIGRpc3BsYXlLZXk9XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cIidwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLm1hbmFnZUZpZWxkQ29uZGl0aW9ucycgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9mZHAtbXVsdGktaW5wdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -152,7 +152,7 @@ export class SmartFilterBarSettingsDialogComponent {
|
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
SmartFilterBarSettingsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SmartFilterBarSettingsDialogComponent, deps: [{ token: i1.DialogRef }, { token: FD_LANGUAGE }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
155
|
-
SmartFilterBarSettingsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SmartFilterBarSettingsDialogComponent, selector: "fdp-smart-filter-bar-settings-dialog", providers: [{ provide: RESETTABLE_TOKEN, useExisting: SmartFilterBarSettingsDialogComponent }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 [headerSize]=\"4\" fd-title>\n {{ 'platformSmartFilterBar.selectFiltersHeader' | fdTranslate }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <fdp-table\n *ngIf=\"loaded; else loadingTpl\"\n #table\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n [dataSource]=\"source\"\n selectionMode=\"multiple\"\n >\n <fdp-table-toolbar\n [hideItemCount]=\"false\"\n [title]=\"'platformSmartFilterBar.selectFiltersAvailableFiltersText' | fdTranslate\"\n >\n <fdp-table-toolbar-actions>\n <fdp-select\n (selectionChange)=\"_onFilterVisibilityChange($event)\"\n [list]=\"_filterVisibilityOptions\"\n [value]=\"_filterVisibilityOptions[0].value\"\n >\n </fdp-select>\n </fdp-table-toolbar-actions>\n </fdp-table-toolbar>\n <fdp-column\n align=\"start\"\n key=\"label\"\n [label]=\"'platformSmartFilterBar.selectFiltersFilterColumnLabel' | fdTranslate\"\n name=\"label\"\n ></fdp-column>\n <fdp-column\n align=\"center\"\n key=\"active\"\n [label]=\"'platformSmartFilterBar.selectFiltersActiveColumnLabel' | fdTranslate\"\n name=\"active\"\n width=\"150px\"\n >\n <fdp-table-cell *fdpCellDef=\"let item\">\n <fd-icon *ngIf=\"item.active\" glyph=\"accept\"></fd-icon>\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-dialog-footer-button>\n <fdp-button\n (click)=\"_confirm()\"\n buttonType=\"emphasized\"\n [label]=\"'platformSmartFilterBar.selectFiltersSubmitButtonLabel' | fdTranslate\"\n ></fdp-button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <fdp-button\n (click)=\"_cancel()\"\n buttonType=\"transparent\"\n [label]=\"'platformSmartFilterBar.selectFiltersCancelButton' | fdTranslate\"\n ></fdp-button>\n </fd-dialog-footer-button>\n </fd-dialog-footer>\n</fd-dialog>\n\n<ng-template #loadingTpl>\n <div style=\"text-align: center; margin: 1rem\">\n <fd-busy-indicator [loading]=\"true\"></fd-busy-indicator>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i4.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i5.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogFooterButtonComponent, selector: "fd-dialog-footer-button" }, { kind: "directive", type: i6.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i6.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i6.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i7.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i8.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i9.TableComponent, selector: "fdp-table", inputs: ["name", "id", "enableDragResize", "fixed", "freezeColumnsTo", "freezeEndColumnsTo", "pageScrolling", "pageSize", "pageScrollingThreshold", "bodyHeight", "emptyTableMessage", "noHorizontalBorders", "noVerticalBorders", "noBorders", "noBodyBorders", "noOuterBorders", "noBorderX", "noBorderY", "relationKey", "expandedStateKey", "hasChildrenKey", "rowNavigatable", "highlightNavigatedRow", "rowsActivable", "selectedKey", "selectableKey", "trackBy", "rowComparator", "rowsClass", "editableRowSkeleton", "expandOnInit", "rowHeight", "loadPagesBefore", "selectionMode", "enableTristateMode", "semanticHighlighting", "forceCheckedAllState", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed"] }, { kind: "component", type: i9.TableColumnComponent, selector: "fdp-column", inputs: ["name", "key", "label", "align", "sortable", "filterable", "visible", "dataType", "groupable", "freezable", "endFreezable", "width", "noWrap", "applyText", "role"] }, { kind: "component", type: i9.TableToolbarComponent, selector: "fdp-table-toolbar", inputs: ["shouldOverflow", "title", "hideItemCount", "hideSearchInput", "showExpandCollapseButtons", "searchSuggestions", "editMode"] }, { kind: "component", type: i9.TableToolbarActionsComponent, selector: "fdp-table-toolbar-actions" }, { kind: "component", type: i9.ResetButtonComponent, selector: "fdp-table-reset-button" }, { kind: "directive", type: i10.TableInitialStateDirective, selector: "[fdpTableInitialState], fdp-table", inputs: ["initialVisibleColumns", "initialSortBy", "initialFilterBy", "initialGroupBy", "initialPage", "state"] }, { kind: "directive", type: i10.FdpTableCell, selector: "fdp-table-cell" }, { kind: "directive", type: i10.FdpCellDef, selector: "[fdpCellDef]", inputs: ["fdpCellDefAs"] }, { kind: "component", type: i11.SelectComponent, selector: "fdp-select", inputs: ["selectState", "value", "inline"] }, { kind: "pipe", type: i12.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
155
|
+
SmartFilterBarSettingsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SmartFilterBarSettingsDialogComponent, selector: "fdp-smart-filter-bar-settings-dialog", providers: [{ provide: RESETTABLE_TOKEN, useExisting: SmartFilterBarSettingsDialogComponent }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 [headerSize]=\"4\" fd-title>\n {{ 'platformSmartFilterBar.selectFiltersHeader' | fdTranslate }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <fdp-table\n *ngIf=\"loaded; else loadingTpl\"\n #table\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n [dataSource]=\"source\"\n selectionMode=\"multiple\"\n >\n <fdp-table-toolbar\n [hideItemCount]=\"false\"\n [title]=\"'platformSmartFilterBar.selectFiltersAvailableFiltersText' | fdTranslate\"\n >\n <fdp-table-toolbar-actions>\n <fdp-select\n (selectionChange)=\"_onFilterVisibilityChange($event)\"\n [list]=\"_filterVisibilityOptions\"\n [value]=\"_filterVisibilityOptions[0].value\"\n >\n </fdp-select>\n </fdp-table-toolbar-actions>\n </fdp-table-toolbar>\n <fdp-column\n align=\"start\"\n key=\"label\"\n [label]=\"'platformSmartFilterBar.selectFiltersFilterColumnLabel' | fdTranslate\"\n name=\"label\"\n ></fdp-column>\n <fdp-column\n align=\"center\"\n key=\"active\"\n [label]=\"'platformSmartFilterBar.selectFiltersActiveColumnLabel' | fdTranslate\"\n name=\"active\"\n width=\"150px\"\n >\n <fdp-table-cell *fdpCellDef=\"let item\">\n <fd-icon *ngIf=\"item.active\" glyph=\"accept\"></fd-icon>\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-dialog-footer-button>\n <fdp-button\n (click)=\"_confirm()\"\n buttonType=\"emphasized\"\n [label]=\"'platformSmartFilterBar.selectFiltersSubmitButtonLabel' | fdTranslate\"\n ></fdp-button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <fdp-button\n (click)=\"_cancel()\"\n buttonType=\"transparent\"\n [label]=\"'platformSmartFilterBar.selectFiltersCancelButton' | fdTranslate\"\n ></fdp-button>\n </fd-dialog-footer-button>\n </fd-dialog-footer>\n</fd-dialog>\n\n<ng-template #loadingTpl>\n <div style=\"text-align: center; margin: 1rem\">\n <fd-busy-indicator [loading]=\"true\"></fd-busy-indicator>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i4.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i5.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogFooterButtonComponent, selector: "fd-dialog-footer-button" }, { kind: "directive", type: i6.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i6.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i6.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i7.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i8.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i9.TableComponent, selector: "fdp-table", inputs: ["name", "id", "enableDragResize", "fixed", "freezeColumnsTo", "freezeEndColumnsTo", "pageScrolling", "pageSize", "pageScrollingThreshold", "bodyHeight", "emptyTableMessage", "noVisibleColumnsMessage", "noHorizontalBorders", "noVerticalBorders", "noBorders", "noBodyBorders", "noOuterBorders", "noBorderX", "noBorderY", "relationKey", "expandedStateKey", "hasChildrenKey", "rowNavigatable", "highlightNavigatedRow", "rowsActivable", "selectedKey", "selectableKey", "trackBy", "rowComparator", "rowsClass", "editableRowSkeleton", "expandOnInit", "rowHeight", "loadPagesBefore", "selectionMode", "enableTristateMode", "semanticHighlighting", "forceCheckedAllState", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed"] }, { kind: "component", type: i9.TableColumnComponent, selector: "fdp-column", inputs: ["name", "key", "label", "align", "sortable", "filterable", "visible", "dataType", "groupable", "freezable", "endFreezable", "width", "noWrap", "applyText", "role"] }, { kind: "component", type: i9.TableToolbarComponent, selector: "fdp-table-toolbar", inputs: ["shouldOverflow", "title", "hideItemCount", "hideSearchInput", "showExpandCollapseButtons", "searchSuggestions", "editMode"] }, { kind: "component", type: i9.TableToolbarActionsComponent, selector: "fdp-table-toolbar-actions" }, { kind: "component", type: i9.ResetButtonComponent, selector: "fdp-table-reset-button" }, { kind: "directive", type: i10.TableInitialStateDirective, selector: "[fdpTableInitialState], fdp-table", inputs: ["initialVisibleColumns", "initialSortBy", "initialFilterBy", "initialGroupBy", "initialPage", "state"] }, { kind: "directive", type: i10.FdpTableCell, selector: "fdp-table-cell" }, { kind: "directive", type: i10.FdpCellDef, selector: "[fdpCellDef]", inputs: ["fdpCellDefAs"] }, { kind: "component", type: i11.SelectComponent, selector: "fdp-select", inputs: ["selectState", "value", "inline"] }, { kind: "pipe", type: i12.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
156
156
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SmartFilterBarSettingsDialogComponent, decorators: [{
|
|
157
157
|
type: Component,
|
|
158
158
|
args: [{ selector: 'fdp-smart-filter-bar-settings-dialog', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: RESETTABLE_TOKEN, useExisting: SmartFilterBarSettingsDialogComponent }], template: "<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 [headerSize]=\"4\" fd-title>\n {{ 'platformSmartFilterBar.selectFiltersHeader' | fdTranslate }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <fdp-table\n *ngIf=\"loaded; else loadingTpl\"\n #table\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n [dataSource]=\"source\"\n selectionMode=\"multiple\"\n >\n <fdp-table-toolbar\n [hideItemCount]=\"false\"\n [title]=\"'platformSmartFilterBar.selectFiltersAvailableFiltersText' | fdTranslate\"\n >\n <fdp-table-toolbar-actions>\n <fdp-select\n (selectionChange)=\"_onFilterVisibilityChange($event)\"\n [list]=\"_filterVisibilityOptions\"\n [value]=\"_filterVisibilityOptions[0].value\"\n >\n </fdp-select>\n </fdp-table-toolbar-actions>\n </fdp-table-toolbar>\n <fdp-column\n align=\"start\"\n key=\"label\"\n [label]=\"'platformSmartFilterBar.selectFiltersFilterColumnLabel' | fdTranslate\"\n name=\"label\"\n ></fdp-column>\n <fdp-column\n align=\"center\"\n key=\"active\"\n [label]=\"'platformSmartFilterBar.selectFiltersActiveColumnLabel' | fdTranslate\"\n name=\"active\"\n width=\"150px\"\n >\n <fdp-table-cell *fdpCellDef=\"let item\">\n <fd-icon *ngIf=\"item.active\" glyph=\"accept\"></fd-icon>\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-dialog-footer-button>\n <fdp-button\n (click)=\"_confirm()\"\n buttonType=\"emphasized\"\n [label]=\"'platformSmartFilterBar.selectFiltersSubmitButtonLabel' | fdTranslate\"\n ></fdp-button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <fdp-button\n (click)=\"_cancel()\"\n buttonType=\"transparent\"\n [label]=\"'platformSmartFilterBar.selectFiltersCancelButton' | fdTranslate\"\n ></fdp-button>\n </fd-dialog-footer-button>\n </fd-dialog-footer>\n</fd-dialog>\n\n<ng-template #loadingTpl>\n <div style=\"text-align: center; margin: 1rem\">\n <fd-busy-indicator [loading]=\"true\"></fd-busy-indicator>\n </div>\n</ng-template>\n" }]
|
|
@@ -481,7 +481,7 @@ SmartFilterBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
481
481
|
provide: FDP_PRESET_MANAGED_COMPONENT,
|
|
482
482
|
useExisting: SmartFilterBarComponent
|
|
483
483
|
}
|
|
484
|
-
], queries: [{ propertyName: "_toolbarItemRefs", predicate: SmartFilterBarToolbarItemDirective }], viewQueries: [{ propertyName: "_formGenerator", first: true, predicate: FormGeneratorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div>\n <fd-toolbar [hasTitle]=\"true\" fdType=\"transparent\">\n <ng-container *ngIf=\"_toolbarItems\">\n <ng-container *ngFor=\"let template of _toolbarItems\">\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n <fd-toolbar-separator></fd-toolbar-separator>\n </ng-container>\n </ng-container>\n <fdp-search-field\n (inputChange)=\"_onSearchInputChange($event)\"\n (searchSubmit)=\"submitForm()\"\n (cancelSearch)=\"_cancelSearch()\"\n [disabled]=\"_loading\"\n [disableRefresh]=\"true\"\n [placeholder]=\"'platformSmartFilterBar.searchPlaceholder' | fdTranslate\"\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fdp-button\n (click)=\"submitForm()\"\n buttonType=\"emphasized\"\n *ngIf=\"!liveUpdate\"\n fd-toolbar-item\n [disabled]=\"_loading\"\n [label]=\"'platformSmartFilterBar.submitButtonLabel' | fdTranslate\"\n ></fdp-button>\n <fdp-button
|
|
484
|
+
], queries: [{ propertyName: "_toolbarItemRefs", predicate: SmartFilterBarToolbarItemDirective }], viewQueries: [{ propertyName: "_formGenerator", first: true, predicate: FormGeneratorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div>\n <fd-toolbar [hasTitle]=\"true\" fdType=\"transparent\">\n <ng-container *ngIf=\"_toolbarItems\">\n <ng-container *ngFor=\"let template of _toolbarItems\">\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n <fd-toolbar-separator></fd-toolbar-separator>\n </ng-container>\n </ng-container>\n <fdp-search-field\n (inputChange)=\"_onSearchInputChange($event)\"\n (searchSubmit)=\"submitForm()\"\n (cancelSearch)=\"_cancelSearch()\"\n [disabled]=\"_loading\"\n [disableRefresh]=\"true\"\n [placeholder]=\"'platformSmartFilterBar.searchPlaceholder' | fdTranslate\"\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fdp-button\n (click)=\"submitForm()\"\n buttonType=\"emphasized\"\n *ngIf=\"!liveUpdate\"\n fd-toolbar-item\n [disabled]=\"_loading\"\n [label]=\"'platformSmartFilterBar.submitButtonLabel' | fdTranslate\"\n ></fdp-button>\n <fdp-button\n (click)=\"submitForm()\"\n fd-toolbar-item\n glyph=\"synchronize\"\n [disabled]=\"_loading\"\n [ariaLabel]=\"'platformSmartFilterBar.refreshButtonAriaLabel' | fdTranslate\"\n ></fdp-button>\n <fdp-button\n (click)=\"showFilteringSettings()\"\n [label]=\"\n filtersLabel\n ? filtersLabel + ' (' + _selectedFilters.length + ')'\n : ('platformSmartFilterBar.filtersButtonLabel'\n | fdTranslate : { filtersCount: _selectedFilters.length })\n \"\n fd-toolbar-item\n [disabled]=\"_loading\"\n ></fdp-button>\n <fdp-button\n (click)=\"_toggleFilterBar()\"\n [label]=\"\n (_showFilterBar\n ? 'platformSmartFilterBar.hideFiltersButtonLabel'\n : 'platformSmartFilterBar.showFiltersButtonLabel'\n ) | fdTranslate\n \"\n buttonType=\"transparent\"\n fd-toolbar-item\n [disabled]=\"_loading\"\n ></fdp-button>\n </fd-toolbar>\n</div>\n\n<div class=\"fdp-smart-filter-bar__filters\" [hidden]=\"!_showFilterBar\">\n <fdp-form-generator\n (formCreated)=\"_onFormCreated()\"\n (formSubmitted)=\"_onFormSubmitted($event)\"\n [noAdditionalContent]=\"true\"\n [formItems]=\"_formItems\"\n [columnLayout]=\"filtersColumnLayout\"\n ></fdp-form-generator>\n</div>\n", styles: [".fdp-smart-filter-bar{display:block;box-shadow:var(--sapContent_HeaderShadow);background-color:var(--sapObjectHeader_Background)}.fdp-smart-filter-bar--transparent{background-color:var(--sapToolbar_Background);box-shadow:none}.fdp-smart-filter-bar .fd-toolbar--title{height:3rem;min-height:3rem;border-bottom:none;padding:.5rem}@media (min-width: 600px){.fdp-smart-filter-bar .fd-toolbar--title{padding-left:2rem;padding-right:2rem}}.fdp-smart-filter-bar .fd-toolbar fdp-search-field{min-width:15.5rem}.fdp-smart-filter-bar .fdp-smart-filter-bar__filters{padding-left:.5rem;padding-right:.5rem}@media (min-width: 600px){.fdp-smart-filter-bar .fdp-smart-filter-bar__filters{padding-left:2rem;padding-right:2rem}}.fdp-smart-filter-bar .fd-container.fd-form-layout-grid-container{padding:0}.fdp-smart-filter-bar .fd-container.fd-form-layout-grid-container .fd-row .fd-form-group{padding-left:.25rem!important;padding-right:.25rem!important}.fdp-smart-filter-bar__conditions-dialog .fdp-smart-filter-bar__actions-column{min-width:auto;flex:0 0 auto}.fdp-smart-filter-bar__conditions-dialog .fd-popover-custom{display:block}.fdp-smart-filter-bar__conditions-dialog .fd-dialog__body{padding:0 .5rem;background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-smart-filter-bar__conditions-dialog .fd-container.fd-form-layout-grid-container,.fdp-smart-filter-bar__conditions-dialog .fd-container.fd-form-layout-grid-container .fd-row .fd-form-group{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.FormGeneratorComponent, selector: "fdp-form-generator", inputs: ["formName", "formItems", "mainTitle", "hideMainTItle", "hint", "columnLayout", "labelLayout", "labelColumnLayout", "fieldColumnLayout", "gapColumnLayout", "unifiedLayout", "inlineColumnLayout", "noAdditionalContent"], outputs: ["formCreated", "formSubmitted", "formSubmittedStatus"] }, { kind: "component", type: i6.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i6.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i6.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i6.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "component", type: i7.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i8.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "searchSuggestionMessage", "searchSuggestionNavigateMessage", "forceSearchButton"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "pipe", type: i9.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
485
485
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SmartFilterBarComponent, decorators: [{
|
|
486
486
|
type: Component,
|
|
487
487
|
args: [{ selector: 'fdp-smart-filter-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
@@ -494,7 +494,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
494
494
|
], host: {
|
|
495
495
|
class: 'fdp-smart-filter-bar',
|
|
496
496
|
'[class.fdp-smart-filter-bar--transparent]': 'transparent'
|
|
497
|
-
}, template: "<div>\n <fd-toolbar [hasTitle]=\"true\" fdType=\"transparent\">\n <ng-container *ngIf=\"_toolbarItems\">\n <ng-container *ngFor=\"let template of _toolbarItems\">\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n <fd-toolbar-separator></fd-toolbar-separator>\n </ng-container>\n </ng-container>\n <fdp-search-field\n (inputChange)=\"_onSearchInputChange($event)\"\n (searchSubmit)=\"submitForm()\"\n (cancelSearch)=\"_cancelSearch()\"\n [disabled]=\"_loading\"\n [disableRefresh]=\"true\"\n [placeholder]=\"'platformSmartFilterBar.searchPlaceholder' | fdTranslate\"\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fdp-button\n (click)=\"submitForm()\"\n buttonType=\"emphasized\"\n *ngIf=\"!liveUpdate\"\n fd-toolbar-item\n [disabled]=\"_loading\"\n [label]=\"'platformSmartFilterBar.submitButtonLabel' | fdTranslate\"\n ></fdp-button>\n <fdp-button
|
|
497
|
+
}, template: "<div>\n <fd-toolbar [hasTitle]=\"true\" fdType=\"transparent\">\n <ng-container *ngIf=\"_toolbarItems\">\n <ng-container *ngFor=\"let template of _toolbarItems\">\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n <fd-toolbar-separator></fd-toolbar-separator>\n </ng-container>\n </ng-container>\n <fdp-search-field\n (inputChange)=\"_onSearchInputChange($event)\"\n (searchSubmit)=\"submitForm()\"\n (cancelSearch)=\"_cancelSearch()\"\n [disabled]=\"_loading\"\n [disableRefresh]=\"true\"\n [placeholder]=\"'platformSmartFilterBar.searchPlaceholder' | fdTranslate\"\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fdp-button\n (click)=\"submitForm()\"\n buttonType=\"emphasized\"\n *ngIf=\"!liveUpdate\"\n fd-toolbar-item\n [disabled]=\"_loading\"\n [label]=\"'platformSmartFilterBar.submitButtonLabel' | fdTranslate\"\n ></fdp-button>\n <fdp-button\n (click)=\"submitForm()\"\n fd-toolbar-item\n glyph=\"synchronize\"\n [disabled]=\"_loading\"\n [ariaLabel]=\"'platformSmartFilterBar.refreshButtonAriaLabel' | fdTranslate\"\n ></fdp-button>\n <fdp-button\n (click)=\"showFilteringSettings()\"\n [label]=\"\n filtersLabel\n ? filtersLabel + ' (' + _selectedFilters.length + ')'\n : ('platformSmartFilterBar.filtersButtonLabel'\n | fdTranslate : { filtersCount: _selectedFilters.length })\n \"\n fd-toolbar-item\n [disabled]=\"_loading\"\n ></fdp-button>\n <fdp-button\n (click)=\"_toggleFilterBar()\"\n [label]=\"\n (_showFilterBar\n ? 'platformSmartFilterBar.hideFiltersButtonLabel'\n : 'platformSmartFilterBar.showFiltersButtonLabel'\n ) | fdTranslate\n \"\n buttonType=\"transparent\"\n fd-toolbar-item\n [disabled]=\"_loading\"\n ></fdp-button>\n </fd-toolbar>\n</div>\n\n<div class=\"fdp-smart-filter-bar__filters\" [hidden]=\"!_showFilterBar\">\n <fdp-form-generator\n (formCreated)=\"_onFormCreated()\"\n (formSubmitted)=\"_onFormSubmitted($event)\"\n [noAdditionalContent]=\"true\"\n [formItems]=\"_formItems\"\n [columnLayout]=\"filtersColumnLayout\"\n ></fdp-form-generator>\n</div>\n", styles: [".fdp-smart-filter-bar{display:block;box-shadow:var(--sapContent_HeaderShadow);background-color:var(--sapObjectHeader_Background)}.fdp-smart-filter-bar--transparent{background-color:var(--sapToolbar_Background);box-shadow:none}.fdp-smart-filter-bar .fd-toolbar--title{height:3rem;min-height:3rem;border-bottom:none;padding:.5rem}@media (min-width: 600px){.fdp-smart-filter-bar .fd-toolbar--title{padding-left:2rem;padding-right:2rem}}.fdp-smart-filter-bar .fd-toolbar fdp-search-field{min-width:15.5rem}.fdp-smart-filter-bar .fdp-smart-filter-bar__filters{padding-left:.5rem;padding-right:.5rem}@media (min-width: 600px){.fdp-smart-filter-bar .fdp-smart-filter-bar__filters{padding-left:2rem;padding-right:2rem}}.fdp-smart-filter-bar .fd-container.fd-form-layout-grid-container{padding:0}.fdp-smart-filter-bar .fd-container.fd-form-layout-grid-container .fd-row .fd-form-group{padding-left:.25rem!important;padding-right:.25rem!important}.fdp-smart-filter-bar__conditions-dialog .fdp-smart-filter-bar__actions-column{min-width:auto;flex:0 0 auto}.fdp-smart-filter-bar__conditions-dialog .fd-popover-custom{display:block}.fdp-smart-filter-bar__conditions-dialog .fd-dialog__body{padding:0 .5rem;background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-smart-filter-bar__conditions-dialog .fd-container.fd-form-layout-grid-container,.fdp-smart-filter-bar__conditions-dialog .fd-container.fd-form-layout-grid-container .fd-row .fd-form-group{padding:0!important}\n"] }]
|
|
498
498
|
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i0.ChangeDetectorRef }, { type: i2.SmartFilterBarService }, { type: i3.FormGeneratorService }, { type: i0.Injector }, { type: i4.DestroyedService }]; }, propDecorators: { subject: [{
|
|
499
499
|
type: Input
|
|
500
500
|
}], showFiltersLabel: [{
|
|
@@ -526,4 +526,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
526
526
|
type: ViewChild,
|
|
527
527
|
args: [FormGeneratorComponent]
|
|
528
528
|
}] } });
|
|
529
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvc21hcnQtZmlsdGVyLWJhci9zbWFydC1maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9zbWFydC1maWx0ZXItYmFyL3NtYXJ0LWZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osVUFBVSxFQUNWLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0RCxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBeUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUcsT0FBTyxFQUdILHNCQUFzQixFQUN0QixvQkFBb0IsRUFFdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQWMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU1RixPQUFPLEVBQUUscUNBQXFDLEVBQUUs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RSxhQUFhO3FCQUM3RDtpUUFPRyxPQUFPO3NCQURWLEtBQUs7Z0JBY04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBUU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBUU4sWUFBWTtzQkFEWCxLQUFLO2dCQU9GLFdBQVc7c0JBRGQsS0FBSztnQkFjTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBUU4sK0JBQStCO3NCQUQ5QixLQUFLO2dCQU9OLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sbUJBQW1CO3NCQURsQixNQUFNO2dCQU9QLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFPUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBY1UsZ0JBQWdCO3NCQURoQyxlQUFlO3VCQUFDLGtDQUFrQztnQkFPaEIsY0FBYztzQkFBaEQsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFByb3ZpZGVyLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGVzdHJveWVkU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRmlsdGVyR3JvdXAsIEZpbHRlcmFibGVDb2x1bW5EYXRhVHlwZSwgRmlsdGVyVHlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vdGFibGUnO1xuaW1wb3J0IHsgU2VhcmNoSW5wdXQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NlYXJjaC1maWVsZCc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtRmllbGRJdGVtLFxuICAgIER5bmFtaWNGb3JtSXRlbSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1HZW5lcmF0b3JTZXJ2aWNlLFxuICAgIFByZXBhcmVkRHluYW1pY0Zvcm1GaWVsZEl0ZW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9mb3JtJztcbmltcG9ydCB7IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsIFNlbGVjdEl0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5cbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU2V0dGluZ3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU3ViamVjdERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zbWFydC1maWx0ZXItYmFyLXN1YmplY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyVG9vbGJhckl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc21hcnQtZmlsdGVyLWJhci10b29sYmFyLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyTWFuYWdlZFByZXNldCwgU21hcnRGaWx0ZXJDaGFuZ2VPYmplY3QgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1jaGFuZ2UnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1maWVsZC1kZWZpbml0aW9uJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyRHluYW1pY0Zvcm1GaWVsZEl0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWR5bmFtaWMtZm9ybS1pdGVtJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3NtYXJ0LWZpbHRlci1iYXItY29uZGl0aW9uJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyU2V0dGluZ3NEaWFsb2dDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2ctY29uZmlnJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU2VydmljZSB9IGZyb20gJy4vc21hcnQtZmlsdGVyLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFNNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5UIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJWaXNpYmlsaXR5Q2F0ZWdvcnlMYWJlbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci12aXNpYmlsaXR5LWNhdGVnb3J5JztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyIH0gZnJvbSAnLi9zbWFydC1maWx0ZXItYmFyLmNsYXNzJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQvc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IGdldFNlbGVjdEl0ZW1WYWx1ZSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhclN0cmF0ZWd5TGFiZWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3N0cmF0ZWd5LWxhYmVscy50eXBlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuY29uc3QgZGVmYXVsdENvbHVtbnNMYXlvdXQgPSAnWEw0LUwzLU0yLVMxJztcblxuZnVuY3Rpb24gZ2V0Q29sdW1uc051bWJlcihsYXlvdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAuLi5sYXlvdXQuc3BsaXQoJy0nKS5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoQXJyYXkgPSBwYXJ0Lm1hdGNoKC9cXGQrLyk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaEFycmF5ID8gcGFyc2VJbnQobWF0Y2hBcnJheVswXSwgMTApIDogMTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuXG4vKipcbiAqIERlZmF1bHQgZGlhbG9nIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xuICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxuICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcbiAgICBtaW5XaWR0aDogJzMwcmVtJyxcbiAgICAvKiogODhweCBpdCdzIHRoZSBoZWFkZXIgKyBmb290ZXIgaGVpZ2h0ICovXG4gICAgYm9keU1pbkhlaWdodDogJ2NhbGMoNTB2aCAtIDg4cHgpJ1xufTtcblxuY29uc3Qgc21hcnRGaWx0ZXJCYXJQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogU21hcnRGaWx0ZXJCYXIsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU21hcnRGaWx0ZXJCYXJDb21wb25lbnQpXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1zbWFydC1maWx0ZXItYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHNtYXJ0RmlsdGVyQmFyUHJvdmlkZXIsXG4gICAgICAgIERlc3Ryb3llZFNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogU21hcnRGaWx0ZXJCYXJDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC1zbWFydC1maWx0ZXItYmFyJyxcbiAgICAgICAgJ1tjbGFzcy5mZHAtc21hcnQtZmlsdGVyLWJhci0tdHJhbnNwYXJlbnRdJzogJ3RyYW5zcGFyZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRGaWx0ZXJCYXJDb21wb25lbnQgZXh0ZW5kcyBTbWFydEZpbHRlckJhciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogU3ViamVjdCB3aGljaCB3aWxsIHByb3ZpZGUgY29uZmlndXJhdGlvbiBkYXRhOiBkYXRhIHNvdXJjZSwgY29sdW1ucyBkZWZpbml0aW9ucywgZXRjLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN1YmplY3QodmFsdWU6IFNtYXJ0RmlsdGVyQmFyU3ViamVjdERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLl9zZXRTdWJqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc3ViamVjdCgpOiBTbWFydEZpbHRlckJhclN1YmplY3REaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAnU2hvdyBmaWx0ZXJzJyBidXR0b24gbGFiZWwuXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dGaWx0ZXJzTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqICdIaWRlIGZpbHRlcnMnIGJ1dHRvbiBsYWJlbC5cbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUZpbHRlcnNMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogJ0ZpbHRlcnMnIGJ1dHRvbiBsYWJlbC5cbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyc0xhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNtYXJ0IGZpbHRlciBiYXIgYmFja2dyb3VuZCBzaG91bGQgYmUgdHJhbnNwYXJlbnQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdHJhbnNwYXJlbnQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl90cmFuc3BhcmVudCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHRyYW5zcGFyZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBDb25kaXRpb24gc3RyYXRlZ3kgbGFiZWxzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lU3RyYXRlZ3lMYWJlbHM6IFNtYXJ0RmlsdGVyQmFyU3RyYXRlZ3lMYWJlbHMgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIEZpbHRlcnMgdmlzaWJpbGl0eSBjYXRlZ29yeSBsYWJlbHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWx0ZXJzVmlzaWJpbGl0eUNhdGVnb3J5TGFiZWxzOiBTbWFydEZpbHRlckJhclZpc2liaWxpdHlDYXRlZ29yeUxhYmVscyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIENvbHVtbnMgbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyc0NvbHVtbkxheW91dDogTnVsbGFibGU8c3RyaW5nPiA9IGRlZmF1bHRDb2x1bW5zTGF5b3V0O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1cGRhdGUgZmlsdGVycyB3aGVuIHRoZXkgYXJlIHNlbGVjdGVkLiBPdGhlcndpc2UsIGZpbHRlcnMgd2lsbCBiZSBhcHBsaWVkIG9ubHkgYnkgcHJlc3NpbmcgXCJHb1wiIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsdGVycyBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzbWFydEZpbHRlcnNDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8U21hcnRGaWx0ZXJDaGFuZ2VPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxTbWFydEZpbHRlckNoYW5nZU9iamVjdD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBzZWxlY3RlZCBmaWx0ZXJzIGhhcyBiZWVuIGFwcGxpZWQgKFVzZXIgY2xpY2tlZCBvbiBHbyBidXR0b24pLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNtYXJ0RmlsdGVyc0FwcGxpZWQ6IEV2ZW50RW1pdHRlcjxTbWFydEZpbHRlckNoYW5nZU9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPFNtYXJ0RmlsdGVyQ2hhbmdlT2JqZWN0PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHNlYXJjaCBpbnB1dCBmaWVsZCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlYXJjaElucHV0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPFNlYXJjaElucHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoSW5wdXQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVkIGFycmF5IG9mIGZpbHRlcnMgdG8gYXBwbHkgZm9yIHRoZSBzdWJqZWN0J3MgZGF0YSBzb3VyY2UuXG4gICAgICovXG4gICAgZmlsdGVyQnk6IENvbGxlY3Rpb25GaWx0ZXJHcm91cFtdID0gW107XG4gICAgLyoqXG4gICAgICogU2VhcmNoIGZpZWxkIHZhbHVlIHRvIGFwcGx5IGZvciB0aGUgc3ViamVjdCdzIGRhdGEgc291cmNlLlxuICAgICAqL1xuICAgIHNlYXJjaDogU2VhcmNoSW5wdXQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oU21hcnRGaWx0ZXJCYXJUb29sYmFySXRlbURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90b29sYmFySXRlbVJlZnM6IFF1ZXJ5TGlzdDxTbWFydEZpbHRlckJhclRvb2xiYXJJdGVtRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGb3JtIGdlbmVyYXRvciBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChGb3JtR2VuZXJhdG9yQ29tcG9uZW50KSBfZm9ybUdlbmVyYXRvciE6IEZvcm1HZW5lcmF0b3JDb21wb25lbnQ7XG4gICAgLyoqIEBIaWRkZW4gKi9cbiAgICBfdG9vbGJhckl0ZW1zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb3JtSXRlbXM6IER5bmFtaWNGb3JtSXRlbVtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGVkRmlsdGVyczogc3RyaW5nW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93RmlsdGVyQmFyID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9sb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdD8uZ2V0RGF0YVNvdXJjZSgpID8gdGhpcy5fc3ViamVjdC5nZXREYXRhU291cmNlKCkuaXNEYXRhTG9hZGluZyA6IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3ViamVjdFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1HZW5lcmF0b3JSZWFkeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pZ25vcmVQcmVzZXRDaGFuZ2UgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX3NtYXJ0RmlsdGVyQmFyU2VydmljZTogU21hcnRGaWx0ZXJCYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9mZ1NlcnZpY2U6IEZvcm1HZW5lcmF0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkOiBEZXN0cm95ZWRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5hZGRDb21wb25lbnQoU21hcnRGaWx0ZXJCYXJDb25kaXRpb25GaWVsZENvbXBvbmVudCwgW1NNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5UXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJqZWN0ITogU21hcnRGaWx0ZXJCYXJTdWJqZWN0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtcyA9IHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy50b0FycmF5KCkubWFwKChyZWYpID0+IHJlZi50ZW1wbGF0ZVJlZik7XG5cbiAgICAgICAgdGhpcy5fdG9vbGJhckl0ZW1SZWZzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtcyA9IHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy50b0FycmF5KCkubWFwKChyZWYpID0+IHJlZi50ZW1wbGF0ZVJlZik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgY29uZGl0aW9uIHZhbHVlIGludG8gaHVtYW4tcmVhZGFibGUgdGV4dC5cbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIFNtYXJ0IGZpbHRlciBiYXIgY29uZGl0aW9uLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJUeXBlIENvbmRpdGlvbiBmaWx0ZXIgdHlwZS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXREaXNwbGF5VmFsdWUoY29uZGl0aW9uOiBTbWFydEZpbHRlckJhckNvbmRpdGlvbiwgZmlsdGVyVHlwZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NtYXJ0RmlsdGVyQmFyU2VydmljZS5nZXREaXNwbGF5VmFsdWUoY29uZGl0aW9uLCBmaWx0ZXJUeXBlKTtcbiAgICB9XG5cbiAgICAvKiogT3BlbiBGaWx0ZXJpbmcgU2V0dGluZ3MgRGlhbG9nICovXG4gICAgc2hvd0ZpbHRlcmluZ1NldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5fZ2V0U3ViamVjdERlZmluaXRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IFNtYXJ0RmlsdGVyU2V0dGluZ3NEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICBmaWVsZHM6IGNvbHVtbnMsXG4gICAgICAgICAgICBmaWx0ZXJCeTogdGhpcy5maWx0ZXJCeSxcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyczogdGhpcy5fc2VsZWN0ZWRGaWx0ZXJzLFxuICAgICAgICAgICAgdmlzaWJpbGl0eUNhdGVnb3JpZXM6IHRoaXMuZmlsdGVyc1Zpc2liaWxpdHlDYXRlZ29yeUxhYmVsc1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgICAgIFNtYXJ0RmlsdGVyQmFyU2V0dGluZ3NEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzUwcmVtJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHNlbGVjdGVkRmlsdGVyczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGVkRmlsdGVycyhzZWxlY3RlZEZpbHRlcnMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblNlYXJjaElucHV0Q2hhbmdlKGV2ZW50OiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaCA9IGV2ZW50O1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0Q2hhbmdlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLmxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3VibWl0cyBmaWx0ZXJzIGFuZCBzZWFyY2ggZm9ybS5cbiAgICAgKi9cbiAgICBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uLiAqL1xuICAgIGFzeW5jIHNldFByZXNldChkYXRhOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5faWdub3JlUHJlc2V0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5maWx0ZXJCeSA9IGRhdGEuZmlsdGVyQnkgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnkgPSBkYXRhLmZpbHRlckJ5O1xuICAgICAgICB0aGlzLnNlYXJjaCA9IGRhdGEuc2VhcmNoO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3JSZWFkeS5waXBlKGZpbHRlcigodmFsdWUpID0+IHZhbHVlKSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIFJlc2V0IGZvcm1cbiAgICAgICAgICAgIHRoaXMuX2ZnU2VydmljZS5yZXNldEZvcm0odGhpcy5fZm9ybUdlbmVyYXRvci5mb3JtKTtcblxuICAgICAgICAgICAgLy8gU2V0IG5ldyBkYXRhXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlckJ5IG9mIHRoaXMuZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZmdTZXJ2aWNlLmdldEZvcm1Db250cm9sKHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybSwgZmlsdGVyQnkuZmllbGQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1JdGVtID0gY29udHJvbC5mb3JtSXRlbSBhcyBQcmVwYXJlZER5bmFtaWNGb3JtRmllbGRJdGVtO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLnRyYW5zZm9ybUNvbGxlY3Rpb25GaWx0ZXIoZmlsdGVyQnkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb25kaXRpb25zID0gYXdhaXQgdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLmdldENvbmRpdGlvbkZpZWxkU2VsZWN0ZWRWYXJpYW50cyhcbiAgICAgICAgICAgICAgICAgICAgZm9ybUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29udHJvbD8uc2V0VmFsdWUoc2VsZWN0ZWRDb25kaXRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRGaWx0ZXJzKHRoaXMuZmlsdGVyQnkubWFwKChmaWx0ZXJCeSkgPT4gZmlsdGVyQnkuZmllbGQpKTtcblxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdWJqZWN0LmdldERhdGFTb3VyY2UoKTtcbiAgICAgICAgICAgIHNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0RmlsdGVycyh0aGlzLmZpbHRlckJ5LCB0aGlzLnNlYXJjaCk7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3QuZ2V0U3ViamVjdCgpLmZldGNoKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGN1cnJlbnQgcHJlc2V0IGNvbmZpZ3VyYXRpb24uICovXG4gICAgZ2V0Q3VycmVudFByZXNldCgpOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaCxcbiAgICAgICAgICAgIGZpbHRlckJ5OiB0aGlzLmZpbHRlckJ5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gZm9ybSBnZW5lcmF0b3IgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkIGFuZCBzdWJtaXR0ZWQuXG4gICAgICovXG4gICAgX29uRm9ybVN1Ym1pdHRlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB0aGlzLl9nZW5lcmF0ZUNvbGxlY3Rpb25GaWx0ZXJHcm91cHMoZXZlbnQpO1xuICAgICAgICB0aGlzLl9hcHBseUZpbHRlcmluZyhjb25kaXRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHdoZW4gZm9ybSBoYXMgYmVlbiBjcmVhdGVkLlxuICAgICAqIFBvcHVsYXRlcyBzZWxlY3RlZCBmaWx0ZXJzIGFycmF5IHdpdGggdXNlci1kZWZpbmVkIGRlZmF1bHQgZmlsdGVycy5cbiAgICAgKi9cbiAgICBfb25Gb3JtQ3JlYXRlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3ViamVjdCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRGaWx0ZXJzKFsuLi50aGlzLnN1YmplY3QuZ2V0RGVmYXVsdEZpZWxkcygpLCAuLi50aGlzLl9zZWxlY3RlZEZpbHRlcnNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNTApLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0Rm9ybWF0dGVkQ29uZGl0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5zbWFydEZpbHRlcnNDaGFuZ2VkLmVtaXQoeyBmaWx0ZXJCeTogY29uZGl0aW9ucywgc2VhcmNoOiB0aGlzLnNlYXJjaCwgc3ViamVjdDogdGhpcy5zdWJqZWN0IH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMubGl2ZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyaW5nKGNvbmRpdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yUmVhZHkubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX3RvZ2dsZUZpbHRlckJhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvd0ZpbHRlckJhciA9ICF0aGlzLl9zaG93RmlsdGVyQmFyO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0cyByYXcgZmlsdGVycyBvYmplY3QgaW50byBhcnJheSBvZiBncm91cGVkIGZpbHRlcnMuXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgZ3JvdXBlZCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEZvcm1hdHRlZENvbmRpdGlvbnMoKTogUHJvbWlzZTxDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXT4ge1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuZ2V0Rm9ybVZhbHVlKHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUNvbGxlY3Rpb25GaWx0ZXJHcm91cHMoZm9ybVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlQ29sbGVjdGlvbkZpbHRlckdyb3Vwcyh2YWx1ZToge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBTbWFydEZpbHRlckJhckNvbmRpdGlvbltdO1xuICAgIH0pOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25GaWx0ZXJHcm91cHM6IENvbGxlY3Rpb25GaWx0ZXJHcm91cFtdID0gW107XG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX2dldFN1YmplY3REZWZpbml0aW9ucygpO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgZmllbGRDb25kaXRpb25zXSkgPT4gISFmaWVsZENvbmRpdGlvbnMpXG4gICAgICAgICAgICAuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmllbGRDb25kaXRpb25zXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBmaWVsZE5hbWUpIGFzIFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckdyb3VwOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogY29sdW1uLmNvbmRpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmtleVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZmllbGRDb25kaXRpb25zLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJHcm91cC5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGNvbmRpdGlvbi5vcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4ua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlMjogY29uZGl0aW9uLnZhbHVlMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbHVtbi5kYXRhVHlwZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25GaWx0ZXJHcm91cHMucHVzaChmaWx0ZXJHcm91cCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZW1vdmUgZW1wdHkgZmlsdGVyIG9iamVjdHMuXG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uRmlsdGVyR3JvdXBzLmZpbHRlcigoZmlsdGVyR3JvdXApID0+IGZpbHRlckdyb3VwLmZpbHRlcnM/Lmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U3ViamVjdChzdWJqZWN0OiBTbWFydEZpbHRlckJhclN1YmplY3REaXJlY3RpdmUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUZyb21TdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvU3ViamVjdENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdWJqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvU3ViamVjdENvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3N1YmplY3QuZmllbGRzU3RyZWFtLnN1YnNjcmliZShhc3luYyAoY29sdW1uczogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb25bXSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9nZW5lcmF0ZUZvcm0oY29sdW1ucy5maWx0ZXIoKGMpID0+IGMuZmlsdGVyYWJsZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2VuZXJhdGVzIGZvcm0gaXRlbXMgdG8gYmUgY29uc3VtZWQgYnkgZm9ybSBnZW5lcmF0b3IgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSBjb2x1bW5zIGNvbHVtbnMgZGVmaW5pdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2dlbmVyYXRlRm9ybShjb2x1bW5zOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBEeW5hbWljRm9ybUZpZWxkSXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IGNvbHVtbnNOdW1iZXIgPSBnZXRDb2x1bW5zTnVtYmVyKHRoaXMuZmlsdGVyc0NvbHVtbkxheW91dCA/PyAnJyk7XG4gICAgICAgIGxldCBjdXJyZW50Q29sdW1uID0gMTtcblxuICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSA9IHRoaXMuX2dlbmVyYXRlQmFzZUZpZWxkSXRlbShjb2x1bW4pO1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRGaWx0ZXJzLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGNvbHVtbi5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLlNJTkdMRTpcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuQ0FURUdPUlk6XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ3NlbGVjdCc7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5pbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLk1VTFRJOlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEudHlwZSA9ICdtdWx0aS1pbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZS5DVVNUT006XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLl9nZW5lcmF0ZUN1c3RvbUZpbHRlckZpZWxkSXRlbShjb2x1bW4sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuSU5QVVQ6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuX2dlbmVyYXRlSW5wdXRGaWVsZEl0ZW0oY29sdW1uLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5jb2x1bW4gPSBjdXJyZW50Q29sdW1uO1xuICAgICAgICAgICAgY3VycmVudENvbHVtbiArPSAxO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbiA+IGNvbHVtbnNOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q29sdW1uID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZm9ybUl0ZW1zID0gaXRlbXM7XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlQ3VzdG9tRmlsdGVyRmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIGlmICghY29sdW1uLmN1c3RvbUZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gY29sdW1uLmN1c3RvbUZpbHRlclR5cGU7XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEsXG4gICAgICAgICAgICB0aGlzLl9zbWFydEZpbHRlckJhclNlcnZpY2UuZ2V0Q3VzdG9tRmlsdGVyQ29uZmlndXJhdGlvbihjb2x1bW4uY3VzdG9tRmlsdGVyVHlwZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpdGVtLnR5cGUgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEucmVuZGVyZXJDb21wb25lbnRcbiAgICAgICAgICAgID8gYCR7aXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLnR5cGV9LXJlbmRlcmVyYFxuICAgICAgICAgICAgOiBpdGVtLnR5cGU7XG4gICAgICAgIGl0ZW0udHJhbnNmb3JtZXIgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEudmFsdWVUcmFuc2Zvcm1lcjtcblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2VuZXJhdGVzIGZvcm0gaXRlbSBiYXNlZCBvbiBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIGNvbHVtblxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUlucHV0RmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIHN3aXRjaCAoY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZpbHRlcmFibGVDb2x1bW5EYXRhVHlwZS5EQVRFOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ2RhdGVwaWNrZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuTlVNQkVSOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS5jb250cm9sVHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyYWJsZUNvbHVtbkRhdGFUeXBlLlNUUklORzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLmNvbnRyb2xUeXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdlbmVyYXRlcyBiYXNlIGZvcm0gaXRlbSBvYmplY3QgdG8gYmUgY29uc3VtZWQgYnkgZm9ybSBnZW5lcmF0b3IgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSBjb2x1bW4gY29sdW1uIGRlZmluaXRpb25cbiAgICAgKiBAcmV0dXJucyBiYXNlIGZvcm0gaXRlbSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVCYXNlRmllbGRJdGVtKGNvbHVtbjogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb24pOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZTogY29sdW1uLmxhYmVsLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGNvbHVtbi5yZXF1aXJlZCxcbiAgICAgICAgICAgIHR5cGU6IFNNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5ULFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcgJyxcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IGNvbHVtbi5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdLFxuICAgICAgICAgICAgY2hvaWNlczogY29sdW1uLmhhc09wdGlvbnMgPyB0aGlzLl9nZXRGaWx0ZXJEZWZhdWx0T3B0aW9ucyhjb2x1bW4ua2V5LCBjb2x1bW4uZmlsdGVyVHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cmFuc2Zvcm1lcjogKGl0ZW1WYWx1ZSkgPT4gZ2V0U2VsZWN0SXRlbVZhbHVlKGl0ZW1WYWx1ZSksXG4gICAgICAgICAgICBndWlPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbHVtbi5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHlwZTogY29sdW1uLmZpbHRlclR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGNvbHVtbi5oYXNPcHRpb25zID8gdGhpcy5fZ2V0RmlsdGVyQXZhaWxhYmxlT3B0aW9ucyhjb2x1bW4ua2V5KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aGVuOiAoKSA9PiB0aGlzLl9zZWxlY3RlZEZpbHRlcnMuaW5jbHVkZXMoY29sdW1uLm5hbWUpXG4gICAgICAgIH0gYXMgU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0cmlldmVzIGF2YWlsYWJsZSBvcHRpb25zIGZvciBwYXJ0aWN1bGFyIGNvbHVtbiBieSB1c2luZyBkYXRhIHNvdXJjZSBtZXRob2QuXG4gICAgICogQHBhcmFtIGNvbHVtbiBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZSBpdGVtcy5cbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+fSBPYnNlcnZhYmxlIHdpdGggdGhlIGFycmF5IG9mIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEZpbHRlckF2YWlsYWJsZU9wdGlvbnMoY29sdW1uOiBzdHJpbmcpOiAoKSA9PiBPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5fZ2V0RmllbGRWYXJpYW50cyhjb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RmlsdGVyRGVmYXVsdE9wdGlvbnMoY29sdW1uOiBzdHJpbmcsIGZpbHRlclR5cGU6IEZpbHRlclR5cGUpOiAoKSA9PiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYW50cyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2dldEZpZWxkVmFyaWFudHMoY29sdW1uKS5waXBlKHRha2UoMSkpKTtcblxuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlRGVmYXVsdENvbmRpdGlvbnM6IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uW10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb246IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2VxdWFsVG8nXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5kaXNwbGF5VmFsdWUgPSBhd2FpdCB0aGlzLmdldERpc3BsYXlWYWx1ZShjb25kaXRpb24sIGZpbHRlclR5cGUpO1xuXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlRGVmYXVsdENvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlRGVmYXVsdENvbmRpdGlvbnM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGaWVsZFZhcmlhbnRzKGNvbHVtbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViamVjdC5nZXRGaWVsZFZhcmlhbnRzKGNvbHVtbikucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGEuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gZGF0YS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbS52YWx1ZSA9PT0gaXRlbS52YWx1ZSkgPT09IGluZGV4KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFN1YmplY3REZWZpbml0aW9ucygpOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViamVjdD8uZ2V0U3ViamVjdEZpZWxkcygpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZXRzIHByb3ZpZGVkIGZpbHRlcnMgZGlyZWN0bHkgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJzIGFycmF5IG9mIGZpbHRlcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYXBwbHlGaWx0ZXJpbmcoZmlsdGVyczogQ29sbGVjdGlvbkZpbHRlckdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgLy8gQXBwbHkgb3V0c2lkZSBmaWx0ZXJpbmcgYW5kIGZvcmNlIHN1YmplY3QgdG8gZmV0Y2ggbmV3IGRhdGEuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc3ViamVjdC5nZXREYXRhU291cmNlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyQnkgPSBmaWx0ZXJzO1xuICAgICAgICBzb3VyY2UuZGF0YVByb3ZpZGVyLnNldEZpbHRlcnMoZmlsdGVycywgdGhpcy5zZWFyY2gpO1xuICAgICAgICB0aGlzLnN1YmplY3QuZ2V0U3ViamVjdCgpLmZldGNoKCk7XG4gICAgICAgIGNvbnN0IGVtaXR0ZWRWYWx1ZTogU21hcnRGaWx0ZXJCYXJNYW5hZ2VkUHJlc2V0ID0geyBzZWFyY2g6IHRoaXMuc2VhcmNoLCBmaWx0ZXJCeTogdGhpcy5maWx0ZXJCeSB9O1xuICAgICAgICB0aGlzLnNtYXJ0RmlsdGVyc0FwcGxpZWQuZW1pdCh7IC4uLmVtaXR0ZWRWYWx1ZSwgc3ViamVjdDogdGhpcy5fc3ViamVjdCB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lnbm9yZVByZXNldENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRDaGFuZ2VkLmVtaXQoZW1pdHRlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pZ25vcmVQcmVzZXRDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRnJvbVN1YmplY3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0ZWRGaWx0ZXJzKGZpbHRlcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gZmlsdGVycy5pbmRleE9mKGYpID09PSBpKTtcbiAgICAgICAgdGhpcy5fZm9ybUdlbmVyYXRvci5yZWZyZXNoU3RlcHNWaXNpYmlsaXR5KCk7XG4gICAgfVxufVxuIiwiPGRpdj5cbiAgICA8ZmQtdG9vbGJhciBbaGFzVGl0bGVdPVwidHJ1ZVwiIGZkVHlwZT1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfdG9vbGJhckl0ZW1zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0ZW1wbGF0ZSBvZiBfdG9vbGJhckl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3I+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGZkcC1zZWFyY2gtZmllbGRcbiAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJfb25TZWFyY2hJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWFyY2hTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgICAgICAgIChjYW5jZWxTZWFyY2gpPVwiX2NhbmNlbFNlYXJjaCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbZGlzYWJsZVJlZnJlc2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2VhcmNoUGxhY2Vob2xkZXInIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZHAtc2VhcmNoLWZpZWxkPlxuICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cbiAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgICAgICAgYnV0dG9uVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCIhbGl2ZVVwZGF0ZVwiXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc3VibWl0QnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8ZmRwLWJ1dHRvbiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgZmQtdG9vbGJhci1pdGVtIGdseXBoPVwic3luY2hyb25pemVcIiBbZGlzYWJsZWRdPVwiX2xvYWRpbmdcIj48L2ZkcC1idXR0b24+XG4gICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0ZpbHRlcmluZ1NldHRpbmdzKClcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgIGZpbHRlcnNMYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcnNMYWJlbCArICcgKCcgKyBfc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aCArICcpJ1xuICAgICAgICAgICAgICAgICAgICA6ICgncGxhdGZvcm1TbWFydEZpbHRlckJhci5maWx0ZXJzQnV0dG9uTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZmlsdGVyc0NvdW50OiBfc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aCB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9sb2FkaW5nXCJcbiAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJfdG9nZ2xlRmlsdGVyQmFyKClcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgIChfc2hvd0ZpbHRlckJhclxuICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLmhpZGVGaWx0ZXJzQnV0dG9uTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2hvd0ZpbHRlcnNCdXR0b25MYWJlbCdcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2xvYWRpbmdcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgIDwvZmQtdG9vbGJhcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZmRwLXNtYXJ0LWZpbHRlci1iYXJfX2ZpbHRlcnNcIiBbaGlkZGVuXT1cIiFfc2hvd0ZpbHRlckJhclwiPlxuICAgIDxmZHAtZm9ybS1nZW5lcmF0b3JcbiAgICAgICAgKGZvcm1DcmVhdGVkKT1cIl9vbkZvcm1DcmVhdGVkKClcIlxuICAgICAgICAoZm9ybVN1Ym1pdHRlZCk9XCJfb25Gb3JtU3VibWl0dGVkKCRldmVudClcIlxuICAgICAgICBbbm9BZGRpdGlvbmFsQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2Zvcm1JdGVtc109XCJfZm9ybUl0ZW1zXCJcbiAgICAgICAgW2NvbHVtbkxheW91dF09XCJmaWx0ZXJzQ29sdW1uTGF5b3V0XCJcbiAgICA+PC9mZHAtZm9ybS1nZW5lcmF0b3I+XG48L2Rpdj5cbiJdfQ==
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvc21hcnQtZmlsdGVyLWJhci9zbWFydC1maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9zbWFydC1maWx0ZXItYmFyL3NtYXJ0LWZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osVUFBVSxFQUNWLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0RCxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBeUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUcsT0FBTyxFQUdILHNCQUFzQixFQUN0QixvQkFBb0IsRUFFdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQWMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU1RixPQUFPLEVBQUUscUNBQXFDLEVBQUUs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RSxhQUFhO3FCQUM3RDtpUUFPRyxPQUFPO3NCQURWLEtBQUs7Z0JBY04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBUU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBUU4sWUFBWTtzQkFEWCxLQUFLO2dCQU9GLFdBQVc7c0JBRGQsS0FBSztnQkFjTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBUU4sK0JBQStCO3NCQUQ5QixLQUFLO2dCQU9OLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sbUJBQW1CO3NCQURsQixNQUFNO2dCQU9QLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFPUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBY1UsZ0JBQWdCO3NCQURoQyxlQUFlO3VCQUFDLGtDQUFrQztnQkFPaEIsY0FBYztzQkFBaEQsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFByb3ZpZGVyLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGVzdHJveWVkU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRmlsdGVyR3JvdXAsIEZpbHRlcmFibGVDb2x1bW5EYXRhVHlwZSwgRmlsdGVyVHlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vdGFibGUnO1xuaW1wb3J0IHsgU2VhcmNoSW5wdXQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NlYXJjaC1maWVsZCc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtRmllbGRJdGVtLFxuICAgIER5bmFtaWNGb3JtSXRlbSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1HZW5lcmF0b3JTZXJ2aWNlLFxuICAgIFByZXBhcmVkRHluYW1pY0Zvcm1GaWVsZEl0ZW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9mb3JtJztcbmltcG9ydCB7IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsIFNlbGVjdEl0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5cbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU2V0dGluZ3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU3ViamVjdERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zbWFydC1maWx0ZXItYmFyLXN1YmplY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyVG9vbGJhckl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc21hcnQtZmlsdGVyLWJhci10b29sYmFyLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyTWFuYWdlZFByZXNldCwgU21hcnRGaWx0ZXJDaGFuZ2VPYmplY3QgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1jaGFuZ2UnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1maWVsZC1kZWZpbml0aW9uJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyRHluYW1pY0Zvcm1GaWVsZEl0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWR5bmFtaWMtZm9ybS1pdGVtJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3NtYXJ0LWZpbHRlci1iYXItY29uZGl0aW9uJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyU2V0dGluZ3NEaWFsb2dDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2ctY29uZmlnJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU2VydmljZSB9IGZyb20gJy4vc21hcnQtZmlsdGVyLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFNNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5UIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJWaXNpYmlsaXR5Q2F0ZWdvcnlMYWJlbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci12aXNpYmlsaXR5LWNhdGVnb3J5JztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyIH0gZnJvbSAnLi9zbWFydC1maWx0ZXItYmFyLmNsYXNzJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQvc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IGdldFNlbGVjdEl0ZW1WYWx1ZSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhclN0cmF0ZWd5TGFiZWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3N0cmF0ZWd5LWxhYmVscy50eXBlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuY29uc3QgZGVmYXVsdENvbHVtbnNMYXlvdXQgPSAnWEw0LUwzLU0yLVMxJztcblxuZnVuY3Rpb24gZ2V0Q29sdW1uc051bWJlcihsYXlvdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAuLi5sYXlvdXQuc3BsaXQoJy0nKS5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoQXJyYXkgPSBwYXJ0Lm1hdGNoKC9cXGQrLyk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaEFycmF5ID8gcGFyc2VJbnQobWF0Y2hBcnJheVswXSwgMTApIDogMTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuXG4vKipcbiAqIERlZmF1bHQgZGlhbG9nIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xuICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxuICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcbiAgICBtaW5XaWR0aDogJzMwcmVtJyxcbiAgICAvKiogODhweCBpdCdzIHRoZSBoZWFkZXIgKyBmb290ZXIgaGVpZ2h0ICovXG4gICAgYm9keU1pbkhlaWdodDogJ2NhbGMoNTB2aCAtIDg4cHgpJ1xufTtcblxuY29uc3Qgc21hcnRGaWx0ZXJCYXJQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogU21hcnRGaWx0ZXJCYXIsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU21hcnRGaWx0ZXJCYXJDb21wb25lbnQpXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1zbWFydC1maWx0ZXItYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHNtYXJ0RmlsdGVyQmFyUHJvdmlkZXIsXG4gICAgICAgIERlc3Ryb3llZFNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogU21hcnRGaWx0ZXJCYXJDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC1zbWFydC1maWx0ZXItYmFyJyxcbiAgICAgICAgJ1tjbGFzcy5mZHAtc21hcnQtZmlsdGVyLWJhci0tdHJhbnNwYXJlbnRdJzogJ3RyYW5zcGFyZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRGaWx0ZXJCYXJDb21wb25lbnQgZXh0ZW5kcyBTbWFydEZpbHRlckJhciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogU3ViamVjdCB3aGljaCB3aWxsIHByb3ZpZGUgY29uZmlndXJhdGlvbiBkYXRhOiBkYXRhIHNvdXJjZSwgY29sdW1ucyBkZWZpbml0aW9ucywgZXRjLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN1YmplY3QodmFsdWU6IFNtYXJ0RmlsdGVyQmFyU3ViamVjdERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLl9zZXRTdWJqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc3ViamVjdCgpOiBTbWFydEZpbHRlckJhclN1YmplY3REaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAnU2hvdyBmaWx0ZXJzJyBidXR0b24gbGFiZWwuXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dGaWx0ZXJzTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqICdIaWRlIGZpbHRlcnMnIGJ1dHRvbiBsYWJlbC5cbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUZpbHRlcnNMYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogJ0ZpbHRlcnMnIGJ1dHRvbiBsYWJlbC5cbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyc0xhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNtYXJ0IGZpbHRlciBiYXIgYmFja2dyb3VuZCBzaG91bGQgYmUgdHJhbnNwYXJlbnQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdHJhbnNwYXJlbnQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl90cmFuc3BhcmVudCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHRyYW5zcGFyZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBDb25kaXRpb24gc3RyYXRlZ3kgbGFiZWxzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lU3RyYXRlZ3lMYWJlbHM6IFNtYXJ0RmlsdGVyQmFyU3RyYXRlZ3lMYWJlbHMgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIEZpbHRlcnMgdmlzaWJpbGl0eSBjYXRlZ29yeSBsYWJlbHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWx0ZXJzVmlzaWJpbGl0eUNhdGVnb3J5TGFiZWxzOiBTbWFydEZpbHRlckJhclZpc2liaWxpdHlDYXRlZ29yeUxhYmVscyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIENvbHVtbnMgbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyc0NvbHVtbkxheW91dDogTnVsbGFibGU8c3RyaW5nPiA9IGRlZmF1bHRDb2x1bW5zTGF5b3V0O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1cGRhdGUgZmlsdGVycyB3aGVuIHRoZXkgYXJlIHNlbGVjdGVkLiBPdGhlcndpc2UsIGZpbHRlcnMgd2lsbCBiZSBhcHBsaWVkIG9ubHkgYnkgcHJlc3NpbmcgXCJHb1wiIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsdGVycyBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzbWFydEZpbHRlcnNDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8U21hcnRGaWx0ZXJDaGFuZ2VPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxTbWFydEZpbHRlckNoYW5nZU9iamVjdD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBzZWxlY3RlZCBmaWx0ZXJzIGhhcyBiZWVuIGFwcGxpZWQgKFVzZXIgY2xpY2tlZCBvbiBHbyBidXR0b24pLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNtYXJ0RmlsdGVyc0FwcGxpZWQ6IEV2ZW50RW1pdHRlcjxTbWFydEZpbHRlckNoYW5nZU9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPFNtYXJ0RmlsdGVyQ2hhbmdlT2JqZWN0PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHNlYXJjaCBpbnB1dCBmaWVsZCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlYXJjaElucHV0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPFNlYXJjaElucHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoSW5wdXQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVkIGFycmF5IG9mIGZpbHRlcnMgdG8gYXBwbHkgZm9yIHRoZSBzdWJqZWN0J3MgZGF0YSBzb3VyY2UuXG4gICAgICovXG4gICAgZmlsdGVyQnk6IENvbGxlY3Rpb25GaWx0ZXJHcm91cFtdID0gW107XG4gICAgLyoqXG4gICAgICogU2VhcmNoIGZpZWxkIHZhbHVlIHRvIGFwcGx5IGZvciB0aGUgc3ViamVjdCdzIGRhdGEgc291cmNlLlxuICAgICAqL1xuICAgIHNlYXJjaDogU2VhcmNoSW5wdXQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oU21hcnRGaWx0ZXJCYXJUb29sYmFySXRlbURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90b29sYmFySXRlbVJlZnM6IFF1ZXJ5TGlzdDxTbWFydEZpbHRlckJhclRvb2xiYXJJdGVtRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGb3JtIGdlbmVyYXRvciBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChGb3JtR2VuZXJhdG9yQ29tcG9uZW50KSBfZm9ybUdlbmVyYXRvciE6IEZvcm1HZW5lcmF0b3JDb21wb25lbnQ7XG4gICAgLyoqIEBIaWRkZW4gKi9cbiAgICBfdG9vbGJhckl0ZW1zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb3JtSXRlbXM6IER5bmFtaWNGb3JtSXRlbVtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGVkRmlsdGVyczogc3RyaW5nW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93RmlsdGVyQmFyID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9sb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdD8uZ2V0RGF0YVNvdXJjZSgpID8gdGhpcy5fc3ViamVjdC5nZXREYXRhU291cmNlKCkuaXNEYXRhTG9hZGluZyA6IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3ViamVjdFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1HZW5lcmF0b3JSZWFkeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pZ25vcmVQcmVzZXRDaGFuZ2UgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX3NtYXJ0RmlsdGVyQmFyU2VydmljZTogU21hcnRGaWx0ZXJCYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9mZ1NlcnZpY2U6IEZvcm1HZW5lcmF0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkOiBEZXN0cm95ZWRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2ZnU2VydmljZS5hZGRDb21wb25lbnQoU21hcnRGaWx0ZXJCYXJDb25kaXRpb25GaWVsZENvbXBvbmVudCwgW1NNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5UXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJqZWN0ITogU21hcnRGaWx0ZXJCYXJTdWJqZWN0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtcyA9IHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy50b0FycmF5KCkubWFwKChyZWYpID0+IHJlZi50ZW1wbGF0ZVJlZik7XG5cbiAgICAgICAgdGhpcy5fdG9vbGJhckl0ZW1SZWZzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtcyA9IHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy50b0FycmF5KCkubWFwKChyZWYpID0+IHJlZi50ZW1wbGF0ZVJlZik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgY29uZGl0aW9uIHZhbHVlIGludG8gaHVtYW4tcmVhZGFibGUgdGV4dC5cbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIFNtYXJ0IGZpbHRlciBiYXIgY29uZGl0aW9uLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJUeXBlIENvbmRpdGlvbiBmaWx0ZXIgdHlwZS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXREaXNwbGF5VmFsdWUoY29uZGl0aW9uOiBTbWFydEZpbHRlckJhckNvbmRpdGlvbiwgZmlsdGVyVHlwZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NtYXJ0RmlsdGVyQmFyU2VydmljZS5nZXREaXNwbGF5VmFsdWUoY29uZGl0aW9uLCBmaWx0ZXJUeXBlKTtcbiAgICB9XG5cbiAgICAvKiogT3BlbiBGaWx0ZXJpbmcgU2V0dGluZ3MgRGlhbG9nICovXG4gICAgc2hvd0ZpbHRlcmluZ1NldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5fZ2V0U3ViamVjdERlZmluaXRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IFNtYXJ0RmlsdGVyU2V0dGluZ3NEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICBmaWVsZHM6IGNvbHVtbnMsXG4gICAgICAgICAgICBmaWx0ZXJCeTogdGhpcy5maWx0ZXJCeSxcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyczogdGhpcy5fc2VsZWN0ZWRGaWx0ZXJzLFxuICAgICAgICAgICAgdmlzaWJpbGl0eUNhdGVnb3JpZXM6IHRoaXMuZmlsdGVyc1Zpc2liaWxpdHlDYXRlZ29yeUxhYmVsc1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgICAgIFNtYXJ0RmlsdGVyQmFyU2V0dGluZ3NEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzUwcmVtJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHNlbGVjdGVkRmlsdGVyczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGVkRmlsdGVycyhzZWxlY3RlZEZpbHRlcnMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblNlYXJjaElucHV0Q2hhbmdlKGV2ZW50OiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaCA9IGV2ZW50O1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0Q2hhbmdlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLmxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3VibWl0cyBmaWx0ZXJzIGFuZCBzZWFyY2ggZm9ybS5cbiAgICAgKi9cbiAgICBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uLiAqL1xuICAgIGFzeW5jIHNldFByZXNldChkYXRhOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5faWdub3JlUHJlc2V0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5maWx0ZXJCeSA9IGRhdGEuZmlsdGVyQnkgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnkgPSBkYXRhLmZpbHRlckJ5O1xuICAgICAgICB0aGlzLnNlYXJjaCA9IGRhdGEuc2VhcmNoO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3JSZWFkeS5waXBlKGZpbHRlcigodmFsdWUpID0+IHZhbHVlKSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIFJlc2V0IGZvcm1cbiAgICAgICAgICAgIHRoaXMuX2ZnU2VydmljZS5yZXNldEZvcm0odGhpcy5fZm9ybUdlbmVyYXRvci5mb3JtKTtcblxuICAgICAgICAgICAgLy8gU2V0IG5ldyBkYXRhXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlckJ5IG9mIHRoaXMuZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZmdTZXJ2aWNlLmdldEZvcm1Db250cm9sKHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybSwgZmlsdGVyQnkuZmllbGQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1JdGVtID0gY29udHJvbC5mb3JtSXRlbSBhcyBQcmVwYXJlZER5bmFtaWNGb3JtRmllbGRJdGVtO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLnRyYW5zZm9ybUNvbGxlY3Rpb25GaWx0ZXIoZmlsdGVyQnkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb25kaXRpb25zID0gYXdhaXQgdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLmdldENvbmRpdGlvbkZpZWxkU2VsZWN0ZWRWYXJpYW50cyhcbiAgICAgICAgICAgICAgICAgICAgZm9ybUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29udHJvbD8uc2V0VmFsdWUoc2VsZWN0ZWRDb25kaXRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRGaWx0ZXJzKHRoaXMuZmlsdGVyQnkubWFwKChmaWx0ZXJCeSkgPT4gZmlsdGVyQnkuZmllbGQpKTtcblxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdWJqZWN0LmdldERhdGFTb3VyY2UoKTtcbiAgICAgICAgICAgIHNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0RmlsdGVycyh0aGlzLmZpbHRlckJ5LCB0aGlzLnNlYXJjaCk7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3QuZ2V0U3ViamVjdCgpLmZldGNoKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGN1cnJlbnQgcHJlc2V0IGNvbmZpZ3VyYXRpb24uICovXG4gICAgZ2V0Q3VycmVudFByZXNldCgpOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaCxcbiAgICAgICAgICAgIGZpbHRlckJ5OiB0aGlzLmZpbHRlckJ5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gZm9ybSBnZW5lcmF0b3IgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdmFsaWRhdGVkIGFuZCBzdWJtaXR0ZWQuXG4gICAgICovXG4gICAgX29uRm9ybVN1Ym1pdHRlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB0aGlzLl9nZW5lcmF0ZUNvbGxlY3Rpb25GaWx0ZXJHcm91cHMoZXZlbnQpO1xuICAgICAgICB0aGlzLl9hcHBseUZpbHRlcmluZyhjb25kaXRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHdoZW4gZm9ybSBoYXMgYmVlbiBjcmVhdGVkLlxuICAgICAqIFBvcHVsYXRlcyBzZWxlY3RlZCBmaWx0ZXJzIGFycmF5IHdpdGggdXNlci1kZWZpbmVkIGRlZmF1bHQgZmlsdGVycy5cbiAgICAgKi9cbiAgICBfb25Gb3JtQ3JlYXRlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3ViamVjdCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRGaWx0ZXJzKFsuLi50aGlzLnN1YmplY3QuZ2V0RGVmYXVsdEZpZWxkcygpLCAuLi50aGlzLl9zZWxlY3RlZEZpbHRlcnNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNTApLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0Rm9ybWF0dGVkQ29uZGl0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5zbWFydEZpbHRlcnNDaGFuZ2VkLmVtaXQoeyBmaWx0ZXJCeTogY29uZGl0aW9ucywgc2VhcmNoOiB0aGlzLnNlYXJjaCwgc3ViamVjdDogdGhpcy5zdWJqZWN0IH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMubGl2ZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyaW5nKGNvbmRpdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yUmVhZHkubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX3RvZ2dsZUZpbHRlckJhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvd0ZpbHRlckJhciA9ICF0aGlzLl9zaG93RmlsdGVyQmFyO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0cyByYXcgZmlsdGVycyBvYmplY3QgaW50byBhcnJheSBvZiBncm91cGVkIGZpbHRlcnMuXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgZ3JvdXBlZCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIGFzeW5jIGdldEZvcm1hdHRlZENvbmRpdGlvbnMoKTogUHJvbWlzZTxDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXT4ge1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBhd2FpdCB0aGlzLl9mZ1NlcnZpY2UuZ2V0Rm9ybVZhbHVlKHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUNvbGxlY3Rpb25GaWx0ZXJHcm91cHMoZm9ybVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlQ29sbGVjdGlvbkZpbHRlckdyb3Vwcyh2YWx1ZToge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBTbWFydEZpbHRlckJhckNvbmRpdGlvbltdO1xuICAgIH0pOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25GaWx0ZXJHcm91cHM6IENvbGxlY3Rpb25GaWx0ZXJHcm91cFtdID0gW107XG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX2dldFN1YmplY3REZWZpbml0aW9ucygpO1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgZmllbGRDb25kaXRpb25zXSkgPT4gISFmaWVsZENvbmRpdGlvbnMpXG4gICAgICAgICAgICAuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmllbGRDb25kaXRpb25zXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBmaWVsZE5hbWUpIGFzIFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckdyb3VwOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogY29sdW1uLmNvbmRpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmtleVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZmllbGRDb25kaXRpb25zLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJHcm91cC5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGNvbmRpdGlvbi5vcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4ua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlMjogY29uZGl0aW9uLnZhbHVlMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbHVtbi5kYXRhVHlwZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25GaWx0ZXJHcm91cHMucHVzaChmaWx0ZXJHcm91cCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZW1vdmUgZW1wdHkgZmlsdGVyIG9iamVjdHMuXG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uRmlsdGVyR3JvdXBzLmZpbHRlcigoZmlsdGVyR3JvdXApID0+IGZpbHRlckdyb3VwLmZpbHRlcnM/Lmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U3ViamVjdChzdWJqZWN0OiBTbWFydEZpbHRlckJhclN1YmplY3REaXJlY3RpdmUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUZyb21TdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvU3ViamVjdENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdWJqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvU3ViamVjdENvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3N1YmplY3QuZmllbGRzU3RyZWFtLnN1YnNjcmliZShhc3luYyAoY29sdW1uczogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb25bXSkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9nZW5lcmF0ZUZvcm0oY29sdW1ucy5maWx0ZXIoKGMpID0+IGMuZmlsdGVyYWJsZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2VuZXJhdGVzIGZvcm0gaXRlbXMgdG8gYmUgY29uc3VtZWQgYnkgZm9ybSBnZW5lcmF0b3IgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSBjb2x1bW5zIGNvbHVtbnMgZGVmaW5pdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2dlbmVyYXRlRm9ybShjb2x1bW5zOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBEeW5hbWljRm9ybUZpZWxkSXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IGNvbHVtbnNOdW1iZXIgPSBnZXRDb2x1bW5zTnVtYmVyKHRoaXMuZmlsdGVyc0NvbHVtbkxheW91dCA/PyAnJyk7XG4gICAgICAgIGxldCBjdXJyZW50Q29sdW1uID0gMTtcblxuICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSA9IHRoaXMuX2dlbmVyYXRlQmFzZUZpZWxkSXRlbShjb2x1bW4pO1xuXG4gICAgICAgICAgICBpZiAoY29sdW1uLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRGaWx0ZXJzLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGNvbHVtbi5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLlNJTkdMRTpcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuQ0FURUdPUlk6XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ3NlbGVjdCc7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5pbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLk1VTFRJOlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEudHlwZSA9ICdtdWx0aS1pbnB1dCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZS5DVVNUT006XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLl9nZW5lcmF0ZUN1c3RvbUZpbHRlckZpZWxkSXRlbShjb2x1bW4sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuSU5QVVQ6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuX2dlbmVyYXRlSW5wdXRGaWVsZEl0ZW0oY29sdW1uLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5jb2x1bW4gPSBjdXJyZW50Q29sdW1uO1xuICAgICAgICAgICAgY3VycmVudENvbHVtbiArPSAxO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbiA+IGNvbHVtbnNOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q29sdW1uID0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZm9ybUl0ZW1zID0gaXRlbXM7XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlQ3VzdG9tRmlsdGVyRmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIGlmICghY29sdW1uLmN1c3RvbUZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gY29sdW1uLmN1c3RvbUZpbHRlclR5cGU7XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEsXG4gICAgICAgICAgICB0aGlzLl9zbWFydEZpbHRlckJhclNlcnZpY2UuZ2V0Q3VzdG9tRmlsdGVyQ29uZmlndXJhdGlvbihjb2x1bW4uY3VzdG9tRmlsdGVyVHlwZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpdGVtLnR5cGUgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEucmVuZGVyZXJDb21wb25lbnRcbiAgICAgICAgICAgID8gYCR7aXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLnR5cGV9LXJlbmRlcmVyYFxuICAgICAgICAgICAgOiBpdGVtLnR5cGU7XG4gICAgICAgIGl0ZW0udHJhbnNmb3JtZXIgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEudmFsdWVUcmFuc2Zvcm1lcjtcblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2VuZXJhdGVzIGZvcm0gaXRlbSBiYXNlZCBvbiBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIGNvbHVtblxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUlucHV0RmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIHN3aXRjaCAoY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZpbHRlcmFibGVDb2x1bW5EYXRhVHlwZS5EQVRFOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ2RhdGVwaWNrZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuTlVNQkVSOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS5jb250cm9sVHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyYWJsZUNvbHVtbkRhdGFUeXBlLlNUUklORzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLmNvbnRyb2xUeXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdlbmVyYXRlcyBiYXNlIGZvcm0gaXRlbSBvYmplY3QgdG8gYmUgY29uc3VtZWQgYnkgZm9ybSBnZW5lcmF0b3IgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSBjb2x1bW4gY29sdW1uIGRlZmluaXRpb25cbiAgICAgKiBAcmV0dXJucyBiYXNlIGZvcm0gaXRlbSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVCYXNlRmllbGRJdGVtKGNvbHVtbjogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb24pOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZTogY29sdW1uLmxhYmVsLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGNvbHVtbi5yZXF1aXJlZCxcbiAgICAgICAgICAgIHR5cGU6IFNNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5ULFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcgJyxcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IGNvbHVtbi5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdLFxuICAgICAgICAgICAgY2hvaWNlczogY29sdW1uLmhhc09wdGlvbnMgPyB0aGlzLl9nZXRGaWx0ZXJEZWZhdWx0T3B0aW9ucyhjb2x1bW4ua2V5LCBjb2x1bW4uZmlsdGVyVHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cmFuc2Zvcm1lcjogKGl0ZW1WYWx1ZSkgPT4gZ2V0U2VsZWN0SXRlbVZhbHVlKGl0ZW1WYWx1ZSksXG4gICAgICAgICAgICBndWlPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbHVtbi5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHlwZTogY29sdW1uLmZpbHRlclR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGNvbHVtbi5oYXNPcHRpb25zID8gdGhpcy5fZ2V0RmlsdGVyQXZhaWxhYmxlT3B0aW9ucyhjb2x1bW4ua2V5KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aGVuOiAoKSA9PiB0aGlzLl9zZWxlY3RlZEZpbHRlcnMuaW5jbHVkZXMoY29sdW1uLm5hbWUpXG4gICAgICAgIH0gYXMgU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0cmlldmVzIGF2YWlsYWJsZSBvcHRpb25zIGZvciBwYXJ0aWN1bGFyIGNvbHVtbiBieSB1c2luZyBkYXRhIHNvdXJjZSBtZXRob2QuXG4gICAgICogQHBhcmFtIGNvbHVtbiBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZSBpdGVtcy5cbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+fSBPYnNlcnZhYmxlIHdpdGggdGhlIGFycmF5IG9mIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEZpbHRlckF2YWlsYWJsZU9wdGlvbnMoY29sdW1uOiBzdHJpbmcpOiAoKSA9PiBPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5fZ2V0RmllbGRWYXJpYW50cyhjb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RmlsdGVyRGVmYXVsdE9wdGlvbnMoY29sdW1uOiBzdHJpbmcsIGZpbHRlclR5cGU6IEZpbHRlclR5cGUpOiAoKSA9PiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYW50cyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2dldEZpZWxkVmFyaWFudHMoY29sdW1uKS5waXBlKHRha2UoMSkpKTtcblxuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlRGVmYXVsdENvbmRpdGlvbnM6IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uW10gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb246IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2VxdWFsVG8nXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5kaXNwbGF5VmFsdWUgPSBhd2FpdCB0aGlzLmdldERpc3BsYXlWYWx1ZShjb25kaXRpb24sIGZpbHRlclR5cGUpO1xuXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlRGVmYXVsdENvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlRGVmYXVsdENvbmRpdGlvbnM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGaWVsZFZhcmlhbnRzKGNvbHVtbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViamVjdC5nZXRGaWVsZFZhcmlhbnRzKGNvbHVtbikucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGEuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gZGF0YS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbS52YWx1ZSA9PT0gaXRlbS52YWx1ZSkgPT09IGluZGV4KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFN1YmplY3REZWZpbml0aW9ucygpOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViamVjdD8uZ2V0U3ViamVjdEZpZWxkcygpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZXRzIHByb3ZpZGVkIGZpbHRlcnMgZGlyZWN0bHkgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgICAqIEBwYXJhbSBmaWx0ZXJzIGFycmF5IG9mIGZpbHRlcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYXBwbHlGaWx0ZXJpbmcoZmlsdGVyczogQ29sbGVjdGlvbkZpbHRlckdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgLy8gQXBwbHkgb3V0c2lkZSBmaWx0ZXJpbmcgYW5kIGZvcmNlIHN1YmplY3QgdG8gZmV0Y2ggbmV3IGRhdGEuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc3ViamVjdC5nZXREYXRhU291cmNlKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyQnkgPSBmaWx0ZXJzO1xuICAgICAgICBzb3VyY2UuZGF0YVByb3ZpZGVyLnNldEZpbHRlcnMoZmlsdGVycywgdGhpcy5zZWFyY2gpO1xuICAgICAgICB0aGlzLnN1YmplY3QuZ2V0U3ViamVjdCgpLmZldGNoKCk7XG4gICAgICAgIGNvbnN0IGVtaXR0ZWRWYWx1ZTogU21hcnRGaWx0ZXJCYXJNYW5hZ2VkUHJlc2V0ID0geyBzZWFyY2g6IHRoaXMuc2VhcmNoLCBmaWx0ZXJCeTogdGhpcy5maWx0ZXJCeSB9O1xuICAgICAgICB0aGlzLnNtYXJ0RmlsdGVyc0FwcGxpZWQuZW1pdCh7IC4uLmVtaXR0ZWRWYWx1ZSwgc3ViamVjdDogdGhpcy5fc3ViamVjdCB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lnbm9yZVByZXNldENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRDaGFuZ2VkLmVtaXQoZW1pdHRlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pZ25vcmVQcmVzZXRDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRnJvbVN1YmplY3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0ZWRGaWx0ZXJzKGZpbHRlcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gZmlsdGVycy5pbmRleE9mKGYpID09PSBpKTtcbiAgICAgICAgdGhpcy5fZm9ybUdlbmVyYXRvci5yZWZyZXNoU3RlcHNWaXNpYmlsaXR5KCk7XG4gICAgfVxufVxuIiwiPGRpdj5cbiAgICA8ZmQtdG9vbGJhciBbaGFzVGl0bGVdPVwidHJ1ZVwiIGZkVHlwZT1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfdG9vbGJhckl0ZW1zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0ZW1wbGF0ZSBvZiBfdG9vbGJhckl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3I+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGZkcC1zZWFyY2gtZmllbGRcbiAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJfb25TZWFyY2hJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWFyY2hTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgICAgICAgIChjYW5jZWxTZWFyY2gpPVwiX2NhbmNlbFNlYXJjaCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbZGlzYWJsZVJlZnJlc2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2VhcmNoUGxhY2Vob2xkZXInIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZHAtc2VhcmNoLWZpZWxkPlxuICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cbiAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgICAgICAgYnV0dG9uVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCIhbGl2ZVVwZGF0ZVwiXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc3VibWl0QnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIGdseXBoPVwic3luY2hyb25pemVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9sb2FkaW5nXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIucmVmcmVzaEJ1dHRvbkFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0ZpbHRlcmluZ1NldHRpbmdzKClcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgIGZpbHRlcnNMYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcnNMYWJlbCArICcgKCcgKyBfc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aCArICcpJ1xuICAgICAgICAgICAgICAgICAgICA6ICgncGxhdGZvcm1TbWFydEZpbHRlckJhci5maWx0ZXJzQnV0dG9uTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZmlsdGVyc0NvdW50OiBfc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aCB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9sb2FkaW5nXCJcbiAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJfdG9nZ2xlRmlsdGVyQmFyKClcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgIChfc2hvd0ZpbHRlckJhclxuICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLmhpZGVGaWx0ZXJzQnV0dG9uTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2hvd0ZpbHRlcnNCdXR0b25MYWJlbCdcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2xvYWRpbmdcIlxuICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgIDwvZmQtdG9vbGJhcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZmRwLXNtYXJ0LWZpbHRlci1iYXJfX2ZpbHRlcnNcIiBbaGlkZGVuXT1cIiFfc2hvd0ZpbHRlckJhclwiPlxuICAgIDxmZHAtZm9ybS1nZW5lcmF0b3JcbiAgICAgICAgKGZvcm1DcmVhdGVkKT1cIl9vbkZvcm1DcmVhdGVkKClcIlxuICAgICAgICAoZm9ybVN1Ym1pdHRlZCk9XCJfb25Gb3JtU3VibWl0dGVkKCRldmVudClcIlxuICAgICAgICBbbm9BZGRpdGlvbmFsQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2Zvcm1JdGVtc109XCJfZm9ybUl0ZW1zXCJcbiAgICAgICAgW2NvbHVtbkxheW91dF09XCJmaWx0ZXJzQ29sdW1uTGF5b3V0XCJcbiAgICA+PC9mZHAtZm9ybS1nZW5lcmF0b3I+XG48L2Rpdj5cbiJdfQ==
|