@fundamental-ngx/platform 0.43.33 → 0.43.35
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/list/free-content-list-item/free-content-list-item.component.mjs +5 -5
- package/esm2020/list/list.component.mjs +1 -5
- package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
- package/esm2020/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +13 -3
- package/esm2020/table/components/table-header-row/table-header-row.component.mjs +3 -3
- package/esm2020/table/components/table-p13-dialog/table-p13-dialog.component.mjs +5 -3
- package/esm2020/table/components/table-row/table-row.component.mjs +18 -8
- package/esm2020/table/components/table-toolbar/table-toolbar.component.mjs +3 -3
- package/esm2020/table/table.component.mjs +40 -9
- package/esm2020/table-helpers/directives/index.mjs +2 -1
- package/esm2020/table-helpers/directives/table-visible-cell.directive.mjs +110 -0
- package/esm2020/table-helpers/index.mjs +2 -1
- package/esm2020/table-helpers/models/index.mjs +2 -1
- package/esm2020/table-helpers/models/table-cell-activate-event.model.mjs +12 -0
- package/esm2020/table-helpers/services/table-advanced-viewport-root.service.mjs +26 -0
- package/esm2020/table-helpers/services/table-row.service.mjs +9 -1
- package/esm2020/table-helpers/table-helpers.module.mjs +8 -5
- package/esm2020/upload-collection/dialogs/move-to/move-to.component.mjs +1 -1
- package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
- package/esm2020/value-help-dialog/components/select-tab/select-tab.component.mjs +3 -3
- package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
- package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-list.mjs +4 -8
- package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +156 -5
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs +73 -21
- package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +2 -2
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +4 -4
- 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-list.mjs +4 -8
- package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +156 -5
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs +72 -21
- package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +2 -2
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +4 -4
- 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/fundamental-ngx-platform-v0.43.35.tgz +0 -0
- package/list/free-content-list-item/free-content-list-item.component.d.ts +1 -1
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +5 -0
- package/table/components/table-row/table-row.component.d.ts +8 -1
- package/table/table.component.d.ts +22 -5
- package/table-helpers/directives/index.d.ts +1 -0
- package/table-helpers/directives/table-visible-cell.directive.d.ts +32 -0
- package/table-helpers/index.d.ts +1 -0
- package/table-helpers/models/index.d.ts +1 -0
- package/table-helpers/models/table-cell-activate-event.model.d.ts +10 -0
- package/table-helpers/services/table-advanced-viewport-root.service.d.ts +14 -0
- package/table-helpers/services/table-row.service.d.ts +7 -0
- package/table-helpers/table-helpers.module.d.ts +2 -1
- package/fundamental-ngx-platform-v0.43.33.tgz +0 -0
|
@@ -6,11 +6,11 @@ import * as i2 from "@angular/common";
|
|
|
6
6
|
export class FreeContentListItemComponent extends BaseListItem {
|
|
7
7
|
}
|
|
8
8
|
FreeContentListItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FreeContentListItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
-
FreeContentListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FreeContentListItemComponent, selector: "fdp-free-content-list-item", host: { attributes: { "role": "
|
|
9
|
+
FreeContentListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FreeContentListItemComponent, selector: "fdp-free-content-list-item, li[fdp-free-content-list-item]", host: { attributes: { "role": "listitem" } }, providers: [{ provide: BaseListItem, useExisting: forwardRef(() => FreeContentListItemComponent) }], usesInheritance: true, ngImport: i0, template: "<div\n #listItem\n [class.fd-list__item--unread]=\"unRead\"\n fd-list-item\n [attr.id]=\"id\"\n [selected]=\"_selected\"\n [tabindex]=\"-1\"\n (click)=\"_onItemClick()\"\n (keydown)=\"_onKeyDown($event)\"\n (keyup)=\"_onKeyUp($event)\"\n class=\"fd-list__item--link\"\n [class.fd-list__item--inactive]=\"listType === 'inactive'\"\n [attr.aria-label]=\"ariaLabel\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [attr.aria-level]=\"ariaLevel\"\n [attr.aria-posinset]=\"ariaPosinset\"\n [attr.aria-setsize]=\"ariaSetSize | async\"\n [attr.aria-selected]=\"_selectedAttr\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText", "ariaRole"], outputs: ["keyDown"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
10
10
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FreeContentListItemComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
|
-
args: [{ selector: 'fdp-free-content-list-item', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: BaseListItem, useExisting: forwardRef(() => FreeContentListItemComponent) }], host: {
|
|
13
|
-
role: '
|
|
14
|
-
}, template: "<
|
|
12
|
+
args: [{ selector: 'fdp-free-content-list-item, li[fdp-free-content-list-item]', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: BaseListItem, useExisting: forwardRef(() => FreeContentListItemComponent) }], host: {
|
|
13
|
+
role: 'listitem'
|
|
14
|
+
}, template: "<div\n #listItem\n [class.fd-list__item--unread]=\"unRead\"\n fd-list-item\n [attr.id]=\"id\"\n [selected]=\"_selected\"\n [tabindex]=\"-1\"\n (click)=\"_onItemClick()\"\n (keydown)=\"_onKeyDown($event)\"\n (keyup)=\"_onKeyUp($event)\"\n class=\"fd-list__item--link\"\n [class.fd-list__item--inactive]=\"listType === 'inactive'\"\n [attr.aria-label]=\"ariaLabel\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [attr.aria-level]=\"ariaLevel\"\n [attr.aria-posinset]=\"ariaPosinset\"\n [attr.aria-setsize]=\"ariaSetSize | async\"\n [attr.aria-selected]=\"_selectedAttr\"\n>\n <ng-content></ng-content>\n</div>\n" }]
|
|
15
15
|
}] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZS1jb250ZW50LWxpc3QtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9mcmVlLWNvbnRlbnQtbGlzdC1pdGVtL2ZyZWUtY29udGVudC1saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2xpc3QvZnJlZS1jb250ZW50LWxpc3QtaXRlbS9mcmVlLWNvbnRlbnQtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQWFqRCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsWUFBWTs7eUhBQWpELDRCQUE0Qjs2R0FBNUIsNEJBQTRCLG1JQUwxQixDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxpRENUdkcscXBCQXFCQTsyRkRQYSw0QkFBNEI7a0JBWHhDLFNBQVM7K0JBQ0ksNERBQTRELGlCQUd2RCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxRQUM3Rjt3QkFDRixJQUFJLEVBQUUsVUFBVTtxQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUxpc3RJdGVtIH0gZnJvbSAnLi4vYmFzZS1saXN0LWl0ZW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1mcmVlLWNvbnRlbnQtbGlzdC1pdGVtLCBsaVtmZHAtZnJlZS1jb250ZW50LWxpc3QtaXRlbV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mcmVlLWNvbnRlbnQtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mcmVlLWNvbnRlbnQtbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEJhc2VMaXN0SXRlbSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRnJlZUNvbnRlbnRMaXN0SXRlbUNvbXBvbmVudCkgfV0sXG4gICAgaG9zdDoge1xuICAgICAgICByb2xlOiAnbGlzdGl0ZW0nXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBGcmVlQ29udGVudExpc3RJdGVtQ29tcG9uZW50IGV4dGVuZHMgQmFzZUxpc3RJdGVtIHt9XG4iLCI8ZGl2XG4gICAgI2xpc3RJdGVtXG4gICAgW2NsYXNzLmZkLWxpc3RfX2l0ZW0tLXVucmVhZF09XCJ1blJlYWRcIlxuICAgIGZkLWxpc3QtaXRlbVxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbc2VsZWN0ZWRdPVwiX3NlbGVjdGVkXCJcbiAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgIChjbGljayk9XCJfb25JdGVtQ2xpY2soKVwiXG4gICAgKGtleWRvd24pPVwiX29uS2V5RG93bigkZXZlbnQpXCJcbiAgICAoa2V5dXApPVwiX29uS2V5VXAoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJmZC1saXN0X19pdGVtLS1saW5rXCJcbiAgICBbY2xhc3MuZmQtbGlzdF9faXRlbS0taW5hY3RpdmVdPVwibGlzdFR5cGUgPT09ICdpbmFjdGl2ZSdcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICBbYXJpYURlc2NyaWJlZEJ5XT1cImFyaWFEZXNjcmliZWRCeVwiXG4gICAgW2F0dHIuYXJpYS1sZXZlbF09XCJhcmlhTGV2ZWxcIlxuICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiYXJpYVBvc2luc2V0XCJcbiAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiYXJpYVNldFNpemUgfCBhc3luY1wiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJfc2VsZWN0ZWRBdHRyXCJcbj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -304,10 +304,6 @@ export class ListComponent extends CollectionBaseInput {
|
|
|
304
304
|
return;
|
|
305
305
|
}
|
|
306
306
|
event.stopImmediatePropagation();
|
|
307
|
-
const activeItemIndex = this._keyManager.activeItemIndex;
|
|
308
|
-
if (activeItemIndex) {
|
|
309
|
-
this._setCurrentActiveItemIndex(activeItemIndex);
|
|
310
|
-
}
|
|
311
307
|
if (KeyUtil.isKeyCode(event, DOWN_ARROW) || KeyUtil.isKeyCode(event, UP_ARROW)) {
|
|
312
308
|
return false;
|
|
313
309
|
}
|
|
@@ -743,4 +739,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
743
739
|
type: HostListener,
|
|
744
740
|
args: ['click', ['$event']]
|
|
745
741
|
}] } });
|
|
746
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBRVAsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxN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QUs7Z0JBS04sa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLE1BQU07c0JBREwsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUt2QyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQztnQkFLM0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLHdCQUF3QjtnQkFLdEMsU0FBUztzQkFEUixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBZ0p0RSxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyLCBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFLCBUQUIsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2tpcFNlbGYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZEX0ZPUk1fRklFTERfQ09OVFJPTCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIE9ic2VydmFibGUsXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpcHRpb24sXG4gICAgYXN5bmNTY2hlZHVsZXIsXG4gICAgZmlsdGVyLFxuICAgIGZpcnN0VmFsdWVGcm9tLFxuICAgIGlzT2JzZXJ2YWJsZSxcbiAgICBtYXAsXG4gICAgb2JzZXJ2ZU9uLFxuICAgIG9mLFxuICAgIHN0YXJ0V2l0aCxcbiAgICBzd2l0Y2hNYXBcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEtleVV0aWwsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLCBMaXN0VW5yZWFkSW5kaWNhdG9yIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgRkRfTEFOR1VBR0UsIEZkTGFuZ3VhZ2UsIFRyYW5zbGF0aW9uUmVzb2x2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHtcbiAgICBBcnJheUxpc3REYXRhU291cmNlLFxuICAgIENvbGxlY3Rpb25CYXNlSW5wdXQsXG4gICAgTGlzdERhdGFTb3VyY2UsXG4gICAgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICBpc0JsYW5rLFxuICAgIGlzRGF0YVNvdXJjZSxcbiAgICBpc1ByZXNlbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgQmFzZUxpc3RJdGVtLCBMSVNUX0lURU1fVFlQRSwgTGlzdEl0ZW1EZWYgfSBmcm9tICcuL2Jhc2UtbGlzdC1pdGVtJztcbmltcG9ydCB7IEZkcExpc3RDb21wb25lbnQgfSBmcm9tICcuL2ZkcExpc3RDb21wb25lbnQudG9rZW4nO1xuaW1wb3J0IHsgTGlzdENvbmZpZyB9IGZyb20gJy4vbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgTG9hZE1vcmVDb250ZW50Q29udGV4dCwgTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9sb2FkLW1vcmUtY29udGVudC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmRwTGlzdCwgRmRwTGlzdERhdGFTb3VyY2UsIExpc3RUeXBlLCBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnLi9tb2RlbHMvbGlzdCc7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25DaGFuZ2VFdmVudCB7XG4gICAgLyoqIFNlbGVjdGVkIGl0ZW1zICovXG4gICAgc2VsZWN0ZWRJdGVtczogQmFzZUxpc3RJdGVtW107XG4gICAgLyoqIEluZGV4ICovXG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxubGV0IG5leHRMaXN0SWQgPSAwO1xuXG4vKipcbiAqIFRoZSBMaXN0IGNvbXBvbmVudCByZXByZXNlbnRzIGEgY29udGFpbmVyIGZvciBsaXN0IGl0ZW0gdHlwZXMuXG4gKiBJdCBpcyB1c2VkIHRvIGRpc3BsYXkgYSBsaXN0IGZlYXR1cmVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRkRfRk9STV9GSUVMRF9DT05UUk9MLCB1c2VFeGlzdGluZzogTGlzdENvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBGZHBMaXN0Q29tcG9uZW50LCB1c2VFeGlzdGluZzogTGlzdENvbXBvbmVudCB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogTGlzdENvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAnLTEnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0Q29tcG9uZW50PFQ+XG4gICAgZXh0ZW5kcyBDb2xsZWN0aW9uQmFzZUlucHV0XG4gICAgaW1wbGVtZW50cyBMaXN0VW5yZWFkSW5kaWNhdG9yLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgRmRwTGlzdDxCYXNlTGlzdEl0ZW0+XG57XG4gICAgLyoqICBBbiBhcnJheSB0aGF0IGhvbGRzIGEgbGlzdCBvZiBhbGwgc2VsZWN0ZWQgaXRlbXMuICoqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtczogQmFzZUxpc3RJdGVtW107XG5cbiAgICAvKiogZGVmaW5lIHNpemUgb2YgaXRlbXMgZm9yIHNjcmVlbiByZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhU2V0c2l6ZTogbnVtYmVyO1xuXG4gICAgLyoqIERlZmluZXMgd2hldGhlciBpdGVtcyBhcmUgbXVsdGlzZWxlY3RhYmxlIGZvciBzY3JlZW4gcmVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYU11bHRpc2VsZWN0YWJsZTogYm9vbGVhbjtcblxuICAgIC8qKiBUaXRsZSB1c2VkIG9uIGJ1dHRvbiB3aGVuIGRhdGEgbG9hZHMgb24gYnV0dG9uIGNsaWNrLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogTGFiZWwgdXNlZCBvbiBhbm5vdW5jZSBtZXNzYWdlIG9mIGRhdGEgd2FzIGxvYWRlZCBmb3Igc2NyZWVuIHJlYWRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nTGFiZWwgPSAnJztcblxuICAgIC8qKiBXYWl0IHRpbWUgZm9yIG5ldyBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRlbGF5VGltZTogbnVtYmVyO1xuXG4gICAgLyoqIEl0ZW1zIHRvIGJlIGxvYWRlZCBhdCBvbmNlLiBJbnRpbml0eSAobm8gbGltaXQpIGJ5IGRlZmF1bHQuICovXG4gICAgQElucHV0KClcbiAgICBpdGVtU2l6ZSA9IEluZmluaXR5O1xuXG4gICAgLyoqIEVuYWJsZXMgbGF6eSBsb2FkTW9yZSBvZiBkYXRhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZE1vcmU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGRhdGEgbG9hZCBvbiBzY3JvbGwgZm9yIHRydWVcbiAgICAgKiBmYWxzZTogZW5hYmxlcyBkYXRhIGxvYWRpbmcgb24gYnV0dG9uIGNsaWNrLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZE9uU2Nyb2xsOiBib29sZWFuO1xuXG4gICAgLyoqIGRlZmluZSB0aGUgcm9sZSB0byBjdXN0b20gcmVxdWlyZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICByb2xlID0gJ2xpc3QnO1xuXG4gICAgLyoqIExpc3RUeXBlICdpbmFjdGl2ZScgfCAnYWN0aXZlJyB8ICduYXZpZ2F0aW9uJyB8ICdkZXRhaWwnICovXG4gICAgQElucHV0KClcbiAgICBsaXN0VHlwZTogTGlzdFR5cGUgPSAnYWN0aXZlJztcblxuICAgIC8qKiBNYXggaGVpZ2h0IGZvciB2aWV3cG9ydCB0byBkaXNwbGF5IHNjcm9sbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIHJlbW92ZWQgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyID0gZmFsc2U7XG5cbiAgICAvKiogU2Nyb2xsIG9mZnNldCBwZXJjZW50YWdlIHRvIHRyaWdnZXIgc2Nyb2xsIGV2ZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Nyb2xsT2Zmc2V0UGVyY2VudGFnZTogbnVtYmVyO1xuXG4gICAgLyoqIEVlbmFibGVzIHNlbGVjdGlvbiBzdHlsZXMuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzZWxlY3Rpb24uIFR5cGVzIGluY2x1ZGU6XG4gICAgICogJ25vbmUnfCAnbXVsdGknIHwgJ3NpbmdsZSd8J2RlbGV0ZScuXG4gICAgICogTGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgKCkuJ1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgc2V0IHRvICdub25lJy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvblR5cGUgPSAnbm9uZSc7XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIHJhZGlvIGJ1dHRvbiBhbmQgY2hlY2tib3guICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3Igcm93IGxldmVsIFNlbGVjdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByb3dTZWxlY3Rpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93U2VsZWN0aW9uID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9yb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZmQtbGlzdC0tc2VsZWN0aW9uLXJvdycpO1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGVkICYmIHRoaXMuaGFzT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdmZC1saXN0LS1zZWxlY3Rpb24tcm93Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgcm93U2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93U2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKiBEYXRhc291cmNlIGZvciBzdWdnZXN0aW9uIGxpc3QuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRFModmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGRhdGFTb3VyY2UoKTogRmRwTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIF9uYXZpZ2F0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbmF2aWdhdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRlZCA9IHZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IFsnZmQtbGlzdC0tbmF2aWdhdGlvbiddO1xuICAgICAgICBpZiAodGhpcy5oYXNPYmplY3QpIHtcbiAgICAgICAgICAgIGNsYXNzTGlzdC5wdXNoKCdmZC1saXN0LS1uYXZpZ2F0aW9uLW9iamVjdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzTGlzdCk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdmlnYXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRlZDtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIF9uYXZpZ2F0aW9uSW5kaWNhdG9yLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5hdmlnYXRpb25JbmRpY2F0b3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkluZGljYXRvciA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLW5hdmlnYXRpb24taW5kaWNhdGlvbicpO1xuICAgIH1cblxuICAgIGdldCBuYXZpZ2F0aW9uSW5kaWNhdG9yKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbkluZGljYXRvcjtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIGhhc0J5TGluZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBoYXNCeUxpbmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGFzQnlMaW5lID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZmQtbGlzdC0tYnlsaW5lJyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc0J5TGluZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0J5TGluZTtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIGhhc09iamVjdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBoYXNPYmplY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGFzT2JqZWN0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZmQtb2JqZWN0LWxpc3QnKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzT2JqZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdW5yZWFkIG5vdGlmaWNhdGlvbiBpbmRpY2F0b3IuICovXG4gICAgQElucHV0KClcbiAgICB1bnJlYWRJbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGludGVyY2VwdCB0YWIga2V5IG5hdmlnYXRpb24uICovXG4gICAgQElucHV0KClcbiAgICBpbnRlcmNlcHRUYWJLZXkgPSB0cnVlO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiBzZWxlY3RlZCBpdGVtIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3RlZEl0ZW1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gICAgLyoqIEFjY2VzcyBjaGlsZCBlbGVtZW50LCBmb3IgY2hlY2tpbmcgbGluayBjb250ZW50ICovXG4gICAgQFZpZXdDaGlsZCgnbGluaycsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGFuY2hvcjogRWxlbWVudFJlZjxIVE1MTGlua0VsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gTGlzdEl0ZW1EZWYpKVxuICAgIGxpc3RJdGVtRGVmOiBMaXN0SXRlbURlZjtcblxuICAgIC8qKiBMb2FkIE1vcmUgTGlzdCBpdGVtIGNvbnRlbnQgKi9cbiAgICBAQ29udGVudENoaWxkKExvYWRNb3JlQ29udGVudERpcmVjdGl2ZSlcbiAgICBsb2FkTW9yZUNvbnRlbnQ6IExvYWRNb3JlQ29udGVudERpcmVjdGl2ZTtcblxuICAgIC8qKiBDaGlsZCBpdGVtcyBvZiB0aGUgTGlzdC4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gQmFzZUxpc3RJdGVtKSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIGxpc3RJdGVtczogUXVlcnlMaXN0PEJhc2VMaXN0SXRlbT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdWxFbGVtZW50KCk6IE51bGxhYmxlPEhUTUxVTGlzdEVsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvIGRpc3BsYXkgbG9hZGluZyBzeW1ib2xcbiAgICAgKi9cbiAgICBfbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZmlyc3QgbG9hZGluZyB3aGVuIHNrZWxldG9ucyBiZSBzaG93biBhbmQgc3Vic2VxdWVudCBsb2FkaW5ncyB3aGVuIGJ1c3kgaW5kaWNhdG9yIGJlIHNob3duXG4gICAgICovXG4gICAgX2ZpcnN0TG9hZGluZ0RvbmUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBrZXlNYW5nZXIgdG8gaGFuZGxlIGtleWJvcmQgZXZlbnRzIHVzZWQgaW4gdGVtcGxhdGVcbiAgICAgKi9cbiAgICBfa2V5TWFuYWdlcjogTnVsbGFibGU8Rm9jdXNLZXlNYW5hZ2VyPEJhc2VMaXN0SXRlbT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2FyaWFTZXRTaXplOiBPYnNlcnZhYmxlPG51bWJlcj4gPSBuZXcgT2JzZXJ2YWJsZSgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IExpc3REYXRhU291cmNlPFQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmFuc2xhdGlvblJlc29sdmVyID0gbmV3IFRyYW5zbGF0aW9uUmVzb2x2ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgQnkgbGluZSBpcyBwcmVzZW50IGluIGxpc3QgaXRlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhc0J5TGluZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGxpc3QgaXRlbXMgYXJlIG5hdmlnYWJsZVxuICAgICAqIHlvdSBzaG91bGQgaW5kaWNhdGUgdGhvc2UgYnkgZGlzcGxheWluZyBhIG5hdmlnYXRpb24gYXJyb3dcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uSW5kaWNhdG9yOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgb2JqZWN0IHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzT2JqZWN0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZlcmZpZXMgcGFydGlhbCBuYXZpZ2F0aW9uIGVuYWJsZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3BhcnRpYWxOYXZpZ2F0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhlIG1vZGVsIGJhY2tpbmcgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyBtdWx0aXNlbGVjdGlvblxuICAgICAqIGJpbmRpbmcgaW4gdGVtcGF0ZSB0byBhcHBlbmQgY2xhc3NcbiAgICAgKi9cbiAgICBwcml2YXRlIF9tdWx0aVNlbGVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZHZhbHVlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgcm93IGxldmVsIHNlbGVjdGlvbiBtb2RlIGlzIGVuYWJsZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgYWxsIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgX3Jvd1NlbGVjdGlvbjogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuIFRvIHN0b3JlICovXG4gICAgcHJpdmF0ZSBfdGVtcEl0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RhcnRJbmRleCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RJbmRleCA9IHRoaXMuaXRlbVNpemU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RzSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGZvciBkYXRhIHNvdXJjZSBoYW5kbGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgX2RzU3Vic2NyaXB0aW9uOiBOdWxsYWJsZTxTdWJzY3JpcHRpb24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYW5ndWFnZTogRmRMYW5ndWFnZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWZ0ZXJWaWV3SW5pdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBASW5qZWN0KEZEX0xBTkdVQUdFKSBwcml2YXRlIHJlYWRvbmx5IF9sYW5ndWFnZSQ6IE9ic2VydmFibGU8RmRMYW5ndWFnZT4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIHByb3RlY3RlZCBfbGlzdENvbmZpZz86IExpc3RDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2NoYW5nZURldGVjdG9yUmVmLCBlbGVtZW50UmVmLCBuZ0NvbnRyb2wsIGNvbnRyb2xDb250YWluZXIsIG5nRm9ybSwgZm9ybUZpZWxkLCBmb3JtQ29udHJvbCk7XG4gICAgICAgIHRoaXMuX2luaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogb24gVXBkYXRlIG5hdmdpYXRpb24gc3R5bGVzIGZvciBub24gbmF2aWdhdGVkIGl0ZW1zXG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKiBzZXByYXRlIFBSIGZvciBjdXN0b20gZXZlbnRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGxldCBzZWxlY3RlZEl0ZW1JZDogTnVsbGFibGU8c3RyaW5nPiA9ICcwJztcbiAgICAgICAgY29uc3QgZWxlbWVudDogTnVsbGFibGU8SFRNTEVsZW1lbnQ+ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBldmVudC50YXJnZXQgOiBudWxsO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50Py5jbG9zZXN0KCcuZmQtbGlzdF9faXRlbScpO1xuICAgICAgICBpZiAoaXNQcmVzZW50KHBhcmVudCkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbUlkID0gcGFyZW50Py5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hbmNob3I/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtbmF2aWdhdGVkJyk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLl9mb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5rRWxlbWVudCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcbiAgICAgICAgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnKSB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdpcy1uYXZpZ2F0ZWQnKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdsaScgJiYgISFsaW5rRWxlbWVudCkge1xuICAgICAgICAgICAgbGlua0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaXMtbmF2aWdhdGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBzZWxlY3Rpb24gbWFuYWdlbWVudCBzaG91bGQgYmUgY29tcGxldGVseSBjaGFuZ2VkIGh0dHBzOi8vZ2l0aHViLmNvbS9TQVAvZnVuZGFtZW50YWwtbmd4L2lzc3Vlcy84MDA4XG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTaW5nbGVTZWxlY3QoZXZlbnQsIHNlbGVjdGVkSXRlbUlkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBHZXQgY29udGV4dCBmb3IgbG9hZCBtb3JlIGJ1dHRvbiAqL1xuICAgIGdldExvYWRNb3JlQ29udGVudENvbnRleHQoKTogTG9hZE1vcmVDb250ZW50Q29udGV4dCB7XG4gICAgICAgIGNvbnN0ICRpbXBsaWNpdCA9IHtcbiAgICAgICAgICAgIGxvYWRUaXRsZTogdGhpcy5sb2FkVGl0bGUsXG4gICAgICAgICAgICBsb2FkaW5nOiB0aGlzLl9sb2FkaW5nLFxuICAgICAgICAgICAgbG9hZGluZ0xhYmVsOiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgobGFuZ3VhZ2UpID0+IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShsYW5ndWFnZSwgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJykpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmxvYWRpbmdMYWJlbCk7XG4gICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgbGFzdENodW5rOiB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX3N0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLl9sYXN0SW5kZXhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b3RhbDogdGhpcy5fZHNJdGVtcy5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdCxcbiAgICAgICAgICAgIC4uLiRpbXBsaWNpdFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgbGlzIGNvbXBvbmVudCB3aXRoIHNlbGVjdGlvbiBtb2RlXG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldEl0ZW1zKCk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgICAgIHRoaXMuaWQgPSBgZmRwLWxpc3QtJHtuZXh0TGlzdElkKyt9YDtcblxuICAgICAgICAvLyB1c2luZyBzZWxlY3Rpb24gTW9kZWwgZm9yIG11bHRpc2VsZWN0XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpU2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYXJpYU11bHRpc2VsZWN0YWJsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aVNlbGVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8QmFzZUxpc3RJdGVtPih0aGlzLl9tdWx0aVNlbGVjdCwgdGhpcy5zZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZUV2ZW50KCk7XG4gICAgICAgICAgICBldmVudC5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChldmVudCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEtleWJvYXJkIG1hbmFnZXIgb24gbGlzdCBpdGVtcywgc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgYXJyYXlcbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FmdGVyVmlld0luaXQkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyPEJhc2VMaXN0SXRlbT4odGhpcy5saXN0SXRlbXMpLndpdGhXcmFwKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5jaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMubGlzdEl0ZW1zKSwgb2JzZXJ2ZU9uKGFzeW5jU2NoZWR1bGVyKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZUxpc3RJdGVtcygpKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGluZGljYXRvciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWJ1c3ktaW5kaWNhdG9yJyk7XG4gICAgICAgIGluZGljYXRvcj8uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogaGFuZGxpbmUga2V5Ym9hcmQgb3BlcmF0aW9uc1xuICAgICAqIGluIHRlbXBsYXRlIG9uIGxpc3QgYW5kIGxpc3QgaXRlbXNcbiAgICAgKi9cbiAgICBfaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IE51bGxhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9rZXlNYW5hZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikgJiYgIXRoaXMuaW50ZXJjZXB0VGFiS2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXg6IE51bGxhYmxlPG51bWJlcj4gPSB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0Q3VycmVudEFjdGl2ZUl0ZW1JbmRleChhY3RpdmVJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKGFjdGl2ZUl0ZW1JbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGJpbmRlZCBpbiB0ZW1wbGF0ZSBvbiBzY3JvbGxcbiAgICAgKi9cbiAgICBfc2Nyb2xsSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nICYmIHRoaXMubG9hZE9uU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGxvYWQgbW9yZSBvbiBlbnRlciBvciBzcGFjZSBwcmVzc1xuICAgICAqL1xuICAgIF9sb2FkT25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5fZ2V0TW9yZURhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGxhenkgbG9hZGluZyBkYXRhXG4gICAgICogdXNlZCBpbiB0ZW1wbGF0ZVxuICAgICAqIG9uc2Nyb2xsIGFuZCBvbiBtb3JlIGJ1dHRvbiBjbGlja1xuICAgICAqL1xuICAgIF9nZXRNb3JlRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XG4gICAgICAgIG9mKHRoaXMuX2xvYWROZXdJdGVtcygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0JsYW5rKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCc9PT1JbnZhbGlkIFJlc3BvbnNlIHJlY2VpdmVkPT09Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTGFiZWwgPSB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSh0aGlzLmxvYWRpbmdMYWJlbCwgJ2Fzc2VydGl2ZScpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlbGF5KHRoaXMuZGVsYXlUaW1lKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9pdGVtcy5sZW5ndGgsIGogPSAwOyBqIDwgcmVzdWx0Lmxlbmd0aDsgKytpLCArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zW2ldID0gcmVzdWx0W2pdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiB1c2VkIGluIHRlbXBhdGUgdG8gZ2V0IFNlbGVjdGVkIGl0ZW1zIGZyb20gYSBsaXN0XG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKi9cbiAgICBfb25TZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGRhdGVOYXZpZ2F0aW9uKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXR1cExpc3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICBpdGVtLnNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICAgIGl0ZW0ucm93U2VsZWN0aW9uID0gdGhpcy5yb3dTZWxlY3Rpb247XG4gICAgICAgIGl0ZW0uX2hhc0J5TGluZSA9IHRoaXMuaGFzQnlMaW5lO1xuICAgICAgICBpdGVtLml0ZW1TZWxlY3RlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uc2V0QWN0aXZlSXRlbSh0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuaW5kZXhPZihpdGVtKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0SXRlbShpdGVtOiBCYXNlTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kc0l0ZW1zLmxlbmd0aCAhPT0gbnVsbCAmJiB0aGlzLml0ZW1TaXplICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RJbmRleCA9IHRoaXMuaXRlbVNpemU7XG4gICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX2RzSXRlbXMuc2xpY2UodGhpcy5fc3RhcnRJbmRleCwgdGhpcy5fbGFzdEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURTKGRzOiBGZHBMaXN0RGF0YVNvdXJjZTxUPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9kc0l0ZW1zID0gW107XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNsb3NlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDb252ZXJ0IExpc3REYXRhU291cmNlPFQ+IHwgT2JzZXJ2YWJsZTxUW10+IHwgVFtdIGFzIERhdGFTb3VyY2VcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHRoaXMuX29wZW5EYXRhU3RyZWFtKGRzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvRGF0YVN0cmVhbShzb3VyY2U6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiA8TGlzdERhdGFTb3VyY2U8VD4+c291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0byB3b3JrIG9uIHRvcCBvZiBhcnJheXNcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0RGF0YVNvdXJjZTxUPihzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGVMaXN0RGF0YVNvdXJjZTxUPihzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW5EYXRhU3RyZWFtKGRzOiBGZHBMaXN0RGF0YVNvdXJjZTxUPik6IExpc3REYXRhU291cmNlPFQ+IHtcbiAgICAgICAgY29uc3QgaW5pdERhdGFTb3VyY2UgPSB0aGlzLl90b0RhdGFTdHJlYW0oZHMpO1xuICAgICAgICBpZiAoaW5pdERhdGFTb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbZGF0YVNvdXJjZV0gc291cmNlIGRpZCBub3QgbWF0Y2ggYW4gYXJyYXksIE9ic2VydmFibGUsIG9yIERhdGFTb3VyY2VgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGlzIHNpbmdsZSBwb2ludCBvZiBkYXRhIGVudHJ5IHRvIHRoZSBjb21wb25lbnQuIFdlIGRvbnQgd2FudCB0byBzZXQgZGF0YSBvbiBkaWZmZXJlbnRcbiAgICAgICAgICogcGxhY2VzLiBJZiBhbnkgbmV3IGRhdGEgY29tZXMgaW4gZWl0aGVyIHlvdSBkbyBhIHNlYXJjaCBhbmQgeW91IHdhbnQgdG8gcGFzcyBpbml0aWFsIGRhdGFcbiAgICAgICAgICogaXRzIGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IGluaXREYXRhU291cmNlXG4gICAgICAgICAgICAub3BlbigpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBTZXQgbmV3IGl0ZW1zIHdoZW4gY29tcG9uZW50IGlzIGZ1bGx5IGluaXRpYXRlZCBhbmQgYWxsIGNoaWxkIGNvbXBvbmVudHMgYXJlIGF2YWlsYWJsZS5cbiAgICAgICAgICAgICAgICB0aGlzLl93YWl0Rm9yVmlld0luaXQoKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzSXRlbXMgPSBkYXRhIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5fZHNJdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0SXRlbXMoKTtcbiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gd2hlbiBxdWV1ZSBpcyBlbXB0eS5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGluaXREYXRhU291cmNlLm9uRGF0YVJlcXVlc3RlZCgpLnN1YnNjcmliZSgoKSA9PiAodGhpcy5fbG9hZGluZyA9IHRydWUpKSk7XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgaW5pdERhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdExvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgbWF0Y2hQYXJhbXMgPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdxdWVyeScsICcqJyk7XG4gICAgICAgIG1hdGNoUGFyYW1zLnNldCgnbGltaXQnLCB0aGlzLml0ZW1TaXplKTtcblxuICAgICAgICAvLyBpbml0aWFsIGRhdGEgZmV0Y2hcbiAgICAgICAgaW5pdERhdGFTb3VyY2UubWF0Y2gobWF0Y2hQYXJhbXMpO1xuXG4gICAgICAgIHJldHVybiBpbml0RGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xvYWROZXdJdGVtcygpOiBUW10ge1xuICAgICAgICB0aGlzLl9zdGFydEluZGV4ID0gdGhpcy5fc3RhcnRJbmRleCArIHRoaXMuaXRlbVNpemU7XG4gICAgICAgIHRoaXMuX2xhc3RJbmRleCA9IHRoaXMuX2xhc3RJbmRleCArIHRoaXMuaXRlbVNpemU7XG4gICAgICAgIHRoaXMuX3RlbXBJdGVtcyA9IHRoaXMuX2RzSXRlbXMuc2xpY2UodGhpcy5fc3RhcnRJbmRleCwgdGhpcy5fbGFzdEluZGV4KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCByYWRpbyBidXR0b24gc3R5bGVzLCBjaGVjaywgdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVNpbmdsZVNlbGVjdChldmVudDogRXZlbnQsIHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZmQtbGlzdF9faXRlbScpO1xuICAgICAgICBjb25zdCByYWRpbyA9IHBhcmVudCA/IHBhcmVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpIDogbnVsbDtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWR2YWx1ZSA9IHJhZGlvID8gKDxIVE1MSW5wdXRFbGVtZW50PnJhZGlvKS52YWx1ZSA6IG51bGw7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUHJlc2VudChpdGVtLnJhZGlvQnV0dG9uQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uX3NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXRlbS5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZWxlY3Rpb25WYWx1ZSA9IHRoaXMuX3NlbGVjdGVkdmFsdWU7XG4gICAgICAgICAgICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IGl0ZW0ubGlzdEl0ZW07XG4gICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcsICd0cnVlJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVJvd1NlbGVjdChzZWxlY3RlZEl0ZW1JZDogTnVsbGFibGU8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICAvLyBoYW5kbGVzIG11dGxpIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCBjaGVja2JveFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGVzIHNpbmdsZSBzZWxlY3Qgb24gcm93IGxldmVsIHdpdGhvdXQgcmFkaW9idXR0b25cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uYW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IGl0ZW0ubGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19zZWxlY3RlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIGl0ZW0uYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG5cbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IGl0ZW0ubGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpICE9PSBzZWxlY3RlZEl0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3I/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaXMtc2VsZWN0ZWQnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtSWQgPSAnMCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdCBpdGVtIHdpdGggY2hlY2tib3ggc3R5bGVzLGNoZWNrLHVuY2hlY2t1cGRhdGVzXG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVNdWx0aVNlbGVjdChzZWxlY3RlZEl0ZW1JZDogTnVsbGFibGU8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IGl0ZW0ubGlzdEl0ZW07XG4gICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJyk7XG4gICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgYCR7IXNlbGVjdH1gKTtcbiAgICAgICAgICAgIGlmIChpdGVtLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZXR0aW5nIHZhbHVlcyBmcm9tIGxpc3QgdG8gbGlzdCBpdGVtc1xuICAgICAqIGV4YW1wbGU6XG4gICAgICogRG9lcyBsaXN0IGl0ZW0gaGFzIG5hdmlnYXRpb24sXG4gICAgICogc2hvdWxkIHNob3cgYXJyb3dzLFxuICAgICAqIHdpbGwgaXQgYmUgY29tcGFjdCBtb2RlLFxuICAgICAqIHNob3VsZCBiZSBpbiB3aGljaCBzZWxlY3Rpb24gbW9kZVxuICAgICAqIHNldCB2YWx1ZXMgd2hlbiBwYXNzZWQgdmlhIGRhdGFzb3VyY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVMaXN0SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RJdGVtcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZpcnN0Lmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hcmlhU2V0U2l6ZSA9IHRoaXMuYXJpYVNldHNpemVcbiAgICAgICAgICAgID8gb2YodGhpcy5hcmlhU2V0c2l6ZSlcbiAgICAgICAgICAgIDogdGhpcy5fZGF0YVNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlLmRhdGFQcm92aWRlcj8uZ2V0VG90YWxJdGVtc1xuICAgICAgICAgICAgPyB0aGlzLl9kYXRhU291cmNlLmRhdGFQcm92aWRlci5nZXRUb3RhbEl0ZW1zKClcbiAgICAgICAgICAgIDogb2YodGhpcy5saXN0SXRlbXMubGVuZ3RoKTtcblxuICAgICAgICB0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbiA9IHRoaXMubGlzdEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0ubmF2aWdhdGlvbkluZGljYXRvciB8fCBpdGVtLmxpc3RUeXBlID09PSAnZGV0YWlsJyk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cDogQmFzZUxpc3RJdGVtIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJyZW50R3JvdXBJdGVtSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAvLyBTaW5jZSB3ZSBjYW5ub3QgdXNlIGluZGV4IGZyb20gdGhlIGl0ZXJhdGlvbiBkdWUgdG8gcG9zc2libGUgZ3JvdXAgaXRlbSBleGlzdGVuY2UsIHdlIG5lZWQgdG8gdHJhY2sgaXQgbWFudWFsbHkuXG4gICAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcGFydGlhbE5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5hdmlnYXRlZCA9IHRoaXMubmF2aWdhdGVkO1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGlvbkluZGljYXRvciA9IHRoaXMubmF2aWdhdGlvbkluZGljYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RUeXBlID0gdGhpcy5saXN0VHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLl90eXBlID09PSBMSVNUX0lURU1fVFlQRS5IRUFERVIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXA/Lmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW93bnMnLCBjdXJyZW50R3JvdXBJdGVtSWRzLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcyA9IFtdO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9IGl0ZW07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgIT09IExJU1RfSVRFTV9UWVBFLklURU0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uYXJpYVNldFNpemUgPSB0aGlzLl9hcmlhU2V0U2l6ZTtcblxuICAgICAgICAgICAgaXRlbS5hcmlhUG9zaW5zZXQgPSArK2l0ZW1JbmRleDtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cEl0ZW1JZHMucHVzaChpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gdGhpcy5saXN0SXRlbXMubGFzdCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93YWl0Rm9yVmlld0luaXQ8U291cmNlRGF0YVR5cGU+KCkge1xuICAgICAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxTb3VyY2VEYXRhVHlwZT4pOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPiA9PlxuICAgICAgICAgICAgc291cmNlLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzcmMpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FmdGVyVmlld0luaXQkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGFmdGVyVmlld0luaXQpID0+IGFmdGVyVmlld0luaXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHNyYylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGFzeW5jIF9pbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2xhbmd1YWdlJCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtdG9vbGJhclwiPjwvbmctY29udGVudD5cbjx1bFxuICAgIGZkLWxpc3RcbiAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgW25vQm9yZGVyXT1cIm5vQm9yZGVyXCJcbiAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgW2J5bGluZV09XCJoYXNCeUxpbmVcIlxuICAgIFtjbGFzcy5mZC1saXN0LS1uYXZpZ2F0aW9uXT1cIm5hdmlnYXRlZCB8fCBuYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICBbbmF2aWdhdGlvbkluZGljYXRvcl09XCJuYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICBzdHlsZT1cIm91dGxpbmU6IG5vbmVcIlxuICAgIChrZXlkb3duKT1cIl9rZXlNYW5hZ2VyPy5vbktleWRvd24oJGV2ZW50KTsgX2hhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgKGNoYW5nZSk9XCJfb25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJfYXJpYVNldFNpemUgfCBhc3luY1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwiYXJpYU11bHRpc2VsZWN0YWJsZVwiXG4gICAgW3JvbGVdPVwicm9sZVwiXG4gICAgW3VucmVhZEluZGljYXRvcl09XCJ1bnJlYWRJbmRpY2F0b3JcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkTW9yZSAmJiBsb2FkT25TY3JvbGxcIj5cbiAgICAgICAgPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbSBmZC1saXN0X19pdGVtLS1ncm93aW5nXCJcbiAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIl9sb2FkaW5nICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWJ1c3ldPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJfbG9hZGluZyA/ICgncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpIDogbnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBmZC1saXN0XG4gICAgICAgICAgICAgICAgZmRJbmZpbml0ZVNjcm9sbFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtbGlzdF9faW5maW5pdGUtc2Nyb2xsXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodF09XCJtYXhIZWlnaHRcIlxuICAgICAgICAgICAgICAgIChvblNjcm9sbEFjdGlvbik9XCJfc2Nyb2xsSGFuZGxlcigpXCJcbiAgICAgICAgICAgICAgICBbc2Nyb2xsUGVyY2VudF09XCJzY3JvbGxPZmZzZXRQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICBbcm9sZV09XCJyb2xlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2l0ZW1zLmxlbmd0aCAhPT0gMDsgdGhlbiB0aGVuQmxvY2s7IGVsc2UgZWxzZUJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mZC1idXN5LWluZGljYXRvcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRPblNjcm9sbFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJfaXRlbXMubGVuZ3RoICE9PSAwOyB0aGVuIHRoZW5CbG9jazsgZWxzZSBlbHNlQmxvY2tcIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGxpXG4gICAgICAgICAgICAjbGlzdEl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwibG9hZE1vcmUgJiYgIWxvYWRPblNjcm9sbCAmJiBfZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiX2dldE1vcmVEYXRhKClcIlxuICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJfbG9hZE9uS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtbGlzdF9faXRlbS0tY3VzdG9tLWNvbnRlbnRdPVwibG9hZE1vcmVDb250ZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtbGlzdF9faXRlbSBmZC1saXN0X19pdGVtLS1ncm93aW5nIGZkLWxpc3RfX2l0ZW0tLWFjdGlvblwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRNb3JlRWxlbWVudENvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZE1vcmVFbGVtZW50Q29udGVudD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRNb3JlQ29udGVudDsgZWxzZSBkZWZhdWx0Q29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWxpc3RfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRNb3JlQ29udGVudC50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRMb2FkTW9yZUNvbnRlbnRDb250ZXh0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50PlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZkLWxpc3RfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1idXN5LWluZGljYXRvci1jdXN0b21cIlxuICAgICAgICAgICAgICAgICAgICBbYmxvY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIl9sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJfbG9hZGluZyA/ICgncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpIDogbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9mZC1idXN5LWluZGljYXRvcj5cbiAgICAgICAgICAgICAgICB7eyBsb2FkVGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIjbG9hZFwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L3VsPlxuXG48bmctdGVtcGxhdGUgI3RoZW5CbG9jaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9pdGVtczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdEl0ZW1EZWYudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj4gPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsaXN0SXRlbXM/Lmxlbmd0aCAmJiAhX2ZpcnN0TG9hZGluZ0RvbmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoYXNCeUxpbmU7IGVsc2UgYnlsaW5lTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiBzdHlsZT1cIm1hcmdpbjogYXV0byAwXCIgdHlwZT1cInRleHRcIiB0ZXh0TGluZXM9XCIxXCIgd2lkdGg9XCI0MCVcIj48L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjYnlsaW5lTG9hZGluZz5cbiAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNDhweFwiIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjBcIiB3aWR0aD1cIjQwJVwiIGhlaWdodD1cIjEyXCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCI2MFwiIHk9XCIyMFwiIHdpZHRoPVwiMzAlXCIgaGVpZ2h0PVwiOFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgPC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
742
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBRVAsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxN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QUFVLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUszQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUt0QyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFnSnRFLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBhc3luY1NjaGVkdWxlcixcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBvYnNlcnZlT24sXG4gICAgb2YsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExJU1RfSVRFTV9UWVBFLCBMaXN0SXRlbURlZiB9IGZyb20gJy4vYmFzZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBMaXN0Q29uZmlnIH0gZnJvbSAnLi9saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbnRlbnRDb250ZXh0LCBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2xvYWQtbW9yZS1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBMaXN0LCBGZHBMaXN0RGF0YVNvdXJjZSwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKiogU2VsZWN0ZWQgaXRlbXMgKi9cbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcbiAgICAvKiogSW5kZXggKi9cbiAgICBpbmRleDogbnVtYmVyO1xufVxuXG5sZXQgbmV4dExpc3RJZCA9IDA7XG5cbi8qKlxuICogVGhlIExpc3QgY29tcG9uZW50IHJlcHJlc2VudHMgYSBjb250YWluZXIgZm9yIGxpc3QgaXRlbSB0eXBlcy5cbiAqIEl0IGlzIHVzZWQgdG8gZGlzcGxheSBhIGxpc3QgZmVhdHVyZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IEZkcExpc3RDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50IH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6ICctMSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQ8VD5cbiAgICBleHRlbmRzIENvbGxlY3Rpb25CYXNlSW5wdXRcbiAgICBpbXBsZW1lbnRzIExpc3RVbnJlYWRJbmRpY2F0b3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBGZHBMaXN0PEJhc2VMaXN0SXRlbT5cbntcbiAgICAvKiogIEFuIGFycmF5IHRoYXQgaG9sZHMgYSBsaXN0IG9mIGFsbCBzZWxlY3RlZCBpdGVtcy4gKiovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcblxuICAgIC8qKiBkZWZpbmUgc2l6ZSBvZiBpdGVtcyBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFTZXRzaXplOiBudW1iZXI7XG5cbiAgICAvKiogRGVmaW5lcyB3aGV0aGVyIGl0ZW1zIGFyZSBtdWx0aXNlbGVjdGFibGUgZm9yIHNjcmVlbiByZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTXVsdGlzZWxlY3RhYmxlOiBib29sZWFuO1xuXG4gICAgLyoqIFRpdGxlIHVzZWQgb24gYnV0dG9uIHdoZW4gZGF0YSBsb2FkcyBvbiBidXR0b24gY2xpY2suICovXG4gICAgQElucHV0KClcbiAgICBsb2FkVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBMYWJlbCB1c2VkIG9uIGFubm91bmNlIG1lc3NhZ2Ugb2YgZGF0YSB3YXMgbG9hZGVkIGZvciBzY3JlZW4gcmVhZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmdMYWJlbCA9ICcnO1xuXG4gICAgLyoqIFdhaXQgdGltZSBmb3IgbmV3IGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVsYXlUaW1lOiBudW1iZXI7XG5cbiAgICAvKiogSXRlbXMgdG8gYmUgbG9hZGVkIGF0IG9uY2UuIEludGluaXR5IChubyBsaW1pdCkgYnkgZGVmYXVsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1TaXplID0gSW5maW5pdHk7XG5cbiAgICAvKiogRW5hYmxlcyBsYXp5IGxvYWRNb3JlIG9mIGRhdGEuICovXG4gICAgQElucHV0KClcbiAgICBsb2FkTW9yZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZGF0YSBsb2FkIG9uIHNjcm9sbCBmb3IgdHJ1ZVxuICAgICAqIGZhbHNlOiBlbmFibGVzIGRhdGEgbG9hZGluZyBvbiBidXR0b24gY2xpY2suXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkT25TY3JvbGw6IGJvb2xlYW47XG5cbiAgICAvKiogZGVmaW5lIHRoZSByb2xlIHRvIGN1c3RvbSByZXF1aXJlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGUgPSAnbGlzdCc7XG5cbiAgICAvKiogTGlzdFR5cGUgJ2luYWN0aXZlJyB8ICdhY3RpdmUnIHwgJ25hdmlnYXRpb24nIHwgJ2RldGFpbCcgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpc3RUeXBlOiBMaXN0VHlwZSA9ICdhY3RpdmUnO1xuXG4gICAgLyoqIE1heCBoZWlnaHQgZm9yIHZpZXdwb3J0IHRvIGRpc3BsYXkgc2Nyb2xsLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgcmVtb3ZlZCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBTY3JvbGwgb2Zmc2V0IHBlcmNlbnRhZ2UgdG8gdHJpZ2dlciBzY3JvbGwgZXZlbnQuICovXG4gICAgQElucHV0KClcbiAgICBzY3JvbGxPZmZzZXRQZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgICAvKiogRWVuYWJsZXMgc2VsZWN0aW9uIHN0eWxlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHNlbGVjdGlvbi4gVHlwZXMgaW5jbHVkZTpcbiAgICAgKiAnbm9uZSd8ICdtdWx0aScgfCAnc2luZ2xlJ3wnZGVsZXRlJy5cbiAgICAgKiBMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoKS4nXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gJ25vbmUnLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uVHlwZSA9ICdub25lJztcblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgcmFkaW8gYnV0dG9uIGFuZCBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByb3cgbGV2ZWwgU2VsZWN0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJvd1NlbGVjdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3Jvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1zZWxlY3Rpb24tcm93Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZWQgJiYgdGhpcy5oYXNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByb3dTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqIERhdGFzb3VyY2UgZm9yIHN1Z2dlc3Rpb24gbGlzdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbHVlOiBGZHBMaXN0RGF0YVNvdXJjZTxUPikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEUyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBMaXN0RGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGVkID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gWydmZC1saXN0LS1uYXZpZ2F0aW9uJ107XG4gICAgICAgIGlmICh0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2ZkLWxpc3QtLW5hdmlnYXRpb24tb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3NMaXN0KTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGVkO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRpb25JbmRpY2F0b3IuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbmF2aWdhdGlvbkluZGljYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1pbmRpY2F0aW9uJyk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdmlnYXRpb25JbmRpY2F0b3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzQnlMaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc0J5TGluZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNCeUxpbmUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1ieWxpbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzQnlMaW5lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQnlMaW5lO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzT2JqZWN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc09iamVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNPYmplY3QgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1vYmplY3QtbGlzdCcpO1xuICAgIH1cblxuICAgIGdldCBoYXNPYmplY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB1bnJlYWQgbm90aWZpY2F0aW9uIGluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVucmVhZEluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaW50ZXJjZXB0IHRhYiBrZXkgbmF2aWdhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGludGVyY2VwdFRhYktleSA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHNlbGVjdGVkIGl0ZW0gaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbUNoYW5nZTogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQWNjZXNzIGNoaWxkIGVsZW1lbnQsIGZvciBjaGVja2luZyBsaW5rIGNvbnRlbnQgKi9cbiAgICBAVmlld0NoaWxkKCdsaW5rJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgYW5jaG9yOiBFbGVtZW50UmVmPEhUTUxMaW5rRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBMaXN0SXRlbURlZikpXG4gICAgbGlzdEl0ZW1EZWY6IExpc3RJdGVtRGVmO1xuXG4gICAgLyoqIExvYWQgTW9yZSBMaXN0IGl0ZW0gY29udGVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlKVxuICAgIGxvYWRNb3JlQ29udGVudDogTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqIENoaWxkIGl0ZW1zIG9mIHRoZSBMaXN0LiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBCYXNlTGlzdEl0ZW0pLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF91bEVsZW1lbnQoKTogTnVsbGFibGU8SFRNTFVMaXN0RWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG8gZGlzcGxheSBsb2FkaW5nIHN5bWJvbFxuICAgICAqL1xuICAgIF9sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGtleU1hbmdlciB0byBoYW5kbGUga2V5Ym9yZCBldmVudHMgdXNlZCBpbiB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIF9rZXlNYW5hZ2VyOiBOdWxsYWJsZTxGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtczogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYXJpYVNldFNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IG5ldyBPYnNlcnZhYmxlKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogTGlzdERhdGFTb3VyY2U8VD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIGlzIHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzQnlMaW5lOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogb25seSBhIHN1YnNldCBvZiB0aGUgbGlzdCBpdGVtcyBhcmUgbmF2aWdhYmxlXG4gICAgICogeW91IHNob3VsZCBpbmRpY2F0ZSB0aG9zZSBieSBkaXNwbGF5aW5nIGEgbmF2aWdhdGlvbiBhcnJvd1xuICAgICAqL1xuICAgIHByaXZhdGUgX25hdmlnYXRpb25JbmRpY2F0b3I6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBvYmplY3QgcHJlc2VudCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYXNPYmplY3Q6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVmVyZmllcyBwYXJ0aWFsIG5hdmlnYXRpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfcGFydGlhbE5hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGUgbW9kZWwgYmFja2luZyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIG11bHRpc2VsZWN0aW9uXG4gICAgICogYmluZGluZyBpbiB0ZW1wYXRlIHRvIGFwcGVuZCBjbGFzc1xuICAgICAqL1xuICAgIHByaXZhdGUgX211bHRpU2VsZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkdmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciByb3cgbGV2ZWwgc2VsZWN0aW9uIG1vZGUgaXMgZW5hYmxlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcm93U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gVG8gc3RvcmUgKi9cbiAgICBwcml2YXRlIF90ZW1wSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGFydEluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNJdGVtczogVFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhbmd1YWdlOiBGZExhbmd1YWdlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZnRlclZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlJDogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnPzogTGlzdENvbmZpZ1xuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICAgICAgdGhpcy5faW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBVcGRhdGUgbmF2Z2lhdGlvbiBzdHlsZXMgZm9yIG5vbiBuYXZpZ2F0ZWQgaXRlbXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqIHNlcHJhdGUgUFIgZm9yIGN1c3RvbSBldmVudFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBfdXBkYXRlTmF2aWdhdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+ID0gJzAnO1xuICAgICAgICBjb25zdCBlbGVtZW50OiBOdWxsYWJsZTxIVE1MRWxlbWVudD4gPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGV2ZW50LnRhcmdldCA6IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQ/LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGlmIChpc1ByZXNlbnQocGFyZW50KSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtSWQgPSBwYXJlbnQ/LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1uYXZpZ2F0ZWQnKTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uX2ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy51cGRhdGVBY3RpdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZWwgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID0gZWwucXVlcnlTZWxlY3RvcignYScpO1xuICAgICAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYScpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2xpJyAmJiAhIWxpbmtFbGVtZW50KSB7XG4gICAgICAgICAgICBsaW5rRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1uYXZpZ2F0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IHNlbGVjdGlvbiBtYW5hZ2VtZW50IHNob3VsZCBiZSBjb21wbGV0ZWx5IGNoYW5nZWQgaHR0cHM6Ly9naXRodWIuY29tL1NBUC9mdW5kYW1lbnRhbC1uZ3gvaXNzdWVzLzgwMDhcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSb3dTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNpbmdsZVNlbGVjdChldmVudCwgc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTXVsdGlTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCBjb250ZXh0IGZvciBsb2FkIG1vcmUgYnV0dG9uICovXG4gICAgZ2V0TG9hZE1vcmVDb250ZW50Q29udGV4dCgpOiBMb2FkTW9yZUNvbnRlbnRDb250ZXh0IHtcbiAgICAgICAgY29uc3QgJGltcGxpY2l0ID0ge1xuICAgICAgICAgICAgbG9hZFRpdGxlOiB0aGlzLmxvYWRUaXRsZSxcbiAgICAgICAgICAgIGxvYWRpbmc6IHRoaXMuX2xvYWRpbmcsXG4gICAgICAgICAgICBsb2FkaW5nTGFiZWw6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlJC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChsYW5ndWFnZSkgPT4gdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKGxhbmd1YWdlLCAncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMubG9hZGluZ0xhYmVsKTtcbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICBsYXN0Q2h1bms6IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX2xhc3RJbmRleFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9kc0l0ZW1zLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0LFxuICAgICAgICAgICAgLi4uJGltcGxpY2l0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBsaXMgY29tcG9uZW50IHdpdGggc2VsZWN0aW9uIG1vZGVcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0SXRlbXMoKTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgdGhpcy5pZCA9IGBmZHAtbGlzdC0ke25leHRMaXN0SWQrK31gO1xuXG4gICAgICAgIC8vIHVzaW5nIHNlbGVjdGlvbiBNb2RlbCBmb3IgbXVsdGlzZWxlY3RcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hcmlhTXVsdGlzZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+KHRoaXMuX211bHRpU2VsZWN0LCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlRXZlbnQoKTtcbiAgICAgICAgICAgIGV2ZW50LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5Ym9hcmQgbWFuYWdlciBvbiBsaXN0IGl0ZW1zLCBzZXQgdmFsdWVzIHdoZW4gcGFzc2VkIHZpYSBhcnJheVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPih0aGlzLmxpc3RJdGVtcykud2l0aFdyYXAoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5saXN0SXRlbXMpLCBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlTGlzdEl0ZW1zKCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtYnVzeS1pbmRpY2F0b3InKTtcbiAgICAgICAgaW5kaWNhdG9yPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGluZSBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICogaW4gdGVtcGxhdGUgb24gbGlzdCBhbmQgbGlzdCBpdGVtc1xuICAgICAqL1xuICAgIF9oYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogTnVsbGFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuX2tleU1hbmFnZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSAmJiAhdGhpcy5pbnRlcmNlcHRUYWJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYmluZGVkIGluIHRlbXBsYXRlIG9uIHNjcm9sbFxuICAgICAqL1xuICAgIF9zY3JvbGxIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmcgJiYgdGhpcy5sb2FkT25TY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbG9hZCBtb3JlIG9uIGVudGVyIG9yIHNwYWNlIHByZXNzXG4gICAgICovXG4gICAgX2xvYWRPbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgbGF6eSBsb2FkaW5nIGRhdGFcbiAgICAgKiB1c2VkIGluIHRlbXBsYXRlXG4gICAgICogb25zY3JvbGwgYW5kIG9uIG1vcmUgYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX2dldE1vcmVEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgb2YodGhpcy5fbG9hZE5ld0l0ZW1zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoYXN5bmMgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmxhbmsoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJz09PUludmFsaWQgUmVzcG9uc2UgcmVjZWl2ZWQ9PT0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdMYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMubG9hZGluZ0xhYmVsLCAnYXNzZXJ0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVsYXkodGhpcy5kZWxheVRpbWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyArK2ksICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNbaV0gPSByZXN1bHRbal07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHVzZWQgaW4gdGVtcGF0ZSB0byBnZXQgU2VsZWN0ZWQgaXRlbXMgZnJvbSBhIGxpc3RcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIF9vblNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldHVwTGlzdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaXRlbS5yb3dTZWxlY3Rpb24gPSB0aGlzLnJvd1NlbGVjdGlvbjtcbiAgICAgICAgaXRlbS5faGFzQnlMaW5lID0gdGhpcy5oYXNCeUxpbmU7XG4gICAgICAgIGl0ZW0uaXRlbVNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RzSXRlbXMubGVuZ3RoICE9PSBudWxsICYmIHRoaXMuaXRlbVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzSXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgTGlzdERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW10gYXMgRGF0YVNvdXJjZVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxMaXN0RGF0YVNvdXJjZTxUPj5zb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCBuZXcgaXRlbXMgd2hlbiBjb21wb25lbnQgaXMgZnVsbHkgaW5pdGlhdGVkIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JWaWV3SW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNJdGVtcyA9IGRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9kc0l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9sb2FkaW5nID0gdHJ1ZSkpKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBpbml0RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBtYXRjaFBhcmFtcyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdsaW1pdCcsIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXRjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbG9hZE5ld0l0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSB0aGlzLl9zdGFydEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5fbGFzdEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fdGVtcEl0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIHJhZGlvIGJ1dHRvbiBzdHlsZXMsIGNoZWNrLCB1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCwgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGNvbnN0IHJhZGlvID0gcGFyZW50ID8gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgOiBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHZhbHVlID0gcmFkaW8gPyAoPEhUTUxJbnB1dEVsZW1lbnQ+cmFkaW8pLnZhbHVlIDogbnVsbDtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW0ucmFkaW9CdXR0b25Db21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGlvblZhbHVlID0gdGhpcy5fc2VsZWN0ZWR2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIC8vIGhhbmRsZXMgbXV0bGkgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IGNoZWNrYm94XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZXMgc2luZ2xlIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCByYWRpb2J1dHRvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9ICcwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCBjaGVja2JveCBzdHlsZXMsY2hlY2ssdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCBgJHshc2VsZWN0fWApO1xuICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHRpbmcgdmFsdWVzIGZyb20gbGlzdCB0byBsaXN0IGl0ZW1zXG4gICAgICogZXhhbXBsZTpcbiAgICAgKiBEb2VzIGxpc3QgaXRlbSBoYXMgbmF2aWdhdGlvbixcbiAgICAgKiBzaG91bGQgc2hvdyBhcnJvd3MsXG4gICAgICogd2lsbCBpdCBiZSBjb21wYWN0IG1vZGUsXG4gICAgICogc2hvdWxkIGJlIGluIHdoaWNoIHNlbGVjdGlvbiBtb2RlXG4gICAgICogc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgZGF0YXNvdXJjZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxpc3RJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZmlyc3QubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FyaWFTZXRTaXplID0gdGhpcy5hcmlhU2V0c2l6ZVxuICAgICAgICAgICAgPyBvZih0aGlzLmFyaWFTZXRzaXplKVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRhU291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyPy5nZXRUb3RhbEl0ZW1zXG4gICAgICAgICAgICA/IHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLmdldFRvdGFsSXRlbXMoKVxuICAgICAgICAgICAgOiBvZih0aGlzLmxpc3RJdGVtcy5sZW5ndGgpO1xuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxOYXZpZ2F0aW9uID0gdGhpcy5saXN0SXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yIHx8IGl0ZW0ubGlzdFR5cGUgPT09ICdkZXRhaWwnKTtcblxuICAgICAgICBsZXQgY3VycmVudEdyb3VwOiBCYXNlTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCB1c2UgaW5kZXggZnJvbSB0aGUgaXRlcmF0aW9uIGR1ZSB0byBwb3NzaWJsZSBncm91cCBpdGVtIGV4aXN0ZW5jZSwgd2UgbmVlZCB0byB0cmFjayBpdCBtYW51YWxseS5cbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGVkID0gdGhpcy5uYXZpZ2F0ZWQ7XG4gICAgICAgICAgICAgICAgaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdGhpcy5uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdFR5cGUgPSB0aGlzLmxpc3RUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgPT09IExJU1RfSVRFTV9UWVBFLkhFQURFUikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBJdGVtSWRzID0gW107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5fdHlwZSAhPT0gTElTVF9JVEVNX1RZUEUuSVRFTSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5hcmlhU2V0U2l6ZSA9IHRoaXMuX2FyaWFTZXRTaXplO1xuXG4gICAgICAgICAgICBpdGVtLmFyaWFQb3NpbnNldCA9ICsraXRlbUluZGV4O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcy5wdXNoKGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLmxpc3RJdGVtcy5sYXN0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwPy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgY3VycmVudEdyb3VwSXRlbUlkcy5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JWaWV3SW5pdDxTb3VyY2VEYXRhVHlwZT4oKSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPik6IE9ic2VydmFibGU8U291cmNlRGF0YVR5cGU+ID0+XG4gICAgICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHNyYykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoYWZ0ZXJWaWV3SW5pdCkgPT4gYWZ0ZXJWaWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gc3JjKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPHVsXG4gICAgZmQtbGlzdFxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbbm9Cb3JkZXJdPVwibm9Cb3JkZXJcIlxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICBbYnlsaW5lXT1cImhhc0J5TGluZVwiXG4gICAgW2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb25dPVwibmF2aWdhdGVkIHx8IG5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIFtuYXZpZ2F0aW9uSW5kaWNhdG9yXT1cIm5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIHN0eWxlPVwib3V0bGluZTogbm9uZVwiXG4gICAgKGtleWRvd24pPVwiX2tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpOyBfaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIl9vblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cIl9hcmlhU2V0U2l6ZSB8IGFzeW5jXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJhcmlhTXVsdGlzZWxlY3RhYmxlXCJcbiAgICBbcm9sZV09XCJyb2xlXCJcbiAgICBbdW5yZWFkSW5kaWNhdG9yXT1cInVucmVhZEluZGljYXRvclwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRNb3JlICYmIGxvYWRPblNjcm9sbFwiPlxuICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmdcIlxuICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmcgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgICAgICBmZEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pbmZpbml0ZS1zY3JvbGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgKG9uU2Nyb2xsQWN0aW9uKT1cIl9zY3JvbGxIYW5kbGVyKClcIlxuICAgICAgICAgICAgICAgIFtzY3JvbGxQZXJjZW50XT1cInNjcm9sbE9mZnNldFBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaXRlbXMubGVuZ3RoICE9PSAwOyB0aGVuIHRoZW5CbG9jazsgZWxzZSBlbHNlQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZE9uU2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIl9pdGVtcy5sZW5ndGggIT09IDA7IHRoZW4gdGhlbkJsb2NrOyBlbHNlIGVsc2VCbG9ja1wiPiA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgICNsaXN0SXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkTW9yZSAmJiAhbG9hZE9uU2Nyb2xsICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfZ2V0TW9yZURhdGEoKVwiXG4gICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgIChrZXlkb3duKT1cIl9sb2FkT25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC1saXN0X19pdGVtLS1jdXN0b20tY29udGVudF09XCJsb2FkTW9yZUNvbnRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pdGVtIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmcgZmQtbGlzdF9faXRlbS0tYWN0aW9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVFbGVtZW50Q29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUVsZW1lbnRDb250ZW50PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZE1vcmVDb250ZW50OyBlbHNlIGRlZmF1bHRDb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVDb250ZW50LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldExvYWRNb3JlQ29udGVudENvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnQ+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgICAgIHt7IGxvYWRUaXRsZSB9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNsb2FkXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjdGhlbkJsb2NrPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2l0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbURlZi50ZW1wbGF0ZVJlZjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxpc3RJdGVtcz8ubGVuZ3RoICYmICFfZmlyc3RMb2FkaW5nRG9uZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0J5TGluZTsgZWxzZSBieWxpbmVMb2FkaW5nXCI+XG4gICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIiB0eXBlPVwidGV4dFwiIHRleHRMaW5lcz1cIjFcIiB3aWR0aD1cIjQwJVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNieWxpbmVMb2FkaW5nPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0OHB4XCIgc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjIwXCIgd2lkdGg9XCIzMCVcIiBoZWlnaHQ9XCI4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -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], span[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", "ariaLabelledBy", "nonFrozenColumnsMinWidth", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed", "cellFocused"] }, { 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", "searchFieldAriaLabel", "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], span[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", "ariaLabelledBy", "nonFrozenColumnsMinWidth", "onlyRenderVisibleCells", "useCellPlaceholder", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "cellActivate", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed", "cellFocused"] }, { 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", "searchFieldAriaLabel", "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" }]
|