@vendure/admin-ui 2.2.5 → 2.2.6
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/LICENSE +9 -0
- package/catalog/components/product-detail/product-detail.component.d.ts +1 -4
- package/catalog/components/product-variant-list/product-variant-list.component.d.ts +1 -1
- package/catalog/providers/product-detail/product-detail.service.d.ts +1 -3
- package/core/common/version.d.ts +1 -1
- package/core/extension/register-data-table-component.d.ts +1 -1
- package/core/extension/register-route-component.d.ts +1 -1
- package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +1 -9
- package/core/shared/components/timeline-entry/timeline-entry.component.d.ts +2 -1
- package/core/shared/dynamic-form-inputs/default-form-inputs.d.ts +1 -1
- package/esm2022/catalog/catalog.module.mjs +1 -1
- package/esm2022/catalog/components/facet-detail/facet-detail.component.mjs +11 -8
- package/esm2022/catalog/components/generate-product-variants/generate-product-variants.component.mjs +2 -1
- package/esm2022/catalog/components/product-detail/product-detail.component.mjs +1 -14
- package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +6 -2
- package/esm2022/catalog/providers/product-detail/product-detail.service.mjs +43 -27
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/extension/register-data-table-component.mjs +2 -2
- package/esm2022/core/shared/components/asset-file-input/asset-file-input.component.mjs +1 -1
- package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +2 -2
- package/esm2022/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.mjs +2 -2
- package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +33 -33
- package/esm2022/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +2 -10
- package/esm2022/core/shared/components/timeline-entry/timeline-entry.component.mjs +5 -3
- package/esm2022/core/shared/components/zone-selector/zone-selector.component.mjs +13 -13
- package/esm2022/customer/components/customer-history/customer-history-entry-host.component.mjs +1 -1
- package/esm2022/customer/components/customer-history/customer-history.component.mjs +3 -3
- package/esm2022/customer/customer.routes.mjs +2 -2
- package/esm2022/marketing/marketing.module.mjs +1 -1
- package/esm2022/order/components/order-history/order-history-entry-host.component.mjs +1 -1
- package/esm2022/order/components/order-history/order-history.component.mjs +3 -3
- package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +8 -8
- package/fesm2022/vendure-admin-ui-catalog.mjs +58 -47
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +55 -61
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-customer.mjs +4 -4
- package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs +3 -3
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-settings.mjs +7 -7
- package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
- package/marketing/components/promotion-list/promotion-list.component.d.ts +1 -1
- package/package.json +18 -18
package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs
CHANGED
|
@@ -61,6 +61,7 @@ export class ProductOptionsEditorComponent extends BaseDetailComponent {
|
|
|
61
61
|
combineLatest(this.entity$, this.languageCode$, $product)
|
|
62
62
|
.pipe(take(1), mergeMap(([{ optionGroups }, languageCode, product]) => {
|
|
63
63
|
const updateOperations = [];
|
|
64
|
+
const updatedProductOptionInputs = [];
|
|
64
65
|
for (const optionGroupForm of this.getOptionGroups()) {
|
|
65
66
|
if (optionGroupForm.dirty) {
|
|
66
67
|
const optionGroupEntity = optionGroups.find(og => og.id === optionGroupForm.value.id);
|
|
@@ -76,11 +77,14 @@ export class ProductOptionsEditorComponent extends BaseDetailComponent {
|
|
|
76
77
|
?.options.find(o => o.id === optionForm.value.id);
|
|
77
78
|
if (optionGroup) {
|
|
78
79
|
const input = this.getUpdatedOption(optionGroup, optionForm, languageCode);
|
|
79
|
-
|
|
80
|
+
updatedProductOptionInputs.push(input);
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
}
|
|
85
|
+
if (updatedProductOptionInputs.length) {
|
|
86
|
+
updateOperations.push(this.productDetailService.updateProductOptions(updatedProductOptionInputs, this.autoUpdateVariantNames, product, languageCode));
|
|
87
|
+
}
|
|
84
88
|
return forkJoin(updateOperations);
|
|
85
89
|
}))
|
|
86
90
|
.subscribe(() => {
|
|
@@ -200,4 +204,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
200
204
|
type: Component,
|
|
201
205
|
args: [{ selector: 'vdr-product-options-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\r\n [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\r\n (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\" id=\"custom-fields\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"] }]
|
|
202
206
|
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ServerConfigService }, { type: i2.DataService }, { type: i2.PermissionsService }, { type: i3.ProductDetailService }, { type: i4.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.NotificationService }] });
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FRYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxtQkFBdUM7SUFXdEYsWUFDYyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQ3hCLGtCQUFzQyxFQUN4QyxvQkFBMEMsRUFDMUMsV0FBK0IsRUFDL0IsY0FBaUMsRUFDakMsbUJBQXdDO1FBRWhELEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLFdB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Q0FBQztJQUN0QixDQUFDOzhHQWhRUSw2QkFBNkI7a0dBQTdCLDZCQUE2Qix5RkNuQzFDLHlpUEFzSUE7OzJGRG5HYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIEN1c3RvbUZpZWxkQ29uZmlnLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBHZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBQZXJtaXNzaW9uLFxyXG4gICAgUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgUHJvZHVjdE9wdGlvbkZyYWdtZW50LFxyXG4gICAgUHJvZHVjdE9wdGlvbkdyb3VwRnJhZ21lbnQsXHJcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgVHJhbnNsYXRpb25PZixcclxuICAgIFVwZGF0ZVByb2R1Y3RPcHRpb25Hcm91cElucHV0LFxyXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlJztcclxuXHJcbnR5cGUgUHJvZHVjdFdpdGhPcHRpb25zID0gTm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnlbJ3Byb2R1Y3QnXT47XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLXByb2R1Y3Qtb3B0aW9ucy1lZGl0b3InLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0T3B0aW9uc0VkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8UHJvZHVjdFdpdGhPcHRpb25zPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBkZXRhaWxGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gICAgb3B0aW9uR3JvdXBzJDogT2JzZXJ2YWJsZTxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddPjtcclxuICAgIGxhbmd1YWdlQ29kZSQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlPjtcclxuICAgIGF2YWlsYWJsZUxhbmd1YWdlcyQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlW10+O1xyXG4gICAgb3B0aW9uR3JvdXBDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBvcHRpb25DdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBhdXRvVXBkYXRlVmFyaWFudE5hbWVzID0gdHJ1ZTtcclxuICAgIHBhZ2luYXRpb25TZXR0aW5nczogeyBbZ3JvdXBJZDogc3RyaW5nXTogeyBjdXJyZW50UGFnZTogbnVtYmVyOyBpdGVtc1BlclBhZ2U6IG51bWJlciB9IH0gPSB7fTtcclxuICAgIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb24gPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByb3RlY3RlZCBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdERldGFpbFNlcnZpY2U6IFByb2R1Y3REZXRhaWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihyb3V0ZSwgcm91dGVyLCBzZXJ2ZXJDb25maWdTZXJ2aWNlLCBkYXRhU2VydmljZSwgcGVybWlzc2lvbnNTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbkdyb3VwJyk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25DdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25Hcm91cHMkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmVudGl0eS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHByb2R1Y3Q6IFByb2R1Y3RXaXRoT3B0aW9ucykgPT4gcHJvZHVjdC5vcHRpb25Hcm91cHMpLFxyXG4gICAgICAgICAgICB0YXAoKG9wdGlvbkdyb3VwczogUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBvcHRpb25Hcm91cHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXR0aW5nc1tncm91cC5pZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1BlclBhZ2U6IDEwLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBvcHRpb25Hcm91cHM6IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9uR3JvdXBzKCk6IFVudHlwZWRGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJyk7XHJcbiAgICAgICAgcmV0dXJuIChvcHRpb25Hcm91cHMgYXMgVW50eXBlZEZvcm1BcnJheSkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wdGlvbnMob3B0aW9uR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBVbnR5cGVkRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHRpb25Hcm91cC5nZXQoJ29wdGlvbnMnKTtcclxuICAgICAgICByZXR1cm4gKG9wdGlvbnMgYXMgVW50eXBlZEZvcm1BcnJheSkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsRm9ybS5pbnZhbGlkIHx8IHRoaXMuZGV0YWlsRm9ybS5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgJHByb2R1Y3QgPSB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuZ2V0UHJvZHVjdCh0aGlzLmlkKS5tYXBTaW5nbGUoZGF0YSA9PiBkYXRhLnByb2R1Y3QhKTtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkLCAkcHJvZHVjdClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFt7IG9wdGlvbkdyb3VwcyB9LCBsYW5ndWFnZUNvZGUsIHByb2R1Y3RdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlT3BlcmF0aW9uczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uR3JvdXBGb3JtIG9mIHRoaXMuZ2V0T3B0aW9uR3JvdXBzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBFbnRpdHkgPSBvcHRpb25Hcm91cHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZyA9PiBvZy5pZCA9PT0gb3B0aW9uR3JvdXBGb3JtLnZhbHVlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cEVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwRW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cEZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnVwZGF0ZVByb2R1Y3RPcHRpb25Hcm91cChpbnB1dCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb25Gb3JtIG9mIHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25Hcm91cEZvcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwID0gb3B0aW9uR3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKG9nID0+IG9nLmlkID09PSBvcHRpb25Hcm91cEZvcm0udmFsdWUuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ub3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uRm9ybS52YWx1ZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkT3B0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Gb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3REZXRhaWxTZXJ2aWNlLnVwZGF0ZVByb2R1Y3RPcHRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAuLi5pbnB1dCwgYXV0b1VwZGF0ZTogdGhpcy5hdXRvVXBkYXRlVmFyaWFudE5hbWVzIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4odXBkYXRlT3BlcmF0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RPcHRpb25Hcm91cCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRPcHRpb25Hcm91cChcclxuICAgICAgICBvcHRpb25Hcm91cDogUHJvZHVjdE9wdGlvbkdyb3VwRnJhZ21lbnQsXHJcbiAgICAgICAgb3B0aW9uR3JvdXBGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBJbnB1dCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBvcHRpb25Hcm91cCxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogb3B0aW9uR3JvdXBGb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogb3B0aW9uR3JvdXAubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uKFxyXG4gICAgICAgIG9wdGlvbjogUHJvZHVjdE9wdGlvbkZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBvcHRpb24sXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMub3B0aW9uQ3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zLCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGdyb3Vwc0Zvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdvcHRpb25Hcm91cHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uR3JvdXAgb2YgZW50aXR5Lm9wdGlvbkdyb3Vwcykge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKG9wdGlvbkdyb3VwLCBsYW5ndWFnZUNvZGUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBGb3JtID0gdGhpcy5zZXRPcHRpb25Hcm91cEZvcm0ob3B0aW9uR3JvdXAsIGdyb3Vwc0Zvcm0sIGdyb3VwVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcywgZ3JvdXBGb3JtLCBvcHRpb25Hcm91cCwgZ3JvdXBUcmFuc2xhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9uc0Zvcm0gPSBncm91cEZvcm0uZ2V0KCdvcHRpb25zJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uc0Zvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwRm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgb3B0aW9uc0Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbkdyb3VwLm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvblRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKG9wdGlvbiwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkZvcm0gPSB0aGlzLnNldE9wdGlvbkZvcm0ob3B0aW9uLCBvcHRpb25zRm9ybSwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRzRm9ybSh0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcywgb3B0aW9uRm9ybSwgb3B0aW9uLCBvcHRpb25UcmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldEN1c3RvbUZpZWxkc0Zvcm08XHJcbiAgICAgICAgVCBleHRlbmRzIFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF0gfCBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICA+KFxyXG4gICAgICAgIGN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXSxcclxuICAgICAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgZW50aXR5OiBULFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8VD4sXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCA9IGZvcm1Hcm91cC5nZXQoWydjdXN0b21GaWVsZHMnXSk7XHJcbiAgICAgICAgICAgIGlmICghY3VzdG9tVmFsdWVGaWVsZHNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbCgnY3VzdG9tRmllbGRzJywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoY3VzdG9tRmllbGRzLCBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLCBlbnRpdHksIGN1cnJlbnRUcmFuc2xhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRPcHRpb25Hcm91cEZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdLFxyXG4gICAgICAgIGdyb3Vwc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdPixcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0ge1xyXG4gICAgICAgICAgICBpZDogZW50aXR5LmlkLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IGVudGl0eS5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogZW50aXR5LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgY29kZTogZW50aXR5LmNvZGUsXHJcbiAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbj8ubmFtZSA/PyAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBncm91cEZvcm0gPSBncm91cHNGb3JtLmNvbnRyb2xzLmZpbmQoY29udHJvbCA9PiBjb250cm9sLnZhbHVlLmlkID09PSBlbnRpdHkuaWQpIGFzXHJcbiAgICAgICAgICAgIHwgVW50eXBlZEZvcm1Hcm91cFxyXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoZ3JvdXBGb3JtKSB7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZShncm91cC5jb2RlKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnbmFtZScpPy5zZXRWYWx1ZShncm91cC5uYW1lKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ3VwZGF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC51cGRhdGVkQXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xyXG4gICAgICAgICAgICBncm91cHNGb3JtLnB1c2goZ3JvdXBGb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwRm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uRm9ybShcclxuICAgICAgICBlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF1bJ29wdGlvbnMnXVswXSxcclxuICAgICAgICBvcHRpb25zRm9ybTogVW50eXBlZEZvcm1BcnJheSxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF1bJ29wdGlvbnMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgb3B0aW9uRm9ybSA9IG9wdGlvbnNGb3JtLmNvbnRyb2xzLmZpbmQoY29udHJvbCA9PiBjb250cm9sLnZhbHVlLmlkID09PSBlbnRpdHkuaWQpIGFzXHJcbiAgICAgICAgICAgIHwgVW50eXBlZEZvcm1Hcm91cFxyXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAob3B0aW9uRm9ybSkge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnaWQnKT8uc2V0VmFsdWUoZ3JvdXAuaWQpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZShncm91cC5jb2RlKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCdjcmVhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAuY3JlYXRlZEF0KTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ3VwZGF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC51cGRhdGVkQXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgb3B0aW9uc0Zvcm0ucHVzaChvcHRpb25Gb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbkZvcm07XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWhlYWRlcj5cclxuICAgIDx2ZHItcGFnZS10aXRsZT48L3Zkci1wYWdlLXRpdGxlPlxyXG4gICAgPHZkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj57eyAnY2F0YWxvZy5wYWdlLWRlc2NyaXB0aW9uLW9wdGlvbnMtZWRpdG9yJyB8IHRyYW5zbGF0ZSB9fTwvdmRyLXBhZ2UtaGVhZGVyLWRlc2NyaXB0aW9uPlxyXG48L3Zkci1wYWdlLWhlYWRlcj5cclxuPHZkci1wYWdlLWJvZHk+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgICAgICA8dmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYXV0by11cGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXV0b1VwZGF0ZVZhcmlhbnROYW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjYXRhbG9nLmF1dG8tdXBkYXRlLXByb2R1Y3QtdmFyaWFudC1uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5wcmlzdGluZSB8fCBkZXRhaWxGb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgPC92ZHItYWN0aW9uLWJhcj5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCIgKm5nSWY9XCJvcHRpb25Hcm91cHMkIHwgYXN5bmMgYXMgb3B0aW9uR3JvdXBzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cIm9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbkdyb3VwIG9mIGdldE9wdGlvbkdyb3VwcygpOyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUFycmF5TmFtZV09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwib3B0aW9uR3JvdXAudmFsdWUuY29kZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvIFtlbnRpdHldPVwib3B0aW9uR3JvdXAudmFsdWVcIj48L3Zkci1wYWdlLWVudGl0eS1pbmZvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIiduYW1lLScgKyBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIGZvcj1cImNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInY29kZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT1cImN1c3RvbUZpZWxkc1wiICpuZ0lmPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJQcm9kdWN0T3B0aW9uR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJvcHRpb25Hcm91cEN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9wdGlvbkdyb3VwLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRhdGEtdGFibGUtMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImVkaXQtb3B0aW9ucy1saXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRPcHRpb25zKG9wdGlvbkdyb3VwKSBhcyBvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cInBhZ2luYXRpb25TZXR0aW5nc1tvcHRpb25Hcm91cC52YWx1ZS5pZF0/Lml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdPy5jdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2luYXRpb25TZXR0aW5nc1tvcHRpb25Hcm91cC52YWx1ZS5pZF0uY3VycmVudFBhZ2UgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJvcHRpb25zLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5pZCcgfCB0cmFuc2xhdGVcIiBpZD1cImlkXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5pZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBpZD1cImNyZWF0ZWQtYXRcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiIGlkPVwidXBkYXRlZC1hdFwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUudXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgaWQ9XCJuYW1lXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIGlkPVwiY29kZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnY29kZScpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiIGlkPVwiY3VzdG9tLWZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cIm9wdGlvbkN1c3RvbUZpZWxkcy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRhdGEtdGFibGUtMj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbjwvdmRyLXBhZ2UtYm9keT5cclxuIl19
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FRYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxtQkFBdUM7SUFXdEYsWUFDYyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQ3hCLGtCQUFzQyxFQUN4QyxvQkFBMEMsRUFDMUMsV0FBK0IsRUFDL0IsY0FBaUMsRUFDakMsbUJBQXdDO1FBRWhELEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLFdB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QyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7OEdBclFRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlGQ25DMUMseWlQQXNJQTs7MkZEbkdhLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDSSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICBQcm9kdWN0T3B0aW9uRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0T3B0aW9uR3JvdXBGcmFnbWVudCxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBUcmFuc2xhdGlvbk9mLFxyXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFByb2R1Y3REZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLnNlcnZpY2UnO1xyXG5cclxudHlwZSBQcm9kdWN0V2l0aE9wdGlvbnMgPSBOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeVsncHJvZHVjdCddPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC1vcHRpb25zLWVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RPcHRpb25zRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxQcm9kdWN0V2l0aE9wdGlvbnM+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGRldGFpbEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgICBvcHRpb25Hcm91cHMkOiBPYnNlcnZhYmxlPFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ10+O1xyXG4gICAgbGFuZ3VhZ2VDb2RlJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGU+O1xyXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGVbXT47XHJcbiAgICBvcHRpb25Hcm91cEN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIG9wdGlvbkN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIGF1dG9VcGRhdGVWYXJpYW50TmFtZXMgPSB0cnVlO1xyXG4gICAgcGFnaW5hdGlvblNldHRpbmdzOiB7IFtncm91cElkOiBzdHJpbmddOiB7IGN1cnJlbnRQYWdlOiBudW1iZXI7IGl0ZW1zUGVyUGFnZTogbnVtYmVyIH0gfSA9IHt9O1xyXG4gICAgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbiA9IFtQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2csIFBlcm1pc3Npb24uVXBkYXRlUHJvZHVjdF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlLCBwZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uR3JvdXAnKTtcclxuICAgICAgICB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb24nKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9wdGlvbkdyb3VwcyQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZW50aXR5LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgocHJvZHVjdDogUHJvZHVjdFdpdGhPcHRpb25zKSA9PiBwcm9kdWN0Lm9wdGlvbkdyb3VwcyksXHJcbiAgICAgICAgICAgIHRhcCgob3B0aW9uR3JvdXBzOiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIG9wdGlvbkdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNldHRpbmdzW2dyb3VwLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZTogMTAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIG9wdGlvbkdyb3VwczogbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcHRpb25Hcm91cHMoKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcclxuICAgICAgICBjb25zdCBvcHRpb25Hcm91cHMgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdvcHRpb25Hcm91cHMnKTtcclxuICAgICAgICByZXR1cm4gKG9wdGlvbkdyb3VwcyBhcyBVbnR5cGVkRm9ybUFycmF5KS5jb250cm9scyBhcyBVbnR5cGVkRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9ucyhvcHRpb25Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFVudHlwZWRGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbkdyb3VwLmdldCgnb3B0aW9ucycpO1xyXG4gICAgICAgIHJldHVybiAob3B0aW9ucyBhcyBVbnR5cGVkRm9ybUFycmF5KS5jb250cm9scyBhcyBVbnR5cGVkRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5kZXRhaWxGb3JtLmludmFsaWQgfHwgdGhpcy5kZXRhaWxGb3JtLnByaXN0aW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBjb25zdCAkcHJvZHVjdCA9IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5nZXRQcm9kdWN0KHRoaXMuaWQpLm1hcFNpbmdsZShkYXRhID0+IGRhdGEucHJvZHVjdCEpO1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQsICRwcm9kdWN0KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3sgb3B0aW9uR3JvdXBzIH0sIGxhbmd1YWdlQ29kZSwgcHJvZHVjdF0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVPcGVyYXRpb25zOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHM6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dFtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb25Hcm91cEZvcm0gb2YgdGhpcy5nZXRPcHRpb25Hcm91cHMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXBGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Hcm91cEVudGl0eSA9IG9wdGlvbkdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9nID0+IG9nLmlkID09PSBvcHRpb25Hcm91cEZvcm0udmFsdWUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwRW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRPcHRpb25Hcm91cChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBFbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QudXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwKGlucHV0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkZvcm0gb2YgdGhpcy5nZXRPcHRpb25zKG9wdGlvbkdyb3VwRm9ybSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Gb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQob2cgPT4gb2cuaWQgPT09IG9wdGlvbkdyb3VwRm9ybS52YWx1ZS5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5vcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBvcHRpb25Gb3JtLnZhbHVlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRPcHRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQcm9kdWN0T3B0aW9uSW5wdXRzLnB1c2goaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UudXBkYXRlUHJvZHVjdE9wdGlvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRlVmFyaWFudE5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbkdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgb3B0aW9uR3JvdXA6IFByb2R1Y3RPcHRpb25Hcm91cEZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkdyb3VwRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkdyb3VwRm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbkdyb3VwLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZE9wdGlvbihcclxuICAgICAgICBvcHRpb246IFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgICAgICBvcHRpb25Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uLFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBvcHRpb25Gb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9ucywgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cHNGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwIG9mIGVudGl0eS5vcHRpb25Hcm91cHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb25Hcm91cCwgbGFuZ3VhZ2VDb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRm9ybSA9IHRoaXMuc2V0T3B0aW9uR3JvdXBGb3JtKG9wdGlvbkdyb3VwLCBncm91cHNGb3JtLCBncm91cFRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZHNGb3JtKHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMsIGdyb3VwRm9ybSwgb3B0aW9uR3JvdXAsIGdyb3VwVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbnNGb3JtID0gZ3JvdXBGb3JtLmdldCgnb3B0aW9ucycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9uc0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cEZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIG9wdGlvbnNGb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25Hcm91cC5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25UcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb24sIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Gb3JtID0gdGhpcy5zZXRPcHRpb25Gb3JtKG9wdGlvbiwgb3B0aW9uc0Zvcm0sIG9wdGlvblRyYW5zbGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25DdXN0b21GaWVsZHMsIG9wdGlvbkZvcm0sIG9wdGlvbiwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRDdXN0b21GaWVsZHNGb3JtPFxyXG4gICAgICAgIFQgZXh0ZW5kcyBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdIHwgUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXVsnb3B0aW9ucyddWzBdLFxyXG4gICAgPihcclxuICAgICAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW10sXHJcbiAgICAgICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGVudGl0eTogVCxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFQ+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBmb3JtR3JvdXAuZ2V0KFsnY3VzdG9tRmllbGRzJ10pO1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbVZhbHVlRmllbGRzR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKGN1c3RvbUZpZWxkcywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCwgZW50aXR5LCBjdXJyZW50VHJhbnNsYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uR3JvdXBGb3JtKFxyXG4gICAgICAgIGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXSxcclxuICAgICAgICBncm91cHNGb3JtOiBVbnR5cGVkRm9ybUFycmF5LFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8UHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZ3JvdXBGb3JtID0gZ3JvdXBzRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGdyb3VwRm9ybSkge1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCdpZCcpPy5zZXRWYWx1ZShncm91cC5pZCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NyZWF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBncm91cEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgZ3JvdXBzRm9ybS5wdXNoKGdyb3VwRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBncm91cEZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldE9wdGlvbkZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICAgICAgb3B0aW9uc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB7XHJcbiAgICAgICAgICAgIGlkOiBlbnRpdHkuaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZW50aXR5LmNyZWF0ZWRBdCxcclxuICAgICAgICAgICAgdXBkYXRlZEF0OiBlbnRpdHkudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICBjb2RlOiBlbnRpdHkuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uPy5uYW1lID8/ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG9wdGlvbkZvcm0gPSBvcHRpb25zRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKG9wdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCduYW1lJyk/LnNldFZhbHVlKGdyb3VwLm5hbWUpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNGb3JtLnB1c2gob3B0aW9uRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25Gb3JtO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1oZWFkZXI+XHJcbiAgICA8dmRyLXBhZ2UtdGl0bGU+PC92ZHItcGFnZS10aXRsZT5cclxuICAgIDx2ZHItcGFnZS1oZWFkZXItZGVzY3JpcHRpb24+e3sgJ2NhdGFsb2cucGFnZS1kZXNjcmlwdGlvbi1vcHRpb25zLWVkaXRvcicgfCB0cmFuc2xhdGUgfX08L3Zkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj5cclxuPC92ZHItcGFnZS1oZWFkZXI+XHJcbjx2ZHItcGFnZS1ib2R5PlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF1dG9VcGRhdGVWYXJpYW50TmFtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5hdXRvLXVwZGF0ZS1wcm9kdWN0LXZhcmlhbnQtbmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0ucHJpc3RpbmUgfHwgZGV0YWlsRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiICpuZ0lmPVwib3B0aW9uR3JvdXBzJCB8IGFzeW5jIGFzIG9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJvcHRpb25Hcm91cHNcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBnZXRPcHRpb25Hcm91cHMoKTsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1BcnJheU5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbkdyb3VwLnZhbHVlLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyBbZW50aXR5XT1cIm9wdGlvbkdyb3VwLnZhbHVlXCI+PC92ZHItcGFnZS1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInbmFtZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJjb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2NvZGUtJyArIGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9XCJjdXN0b21GaWVsZHNcIiAqbmdJZj1cIm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvbkdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJvcHRpb25Hcm91cC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlZGl0LW9wdGlvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0T3B0aW9ucyhvcHRpb25Hcm91cCkgYXMgb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdPy5pdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwicGFnaW5hdGlvblNldHRpbmdzW29wdGlvbkdyb3VwLnZhbHVlLmlkXT8uY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdLmN1cnJlbnRQYWdlID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwib3B0aW9ucy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJpZFwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUuaWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJjcmVhdGVkLWF0XCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5jcmVhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBpZD1cInVwZGF0ZWQtYXRcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLnVwZGF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGlkPVwibmFtZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnbmFtZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBpZD1cImNvZGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbZm9ybUNvbnRyb2xdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2NvZGUnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGVcIiBpZD1cImN1c3RvbS1maWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJvcHRpb25DdXN0b21GaWVsZHMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RPcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cIm9wdGlvbkN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCdjdXN0b21GaWVsZHMnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kYXRhLXRhYmxlLTI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG48L3Zkci1wYWdlLWJvZHk+XHJcbiJdfQ==
|
|
@@ -153,49 +153,65 @@ export class ProductDetailService {
|
|
|
153
153
|
return forkJoin(updateOperations);
|
|
154
154
|
}));
|
|
155
155
|
}
|
|
156
|
-
|
|
157
|
-
const variants$ =
|
|
156
|
+
updateProductOptions(inputs, autoUpdateProductNames, product, languageCode) {
|
|
157
|
+
const variants$ = autoUpdateProductNames
|
|
158
158
|
? this.dataService.product
|
|
159
159
|
.getProductVariantsForProduct({}, product.id)
|
|
160
160
|
.mapSingle(({ productVariants }) => productVariants.items)
|
|
161
161
|
: of([]);
|
|
162
162
|
return variants$.pipe(mergeMap(variants => {
|
|
163
163
|
let updateProductVariantNames$ = of([]);
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
164
|
+
if (autoUpdateProductNames) {
|
|
165
|
+
const replacementMap = new Map();
|
|
166
|
+
for (const input of inputs) {
|
|
167
|
+
const newOptionName = findTranslation(input, languageCode)?.name;
|
|
168
|
+
let oldOptionName;
|
|
169
|
+
for (const variant of variants) {
|
|
170
|
+
if (oldOptionName) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (variant.options.map(o => o.id).includes(input.id)) {
|
|
174
|
+
if (!oldOptionName) {
|
|
175
|
+
oldOptionName = findTranslation(variant.options.find(o => o.id === input.id), languageCode)?.name;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (oldOptionName && newOptionName) {
|
|
180
|
+
replacementMap.set(oldOptionName, newOptionName);
|
|
181
|
+
}
|
|
170
182
|
}
|
|
171
183
|
const variantsToUpdate = [];
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
184
|
+
if (replacementMap.size) {
|
|
185
|
+
const oldOptionNames = Array.from(replacementMap.keys());
|
|
186
|
+
for (const variant of variants) {
|
|
187
|
+
const variantName = findTranslation(variant, languageCode)?.name;
|
|
188
|
+
if (!variantName) {
|
|
189
|
+
continue;
|
|
176
190
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
variantsToUpdate.push({
|
|
180
|
-
id: variant.id,
|
|
181
|
-
translations: [
|
|
182
|
-
{
|
|
183
|
-
languageCode,
|
|
184
|
-
name: replaceLast(variantName, oldOptionName, newOptionName),
|
|
185
|
-
},
|
|
186
|
-
],
|
|
187
|
-
});
|
|
191
|
+
if (!oldOptionNames.some(oldOptionName => variantName.includes(oldOptionName))) {
|
|
192
|
+
continue;
|
|
188
193
|
}
|
|
194
|
+
const updatedVariantName = oldOptionNames.reduce((name, oldOptionName) => replaceLast(name, oldOptionName, replacementMap.get(oldOptionName)), variantName);
|
|
195
|
+
variantsToUpdate.push({
|
|
196
|
+
id: variant.id,
|
|
197
|
+
translations: [
|
|
198
|
+
{
|
|
199
|
+
languageCode,
|
|
200
|
+
name: updatedVariantName,
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
});
|
|
189
204
|
}
|
|
190
205
|
}
|
|
191
206
|
if (variantsToUpdate.length) {
|
|
192
207
|
updateProductVariantNames$ =
|
|
193
208
|
this.dataService.product.updateProductVariants(variantsToUpdate);
|
|
194
209
|
}
|
|
210
|
+
else {
|
|
211
|
+
updateProductVariantNames$ = of([]);
|
|
212
|
+
}
|
|
195
213
|
}
|
|
196
|
-
return this.dataService.product
|
|
197
|
-
.updateProductOption(input)
|
|
198
|
-
.pipe(mergeMap(() => updateProductVariantNames$));
|
|
214
|
+
return forkJoin(inputs.map(input => this.dataService.product.updateProductOption(input))).pipe(mergeMap(() => updateProductVariantNames$));
|
|
199
215
|
}));
|
|
200
216
|
}
|
|
201
217
|
deleteProductVariant(id, productId) {
|
|
@@ -217,4 +233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
217
233
|
providedIn: 'root',
|
|
218
234
|
}]
|
|
219
235
|
}], ctorParameters: () => [{ type: i1.DataService }] });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvcHJvdmlkZXJzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBSUgsY0FBYyxFQUVkLGVBQWUsR0FTbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUU3Qzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTthQUMzQixnQkFBZ0IsRUFBRTthQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzthQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELHlCQUF5QixDQUNyQixLQUF5QixFQUN6QixvQkFBaUQsRUFDakQsWUFBMEI7UUFFMUIsTUFBTSxjQUFjLEdBQUcsSUFB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QUFDO2dCQUNoRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OEdBbFFRLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBDcmVhdGVQcm9kdWN0SW5wdXQsXHJcbiAgICBDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0LFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBEZWxldGlvblJlc3VsdCxcclxuICAgIEZhY2V0V2l0aFZhbHVlc0ZyYWdtZW50LFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgR2V0UHJvZHVjdERldGFpbFF1ZXJ5LFxyXG4gICAgR2V0UHJvZHVjdFdpdGhWYXJpYW50c1F1ZXJ5LFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgVXBkYXRlUHJvZHVjdElucHV0LFxyXG4gICAgVXBkYXRlUHJvZHVjdE11dGF0aW9uLFxyXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0LFxyXG4gICAgVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uLFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3JlYXRlUHJvZHVjdFZhcmlhbnRzQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzL2dlbmVyYXRlLXByb2R1Y3QtdmFyaWFudHMuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IHJlcGxhY2VMYXN0IH0gZnJvbSAnLi9yZXBsYWNlLWxhc3QnO1xyXG5cclxuLyoqXHJcbiAqIEhhbmRsZXMgdGhlIGxvZ2ljIGZvciBtYWtpbmcgdGhlIEFQSSBjYWxscyB0byBwZXJmb3JtIENSVUQgb3BlcmF0aW9ucyBvbiBhIFByb2R1Y3QgYW5kIGl0cyByZWxhdGVkXHJcbiAqIGVudGl0aWVzLiBUaGlzIGxvZ2ljIHdhcyBleHRyYWN0ZWQgb3V0IG9mIHRoZSBjb21wb25lbnQgYmVjYXVzZSBpdCBiZWNhbWUgdG9vIGxhcmdlIGFuZCBoYXJkIHRvIGZvbGxvdy5cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGdldFRheENhdGVnb3JpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3NcclxuICAgICAgICAgICAgLmdldFRheENhdGVnb3JpZXMoKVxyXG4gICAgICAgICAgICAubWFwU2luZ2xlKGRhdGEgPT4gZGF0YS50YXhDYXRlZ29yaWVzLml0ZW1zKVxyXG4gICAgICAgICAgICAucGlwZShzaGFyZVJlcGxheSgxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUHJvZHVjdFdpdGhWYXJpYW50cyhcclxuICAgICAgICBpbnB1dDogQ3JlYXRlUHJvZHVjdElucHV0LFxyXG4gICAgICAgIGNyZWF0ZVZhcmlhbnRzQ29uZmlnOiBDcmVhdGVQcm9kdWN0VmFyaWFudHNDb25maWcsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBjcmVhdGVQcm9kdWN0JCA9IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5jcmVhdGVQcm9kdWN0KGlucHV0KTtcclxuICAgICAgICBjb25zdCBub25FbXB0eU9wdGlvbkdyb3VwcyA9IGNyZWF0ZVZhcmlhbnRzQ29uZmlnLmdyb3Vwcy5maWx0ZXIoZyA9PiAwIDwgZy52YWx1ZXMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBjcmVhdGVPcHRpb25Hcm91cHMkID0gdGhpcy5jcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXBzKG5vbkVtcHR5T3B0aW9uR3JvdXBzLCBsYW5ndWFnZUNvZGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oY3JlYXRlUHJvZHVjdCQsIGNyZWF0ZU9wdGlvbkdyb3VwcyQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKChbeyBjcmVhdGVQcm9kdWN0IH0sIG9wdGlvbkdyb3Vwc10pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFkZE9wdGlvbnNUb1Byb2R1Y3QkID0gb3B0aW9uR3JvdXBzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gZm9ya0pvaW4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBzLm1hcChvcHRpb25Hcm91cCA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuYWRkT3B0aW9uR3JvdXBUb1Byb2R1Y3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkOiBjcmVhdGVQcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBJZDogb3B0aW9uR3JvdXAuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBvZihbXSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkT3B0aW9uc1RvUHJvZHVjdCQucGlwZShtYXAoKCkgPT4gKHsgY3JlYXRlUHJvZHVjdCwgb3B0aW9uR3JvdXBzIH0pKSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBtZXJnZU1hcCgoeyBjcmVhdGVQcm9kdWN0LCBvcHRpb25Hcm91cHMgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudHMgPSBjcmVhdGVWYXJpYW50c0NvbmZpZy52YXJpYW50cy5tYXAodiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWRzID0gb3B0aW9uR3JvdXBzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHYub3B0aW9uVmFsdWVzLm1hcCgob3B0aW9uTmFtZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uR3JvdXBzW2luZGV4XS5vcHRpb25zLmZpbmQobyA9PiBvLm5hbWUgPT09IG9wdGlvbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIFByb2R1Y3RPcHRpb24gXCIke29wdGlvbk5hbWV9XCIgd2hlbiBjcmVhdGluZyB2YXJpYW50YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbklkcyxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0aW9uR3JvdXBzLm1hcChvZyA9PiBvZy5vcHRpb25zKS5yZWR1Y2UoKGZsYXQsIG8pID0+IFsuLi5mbGF0LCAuLi5vXSwgW10pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUHJvZHVjdFZhcmlhbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlVmFyaWFudHNDb25maWcuc3RvY2tMb2NhdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXBzKGdyb3VwczogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfT4sIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIGdyb3Vwcy5sZW5ndGhcclxuICAgICAgICAgICAgPyBmb3JrSm9pbihcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBzLm1hcChjID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlUHJvZHVjdE9wdGlvbkdyb3Vwcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IG5vcm1hbGl6ZVN0cmluZyhjLm5hbWUsICctJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW3sgbGFuZ3VhZ2VDb2RlLCBuYW1lOiBjLm5hbWUgfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGMudmFsdWVzLm1hcCh2ID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBub3JtYWxpemVTdHJpbmcodiwgJy0nKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW3sgbGFuZ3VhZ2VDb2RlLCBuYW1lOiB2IH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXAoZGF0YSA9PiBkYXRhLmNyZWF0ZVByb2R1Y3RPcHRpb25Hcm91cCkpLFxyXG4gICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBvZihbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUHJvZHVjdFZhcmlhbnRzKFxyXG4gICAgICAgIHByb2R1Y3Q6IHsgbmFtZTogc3RyaW5nOyBpZDogc3RyaW5nIH0sXHJcbiAgICAgICAgdmFyaWFudERhdGE6IEFycmF5PHsgcHJpY2U6IG51bWJlcjsgc2t1OiBzdHJpbmc7IHN0b2NrOiBudW1iZXI7IG9wdGlvbklkczogc3RyaW5nW10gfT4sXHJcbiAgICAgICAgb3B0aW9uczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBzdHJpbmcsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCB2YXJpYW50czogQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dFtdID0gdmFyaWFudERhdGEubWFwKHYgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5sZW5ndGhcclxuICAgICAgICAgICAgICAgID8gYCR7cHJvZHVjdC5uYW1lfSAke3Yub3B0aW9uSWRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKGlkID0+IG9wdGlvbnMuZmluZChvID0+IG8uaWQgPT09IGlkKSlcclxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcChvID0+IG8ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyl9YFxyXG4gICAgICAgICAgICAgICAgOiBwcm9kdWN0Lm5hbWU7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0SWQ6IHByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogdi5wcmljZSxcclxuICAgICAgICAgICAgICAgIHNrdTogdi5za3UsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIHN0b2NrTGV2ZWxzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xvY2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrT25IYW5kOiB2LnN0b2NrLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9uSWRzOiB2Lm9wdGlvbklkcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LmNyZWF0ZVByb2R1Y3RWYXJpYW50cyh2YXJpYW50cykucGlwZShcclxuICAgICAgICAgICAgbWFwKCh7IGNyZWF0ZVByb2R1Y3RWYXJpYW50cyB9KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlUHJvZHVjdFZhcmlhbnRzLFxyXG4gICAgICAgICAgICAgICAgcHJvZHVjdElkOiBwcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICB9KSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQcm9kdWN0KHVwZGF0ZU9wdGlvbnM6IHtcclxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0RGV0YWlsUXVlcnlbJ3Byb2R1Y3QnXT47XHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGU7XHJcbiAgICAgICAgYXV0b1VwZGF0ZTogYm9vbGVhbjtcclxuICAgICAgICBwcm9kdWN0SW5wdXQ/OiBVcGRhdGVQcm9kdWN0SW5wdXQ7XHJcbiAgICAgICAgdmFyaWFudHNJbnB1dD86IFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXRbXTtcclxuICAgIH0pIHtcclxuICAgICAgICBjb25zdCB7IHByb2R1Y3QsIGxhbmd1YWdlQ29kZSwgYXV0b1VwZGF0ZSwgcHJvZHVjdElucHV0LCB2YXJpYW50c0lucHV0IH0gPSB1cGRhdGVPcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZU9wZXJhdGlvbnM6IEFycmF5PE9ic2VydmFibGU8VXBkYXRlUHJvZHVjdE11dGF0aW9uIHwgVXBkYXRlUHJvZHVjdFZhcmlhbnRzTXV0YXRpb24+PiA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZVZhcmlhbnRzSW5wdXQgPSB2YXJpYW50c0lucHV0IHx8IFtdO1xyXG5cclxuICAgICAgICBjb25zdCB2YXJpYW50cyQgPSBhdXRvVXBkYXRlXHJcbiAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgIC5nZXRQcm9kdWN0VmFyaWFudHNGb3JQcm9kdWN0KHt9LCBwcm9kdWN0LmlkKVxyXG4gICAgICAgICAgICAgICAgICAubWFwU2luZ2xlKCh7IHByb2R1Y3RWYXJpYW50cyB9KSA9PiBwcm9kdWN0VmFyaWFudHMuaXRlbXMpXHJcbiAgICAgICAgICAgIDogb2YoW10pO1xyXG5cclxuICAgICAgICByZXR1cm4gdmFyaWFudHMkLnBpcGUoXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKHZhcmlhbnRzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2godGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnVwZGF0ZVByb2R1Y3QocHJvZHVjdElucHV0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdE9sZE5hbWUgPSBmaW5kVHJhbnNsYXRpb24ocHJvZHVjdCwgbGFuZ3VhZ2VDb2RlKT8ubmFtZSA/PyAnJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0TmV3TmFtZSA9IGZpbmRUcmFuc2xhdGlvbihwcm9kdWN0SW5wdXQsIGxhbmd1YWdlQ29kZSk/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3ROZXdOYW1lICYmIHByb2R1Y3RPbGROYW1lICE9PSBwcm9kdWN0TmV3TmFtZSAmJiBhdXRvVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiB2YXJpYW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhcmlhbnROYW1lID0gZmluZFRyYW5zbGF0aW9uKHZhcmlhbnQsIGxhbmd1YWdlQ29kZSk/Lm5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFyaWFudElucHV0OiBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWYXJpYW50SW5wdXQgPSB1cGRhdGVWYXJpYW50c0lucHV0LmZpbmQoaSA9PiBpLmlkID09PSB2YXJpYW50LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1ZhcmlhbnRJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRJbnB1dCA9IGV4aXN0aW5nVmFyaWFudElucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50SW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2YXJpYW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFt7IGxhbmd1YWdlQ29kZSwgbmFtZTogY3VycmVudFZhcmlhbnROYW1lIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFyaWFudHNJbnB1dC5wdXNoKHZhcmlhbnRJbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50VHJhbnNsYXRpb24gPSBmaW5kVHJhbnNsYXRpb24odmFyaWFudElucHV0LCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRUcmFuc2xhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50VHJhbnNsYXRpb24ubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50VHJhbnNsYXRpb24ubmFtZSA9IHJlcGxhY2VMYXN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFRyYW5zbGF0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0T2xkTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3ROZXdOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50IHRyYW5zbGF0aW9uIHdhcyBmYWxzeSwgd2hpY2ggb2NjdXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZGVmaW5pbmcgdGhlIHByb2R1Y3QgbmFtZSBmb3IgYSBuZXcgdHJhbnNsYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2UgdGhhdCBoYWQgbm90IHlldCBiZWVuIGRlZmluZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRUcmFuc2xhdGlvbi5uYW1lID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdE5ld05hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52YXJpYW50Lm9wdGlvbnMubWFwKG8gPT4gby5uYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5qb2luKCcgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVZhcmlhbnRzSW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QudXBkYXRlUHJvZHVjdFZhcmlhbnRzKHVwZGF0ZVZhcmlhbnRzSW5wdXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4odXBkYXRlT3BlcmF0aW9ucyk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJvZHVjdE9wdGlvbihcclxuICAgICAgICBpbnB1dDogVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0ICYgeyBhdXRvVXBkYXRlOiBib29sZWFuIH0sXHJcbiAgICAgICAgcHJvZHVjdDogTm9uTnVsbGFibGU8R2V0UHJvZHVjdERldGFpbFF1ZXJ5Wydwcm9kdWN0J10+LFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudHMkID0gaW5wdXQuYXV0b1VwZGF0ZVxyXG4gICAgICAgICAgICA/IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAuZ2V0UHJvZHVjdFZhcmlhbnRzRm9yUHJvZHVjdCh7fSwgcHJvZHVjdC5pZClcclxuICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoeyBwcm9kdWN0VmFyaWFudHMgfSkgPT4gcHJvZHVjdFZhcmlhbnRzLml0ZW1zKVxyXG4gICAgICAgICAgICA6IG9mKFtdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzJC5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZU1hcCh2YXJpYW50cyA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXBkYXRlUHJvZHVjdFZhcmlhbnROYW1lcyQ6IE9ic2VydmFibGU8YW55PiA9IG9mKFtdKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5hdXRvVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGFueSBQcm9kdWN0VmFyaWFudHMnIG5hbWVzIHdoaWNoIGluY2x1ZGUgdGhlIG9wdGlvbiBuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9sZE9wdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb25OYW1lID0gZmluZFRyYW5zbGF0aW9uKGlucHV0LCBsYW5ndWFnZUNvZGUpPy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3T3B0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcm9kdWN0VmFyaWFudE5hbWVzJCA9IG9mKFtdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudHNUb1VwZGF0ZTogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dFtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9wdGlvbnMubWFwKG8gPT4gby5pZCkuaW5jbHVkZXMoaW5wdXQuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9sZE9wdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRPcHRpb25OYW1lID0gZmluZFRyYW5zbGF0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9wdGlvbnMuZmluZChvID0+IG8uaWQgPT09IGlucHV0LmlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50TmFtZSA9IGZpbmRUcmFuc2xhdGlvbih2YXJpYW50LCBsYW5ndWFnZUNvZGUpPy5uYW1lIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZE9wdGlvbk5hbWUgJiYgbmV3T3B0aW9uTmFtZSAmJiB2YXJpYW50TmFtZS5pbmNsdWRlcyhvbGRPcHRpb25OYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzVG9VcGRhdGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2YXJpYW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVwbGFjZUxhc3QodmFyaWFudE5hbWUsIG9sZE9wdGlvbk5hbWUsIG5ld09wdGlvbk5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudHNUb1VwZGF0ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvZHVjdFZhcmlhbnROYW1lcyQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnVwZGF0ZVByb2R1Y3RWYXJpYW50cyh2YXJpYW50c1RvVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZVByb2R1Y3RPcHRpb24oaW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWVyZ2VNYXAoKCkgPT4gdXBkYXRlUHJvZHVjdFZhcmlhbnROYW1lcyQpKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQcm9kdWN0VmFyaWFudChpZDogc3RyaW5nLCBwcm9kdWN0SWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuZGVsZXRlUHJvZHVjdFZhcmlhbnQoaWQpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kZWxldGVQcm9kdWN0VmFyaWFudC5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LmdldFByb2R1Y3QocHJvZHVjdElkKS5zaW5nbGUkO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihyZXN1bHQuZGVsZXRlUHJvZHVjdFZhcmlhbnQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvcHJvdmlkZXJzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBSUgsY0FBYyxFQUVkLGVBQWUsR0FTbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUU3Qzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTthQUMzQixnQkFBZ0IsRUFBRTthQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzthQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELHlCQUF5QixDQUNyQixLQUF5QixFQUN6QixvQkFBaUQsRUFDakQsWUFBMEI7UUFFMUIsTUFBTSxjQUFjLEdBQUcsSUFB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OzsyRkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgQ3JlYXRlUHJvZHVjdElucHV0LFxyXG4gICAgQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRGVsZXRpb25SZXN1bHQsXHJcbiAgICBGYWNldFdpdGhWYWx1ZXNGcmFnbWVudCxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIEdldFByb2R1Y3REZXRhaWxRdWVyeSxcclxuICAgIEdldFByb2R1Y3RXaXRoVmFyaWFudHNRdWVyeSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIFVwZGF0ZVByb2R1Y3RJbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RNdXRhdGlvbixcclxuICAgIFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0VmFyaWFudHNNdXRhdGlvbixcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9ub3JtYWxpemUtc3RyaW5nJztcclxuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENyZWF0ZVByb2R1Y3RWYXJpYW50c0NvbmZpZyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZ2VuZXJhdGUtcHJvZHVjdC12YXJpYW50cy9nZW5lcmF0ZS1wcm9kdWN0LXZhcmlhbnRzLmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyByZXBsYWNlTGFzdCB9IGZyb20gJy4vcmVwbGFjZS1sYXN0JztcclxuXHJcbi8qKlxyXG4gKiBIYW5kbGVzIHRoZSBsb2dpYyBmb3IgbWFraW5nIHRoZSBBUEkgY2FsbHMgdG8gcGVyZm9ybSBDUlVEIG9wZXJhdGlvbnMgb24gYSBQcm9kdWN0IGFuZCBpdHMgcmVsYXRlZFxyXG4gKiBlbnRpdGllcy4gVGhpcyBsb2dpYyB3YXMgZXh0cmFjdGVkIG91dCBvZiB0aGUgY29tcG9uZW50IGJlY2F1c2UgaXQgYmVjYW1lIHRvbyBsYXJnZSBhbmQgaGFyZCB0byBmb2xsb3cuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge31cclxuXHJcbiAgICBnZXRUYXhDYXRlZ29yaWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnNldHRpbmdzXHJcbiAgICAgICAgICAgIC5nZXRUYXhDYXRlZ29yaWVzKClcclxuICAgICAgICAgICAgLm1hcFNpbmdsZShkYXRhID0+IGRhdGEudGF4Q2F0ZWdvcmllcy5pdGVtcylcclxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVByb2R1Y3RXaXRoVmFyaWFudHMoXHJcbiAgICAgICAgaW5wdXQ6IENyZWF0ZVByb2R1Y3RJbnB1dCxcclxuICAgICAgICBjcmVhdGVWYXJpYW50c0NvbmZpZzogQ3JlYXRlUHJvZHVjdFZhcmlhbnRzQ29uZmlnLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgY3JlYXRlUHJvZHVjdCQgPSB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuY3JlYXRlUHJvZHVjdChpbnB1dCk7XHJcbiAgICAgICAgY29uc3Qgbm9uRW1wdHlPcHRpb25Hcm91cHMgPSBjcmVhdGVWYXJpYW50c0NvbmZpZy5ncm91cHMuZmlsdGVyKGcgPT4gMCA8IGcudmFsdWVzLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgY3JlYXRlT3B0aW9uR3JvdXBzJCA9IHRoaXMuY3JlYXRlUHJvZHVjdE9wdGlvbkdyb3Vwcyhub25FbXB0eU9wdGlvbkdyb3VwcywgbGFuZ3VhZ2VDb2RlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKGNyZWF0ZVByb2R1Y3QkLCBjcmVhdGVPcHRpb25Hcm91cHMkKS5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZU1hcCgoW3sgY3JlYXRlUHJvZHVjdCB9LCBvcHRpb25Hcm91cHNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRPcHRpb25zVG9Qcm9kdWN0JCA9IG9wdGlvbkdyb3Vwcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICA/IGZvcmtKb2luKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3Vwcy5tYXAob3B0aW9uR3JvdXAgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LmFkZE9wdGlvbkdyb3VwVG9Qcm9kdWN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJZDogY3JlYXRlUHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwSWQ6IG9wdGlvbkdyb3VwLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIDogb2YoW10pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZE9wdGlvbnNUb1Byb2R1Y3QkLnBpcGUobWFwKCgpID0+ICh7IGNyZWF0ZVByb2R1Y3QsIG9wdGlvbkdyb3VwcyB9KSkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbWVyZ2VNYXAoKHsgY3JlYXRlUHJvZHVjdCwgb3B0aW9uR3JvdXBzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRzID0gY3JlYXRlVmFyaWFudHNDb25maWcudmFyaWFudHMubWFwKHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkcyA9IG9wdGlvbkdyb3Vwcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2Lm9wdGlvblZhbHVlcy5tYXAoKG9wdGlvbk5hbWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkdyb3Vwc1tpbmRleF0ub3B0aW9ucy5maW5kKG8gPT4gby5uYW1lID09PSBvcHRpb25OYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyBQcm9kdWN0T3B0aW9uIFwiJHtvcHRpb25OYW1lfVwiIHdoZW4gY3JlYXRpbmcgdmFyaWFudGAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb24uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25JZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbkdyb3Vwcy5tYXAob2cgPT4gb2cub3B0aW9ucykucmVkdWNlKChmbGF0LCBvKSA9PiBbLi4uZmxhdCwgLi4ub10sIFtdKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVByb2R1Y3RWYXJpYW50cyhcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVZhcmlhbnRzQ29uZmlnLnN0b2NrTG9jYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlUHJvZHVjdE9wdGlvbkdyb3Vwcyhncm91cHM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH0+LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIHJldHVybiBncm91cHMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gZm9ya0pvaW4oXHJcbiAgICAgICAgICAgICAgICAgIGdyb3Vwcy5tYXAoYyA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZVByb2R1Y3RPcHRpb25Hcm91cHMoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBub3JtYWxpemVTdHJpbmcoYy5uYW1lLCAnLScpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFt7IGxhbmd1YWdlQ29kZSwgbmFtZTogYy5uYW1lIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBjLnZhbHVlcy5tYXAodiA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogbm9ybWFsaXplU3RyaW5nKHYsICctJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFt7IGxhbmd1YWdlQ29kZSwgbmFtZTogdiB9XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKGRhdGEgPT4gZGF0YS5jcmVhdGVQcm9kdWN0T3B0aW9uR3JvdXApKSxcclxuICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogb2YoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVByb2R1Y3RWYXJpYW50cyhcclxuICAgICAgICBwcm9kdWN0OiB7IG5hbWU6IHN0cmluZzsgaWQ6IHN0cmluZyB9LFxyXG4gICAgICAgIHZhcmlhbnREYXRhOiBBcnJheTx7IHByaWNlOiBudW1iZXI7IHNrdTogc3RyaW5nOyBzdG9jazogbnVtYmVyOyBvcHRpb25JZHM6IHN0cmluZ1tdIH0+LFxyXG4gICAgICAgIG9wdGlvbnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+LFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgIHN0b2NrTG9jYXRpb25JZDogc3RyaW5nLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudHM6IENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXRbXSA9IHZhcmlhbnREYXRhLm1hcCh2ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IG9wdGlvbnMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IGAke3Byb2R1Y3QubmFtZX0gJHt2Lm9wdGlvbklkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcChpZCA9PiBvcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBpZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAobyA9PiBvLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAuam9pbignICcpfWBcclxuICAgICAgICAgICAgICAgIDogcHJvZHVjdC5uYW1lO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdElkOiBwcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHYucHJpY2UsXHJcbiAgICAgICAgICAgICAgICBza3U6IHYuc2t1LFxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBzdG9ja0xldmVsczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogdi5zdG9jayxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbklkczogdi5vcHRpb25JZHMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5jcmVhdGVQcm9kdWN0VmFyaWFudHModmFyaWFudHMpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoeyBjcmVhdGVQcm9kdWN0VmFyaWFudHMgfSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZVByb2R1Y3RWYXJpYW50cyxcclxuICAgICAgICAgICAgICAgIHByb2R1Y3RJZDogcHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJvZHVjdCh1cGRhdGVPcHRpb25zOiB7XHJcbiAgICAgICAgcHJvZHVjdDogTm9uTnVsbGFibGU8R2V0UHJvZHVjdERldGFpbFF1ZXJ5Wydwcm9kdWN0J10+O1xyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlO1xyXG4gICAgICAgIGF1dG9VcGRhdGU6IGJvb2xlYW47XHJcbiAgICAgICAgcHJvZHVjdElucHV0PzogVXBkYXRlUHJvZHVjdElucHV0O1xyXG4gICAgICAgIHZhcmlhbnRzSW5wdXQ/OiBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0W107XHJcbiAgICB9KSB7XHJcbiAgICAgICAgY29uc3QgeyBwcm9kdWN0LCBsYW5ndWFnZUNvZGUsIGF1dG9VcGRhdGUsIHByb2R1Y3RJbnB1dCwgdmFyaWFudHNJbnB1dCB9ID0gdXBkYXRlT3B0aW9ucztcclxuICAgICAgICBjb25zdCB1cGRhdGVPcGVyYXRpb25zOiBBcnJheTxPYnNlcnZhYmxlPFVwZGF0ZVByb2R1Y3RNdXRhdGlvbiB8IFVwZGF0ZVByb2R1Y3RWYXJpYW50c011dGF0aW9uPj4gPSBbXTtcclxuICAgICAgICBjb25zdCB1cGRhdGVWYXJpYW50c0lucHV0ID0gdmFyaWFudHNJbnB1dCB8fCBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgdmFyaWFudHMkID0gYXV0b1VwZGF0ZVxyXG4gICAgICAgICAgICA/IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdFxyXG4gICAgICAgICAgICAgICAgICAuZ2V0UHJvZHVjdFZhcmlhbnRzRm9yUHJvZHVjdCh7fSwgcHJvZHVjdC5pZClcclxuICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoeyBwcm9kdWN0VmFyaWFudHMgfSkgPT4gcHJvZHVjdFZhcmlhbnRzLml0ZW1zKVxyXG4gICAgICAgICAgICA6IG9mKFtdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZhcmlhbnRzJC5waXBlKFxyXG4gICAgICAgICAgICBtZXJnZU1hcCh2YXJpYW50cyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjdElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC51cGRhdGVQcm9kdWN0KHByb2R1Y3RJbnB1dCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPbGROYW1lID0gZmluZFRyYW5zbGF0aW9uKHByb2R1Y3QsIGxhbmd1YWdlQ29kZSk/Lm5hbWUgPz8gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdE5ld05hbWUgPSBmaW5kVHJhbnNsYXRpb24ocHJvZHVjdElucHV0LCBsYW5ndWFnZUNvZGUpPy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0TmV3TmFtZSAmJiBwcm9kdWN0T2xkTmFtZSAhPT0gcHJvZHVjdE5ld05hbWUgJiYgYXV0b1VwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdmFyaWFudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYXJpYW50TmFtZSA9IGZpbmRUcmFuc2xhdGlvbih2YXJpYW50LCBsYW5ndWFnZUNvZGUpPy5uYW1lIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhcmlhbnRJbnB1dDogVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nVmFyaWFudElucHV0ID0gdXBkYXRlVmFyaWFudHNJbnB1dC5maW5kKGkgPT4gaS5pZCA9PT0gdmFyaWFudC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdWYXJpYW50SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50SW5wdXQgPSBleGlzdGluZ1ZhcmlhbnRJbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudElucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdmFyaWFudC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBbeyBsYW5ndWFnZUNvZGUsIG5hbWU6IGN1cnJlbnRWYXJpYW50TmFtZSB9XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhcmlhbnRzSW5wdXQucHVzaCh2YXJpYW50SW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhcmlhbnRJbnB1dCwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50VHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudFRyYW5zbGF0aW9uLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFRyYW5zbGF0aW9uLm5hbWUgPSByZXBsYWNlTGFzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRUcmFuc2xhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdE9sZE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TmV3TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmFyaWFudCB0cmFuc2xhdGlvbiB3YXMgZmFsc3ksIHdoaWNoIG9jY3Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGRlZmluaW5nIHRoZSBwcm9kdWN0IG5hbWUgZm9yIGEgbmV3IHRyYW5zbGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlIHRoYXQgaGFkIG5vdCB5ZXQgYmVlbiBkZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50VHJhbnNsYXRpb24ubmFtZSA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3ROZXdOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFyaWFudC5vcHRpb25zLm1hcChvID0+IG8ubmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uam9pbignICcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVWYXJpYW50c0lucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnVwZGF0ZVByb2R1Y3RWYXJpYW50cyh1cGRhdGVWYXJpYW50c0lucHV0KSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByb2R1Y3RPcHRpb25zKFxyXG4gICAgICAgIGlucHV0czogVXBkYXRlUHJvZHVjdE9wdGlvbklucHV0W10sXHJcbiAgICAgICAgYXV0b1VwZGF0ZVByb2R1Y3ROYW1lczogYm9vbGVhbixcclxuICAgICAgICBwcm9kdWN0OiBOb25OdWxsYWJsZTxHZXRQcm9kdWN0RGV0YWlsUXVlcnlbJ3Byb2R1Y3QnXT4sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCB2YXJpYW50cyQgPSBhdXRvVXBkYXRlUHJvZHVjdE5hbWVzXHJcbiAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgIC5nZXRQcm9kdWN0VmFyaWFudHNGb3JQcm9kdWN0KHt9LCBwcm9kdWN0LmlkKVxyXG4gICAgICAgICAgICAgICAgICAubWFwU2luZ2xlKCh7IHByb2R1Y3RWYXJpYW50cyB9KSA9PiBwcm9kdWN0VmFyaWFudHMuaXRlbXMpXHJcbiAgICAgICAgICAgIDogb2YoW10pO1xyXG5cclxuICAgICAgICByZXR1cm4gdmFyaWFudHMkLnBpcGUoXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKHZhcmlhbnRzID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB1cGRhdGVQcm9kdWN0VmFyaWFudE5hbWVzJDogT2JzZXJ2YWJsZTxhbnk+ID0gb2YoW10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dG9VcGRhdGVQcm9kdWN0TmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbk5hbWUgPSBmaW5kVHJhbnNsYXRpb24oaW5wdXQsIGxhbmd1YWdlQ29kZSk/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbGRPcHRpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiB2YXJpYW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZE9wdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9wdGlvbnMubWFwKG8gPT4gby5pZCkuaW5jbHVkZXMoaW5wdXQuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvbGRPcHRpb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZE9wdGlvbk5hbWUgPSBmaW5kVHJhbnNsYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9wdGlvbnMuZmluZChvID0+IG8uaWQgPT09IGlucHV0LmlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT8ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZE9wdGlvbk5hbWUgJiYgbmV3T3B0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRNYXAuc2V0KG9sZE9wdGlvbk5hbWUsIG5ld09wdGlvbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50c1RvVXBkYXRlOiBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0W10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRNYXAuc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRPcHRpb25OYW1lcyA9IEFycmF5LmZyb20ocmVwbGFjZW1lbnRNYXAua2V5cygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50TmFtZSA9IGZpbmRUcmFuc2xhdGlvbih2YXJpYW50LCBsYW5ndWFnZUNvZGUpPy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvbGRPcHRpb25OYW1lcy5zb21lKG9sZE9wdGlvbk5hbWUgPT4gdmFyaWFudE5hbWUuaW5jbHVkZXMob2xkT3B0aW9uTmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmFyaWFudE5hbWUgPSBvbGRPcHRpb25OYW1lcy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG9sZE9wdGlvbk5hbWUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VMYXN0KG5hbWUsIG9sZE9wdGlvbk5hbWUsIHJlcGxhY2VtZW50TWFwLmdldChvbGRPcHRpb25OYW1lKSEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzVG9VcGRhdGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHZhcmlhbnQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHVwZGF0ZWRWYXJpYW50TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRzVG9VcGRhdGUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVByb2R1Y3RWYXJpYW50TmFtZXMkID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC51cGRhdGVQcm9kdWN0VmFyaWFudHModmFyaWFudHNUb1VwZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvZHVjdFZhcmlhbnROYW1lcyQgPSBvZihbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKFxyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0cy5tYXAoaW5wdXQgPT4gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnVwZGF0ZVByb2R1Y3RPcHRpb24oaW5wdXQpKSxcclxuICAgICAgICAgICAgICAgICkucGlwZShtZXJnZU1hcCgoKSA9PiB1cGRhdGVQcm9kdWN0VmFyaWFudE5hbWVzJCkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVByb2R1Y3RWYXJpYW50KGlkOiBzdHJpbmcsIHByb2R1Y3RJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5kZWxldGVQcm9kdWN0VmFyaWFudChpZCkucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRlbGV0ZVByb2R1Y3RWYXJpYW50LnJlc3VsdCA9PT0gRGVsZXRpb25SZXN1bHQuREVMRVRFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuZ2V0UHJvZHVjdChwcm9kdWN0SWQpLnNpbmdsZSQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHJlc3VsdC5kZWxldGVQcm9kdWN0VmFyaWFudC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Auto-generated by the set-version.js script.
|
|
2
|
-
export const ADMIN_UI_VERSION = '2.2.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const ADMIN_UI_VERSION = '2.2.6';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvY29tbW9uL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEF1dG8tZ2VuZXJhdGVkIGJ5IHRoZSBzZXQtdmVyc2lvbi5qcyBzY3JpcHQuXG5leHBvcnQgY29uc3QgQURNSU5fVUlfVkVSU0lPTiA9ICcyLjIuNic7XG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { DataTableCustomComponentService, } from '../shared/components/data-tabl
|
|
|
3
3
|
/**
|
|
4
4
|
* @description
|
|
5
5
|
* Allows you to override the default component used to render the data of a particular column in a DataTable.
|
|
6
|
-
* The component should implement the {@link
|
|
6
|
+
* The component should implement the {@link CustomColumnComponent} interface. The tableId and columnId can
|
|
7
7
|
* be determined by pressing `ctrl + u` when running the Admin UI in dev mode.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
@@ -48,4 +48,4 @@ export function registerDataTableComponent(config) {
|
|
|
48
48
|
deps: [DataTableCustomComponentService],
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZGF0YS10YWJsZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL2V4dGVuc2lvbi9yZWdpc3Rlci1kYXRhLXRhYmxlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFFSCwrQkFBK0IsR0FDbEMsTUFBTSx1RUFBdUUsQ0FBQztBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxNQUFnQztJQUN2RSxPQUFPO1FBQ0gsT0FBTyxFQUFFLGVBQWU7UUFDeEIsS0FBSyxFQUFFLElBQUk7UUFDWCxVQUFVLEVBQUUsQ0FBQywrQkFBZ0UsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ25GLCtCQUErQixDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztLQUMxQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBEYXRhVGFibGVDb21wb25lbnRDb25maWcsXG4gICAgRGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZSxcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvZGF0YS10YWJsZS0yL2RhdGEtdGFibGUtY3VzdG9tLWNvbXBvbmVudC5zZXJ2aWNlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIHRoZSBkYXRhIG9mIGEgcGFydGljdWxhciBjb2x1bW4gaW4gYSBEYXRhVGFibGUuXG4gKiBUaGUgY29tcG9uZW50IHNob3VsZCBpbXBsZW1lbnQgdGhlIHtAbGluayBDdXN0b21Db2x1bW5Db21wb25lbnR9IGludGVyZmFjZS4gVGhlIHRhYmxlSWQgYW5kIGNvbHVtbklkIGNhblxuICogYmUgZGV0ZXJtaW5lZCBieSBwcmVzc2luZyBgY3RybCArIHVgIHdoZW4gcnVubmluZyB0aGUgQWRtaW4gVUkgaW4gZGV2IG1vZGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzIHRpdGxlPVwiY29tcG9uZW50cy9jdXN0b20tdGFibGUuY29tcG9uZW50LnRzXCJcbiAqIGltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdcXEBhbmd1bGFyL2NvcmUnO1xuICogaW1wb3J0IHsgQ3VzdG9tQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnXFxAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcbiAqXG4gKiBcXEBDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnY3VzdG9tLXNsdWctY29tcG9uZW50JyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgICA8YSBbaHJlZl09XCInaHR0cHM6Ly9leGFtcGxlLmNvbS9wcm9kdWN0cy8nICsgcm93SXRlbS5zbHVnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3sgcm93SXRlbS5zbHVnIH19PC9hPlxuICogICAgIGAsXG4gKiAgICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQ3VzdG9tVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBDdXN0b21Db2x1bW5Db21wb25lbnQge1xuICogICAgIFxcQElucHV0KCkgcm93SXRlbTogYW55O1xuICogfVxuICogYGBgXG4gKlxuICogYGBgdHMgdGl0bGU9XCJwcm92aWRlcnMudHNcIlxuICogaW1wb3J0IHsgcmVnaXN0ZXJEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICdcXEB2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xuICogaW1wb3J0IHsgQ3VzdG9tVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3VzdG9tLXRhYmxlLmNvbXBvbmVudCc7XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgW1xuICogICAgIHJlZ2lzdGVyRGF0YVRhYmxlQ29tcG9uZW50KHtcbiAqICAgICAgICAgY29tcG9uZW50OiBDdXN0b21UYWJsZUNvbXBvbmVudCxcbiAqICAgICAgICAgdGFibGVJZDogJ3Byb2R1Y3QtbGlzdCcsXG4gKiAgICAgICAgIGNvbHVtbklkOiAnc2x1ZycsXG4gKiAgICAgfSksXG4gKiBdO1xuICogYGBgXG4gKlxuICogQGRvY3NDYXRlZ29yeSBjdXN0b20tdGFibGUtY29tcG9uZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEYXRhVGFibGVDb21wb25lbnQoY29uZmlnOiBEYXRhVGFibGVDb21wb25lbnRDb25maWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB1c2VGYWN0b3J5OiAoZGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZTogRGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZSkgPT4gKCkgPT4ge1xuICAgICAgICAgICAgZGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudChjb25maWcpO1xuICAgICAgICB9LFxuICAgICAgICBkZXBzOiBbRGF0YVRhYmxlQ3VzdG9tQ29tcG9uZW50U2VydmljZV0sXG4gICAgfTtcbn1cbiJdfQ==
|
|
@@ -94,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
94
94
|
type: HostListener,
|
|
95
95
|
args: ['document:dragleave', ['$event']]
|
|
96
96
|
}] } });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2Fzc2V0LWZpbGUtaW5wdXQvYXNzZXQtZmlsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2Fzc2V0LWZpbGUtaW5wdXQvYXNzZXQtZmlsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7QUFJdEU7O0dBRUc7QUFPSCxNQUFNLE9BQU8sdUJBQXVCO0lBa0JoQyxZQUFvQixZQUFpQztRQUFqQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFqQnJEOzs7V0FHRztRQUNNLG1CQUFjLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ25ELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsa0JBQWEsR0FBRztZQUNaLFVBQVUsRUFBRSxDQUFDO1lBQ2IsV0FBVyxFQUFFLENBQUM7WUFDZCxRQUFRLEVBQUUsQ0FBQztZQUNYLFNBQVMsRUFBRSxDQUFDO1NBQ2YsQ0FBQztJQUdzRCxDQUFDO0lBRXpELFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBR0QsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxrR0FBa0c7SUFFbEcsV0FBVyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsS0FBVTtRQUNqQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGtHQUFrRztJQUNsRyxNQUFNLENBQUMsS0FBVTtRQUNiLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFtQixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3pGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUN2QixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVk7UUFDZixNQUFNLEtBQUssR0FBSSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLENBQUM7UUFDdkQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQWdCLENBQUM7UUFDMUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQzs4R0ExRVEsdUJBQXVCO2tHQUF2Qix1QkFBdUIsd1JDdEJwQyxpbUNBMkJBOzsyRkRMYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksc0JBQXNCLG1CQUdmLHVCQUF1QixDQUFDLE1BQU07d0ZBT3RDLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQW1CUCxXQUFXO3NCQURWLFlBQVk7dUJBQUMsb0JBQW9CO2dCQVFsQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgU2VydmVyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEvc2VydmVyLWNvbmZpZyc7XHJcblxyXG4vKipcclxuICogQSBjb21wb25lbnQgZm9yIHNlbGVjdGluZyBmaWxlcyB0byB1cGxvYWQgYXMgbmV3IEFzc2V0cy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItYXNzZXQtZmlsZS1pbnB1dCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXNzZXQtZmlsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hc3NldC1maWxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzc2V0RmlsZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIC8qKlxyXG4gICAgICogQ1NTIHNlbGVjdG9yIG9mIHRoZSBET00gZWxlbWVudCB3aGljaCB3aWxsIGJlIG1hc2tlZCBieSB0aGUgZmlsZVxyXG4gICAgICogZHJvcCB6b25lLiBEZWZhdWx0cyB0byBgYm9keWAuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGRyb3Bab25lVGFyZ2V0ID0gJ2JvZHknO1xyXG4gICAgQElucHV0KCkgdXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICBAT3V0cHV0KCkgc2VsZWN0RmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVbXT4oKTtcclxuICAgIGRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBvdmVyRHJvcFpvbmUgPSBmYWxzZTtcclxuICAgIGRyb3Bab25lU3R5bGUgPSB7XHJcbiAgICAgICAgJ3dpZHRoLnB4JzogMCxcclxuICAgICAgICAnaGVpZ2h0LnB4JzogMCxcclxuICAgICAgICAndG9wLnB4JzogMCxcclxuICAgICAgICAnbGVmdC5weCc6IDAsXHJcbiAgICB9O1xyXG4gICAgYWNjZXB0OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2ZXJDb25maWc6IFNlcnZlckNvbmZpZ1NlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hY2NlcHQgPSB0aGlzLnNlcnZlckNvbmZpZy5zZXJ2ZXJDb25maWcucGVybWl0dGVkQXNzZXRUeXBlcy5qb2luKCcsJyk7XHJcbiAgICAgICAgdGhpcy5maXREcm9wWm9uZVRvVGFyZ2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6ZHJhZ2VudGVyJylcclxuICAgIG9uRHJhZ0VudGVyKCkge1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZml0RHJvcFpvbmVUb1RhcmdldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERyYWdFdmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFNhZmFyaSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92ZW5kdXJlLWVjb21tZXJjZS92ZW5kdXJlL3B1bGwvMjg0XHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpkcmFnbGVhdmUnLCBbJyRldmVudCddKVxyXG4gICAgb25EcmFnTGVhdmUoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICghZXZlbnQuY2xpZW50WCAmJiAhZXZlbnQuY2xpZW50WSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJldmVudGluZyB0aGlzIGV2ZW50IGlzIHJlcXVpcmVkIHRvIG1ha2UgZHJvcHBpbmcgd29yay5cclxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSSNEZWZpbmVfYV9kcm9wX3pvbmVcclxuICAgICAqL1xyXG4gICAgb25EcmFnT3ZlcihldmVudDogYW55KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEcmFnRXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBTYWZhcmksIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmVuZHVyZS1lY29tbWVyY2UvdmVuZHVyZS9wdWxsLzI4NFxyXG4gICAgb25Ecm9wKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm92ZXJEcm9wWm9uZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbTxEYXRhVHJhbnNmZXJJdGVtPihldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIuaXRlbXMgOiBbXSlcclxuICAgICAgICAgICAgLm1hcChpID0+IGkuZ2V0QXNGaWxlKCkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLnNlbGVjdEZpbGVzLmVtaXQoZmlsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdChldmVudDogRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM7XHJcbiAgICAgICAgaWYgKGZpbGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZXMuZW1pdChBcnJheS5mcm9tKGZpbGVzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZml0RHJvcFpvbmVUb1RhcmdldCgpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZHJvcFpvbmVUYXJnZXQpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZVN0eWxlWyd3aWR0aC5weCddID0gcmVjdC53aWR0aDtcclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZVN0eWxlWydoZWlnaHQucHgnXSA9IHJlY3QuaGVpZ2h0O1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lU3R5bGVbJ3RvcC5weCddID0gcmVjdC50b3A7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVTdHlsZVsnbGVmdC5weCddID0gcmVjdC5sZWZ0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8aW5wdXQgdHlwZT1cImZpbGVcIiBjbGFzcz1cImZpbGUtaW5wdXRcIiAjZmlsZUlucHV0IChjaGFuZ2UpPVwic2VsZWN0KCRldmVudClcIiBtdWx0aXBsZSBbYWNjZXB0XT1cImFjY2VwdFwiIC8+XHJcbjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBbZGlzYWJsZWRdPVwidXBsb2FkaW5nXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXBsb2FkaW5nOyBlbHNlIHNlbGVjdGFibGVcIj5cclxuICAgICAgICA8Y2xyLXNwaW5uZXIgY2xySW5saW5lPjwvY2xyLXNwaW5uZXI+XHJcbiAgICAgICAge3sgJ2Fzc2V0LnVwbG9hZGluZycgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RhYmxlPlxyXG4gICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInVwbG9hZC1jbG91ZFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAge3sgJ2Fzc2V0LnVwbG9hZC1hc3NldHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2J1dHRvbj5cclxuPGRpdlxyXG4gICAgY2xhc3M9XCJkcm9wLXpvbmVcIlxyXG4gICAgW25nU3R5bGVdPVwiZHJvcFpvbmVTdHlsZVwiXHJcbiAgICBbY2xhc3MudmlzaWJsZV09XCJkcmFnZ2luZ1wiXHJcbiAgICBbY2xhc3MuZHJhZ2dpbmctb3Zlcl09XCJvdmVyRHJvcFpvbmVcIlxyXG4gICAgKGRyYWdlbnRlcik9XCJvdmVyRHJvcFpvbmUgPSB0cnVlXCJcclxuICAgIChkcmFnbGVhdmUpPVwib3ZlckRyb3Bab25lID0gZmFsc2VcIlxyXG4gICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXHJcbiAgICAjZHJvcFpvbmVcclxuPlxyXG4gICAgPGRpdiBjbGFzcz1cImRyb3AtbGFiZWxcIiAoZHJhZ2VudGVyKT1cIm92ZXJEcm9wWm9uZSA9IHRydWVcIj5cclxuICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ1cGxvYWQtY2xvdWRcIiBzaXplPVwiMzJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgIHt7ICdjYXRhbG9nLmRyb3AtZmlsZXMtdG8tdXBsb2FkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|