@po-ui/ng-templates 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/po-page-background/po-page-background.component.mjs +1 -1
- package/esm2020/lib/components/po-page-change-password/po-page-change-password.component.mjs +1 -1
- package/esm2020/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.mjs +20 -4
- package/esm2020/lib/components/po-page-job-scheduler/po-page-job-scheduler-execution/po-page-job-scheduler-execution.component.mjs +1 -1
- package/esm2020/lib/components/po-page-login/po-page-login.component.mjs +1 -1
- package/fesm2015/po-ui-ng-templates.mjs +23 -7
- package/fesm2015/po-ui-ng-templates.mjs.map +1 -1
- package/fesm2020/po-ui-ng-templates.mjs +23 -7
- package/fesm2020/po-ui-ng-templates.mjs.map +1 -1
- package/lib/components/po-page-dynamic-table/po-page-dynamic-table.component.d.ts +11 -1
- package/package.json +4 -4
- package/po-ui-ng-templates-6.2.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/po-ui-ng-templates-6.1.0.tgz +0 -0
|
@@ -156,7 +156,7 @@ PoPageBackgroundComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: P
|
|
|
156
156
|
i0.ɵɵproperty("ngIf", ctx.secondaryLogo);
|
|
157
157
|
i0.ɵɵadvance(1);
|
|
158
158
|
i0.ɵɵproperty("ngIf", ctx.background);
|
|
159
|
-
} }, directives: [i2.NgIf, i1.PoDividerComponent,
|
|
159
|
+
} }, directives: [i2.NgIf, i1.PoDividerComponent, i1.PoSelectComponent, i3.NgControlStatus, i3.NgModel, i2.NgClass], encapsulation: 2 });
|
|
160
160
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageBackgroundComponent, [{
|
|
161
161
|
type: Component,
|
|
162
162
|
args: [{ selector: 'po-page-background', template: "<div class=\"po-page-login-container\">\n <div class=\"po-page-login-panel\">\n <img\n *ngIf=\"logo\"\n class=\"po-page-background-main-logo\"\n [class.po-page-background-hide-logo]=\"hideLogo\"\n alt=\"main-logo\"\n [src]=\"logo\"\n />\n\n <div class=\"po-page-login-body\">\n <div class=\"po-page-login-panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n <div class=\"po-page-background-footer po-sm-12\">\n <po-divider class=\"po-page-background-footer-mobile-only\"></po-divider>\n\n <div class=\"po-page-background-footer-content\">\n <div *ngIf=\"showSelectLanguage\" class=\"po-page-background-footer-select\">\n <po-select\n name=\"selectedLanguageOption\"\n [(ngModel)]=\"selectedLanguageOption\"\n [p-options]=\"selectLanguageOptions\"\n (p-change)=\"onChangeLanguage()\"\n >\n </po-select>\n </div>\n\n <div\n class=\"po-page-background-secondary-logo\"\n [ngClass]=\"\n showSelectLanguage\n ? 'po-page-background-secondary-logo-right'\n : 'po-page-background-secondary-logo-centered'\n \"\n >\n <img\n *ngIf=\"secondaryLogo\"\n class=\"po-page-background-secondary-logo-image\"\n alt=\"secondary-logo\"\n [src]=\"secondaryLogo\"\n />\n </div>\n </div>\n </div>\n </div>\n\n <div\n *ngIf=\"background\"\n [ngClass]=\"background ? 'po-page-login-highlight-image' : 'po-page-login-highlight-image-off'\"\n [style.background-image]=\"'url(' + background + ')'\"\n >\n <div class=\"po-page-login-highlight-text\">\n <div class=\"po-font-display\">{{ highlightInfo }}</div>\n </div>\n </div>\n</div>\n" }]
|
package/esm2020/lib/components/po-page-change-password/po-page-change-password.component.mjs
CHANGED
|
@@ -406,7 +406,7 @@ PoPageChangePasswordComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ typ
|
|
|
406
406
|
i0.ɵɵproperty("ngClass", ctx.hideCurrentPassword ? "po-md-12" : "po-sm-6")("p-disabled", _r1.invalid)("p-label", ctx.literals.saveButton);
|
|
407
407
|
i0.ɵɵadvance(1);
|
|
408
408
|
i0.ɵɵproperty("p-primary-action", ctx.modalAction)("p-title", ctx.hideCurrentPassword ? ctx.literals.passwordSuccessfullyCreated : ctx.literals.passwordSuccessfullyUpdated);
|
|
409
|
-
} }, directives: [i4.PoPageBackgroundComponent, i5.ɵNgNoValidate, i5.NgControlStatusGroup, i5.NgForm, i6.NgClass, i6.NgIf, i3.PoPasswordComponent, i5.NgControlStatus, i5.NgModel,
|
|
409
|
+
} }, directives: [i4.PoPageBackgroundComponent, i5.ɵNgNoValidate, i5.NgControlStatusGroup, i5.NgForm, i6.NgClass, i6.NgIf, i3.PoPasswordComponent, i5.NgControlStatus, i5.NgModel, i1.RouterLinkWithHref, i3.PoContainerComponent, i6.NgForOf, i3.PoDividerComponent, i3.PoButtonComponent, i3.PoModalComponent], encapsulation: 2 });
|
|
410
410
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageChangePasswordComponent, [{
|
|
411
411
|
type: Component,
|
|
412
412
|
args: [{ selector: 'po-page-change-password', template: "<div class=\"po-page-change-password-wrapper\" #pageChangePassword>\n <div class=\"po-page-change-password-container\">\n <po-page-background class=\"po-page-change-password\" [p-logo]=\"logo\" [p-secondary-logo]=\"secondaryLogo\">\n <div class=\"po-page-blocked-user-header po-row\">\n <div class=\"po-md-12\">{{ literals.createNewPassword }}</div>\n <div class=\"po-md-12 po-text-center po-font-text\">\n {{ literals.createNewPasswordPhrase }}\n </div>\n </div>\n\n <form #passwordForm=\"ngForm\">\n <div class=\"po-row po-mt-3 po-mt-sm-1\">\n <div class=\"po-md-6\" [ngClass]=\"{ 'po-offset-md-3 po-offset-lg-3 po-offset-xl-3': !showRequirements }\">\n <div *ngIf=\"!hideCurrentPassword\">\n <po-password\n name=\"currentPassword\"\n [(ngModel)]=\"currentPassword\"\n p-required\n [p-label]=\"literals.currentPassword\"\n >\n </po-password>\n </div>\n <div *ngIf=\"!hideCurrentPassword && recovery\" class=\"po-text-center po-mb-sm-1 po-mb-2\">\n <a\n *ngIf=\"recoveryUrlType === 'internalLink'\"\n class=\"po-font-text-bold po-page-change-password-forgot-password\"\n [routerLink]=\"recovery\"\n >\n {{ literals.forgotPassword }}\n </a>\n <a\n *ngIf=\"recoveryUrlType === 'externalLink'\"\n class=\"po-font-text-bold po-page-change-password-forgot-password\"\n [href]=\"recovery\"\n >\n {{ literals.forgotPassword }}\n </a>\n <a\n *ngIf=\"!recoveryUrlType\"\n class=\"po-font-text-bold po-page-change-password-forgot-password po-clickable\"\n (click)=\"onForgotPasswordClick(recovery)\"\n >\n {{ literals.forgotPassword }}\n </a>\n </div>\n <div>\n <po-password\n name=\"newPassword\"\n [(ngModel)]=\"newPassword\"\n p-required\n [p-label]=\"literals.newPassword\"\n (p-change-model)=\"validatePassword()\"\n >\n </po-password>\n </div>\n <div>\n <po-password\n name=\"confirmPassword\"\n [(ngModel)]=\"confirmPassword\"\n p-required\n [p-label]=\"literals.confirmPassword\"\n (p-change-model)=\"validatePassword()\"\n >\n </po-password>\n </div>\n </div>\n <div *ngIf=\"showRequirements\" class=\"po-md-6 po-page-change-password-required-container\">\n <po-container>\n <ul class=\"po-page-change-password-required-list\">\n <li class=\"po-page-change-password-required-item\">\n <p class=\"po-mb-1 po-font-text-bold po-page-change-password-required-title\">\n {{ literals?.requirements }}\n </p>\n </li>\n <li *ngFor=\"let requirement of requirements\" class=\"po-page-change-password-required-item\">\n <span\n class=\"po-icon po-page-change-password-required-icon\"\n [ngClass]=\"\n validateRequirement(requirement)\n ? 'po-icon-ok po-page-change-password-required-ok'\n : 'po-icon-minus po-page-change-password-required-minus'\n \"\n >\n </span>\n <p class=\"po-page-change-password-required-text po-font-text\">\n {{ requirement.requirement }}\n </p>\n </li>\n </ul>\n </po-container>\n </div>\n </div>\n </form>\n\n <po-divider class=\"po-sm-12\"></po-divider>\n\n <div class=\"po-page-change-password-tips po-row\">\n <div class=\"po-md-2 po-mr-3\">\n <img\n class=\"po-page-change-password-lock-image po-mb-3\"\n alt=\"Blocked user image\"\n src=\"./assets/images/big-lock.svg\"\n />\n </div>\n <div class=\"po-md-9 po-page-change-password-tips-text\">\n <div class=\"po-font-text-bold po-pb-1\">{{ literals.safetyTips }}</div>\n <div class=\"po-font-text-small\">\n <div class=\"po-row po-pb-1\">{{ literals.safetyTipsPhrase }}</div>\n <div class=\"po-row po-pb-1\">\u2022 {{ literals.safetyTipsFirst }}</div>\n <div class=\"po-row po-pb-1\">\u2022 {{ literals.safetyTipsSecond }}</div>\n <div class=\"po-row po-pb-1\">\u2022 {{ literals.safetyTipsThird }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"po-page-change-password-buttons po-row\">\n <po-divider class=\"po-sm-12 po-mobile-only\"></po-divider>\n\n <po-button\n *ngIf=\"!hideCurrentPassword\"\n class=\"po-sm-6 po-mb-sm-1\"\n [p-label]=\"literals.backButton\"\n (p-click)=\"navigateTo(urlBack)\"\n >\n </po-button>\n\n <po-button\n [ngClass]=\"hideCurrentPassword ? 'po-md-12' : 'po-sm-6'\"\n p-type=\"primary\"\n [p-disabled]=\"passwordForm.invalid\"\n [p-label]=\"literals.saveButton\"\n (p-click)=\"onLoginSubmit()\"\n >\n </po-button>\n </div>\n </po-page-background>\n </div>\n</div>\n\n<po-modal\n [p-primary-action]=\"modalAction\"\n p-hide-close\n p-size=\"auto\"\n [p-title]=\"hideCurrentPassword ? literals.passwordSuccessfullyCreated : literals.passwordSuccessfullyUpdated\"\n>\n <div class=\"po-text-center\">\n <img\n alt=\"Blocked user image\"\n class=\"po-page-change-password-lock-image po-mb-3\"\n src=\"./assets/images/success.svg\"\n />\n </div>\n</po-modal>\n" }]
|
|
@@ -109,6 +109,16 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
|
|
|
109
109
|
* @default `false`
|
|
110
110
|
*/
|
|
111
111
|
this.keepFilters = false;
|
|
112
|
+
/**
|
|
113
|
+
* @optional
|
|
114
|
+
*
|
|
115
|
+
* @description
|
|
116
|
+
*
|
|
117
|
+
* Define que a coluna de ações ficará no lado direito da tabela.
|
|
118
|
+
*
|
|
119
|
+
* @default `false`
|
|
120
|
+
*/
|
|
121
|
+
this.actionRight = false;
|
|
112
122
|
/**
|
|
113
123
|
* @optional
|
|
114
124
|
*
|
|
@@ -757,7 +767,7 @@ export class PoPageDynamicTableComponent extends PoPageDynamicListBaseComponent
|
|
|
757
767
|
}
|
|
758
768
|
}
|
|
759
769
|
PoPageDynamicTableComponent.ɵfac = function PoPageDynamicTableComponent_Factory(t) { return new (t || PoPageDynamicTableComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.PoDialogService), i0.ɵɵdirectiveInject(i2.PoNotificationService), i0.ɵɵdirectiveInject(i3.PoPageDynamicService), i0.ɵɵdirectiveInject(i4.PoPageCustomizationService), i0.ɵɵdirectiveInject(i5.PoPageDynamicTableActionsService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
|
|
760
|
-
PoPageDynamicTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: ["p-load", "onLoad"], keepFilters: ["p-keep-filters", "keepFilters"], concatFilters: ["p-concat-filters", "concatFilters"], actions: ["p-actions", "actions"], pageCustomActions: ["p-page-custom-actions", "pageCustomActions"], tableCustomActions: ["p-table-custom-actions", "tableCustomActions"], quickSearchWidth: ["p-quick-search-width", "quickSearchWidth"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInheritDefinitionFeature], decls: 2, vars:
|
|
770
|
+
PoPageDynamicTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPageDynamicTableComponent, selectors: [["po-page-dynamic-table"]], inputs: { onLoad: ["p-load", "onLoad"], keepFilters: ["p-keep-filters", "keepFilters"], actionRight: ["p-actions-right", "actionRight"], concatFilters: ["p-concat-filters", "concatFilters"], actions: ["p-actions", "actions"], pageCustomActions: ["p-page-custom-actions", "pageCustomActions"], tableCustomActions: ["p-table-custom-actions", "tableCustomActions"], quickSearchWidth: ["p-quick-search-width", "quickSearchWidth"] }, features: [i0.ɵɵProvidersFeature([PoPageDynamicService]), i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 14, consts: [[3, "p-actions", "p-breadcrumb", "p-filters", "p-keep-filters", "p-concat-filters", "p-quick-search-width", "p-title", "p-advanced-search", "p-change-disclaimers", "p-quick-search"], [3, "p-sort", "p-actions", "p-actions-right", "p-selectable", "p-columns", "p-items", "p-show-more-disabled", "p-show-more", "p-sort-by"]], template: function PoPageDynamicTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
761
771
|
i0.ɵɵelementStart(0, "po-page-dynamic-search", 0);
|
|
762
772
|
i0.ɵɵlistener("p-advanced-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_advanced_search_0_listener($event) { return ctx.onAdvancedSearch($event); })("p-change-disclaimers", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_change_disclaimers_0_listener($event) { return ctx.onChangeDisclaimers($event); })("p-quick-search", function PoPageDynamicTableComponent_Template_po_page_dynamic_search_p_quick_search_0_listener($event) { return ctx.onQuickSearch($event); });
|
|
763
773
|
i0.ɵɵelementStart(1, "po-table", 1);
|
|
@@ -767,23 +777,29 @@ PoPageDynamicTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
|
|
|
767
777
|
} if (rf & 2) {
|
|
768
778
|
i0.ɵɵproperty("p-actions", ctx.pageActions)("p-breadcrumb", ctx.breadcrumb)("p-filters", ctx.filters)("p-keep-filters", ctx.keepFilters)("p-concat-filters", ctx.concatFilters)("p-quick-search-width", ctx.quickSearchWidth)("p-title", ctx.title);
|
|
769
779
|
i0.ɵɵadvance(1);
|
|
770
|
-
i0.ɵɵproperty("p-sort", true)("p-actions", ctx.tableActions)("p-selectable", ctx.enableSelectionTable)("p-columns", ctx.columns)("p-items", ctx.items)("p-show-more-disabled", !ctx.hasNext);
|
|
780
|
+
i0.ɵɵproperty("p-sort", true)("p-actions", ctx.tableActions)("p-actions-right", ctx.actionRight)("p-selectable", ctx.enableSelectionTable)("p-columns", ctx.columns)("p-items", ctx.items)("p-show-more-disabled", !ctx.hasNext);
|
|
771
781
|
} }, directives: [i6.PoPageDynamicSearchComponent, i2.PoTableComponent], encapsulation: 2 });
|
|
772
782
|
__decorate([
|
|
773
783
|
InputBoolean()
|
|
774
784
|
], PoPageDynamicTableComponent.prototype, "keepFilters", void 0);
|
|
785
|
+
__decorate([
|
|
786
|
+
InputBoolean()
|
|
787
|
+
], PoPageDynamicTableComponent.prototype, "actionRight", void 0);
|
|
775
788
|
__decorate([
|
|
776
789
|
InputBoolean()
|
|
777
790
|
], PoPageDynamicTableComponent.prototype, "concatFilters", void 0);
|
|
778
791
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageDynamicTableComponent, [{
|
|
779
792
|
type: Component,
|
|
780
|
-
args: [{ selector: 'po-page-dynamic-table', providers: [PoPageDynamicService], template: "<po-page-dynamic-search\n [p-actions]=\"pageActions\"\n [p-breadcrumb]=\"breadcrumb\"\n [p-filters]=\"filters\"\n [p-keep-filters]=\"keepFilters\"\n [p-concat-filters]=\"concatFilters\"\n [p-quick-search-width]=\"quickSearchWidth\"\n [p-title]=\"title\"\n (p-advanced-search)=\"onAdvancedSearch($event)\"\n (p-change-disclaimers)=\"onChangeDisclaimers($event)\"\n (p-quick-search)=\"onQuickSearch($event)\"\n>\n <po-table\n [p-sort]=\"true\"\n [p-actions]=\"tableActions\"\n [p-selectable]=\"enableSelectionTable\"\n [p-columns]=\"columns\"\n [p-items]=\"items\"\n [p-show-more-disabled]=\"!hasNext\"\n (p-show-more)=\"showMore()\"\n (p-sort-by)=\"onSort($event)\"\n >\n </po-table>\n</po-page-dynamic-search>\n" }]
|
|
793
|
+
args: [{ selector: 'po-page-dynamic-table', providers: [PoPageDynamicService], template: "<po-page-dynamic-search\n [p-actions]=\"pageActions\"\n [p-breadcrumb]=\"breadcrumb\"\n [p-filters]=\"filters\"\n [p-keep-filters]=\"keepFilters\"\n [p-concat-filters]=\"concatFilters\"\n [p-quick-search-width]=\"quickSearchWidth\"\n [p-title]=\"title\"\n (p-advanced-search)=\"onAdvancedSearch($event)\"\n (p-change-disclaimers)=\"onChangeDisclaimers($event)\"\n (p-quick-search)=\"onQuickSearch($event)\"\n>\n <po-table\n [p-sort]=\"true\"\n [p-actions]=\"tableActions\"\n [p-actions-right]=\"actionRight\"\n [p-selectable]=\"enableSelectionTable\"\n [p-columns]=\"columns\"\n [p-items]=\"items\"\n [p-show-more-disabled]=\"!hasNext\"\n (p-show-more)=\"showMore()\"\n (p-sort-by)=\"onSort($event)\"\n >\n </po-table>\n</po-page-dynamic-search>\n" }]
|
|
781
794
|
}], function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.PoDialogService }, { type: i2.PoNotificationService }, { type: i3.PoPageDynamicService }, { type: i4.PoPageCustomizationService }, { type: i5.PoPageDynamicTableActionsService }, { type: i2.PoLanguageService }]; }, { onLoad: [{
|
|
782
795
|
type: Input,
|
|
783
796
|
args: ['p-load']
|
|
784
797
|
}], keepFilters: [{
|
|
785
798
|
type: Input,
|
|
786
799
|
args: ['p-keep-filters']
|
|
800
|
+
}], actionRight: [{
|
|
801
|
+
type: Input,
|
|
802
|
+
args: ['p-actions-right']
|
|
787
803
|
}], concatFilters: [{
|
|
788
804
|
type: Input,
|
|
789
805
|
args: ['p-concat-filters']
|
|
@@ -800,4 +816,4 @@ __decorate([
|
|
|
800
816
|
type: Input,
|
|
801
817
|
args: ['p-quick-search-width']
|
|
802
818
|
}] }); })();
|
|
803
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFjLEtBQUssRUFBVSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUNMLFlBQVksRUFRWixxQkFBcUIsRUFDckIsZUFBZSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFMUcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7Ozs7Ozs7O0FBa0I5Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlFRztBQU1ILE1B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OzJCQUNFLHVCQUF1QixhQUV0QixDQUFDLG9CQUFvQixDQUFDO21UQWdDaEIsTUFBTTtrQkFBdEIsS0FBSzttQkFBQyxRQUFRO1lBYWYsV0FBVztrQkFEVixLQUFLO21CQUFDLGdCQUFnQjtZQTJCdkIsYUFBYTtrQkFEWixLQUFLO21CQUFDLGtCQUFrQjtZQXFERCxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUE4QmtCLGlCQUFpQjtrQkFBcEQsS0FBSzttQkFBQyx1QkFBdUI7WUE0Qk8sa0JBQWtCO2tCQUF0RCxLQUFLO21CQUFDLHdCQUF3QjtZQW1CSSxnQkFBZ0I7a0JBQWxELEtBQUs7bUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBPYnNlcnZhYmxlLCBFTVBUWSwgY29uY2F0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgSW5wdXRCb29sZWFuLFxuICBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zLFxuICBQb0RpYWxvZ1NlcnZpY2UsXG4gIFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gIFBvUGFnZUFjdGlvbixcbiAgUG9UYWJsZUFjdGlvbixcbiAgUG9UYWJsZUNvbHVtblNvcnQsXG4gIFBvVGFibGVDb2x1bW5Tb3J0VHlwZSxcbiAgcG9Mb2NhbGVEZWZhdWx0XG59IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcblxuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0RldGFpbENvbXBvbmVudCB9IGZyb20gJy4uL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwvcG8tcGFnZS1keW5hbWljLWRldGFpbC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBwb1BhZ2VEeW5hbWljVGFibGVMaXRlcmFsc0RlZmF1bHQgfSBmcm9tICcuL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1saXRlcmFscyc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljTGlzdEJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLXBhZ2UtZHluYW1pYy1saXN0LWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tcGFnZS1keW5hbWljL3BvLXBhZ2UtZHluYW1pYy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWFjdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1jdXN0b21pemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY09wdGlvbnNTY2hlbWEgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtY3VzdG9taXphdGlvbi9wby1wYWdlLWR5bmFtaWMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlTWV0YURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLW1ldGFkYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZSB9IGZyb20gJy4vcG8tcGFnZS1keW5hbWljLXRhYmxlLWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZWRpdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlTmV3IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtbmV3LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmUgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1yZW1vdmUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZURldGFpbCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWRldGFpbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRHVwbGljYXRlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtZHVwbGljYXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVBbGwgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1yZW1vdmUtYWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWN1c3RvbS1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1jdXN0b20tdGFibGUtYWN0aW9uLmludGVyZmFjZSc7XG5cbnR5cGUgVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbiA9IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zKTtcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBgcG8tcGFnZS1keW5hbWljLXRhYmxlYCDDqSB1bWEgcMOhZ2luYSBxdWUgZXhpYmUgdW1hIGxpc3RhIGRlIHJlZ2lzdHJvcyBlbSB1bWEgdGFiZWxhIGJhc2VhZG8gZW0gdW1hIGxpc3RhIGRlIGZpZWxkcyxcbiAqIG8gbWVzbW8gdGFtYsOpbSBzdXBvcnRhIG1ldGFkYWRvcyBjb25mb3JtZSBlc3BlY2lmaWNhZG8gbmEgZG9jdW1lbnRhw6fDo28uXG4gKlxuICogIyMjIFV0aWxpemHDp8OjbyB2aWEgcm90YVxuICpcbiAqIEFvIHV0aWxpemFyIGFzIHJvdGFzIHBhcmEgY2FycmVnYXIgbyB0ZW1wbGF0ZSwgbyBgcGFnZS1keW5hbWljLXRhYmxlYCBkaXNwb25pYmlsaXphIHByb3ByaWVkYWRlcyBwYXJhXG4gKiBwb2RlciBlc3BlY2lmaWNhciBvIGVuZHBvaW50IGRvcyBkYWRvcyBlIGRvcyBtZXRhZGFkb3MuIEV4ZW1wbG8gZGUgdXRpbGl6YcOnw6NvOlxuICpcbiAqIE8gY29tcG9uZW50ZSBwcmltZWlybyBpcsOhIGNhcnJlZ2FyIG8gbWV0YWRhZG8gZGEgcm90YSBkZWZpbmlkYSBuYSBwcm9wcmllZGFkZSBzZXJ2aWNlTWV0YWRhdGFBcGlcbiAqIGUgZGVwb2lzIGlyw6EgYnVzY2FyIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZUxvYWRBcGlcbiAqXG4gKiA+IENhc28gbyBzZXJ2aWRvciByZXRvcm5hciB1bSBlcnJvIGFvIHJlY3VwZXJhciBvIG1ldGFkYWRvcywgc2Vyw6EgcmVwYXNzYWRvIG8gbWV0YWRhZG9zIHNhbHZvIGVtIGNhY2hlLFxuICogc2UgbyBjYWNoZSBuw6NvIGV4aXN0ZSBzZXLDoSBkaXNwYXJhZG8gdW1hIG5vdGlmaWNhw6fDo28uXG4gKlxuICogYGBgXG4gKiB7XG4gKiAgIHBhdGg6ICdwZW9wbGUnLFxuICogICBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNUYWJsZUNvbXBvbmVudCxcbiAqICAgZGF0YToge1xuICogICAgIHNlcnZpY2VBcGk6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdjEvcGVvcGxlJywgLy8gZW5kcG9pbnQgZG9zIGRhZG9zXG4gKiAgICAgc2VydmljZU1ldGFkYXRhQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL21ldGFkYXRhJywgLy8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIEdldFxuICogICAgIHNlcnZpY2VMb2FkQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2xvYWQtbWV0YWRhdGEnIC8vIGVuZHBvaW50IGRlIGN1c3RvbWl6YcOnw7VlcyBkb3MgbWV0YWRhZG9zIHV0aWxpemFuZG8gbyBtw6l0b2RvIEhUVFAgUG9zdFxuICogICB9XG4gKiB9XG4gKlxuICogYGBgXG4gKlxuICogQSByZXF1aXNpw6fDo28gZG9zIG1ldGFkYWRvcyDDqSBmZWl0YSBuYSBpbmljaWFsaXphw6fDo28gZG8gdGVtcGxhdGUgcGFyYSBidXNjYXIgb3MgbWV0YWRhZG9zIGRhIHDDoWdpbmEgcGFzc2FuZG8gb1xuICogdGlwbyBkbyBtZXRhZGFkbyBlc3BlcmFkbyBlIGEgdmVyc8OjbyBjYWNoZWFkYSBwZWxvIGJyb3dzZXIuXG4gKlxuICogTyBmb3JtYXRvIGVzcGVyYWRvIG5hIHJlc3Bvc3RhIGRhIHJlcXVpc2nDp8OjbyBlc3TDoSBlc3BlY2lmaWNhZG8gbmEgaW50ZXJmYWNlXG4gKiBbUG9QYWdlRHluYW1pY1RhYmxlTWV0YWRhdGFdKC9kb2N1bWVudGF0aW9uL3BvLXBhZ2UtZHluYW1pYy10YWJsZSNwby1wYWdlLWR5bmFtaWMtdGFibGUtbWV0YWRhdGEpLiBQb3IgZXhlbXBsbzpcbiAqXG4gKiBgYGBcbiAqICB7XG4gKiAgIHZlcnNpb246IDEsXG4gKiAgIHRpdGxlOiAnUGVyc29uIFRhYmxlJyxcbiAqICAgZmllbGRzOiBbXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2lkJywga2V5OiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICogICAgIHsgcHJvcGVydHk6ICdzdGF0dXMnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25hbWUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ25pY2tuYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdiaXJ0aGRhdGUnLCBsYWJlbDogJ0JpcnRoIGRhdGUnIH0sXG4gKiAgICAgeyBwcm9wZXJ0eTogJ2dlbnJlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjaXR5JyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdjb3VudHJ5JyB9XG4gKiAgIF0sXG4gKiAgIGtlZXBGaWx0ZXJzOiB0cnVlXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiA+IENhc28gbyBlbmRwb2ludCBkb3MgbWV0YWRhZG9zIG7Do28gc2VqYSBlc3BlY2lmaWNhZG8sIHNlcsOhIGZlaXRvIHVtYSByZXF1aXNpw6fDo28gdXRpbGl6YW5kbyBvIGBzZXJ2aWNlQXBpYCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAqIGBgYFxuICogR0VUIHtlbmQtcG9pbnR9L21ldGFkYXRhP3R5cGU9bGlzdCZ2ZXJzaW9uPXt2ZXJzaW9ufVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljXCIgdGl0bGU9XCJQTyBQYWdlIER5bmFtaWMgVGFibGUgQmFzaWNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLWJhc2ljLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vyc1wiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIC0gVXNlcnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy9zYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tcGFnZS1keW5hbWljLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1BvUGFnZUR5bmFtaWNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQgZXh0ZW5kcyBQb1BhZ2VEeW5hbWljTGlzdEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBvdSBzZXJ2acOnbyBxdWUgc2Vyw6EgZXhlY3V0YWRvIG5hIGluaWNpYWxpemHDp8OjbyBkbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBBIHByb3ByaWVkYWRlIGFjZWl0YSBvcyBzZWd1aW50ZXMgdGlwb3M6XG4gICAqIC0gYHN0cmluZ2A6ICpFbmRwb2ludCogdXNhZG8gcGVsbyBjb21wb25lbnRlIHBhcmEgcmVxdWlzacOnw6NvIHZpYSBgUE9TVGAuXG4gICAqIC0gYGZ1bmN0aW9uYDogTcOpdG9kbyBxdWUgc2Vyw6EgZXhlY3V0YWRvLlxuICAgKlxuICAgKiBPIHJldG9ybm8gZGVzdGEgZnVuw6fDo28gZGV2ZSBzZXIgZG8gdGlwbyBgUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9uc2AsXG4gICAqIG9uZGUgbyB1c3XDoXJpbyBwb2RlcsOhIGN1c3RvbWl6YXIgbm92b3MgY2FtcG9zLCBicmVhZGNydW1iLCB0aXRsZSBlIGFjdGlvbnNcbiAgICpcbiAgICogUG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBnZXRQYWdlT3B0aW9ucygpOiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zIHtcbiAgICogcmV0dXJuIHtcbiAgICogICBhY3Rpb25zOlxuICAgKiAgICAgeyBuZXc6ICduZXcnLCBlZGl0OiAnZWRpdC86aWQnLCByZW1vdmU6IHRydWUgfSxcbiAgICogICBmaWVsZHM6IFtcbiAgICogICAgIHsgcHJvcGVydHk6ICdpZENhcmQnLCBncmlkQ29sdW1uczogNiB9XG4gICAqICAgXVxuICAgKiB9O1xuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKiBQYXJhIHJlZmVyZW5jaWFyIGEgc3VhIGZ1bsOnw6NvIHV0aWxpemUgYSBwcm9wcmllZGFkZSBgYmluZGAsIHBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogIFtwLWxvYWRdPVwib25Mb2FkT3B0aW9ucy5iaW5kKHRoaXMpXCJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtbG9hZCcpIG9uTG9hZDogc3RyaW5nIHwgKCgpID0+IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE1hbnTDqW0gbmEgbW9kYWwgZGUgYEJ1c2NhIEF2YW7Dp2FkYWAgb3MgdmFsb3JlcyBwcmVlbmNoaWRvcyBkbyDDumx0aW1vIGZpbHRybyByZWFsaXphZG8gcGVsbyB1c3XDoXJpby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0Qm9vbGVhbigpXG4gIEBJbnB1dCgncC1rZWVwLWZpbHRlcnMnKVxuICBrZWVwRmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgYSB1dGlsaXphw6fDo28gZGEgcGVzcXVpc2EgcsOhcGlkYSBqdW50byBjb20gYSBwZXNxdWlzYSBhdmFuw6dhZGEuXG4gICAqXG4gICAqIERlc3RhIGZvcm1hLCBhbyB0ZXIgdW1hIHBlc3F1aXNhIGF2YW7Dp2FkYSBlc3RhYmVsZWNpZGEgZSBzZXJcbiAgICogcHJlZW5jaGlkbyBhIHBlc3F1aXNhIHLDoXBpZGEsIG8gZmlsdHJvIHNlcsOhIGNvbmNhdGVuYWRvIGFkaWNpb25hbmRvIGEgcGVzcXVpc2FcbiAgICogcsOhcGlkYSB0YW1iw6ltIG5hIGxpc3RhIGRlIGBkaXNjbGFpbWVyc2AgYSBhcGxpY2FuZG8gdW1hIG5vdmEgYnVzY2EgY29tIGEgY29uY2F0ZW5hw6fDo28uXG4gICAqXG4gICAqIFBvciBleGVtcGxvLCBjb20gb3Mgc2VndWludGVzIGZpbHRyb3MgYXBsaWNhZG9zOlxuICAgKiAgIC0gZmlsdHJvIGF2YW7Dp2FkbzogYHsgbmFtZTogJ01pa2UnLCBhZ2U6ICcxMicgfWBcbiAgICogICAtIGZpbHRybyByw6FwaWRvOiBgeyBzZWFyY2g6ICdwYXBlcicgfWBcbiAgICpcbiAgICogQSByZXF1aXNpw6fDo28gZG9zIGRhZG9zIG5hIEFQSSBmaWNhcsOhIGNvbSBvcyBwYXLDom1ldHJvczpcbiAgICogYGBgXG4gICAqIHBhZ2U9MSZwYWdlU2l6ZT0xMCZuYW1lPU1pa2UmYWdlPTEyJnNlYXJjaD1wYXBlclxuICAgKiBgYGBcbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0Qm9vbGVhbigpXG4gIEBJbnB1dCgncC1jb25jYXQtZmlsdGVycycpXG4gIGNvbmNhdEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBoYXNOZXh0ID0gZmFsc2U7XG4gIGl0ZW1zID0gW107XG4gIGxpdGVyYWxzO1xuICBwYWdlQWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuICB0YWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBfYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucyA9IHt9O1xuICBwcml2YXRlIF9wYWdlQ3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9xdWlja1NlYXJjaFdpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgX3RhYmxlQ3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+ID0gW107XG5cbiAgcHJpdmF0ZSBwYWdlOiBudW1iZXIgPSAxO1xuICBwcml2YXRlIHBhcmFtcyA9IHt9O1xuICBwcml2YXRlIHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQ7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBoYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2N1c3RvbVBhZ2VMaXN0QWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9jdXN0b21UYWJsZUFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2RlZmF1bHRQYWdlQWN0aW9uczogQXJyYXk8UG9QYWdlQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9kZWZhdWx0VGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgc2V0IGRlZmF1bHRQYWdlQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlQWN0aW9uPikge1xuICAgIHRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUGFnZUFjdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGRlZmF1bHRUYWJsZUFjdGlvbnModmFsdWU6IEFycmF5PFBvVGFibGVBY3Rpb24+KSB7XG4gICAgdGhpcy5fZGVmYXVsdFRhYmxlQWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlVGFibGVBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldCBjdXN0b21QYWdlTGlzdEFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9jdXN0b21QYWdlTGlzdEFjdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldCBjdXN0b21UYWJsZUFjdGlvbnModmFsdWU6IEFycmF5PFBvVGFibGVBY3Rpb24+KSB7XG4gICAgdGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVUYWJsZUFjdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEHDp8O1ZXMgZGEgcMOhZ2luYSBlIGRhIHRhYmVsYS5cbiAgICogPiBDYXNvIHV0aWxpemFyIGEgYcOnw6NvIHBhZHLDo28gZGUgZXhjbHVpciwgYSBtZXNtYSBzZXLDoSBleGliaWRhIHBvciDDumx0aW1vIG5hIHRhYmVsYS5cbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnModmFsdWU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMCA/IHZhbHVlIDoge307XG5cbiAgICB0aGlzLnNldFBhZ2VBY3Rpb25zKHRoaXMuYWN0aW9ucyk7XG4gICAgdGhpcy5zZXRSZW1vdmVBbGxBY3Rpb24oKTtcbiAgICB0aGlzLnNldFRhYmxlQWN0aW9ucyh0aGlzLmFjdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkZSBhw6fDtWVzIGN1c3RvbWl6YWRhcyBkYSBww6FnaW5hIHF1ZSBzZXLDo28gaW5jb3Jwb3JhZGFzIMOgcyBhw6fDtWVzXG4gICAqIGluZm9ybWFkYXMgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtYWN0aW9uc2AuXG4gICAqXG4gICAqIEVzc2FzIGHDp8O1ZXMgZmljYW0gbG9jYWxpemFkYXMgbmEgcGFydGUgc3VwZXJpb3IgZGEgcMOhZ2luYSBlbSBib3TDtWVzIGNvbSBhw6fDtWVzLlxuICAgKlxuICAgKiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAgICogYGBgXG4gICAqIFtcbiAgICogIHsgbGFiZWw6ICdFeHBvcnQnLCBhY3Rpb246IHRoaXMuZXhwb3J0LmJpbmQodGhpcykgfSxcbiAgICogIHsgbGFiZWw6ICdQcmludCcsIGFjdGlvbjogdGhpcy5wcmludC5iaW5kKHRoaXMpIH1cbiAgICogXTtcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtcGFnZS1jdXN0b20tYWN0aW9ucycpIHNldCBwYWdlQ3VzdG9tQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPikge1xuICAgIHRoaXMuX3BhZ2VDdXN0b21BY3Rpb25zID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuXG4gICAgdGhpcy5jdXN0b21QYWdlTGlzdEFjdGlvbnMgPSB0aGlzLnRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKHRoaXMucGFnZUN1c3RvbUFjdGlvbnMpO1xuICAgIHRoaXMuaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGUgPSB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zLnNvbWUoY3VzdG9tQWN0aW9uID0+IGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlKTtcbiAgfVxuXG4gIGdldCBwYWdlQ3VzdG9tQWN0aW9ucygpOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUN1c3RvbUFjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkZSBhw6fDtWVzIGN1c3RvbWl6YWRhcyBuYSB0YWJlbGEgZGEgcMOhZ2luYSBxdWUgc2Vyw6NvIGluY29ycG9yYWRhcyDDoHMgYcOnw7Vlc1xuICAgKiBpbmZvcm1hZGFzIGF0cmF2w6lzIGRhIHByb3ByaWVkYWRlIGBwLWFjdGlvbnNgLlxuICAgKlxuICAgKiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAgICogYGBgXG4gICAqIFtcbiAgICogIHsgbGFiZWw6ICdBcHBseSBkaXNjb3VudCcsIGFjdGlvbjogdGhpcy5hcHBseURpc2NvdW50LmJpbmQodGhpcykgfSxcbiAgICogIHsgbGFiZWw6ICdEZXRhaWxzJywgYWN0aW9uOiB0aGlzLmRldGFpbHMuYmluZCh0aGlzKSB9XG4gICAqIF07XG4gICAqIGBgYFxuICAgKiA+IENhc28gdXRpbGl6YXIgYSBhw6fDo28gcGFkcsOjbyBkZSBleGNsdWlyLCBhIG1lc21hIHNlcsOhIGV4aWJpZGEgcG9yIMO6bHRpbW8gbmEgdGFiZWxhLlxuICAgKi9cbiAgQElucHV0KCdwLXRhYmxlLWN1c3RvbS1hY3Rpb25zJykgc2V0IHRhYmxlQ3VzdG9tQWN0aW9ucyh2YWx1ZTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+KSB7XG4gICAgdGhpcy5fdGFibGVDdXN0b21BY3Rpb25zID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuXG4gICAgdGhpcy5jdXN0b21UYWJsZUFjdGlvbnMgPSB0aGlzLnRyYW5zZm9ybVRhYmxlQ3VzdG9tQWN0aW9uc1RvVGFibGVBY3Rpb25zKHRoaXMudGFibGVDdXN0b21BY3Rpb25zKTtcbiAgfVxuXG4gIGdldCB0YWJsZUN1c3RvbUFjdGlvbnMoKTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVDdXN0b21BY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGFyZ3VyYSBkbyBjYW1wbyBkZSBidXNjYSwgdXRpbGl6YW5kbyBvICpHcmlkIFN5c3RlbSosXG4gICAqIGUgbGltaXRhZG8gYW8gbcOheGltbyBkZSA2IGNvbHVuYXMuIE8gdGFtYW5obyBtw61uaW1vIMOpIGNvbnRyb2xhZG9cbiAgICogY29uZm9ybWUgcmVzb2x1w6fDo28gZGUgdGVsYSBwYXJhIG1hbnRlciBhIGNvbnNpc3TDqm5jaWEgZG8gbGF5b3V0LlxuICAgKi9cbiAgQElucHV0KCdwLXF1aWNrLXNlYXJjaC13aWR0aCcpIHNldCBxdWlja1NlYXJjaFdpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9xdWlja1NlYXJjaFdpZHRoID0gdXRpbC5jb252ZXJ0VG9JbnQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHF1aWNrU2VhcmNoV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tTZWFyY2hXaWR0aDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBwb0RpYWxvZ1NlcnZpY2U6IFBvRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIHBvTm90aWZpY2F0aW9uOiBQb05vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VEeW5hbWljU2VydmljZTogUG9QYWdlRHluYW1pY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZTogUG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5saXRlcmFscyA9IHtcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ucG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0W2xhbmd1YWdlXVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWREYXRhRnJvbUFQSSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvbkFkdmFuY2VkU2VhcmNoKGZpbHRlcikge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh7IHBhZ2U6IDEsIC4uLmZpbHRlciB9KS5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5wYXJhbXMgPSBmaWx0ZXI7XG5cbiAgICBpZiAodGhpcy5rZWVwRmlsdGVycykge1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlRGlzY2xhaW1lcnMoZGlzY2xhaW1lcnMpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7fTtcblxuICAgIGRpc2NsYWltZXJzLmZvckVhY2goZGlzY2xhaW1lciA9PiB7XG4gICAgICBmaWx0ZXJbZGlzY2xhaW1lci5wcm9wZXJ0eV0gPSBkaXNjbGFpbWVyLnZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbkFkdmFuY2VkU2VhcmNoKGZpbHRlcik7XG4gIH1cblxuICBvblF1aWNrU2VhcmNoKHRlcm1UeXBlZEluUXVpY2tTZWFyY2gpIHtcbiAgICBjb25zdCBxdWlja1NlYXJjaFBhcmFtID0gdGVybVR5cGVkSW5RdWlja1NlYXJjaCA/IHsgc2VhcmNoOiB0ZXJtVHlwZWRJblF1aWNrU2VhcmNoIH0gOiB7fTtcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuY29uY2F0RmlsdGVycyA/IHsgLi4udGhpcy5wYXJhbXMsIC4uLnF1aWNrU2VhcmNoUGFyYW0gfSA6IHsgLi4ucXVpY2tTZWFyY2hQYXJhbSB9O1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKHRlcm1UeXBlZEluUXVpY2tTZWFyY2ggPyB7IHBhZ2U6IDEsIC4uLnRoaXMucGFyYW1zIH0gOiB1bmRlZmluZWQpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIG9uU29ydChzb3J0ZWRDb2x1bW46IFBvVGFibGVDb2x1bW5Tb3J0KSB7XG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBzb3J0ZWRDb2x1bW47XG4gIH1cblxuICBzaG93TW9yZSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoeyBwYWdlOiArK3RoaXMucGFnZSwgLi4udGhpcy5wYXJhbXMgfSkuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZVNlbGVjdGlvblRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0FjdGlvblJlbW92ZUFsbCB8fCB0aGlzLmhhc0N1c3RvbUFjdGlvbldpdGhTZWxlY3RhYmxlO1xuICB9XG5cbiAgZ2V0IGhhc0FjdGlvblJlbW92ZUFsbCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmFjdGlvbnMucmVtb3ZlQWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlKFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXSxcbiAgICBpdGVtXG4gICkge1xuICAgIGNvbnN0IGNvbmZpcm1PcHRpb25zOiBQb0RpYWxvZ0NvbmZpcm1PcHRpb25zID0ge1xuICAgICAgdGl0bGU6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZVRpdGxlLFxuICAgICAgbWVzc2FnZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlTWVzc2FnZSxcbiAgICAgIGNvbmZpcm06IHRoaXMucmVtb3ZlLmJpbmQodGhpcywgaXRlbSwgYWN0aW9uUmVtb3ZlLCBhY3Rpb25CZWZvcmVSZW1vdmUpXG4gICAgfTtcblxuICAgIHRoaXMucG9EaWFsb2dTZXJ2aWNlLmNvbmZpcm0oY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtUmVtb3ZlQWxsKFxuICAgIGFjdGlvblJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxuICApIHtcbiAgICBjb25zdCBjb25maXJtT3B0aW9uczogUG9EaWFsb2dDb25maXJtT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVBbGxUaXRsZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UsXG4gICAgICBjb25maXJtOiB0aGlzLnJlbW92ZUFsbC5iaW5kKHRoaXMsIGFjdGlvblJlbW92ZUFsbCwgYWN0aW9uQmVmb3JlUmVtb3ZlQWxsKVxuICAgIH07XG5cbiAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKGNvbmZpcm1PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VW5pcXVlS2V5KGl0ZW0pIHtcbiAgICBjb25zdCBrZXlzID0gdXRpbC5tYXBPYmplY3RCeVByb3BlcnRpZXMoaXRlbSwgdGhpcy5rZXlzKTtcblxuICAgIHJldHVybiB1dGlsLnZhbHVlc0Zyb21PYmplY3Qoa2V5cykuam9pbignfCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlclBhcmFtKHNvcnRlZENvbHVtbjogUG9UYWJsZUNvbHVtblNvcnQgPSB7IHR5cGU6IHVuZGVmaW5lZCB9KSB7XG4gICAgY29uc3QgeyBjb2x1bW4sIHR5cGUgfSA9IHNvcnRlZENvbHVtbjtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XG4gICAgICByZXR1cm4geyBvcmRlcjogYC0ke2NvbHVtbi5wcm9wZXJ0eX1gIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgb3JkZXI6IGAke2NvbHVtbi5wcm9wZXJ0eX1gIH07XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKHBhcmFtczogeyBwYWdlPzogbnVtYmVyOyBzZWFyY2g/OiBzdHJpbmcgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2VBcGkpIHtcbiAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uZXJyb3IodGhpcy5saXRlcmFscy5sb2FkRGF0YUVycm9yTm90aWZpY2F0aW9uKTtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlclBhcmFtID0gdGhpcy5nZXRPcmRlclBhcmFtKHRoaXMuc29ydGVkQ29sdW1uKTtcbiAgICBjb25zdCBkZWZhdWx0UGFyYW1zOiBhbnkgPSB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAxMCB9O1xuICAgIGNvbnN0IGZ1bGxQYXJhbXM6IGFueSA9IHsgLi4uZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zLCAuLi5vcmRlclBhcmFtIH07XG5cbiAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5nZXRSZXNvdXJjZXMoZnVsbFBhcmFtcykucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBmdWxsUGFyYW1zLnBhZ2UgPT09IDEgPyByZXNwb25zZS5pdGVtcyA6IFsuLi50aGlzLml0ZW1zLCAuLi5yZXNwb25zZS5pdGVtc107XG4gICAgICAgIHRoaXMucGFnZSA9IGZ1bGxQYXJhbXMucGFnZTtcbiAgICAgICAgdGhpcy5oYXNOZXh0ID0gcmVzcG9uc2UuaGFzTmV4dDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWV0YWRhdGEoXG4gICAgc2VydmljZUFwaUZyb21Sb3V0ZTogc3RyaW5nLFxuICAgIG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvblxuICApOiBPYnNlcnZhYmxlPFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhPiB7XG4gICAgaWYgKHNlcnZpY2VBcGlGcm9tUm91dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmdldE1ldGFkYXRhPFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhPigpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRvUm91dGVyID0gcmVzcG9uc2UuYXV0b1JvdXRlciB8fCB0aGlzLmF1dG9Sb3V0ZXI7XG4gICAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gcmVzcG9uc2UuYnJlYWRjcnVtYiB8fCB0aGlzLmJyZWFkY3J1bWI7XG4gICAgICAgICAgdGhpcy5maWVsZHMgPSByZXNwb25zZS5maWVsZHMgfHwgdGhpcy5maWVsZHM7XG4gICAgICAgICAgdGhpcy50aXRsZSA9IHJlc3BvbnNlLnRpdGxlIHx8IHRoaXMudGl0bGU7XG4gICAgICAgICAgdGhpcy5wYWdlQ3VzdG9tQWN0aW9ucyA9IHJlc3BvbnNlLnBhZ2VDdXN0b21BY3Rpb25zIHx8IHRoaXMucGFnZUN1c3RvbUFjdGlvbnM7XG4gICAgICAgICAgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS50YWJsZUN1c3RvbUFjdGlvbnMgfHwgdGhpcy50YWJsZUN1c3RvbUFjdGlvbnM7XG4gICAgICAgICAgdGhpcy5rZWVwRmlsdGVycyA9IHJlc3BvbnNlLmtlZXBGaWx0ZXJzIHx8IHRoaXMua2VlcEZpbHRlcnM7XG4gICAgICAgICAgdGhpcy5jb25jYXRGaWx0ZXJzID0gcmVzcG9uc2UuY29uY2F0RmlsdGVycyB8fCB0aGlzLmNvbmNhdEZpbHRlcnM7XG4gICAgICAgICAgdGhpcy5xdWlja1NlYXJjaFdpZHRoID0gcmVzcG9uc2UucXVpY2tTZWFyY2hXaWR0aCB8fCB0aGlzLnF1aWNrU2VhcmNoV2lkdGg7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQpO1xuICB9XG5cbiAgLy8gQHRvZG8gVmFsaWRhciByb3RhcyBuYSBtw6NvIHBvaXMgc2UgZXhpc3RpciB1bWEgcm90YSAnKionIG8gY2F0Y2ggZG8gbmF2aWdhdGlvbiBuw6NvIGZ1bmNpb25hLlxuICBwcml2YXRlIG5hdmlnYXRlVG8oXG4gICAgcm91dGU6IHsgcGF0aDogc3RyaW5nOyBjb21wb25lbnQ/OyB1cmw/OiBzdHJpbmc7IHBhcmFtcz86IGFueSB9LFxuICAgIGZvcmNlU3RvcEF1dG9Sb3V0ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGUudXJsIHx8IHJvdXRlLnBhdGhdLCB7IHF1ZXJ5UGFyYW1zOiByb3V0ZS5wYXJhbXMgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgaWYgKGZvcmNlU3RvcEF1dG9Sb3V0ZXIgfHwgIXRoaXMuYXV0b1JvdXRlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy51bnNoaWZ0KDxSb3V0ZT57XG4gICAgICAgIHBhdGg6IHJvdXRlLnBhdGgsXG4gICAgICAgIGNvbXBvbmVudDogcm91dGUuY29tcG9uZW50LFxuICAgICAgICBkYXRhOiB7IHNlcnZpY2VBcGk6IHRoaXMuc2VydmljZUFwaSwgYXV0b1JvdXRlcjogdHJ1ZSB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHJvdXRlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRldGFpbChhY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2RldGFpbCddLCBpdGVtKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRGV0YWlsKHRoaXMuYWN0aW9ucy5iZWZvcmVEZXRhaWwsIGlkLCBpdGVtKVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVEZXRhaWxSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZURldGFpbCkgPT5cbiAgICAgICAgICB0aGlzLmV4ZWN1dGVEZXRhaWwoYWN0aW9uLCBiZWZvcmVEZXRhaWxSZXN1bHQsIGlkLCBpdGVtKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZURldGFpbChcbiAgICBhY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2RldGFpbCddLFxuICAgIGJlZm9yZURldGFpbFJlc3VsdD86IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldyxcbiAgICBpZD86IHN0cmluZyxcbiAgICBpdGVtPzogYW55XG4gICkge1xuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZURldGFpbFJlc3VsdCA/PyB7fTtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XG4gICAgY29uc3QgeyBuZXdVcmwgfSA9IGJlZm9yZTtcblxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb24pIHtcbiAgICAgIGlmIChuZXdVcmwpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aEZyb21OZXdVcmwobmV3VXJsLCBpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yZXNvbHZlVXJsKGl0ZW0sIGFjdGlvbik7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGFjdGlvbiwgdXJsLCBjb21wb25lbnQ6IFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb24oaWQsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGF0aEZyb21OZXdVcmwobmV3VXJsOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChuZXdVcmwuaW5jbHVkZXMoJzppZCcpKSB7XG4gICAgICByZXR1cm4gbmV3VXJsLnJlcGxhY2UoLzppZC9nLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdVcmw7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EdXBsaWNhdGUoYWN0aW9uRHVwbGljYXRlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkdXBsaWNhdGUnXSwgaXRlbTogYW55KSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICBjb25zdCBkdXBsaWNhdGVzID0gdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHV0aWwubWFwT2JqZWN0QnlQcm9wZXJ0aWVzKGl0ZW0sIHRoaXMuZHVwbGljYXRlcykpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZUR1cGxpY2F0ZSh0aGlzLmFjdGlvbnMuYmVmb3JlRHVwbGljYXRlLCBpZCwgZHVwbGljYXRlcylcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlRHVwbGljYXRlUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEdXBsaWNhdGUpID0+XG4gICAgICAgICAgdGhpcy5leGVjdXRlRHVwbGljYXRlKGFjdGlvbkR1cGxpY2F0ZSwgYmVmb3JlRHVwbGljYXRlUmVzdWx0LCBkdXBsaWNhdGVzKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUR1cGxpY2F0ZShcbiAgICBhY3Rpb25EdXBsaWNhdGU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2R1cGxpY2F0ZSddLFxuICAgIGJlZm9yZUR1cGxpY2F0ZVJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRHVwbGljYXRlLFxuICAgIGR1cGxpY2F0ZXM6IGFueVxuICApIHtcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVEdXBsaWNhdGVSZXN1bHQgPz8ge307XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xuICAgIGNvbnN0IGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlID0gYmVmb3JlLnJlc291cmNlO1xuICAgIGNvbnN0IG5ld0FjdGlvbiA9IGJlZm9yZS5uZXdVcmwgPz8gYWN0aW9uRHVwbGljYXRlO1xuXG4gICAgaWYgKGFsbG93QWN0aW9uICYmIGFjdGlvbkR1cGxpY2F0ZSkge1xuICAgICAgaWYgKHR5cGVvZiBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSA9PT0gJ29iamVjdCcgJiYgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZHVwbGljYXRlcyA9IHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbmV3QWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogbmV3QWN0aW9uLCBwYXJhbXM6IHsgZHVwbGljYXRlOiBKU09OLnN0cmluZ2lmeShkdXBsaWNhdGVzKSB9IH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3QWN0aW9uKGR1cGxpY2F0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXQoYWN0aW9uRWRpdDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZWRpdCddLCBpdGVtKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVFZGl0KHRoaXMuYWN0aW9ucy5iZWZvcmVFZGl0LCBpZCwgaXRlbSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChiZWZvcmVFZGl0UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVFZGl0KSA9PlxuICAgICAgICAgICAgdGhpcy5leGVjdXRlRWRpdEFjdGlvbihhY3Rpb25FZGl0LCBiZWZvcmVFZGl0UmVzdWx0LCBpdGVtLCBpZClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUVkaXRBY3Rpb24oXG4gICAgYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydlZGl0J10sXG4gICAgYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRWRpdCxcbiAgICBpdGVtOiBhbnksXG4gICAgaWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBuZXdFZGl0QWN0aW9uID0gYmVmb3JlRWRpdFJlc3VsdD8ubmV3VXJsID8/IGFjdGlvbjtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/LmFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICBpZiAoIWFsbG93QWN0aW9uKSB7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdFZGl0QWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5vcGVuRWRpdFVybChuZXdFZGl0QWN0aW9uLCBpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdXBkYXRlZEl0ZW0gPSBuZXdFZGl0QWN0aW9uKGlkLCBpdGVtKTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlZEl0ZW0gPT09ICdvYmplY3QnICYmIHVwZGF0ZWRJdGVtICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubW9kaWZ5VUlUYWJsZUl0ZW0oaXRlbSwgdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHVwZGF0ZWRJdGVtKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRWRpdFVybChwYXRoOiBzdHJpbmcsIGl0ZW0pIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJlc29sdmVVcmwoaXRlbSwgcGF0aCk7XG5cbiAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoLCB1cmwgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vZGlmeVVJVGFibGVJdGVtKGN1cnJlbnRJdGVtLCBuZXdJdGVtVmFsdWUpIHtcbiAgICBjb25zdCB0YWJsZUl0ZW0gPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGN1cnJlbnRJdGVtKTtcbiAgICB0aGlzLml0ZW1zW3RhYmxlSXRlbV0gPSB7IC4uLmN1cnJlbnRJdGVtLCAuLi5uZXdJdGVtVmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk5ldyhhY3Rpb25OZXc6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ25ldyddKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZU5ldyh0aGlzLmFjdGlvbnMuYmVmb3JlTmV3KVxuICAgICAgICAuc3Vic2NyaWJlKChiZWZvcmVOZXdSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldykgPT4gdGhpcy5leGVjdXRlTmV3KGFjdGlvbk5ldywgYmVmb3JlTmV3UmVzdWx0KSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlTmV3KGFjdGlvbk5ldzogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snbmV3J10sIGJlZm9yZU5ld1Jlc3VsdD86IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldykge1xuICAgIGNvbnN0IGJlZm9yZSA9IGJlZm9yZU5ld1Jlc3VsdCA/PyB7fTtcbiAgICBjb25zdCBhbGxvd0FjdGlvbiA9IHR5cGVvZiBiZWZvcmUuYWxsb3dBY3Rpb24gPT09ICdib29sZWFuJyA/IGJlZm9yZS5hbGxvd0FjdGlvbiA6IHRydWU7XG4gICAgY29uc3QgeyBuZXdVcmwgfSA9IGJlZm9yZTtcblxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb25OZXcpIHtcbiAgICAgIGlmIChuZXdVcmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IG5ld1VybCB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25OZXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBhY3Rpb25OZXcgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY3Rpb25OZXcoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FzbyBleGlzdGEgbWFpcyBkZSB1bSBpZGVudGlmaWNhZG9yLCBzZXLDoSBjb25jYXRlbmFkbyBjb20gJ3wnLlxuICAgKlxuICAgKiBFeDogeyBpZDogMSwgY29tcGFueTogJ3BvJyB9XG4gICAqXG4gICAqIFBhcmEgbyBlbmRwb2ludCAvcmVzb3VyY2VzLzppZCBzZXLDoSBleGVjdXRhZGEgYSB1cmwgL3Jlc291cmNlcy8xfHBvXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZShcbiAgICBpdGVtLFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYWN0aW9uQmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydiZWZvcmVSZW1vdmUnXVxuICApIHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVSZW1vdmUoYWN0aW9uQmVmb3JlUmVtb3ZlLCB1bmlxdWVLZXksIGl0ZW0pXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChiZWZvcmVSZW1vdmUgPT4gdGhpcy5kZWxldGVBY3Rpb24oaXRlbSwgYWN0aW9uUmVtb3ZlLCBiZWZvcmVSZW1vdmUpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQWN0aW9uKFxuICAgIGl0ZW0sXG4gICAgYWN0aW9uUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmUnXSxcbiAgICBiZWZvcmVSZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHsgYWxsb3dBY3Rpb24sIG5ld1VybCB9ID0gYmVmb3JlUmVtb3ZlIHx8IHt9O1xuICAgIGNvbnN0IGFsbG93ID0gYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcblxuICAgIGlmIChhbGxvdykge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgICAgY29uc3QgcmVzb3VyY2VUb1JlbW92ZUtleSA9IHRoaXMucmV0dXJuUmVzb3VyY2VzS2V5cyhbaXRlbV0pO1xuXG4gICAgICBpZiAodHlwZW9mIGFjdGlvblJlbW92ZSA9PT0gJ2Jvb2xlYW4nIHx8IG5ld1VybCkge1xuICAgICAgICB1bmlxdWVLZXkgPSBuZXdVcmwgPyB1bmRlZmluZWQgOiB1bmlxdWVLZXk7XG4gICAgICAgIHJldHVybiB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlXG4gICAgICAgICAgLmRlbGV0ZVJlc291cmNlKHVuaXF1ZUtleSwgbmV3VXJsKVxuICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZihhY3Rpb25SZW1vdmUodW5pcXVlS2V5LCBpdGVtKSkucGlwZShcbiAgICAgICAgdGFwKHJlbW92ZSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVtb3ZlSXRlbSA9IHJlbW92ZSA/PyBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21VSShyZXNvdXJjZVRvUmVtb3ZlS2V5LCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24sIHJlbW92ZUl0ZW0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Yoe30pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGcm9tVUkoaXRlbXM6IEFycmF5PGFueT4sIG1lc3NhZ2U6IHN0cmluZywgcmVtb3ZlID0gdHJ1ZSkge1xuICAgIGlmIChyZW1vdmUgPT09IHRydWUgJiYgaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5yZW1vdmVMb2NhbEl0ZW1zKGl0ZW1zKTtcbiAgICAgIHRoaXMucG9Ob3RpZmljYXRpb24uc3VjY2VzcyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUFsbChcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZUFsbCddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlQWxsJ11cbiAgKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxSZXNvdXJjZXNLZXlzID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVSZW1vdmVBbGwoYWN0aW9uQmVmb3JlUmVtb3ZlQWxsLCBvcmlnaW5hbFJlc291cmNlc0tleXMpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChiZWZvcmVSZW1vdmUgPT4gdGhpcy5kZWxldGVBbGxBY3Rpb24oYWN0aW9uUmVtb3ZlQWxsLCBiZWZvcmVSZW1vdmUsIG9yaWdpbmFsUmVzb3VyY2VzS2V5cykpKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEl0ZW1zS2V5cygpIHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uJHNlbGVjdGVkKTtcblxuICAgIGlmIChyZXNvdXJjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJldHVyblJlc291cmNlc0tleXMocmVzb3VyY2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0dXJuUmVzb3VyY2VzS2V5cyhyZXNvdXJjZXMpIHtcbiAgICByZXR1cm4gdXRpbC5tYXBBcnJheUJ5UHJvcGVydGllcyhyZXNvdXJjZXMsIHRoaXMua2V5cyk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUFsbEFjdGlvbihcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZUFsbCddLFxuICAgIGJlZm9yZVJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlQWxsLFxuICAgIG9yaWdpbmFsUmVzb3VyY2VzOiBBcnJheTxhbnk+XG4gICkge1xuICAgIGNvbnN0IHsgYWxsb3dBY3Rpb24sIG5ld1VybCwgcmVzb3VyY2VzIH0gPSBiZWZvcmVSZW1vdmVBbGwgPz8ge307XG4gICAgY29uc3QgYWxsb3cgPSBhbGxvd0FjdGlvbiA/PyB0cnVlO1xuICAgIGNvbnN0IHJlc291cmNlc3RvRGVsZXRlID0gcmVzb3VyY2VzID8/IG9yaWdpbmFsUmVzb3VyY2VzO1xuXG4gICAgaWYgKGFsbG93ICYmIEFycmF5LmlzQXJyYXkocmVzb3VyY2VzdG9EZWxldGUpKSB7XG4gICAgICBpZiAodHlwZW9mIGFjdGlvblJlbW92ZUFsbCA9PT0gJ2Jvb2xlYW4nIHx8IG5ld1VybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5kZWxldGVSZXNvdXJjZXMocmVzb3VyY2VzdG9EZWxldGUsIG5ld1VybCkucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VzdG9EZWxldGUsIHRoaXMubGl0ZXJhbHMucmVtb3ZlQWxsU3VjY2Vzc05vdGlmaWNhdGlvbik7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvZihhY3Rpb25SZW1vdmVBbGwocmVzb3VyY2VzdG9EZWxldGUpKS5waXBlKFxuICAgICAgICB0YXAocmVtb3ZlSXRlbXMgPT4gdGhpcy5yZW1vdmVGcm9tVUkocmVtb3ZlSXRlbXMsIHRoaXMubGl0ZXJhbHMucmVtb3ZlU3VjY2Vzc05vdGlmaWNhdGlvbikpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7fSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxvY2FsSXRlbXMoaXRlbXNLZXlzVG9SZW1vdmUgPSBbXSkge1xuICAgIGlmIChpdGVtc0tleXNUb1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaXRlbUtleSA9IHRoaXMuZm9ybWF0VW5pcXVlS2V5KGl0ZW0pO1xuICAgICAgICByZXR1cm4gIWl0ZW1zS2V5c1RvUmVtb3ZlLmZpbmQoaXRlbUtleVRvUmVtb3ZlID0+IHV0aWwudmFsdWVzRnJvbU9iamVjdChpdGVtS2V5VG9SZW1vdmUpLmpvaW4oJ3wnKSA9PT0gaXRlbUtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVVcmwoaXRlbTogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcblxuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoLzppZC9nLCB1bmlxdWVLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdlQWN0aW9ucyhhY3Rpb25zOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zKSB7XG4gICAgaWYgKGFjdGlvbnM/Lm5ldykge1xuICAgICAgdGhpcy5kZWZhdWx0UGFnZUFjdGlvbnMgPSBbeyBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uLCBhY3Rpb246IHRoaXMub3Blbk5ldy5iaW5kKHRoaXMsIGFjdGlvbnMubmV3KSB9XTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUN1c3RvbUFjdGlvbnNUb1BhZ2VMaXN0QWN0aW9uKFxuICAgIGN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj5cbiAgKTogQXJyYXk8UG9QYWdlQWN0aW9uPiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gY3VzdG9tQWN0aW9ucy5tYXAoY3VzdG9tQWN0aW9uID0+ICh7XG4gICAgICBsYWJlbDogY3VzdG9tQWN0aW9uLmxhYmVsLFxuICAgICAgYWN0aW9uOiB0aGlzLmNhbGxQYWdlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgY3VzdG9tQWN0aW9uKSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmlzRGlzYWJsZVBhZ2VDdXN0b21BY3Rpb24uYmluZCh0aGlzLCBjdXN0b21BY3Rpb24pLFxuICAgICAgLi4uKGN1c3RvbUFjdGlvbi5pY29uICYmIHsgaWNvbjogY3VzdG9tQWN0aW9uLmljb24gfSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybVRhYmxlQ3VzdG9tQWN0aW9uc1RvVGFibGVBY3Rpb25zKFxuICAgIHRhYmxlQ3VzdG9tQWN0aW9uczogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24+XG4gICk6IEFycmF5PFBvVGFibGVBY3Rpb24+IHtcbiAgICByZXR1cm4gdGFibGVDdXN0b21BY3Rpb25zLm1hcCh0YWJsZUN1c3RvbUFjdGlvbiA9PiAoe1xuICAgICAgbGFiZWw6IHRhYmxlQ3VzdG9tQWN0aW9uLmxhYmVsLFxuICAgICAgaWNvbjogdGFibGVDdXN0b21BY3Rpb24uaWNvbixcbiAgICAgIGFjdGlvbjogdGhpcy5jYWxsVGFibGVDdXN0b21BY3Rpb24uYmluZCh0aGlzLCB0YWJsZUN1c3RvbUFjdGlvbiksXG4gICAgICBkaXNhYmxlZDogdGFibGVDdXN0b21BY3Rpb24uZGlzYWJsZWRcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZVBhZ2VDdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGN1c3RvbUFjdGlvbi5zZWxlY3RhYmxlICYmICF0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxQYWdlQ3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uKSB7XG4gICAgaWYgKGN1c3RvbUFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjdXN0b21BY3Rpb24uc2VsZWN0YWJsZSA/IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKSA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3Qgc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24uYWN0aW9uLCBzZWxlY3RlZEl0ZW1zKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbik7XG4gICAgfSBlbHNlIGlmIChjdXN0b21BY3Rpb24udXJsKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBjdXN0b21BY3Rpb24udXJsIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRhYmxlQ3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tVGFibGVBY3Rpb24sIHNlbGVjdGVkSXRlbSkge1xuICAgIGlmIChjdXN0b21BY3Rpb24uYWN0aW9uKSB7XG4gICAgICBjb25zdCBzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuY3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbi5hY3Rpb24sIHNlbGVjdGVkSXRlbSlcbiAgICAgICAgLnN1YnNjcmliZSh1cGRhdGVkSXRlbSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkSXRlbSA9PT0gJ29iamVjdCcgJiYgdXBkYXRlZEl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5VUlUYWJsZUl0ZW0oc2VsZWN0ZWRJdGVtLCB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgdXBkYXRlZEl0ZW0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoY3VzdG9tQWN0aW9uLnVybCkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogY3VzdG9tQWN0aW9uLnVybCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFJlbW92ZUFsbEFjdGlvbigpIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb25zO1xuICAgIGlmICh0aGlzLnNob3dSZW1vdmUoYWN0aW9uLnJlbW92ZUFsbCkpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW1xuICAgICAgICAuLi50aGlzLl9kZWZhdWx0UGFnZUFjdGlvbnMsXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy5wYWdlQWN0aW9uUmVtb3ZlQWxsLFxuICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlQWxsLmJpbmQodGhpcywgYWN0aW9uLnJlbW92ZUFsbCwgYWN0aW9uLmJlZm9yZVJlbW92ZUFsbCksXG4gICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZVJlbW92ZUFsbC5iaW5kKHRoaXMpXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlUmVtb3ZlQWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUYWJsZUFjdGlvbnMoYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICBjb25zdCB2aXNpYmxlUmVtb3ZlID0gdGhpcy5zaG93UmVtb3ZlKGFjdGlvbnMucmVtb3ZlKTtcbiAgICAgIHRoaXMuZGVmYXVsdFRhYmxlQWN0aW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRGV0YWlsLmJpbmQodGhpcywgYWN0aW9ucy5kZXRhaWwpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uVmlldyxcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZGV0YWlsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkVkaXQuYmluZCh0aGlzLCBhY3Rpb25zLmVkaXQpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRWRpdCxcbiAgICAgICAgICB2aXNpYmxlOiAhIXRoaXMuX2FjdGlvbnMuZWRpdFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5EdXBsaWNhdGUuYmluZCh0aGlzLCBhY3Rpb25zLmR1cGxpY2F0ZSksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EdXBsaWNhdGUsXG4gICAgICAgICAgdmlzaWJsZTogISF0aGlzLl9hY3Rpb25zLmR1cGxpY2F0ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmNvbmZpcm1SZW1vdmUuYmluZCh0aGlzLCBhY3Rpb25zLnJlbW92ZSwgYWN0aW9ucy5iZWZvcmVSZW1vdmUpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlLFxuICAgICAgICAgIHNlcGFyYXRvcjogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICB2aXNpYmxlOiB2aXNpYmxlUmVtb3ZlXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YUZyb21BUEkoKSB7XG4gICAgY29uc3QgeyBzZXJ2aWNlQXBpOiBzZXJ2aWNlQXBpRnJvbVJvdXRlLCBzZXJ2aWNlTWV0YWRhdGFBcGksIHNlcnZpY2VMb2FkQXBpIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE7XG5cbiAgICBjb25zdCBvbkxvYWQgPSBzZXJ2aWNlTG9hZEFwaSB8fCB0aGlzLm9uTG9hZDtcbiAgICB0aGlzLnNlcnZpY2VBcGkgPSBzZXJ2aWNlQXBpRnJvbVJvdXRlIHx8IHRoaXMuc2VydmljZUFwaTtcblxuICAgIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuY29uZmlnU2VydmljZUFwaSh7IGVuZHBvaW50OiB0aGlzLnNlcnZpY2VBcGksIG1ldGFkYXRhOiBzZXJ2aWNlTWV0YWRhdGFBcGkgfSk7XG5cbiAgICBjb25zdCBtZXRhZGF0YSQgPSB0aGlzLmdldE1ldGFkYXRhKHNlcnZpY2VBcGlGcm9tUm91dGUsIG9uTG9hZCk7XG4gICAgY29uc3QgZGF0YSQgPSB0aGlzLmxvYWREYXRhKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgbWV0YWRhdGEkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsRmlsdGVycyA9IHRoaXMuZ2V0SW5pdGlhbFZhbHVlc0Zyb21GaWx0ZXIoKTtcblxuICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhpbml0aWFsRmlsdGVycykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRhJDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFZhbHVlc0Zyb21GaWx0ZXIoKSB7XG4gICAgY29uc3QgaW5pdGlhbEZpbHRlcnMgPSB0aGlzLmZpbHRlcnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgaXRlbSkgPT4gT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2l0ZW0ucHJvcGVydHldOiBpdGVtLmluaXRWYWx1ZSB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIE9iamVjdC5rZXlzKGluaXRpYWxGaWx0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIWluaXRpYWxGaWx0ZXJzW2tleV0pIHtcbiAgICAgICAgZGVsZXRlIGluaXRpYWxGaWx0ZXJzW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbEZpbHRlcnM7XG4gIH1cblxuICBwcml2YXRlIGxvYWRPcHRpb25zT25Jbml0aWFsaXplKG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbikge1xuICAgIGlmIChvbkxvYWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBvRHluYW1pY1BhZ2VPcHRpb25zKG9uTG9hZCkucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlUG9PcHRpb24gPT5cbiAgICAgICAgICB0aGlzLnBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLmNoYW5nZU9yaWdpbmFsT3B0aW9uc1RvTmV3T3B0aW9ucyh0aGlzLCByZXNwb25zZVBvT3B0aW9uKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UG9EeW5hbWljUGFnZU9wdGlvbnMob25Mb2FkOiBVcmxPclBvQ3VzdG9taXphdGlvbkZ1bmN0aW9uKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zPiB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb246IFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnMgPSB7XG4gICAgICBmaWVsZHM6IHRoaXMuZmllbGRzLFxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLFxuICAgICAgYnJlYWRjcnVtYjogdGhpcy5icmVhZGNydW1iLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICBrZWVwRmlsdGVyczogdGhpcy5rZWVwRmlsdGVycyxcbiAgICAgIGNvbmNhdEZpbHRlcnM6IHRoaXMuY29uY2F0RmlsdGVycyxcbiAgICAgIHBhZ2VDdXN0b21BY3Rpb25zOiB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zLFxuICAgICAgdGFibGVDdXN0b21BY3Rpb25zOiB0aGlzLnRhYmxlQ3VzdG9tQWN0aW9ucyxcbiAgICAgIHF1aWNrU2VhcmNoV2lkdGg6IHRoaXMucXVpY2tTZWFyY2hXaWR0aFxuICAgIH07XG5cbiAgICBjb25zdCBwYWdlT3B0aW9uU2NoZW1hOiBQb1BhZ2VEeW5hbWljT3B0aW9uc1NjaGVtYTxQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zPiA9IHtcbiAgICAgIHNjaGVtYTogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdmaWVsZHMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAncHJvcGVydHknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2FjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2JyZWFkY3J1bWInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RpdGxlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdrZWVwRmlsdGVycydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAncXVpY2tTZWFyY2hXaWR0aCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnY29uY2F0RmlsdGVycydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAncGFnZUN1c3RvbUFjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAnbGFiZWwnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3RhYmxlQ3VzdG9tQWN0aW9ucycsXG4gICAgICAgICAgbWVyZ2U6IHRydWUsXG4gICAgICAgICAga2V5Rm9yTWVyZ2U6ICdsYWJlbCdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZS5nZXRDdXN0b21PcHRpb25zKG9uTG9hZCwgb3JpZ2luYWxPcHRpb24sIHBhZ2VPcHRpb25TY2hlbWEpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93UmVtb3ZlPFQ+KGFjdGlvblJlbW92ZTogVCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IGFjdGlvblJlbW92ZSA/PyBmYWxzZTtcbiAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyVmFsdWUoZmlsdGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLm1hcChpdGVtID0+IHtcbiAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkoaXRlbS5wcm9wZXJ0eSkpIHtcbiAgICAgICAgaXRlbS5pbml0VmFsdWUgPSBmaWx0ZXJbaXRlbS5wcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2VBY3Rpb25zKCkge1xuICAgIHRoaXMucGFnZUFjdGlvbnMgPSBbLi4udGhpcy5fZGVmYXVsdFBhZ2VBY3Rpb25zLCAuLi50aGlzLl9jdXN0b21QYWdlTGlzdEFjdGlvbnNdO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZUFjdGlvbnMoKSB7XG4gICAgY29uc3QgZGVmYXVsdFRhYmxlQWN0aW9uc1dpdGhvdXRBY3Rpb25EZWxldGUgPSB0aGlzLl9kZWZhdWx0VGFibGVBY3Rpb25zLmZpbHRlcihcbiAgICAgIHRhYmxlQWN0aW9uID0+IHRhYmxlQWN0aW9uLmxhYmVsICE9PSB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlXG4gICAgKTtcblxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGVsZXRlID0gdGhpcy5fZGVmYXVsdFRhYmxlQWN0aW9ucy5maW5kKFxuICAgICAgdGFibGVBY3Rpb24gPT4gdGFibGVBY3Rpb24ubGFiZWwgPT09IHRoaXMubGl0ZXJhbHMudGFibGVBY3Rpb25EZWxldGVcbiAgICApO1xuXG4gICAgY29uc3QgbmV3VGFibGVBY3Rpb25zID0gWy4uLmRlZmF1bHRUYWJsZUFjdGlvbnNXaXRob3V0QWN0aW9uRGVsZXRlLCAuLi50aGlzLl9jdXN0b21UYWJsZUFjdGlvbnNdO1xuXG4gICAgaWYgKHRhYmxlQWN0aW9uRGVsZXRlKSB7XG4gICAgICBuZXdUYWJsZUFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbkRlbGV0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZUFjdGlvbnMgPSBuZXdUYWJsZUFjdGlvbnM7XG4gIH1cbn1cbiIsIjxwby1wYWdlLWR5bmFtaWMtc2VhcmNoXG4gIFtwLWFjdGlvbnNdPVwicGFnZUFjdGlvbnNcIlxuICBbcC1icmVhZGNydW1iXT1cImJyZWFkY3J1bWJcIlxuICBbcC1maWx0ZXJzXT1cImZpbHRlcnNcIlxuICBbcC1rZWVwLWZpbHRlcnNdPVwia2VlcEZpbHRlcnNcIlxuICBbcC1jb25jYXQtZmlsdGVyc109XCJjb25jYXRGaWx0ZXJzXCJcbiAgW3AtcXVpY2stc2VhcmNoLXdpZHRoXT1cInF1aWNrU2VhcmNoV2lkdGhcIlxuICBbcC10aXRsZV09XCJ0aXRsZVwiXG4gIChwLWFkdmFuY2VkLXNlYXJjaCk9XCJvbkFkdmFuY2VkU2VhcmNoKCRldmVudClcIlxuICAocC1jaGFuZ2UtZGlzY2xhaW1lcnMpPVwib25DaGFuZ2VEaXNjbGFpbWVycygkZXZlbnQpXCJcbiAgKHAtcXVpY2stc2VhcmNoKT1cIm9uUXVpY2tTZWFyY2goJGV2ZW50KVwiXG4+XG4gIDxwby10YWJsZVxuICAgIFtwLXNvcnRdPVwidHJ1ZVwiXG4gICAgW3AtYWN0aW9uc109XCJ0YWJsZUFjdGlvbnNcIlxuICAgIFtwLXNlbGVjdGFibGVdPVwiZW5hYmxlU2VsZWN0aW9uVGFibGVcIlxuICAgIFtwLWNvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3AtaXRlbXNdPVwiaXRlbXNcIlxuICAgIFtwLXNob3ctbW9yZS1kaXNhYmxlZF09XCIhaGFzTmV4dFwiXG4gICAgKHAtc2hvdy1tb3JlKT1cInNob3dNb3JlKClcIlxuICAgIChwLXNvcnQtYnkpPVwib25Tb3J0KCRldmVudClcIlxuICA+XG4gIDwvcG8tdGFibGU+XG48L3BvLXBhZ2UtZHluYW1pYy1zZWFyY2g+XG4iXX0=
|
|
819
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tcGFnZS1keW5hbWljLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RlbXBsYXRlcy9zcmMvbGliL2NvbXBvbmVudHMvcG8tcGFnZS1keW5hbWljLXRhYmxlL3BvLXBhZ2UtZHluYW1pYy10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZW1wbGF0ZXMvc3JjL2xpYi9jb21wb25lbnRzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsWUFBWSxFQUFjLEtBQUssRUFBVSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUNMLFlBQVksRUFRWixxQkFBcUIsRUFDckIsZUFBZSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFMUcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0RBQXdELENBQUM7Ozs7Ozs7O0FBa0I5Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlFRztBQU1ILE1B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QjtJQUZDLFlBQVksRUFBRTtnRUFFZTtBQTBCOUI7SUFGQyxZQUFZLEVBQUU7a0VBRWdCO3VGQWxGcEIsMkJBQTJCO2NBTHZDLFNBQVM7MkJBQ0UsdUJBQXVCLGFBRXRCLENBQUMsb0JBQW9CLENBQUM7bVRBZ0NoQixNQUFNO2tCQUF0QixLQUFLO21CQUFDLFFBQVE7WUFhZixXQUFXO2tCQURWLEtBQUs7bUJBQUMsZ0JBQWdCO1lBY3ZCLFdBQVc7a0JBRFYsS0FBSzttQkFBQyxpQkFBaUI7WUEyQnhCLGFBQWE7a0JBRFosS0FBSzttQkFBQyxrQkFBa0I7WUFxREQsT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBOEJrQixpQkFBaUI7a0JBQXBELEtBQUs7bUJBQUMsdUJBQXVCO1lBNEJPLGtCQUFrQjtrQkFBdEQsS0FBSzttQkFBQyx3QkFBd0I7WUFtQkksZ0JBQWdCO2tCQUFsRCxLQUFLO21CQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSwgRU1QVFksIGNvbmNhdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgc3dpdGNoTWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIElucHV0Qm9vbGVhbixcbiAgUG9EaWFsb2dDb25maXJtT3B0aW9ucyxcbiAgUG9EaWFsb2dTZXJ2aWNlLFxuICBQb0xhbmd1YWdlU2VydmljZSxcbiAgUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxuICBQb1BhZ2VBY3Rpb24sXG4gIFBvVGFibGVBY3Rpb24sXG4gIFBvVGFibGVDb2x1bW5Tb3J0LFxuICBQb1RhYmxlQ29sdW1uU29ydFR5cGUsXG4gIHBvTG9jYWxlRGVmYXVsdFxufSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG5cbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNEZXRhaWxDb21wb25lbnQgfSBmcm9tICcuLi9wby1wYWdlLWR5bmFtaWMtZGV0YWlsL3BvLXBhZ2UtZHluYW1pYy1kZXRhaWwuY29tcG9uZW50JztcblxuaW1wb3J0IHsgcG9QYWdlRHluYW1pY1RhYmxlTGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUtbGl0ZXJhbHMnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9wby1wYWdlLWR5bmFtaWMtbGlzdC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLXBhZ2UtZHluYW1pYy9wby1wYWdlLWR5bmFtaWMuc2VydmljZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1hY3Rpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvcG8tcGFnZS1jdXN0b21pemF0aW9uL3BvLXBhZ2UtY3VzdG9taXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNPcHRpb25zU2NoZW1hIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wby1wYWdlLWN1c3RvbWl6YXRpb24vcG8tcGFnZS1keW5hbWljLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZU1ldGFEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1tZXRhZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1hY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRWRpdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWVkaXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZU5ldyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLW5ldy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtcmVtb3ZlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEZXRhaWwgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tcGFnZS1keW5hbWljLXRhYmxlLWJlZm9yZS1kZXRhaWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtYmVmb3JlLWR1cGxpY2F0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlUmVtb3ZlQWxsIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1iZWZvcmUtcmVtb3ZlLWFsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXBhZ2UtZHluYW1pYy10YWJsZS1jdXN0b20tYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21UYWJsZUFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1wYWdlLWR5bmFtaWMtdGFibGUtY3VzdG9tLXRhYmxlLWFjdGlvbi5pbnRlcmZhY2UnO1xuXG50eXBlIFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24gPSBzdHJpbmcgfCAoKCkgPT4gUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyk7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvUGFnZUR5bmFtaWNMaXN0QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLXBhZ2UtZHluYW1pYy10YWJsZWAgw6kgdW1hIHDDoWdpbmEgcXVlIGV4aWJlIHVtYSBsaXN0YSBkZSByZWdpc3Ryb3MgZW0gdW1hIHRhYmVsYSBiYXNlYWRvIGVtIHVtYSBsaXN0YSBkZSBmaWVsZHMsXG4gKiBvIG1lc21vIHRhbWLDqW0gc3Vwb3J0YSBtZXRhZGFkb3MgY29uZm9ybWUgZXNwZWNpZmljYWRvIG5hIGRvY3VtZW50YcOnw6NvLlxuICpcbiAqICMjIyBVdGlsaXphw6fDo28gdmlhIHJvdGFcbiAqXG4gKiBBbyB1dGlsaXphciBhcyByb3RhcyBwYXJhIGNhcnJlZ2FyIG8gdGVtcGxhdGUsIG8gYHBhZ2UtZHluYW1pYy10YWJsZWAgZGlzcG9uaWJpbGl6YSBwcm9wcmllZGFkZXMgcGFyYVxuICogcG9kZXIgZXNwZWNpZmljYXIgbyBlbmRwb2ludCBkb3MgZGFkb3MgZSBkb3MgbWV0YWRhZG9zLiBFeGVtcGxvIGRlIHV0aWxpemHDp8OjbzpcbiAqXG4gKiBPIGNvbXBvbmVudGUgcHJpbWVpcm8gaXLDoSBjYXJyZWdhciBvIG1ldGFkYWRvIGRhIHJvdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgc2VydmljZU1ldGFkYXRhQXBpXG4gKiBlIGRlcG9pcyBpcsOhIGJ1c2NhciBkYSByb3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHNlcnZpY2VMb2FkQXBpXG4gKlxuICogPiBDYXNvIG8gc2Vydmlkb3IgcmV0b3JuYXIgdW0gZXJybyBhbyByZWN1cGVyYXIgbyBtZXRhZGFkb3MsIHNlcsOhIHJlcGFzc2FkbyBvIG1ldGFkYWRvcyBzYWx2byBlbSBjYWNoZSxcbiAqIHNlIG8gY2FjaGUgbsOjbyBleGlzdGUgc2Vyw6EgZGlzcGFyYWRvIHVtYSBub3RpZmljYcOnw6NvLlxuICpcbiAqIGBgYFxuICoge1xuICogICBwYXRoOiAncGVvcGxlJyxcbiAqICAgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljVGFibGVDb21wb25lbnQsXG4gKiAgIGRhdGE6IHtcbiAqICAgICBzZXJ2aWNlQXBpOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxL3Blb3BsZScsIC8vIGVuZHBvaW50IGRvcyBkYWRvc1xuICogICAgIHNlcnZpY2VNZXRhZGF0YUFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC92MS9tZXRhZGF0YScsIC8vIGVuZHBvaW50IGRvcyBtZXRhZGFkb3MgdXRpbGl6YW5kbyBvIG3DqXRvZG8gSFRUUCBHZXRcbiAqICAgICBzZXJ2aWNlTG9hZEFwaTogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9sb2FkLW1ldGFkYXRhJyAvLyBlbmRwb2ludCBkZSBjdXN0b21pemHDp8O1ZXMgZG9zIG1ldGFkYWRvcyB1dGlsaXphbmRvIG8gbcOpdG9kbyBIVFRQIFBvc3RcbiAqICAgfVxuICogfVxuICpcbiAqIGBgYFxuICpcbiAqIEEgcmVxdWlzacOnw6NvIGRvcyBtZXRhZGFkb3Mgw6kgZmVpdGEgbmEgaW5pY2lhbGl6YcOnw6NvIGRvIHRlbXBsYXRlIHBhcmEgYnVzY2FyIG9zIG1ldGFkYWRvcyBkYSBww6FnaW5hIHBhc3NhbmRvIG9cbiAqIHRpcG8gZG8gbWV0YWRhZG8gZXNwZXJhZG8gZSBhIHZlcnPDo28gY2FjaGVhZGEgcGVsbyBicm93c2VyLlxuICpcbiAqIE8gZm9ybWF0byBlc3BlcmFkbyBuYSByZXNwb3N0YSBkYSByZXF1aXNpw6fDo28gZXN0w6EgZXNwZWNpZmljYWRvIG5hIGludGVyZmFjZVxuICogW1BvUGFnZUR5bmFtaWNUYWJsZU1ldGFkYXRhXSgvZG9jdW1lbnRhdGlvbi9wby1wYWdlLWR5bmFtaWMtdGFibGUjcG8tcGFnZS1keW5hbWljLXRhYmxlLW1ldGFkYXRhKS4gUG9yIGV4ZW1wbG86XG4gKlxuICogYGBgXG4gKiAge1xuICogICB2ZXJzaW9uOiAxLFxuICogICB0aXRsZTogJ1BlcnNvbiBUYWJsZScsXG4gKiAgIGZpZWxkczogW1xuICogICAgIHsgcHJvcGVydHk6ICdpZCcsIGtleTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnc3RhdHVzJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduYW1lJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICduaWNrbmFtZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnYmlydGhkYXRlJywgbGFiZWw6ICdCaXJ0aCBkYXRlJyB9LFxuICogICAgIHsgcHJvcGVydHk6ICdnZW5yZScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY2l0eScgfSxcbiAqICAgICB7IHByb3BlcnR5OiAnY291bnRyeScgfVxuICogICBdLFxuICogICBrZWVwRmlsdGVyczogdHJ1ZVxuICogfVxuICogYGBgXG4gKlxuICogPiBDYXNvIG8gZW5kcG9pbnQgZG9zIG1ldGFkYWRvcyBuw6NvIHNlamEgZXNwZWNpZmljYWRvLCBzZXLDoSBmZWl0byB1bWEgcmVxdWlzacOnw6NvIHV0aWxpemFuZG8gbyBgc2VydmljZUFwaWAgZGEgc2VndWludGUgZm9ybWE6XG4gKiBgYGBcbiAqIEdFVCB7ZW5kLXBvaW50fS9tZXRhZGF0YT90eXBlPWxpc3QmdmVyc2lvbj17dmVyc2lvbn1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpY1wiIHRpdGxlPVwiUE8gUGFnZSBEeW5hbWljIFRhYmxlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtYmFzaWMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnNcIiB0aXRsZT1cIlBPIFBhZ2UgRHluYW1pYyBUYWJsZSAtIFVzZXJzXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMvc2FtcGxlLXBvLXBhZ2UtZHluYW1pYy10YWJsZS11c2Vycy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tcGFnZS1keW5hbWljLXRhYmxlLXVzZXJzL3NhbXBsZS1wby1wYWdlLWR5bmFtaWMtdGFibGUtdXNlcnMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXBhZ2UtZHluYW1pYy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1wYWdlLWR5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb1BhZ2VEeW5hbWljU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgUG9QYWdlRHluYW1pY1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgUG9QYWdlRHluYW1pY0xpc3RCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogRnVuw6fDo28gb3Ugc2VydmnDp28gcXVlIHNlcsOhIGV4ZWN1dGFkbyBuYSBpbmljaWFsaXphw6fDo28gZG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogQSBwcm9wcmllZGFkZSBhY2VpdGEgb3Mgc2VndWludGVzIHRpcG9zOlxuICAgKiAtIGBzdHJpbmdgOiAqRW5kcG9pbnQqIHVzYWRvIHBlbG8gY29tcG9uZW50ZSBwYXJhIHJlcXVpc2nDp8OjbyB2aWEgYFBPU1RgLlxuICAgKiAtIGBmdW5jdGlvbmA6IE3DqXRvZG8gcXVlIHNlcsOhIGV4ZWN1dGFkby5cbiAgICpcbiAgICogTyByZXRvcm5vIGRlc3RhIGZ1bsOnw6NvIGRldmUgc2VyIGRvIHRpcG8gYFBvUGFnZUR5bmFtaWNUYWJsZU9wdGlvbnNgLFxuICAgKiBvbmRlIG8gdXN1w6FyaW8gcG9kZXLDoSBjdXN0b21pemFyIG5vdm9zIGNhbXBvcywgYnJlYWRjcnVtYiwgdGl0bGUgZSBhY3Rpb25zXG4gICAqXG4gICAqIFBvciBleGVtcGxvOlxuICAgKlxuICAgKiBgYGBcbiAgICogZ2V0UGFnZU9wdGlvbnMoKTogUG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucyB7XG4gICAqIHJldHVybiB7XG4gICAqICAgYWN0aW9uczpcbiAgICogICAgIHsgbmV3OiAnbmV3JywgZWRpdDogJ2VkaXQvOmlkJywgcmVtb3ZlOiB0cnVlIH0sXG4gICAqICAgZmllbGRzOiBbXG4gICAqICAgICB7IHByb3BlcnR5OiAnaWRDYXJkJywgZ3JpZENvbHVtbnM6IDYgfVxuICAgKiAgIF1cbiAgICogfTtcbiAgICogfVxuICAgKlxuICAgKiBgYGBcbiAgICogUGFyYSByZWZlcmVuY2lhciBhIHN1YSBmdW7Dp8OjbyB1dGlsaXplIGEgcHJvcHJpZWRhZGUgYGJpbmRgLCBwb3IgZXhlbXBsbzpcbiAgICogYGBgXG4gICAqICBbcC1sb2FkXT1cIm9uTG9hZE9wdGlvbnMuYmluZCh0aGlzKVwiXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWQnKSBvbkxvYWQ6IHN0cmluZyB8ICgoKSA9PiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBNYW50w6ltIG5hIG1vZGFsIGRlIGBCdXNjYSBBdmFuw6dhZGFgIG9zIHZhbG9yZXMgcHJlZW5jaGlkb3MgZG8gw7psdGltbyBmaWx0cm8gcmVhbGl6YWRvIHBlbG8gdXN1w6FyaW8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBASW5wdXQoJ3Ata2VlcC1maWx0ZXJzJylcbiAga2VlcEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIGEgY29sdW5hIGRlIGHDp8O1ZXMgZmljYXLDoSBubyBsYWRvIGRpcmVpdG8gZGEgdGFiZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXRCb29sZWFuKClcbiAgQElucHV0KCdwLWFjdGlvbnMtcmlnaHQnKVxuICBhY3Rpb25SaWdodD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGEgdXRpbGl6YcOnw6NvIGRhIHBlc3F1aXNhIHLDoXBpZGEganVudG8gY29tIGEgcGVzcXVpc2EgYXZhbsOnYWRhLlxuICAgKlxuICAgKiBEZXN0YSBmb3JtYSwgYW8gdGVyIHVtYSBwZXNxdWlzYSBhdmFuw6dhZGEgZXN0YWJlbGVjaWRhIGUgc2VyXG4gICAqIHByZWVuY2hpZG8gYSBwZXNxdWlzYSByw6FwaWRhLCBvIGZpbHRybyBzZXLDoSBjb25jYXRlbmFkbyBhZGljaW9uYW5kbyBhIHBlc3F1aXNhXG4gICAqIHLDoXBpZGEgdGFtYsOpbSBuYSBsaXN0YSBkZSBgZGlzY2xhaW1lcnNgIGEgYXBsaWNhbmRvIHVtYSBub3ZhIGJ1c2NhIGNvbSBhIGNvbmNhdGVuYcOnw6NvLlxuICAgKlxuICAgKiBQb3IgZXhlbXBsbywgY29tIG9zIHNlZ3VpbnRlcyBmaWx0cm9zIGFwbGljYWRvczpcbiAgICogICAtIGZpbHRybyBhdmFuw6dhZG86IGB7IG5hbWU6ICdNaWtlJywgYWdlOiAnMTInIH1gXG4gICAqICAgLSBmaWx0cm8gcsOhcGlkbzogYHsgc2VhcmNoOiAncGFwZXInIH1gXG4gICAqXG4gICAqIEEgcmVxdWlzacOnw6NvIGRvcyBkYWRvcyBuYSBBUEkgZmljYXLDoSBjb20gb3MgcGFyw6JtZXRyb3M6XG4gICAqIGBgYFxuICAgKiBwYWdlPTEmcGFnZVNpemU9MTAmbmFtZT1NaWtlJmFnZT0xMiZzZWFyY2g9cGFwZXJcbiAgICogYGBgXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dEJvb2xlYW4oKVxuICBASW5wdXQoJ3AtY29uY2F0LWZpbHRlcnMnKVxuICBjb25jYXRGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgaGFzTmV4dCA9IGZhbHNlO1xuICBpdGVtcyA9IFtdO1xuICBsaXRlcmFscztcbiAgcGFnZUFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcbiAgdGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgX2FjdGlvbnM6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMgPSB7fTtcbiAgcHJpdmF0ZSBfcGFnZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfcXVpY2tTZWFyY2hXaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIF90YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPiA9IFtdO1xuXG4gIHByaXZhdGUgcGFnZTogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBwYXJhbXMgPSB7fTtcbiAgcHJpdmF0ZSBzb3J0ZWRDb2x1bW46IFBvVGFibGVDb2x1bW5Tb3J0O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgaGFzQ3VzdG9tQWN0aW9uV2l0aFNlbGVjdGFibGUgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jdXN0b21QYWdlTGlzdEFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfY3VzdG9tVGFibGVBY3Rpb25zOiBBcnJheTxQb1RhYmxlQWN0aW9uPiA9IFtdO1xuICBwcml2YXRlIF9kZWZhdWx0UGFnZUFjdGlvbnM6IEFycmF5PFBvUGFnZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFRhYmxlQWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcblxuICBwcml2YXRlIHNldCBkZWZhdWx0UGFnZUFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9kZWZhdWx0UGFnZUFjdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VBY3Rpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldCBkZWZhdWx0VGFibGVBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1RhYmxlQWN0aW9uPikge1xuICAgIHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlQWN0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgY3VzdG9tUGFnZUxpc3RBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1BhZ2VBY3Rpb24+KSB7XG4gICAgdGhpcy5fY3VzdG9tUGFnZUxpc3RBY3Rpb25zID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVQYWdlQWN0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgY3VzdG9tVGFibGVBY3Rpb25zKHZhbHVlOiBBcnJheTxQb1RhYmxlQWN0aW9uPikge1xuICAgIHRoaXMuX2N1c3RvbVRhYmxlQWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlVGFibGVBY3Rpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBw6fDtWVzIGRhIHDDoWdpbmEgZSBkYSB0YWJlbGEuXG4gICAqID4gQ2FzbyB1dGlsaXphciBhIGHDp8OjbyBwYWRyw6NvIGRlIGV4Y2x1aXIsIGEgbWVzbWEgc2Vyw6EgZXhpYmlkYSBwb3Igw7psdGltbyBuYSB0YWJlbGEuXG4gICAqL1xuICBASW5wdXQoJ3AtYWN0aW9ucycpIHNldCBhY3Rpb25zKHZhbHVlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zKSB7XG4gICAgdGhpcy5fYWN0aW9ucyA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHt9O1xuXG4gICAgdGhpcy5zZXRQYWdlQWN0aW9ucyh0aGlzLmFjdGlvbnMpO1xuICAgIHRoaXMuc2V0UmVtb3ZlQWxsQWN0aW9uKCk7XG4gICAgdGhpcy5zZXRUYWJsZUFjdGlvbnModGhpcy5hY3Rpb25zKTtcbiAgfVxuXG4gIGdldCBhY3Rpb25zKCk6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGUgYcOnw7VlcyBjdXN0b21pemFkYXMgZGEgcMOhZ2luYSBxdWUgc2Vyw6NvIGluY29ycG9yYWRhcyDDoHMgYcOnw7Vlc1xuICAgKiBpbmZvcm1hZGFzIGF0cmF2w6lzIGRhIHByb3ByaWVkYWRlIGBwLWFjdGlvbnNgLlxuICAgKlxuICAgKiBFc3NhcyBhw6fDtWVzIGZpY2FtIGxvY2FsaXphZGFzIG5hIHBhcnRlIHN1cGVyaW9yIGRhIHDDoWdpbmEgZW0gYm90w7VlcyBjb20gYcOnw7Vlcy5cbiAgICpcbiAgICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XG4gICAqIGBgYFxuICAgKiBbXG4gICAqICB7IGxhYmVsOiAnRXhwb3J0JywgYWN0aW9uOiB0aGlzLmV4cG9ydC5iaW5kKHRoaXMpIH0sXG4gICAqICB7IGxhYmVsOiAnUHJpbnQnLCBhY3Rpb246IHRoaXMucHJpbnQuYmluZCh0aGlzKSB9XG4gICAqIF07XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLXBhZ2UtY3VzdG9tLWFjdGlvbnMnKSBzZXQgcGFnZUN1c3RvbUFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbj4pIHtcbiAgICB0aGlzLl9wYWdlQ3VzdG9tQWN0aW9ucyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcblxuICAgIHRoaXMuY3VzdG9tUGFnZUxpc3RBY3Rpb25zID0gdGhpcy50cmFuc2Zvcm1DdXN0b21BY3Rpb25zVG9QYWdlTGlzdEFjdGlvbih0aGlzLnBhZ2VDdXN0b21BY3Rpb25zKTtcbiAgICB0aGlzLmhhc0N1c3RvbUFjdGlvbldpdGhTZWxlY3RhYmxlID0gdGhpcy5wYWdlQ3VzdG9tQWN0aW9ucy5zb21lKGN1c3RvbUFjdGlvbiA9PiBjdXN0b21BY3Rpb24uc2VsZWN0YWJsZSk7XG4gIH1cblxuICBnZXQgcGFnZUN1c3RvbUFjdGlvbnMoKTogQXJyYXk8UG9QYWdlRHluYW1pY1RhYmxlQ3VzdG9tQWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VDdXN0b21BY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGUgYcOnw7VlcyBjdXN0b21pemFkYXMgbmEgdGFiZWxhIGRhIHDDoWdpbmEgcXVlIHNlcsOjbyBpbmNvcnBvcmFkYXMgw6BzIGHDp8O1ZXNcbiAgICogaW5mb3JtYWRhcyBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1hY3Rpb25zYC5cbiAgICpcbiAgICogRXhlbXBsbyBkZSB1dGlsaXphw6fDo286XG4gICAqIGBgYFxuICAgKiBbXG4gICAqICB7IGxhYmVsOiAnQXBwbHkgZGlzY291bnQnLCBhY3Rpb246IHRoaXMuYXBwbHlEaXNjb3VudC5iaW5kKHRoaXMpIH0sXG4gICAqICB7IGxhYmVsOiAnRGV0YWlscycsIGFjdGlvbjogdGhpcy5kZXRhaWxzLmJpbmQodGhpcykgfVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICogPiBDYXNvIHV0aWxpemFyIGEgYcOnw6NvIHBhZHLDo28gZGUgZXhjbHVpciwgYSBtZXNtYSBzZXLDoSBleGliaWRhIHBvciDDumx0aW1vIG5hIHRhYmVsYS5cbiAgICovXG4gIEBJbnB1dCgncC10YWJsZS1jdXN0b20tYWN0aW9ucycpIHNldCB0YWJsZUN1c3RvbUFjdGlvbnModmFsdWU6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPikge1xuICAgIHRoaXMuX3RhYmxlQ3VzdG9tQWN0aW9ucyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcblxuICAgIHRoaXMuY3VzdG9tVGFibGVBY3Rpb25zID0gdGhpcy50cmFuc2Zvcm1UYWJsZUN1c3RvbUFjdGlvbnNUb1RhYmxlQWN0aW9ucyh0aGlzLnRhYmxlQ3VzdG9tQWN0aW9ucyk7XG4gIH1cblxuICBnZXQgdGFibGVDdXN0b21BY3Rpb25zKCk6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlQ3VzdG9tQWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIExhcmd1cmEgZG8gY2FtcG8gZGUgYnVzY2EsIHV0aWxpemFuZG8gbyAqR3JpZCBTeXN0ZW0qLFxuICAgKiBlIGxpbWl0YWRvIGFvIG3DoXhpbW8gZGUgNiBjb2x1bmFzLiBPIHRhbWFuaG8gbcOtbmltbyDDqSBjb250cm9sYWRvXG4gICAqIGNvbmZvcm1lIHJlc29sdcOnw6NvIGRlIHRlbGEgcGFyYSBtYW50ZXIgYSBjb25zaXN0w6puY2lhIGRvIGxheW91dC5cbiAgICovXG4gIEBJbnB1dCgncC1xdWljay1zZWFyY2gtd2lkdGgnKSBzZXQgcXVpY2tTZWFyY2hXaWR0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcXVpY2tTZWFyY2hXaWR0aCA9IHV0aWwuY29udmVydFRvSW50KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBxdWlja1NlYXJjaFdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1aWNrU2VhcmNoV2lkdGg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcG9EaWFsb2dTZXJ2aWNlOiBQb0RpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb05vdGlmaWNhdGlvbjogUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2U6IFBvUGFnZUN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2U6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IGxhbmd1YWdlID0gbGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKTtcblxuICAgIHRoaXMubGl0ZXJhbHMgPSB7XG4gICAgICAuLi5wb1BhZ2VEeW5hbWljVGFibGVMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgIC4uLnBvUGFnZUR5bmFtaWNUYWJsZUxpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YUZyb21BUEkoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25BZHZhbmNlZFNlYXJjaChmaWx0ZXIpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9hZERhdGEoeyBwYWdlOiAxLCAuLi5maWx0ZXIgfSkuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMucGFyYW1zID0gZmlsdGVyO1xuXG4gICAgaWYgKHRoaXMua2VlcEZpbHRlcnMpIHtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyVmFsdWUoZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZURpc2NsYWltZXJzKGRpc2NsYWltZXJzKSB7XG4gICAgY29uc3QgZmlsdGVyID0ge307XG5cbiAgICBkaXNjbGFpbWVycy5mb3JFYWNoKGRpc2NsYWltZXIgPT4ge1xuICAgICAgZmlsdGVyW2Rpc2NsYWltZXIucHJvcGVydHldID0gZGlzY2xhaW1lci52YWx1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMub25BZHZhbmNlZFNlYXJjaChmaWx0ZXIpO1xuICB9XG5cbiAgb25RdWlja1NlYXJjaCh0ZXJtVHlwZWRJblF1aWNrU2VhcmNoKSB7XG4gICAgY29uc3QgcXVpY2tTZWFyY2hQYXJhbSA9IHRlcm1UeXBlZEluUXVpY2tTZWFyY2ggPyB7IHNlYXJjaDogdGVybVR5cGVkSW5RdWlja1NlYXJjaCB9IDoge307XG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLmNvbmNhdEZpbHRlcnMgPyB7IC4uLnRoaXMucGFyYW1zLCAuLi5xdWlja1NlYXJjaFBhcmFtIH0gOiB7IC4uLnF1aWNrU2VhcmNoUGFyYW0gfTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2FkRGF0YSh0ZXJtVHlwZWRJblF1aWNrU2VhcmNoID8geyBwYWdlOiAxLCAuLi50aGlzLnBhcmFtcyB9IDogdW5kZWZpbmVkKS5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBvblNvcnQoc29ydGVkQ29sdW1uOiBQb1RhYmxlQ29sdW1uU29ydCkge1xuICAgIHRoaXMuc29ydGVkQ29sdW1uID0gc29ydGVkQ29sdW1uO1xuICB9XG5cbiAgc2hvd01vcmUoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvYWREYXRhKHsgcGFnZTogKyt0aGlzLnBhZ2UsIC4uLnRoaXMucGFyYW1zIH0pLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGdldCBlbmFibGVTZWxlY3Rpb25UYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBY3Rpb25SZW1vdmVBbGwgfHwgdGhpcy5oYXNDdXN0b21BY3Rpb25XaXRoU2VsZWN0YWJsZTtcbiAgfVxuXG4gIGdldCBoYXNBY3Rpb25SZW1vdmVBbGwoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5hY3Rpb25zLnJlbW92ZUFsbDtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZShcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ10sXG4gICAgaXRlbVxuICApIHtcbiAgICBjb25zdCBjb25maXJtT3B0aW9uczogUG9EaWFsb2dDb25maXJtT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVUaXRsZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubGl0ZXJhbHMuY29uZmlybVJlbW92ZU1lc3NhZ2UsXG4gICAgICBjb25maXJtOiB0aGlzLnJlbW92ZS5iaW5kKHRoaXMsIGl0ZW0sIGFjdGlvblJlbW92ZSwgYWN0aW9uQmVmb3JlUmVtb3ZlKVxuICAgIH07XG5cbiAgICB0aGlzLnBvRGlhbG9nU2VydmljZS5jb25maXJtKGNvbmZpcm1PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybVJlbW92ZUFsbChcbiAgICBhY3Rpb25SZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZUFsbDogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cbiAgKSB7XG4gICAgY29uc3QgY29uZmlybU9wdGlvbnM6IFBvRGlhbG9nQ29uZmlybU9wdGlvbnMgPSB7XG4gICAgICB0aXRsZTogdGhpcy5saXRlcmFscy5jb25maXJtUmVtb3ZlQWxsVGl0bGUsXG4gICAgICBtZXNzYWdlOiB0aGlzLmxpdGVyYWxzLmNvbmZpcm1SZW1vdmVBbGxNZXNzYWdlLFxuICAgICAgY29uZmlybTogdGhpcy5yZW1vdmVBbGwuYmluZCh0aGlzLCBhY3Rpb25SZW1vdmVBbGwsIGFjdGlvbkJlZm9yZVJlbW92ZUFsbClcbiAgICB9O1xuXG4gICAgdGhpcy5wb0RpYWxvZ1NlcnZpY2UuY29uZmlybShjb25maXJtT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFVuaXF1ZUtleShpdGVtKSB7XG4gICAgY29uc3Qga2V5cyA9IHV0aWwubWFwT2JqZWN0QnlQcm9wZXJ0aWVzKGl0ZW0sIHRoaXMua2V5cyk7XG5cbiAgICByZXR1cm4gdXRpbC52YWx1ZXNGcm9tT2JqZWN0KGtleXMpLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXJQYXJhbShzb3J0ZWRDb2x1bW46IFBvVGFibGVDb2x1bW5Tb3J0ID0geyB0eXBlOiB1bmRlZmluZWQgfSkge1xuICAgIGNvbnN0IHsgY29sdW1uLCB0eXBlIH0gPSBzb3J0ZWRDb2x1bW47XG5cbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBQb1RhYmxlQ29sdW1uU29ydFR5cGUuRGVzY2VuZGluZykge1xuICAgICAgcmV0dXJuIHsgb3JkZXI6IGAtJHtjb2x1bW4ucHJvcGVydHl9YCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IG9yZGVyOiBgJHtjb2x1bW4ucHJvcGVydHl9YCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YShwYXJhbXM6IHsgcGFnZT86IG51bWJlcjsgc2VhcmNoPzogc3RyaW5nIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5zZXJ2aWNlQXBpKSB7XG4gICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLmVycm9yKHRoaXMubGl0ZXJhbHMubG9hZERhdGFFcnJvck5vdGlmaWNhdGlvbik7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJQYXJhbSA9IHRoaXMuZ2V0T3JkZXJQYXJhbSh0aGlzLnNvcnRlZENvbHVtbik7XG4gICAgY29uc3QgZGVmYXVsdFBhcmFtczogYW55ID0geyBwYWdlOiAxLCBwYWdlU2l6ZTogMTAgfTtcbiAgICBjb25zdCBmdWxsUGFyYW1zOiBhbnkgPSB7IC4uLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcywgLi4ub3JkZXJQYXJhbSB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZ2V0UmVzb3VyY2VzKGZ1bGxQYXJhbXMpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gZnVsbFBhcmFtcy5wYWdlID09PSAxID8gcmVzcG9uc2UuaXRlbXMgOiBbLi4udGhpcy5pdGVtcywgLi4ucmVzcG9uc2UuaXRlbXNdO1xuICAgICAgICB0aGlzLnBhZ2UgPSBmdWxsUGFyYW1zLnBhZ2U7XG4gICAgICAgIHRoaXMuaGFzTmV4dCA9IHJlc3BvbnNlLmhhc05leHQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGFkYXRhKFxuICAgIHNlcnZpY2VBcGlGcm9tUm91dGU6IHN0cmluZyxcbiAgICBvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb25cbiAgKTogT2JzZXJ2YWJsZTxQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YT4ge1xuICAgIGlmIChzZXJ2aWNlQXBpRnJvbVJvdXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZS5nZXRNZXRhZGF0YTxQb1BhZ2VEeW5hbWljVGFibGVNZXRhRGF0YT4oKS5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0b1JvdXRlciA9IHJlc3BvbnNlLmF1dG9Sb3V0ZXIgfHwgdGhpcy5hdXRvUm91dGVyO1xuICAgICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zO1xuICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYiA9IHJlc3BvbnNlLmJyZWFkY3J1bWIgfHwgdGhpcy5icmVhZGNydW1iO1xuICAgICAgICAgIHRoaXMuZmllbGRzID0gcmVzcG9uc2UuZmllbGRzIHx8IHRoaXMuZmllbGRzO1xuICAgICAgICAgIHRoaXMudGl0bGUgPSByZXNwb25zZS50aXRsZSB8fCB0aGlzLnRpdGxlO1xuICAgICAgICAgIHRoaXMucGFnZUN1c3RvbUFjdGlvbnMgPSByZXNwb25zZS5wYWdlQ3VzdG9tQWN0aW9ucyB8fCB0aGlzLnBhZ2VDdXN0b21BY3Rpb25zO1xuICAgICAgICAgIHRoaXMudGFibGVDdXN0b21BY3Rpb25zID0gcmVzcG9uc2UudGFibGVDdXN0b21BY3Rpb25zIHx8IHRoaXMudGFibGVDdXN0b21BY3Rpb25zO1xuICAgICAgICAgIHRoaXMua2VlcEZpbHRlcnMgPSByZXNwb25zZS5rZWVwRmlsdGVycyB8fCB0aGlzLmtlZXBGaWx0ZXJzO1xuICAgICAgICAgIHRoaXMuY29uY2F0RmlsdGVycyA9IHJlc3BvbnNlLmNvbmNhdEZpbHRlcnMgfHwgdGhpcy5jb25jYXRGaWx0ZXJzO1xuICAgICAgICAgIHRoaXMucXVpY2tTZWFyY2hXaWR0aCA9IHJlc3BvbnNlLnF1aWNrU2VhcmNoV2lkdGggfHwgdGhpcy5xdWlja1NlYXJjaFdpZHRoO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNPbkluaXRpYWxpemUob25Mb2FkKTtcbiAgfVxuXG4gIC8vIEB0b2RvIFZhbGlkYXIgcm90YXMgbmEgbcOjbyBwb2lzIHNlIGV4aXN0aXIgdW1hIHJvdGEgJyoqJyBvIGNhdGNoIGRvIG5hdmlnYXRpb24gbsOjbyBmdW5jaW9uYS5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvKFxuICAgIHJvdXRlOiB7IHBhdGg6IHN0cmluZzsgY29tcG9uZW50PzsgdXJsPzogc3RyaW5nOyBwYXJhbXM/OiBhbnkgfSxcbiAgICBmb3JjZVN0b3BBdXRvUm91dGVyOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlLnVybCB8fCByb3V0ZS5wYXRoXSwgeyBxdWVyeVBhcmFtczogcm91dGUucGFyYW1zIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGlmIChmb3JjZVN0b3BBdXRvUm91dGVyIHx8ICF0aGlzLmF1dG9Sb3V0ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvdXRlci5jb25maWcudW5zaGlmdCg8Um91dGU+e1xuICAgICAgICBwYXRoOiByb3V0ZS5wYXRoLFxuICAgICAgICBjb21wb25lbnQ6IHJvdXRlLmNvbXBvbmVudCxcbiAgICAgICAgZGF0YTogeyBzZXJ2aWNlQXBpOiB0aGlzLnNlcnZpY2VBcGksIGF1dG9Sb3V0ZXI6IHRydWUgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubmF2aWdhdGVUbyhyb3V0ZSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EZXRhaWwoYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkZXRhaWwnXSwgaXRlbSkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmJlZm9yZURldGFpbCh0aGlzLmFjdGlvbnMuYmVmb3JlRGV0YWlsLCBpZCwgaXRlbSlcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlRGV0YWlsUmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVEZXRhaWwpID0+XG4gICAgICAgICAgdGhpcy5leGVjdXRlRGV0YWlsKGFjdGlvbiwgYmVmb3JlRGV0YWlsUmVzdWx0LCBpZCwgaXRlbSlcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVEZXRhaWwoXG4gICAgYWN0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkZXRhaWwnXSxcbiAgICBiZWZvcmVEZXRhaWxSZXN1bHQ/OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcsXG4gICAgaWQ/OiBzdHJpbmcsXG4gICAgaXRlbT86IGFueVxuICApIHtcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVEZXRhaWxSZXN1bHQgPz8ge307XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xuICAgIGNvbnN0IHsgbmV3VXJsIH0gPSBiZWZvcmU7XG5cbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uKSB7XG4gICAgICBpZiAobmV3VXJsKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFBhdGhGcm9tTmV3VXJsKG5ld1VybCwgaWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aCB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb2x2ZVVybChpdGVtLCBhY3Rpb24pO1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBhY3Rpb24sIHVybCwgY29tcG9uZW50OiBQb1BhZ2VEeW5hbWljRGV0YWlsQ29tcG9uZW50IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uKGlkLCBpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhdGhGcm9tTmV3VXJsKG5ld1VybDogc3RyaW5nLCBpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAobmV3VXJsLmluY2x1ZGVzKCc6aWQnKSkge1xuICAgICAgcmV0dXJuIG5ld1VybC5yZXBsYWNlKC86aWQvZywgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRHVwbGljYXRlKGFjdGlvbkR1cGxpY2F0ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZHVwbGljYXRlJ10sIGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG4gICAgY29uc3QgZHVwbGljYXRlcyA9IHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1dGlsLm1hcE9iamVjdEJ5UHJvcGVydGllcyhpdGVtLCB0aGlzLmR1cGxpY2F0ZXMpKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVEdXBsaWNhdGUodGhpcy5hY3Rpb25zLmJlZm9yZUR1cGxpY2F0ZSwgaWQsIGR1cGxpY2F0ZXMpXG4gICAgICAgIC5zdWJzY3JpYmUoKGJlZm9yZUR1cGxpY2F0ZVJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRHVwbGljYXRlKSA9PlxuICAgICAgICAgIHRoaXMuZXhlY3V0ZUR1cGxpY2F0ZShhY3Rpb25EdXBsaWNhdGUsIGJlZm9yZUR1cGxpY2F0ZVJlc3VsdCwgZHVwbGljYXRlcylcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVEdXBsaWNhdGUoXG4gICAgYWN0aW9uRHVwbGljYXRlOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydkdXBsaWNhdGUnXSxcbiAgICBiZWZvcmVEdXBsaWNhdGVSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUR1cGxpY2F0ZSxcbiAgICBkdXBsaWNhdGVzOiBhbnlcbiAgKSB7XG4gICAgY29uc3QgYmVmb3JlID0gYmVmb3JlRHVwbGljYXRlUmVzdWx0ID8/IHt9O1xuICAgIGNvbnN0IGFsbG93QWN0aW9uID0gdHlwZW9mIGJlZm9yZS5hbGxvd0FjdGlvbiA9PT0gJ2Jvb2xlYW4nID8gYmVmb3JlLmFsbG93QWN0aW9uIDogdHJ1ZTtcbiAgICBjb25zdCBiZWZvcmVEdXBsaWNhdGVSZXNvdXJjZSA9IGJlZm9yZS5yZXNvdXJjZTtcbiAgICBjb25zdCBuZXdBY3Rpb24gPSBiZWZvcmUubmV3VXJsID8/IGFjdGlvbkR1cGxpY2F0ZTtcblxuICAgIGlmIChhbGxvd0FjdGlvbiAmJiBhY3Rpb25EdXBsaWNhdGUpIHtcbiAgICAgIGlmICh0eXBlb2YgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UgPT09ICdvYmplY3QnICYmIGJlZm9yZUR1cGxpY2F0ZVJlc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgIGR1cGxpY2F0ZXMgPSB1dGlsLnJlbW92ZUtleXNQcm9wZXJ0aWVzKHRoaXMua2V5cywgYmVmb3JlRHVwbGljYXRlUmVzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5ld0FjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IG5ld0FjdGlvbiwgcGFyYW1zOiB7IGR1cGxpY2F0ZTogSlNPTi5zdHJpbmdpZnkoZHVwbGljYXRlcykgfSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ld0FjdGlvbihkdXBsaWNhdGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0KGFjdGlvbkVkaXQ6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2VkaXQnXSwgaXRlbSkge1xuICAgIGNvbnN0IGlkID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlRWRpdCh0aGlzLmFjdGlvbnMuYmVmb3JlRWRpdCwgaWQsIGl0ZW0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoYmVmb3JlRWRpdFJlc3VsdDogUG9QYWdlRHluYW1pY1RhYmxlQmVmb3JlRWRpdCkgPT5cbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUVkaXRBY3Rpb24oYWN0aW9uRWRpdCwgYmVmb3JlRWRpdFJlc3VsdCwgaXRlbSwgaWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVFZGl0QWN0aW9uKFxuICAgIGFjdGlvbjogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snZWRpdCddLFxuICAgIGJlZm9yZUVkaXRSZXN1bHQ6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZUVkaXQsXG4gICAgaXRlbTogYW55LFxuICAgIGlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgbmV3RWRpdEFjdGlvbiA9IGJlZm9yZUVkaXRSZXN1bHQ/Lm5ld1VybCA/PyBhY3Rpb247XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSBiZWZvcmVFZGl0UmVzdWx0Py5hbGxvd0FjdGlvbiA/PyB0cnVlO1xuXG4gICAgaWYgKCFhbGxvd0FjdGlvbikge1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3RWRpdEFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMub3BlbkVkaXRVcmwobmV3RWRpdEFjdGlvbiwgaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRJdGVtID0gbmV3RWRpdEFjdGlvbihpZCwgaXRlbSk7XG4gICAgICBpZiAodHlwZW9mIHVwZGF0ZWRJdGVtID09PSAnb2JqZWN0JyAmJiB1cGRhdGVkSXRlbSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKGl0ZW0sIHV0aWwucmVtb3ZlS2V5c1Byb3BlcnRpZXModGhpcy5rZXlzLCB1cGRhdGVkSXRlbSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkVkaXRVcmwocGF0aDogc3RyaW5nLCBpdGVtKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvbHZlVXJsKGl0ZW0sIHBhdGgpO1xuXG4gICAgdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aCwgdXJsIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb2RpZnlVSVRhYmxlSXRlbShjdXJyZW50SXRlbSwgbmV3SXRlbVZhbHVlKSB7XG4gICAgY29uc3QgdGFibGVJdGVtID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBjdXJyZW50SXRlbSk7XG4gICAgdGhpcy5pdGVtc1t0YWJsZUl0ZW1dID0geyAuLi5jdXJyZW50SXRlbSwgLi4ubmV3SXRlbVZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIG9wZW5OZXcoYWN0aW9uTmV3OiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWyduZXcnXSkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5iZWZvcmVOZXcodGhpcy5hY3Rpb25zLmJlZm9yZU5ldylcbiAgICAgICAgLnN1YnNjcmliZSgoYmVmb3JlTmV3UmVzdWx0OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcpID0+IHRoaXMuZXhlY3V0ZU5ldyhhY3Rpb25OZXcsIGJlZm9yZU5ld1Jlc3VsdCkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZU5ldyhhY3Rpb25OZXc6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ25ldyddLCBiZWZvcmVOZXdSZXN1bHQ/OiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVOZXcpIHtcbiAgICBjb25zdCBiZWZvcmUgPSBiZWZvcmVOZXdSZXN1bHQgPz8ge307XG4gICAgY29uc3QgYWxsb3dBY3Rpb24gPSB0eXBlb2YgYmVmb3JlLmFsbG93QWN0aW9uID09PSAnYm9vbGVhbicgPyBiZWZvcmUuYWxsb3dBY3Rpb24gOiB0cnVlO1xuICAgIGNvbnN0IHsgbmV3VXJsIH0gPSBiZWZvcmU7XG5cbiAgICBpZiAoYWxsb3dBY3Rpb24gJiYgYWN0aW9uTmV3KSB7XG4gICAgICBpZiAobmV3VXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG8oeyBwYXRoOiBuZXdVcmwgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYWN0aW9uTmV3ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogYWN0aW9uTmV3IH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0aW9uTmV3KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhc28gZXhpc3RhIG1haXMgZGUgdW0gaWRlbnRpZmljYWRvciwgc2Vyw6EgY29uY2F0ZW5hZG8gY29tICd8Jy5cbiAgICpcbiAgICogRXg6IHsgaWQ6IDEsIGNvbXBhbnk6ICdwbycgfVxuICAgKlxuICAgKiBQYXJhIG8gZW5kcG9pbnQgL3Jlc291cmNlcy86aWQgc2Vyw6EgZXhlY3V0YWRhIGEgdXJsIC9yZXNvdXJjZXMvMXxwb1xuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmUoXG4gICAgaXRlbSxcbiAgICBhY3Rpb25SZW1vdmU6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ3JlbW92ZSddLFxuICAgIGFjdGlvbkJlZm9yZVJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1snYmVmb3JlUmVtb3ZlJ11cbiAgKSB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlUmVtb3ZlKGFjdGlvbkJlZm9yZVJlbW92ZSwgdW5pcXVlS2V5LCBpdGVtKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoYmVmb3JlUmVtb3ZlID0+IHRoaXMuZGVsZXRlQWN0aW9uKGl0ZW0sIGFjdGlvblJlbW92ZSwgYmVmb3JlUmVtb3ZlKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUFjdGlvbihcbiAgICBpdGVtLFxuICAgIGFjdGlvblJlbW92ZTogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1sncmVtb3ZlJ10sXG4gICAgYmVmb3JlUmVtb3ZlOiBQb1BhZ2VEeW5hbWljVGFibGVCZWZvcmVSZW1vdmVcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB7IGFsbG93QWN0aW9uLCBuZXdVcmwgfSA9IGJlZm9yZVJlbW92ZSB8fCB7fTtcbiAgICBjb25zdCBhbGxvdyA9IGFsbG93QWN0aW9uID8/IHRydWU7XG5cbiAgICBpZiAoYWxsb3cpIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICAgIGNvbnN0IHJlc291cmNlVG9SZW1vdmVLZXkgPSB0aGlzLnJldHVyblJlc291cmNlc0tleXMoW2l0ZW1dKTtcblxuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25SZW1vdmUgPT09ICdib29sZWFuJyB8fCBuZXdVcmwpIHtcbiAgICAgICAgdW5pcXVlS2V5ID0gbmV3VXJsID8gdW5kZWZpbmVkIDogdW5pcXVlS2V5O1xuICAgICAgICByZXR1cm4gdGhpcy5wb1BhZ2VEeW5hbWljU2VydmljZVxuICAgICAgICAgIC5kZWxldGVSZXNvdXJjZSh1bmlxdWVLZXksIG5ld1VybClcbiAgICAgICAgICAucGlwZShtYXAoKCkgPT4gdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VUb1JlbW92ZUtleSwgdGhpcy5saXRlcmFscy5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2YoYWN0aW9uUmVtb3ZlKHVuaXF1ZUtleSwgaXRlbSkpLnBpcGUoXG4gICAgICAgIHRhcChyZW1vdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW92ZUl0ZW0gPSByZW1vdmUgPz8gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGcm9tVUkocmVzb3VyY2VUb1JlbW92ZUtleSwgdGhpcy5saXRlcmFscy5yZW1vdmVTdWNjZXNzTm90aWZpY2F0aW9uLCByZW1vdmVJdGVtKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRnJvbVVJKGl0ZW1zOiBBcnJheTxhbnk+LCBtZXNzYWdlOiBzdHJpbmcsIHJlbW92ZSA9IHRydWUpIHtcbiAgICBpZiAocmVtb3ZlID09PSB0cnVlICYmIGl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTG9jYWxJdGVtcyhpdGVtcyk7XG4gICAgICB0aGlzLnBvTm90aWZpY2F0aW9uLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBbGwoXG4gICAgYWN0aW9uUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmVBbGwnXSxcbiAgICBhY3Rpb25CZWZvcmVSZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNbJ2JlZm9yZVJlbW92ZUFsbCddXG4gICkge1xuICAgIGNvbnN0IG9yaWdpbmFsUmVzb3VyY2VzS2V5cyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5wb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zU2VydmljZVxuICAgICAgICAuYmVmb3JlUmVtb3ZlQWxsKGFjdGlvbkJlZm9yZVJlbW92ZUFsbCwgb3JpZ2luYWxSZXNvdXJjZXNLZXlzKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoYmVmb3JlUmVtb3ZlID0+IHRoaXMuZGVsZXRlQWxsQWN0aW9uKGFjdGlvblJlbW92ZUFsbCwgYmVmb3JlUmVtb3ZlLCBvcmlnaW5hbFJlc291cmNlc0tleXMpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKSB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCk7XG5cbiAgICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXR1cm5SZXNvdXJjZXNLZXlzKHJlc291cmNlcyk7XG4gIH1cblxuICBwcml2YXRlIHJldHVyblJlc291cmNlc0tleXMocmVzb3VyY2VzKSB7XG4gICAgcmV0dXJuIHV0aWwubWFwQXJyYXlCeVByb3BlcnRpZXMocmVzb3VyY2VzLCB0aGlzLmtleXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVBbGxBY3Rpb24oXG4gICAgYWN0aW9uUmVtb3ZlQWxsOiBQb1BhZ2VEeW5hbWljVGFibGVBY3Rpb25zWydyZW1vdmVBbGwnXSxcbiAgICBiZWZvcmVSZW1vdmVBbGw6IFBvUGFnZUR5bmFtaWNUYWJsZUJlZm9yZVJlbW92ZUFsbCxcbiAgICBvcmlnaW5hbFJlc291cmNlczogQXJyYXk8YW55PlxuICApIHtcbiAgICBjb25zdCB7IGFsbG93QWN0aW9uLCBuZXdVcmwsIHJlc291cmNlcyB9ID0gYmVmb3JlUmVtb3ZlQWxsID8/IHt9O1xuICAgIGNvbnN0IGFsbG93ID0gYWxsb3dBY3Rpb24gPz8gdHJ1ZTtcbiAgICBjb25zdCByZXNvdXJjZXN0b0RlbGV0ZSA9IHJlc291cmNlcyA/PyBvcmlnaW5hbFJlc291cmNlcztcblxuICAgIGlmIChhbGxvdyAmJiBBcnJheS5pc0FycmF5KHJlc291cmNlc3RvRGVsZXRlKSkge1xuICAgICAgaWYgKHR5cGVvZiBhY3Rpb25SZW1vdmVBbGwgPT09ICdib29sZWFuJyB8fCBuZXdVcmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9QYWdlRHluYW1pY1NlcnZpY2UuZGVsZXRlUmVzb3VyY2VzKHJlc291cmNlc3RvRGVsZXRlLCBuZXdVcmwpLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVVJKHJlc291cmNlc3RvRGVsZXRlLCB0aGlzLmxpdGVyYWxzLnJlbW92ZUFsbFN1Y2Nlc3NOb3RpZmljYXRpb24pO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2YoYWN0aW9uUmVtb3ZlQWxsKHJlc291cmNlc3RvRGVsZXRlKSkucGlwZShcbiAgICAgICAgdGFwKHJlbW92ZUl0ZW1zID0+IHRoaXMucmVtb3ZlRnJvbVVJKHJlbW92ZUl0ZW1zLCB0aGlzLmxpdGVyYWxzLnJlbW92ZVN1Y2Nlc3NOb3RpZmljYXRpb24pKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Yoe30pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMb2NhbEl0ZW1zKGl0ZW1zS2V5c1RvUmVtb3ZlID0gW10pIHtcbiAgICBpZiAoaXRlbXNLZXlzVG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1LZXkgPSB0aGlzLmZvcm1hdFVuaXF1ZUtleShpdGVtKTtcbiAgICAgICAgcmV0dXJuICFpdGVtc0tleXNUb1JlbW92ZS5maW5kKGl0ZW1LZXlUb1JlbW92ZSA9PiB1dGlsLnZhbHVlc0Zyb21PYmplY3QoaXRlbUtleVRvUmVtb3ZlKS5qb2luKCd8JykgPT09IGl0ZW1LZXkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVXJsKGl0ZW06IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gdGhpcy5mb3JtYXRVbmlxdWVLZXkoaXRlbSk7XG5cbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC86aWQvZywgdW5pcXVlS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFnZUFjdGlvbnMoYWN0aW9uczogUG9QYWdlRHluYW1pY1RhYmxlQWN0aW9ucykge1xuICAgIGlmIChhY3Rpb25zPy5uZXcpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFBhZ2VBY3Rpb25zID0gW3sgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvbiwgYWN0aW9uOiB0aGlzLm9wZW5OZXcuYmluZCh0aGlzLCBhY3Rpb25zLm5ldykgfV07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1DdXN0b21BY3Rpb25zVG9QYWdlTGlzdEFjdGlvbihcbiAgICBjdXN0b21BY3Rpb25zOiBBcnJheTxQb1BhZ2VEeW5hbWljVGFibGVDdXN0b21BY3Rpb24+XG4gICk6IEFycmF5PFBvUGFnZUFjdGlvbj4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGN1c3RvbUFjdGlvbnMubWFwKGN1c3RvbUFjdGlvbiA9PiAoe1xuICAgICAgbGFiZWw6IGN1c3RvbUFjdGlvbi5sYWJlbCxcbiAgICAgIGFjdGlvbjogdGhpcy5jYWxsUGFnZUN1c3RvbUFjdGlvbi5iaW5kKHRoaXMsIGN1c3RvbUFjdGlvbiksXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVQYWdlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgY3VzdG9tQWN0aW9uKSxcbiAgICAgIC4uLihjdXN0b21BY3Rpb24uaWNvbiAmJiB7IGljb246IGN1c3RvbUFjdGlvbi5pY29uIH0pXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1UYWJsZUN1c3RvbUFjdGlvbnNUb1RhYmxlQWN0aW9ucyhcbiAgICB0YWJsZUN1c3RvbUFjdGlvbnM6IEFycmF5PFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uPlxuICApOiBBcnJheTxQb1RhYmxlQWN0aW9uPiB7XG4gICAgcmV0dXJuIHRhYmxlQ3VzdG9tQWN0aW9ucy5tYXAodGFibGVDdXN0b21BY3Rpb24gPT4gKHtcbiAgICAgIGxhYmVsOiB0YWJsZUN1c3RvbUFjdGlvbi5sYWJlbCxcbiAgICAgIGljb246IHRhYmxlQ3VzdG9tQWN0aW9uLmljb24sXG4gICAgICBhY3Rpb246IHRoaXMuY2FsbFRhYmxlQ3VzdG9tQWN0aW9uLmJpbmQodGhpcywgdGFibGVDdXN0b21BY3Rpb24pLFxuICAgICAgZGlzYWJsZWQ6IHRhYmxlQ3VzdG9tQWN0aW9uLmRpc2FibGVkXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Rpc2FibGVQYWdlQ3VzdG9tQWN0aW9uKGN1c3RvbUFjdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjdXN0b21BY3Rpb24uc2VsZWN0YWJsZSAmJiAhdGhpcy5nZXRTZWxlY3RlZEl0ZW1zS2V5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsUGFnZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbUFjdGlvbikge1xuICAgIGlmIChjdXN0b21BY3Rpb24uYWN0aW9uKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gY3VzdG9tQWN0aW9uLnNlbGVjdGFibGUgPyB0aGlzLmdldFNlbGVjdGVkSXRlbXNLZXlzKCkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnNTZXJ2aWNlXG4gICAgICAgIC5jdXN0b21BY3Rpb24oY3VzdG9tQWN0aW9uLmFjdGlvbiwgc2VsZWN0ZWRJdGVtcylcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlbmRDdXN0b21BY3Rpb25TdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoY3VzdG9tQWN0aW9uLnVybCkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvKHsgcGF0aDogY3VzdG9tQWN0aW9uLnVybCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGxUYWJsZUN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb246IFBvUGFnZUR5bmFtaWNUYWJsZUN1c3RvbVRhYmxlQWN0aW9uLCBzZWxlY3RlZEl0ZW0pIHtcbiAgICBpZiAoY3VzdG9tQWN0aW9uLmFjdGlvbikge1xuICAgICAgY29uc3Qgc2VuZEN1c3RvbUFjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucG9QYWdlRHluYW1pY1RhYmxlQWN0aW9uc1NlcnZpY2VcbiAgICAgICAgLmN1c3RvbUFjdGlvbihjdXN0b21BY3Rpb24uYWN0aW9uLCBzZWxlY3RlZEl0ZW0pXG4gICAgICAgIC5zdWJzY3JpYmUodXBkYXRlZEl0ZW0gPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdXBkYXRlZEl0ZW0gPT09ICdvYmplY3QnICYmIHVwZGF0ZWRJdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGlmeVVJVGFibGVJdGVtKHNlbGVjdGVkSXRlbSwgdXRpbC5yZW1vdmVLZXlzUHJvcGVydGllcyh0aGlzLmtleXMsIHVwZGF0ZWRJdGVtKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzZW5kQ3VzdG9tQWN0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGN1c3RvbUFjdGlvbi51cmwpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHBhdGg6IGN1c3RvbUFjdGlvbi51cmwgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZW1vdmVBbGxBY3Rpb24oKSB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9ucztcbiAgICBpZiAodGhpcy5zaG93UmVtb3ZlKGFjdGlvbi5yZW1vdmVBbGwpKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQYWdlQWN0aW9ucyA9IFtcbiAgICAgICAgLi4udGhpcy5fZGVmYXVsdFBhZ2VBY3Rpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubGl0ZXJhbHMucGFnZUFjdGlvblJlbW92ZUFsbCxcbiAgICAgICAgICBhY3Rpb246IHRoaXMuY29uZmlybVJlbW92ZUFsbC5iaW5kKHRoaXMsIGFjdGlvbi5yZW1vdmVBbGwsIGFjdGlvbi5iZWZvcmVSZW1vdmVBbGwpLFxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVSZW1vdmVBbGwuYmluZCh0aGlzKVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZVJlbW92ZUFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0tleXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFibGVBY3Rpb25zKGFjdGlvbnM6IFBvUGFnZUR5bmFtaWNUYWJsZUFjdGlvbnMpIHtcbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgY29uc3QgdmlzaWJsZVJlbW92ZSA9IHRoaXMuc2hvd1JlbW92ZShhY3Rpb25zLnJlbW92ZSk7XG4gICAgICB0aGlzLmRlZmF1bHRUYWJsZUFjdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IHRoaXMub3BlbkRldGFpbC5iaW5kKHRoaXMsIGFjdGlvbnMuZGV0YWlsKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvblZpZXcsXG4gICAgICAgICAgdmlzaWJsZTogISF0aGlzLl9hY3Rpb25zLmRldGFpbFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiB0aGlzLm9wZW5FZGl0LmJpbmQodGhpcywgYWN0aW9ucy5lZGl0KSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkVkaXQsXG4gICAgICAgICAgdmlzaWJsZTogISF0aGlzLl9hY3Rpb25zLmVkaXRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5vcGVuRHVwbGljYXRlLmJpbmQodGhpcywgYWN0aW9ucy5kdXBsaWNhdGUpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRHVwbGljYXRlLFxuICAgICAgICAgIHZpc2libGU6ICEhdGhpcy5fYWN0aW9ucy5kdXBsaWNhdGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25maXJtUmVtb3ZlLmJpbmQodGhpcywgYWN0aW9ucy5yZW1vdmUsIGFjdGlvbnMuYmVmb3JlUmVtb3ZlKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkRlbGV0ZSxcbiAgICAgICAgICBzZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVJlbW92ZVxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFGcm9tQVBJKCkge1xuICAgIGNvbnN0IHsgc2VydmljZUFwaTogc2VydmljZUFwaUZyb21Sb3V0ZSwgc2VydmljZU1ldGFkYXRhQXBpLCBzZXJ2aWNlTG9hZEFwaSB9ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhO1xuXG4gICAgY29uc3Qgb25Mb2FkID0gc2VydmljZUxvYWRBcGkgfHwgdGhpcy5vbkxvYWQ7XG4gICAgdGhpcy5zZXJ2aWNlQXBpID0gc2VydmljZUFwaUZyb21Sb3V0ZSB8fCB0aGlzLnNlcnZpY2VBcGk7XG5cbiAgICB0aGlzLnBvUGFnZUR5bmFtaWNTZXJ2aWNlLmNvbmZpZ1NlcnZpY2VBcGkoeyBlbmRwb2ludDogdGhpcy5zZXJ2aWNlQXBpLCBtZXRhZGF0YTogc2VydmljZU1ldGFkYXRhQXBpIH0pO1xuXG4gICAgY29uc3QgbWV0YWRhdGEkID0gdGhpcy5nZXRNZXRhZGF0YShzZXJ2aWNlQXBpRnJvbVJvdXRlLCBvbkxvYWQpO1xuICAgIGNvbnN0IGRhdGEkID0gdGhpcy5sb2FkRGF0YSgpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIG1ldGFkYXRhJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEZpbHRlcnMgPSB0aGlzLmdldEluaXRpYWxWYWx1ZXNGcm9tRmlsdGVyKCk7XG5cbiAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMoaW5pdGlhbEZpbHRlcnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gZGF0YSQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxWYWx1ZXNGcm9tRmlsdGVyKCkge1xuICAgIGNvbnN0IGluaXRpYWxGaWx0ZXJzID0gdGhpcy5maWx0ZXJzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIGl0ZW0pID0+IE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtpdGVtLnByb3BlcnR5XTogaXRlbS5pbml0VmFsdWUgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBPYmplY3Qua2V5cyhpbml0aWFsRmlsdGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFpbml0aWFsRmlsdGVyc1trZXldKSB7XG4gICAgICAgIGRlbGV0ZSBpbml0aWFsRmlsdGVyc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGluaXRpYWxGaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3B0aW9uc09uSW5pdGlhbGl6ZShvbkxvYWQ6IFVybE9yUG9DdXN0b21pemF0aW9uRnVuY3Rpb24pIHtcbiAgICBpZiAob25Mb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQb0R5bmFtaWNQYWdlT3B0aW9ucyhvbkxvYWQpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZVBvT3B0aW9uID0+XG4gICAgICAgICAgdGhpcy5wb1BhZ2VDdXN0b21pemF0aW9uU2VydmljZS5jaGFuZ2VPcmlnaW5hbE9wdGlvbnNUb05ld09wdGlvbnModGhpcywgcmVzcG9uc2VQb09wdGlvbilcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBvRHluYW1pY1BhZ2VPcHRpb25zKG9uTG9hZDogVXJsT3JQb0N1c3RvbWl6YXRpb25GdW5jdGlvbik6IE9ic2VydmFibGU8UG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucz4ge1xuICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9uOiBQb1BhZ2VEeW5hbWljVGFibGVPcHRpb25zID0ge1xuICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucyxcbiAgICAgIGJyZWFkY3J1bWI6IHRoaXMuYnJlYWRjcnVtYixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAga2VlcEZpbHRlcnM6IHRoaXMua2VlcEZpbHRlcnMsXG4gICAgICBjb25jYXRGaWx0ZXJzOiB0aGlzLmNvbmNhdEZpbHRlcnMsXG4gICAgICBwYWdlQ3VzdG9tQWN0aW9uczogdGhpcy5wYWdlQ3VzdG9tQWN0aW9ucyxcbiAgICAgIHRhYmxlQ3VzdG9tQWN0aW9uczogdGhpcy50YWJsZUN1c3RvbUFjdGlvbnMsXG4gICAgICBxdWlja1NlYXJjaFdpZHRoOiB0aGlzLnF1aWNrU2VhcmNoV2lkdGhcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnZU9wdGlvblNjaGVtYTogUG9QYWdlRHluYW1pY09wdGlvbnNTY2hlbWE8UG9QYWdlRHluYW1pY1RhYmxlT3B0aW9ucz4gPSB7XG4gICAgICBzY2hlbWE6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAnZmllbGRzJyxcbiAgICAgICAgICBtZXJnZTogdHJ1ZSxcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ3Byb3BlcnR5J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdhY3Rpb25zJyxcbiAgICAgICAgICBtZXJnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICdicmVhZGNydW1iJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICd0aXRsZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWVQcm9wOiAna2VlcEZpbHRlcnMnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3F1aWNrU2VhcmNoV2lkdGgnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ2NvbmNhdEZpbHRlcnMnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lUHJvcDogJ3BhZ2VDdXN0b21BY3Rpb25zJyxcbiAgICAgICAgICBtZXJnZTogdHJ1ZSxcbiAgICAgICAgICBrZXlGb3JNZXJnZTogJ2xhYmVsJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZVByb3A6ICd0YWJsZUN1c3RvbUFjdGlvbnMnLFxuICAgICAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgICAgIGtleUZvck1lcmdlOiAnbGFiZWwnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9QYWdlQ3VzdG9taXphdGlvblNlcnZpY2UuZ2V0Q3VzdG9tT3B0aW9ucyhvbkxvYWQsIG9yaWdpbmFsT3B0aW9uLCBwYWdlT3B0aW9uU2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1JlbW92ZTxUPihhY3Rpb25SZW1vdmU6IFQpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25SZW1vdmUgPz8gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlclZhbHVlKGZpbHRlcikge1xuICAgIHJldHVybiB0aGlzLmZpZWxkcy5tYXAoaXRlbSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmhhc093blByb3BlcnR5KGl0ZW0ucHJvcGVydHkpKSB7XG4gICAgICAgIGl0ZW0uaW5pdFZhbHVlID0gZmlsdGVyW2l0ZW0ucHJvcGVydHldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlQWN0aW9ucygpIHtcbiAgICB0aGlzLnBhZ2VBY3Rpb25zID0gWy4uLnRoaXMuX2RlZmF1bHRQYWdlQWN0aW9ucywgLi4udGhpcy5fY3VzdG9tUGFnZUxpc3RBY3Rpb25zXTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFibGVBY3Rpb25zKCkge1xuICAgIGNvbnN0IGRlZmF1bHRUYWJsZUFjdGlvbnNXaXRob3V0QWN0aW9uRGVsZXRlID0gdGhpcy5fZGVmYXVsdFRhYmxlQWN0aW9ucy5maWx0ZXIoXG4gICAgICB0YWJsZUFjdGlvbiA9PiB0YWJsZUFjdGlvbi5sYWJlbCAhPT0gdGhpcy5saXRlcmFscy50YWJsZUFjdGlvbkRlbGV0ZVxuICAgICk7XG5cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRlbGV0ZSA9IHRoaXMuX2RlZmF1bHRUYWJsZUFjdGlvbnMuZmluZChcbiAgICAgIHRhYmxlQWN0aW9uID0+IHRhYmxlQWN0aW9uLmxhYmVsID09PSB0aGlzLmxpdGVyYWxzLnRhYmxlQWN0aW9uRGVsZXRlXG4gICAgKTtcblxuICAgIGNvbnN0IG5ld1RhYmxlQWN0aW9ucyA9IFsuLi5kZWZhdWx0VGFibGVBY3Rpb25zV2l0aG91dEFjdGlvbkRlbGV0ZSwgLi4udGhpcy5fY3VzdG9tVGFibGVBY3Rpb25zXTtcblxuICAgIGlmICh0YWJsZUFjdGlvbkRlbGV0ZSkge1xuICAgICAgbmV3VGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb25EZWxldGUpO1xuICAgIH1cblxuICAgIHRoaXMudGFibGVBY3Rpb25zID0gbmV3VGFibGVBY3Rpb25zO1xuICB9XG59XG4iLCI8cG8tcGFnZS1keW5hbWljLXNlYXJjaFxuICBbcC1hY3Rpb25zXT1cInBhZ2VBY3Rpb25zXCJcbiAgW3AtYnJlYWRjcnVtYl09XCJicmVhZGNydW1iXCJcbiAgW3AtZmlsdGVyc109XCJmaWx0ZXJzXCJcbiAgW3Ata2VlcC1maWx0ZXJzXT1cImtlZXBGaWx0ZXJzXCJcbiAgW3AtY29uY2F0LWZpbHRlcnNdPVwiY29uY2F0RmlsdGVyc1wiXG4gIFtwLXF1aWNrLXNlYXJjaC13aWR0aF09XCJxdWlja1NlYXJjaFdpZHRoXCJcbiAgW3AtdGl0bGVdPVwidGl0bGVcIlxuICAocC1hZHZhbmNlZC1zZWFyY2gpPVwib25BZHZhbmNlZFNlYXJjaCgkZXZlbnQpXCJcbiAgKHAtY2hhbmdlLWRpc2NsYWltZXJzKT1cIm9uQ2hhbmdlRGlzY2xhaW1lcnMoJGV2ZW50KVwiXG4gIChwLXF1aWNrLXNlYXJjaCk9XCJvblF1aWNrU2VhcmNoKCRldmVudClcIlxuPlxuICA8cG8tdGFibGVcbiAgICBbcC1zb3J0XT1cInRydWVcIlxuICAgIFtwLWFjdGlvbnNdPVwidGFibGVBY3Rpb25zXCJcbiAgICBbcC1hY3Rpb25zLXJpZ2h0XT1cImFjdGlvblJpZ2h0XCJcbiAgICBbcC1zZWxlY3RhYmxlXT1cImVuYWJsZVNlbGVjdGlvblRhYmxlXCJcbiAgICBbcC1jb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtwLWl0ZW1zXT1cIml0ZW1zXCJcbiAgICBbcC1zaG93LW1vcmUtZGlzYWJsZWRdPVwiIWhhc05leHRcIlxuICAgIChwLXNob3ctbW9yZSk9XCJzaG93TW9yZSgpXCJcbiAgICAocC1zb3J0LWJ5KT1cIm9uU29ydCgkZXZlbnQpXCJcbiAgPlxuICA8L3BvLXRhYmxlPlxuPC9wby1wYWdlLWR5bmFtaWMtc2VhcmNoPlxuIl19
|
|
@@ -339,7 +339,7 @@ PoPageJobSchedulerExecutionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponen
|
|
|
339
339
|
i0.ɵɵproperty("ngModel", ctx.value.periodicity)("p-label", ctx.literals.periodicity)("p-options", ctx.periodicityOptions);
|
|
340
340
|
i0.ɵɵadvance(1);
|
|
341
341
|
i0.ɵɵproperty("ngIf", ctx.value.periodicity !== "single");
|
|
342
|
-
} }, directives: [i3.ɵNgNoValidate, i3.NgControlStatusGroup, i3.NgForm, i4.NgIf, i5.PoDividerComponent, i5.PoDatepickerComponent, i3.NgControlStatus, i3.NgModel, i5.PoInputComponent, i5.PoRadioGroupComponent, i5.PoSwitchComponent,
|
|
342
|
+
} }, directives: [i3.ɵNgNoValidate, i3.NgControlStatusGroup, i3.NgForm, i4.NgIf, i5.PoDividerComponent, i5.PoDatepickerComponent, i3.NgControlStatus, i3.NgModel, i5.PoInputComponent, i5.PoRadioGroupComponent, i5.PoSwitchComponent, i5.PoNumberComponent, i4.NgTemplateOutlet, i5.PoLookupComponent, i5.PoCheckboxGroupComponent], encapsulation: 2 });
|
|
343
343
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageJobSchedulerExecutionComponent, [{
|
|
344
344
|
type: Component,
|
|
345
345
|
args: [{ selector: 'po-page-job-scheduler-execution', template: "<form #formExecution=\"ngForm\">\n <div class=\"po-row\">\n <ng-container *ngIf=\"existProcessAPI; then lookupProcessesID; else inputProcessesID\"></ng-container>\n </div>\n\n <div class=\"po-row\">\n <po-divider class=\"po-md-12\" [p-label]=\"literals.firstExecution\"></po-divider>\n\n <po-datepicker\n class=\"po-md-4\"\n name=\"firstExecution\"\n [(ngModel)]=\"value.firstExecution\"\n p-placeholder=\"dd/mm/aaaa\"\n p-required\n [p-disabled]=\"isEdit\"\n [p-label]=\"literals.day\"\n [p-min-date]=\"startDateFirstExecution\"\n >\n </po-datepicker>\n\n <po-input\n class=\"po-md-2\"\n name=\"firstExecutionHour\"\n [(ngModel)]=\"value.firstExecutionHour\"\n p-mask=\"99:99\"\n p-mask-format-model\n p-placeholder=\"HH:mm\"\n p-required\n [p-disabled]=\"isEdit\"\n [p-label]=\"literals.time\"\n [p-pattern]=\"timePattern\"\n >\n </po-input>\n </div>\n\n <hr />\n\n <div class=\"po-row\">\n <po-radio-group\n class=\"po-sm-12\"\n name=\"periodicity\"\n [(ngModel)]=\"value.periodicity\"\n p-columns=\"4\"\n p-required\n [p-label]=\"literals.periodicity\"\n [p-options]=\"periodicityOptions\"\n (p-change)=\"onChangePeriodicityOptions($event)\"\n >\n </po-radio-group>\n\n <ng-container *ngIf=\"value.periodicity !== 'single'\">\n <div class=\"po-row\">\n <po-switch\n class=\"po-md-12\"\n name=\"containsFrequency\"\n [(ngModel)]=\"containsFrequency\"\n [p-label]=\"literals.frequency\"\n [p-label-off]=\"literals.no\"\n [p-label-on]=\"literals.yes\"\n (p-change)=\"onChangeContainsFrequency($event)\"\n >\n </po-switch>\n <ng-container *ngIf=\"containsFrequency\">\n <po-radio-group\n class=\"po-md-10\"\n name=\"frequencyType\"\n p-required\n [(ngModel)]=\"value.frequency.type\"\n [p-columns]=\"3\"\n [p-options]=\"frequencyOptions\"\n (p-change)=\"onChangeFrequencyOptions()\"\n >\n </po-radio-group>\n\n <po-number class=\"po-md-2\" name=\"frequencyValue\" p-required [(ngModel)]=\"value.frequency.value\"> </po-number>\n </ng-container>\n </div>\n\n <div class=\"po-row\">\n <po-divider class=\"po-md-12\" [p-label]=\"literals.periodicityData\"> </po-divider>\n\n <ng-container *ngTemplateOutlet=\"periodicityTemplates[value.periodicity]\"> </ng-container>\n </div>\n\n <div class=\"po-row\">\n <po-switch\n class=\"po-md-3\"\n name=\"recurrent\"\n [(ngModel)]=\"value.recurrent\"\n [p-label]=\"literals.recurrent\"\n [p-label-off]=\"literals.no\"\n [p-label-on]=\"literals.yes\"\n >\n </po-switch>\n </div>\n </ng-container>\n </div>\n\n <ng-template #lookupProcessesID>\n <po-lookup\n *ngIf=\"noParameters\"\n class=\"po-md-12\"\n name=\"processID\"\n [(ngModel)]=\"value.processID\"\n p-field-label=\"description\"\n p-field-value=\"processID\"\n p-required\n [p-disabled]=\"isEdit\"\n [p-filter-service]=\"poPageJobSchedulerLookup\"\n [p-label]=\"literals.process\"\n [p-placeholder]=\"literals.enterProcess\"\n >\n </po-lookup>\n </ng-template>\n\n <ng-template #inputProcessesID>\n <po-input\n class=\"po-md-12\"\n name=\"processID\"\n [(ngModel)]=\"value.processID\"\n p-required\n [p-disabled]=\"isEdit\"\n [p-label]=\"literals.process\"\n [p-placeholder]=\"literals.enterProcess\"\n >\n </po-input>\n </ng-template>\n\n <ng-template #dailyTemplate>\n <ng-container *ngTemplateOutlet=\"inputHourTemplate\"> </ng-container>\n </ng-template>\n\n <ng-template #weeklyTemplate>\n <div class=\"po-row\">\n <ng-container *ngTemplateOutlet=\"inputHourTemplate\"> </ng-container>\n </div>\n\n <po-checkbox-group\n class=\"po-md-12\"\n name=\"daysOfWeek\"\n [(ngModel)]=\"value.daysOfWeek\"\n p-columns=\"4\"\n p-required\n [p-label]=\"literals.weekDays\"\n [p-options]=\"weekDays\"\n >\n </po-checkbox-group>\n </ng-template>\n\n <ng-template #monthlyTemplate>\n <po-number\n class=\"po-md-3\"\n name=\"dayOfMonth\"\n [(ngModel)]=\"value.dayOfMonth\"\n p-required\n [p-error-pattern]=\"'Dia inv\u00E1lido'\"\n [p-label]=\"dayLabel\"\n [p-max]=\"31\"\n [p-pattern]=\"dayPattern\"\n >\n </po-number>\n\n <po-number\n *ngIf=\"containsFrequency\"\n class=\"po-md-3\"\n name=\"rangeLimitDay\"\n [(ngModel)]=\"value.rangeLimitDay\"\n p-required\n [p-error-pattern]=\"'Dia inv\u00E1lido'\"\n [p-label]=\"literals.endDay\"\n [p-max]=\"31\"\n [p-pattern]=\"dayPattern\"\n >\n </po-number>\n\n <ng-container *ngTemplateOutlet=\"inputHourTemplate\"> </ng-container>\n </ng-template>\n\n <ng-template #inputHourTemplate>\n <po-input\n class=\"po-md-2\"\n name=\"hour\"\n [(ngModel)]=\"value.hour\"\n p-mask=\"99:99\"\n p-mask-format-model\n p-placeholder=\"HH:mm\"\n p-required\n [p-label]=\"hourLabel\"\n [p-pattern]=\"timePattern\"\n >\n </po-input>\n\n <po-input\n *ngIf=\"containsFrequency && value.frequency.type !== 'day'\"\n class=\"po-md-2\"\n name=\"rangeLimitHour\"\n [(ngModel)]=\"value.rangeLimitHour\"\n p-mask=\"99:99\"\n p-mask-format-model\n p-placeholder=\"HH:mm\"\n p-required\n [p-label]=\"literals.endTime\"\n [p-pattern]=\"timePattern\"\n >\n </po-input>\n </ng-template>\n</form>\n" }]
|
|
@@ -473,7 +473,7 @@ PoPageLoginComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoPage
|
|
|
473
473
|
i0.ɵɵproperty("ngIf", ctx.recovery);
|
|
474
474
|
i0.ɵɵadvance(1);
|
|
475
475
|
i0.ɵɵproperty("ngIf", ctx.registerUrl);
|
|
476
|
-
} }, directives: [i4.PoPageBackgroundComponent, i5.NgIf, i6.ɵNgNoValidate, i6.NgControlStatusGroup, i6.NgForm, i2.PoLoginComponent, i6.NgControlStatus, i6.NgModel,
|
|
476
|
+
} }, directives: [i4.PoPageBackgroundComponent, i5.NgIf, i2.PoTagComponent, i6.ɵNgNoValidate, i6.NgControlStatusGroup, i6.NgForm, i2.PoLoginComponent, i6.NgControlStatus, i6.NgModel, i2.PoTooltipDirective, i5.NgForOf, i2.PoPasswordComponent, i7.PoPageLoginPopoverComponent, i2.PoInputComponent, i2.PoComboComponent, i2.PoSelectComponent, i2.PoSwitchComponent, i2.PoButtonComponent], encapsulation: 2 });
|
|
477
477
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoPageLoginComponent, [{
|
|
478
478
|
type: Component,
|
|
479
479
|
args: [{ selector: 'po-page-login', template: "<button class=\"po-page-login-support\" (click)=\"activateSupport()\" [hidden]=\"!support\">\n <span class=\"po-icon po-icon-help\"></span>\n {{ pageLoginLiterals?.support }}\n</button>\n\n<po-page-background\n #pageLogin\n [p-show-select-language]=\"showLanguage\"\n [p-languages]=\"languagesList\"\n [p-initial-language]=\"initialSelectLanguage\"\n [p-background]=\"background\"\n [p-highlight-info]=\"pageLoginLiterals.highlightInfo\"\n [p-logo]=\"logo\"\n [p-secondary-logo]=\"secondaryLogo\"\n (p-selected-language)=\"onSelectedLanguage($event)\"\n>\n <header class=\"po-page-login-header\">\n <h1 class=\"po-mb-md-4 po-mb-sm-1\">\n <div class=\"po-page-login-header-product-name\">{{ productName }}</div>\n <po-tag *ngIf=\"environment\" p-type=\"warning\" [p-value]=\"environment\"> </po-tag>\n </h1>\n <div class=\"po-page-login-header-welcome po-mb-md-4 po-mb-sm-2\">{{ pageLoginLiterals.welcome }}</div>\n </header>\n\n <form #loginForm=\"ngForm\" class=\"po-page-login-form\">\n <div class=\"po-row\">\n <div class=\"po-lg-12\">\n <div class=\"po-page-login-hint po-page-login-info-container\">\n <po-login\n class=\"po-page-login-info-field\"\n [class.po-page-login-info-field-dynamic]=\"\n !pageLoginLiterals.loginHint && !pageLoginLiterals.rememberUserHint\n \"\n name=\"login\"\n [(ngModel)]=\"login\"\n p-auto-focus\n p-required\n [p-label]=\"pageLoginLiterals.loginLabel\"\n [p-pattern]=\"loginPattern\"\n [p-placeholder]=\"pageLoginLiterals.loginPlaceholder\"\n (click)=\"closePopover()\"\n (keyup.enter)=\"loginForm.valid && onLoginSubmit()\"\n (p-change-model)=\"changeLoginModel()\"\n >\n </po-login>\n\n <div\n *ngIf=\"pageLoginLiterals.loginHint || pageLoginLiterals.rememberUserHint\"\n class=\"po-page-login-info-icon-container\"\n [class.po-page-login-info-icon-container-dynamic]=\"\n !pageLoginLiterals.loginHint && !pageLoginLiterals.rememberUserHint\n \"\n >\n <span\n *ngIf=\"pageLoginLiterals.loginHint\"\n class=\"po-icon po-field-icon po-icon-info\"\n p-tooltip-position=\"right\"\n [p-tooltip]=\"pageLoginLiterals.loginHint\"\n >\n </span>\n </div>\n </div>\n\n <div class=\"po-field-container-bottom po-field-container-error-container\">\n <div\n *ngFor=\"let error of allLoginErrors\"\n class=\"po-field-container-bottom-text-error po-field-container-error-item\"\n >\n <span class=\"po-icon po-icon-exclamation\"></span>\n <span class=\"po-field-container-error-text\">{{ error }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"po-lg-12\">\n <div class=\"po-page-login-password-container\">\n <po-password\n class=\"po-page-login-field-size po-page-login-password-item\"\n [class.po-page-login-field-size-dynamic]=\"\n !pageLoginLiterals.loginHint && !pageLoginLiterals.rememberUserHint\n \"\n name=\"password\"\n [(ngModel)]=\"password\"\n p-required\n [p-label]=\"pageLoginLiterals.passwordLabel\"\n [p-pattern]=\"passwordPattern\"\n [p-placeholder]=\"pageLoginLiterals.passwordPlaceholder\"\n (click)=\"closePopover()\"\n (keyup.enter)=\"loginForm.valid && onLoginSubmit()\"\n (p-change-model)=\"changePasswordModel()\"\n >\n </po-password>\n <div\n *ngIf=\"pageLoginLiterals.loginHint || pageLoginLiterals.rememberUserHint\"\n class=\"po-page-login-password-item po-page-login-password-popover-container\"\n >\n <po-page-login-popover\n *ngIf=\"showExceededAttemptsWarning && exceededAttemptsWarning\"\n [p-literals]=\"pageLoginLiterals\"\n [p-recovery]=\"recovery\"\n [p-remaining-attempts]=\"exceededAttemptsWarning\"\n (p-forgot-password)=\"openUrl($event)\"\n >\n </po-page-login-popover>\n </div>\n </div>\n <div class=\"po-field-container-bottom po-field-container-error-container\">\n <div\n *ngFor=\"let error of allPasswordErrors\"\n class=\"po-field-container-bottom-text-error po-field-container-error-item\"\n >\n <span class=\"po-icon po-icon-exclamation\"></span>\n <span class=\"po-field-container-error-text\">{{ error }}</span>\n </div>\n </div>\n </div>\n\n <po-input\n *ngIf=\"customField && customFieldType === 'input'\"\n [class.po-page-login-field-size-dynamic]=\"!pageLoginLiterals.loginHint && !pageLoginLiterals.rememberUserHint\"\n class=\"po-page-login-field-size po-lg-12\"\n name=\"customFieldInput\"\n [(ngModel)]=\"customFieldObject.value\"\n p-required\n [p-error-pattern]=\"customFieldObject.errorPattern || pageLoginLiterals.customFieldErrorPattern\"\n [p-pattern]=\"customFieldObject.pattern\"\n [p-placeholder]=\"customFieldObject.placeholder || pageLoginLiterals.customFieldPlaceholder\"\n (keyup.enter)=\"loginForm.valid && onLoginSubmit()\"\n >\n </po-input>\n\n <po-combo\n *ngIf=\"customField && customFieldType === 'combo'\"\n [class.po-page-login-field-size-dynamic]=\"!pageLoginLiterals.loginHint && !pageLoginLiterals.rememberUserHint\"\n class=\"po-page-login-field-size po-lg-12\"\n name=\"customFieldCombo\"\n [(ngModel)]=\"customFieldObject.value\"\n p-required\n [p-field-value]=\"customFieldObject.fieldValue\"\n [p-filter-service]=\"customFieldObject.url\"\n [p-placeholder]=\"customFieldObject.placeholder || pageLoginLiterals.customFieldPlaceholder\"\n >\n </po-combo>\n\n <po-select\n *ngIf=\"customField && customFieldType === 'select'\"\n [class.po-page-login-field-size-dynamic]=\"!pageLoginLiterals.loginHint && !pageLoginLiterals.rememberUserHint\"\n class=\"po-page-login-field-size po-lg-12\"\n name=\"customFieldSelect\"\n [(ngModel)]=\"customFieldObject.value\"\n p-required\n [p-placeholder]=\"customFieldObject.placeholder || pageLoginLiterals.customFieldPlaceholder\"\n [p-options]=\"customFieldObject.options\"\n >\n </po-select>\n\n <div class=\"po-lg-12\">\n <div *ngIf=\"!hideRememberUser\" class=\"po-page-login-hint po-page-login-info-container\">\n <po-switch\n class=\"po-page-login-info-field po-lg-7 po-offset-lg-5 po-offset-xl-5\"\n name=\"rememberUser\"\n [(ngModel)]=\"rememberUser\"\n p-label-position=\"1\"\n [p-label-off]=\"pageLoginLiterals.rememberUser\"\n [p-label-on]=\"pageLoginLiterals.rememberUser\"\n (keyup.enter)=\"loginForm.valid && onLoginSubmit()\"\n >\n </po-switch>\n\n <div\n *ngIf=\"pageLoginLiterals.loginHint || pageLoginLiterals.rememberUserHint\"\n class=\"po-page-login-info-icon-container po-page-login-info-icon-remember-user\"\n [class.po-page-login-info-icon-container-dynamic]=\"!pageLoginLiterals.rememberUserHint\"\n >\n <span\n *ngIf=\"pageLoginLiterals.rememberUserHint\"\n class=\"po-icon po-field-icon po-icon-info\"\n p-tooltip-position=\"right\"\n [p-tooltip]=\"pageLoginLiterals.rememberUserHint\"\n >\n </span>\n </div>\n </div>\n </div>\n\n <po-button\n [class.po-page-login-button-dynamic]=\"!pageLoginLiterals.loginHint && !pageLoginLiterals.rememberUserHint\"\n class=\"po-lg-12 po-page-login-button po-page-login-field-size\"\n p-type=\"primary\"\n [p-disabled]=\"loginForm.invalid\"\n [p-label]=\"loading ? pageLoginLiterals.submittedLabel : pageLoginLiterals.submitLabel\"\n [p-loading]=\"loading\"\n (p-click)=\"onLoginSubmit()\"\n >\n </po-button>\n\n <div *ngIf=\"recovery\" class=\"po-page-login-recovery-link\">\n <a class=\"po-font-text-large-bold\" (click)=\"openUrl(recovery)\">{{ pageLoginLiterals.forgotPassword }}</a>\n </div>\n\n <div *ngIf=\"registerUrl\" class=\"po-page-login-register-link\">\n <a class=\"po-font-text-large-bold\" (click)=\"openUrl(registerUrl)\">{{ pageLoginLiterals.registerUrl }}</a>\n </div>\n </div>\n </form>\n</po-page-background>\n" }]
|