@cqa-lib/cqa-ui 1.1.236 → 1.1.237
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/add-prerequisite-cases-section/add-prerequisite-cases-section.component.mjs +3 -3
- package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +100 -12
- package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +45 -3
- package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +45 -3
- package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +1055 -54
- package/fesm2015/cqa-lib-cqa-ui.mjs +1248 -64
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +1235 -62
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +50 -3
- package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +23 -1
- package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +20 -1
- package/lib/step-builder/template-variables-form/template-variables-form.component.d.ts +142 -4
- package/package.json +1 -1
- package/styles.css +1 -1
package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs
CHANGED
|
@@ -33,6 +33,14 @@ export class StepBuilderConditionComponent {
|
|
|
33
33
|
this.hasMoreScreenNames = false;
|
|
34
34
|
/** True while parent is loading screen names (search or load more) */
|
|
35
35
|
this.isLoadingScreenNames = false;
|
|
36
|
+
/** Parameter fetching properties */
|
|
37
|
+
this.parameterOptions = []; // TestData[] - raw test data profiles
|
|
38
|
+
this.hasMoreParameters = false;
|
|
39
|
+
this.isLoadingParameters = false;
|
|
40
|
+
/** Environment fetching properties */
|
|
41
|
+
this.environmentOptions = [];
|
|
42
|
+
this.hasMoreEnvironments = false;
|
|
43
|
+
this.isLoadingEnvironments = false;
|
|
36
44
|
/** Emit when step is created */
|
|
37
45
|
this.createStep = new EventEmitter();
|
|
38
46
|
/** Emit when cancelled */
|
|
@@ -43,6 +51,12 @@ export class StepBuilderConditionComponent {
|
|
|
43
51
|
this.searchScreenName = new EventEmitter(); // Emit when user searches screen names
|
|
44
52
|
this.loadMoreScreenNames = new EventEmitter(); // Emit when user scrolls to load more screen names
|
|
45
53
|
this.createScreenNameRequest = new EventEmitter(); // Emit when user requests to create a new screen name
|
|
54
|
+
this.searchParameters = new EventEmitter(); // Emit when user searches for parameters
|
|
55
|
+
this.loadMoreParameters = new EventEmitter(); // Emit when user scrolls to load more parameters
|
|
56
|
+
this.searchEnvironments = new EventEmitter(); // Emit when user searches for environments
|
|
57
|
+
this.loadMoreEnvironments = new EventEmitter(); // Emit when user scrolls to load more environments
|
|
58
|
+
this.redirectToParameter = new EventEmitter();
|
|
59
|
+
this.redirectToEnvironment = new EventEmitter();
|
|
46
60
|
this.includeElse = false;
|
|
47
61
|
// Cache for value configs to avoid recreating on every change detection
|
|
48
62
|
this.valueConfigCache = null;
|
|
@@ -528,10 +542,10 @@ export class StepBuilderConditionComponent {
|
|
|
528
542
|
}
|
|
529
543
|
}
|
|
530
544
|
StepBuilderConditionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderConditionComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
531
|
-
StepBuilderConditionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderConditionComponent, selector: "cqa-step-builder-condition", inputs: { operatorOptions: "operatorOptions", conditionTemplates: "conditionTemplates", setConditionTemplateVariables: "setConditionTemplateVariables", elementOptions: "elementOptions", hasMoreElements: "hasMoreElements", isLoadingElements: "isLoadingElements", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames" }, outputs: { createStep: "createStep", cancelled: "cancelled", loadMoreElements: "loadMoreElements", searchElements: "searchElements", createElement: "createElement", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", createScreenNameRequest: "createScreenNameRequest" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900 cqa-mb-3\">\n Condition Builder\n </h3>\n\n <!-- Condition Rows -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n <div\n *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <!-- Condition Row -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Condition Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ getConditionLabel(i) }}\n </div>\n\n <!-- Operator Dropdown -->\n <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Remove Button -->\n <cqa-button\n *ngIf=\"i >= 1\"\n variant=\"text\"\n icon=\"close\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"'Remove condition'\">\n </cqa-button>\n <!-- <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n [attr.aria-label]=\"'Remove condition'\">\n <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n </button> -->\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"getConditionUpdatedHtmlGrammar(i) || getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n </div>\n </div>\n \n <!-- Template Variables Form Component (includes Description and Metadata) -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getConditionTemplateVariables(i)\"\n [variablesForm]=\"getConditionVariablesForm(i)\"\n [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\">\n </cqa-template-variables-form>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Add Condition Button -->\n <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n <cqa-button\n variant=\"text\"\n icon=\"add\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n [text]=\"'Add Condition'\"\n (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Include ELSE Branch Section -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-flex-col\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n Include ELSE branch\n </h3>\n <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n Execute alternative steps when condition is not met.\n </p>\n </div>\n <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n </mat-slide-toggle>\n </div>\n </div>\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!conditionForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.TemplateVariablesFormComponent, selector: "cqa-template-variables-form", inputs: ["templateVariables", "variablesForm", "metadata", "description", "elementOptions", "hasMoreElements", "isLoadingElements", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames"], outputs: ["variableValueChange", "variableBooleanChange", "metadataChange", "descriptionChange", "loadMoreElements", "searchElements", "createElement", "searchScreenName", "loadMoreScreenNames", "createScreenNameRequest", "cancelElementForm", "elementFormVisibilityChange"] }, { type: i5.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
545
|
+
StepBuilderConditionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderConditionComponent, selector: "cqa-step-builder-condition", inputs: { operatorOptions: "operatorOptions", conditionTemplates: "conditionTemplates", setConditionTemplateVariables: "setConditionTemplateVariables", elementOptions: "elementOptions", hasMoreElements: "hasMoreElements", isLoadingElements: "isLoadingElements", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", parameterOptions: "parameterOptions", hasMoreParameters: "hasMoreParameters", isLoadingParameters: "isLoadingParameters", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", defaultTestDataProfileId: "defaultTestDataProfileId", defaultTestDataStartIndex: "defaultTestDataStartIndex" }, outputs: { createStep: "createStep", cancelled: "cancelled", loadMoreElements: "loadMoreElements", searchElements: "searchElements", createElement: "createElement", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", createScreenNameRequest: "createScreenNameRequest", searchParameters: "searchParameters", loadMoreParameters: "loadMoreParameters", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments", redirectToParameter: "redirectToParameter", redirectToEnvironment: "redirectToEnvironment" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Condition Rows -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n <div\n *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <!-- Condition Row -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Condition Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ getConditionLabel(i) }}\n </div>\n\n <!-- Operator Dropdown -->\n <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Remove Button -->\n <cqa-button\n *ngIf=\"i >= 1\"\n variant=\"text\"\n icon=\"close\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"'Remove condition'\">\n </cqa-button>\n <!-- <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n [attr.aria-label]=\"'Remove condition'\">\n <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n </button> -->\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n </div>\n \n </div>\n \n <!-- Template Variables Form Component (includes Description and Metadata) -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getConditionTemplateVariables(i)\"\n [variablesForm]=\"getConditionVariablesForm(i)\"\n [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Add Condition Button -->\n <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n <cqa-button\n variant=\"text\"\n icon=\"add\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n [text]=\"'Add Condition'\"\n (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Include ELSE Branch Section -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-flex-col\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n Include ELSE branch\n </h3>\n <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n Execute alternative steps when condition is not met.\n </p>\n </div>\n <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n </mat-slide-toggle>\n </div>\n </div>\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!conditionForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.TemplateVariablesFormComponent, selector: "cqa-template-variables-form", inputs: ["templateVariables", "variablesForm", "metadata", "description", "elementOptions", "hasMoreElements", "isLoadingElements", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames", "parameterOptions", "hasMoreParameters", "isLoadingParameters", "environmentOptions", "hasMoreEnvironments", "isLoadingEnvironments", "defaultTestDataProfileId", "defaultTestDataStartIndex", "createElementVisible"], outputs: ["variableValueChange", "variableBooleanChange", "metadataChange", "descriptionChange", "loadMoreElements", "searchElements", "createElement", "searchScreenName", "loadMoreScreenNames", "createScreenNameRequest", "searchParameters", "loadMoreParameters", "searchEnvironments", "loadMoreEnvironments", "cancelElementForm", "elementFormVisibilityChange"] }, { type: i5.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
532
546
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderConditionComponent, decorators: [{
|
|
533
547
|
type: Component,
|
|
534
|
-
args: [{ selector: 'cqa-step-builder-condition', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900
|
|
548
|
+
args: [{ selector: 'cqa-step-builder-condition', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create Condition Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Condition Rows -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n <div\n *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <!-- Condition Row -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Condition Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ getConditionLabel(i) }}\n </div>\n\n <!-- Operator Dropdown -->\n <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Remove Button -->\n <cqa-button\n *ngIf=\"i >= 1\"\n variant=\"text\"\n icon=\"close\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n (click)=\"removeCondition(i)\"\n [attr.aria-label]=\"'Remove condition'\">\n </cqa-button>\n <!-- <button type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n [attr.aria-label]=\"'Remove condition'\">\n <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n </button> -->\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n </div>\n \n </div>\n \n <!-- Template Variables Form Component (includes Description and Metadata) -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getConditionTemplateVariables(i)\"\n [variablesForm]=\"getConditionVariablesForm(i)\"\n [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Add Condition Button -->\n <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n <cqa-button\n variant=\"text\"\n icon=\"add\"\n iconPosition=\"start\"\n [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n [text]=\"'Add Condition'\"\n (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n </cqa-button>\n </div>\n </div>\n\n <!-- Include ELSE Branch Section -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-flex-col\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n Include ELSE branch\n </h3>\n <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n Execute alternative steps when condition is not met.\n </p>\n </div>\n <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n </mat-slide-toggle>\n </div>\n </div>\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!conditionForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>", styles: [] }]
|
|
535
549
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { operatorOptions: [{
|
|
536
550
|
type: Input
|
|
537
551
|
}], conditionTemplates: [{
|
|
@@ -550,6 +564,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
550
564
|
type: Input
|
|
551
565
|
}], isLoadingScreenNames: [{
|
|
552
566
|
type: Input
|
|
567
|
+
}], parameterOptions: [{
|
|
568
|
+
type: Input
|
|
569
|
+
}], hasMoreParameters: [{
|
|
570
|
+
type: Input
|
|
571
|
+
}], isLoadingParameters: [{
|
|
572
|
+
type: Input
|
|
573
|
+
}], environmentOptions: [{
|
|
574
|
+
type: Input
|
|
575
|
+
}], hasMoreEnvironments: [{
|
|
576
|
+
type: Input
|
|
577
|
+
}], isLoadingEnvironments: [{
|
|
578
|
+
type: Input
|
|
579
|
+
}], defaultTestDataProfileId: [{
|
|
580
|
+
type: Input
|
|
581
|
+
}], defaultTestDataStartIndex: [{
|
|
582
|
+
type: Input
|
|
553
583
|
}], createStep: [{
|
|
554
584
|
type: Output
|
|
555
585
|
}], cancelled: [{
|
|
@@ -566,5 +596,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
566
596
|
type: Output
|
|
567
597
|
}], createScreenNameRequest: [{
|
|
568
598
|
type: Output
|
|
599
|
+
}], searchParameters: [{
|
|
600
|
+
type: Output
|
|
601
|
+
}], loadMoreParameters: [{
|
|
602
|
+
type: Output
|
|
603
|
+
}], searchEnvironments: [{
|
|
604
|
+
type: Output
|
|
605
|
+
}], loadMoreEnvironments: [{
|
|
606
|
+
type: Output
|
|
607
|
+
}], redirectToParameter: [{
|
|
608
|
+
type: Output
|
|
609
|
+
}], redirectToEnvironment: [{
|
|
610
|
+
type: Output
|
|
569
611
|
}] } });
|
|
570
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWNvbmRpdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3N0ZXAtYnVpbGRlci9zdGVwLWJ1aWxkZXItY29uZGl0aW9uL3N0ZXAtYnVpbGRlci1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWNvbmRpdGlvbi9zdGVwLWJ1aWxkZXItY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLHVCQUF1QixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySixPQUFPLEVBQXFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFrQzVGLE1BQU0sT0FBTyw2QkFBNkI7SUEwRHhDLFlBQW9CLEVBQWUsRUFBVSxHQUFzQjtRQUEvQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF6RG5FLG9DQUFvQztRQUMzQixvQkFBZSxHQUFtQjtZQUN6QyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDbEUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ2xGLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUMxRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FB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O1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDOzswSEFqbEJVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLHF6QkNuQzFDLDJtTkFtSU07MkZEaEdPLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDRSw0QkFBNEIsUUFHaEMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLG1CQUNiLHVCQUF1QixDQUFDLE1BQU07a0lBSXRDLGVBQWU7c0JBQXZCLEtBQUs7Z0JBVUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25UZW1wbGF0ZSB9IGZyb20gJy4uL3N0ZXAtYnVpbGRlci1hY3Rpb24vc3RlcC1idWlsZGVyLWFjdGlvbi5jb21wb25lbnQnO1xuXG4vLyBJbXBvcnQgRWxlbWVudCB0eXBlIC0gdXNpbmcgYW55IGZvciBub3cgc2luY2UgRWxlbWVudCBpcyBmcm9tIHRzLXBvcnRhbC11aVxuaW50ZXJmYWNlIEVsZW1lbnQge1xuICBpZD86IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBsb2NhdG9yVmFsdWU/OiBzdHJpbmc7XG4gIG90aGVyTG9jYXRvcj86IHN0cmluZ1tdO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uUm93IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgb3BlcmF0b3I6IHN0cmluZztcbiAgdmFsdWU6IEFjdGlvblRlbXBsYXRlO1xuICB0ZW1wbGF0ZVZhcmlhYmxlcz86IGFueVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uRm9ybURhdGEge1xuICBjb25kaXRpb25zOiBDb25kaXRpb25Sb3dbXTtcbiAgaW5jbHVkZUVsc2U6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1zdGVwLWJ1aWxkZXItY29uZGl0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1jb25kaXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBCdWlsZGVyQ29uZGl0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKiogT3B0aW9ucyBmb3Igb3BlcmF0b3IgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgb3BlcmF0b3JPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtcbiAgICB7IGlkOiAnZXF1YWxzJywgdmFsdWU6ICdlcXVhbHMnLCBuYW1lOiAnZXF1YWxzJywgbGFiZWw6ICdlcXVhbHMnIH0sXG4gICAgeyBpZDogJ25vdF9lcXVhbHMnLCB2YWx1ZTogJ25vdF9lcXVhbHMnLCBuYW1lOiAnbm90IGVxdWFscycsIGxhYmVsOiAnbm90IGVxdWFscycgfSxcbiAgICB7IGlkOiAnY29udGFpbnMnLCB2YWx1ZTogJ2NvbnRhaW5zJywgbmFtZTogJ2NvbnRhaW5zJywgbGFiZWw6ICdjb250YWlucycgfSxcbiAgICB7IGlkOiAnbm90X2NvbnRhaW5zJywgdmFsdWU6ICdub3RfY29udGFpbnMnLCBuYW1lOiAnbm90IGNvbnRhaW5zJywgbGFiZWw6ICdub3QgY29udGFpbnMnIH0sXG4gICAgeyBpZDogJ2dyZWF0ZXJfdGhhbicsIHZhbHVlOiAnZ3JlYXRlcl90aGFuJywgbmFtZTogJ2dyZWF0ZXIgdGhhbicsIGxhYmVsOiAnZ3JlYXRlciB0aGFuJyB9LFxuICAgIHsgaWQ6ICdsZXNzX3RoYW4nLCB2YWx1ZTogJ2xlc3NfdGhhbicsIG5hbWU6ICdsZXNzIHRoYW4nLCBsYWJlbDogJ2xlc3MgdGhhbicgfVxuICBdO1xuXG4gIC8qKiBMaXN0IG9mIGFjdGlvbiB0ZW1wbGF0ZXMgdG8gZGlzcGxheSBpbiB2YWx1ZSBkcm9wZG93biAqL1xuICBASW5wdXQoKSBjb25kaXRpb25UZW1wbGF0ZXM6IEFjdGlvblRlbXBsYXRlW10gPSBbXTtcbiAgLyoqIEZ1bmN0aW9uIHRvIGhhbmRsZSB2YXJpYWJsZSBwcm9jZXNzaW5nIG9yIGN1c3RvbSBsb2dpYy4gQ2FuIGJlIHBhc3NlZCBmcm9tIHBhcmVudCBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiAodmFyaWFibGVzOiBBY3Rpb25UZW1wbGF0ZSkgPT4gYW55ID0gKCkgPT4geyByZXR1cm4gW119O1xuICBASW5wdXQoKSBlbGVtZW50T3B0aW9uczogRWxlbWVudFtdID0gW107IC8vIEVsZW1lbnQgb2JqZWN0cyBmb3IgZWxlbWVudCBkcm9wZG93blxuICBASW5wdXQoKSBoYXNNb3JlRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTsgLy8gV2hldGhlciBtb3JlIGVsZW1lbnRzIGFyZSBhdmFpbGFibGVcbiAgQElucHV0KCkgaXNMb2FkaW5nRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTsgLy8gTG9hZGluZyBzdGF0ZSBmb3IgZWxlbWVudHNcbiAgLyoqIFNjcmVlbiBuYW1lIG9wdGlvbnMgZm9yIGVsZW1lbnQgZm9ybSBhdXRvY29tcGxldGUgKGZyb20gQVBJKSAqL1xuICBASW5wdXQoKSBzY3JlZW5OYW1lT3B0aW9uczogeyBpZD86IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICAvKiogV2hldGhlciBtb3JlIHNjcmVlbiBuYW1lcyBhcmUgYXZhaWxhYmxlIGZvciBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgQElucHV0KCkgaGFzTW9yZVNjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBUcnVlIHdoaWxlIHBhcmVudCBpcyBsb2FkaW5nIHNjcmVlbiBuYW1lcyAoc2VhcmNoIG9yIGxvYWQgbW9yZSkgKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZGl0aW9uRm9ybURhdGE+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlRWxlbWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXQgd2hlbiBsb2FkIG1vcmUgaXMgcmVxdWVzdGVkXG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZWxlbWVudHNcbiAgQE91dHB1dCgpIGNyZWF0ZUVsZW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gRW1pdCB3aGVuIGVsZW1lbnQgaXMgY3JlYXRlZFxuICBAT3V0cHV0KCkgc2VhcmNoU2NyZWVuTmFtZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBzY3JlZW4gbmFtZXNcbiAgQE91dHB1dCgpIGxvYWRNb3JlU2NyZWVuTmFtZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gRW1pdCB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUgc2NyZWVuIG5hbWVzXG4gIEBPdXRwdXQoKSBjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciByZXF1ZXN0cyB0byBjcmVhdGUgYSBuZXcgc2NyZWVuIG5hbWVcblxuICBjb25kaXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIGluY2x1ZGVFbHNlOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvLyBDYWNoZSBmb3IgdmFsdWUgY29uZmlncyB0byBhdm9pZCByZWNyZWF0aW5nIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgcHJpdmF0ZSB2YWx1ZUNvbmZpZ0NhY2hlOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIENhY2hlIGZvciBvcGVyYXRvciBjb25maWdzIChzdGF0aWMsIG5vIG5lZWQgdG8gcmVjcmVhdGUpXG4gIHByaXZhdGUgb3BlcmF0b3JDb25maWdDYWNoZTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvLyBDYWNoZSBmb3IgdmFsdWUgY29uZmlncyB3aXRoIG9uQ2hhbmdlIGhhbmRsZXJzIHBlciBpbmRleFxuICBwcml2YXRlIHZhbHVlQ29uZmlnc1dpdGhIYW5kbGVyczogTWFwPG51bWJlciwgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnPiA9IG5ldyBNYXAoKTtcbiAgXG4gIC8vIFRyYWNrIHNlbGVjdGVkIHRlbXBsYXRlcyBhbmQgdGhlaXIgdmFyaWFibGVzIGZvciBlYWNoIGNvbmRpdGlvbiByb3dcbiAgcHJpdmF0ZSBzZWxlY3RlZFRlbXBsYXRlczogTWFwPG51bWJlciwgQWN0aW9uVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzOiBNYXA8bnVtYmVyLCBhbnlbXT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY29uZGl0aW9uVmFyaWFibGVzRm9ybXM6IE1hcDxudW1iZXIsIEZvcm1BcnJheT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpOyAvLyBVcGRhdGVkIEhUTUwgZ3JhbW1hciBwZXIgY29uZGl0aW9uXG4gIFxuICAvLyBDYWNoZSBmb3IgY29uZGl0aW9uIGZvcm0gZ3JvdXBzIHRvIGF2b2lkIHJlcGVhdGVkIGxvb2t1cHNcbiAgcHJpdmF0ZSBjb25kaXRpb25Gb3JtR3JvdXBDYWNoZTogTWFwPG51bWJlciwgRm9ybUdyb3VwPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5jb25kaXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjb25kaXRpb25zOiB0aGlzLmZiLmFycmF5KFtdKSxcbiAgICAgIGluY2x1ZGVFbHNlOiBbZmFsc2VdXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBBZGQgaW5pdGlhbCBjb25kaXRpb24gcm93XG4gICAgdGhpcy5hZGRDb25kaXRpb24oXCJDT05ESVRJT05fSUZcIik7XG4gICAgLy8gSW5pdGlhbGl6ZSBjb25maWcgY2FjaGVzXG4gICAgdGhpcy51cGRhdGVWYWx1ZUNvbmZpZ0NhY2hlKCk7XG4gICAgdGhpcy51cGRhdGVPcGVyYXRvckNvbmZpZ0NhY2hlKCk7XG4gICAgLy8gTWFyayBmb3IgY2hlY2sgc2luY2Ugd2UncmUgdXNpbmcgT25QdXNoXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gUmVnZW5lcmF0ZSB2YWx1ZSBjb25maWcgY2FjaGUgd2hlbiBjb25kaXRpb25UZW1wbGF0ZXMgY2hhbmdlc1xuICAgIGlmIChjaGFuZ2VzWydjb25kaXRpb25UZW1wbGF0ZXMnXSAmJiAhY2hhbmdlc1snY29uZGl0aW9uVGVtcGxhdGVzJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVDb25maWdDYWNoZSgpO1xuICAgICAgLy8gQ2xlYXIgdmFsdWUgY29uZmlncyB3aXRoIGhhbmRsZXJzIHNpbmNlIGJhc2UgY29uZmlnIGNoYW5nZWRcbiAgICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmNsZWFyKCk7XG4gICAgfVxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBwcml2YXRlIHVwZGF0ZU9wZXJhdG9yQ29uZmlnQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVyYXRvckNvbmZpZ0NhY2hlID0ge1xuICAgICAga2V5OiAnb3BlcmF0b3InLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3Qgb3BlcmF0b3InLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wZXJhdG9yT3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc0Zvcm1BcnJheSgpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbkZvcm0uZ2V0KCdjb25kaXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKGNvbmRpdGlvblR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmRpdGlvbkdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBmaWVsZDogW2NvbmRpdGlvblR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgb3BlcmF0b3I6IFsnZXF1YWxzJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB2YWx1ZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLCAvLyBXaWxsIHN0b3JlIHRlbXBsYXRlIElELCB0aGVuIG1hcCB0byBBY3Rpb25UZW1wbGF0ZVxuICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBtZXRhZGF0YTogWycnXSxcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5sZW5ndGg7XG4gICAgdGhpcy5jb25kaXRpb25zRm9ybUFycmF5LnB1c2goY29uZGl0aW9uR3JvdXApO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdmFyaWFibGVzIGZvcm0gZm9yIHRoaXMgY29uZGl0aW9uIChGb3JtQXJyYXkpXG4gICAgdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5zZXQoaW5kZXgsIHRoaXMuZmIuYXJyYXkoW10pKTtcbiAgICBcbiAgICAvLyBDYWNoZSB0aGUgZm9ybSBncm91cFxuICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuc2V0KGluZGV4LCBjb25kaXRpb25Hcm91cCk7XG4gICAgXG4gICAgLy8gTWFyayBmb3IgY2hlY2sgc2luY2Ugd2UncmUgdXNpbmcgT25QdXNoXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmRpdGlvbnNGb3JtQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5jb25kaXRpb25zRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICAgIC8vIENsZWFuIHVwIGFzc29jaWF0ZWQgZGF0YVxuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5kZWxldGUoaW5kZXgpO1xuICAgICAgdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5kZWxldGUoaW5kZXgpO1xuICAgICAgdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5kZWxldGUoaW5kZXgpO1xuICAgICAgdGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZS5kZWxldGUoaW5kZXgpO1xuICAgICAgdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuZGVsZXRlKGluZGV4KTtcbiAgICAgIFxuICAgICAgLy8gUmVpbmRleCByZW1haW5pbmcgY29uZGl0aW9uc1xuICAgICAgdGhpcy5yZWluZGV4Q29uZGl0aW9uRGF0YShpbmRleCk7XG4gICAgICBcbiAgICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIHJlaW5kZXhDb25kaXRpb25EYXRhKHJlbW92ZWRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gQ3JlYXRlIG5ldyBtYXBzIHdpdGggcmVpbmRleGVkIGRhdGFcbiAgICBjb25zdCBuZXdTZWxlY3RlZFRlbXBsYXRlcyA9IG5ldyBNYXA8bnVtYmVyLCBBY3Rpb25UZW1wbGF0ZT4oKTtcbiAgICBjb25zdCBuZXdUZW1wbGF0ZVZhcmlhYmxlcyA9IG5ldyBNYXA8bnVtYmVyLCBhbnlbXT4oKTtcbiAgICBjb25zdCBuZXdWYXJpYWJsZXNGb3JtcyA9IG5ldyBNYXA8bnVtYmVyLCBGb3JtQXJyYXk+KCk7XG4gICAgY29uc3QgbmV3Rm9ybUdyb3VwQ2FjaGUgPSBuZXcgTWFwPG51bWJlciwgRm9ybUdyb3VwPigpO1xuICAgIGNvbnN0IG5ld1ZhbHVlQ29uZmlncyA9IG5ldyBNYXA8bnVtYmVyLCBEeW5hbWljU2VsZWN0RmllbGRDb25maWc+KCk7XG4gICAgY29uc3QgbmV3VXBkYXRlZEh0bWxHcmFtbWFyID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcbiAgICBcbiAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmZvckVhY2goKHRlbXBsYXRlLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld1NlbGVjdGVkVGVtcGxhdGVzLnNldChvbGRJbmRleCwgdGVtcGxhdGUpO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdTZWxlY3RlZFRlbXBsYXRlcy5zZXQob2xkSW5kZXggLSAxLCB0ZW1wbGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZXMsIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VGVtcGxhdGVWYXJpYWJsZXMuc2V0KG9sZEluZGV4LCB2YXJpYWJsZXMpO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdUZW1wbGF0ZVZhcmlhYmxlcy5zZXQob2xkSW5kZXggLSAxLCB2YXJpYWJsZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZm9yRWFjaCgoZm9ybSwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdWYXJpYWJsZXNGb3Jtcy5zZXQob2xkSW5kZXgsIGZvcm0pO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdWYXJpYWJsZXNGb3Jtcy5zZXQob2xkSW5kZXggLSAxLCBmb3JtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvbkZvcm1Hcm91cENhY2hlLmZvckVhY2goKGZvcm1Hcm91cCwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdGb3JtR3JvdXBDYWNoZS5zZXQob2xkSW5kZXgsIGZvcm1Hcm91cCk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld0Zvcm1Hcm91cENhY2hlLnNldChvbGRJbmRleCAtIDEsIGZvcm1Hcm91cCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuZm9yRWFjaCgoY29uZmlnLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld1ZhbHVlQ29uZmlncy5zZXQob2xkSW5kZXgsIGNvbmZpZyk7XG4gICAgICB9IGVsc2UgaWYgKG9sZEluZGV4ID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIC8vIFJlY3JlYXRlIGNvbmZpZyB3aXRoIG5ldyBpbmRleCBmb3Igb25DaGFuZ2UgaGFuZGxlclxuICAgICAgICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRlbXBsYXRlVmFsdWVDaGFuZ2Uob2xkSW5kZXggLSAxLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBuZXdWYWx1ZUNvbmZpZ3Muc2V0KG9sZEluZGV4IC0gMSwgbmV3Q29uZmlnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hci5mb3JFYWNoKChncmFtbWFyLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld1VwZGF0ZWRIdG1sR3JhbW1hci5zZXQob2xkSW5kZXgsIGdyYW1tYXIpO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdVcGRhdGVkSHRtbEdyYW1tYXIuc2V0KG9sZEluZGV4IC0gMSwgZ3JhbW1hcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcyA9IG5ld1NlbGVjdGVkVGVtcGxhdGVzO1xuICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSBuZXdUZW1wbGF0ZVZhcmlhYmxlcztcbiAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zID0gbmV3VmFyaWFibGVzRm9ybXM7XG4gICAgdGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZSA9IG5ld0Zvcm1Hcm91cENhY2hlO1xuICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzID0gbmV3VmFsdWVDb25maWdzO1xuICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyID0gbmV3VXBkYXRlZEh0bWxHcmFtbWFyO1xuICB9XG5cbiAgZ2V0T3BlcmF0b3JDb25maWcoaW5kZXg6IG51bWJlcik6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBjb25maWcgKHN0YXRpYywgc2FtZSBmb3IgYWxsIGNvbmRpdGlvbnMpXG4gICAgaWYgKCF0aGlzLm9wZXJhdG9yQ29uZmlnQ2FjaGUpIHtcbiAgICAgIHRoaXMudXBkYXRlT3BlcmF0b3JDb25maWdDYWNoZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvckNvbmZpZ0NhY2hlITtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVDb25maWdDYWNoZSgpOiB2b2lkIHtcbiAgICAvLyBDb252ZXJ0IEFjdGlvblRlbXBsYXRlW10gdG8gU2VsZWN0T3B0aW9uW11cbiAgICBjb25zdCB0ZW1wbGF0ZU9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gKHRoaXMuY29uZGl0aW9uVGVtcGxhdGVzIHx8IFtdKS5tYXAodGVtcGxhdGUgPT4gKHtcbiAgICAgIGlkOiB0ZW1wbGF0ZS5pZD8udG9TdHJpbmcoKSB8fCB0ZW1wbGF0ZS5kaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgIHZhbHVlOiB0ZW1wbGF0ZS5pZD8udG9TdHJpbmcoKSB8fCB0ZW1wbGF0ZS5kaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgIG5hbWU6IHRlbXBsYXRlLmh0bWxHcmFtbWFyIHx8IHRlbXBsYXRlLm5hdHVyYWxUZXh0IHx8ICcnLFxuICAgICAgbGFiZWw6IHRlbXBsYXRlLmh0bWxHcmFtbWFyIHx8IHRlbXBsYXRlLm5hdHVyYWxUZXh0IHx8ICcnXG4gICAgfSkpO1xuXG4gICAgdGhpcy52YWx1ZUNvbmZpZ0NhY2hlID0ge1xuICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgVGVtcGxhdGUqJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBkaXNwbGF5TGFiZWxBc0lubmVySHRtbDogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRlbXBsYXRlT3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBnZXRWYWx1ZUNvbmZpZyhpbmRleDogbnVtYmVyKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIGNvbmZpZyB3aXRoIGhhbmRsZXIgdG8gYXZvaWQgcmVjcmVhdGluZyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgaWYgKHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmhhcyhpbmRleCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5nZXQoaW5kZXgpITtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIGJhc2UgY29uZmlnIGNhY2hlIGV4aXN0c1xuICAgIGlmICghdGhpcy52YWx1ZUNvbmZpZ0NhY2hlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ3JlYXRlIGFuZCBjYWNoZSBjb25maWcgd2l0aCBvbkNoYW5nZSBoYW5kbGVyIGZvciB0aGlzIHNwZWNpZmljIGluZGV4XG4gICAgY29uc3QgY29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAgICAuLi50aGlzLnZhbHVlQ29uZmlnQ2FjaGUhLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25UZW1wbGF0ZVZhbHVlQ2hhbmdlKGluZGV4LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5zZXQoaW5kZXgsIGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBcbiAgb25UZW1wbGF0ZVZhbHVlQ2hhbmdlKGluZGV4OiBudW1iZXIsIHRlbXBsYXRlSWQ6IGFueSk6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIHNlbGVjdGVkIHRlbXBsYXRlXG4gICAgY29uc3Qgc2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVzLmZpbmQoXG4gICAgICB0ID0+ICh0LmlkPy50b1N0cmluZygpID09PSB0ZW1wbGF0ZUlkKSB8fCAodC5kaXNwbGF5TmFtZSA9PT0gdGVtcGxhdGVJZClcbiAgICApO1xuICAgIFxuICAgIGlmIChzZWxlY3RlZFRlbXBsYXRlICYmIHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMpIHtcbiAgICAgIC8vIFN0b3JlIHNlbGVjdGVkIHRlbXBsYXRlXG4gICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLnNldChpbmRleCwgc2VsZWN0ZWRUZW1wbGF0ZSk7XG4gICAgICBcbiAgICAgIC8vIEdldCB0ZW1wbGF0ZSB2YXJpYWJsZXMgdXNpbmcgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKHNlbGVjdGVkVGVtcGxhdGUpO1xuICAgICAgdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5zZXQoaW5kZXgsIHZhcmlhYmxlcyk7XG4gICAgICAvLyBCdWlsZCBmb3JtIGZvciB0ZW1wbGF0ZSB2YXJpYWJsZXNcbiAgICAgIHRoaXMuYnVpbGRDb25kaXRpb25WYXJpYWJsZXNGb3JtKGluZGV4LCB2YXJpYWJsZXMpO1xuICAgICAgLy8gSW5pdGlhbGl6ZSB1cGRhdGVkIEhUTUwgZ3JhbW1hclxuICAgICAgdGhpcy51cGRhdGVDb25kaXRpb25IdG1sR3JhbW1hcihpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsZWFyIHRlbXBsYXRlIGFuZCB2YXJpYWJsZXMgaWYgbm8gdGVtcGxhdGUgc2VsZWN0ZWRcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyLmRlbGV0ZShpbmRleCk7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmdldChpbmRleCk7XG4gICAgICBpZiAoZm9ybUFycmF5KSB7XG4gICAgICAgIHdoaWxlIChmb3JtQXJyYXkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleDogbnVtYmVyLCB2YXJpYWJsZXM6IGFueVtdKTogdm9pZCB7XG4gICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLnNldChpbmRleCwgZm9ybUFycmF5KTtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5zdXJlIGZvcm1BcnJheSBpcyBub3QgdW5kZWZpbmVkIChUeXBlU2NyaXB0IGd1YXJkKVxuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byBhdm9pZCBUeXBlU2NyaXB0IGlzc3VlcyBpbiBmb3JFYWNoIGNhbGxiYWNrXG4gICAgLy8gVHlwZVNjcmlwdCBrbm93cyBmb3JtQXJyYXkgaXMgZGVmaW5lZCBoZXJlIGR1ZSB0byB0aGUgZWFybHkgcmV0dXJuIGFib3ZlXG4gICAgY29uc3QgZm9ybUFycmF5UmVmOiBGb3JtQXJyYXkgPSBmb3JtQXJyYXk7XG4gICAgXG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlIChmb3JtQXJyYXlSZWYubGVuZ3RoICE9PSAwKSB7XG4gICAgICBmb3JtQXJyYXlSZWYucmVtb3ZlQXQoMCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCB2YXJpYWJsZVxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBib29sZWFuIHZhcmlhYmxlcyAtIHVzZSBib29sZWFuIHZhbHVlLCBvdGhlcnMgdXNlIHN0cmluZ1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICA6ICh2YXJpYWJsZS52YWx1ZSB8fCAnJyk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBhIEZvcm1Hcm91cCBmb3IgZWFjaCB2YXJpYWJsZSB3aXRoIG5hbWUgYW5kIHZhbHVlXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IFtkZWZhdWx0VmFsdWVdLFxuICAgICAgICB0eXBlOiBbdmFyaWFibGUudHlwZSB8fCAnc3RyaW5nJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGUubGFiZWwgfHwgJyddLFxuICAgICAgICBvcHRpb25zOiBbdmFyaWFibGUub3B0aW9ucyB8fCBbXV1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBBZGQgZGF0YVR5cGUgY29udHJvbCBmb3IgdGVzdC1kYXRhIHZhcmlhYmxlcyBpZiBuZWVkZWRcbiAgICAgIGNvbnN0IGxhYmVsID0gdmFyaWFibGUubGFiZWw/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICBpZiAobGFiZWwgPT09ICd0ZXN0LWRhdGEnIHx8IGxhYmVsID09PSAnc291cmNlLXZhbHVlJyB8fCBsYWJlbCA9PT0gJ3RhcmdldC12YWx1ZScgfHwgXG4gICAgICAgICAgbGFiZWwgPT09ICdzb3VyY2VfdmFsdWUnIHx8IGxhYmVsID09PSAndGFyZ2V0X3ZhbHVlJykge1xuICAgICAgICAvLyBQYXJzZSB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGRhdGEgdHlwZVxuICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyhkZWZhdWx0VmFsdWUgfHwgJycpO1xuICAgICAgICBsZXQgZGF0YVR5cGUgPSAncGxhaW4tdGV4dCc7XG4gICAgICAgIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCdAfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIHtcbiAgICAgICAgICBkYXRhVHlwZSA9ICdwYXJhbWV0ZXInO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyR8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkge1xuICAgICAgICAgIGRhdGFUeXBlID0gJ3J1bnRpbWUnO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyp8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkge1xuICAgICAgICAgIGRhdGFUeXBlID0gJ2Vudmlyb25tZW50JztcbiAgICAgICAgfVxuICAgICAgICB2YXJpYWJsZUdyb3VwLmFkZENvbnRyb2woJ2RhdGFUeXBlJywgbmV3IEZvcm1Db250cm9sKGRhdGFUeXBlKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGZvcm1BcnJheVJlZi5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdXBkYXRlZCBIVE1MIGdyYW1tYXIgZm9yIHRoaXMgY29uZGl0aW9uXG4gICAgdGhpcy51cGRhdGVDb25kaXRpb25IdG1sR3JhbW1hcihpbmRleCk7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGluZGV4KSB8fCBbXTtcbiAgfVxuICBcbiAgZ2V0Q29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleDogbnVtYmVyKTogRm9ybUFycmF5IHtcbiAgICBsZXQgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoaW5kZXgpO1xuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICBmb3JtQXJyYXkgPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCBmb3JtQXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybUFycmF5O1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25Gb3JtR3JvdXBBdChpbmRleDogbnVtYmVyLCB2YXJpYWJsZUluZGV4OiBudW1iZXIpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Q29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleCk7XG4gICAgcmV0dXJuIGZvcm1BcnJheS5hdCh2YXJpYWJsZUluZGV4KSBhcyBGb3JtR3JvdXA7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIXRlbXBsYXRlKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyLmdldChpbmRleCkgfHwgdGVtcGxhdGUuaHRtbEdyYW1tYXIgfHwgdGVtcGxhdGUubmF0dXJhbFRleHQgfHwgJyc7XG4gIH1cbiAgXG4gIGdldFNlbGVjdGVkVGVtcGxhdGUoaW5kZXg6IG51bWJlcik6IEFjdGlvblRlbXBsYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZ2V0KGluZGV4KSB8fCBudWxsO1xuICB9XG4gIFxuICBnZXRTZWxlY3RDb25maWdGb3JWYXJpYWJsZShpbmRleDogbnVtYmVyLCB2YXJpYWJsZTogYW55KTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICBjb25zdCBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9ICh2YXJpYWJsZS5vcHRpb25zIHx8IFtdKS5tYXAoKG9wdDogc3RyaW5nKSA9PiAoe1xuICAgICAgaWQ6IG9wdCxcbiAgICAgIHZhbHVlOiBvcHQsXG4gICAgICBuYW1lOiBvcHQsXG4gICAgICBsYWJlbDogb3B0XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdmFyaWFibGUubmFtZSxcbiAgICAgIHBsYWNlaG9sZGVyOiBgU2VsZWN0ICR7dmFyaWFibGUubGFiZWx9YCxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShpbmRleCwgdmFyaWFibGUubmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgXG4gIG9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShjb25kaXRpb25JbmRleDogbnVtYmVyLCB2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gdGVtcGxhdGVWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmdldChjb25kaXRpb25JbmRleCkgfHwgW107XG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIC8vIEFsc28gdXBkYXRlIGZvcm0gYXJyYXlcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmdldChjb25kaXRpb25JbmRleCk7XG4gICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgY29uc3QgdmFyaWFibGVJbmRleCA9IGZvcm1BcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICAgKTtcbiAgICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgICBmb3JtQXJyYXkuYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgSFRNTCBncmFtbWFyIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoY29uZGl0aW9uSW5kZXgpO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICBvbkNvbmRpdGlvblZhcmlhYmxlSW5wdXRDaGFuZ2UoY29uZGl0aW9uSW5kZXg6IG51bWJlciwgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBjb25zdCBmb3JtID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmIChmb3JtICYmIGZvcm0uZ2V0KHZhcmlhYmxlTmFtZSkpIHtcbiAgICAgIGZvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbmRpdGlvblZhcmlhYmxlQm9vbGVhbkNoYW5nZShjb25kaXRpb25JbmRleDogbnVtYmVyLCB2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmICghZm9ybUFycmF5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSBmb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGZvcm1BcnJheS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgZm9ybSBncm91cCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZU5hbWVdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlXSxcbiAgICAgICAgdHlwZTogWydib29sZWFuJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGU/LmxhYmVsIHx8ICcnXSxcbiAgICAgICAgb3B0aW9uczogW3ZhcmlhYmxlPy5vcHRpb25zIHx8IFtdXVxuICAgICAgfSk7XG4gICAgICAvLyBmb3JtQXJyYXkgaXMgZ3VhcmFudGVlZCB0byBiZSBkZWZpbmVkIGhlcmUgZHVlIHRvIHRoZSBlYXJseSByZXR1cm4gYWJvdmVcbiAgICAgIGZvcm1BcnJheS5wdXNoKHZhcmlhYmxlR3JvdXApO1xuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgSFRNTCBncmFtbWFyIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoY29uZGl0aW9uSW5kZXgpO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIFxuICAvKipcbiAgICogU3RyaXAgSFRNTCB0YWdzIGZyb20gYSBzdHJpbmcgZm9yIHNlYXJjaCBmdW5jdGlvbmFsaXR5XG4gICAqL1xuICBwcml2YXRlIHN0cmlwSHRtbFRhZ3MoaHRtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWh0bWxTdHJpbmcpIHJldHVybiAnJztcbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGl2IGVsZW1lbnQgdG8gcGFyc2UgSFRNTFxuICAgIGNvbnN0IHRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgIHRtcC5pbm5lckhUTUwgPSBodG1sU3RyaW5nO1xuICAgIHJldHVybiB0bXAudGV4dENvbnRlbnQgfHwgdG1wLmlubmVyVGV4dCB8fCAnJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBIVE1MIGdyYW1tYXIgZm9yIGEgc3BlY2lmaWMgY29uZGl0aW9uIHdpdGggYWN0dWFsIHZhcmlhYmxlIHZhbHVlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb25kaXRpb25IdG1sR3JhbW1hcihjb25kaXRpb25JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmdldChjb25kaXRpb25JbmRleCk7XG4gICAgaWYgKCF0ZW1wbGF0ZSB8fCAhdGVtcGxhdGUuaHRtbEdyYW1tYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgbGV0IHVwZGF0ZWRHcmFtbWFyID0gdGVtcGxhdGUuaHRtbEdyYW1tYXI7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIFxuICAgIC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggYWN0dWFsIHZhbHVlc1xuICAgIHZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IFJlZ0V4cChgPHNwYW5bXj5dKmRhdGEtZXZlbnQta2V5PVwiJHt2YXJpYWJsZS5uYW1lfVwiW14+XSo+Lio/PC9zcGFuPmAsICdnaScpO1xuICAgICAgY29uc3QgdmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIC8vIEVzY2FwZSBIVE1MIGluIHZhbHVlIHRvIHByZXZlbnQgWFNTXG4gICAgICBjb25zdCBlc2NhcGVkVmFsdWUgPSBTdHJpbmcodmFsdWUpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgICAgIHVwZGF0ZWRHcmFtbWFyID0gdXBkYXRlZEdyYW1tYXIucmVwbGFjZShwbGFjZWhvbGRlciwgZXNjYXBlZFZhbHVlKTtcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hci5zZXQoY29uZGl0aW9uSW5kZXgsIHVwZGF0ZWRHcmFtbWFyKTtcbiAgfVxuXG4gIGdldENvbmRpdGlvbkZvcm1Hcm91cChpbmRleDogbnVtYmVyKTogRm9ybUdyb3VwIHtcbiAgICAvLyBVc2UgY2FjaGUgdG8gYXZvaWQgcmVwZWF0ZWQgbG9va3Vwc1xuICAgIGlmICh0aGlzLmNvbmRpdGlvbkZvcm1Hcm91cENhY2hlLmhhcyhpbmRleCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbkZvcm1Hcm91cENhY2hlLmdldChpbmRleCkhO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmNvbmRpdGlvbnNGb3JtQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbkZvcm1Hcm91cENhY2hlLnNldChpbmRleCwgZm9ybUdyb3VwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcbiAgfVxuICBcbiAgZ2V0Q29uZGl0aW9uRmllbGRWYWx1ZShpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdldENvbmRpdGlvbkZvcm1Hcm91cChpbmRleCk7XG4gICAgcmV0dXJuIGZvcm1Hcm91cD8uZ2V0KCdmaWVsZCcpPy52YWx1ZSB8fCAnJztcbiAgfVxuICBcbiAgaXNDb25kaXRpb25JZihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uRmllbGRWYWx1ZShpbmRleCkgPT09ICdDT05ESVRJT05fSUYnO1xuICB9XG4gIFxuICBpc0NvbmRpdGlvbkVsc2VJZihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uRmllbGRWYWx1ZShpbmRleCkgPT09ICdDT05ESVRJT05fRUxTRV9JRic7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvbkxhYmVsKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmdldENvbmRpdGlvbkZpZWxkVmFsdWUoaW5kZXgpO1xuICAgIGlmIChmaWVsZFZhbHVlID09PSAnQ09ORElUSU9OX0lGJykgcmV0dXJuICdJRic7XG4gICAgaWYgKGZpZWxkVmFsdWUgPT09ICdDT05ESVRJT05fRUxTRV9JRicpIHJldHVybiAnRUxTRSBJRic7XG4gICAgcmV0dXJuICdFTFNFJztcbiAgfVxuICBcbiAgdHJhY2tCeUNvbmRpdGlvbkluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIG9uSW5jbHVkZUVsc2VDaGFuZ2UoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW5jbHVkZUVsc2UgPSBjaGVja2VkO1xuICAgIHRoaXMuY29uZGl0aW9uRm9ybS5wYXRjaFZhbHVlKHsgaW5jbHVkZUVsc2U6IGNoZWNrZWQgfSk7XG4gICAgXG4gICAgLy8gTWFyayBmb3IgY2hlY2sgc2luY2Ugd2UncmUgdXNpbmcgT25QdXNoXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICBvbkNyZWF0ZVN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZGl0aW9uRm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5jb25kaXRpb25Gb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IENvbmRpdGlvbkZvcm1EYXRhID0ge1xuICAgICAgICBjb25kaXRpb25zOiBmb3JtVmFsdWUuY29uZGl0aW9ucy5tYXAoKGNvbmQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIEFjdGlvblRlbXBsYXRlIG9iamVjdCBmcm9tIHRoZSBzdG9yZWQgSUQvdmFsdWVcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZUlkID0gY29uZC52YWx1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFRlbXBsYXRlID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZXMuZmluZChcbiAgICAgICAgICAgIHQgPT4gKHQuaWQ/LnRvU3RyaW5nKCkgPT09IHRlbXBsYXRlSWQpIHx8ICh0LmRpc3BsYXlOYW1lID09PSB0ZW1wbGF0ZUlkKVxuICAgICAgICAgICkgfHwgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5nZXQoaW5kZXgpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEdldCB0ZW1wbGF0ZSB2YXJpYWJsZXMgZm9yIHRoaXMgY29uZGl0aW9uXG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmdldChpbmRleCkgfHwgW107XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkOiBjb25kLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGNvbmQub3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogc2VsZWN0ZWRUZW1wbGF0ZSB8fCBudWxsLFxuICAgICAgICAgICAgdGVtcGxhdGVWYXJpYWJsZXM6IHRlbXBsYXRlVmFyaWFibGVzLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGNvbmQuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICBtZXRhZGF0YTogY29uZC5tZXRhZGF0YSB8fCAnJ1xuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICBpbmNsdWRlRWxzZTogZm9ybVZhbHVlLmluY2x1ZGVFbHNlIHx8IGZhbHNlXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ3N0ZXBEYXRhJywgc3RlcERhdGEpO1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAgQ3JlYXRlIENvbmRpdGlvbiBTdGVwXG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xIGNxYS1vdmVyZmxvdy15LWF1dG9cIj5cbiAgICA8IS0tIENvbmRpdGlvbiBCdWlsZGVyIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtZ3JheS05MDAgY3FhLW1iLTNcIj5cbiAgICAgICAgQ29uZGl0aW9uIEJ1aWxkZXJcbiAgICAgIDwvaDM+XG5cbiAgICAgIDwhLS0gQ29uZGl0aW9uIFJvd3MgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBjcWEtbWItM1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgY29uZGl0aW9uc0Zvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNvbmRpdGlvbkluZGV4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJpc0NvbmRpdGlvbklmKGkpIHx8IGlzQ29uZGl0aW9uRWxzZUlmKGkpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPCEtLSBDb25kaXRpb24gUm93IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uIExhYmVsIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0Q29uZGl0aW9uTGFiZWwoaSkgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBPcGVyYXRvciBEcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWF4LXctWzEwMHB4XSBjcWEtdGV4dC1bMTBweF1cIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKVwiIFtjb25maWddPVwiZ2V0T3BlcmF0b3JDb25maWcoaSlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICAgIDwhLS0gVmFsdWUgVGVtcGxhdGUgRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy1bMTUwcHhdIGNxYS10ZXh0LVsxMHB4XVwiPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpXCIgW2NvbmZpZ109XCJnZXRWYWx1ZUNvbmZpZyhpKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIFJlbW92ZSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpID49IDFcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBpY29uPVwiY2xvc2VcIlxuICAgICAgICAgICAgICAgIGljb25Qb3NpdGlvbj1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS13LWZ1bGwgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXInXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGkpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgY29uZGl0aW9uJ1wiPlxuICAgICAgICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTggY3FhLWgtOCBjcWEtcm91bmRlZCBjcWEtdGV4dC1ncmF5LTUwMCBob3ZlcjpjcWEtdGV4dC1ncmF5LTcwMCBob3ZlcjpjcWEtYmctZ3JheS0xMDAgY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGkpXCIgKm5nSWY9XCJpID49IDFcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZSBjb25kaXRpb24nXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLXRleHQtWzI0cHhdXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBWYXJpYWJsZXMgU2VjdGlvbiAoc2hvd24gd2hlbiB0ZW1wbGF0ZSBpcyBzZWxlY3RlZCkgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0U2VsZWN0ZWRUZW1wbGF0ZShpKVwiIGNsYXNzPVwiY3FhLW10LTJcIj5cbiAgICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBHcmFtbWFyIERpc3BsYXkgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0xIGNxYS10ZXh0LXNtIGNxYS10ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1hY3Rpb24tZm9ybWF0IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMjNweF0gY3FhLXRleHQtYmxhY2stMTAwXCJcbiAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0Q29uZGl0aW9uVXBkYXRlZEh0bWxHcmFtbWFyKGkpIHx8IGdldFNlbGVjdGVkVGVtcGxhdGUoaSk/Lmh0bWxHcmFtbWFyIHx8IGdldFNlbGVjdGVkVGVtcGxhdGUoaSk/Lm5hdHVyYWxUZXh0IHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBWYXJpYWJsZXMgRm9ybSBDb21wb25lbnQgKGluY2x1ZGVzIERlc2NyaXB0aW9uIGFuZCBNZXRhZGF0YSkgLS0+XG4gICAgICAgICAgICAgIDxjcWEtdGVtcGxhdGUtdmFyaWFibGVzLWZvcm1cbiAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO1wiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVzXT1cImdldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKGkpXCJcbiAgICAgICAgICAgICAgICBbdmFyaWFibGVzRm9ybV09XCJnZXRDb25kaXRpb25WYXJpYWJsZXNGb3JtKGkpXCJcbiAgICAgICAgICAgICAgICBbbWV0YWRhdGFdPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpLmdldCgnbWV0YWRhdGEnKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSkuZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRPcHRpb25zXT1cImVsZW1lbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbaGFzTW9yZUVsZW1lbnRzXT1cImhhc01vcmVFbGVtZW50c1wiXG4gICAgICAgICAgICAgICAgW2lzTG9hZGluZ0VsZW1lbnRzXT1cImlzTG9hZGluZ0VsZW1lbnRzXCJcbiAgICAgICAgICAgICAgICBbc2NyZWVuTmFtZU9wdGlvbnNdPVwic2NyZWVuTmFtZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtoYXNNb3JlU2NyZWVuTmFtZXNdPVwiaGFzTW9yZVNjcmVlbk5hbWVzXCJcbiAgICAgICAgICAgICAgICBbaXNMb2FkaW5nU2NyZWVuTmFtZXNdPVwiaXNMb2FkaW5nU2NyZWVuTmFtZXNcIlxuICAgICAgICAgICAgICAgICh2YXJpYWJsZVZhbHVlQ2hhbmdlKT1cIm9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShpLCAkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkNvbmRpdGlvblZhcmlhYmxlQm9vbGVhbkNoYW5nZShpLCAkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgKG1ldGFkYXRhQ2hhbmdlKT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKS5nZXQoJ21ldGFkYXRhJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkZXNjcmlwdGlvbkNoYW5nZSk9XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSkuZ2V0KCdkZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobG9hZE1vcmVFbGVtZW50cyk9XCJsb2FkTW9yZUVsZW1lbnRzLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgKHNlYXJjaEVsZW1lbnRzKT1cInNlYXJjaEVsZW1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNyZWF0ZUVsZW1lbnQpPVwiY3JlYXRlRWxlbWVudC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWFyY2hTY3JlZW5OYW1lKT1cInNlYXJjaFNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobG9hZE1vcmVTY3JlZW5OYW1lcyk9XCJsb2FkTW9yZVNjcmVlbk5hbWVzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0KT1cImNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0LmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8L2NxYS10ZW1wbGF0ZS12YXJpYWJsZXMtZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEFkZCBDb25kaXRpb24gQnV0dG9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXItMiBjcWEtYm9yZGVyLWRhc2hlZCBjcWEtYm9yZGVyLWdyYXktMzAwIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTEgY3FhLW10LTNcIj5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgaWNvbj1cImFkZFwiXG4gICAgICAgICAgaWNvblBvc2l0aW9uPVwic3RhcnRcIlxuICAgICAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlcidcIlxuICAgICAgICAgIFt0ZXh0XT1cIidBZGQgQ29uZGl0aW9uJ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiYWRkQ29uZGl0aW9uKCdDT05ESVRJT05fRUxTRV9JRicpXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBJbmNsdWRlIEVMU0UgQnJhbmNoIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtbWItNiBjcWEtcC0zIGNxYS1iZy1ncmF5LTUwIGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ncmF5LTkwMCBjcWEtbWItMVwiPlxuICAgICAgICAgIEluY2x1ZGUgRUxTRSBicmFuY2hcbiAgICAgICAgPC9oMz5cbiAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICBFeGVjdXRlIGFsdGVybmF0aXZlIHN0ZXBzIHdoZW4gY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2NoZWNrZWRdPVwiaW5jbHVkZUVsc2VcIiAoY2hhbmdlKT1cIm9uSW5jbHVkZUVsc2VDaGFuZ2UoJGV2ZW50LmNoZWNrZWQpXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMlwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHRleHQ9XCJDYW5jZWxcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMlwiIHZhcmlhbnQ9XCJmaWxsZWRcIiB0ZXh0PVwiQ3JlYXRlIFN0ZXBcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjb25kaXRpb25Gb3JtLnZhbGlkXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
612
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWNvbmRpdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3N0ZXAtYnVpbGRlci9zdGVwLWJ1aWxkZXItY29uZGl0aW9uL3N0ZXAtYnVpbGRlci1jb25kaXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWNvbmRpdGlvbi9zdGVwLWJ1aWxkZXItY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLHVCQUF1QixFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySixPQUFPLEVBQXFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFrQzVGLE1BQU0sT0FBTyw2QkFBNkI7SUE4RXhDLFlBQW9CLEVBQWUsRUFBVSxHQUFzQjtRQUEvQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3RW5FLG9DQUFvQztRQUMzQixvQkFBZSxHQUFtQjtZQUN6QyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDbEUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ2xGLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUMxRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FB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QkFBekIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vc3RlcC1idWlsZGVyLWFjdGlvbi9zdGVwLWJ1aWxkZXItYWN0aW9uLmNvbXBvbmVudCc7XG5cbi8vIEltcG9ydCBFbGVtZW50IHR5cGUgLSB1c2luZyBhbnkgZm9yIG5vdyBzaW5jZSBFbGVtZW50IGlzIGZyb20gdHMtcG9ydGFsLXVpXG5pbnRlcmZhY2UgRWxlbWVudCB7XG4gIGlkPzogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxvY2F0b3JWYWx1ZT86IHN0cmluZztcbiAgb3RoZXJMb2NhdG9yPzogc3RyaW5nW107XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Sb3cge1xuICBmaWVsZDogc3RyaW5nO1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICB2YWx1ZTogQWN0aW9uVGVtcGxhdGU7XG4gIHRlbXBsYXRlVmFyaWFibGVzPzogYW55W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Gb3JtRGF0YSB7XG4gIGNvbmRpdGlvbnM6IENvbmRpdGlvblJvd1tdO1xuICBpbmNsdWRlRWxzZTogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1jb25kaXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1idWlsZGVyLWNvbmRpdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJDb25kaXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciBvcGVyYXRvciBkcm9wZG93biAqL1xuICBASW5wdXQoKSBvcGVyYXRvck9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW1xuICAgIHsgaWQ6ICdlcXVhbHMnLCB2YWx1ZTogJ2VxdWFscycsIG5hbWU6ICdlcXVhbHMnLCBsYWJlbDogJ2VxdWFscycgfSxcbiAgICB7IGlkOiAnbm90X2VxdWFscycsIHZhbHVlOiAnbm90X2VxdWFscycsIG5hbWU6ICdub3QgZXF1YWxzJywgbGFiZWw6ICdub3QgZXF1YWxzJyB9LFxuICAgIHsgaWQ6ICdjb250YWlucycsIHZhbHVlOiAnY29udGFpbnMnLCBuYW1lOiAnY29udGFpbnMnLCBsYWJlbDogJ2NvbnRhaW5zJyB9LFxuICAgIHsgaWQ6ICdub3RfY29udGFpbnMnLCB2YWx1ZTogJ25vdF9jb250YWlucycsIG5hbWU6ICdub3QgY29udGFpbnMnLCBsYWJlbDogJ25vdCBjb250YWlucycgfSxcbiAgICB7IGlkOiAnZ3JlYXRlcl90aGFuJywgdmFsdWU6ICdncmVhdGVyX3RoYW4nLCBuYW1lOiAnZ3JlYXRlciB0aGFuJywgbGFiZWw6ICdncmVhdGVyIHRoYW4nIH0sXG4gICAgeyBpZDogJ2xlc3NfdGhhbicsIHZhbHVlOiAnbGVzc190aGFuJywgbmFtZTogJ2xlc3MgdGhhbicsIGxhYmVsOiAnbGVzcyB0aGFuJyB9XG4gIF07XG5cbiAgLyoqIExpc3Qgb2YgYWN0aW9uIHRlbXBsYXRlcyB0byBkaXNwbGF5IGluIHZhbHVlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGNvbmRpdGlvblRlbXBsYXRlczogQWN0aW9uVGVtcGxhdGVbXSA9IFtdO1xuICAvKiogRnVuY3Rpb24gdG8gaGFuZGxlIHZhcmlhYmxlIHByb2Nlc3Npbmcgb3IgY3VzdG9tIGxvZ2ljLiBDYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM6ICh2YXJpYWJsZXM6IEFjdGlvblRlbXBsYXRlKSA9PiBhbnkgPSAoKSA9PiB7IHJldHVybiBbXX07XG4gIEBJbnB1dCgpIGVsZW1lbnRPcHRpb25zOiBFbGVtZW50W10gPSBbXTsgLy8gRWxlbWVudCBvYmplY3RzIGZvciBlbGVtZW50IGRyb3Bkb3duXG4gIEBJbnB1dCgpIGhhc01vcmVFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlOyAvLyBXaGV0aGVyIG1vcmUgZWxlbWVudHMgYXJlIGF2YWlsYWJsZVxuICBASW5wdXQoKSBpc0xvYWRpbmdFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlOyAvLyBMb2FkaW5nIHN0YXRlIGZvciBlbGVtZW50c1xuICAvKiogU2NyZWVuIG5hbWUgb3B0aW9ucyBmb3IgZWxlbWVudCBmb3JtIGF1dG9jb21wbGV0ZSAoZnJvbSBBUEkpICovXG4gIEBJbnB1dCgpIHNjcmVlbk5hbWVPcHRpb25zOiB7IGlkPzogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVtdID0gW107XG4gIC8qKiBXaGV0aGVyIG1vcmUgc2NyZWVuIG5hbWVzIGFyZSBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBASW5wdXQoKSBoYXNNb3JlU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGxvYWRpbmcgc2NyZWVuIG5hbWVzIChzZWFyY2ggb3IgbG9hZCBtb3JlKSAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTY3JlZW5OYW1lczogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqIFBhcmFtZXRlciBmZXRjaGluZyBwcm9wZXJ0aWVzICovXG4gIEBJbnB1dCgpIHBhcmFtZXRlck9wdGlvbnM6IGFueVtdID0gW107IC8vIFRlc3REYXRhW10gLSByYXcgdGVzdCBkYXRhIHByb2ZpbGVzXG4gIEBJbnB1dCgpIGhhc01vcmVQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1BhcmFtZXRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKiBFbnZpcm9ubWVudCBmZXRjaGluZyBwcm9wZXJ0aWVzICovXG4gIEBJbnB1dCgpIGVudmlyb25tZW50T3B0aW9uczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmcgfVtdID0gW107XG4gIEBJbnB1dCgpIGhhc01vcmVFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nRW52aXJvbm1lbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKiogRGVmYXVsdCB0ZXN0IGRhdGEgcHJvZmlsZSBwcm9wZXJ0aWVzICovXG4gIEBJbnB1dCgpIGRlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZD86IG51bWJlcjtcbiAgQElucHV0KCkgZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleD86IG51bWJlcjtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZGl0aW9uRm9ybURhdGE+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlRWxlbWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXQgd2hlbiBsb2FkIG1vcmUgaXMgcmVxdWVzdGVkXG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZWxlbWVudHNcbiAgQE91dHB1dCgpIGNyZWF0ZUVsZW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gRW1pdCB3aGVuIGVsZW1lbnQgaXMgY3JlYXRlZFxuICBAT3V0cHV0KCkgc2VhcmNoU2NyZWVuTmFtZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBzY3JlZW4gbmFtZXNcbiAgQE91dHB1dCgpIGxvYWRNb3JlU2NyZWVuTmFtZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gRW1pdCB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUgc2NyZWVuIG5hbWVzXG4gIEBPdXRwdXQoKSBjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBFbWl0IHdoZW4gdXNlciByZXF1ZXN0cyB0byBjcmVhdGUgYSBuZXcgc2NyZWVuIG5hbWVcbiAgQE91dHB1dCgpIHNlYXJjaFBhcmFtZXRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gRW1pdCB3aGVuIHVzZXIgc2VhcmNoZXMgZm9yIHBhcmFtZXRlcnNcbiAgQE91dHB1dCgpIGxvYWRNb3JlUGFyYW1ldGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTsgLy8gRW1pdCB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUgcGFyYW1ldGVyc1xuICBAT3V0cHV0KCkgc2VhcmNoRW52aXJvbm1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7IC8vIEVtaXQgd2hlbiB1c2VyIHNlYXJjaGVzIGZvciBlbnZpcm9ubWVudHNcbiAgQE91dHB1dCgpIGxvYWRNb3JlRW52aXJvbm1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBFbWl0IHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZSBlbnZpcm9ubWVudHNcbiAgQE91dHB1dCgpIHJlZGlyZWN0VG9QYXJhbWV0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWRpcmVjdFRvRW52aXJvbm1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uZGl0aW9uRm9ybTogRm9ybUdyb3VwO1xuICBpbmNsdWRlRWxzZTogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gQ2FjaGUgZm9yIHZhbHVlIGNvbmZpZ3MgdG8gYXZvaWQgcmVjcmVhdGluZyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uXG4gIHByaXZhdGUgdmFsdWVDb25maWdDYWNoZTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvLyBDYWNoZSBmb3Igb3BlcmF0b3IgY29uZmlncyAoc3RhdGljLCBubyBuZWVkIHRvIHJlY3JlYXRlKVxuICBwcml2YXRlIG9wZXJhdG9yQ29uZmlnQ2FjaGU6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB8IG51bGwgPSBudWxsO1xuICBcbiAgLy8gQ2FjaGUgZm9yIHZhbHVlIGNvbmZpZ3Mgd2l0aCBvbkNoYW5nZSBoYW5kbGVycyBwZXIgaW5kZXhcbiAgcHJpdmF0ZSB2YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnM6IE1hcDxudW1iZXIsIER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZz4gPSBuZXcgTWFwKCk7XG4gIFxuICAvLyBUcmFjayBzZWxlY3RlZCB0ZW1wbGF0ZXMgYW5kIHRoZWlyIHZhcmlhYmxlcyBmb3IgZWFjaCBjb25kaXRpb24gcm93XG4gIHByaXZhdGUgc2VsZWN0ZWRUZW1wbGF0ZXM6IE1hcDxudW1iZXIsIEFjdGlvblRlbXBsYXRlPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlczogTWFwPG51bWJlciwgYW55W10+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zOiBNYXA8bnVtYmVyLCBGb3JtQXJyYXk+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hcjogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTsgLy8gVXBkYXRlZCBIVE1MIGdyYW1tYXIgcGVyIGNvbmRpdGlvblxuICBcbiAgLy8gQ2FjaGUgZm9yIGNvbmRpdGlvbiBmb3JtIGdyb3VwcyB0byBhdm9pZCByZXBlYXRlZCBsb29rdXBzXG4gIHByaXZhdGUgY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGU6IE1hcDxudW1iZXIsIEZvcm1Hcm91cD4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMuY29uZGl0aW9uRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheShbXSksXG4gICAgICBpbmNsdWRlRWxzZTogW2ZhbHNlXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQWRkIGluaXRpYWwgY29uZGl0aW9uIHJvd1xuICAgIHRoaXMuYWRkQ29uZGl0aW9uKFwiQ09ORElUSU9OX0lGXCIpO1xuICAgIC8vIEluaXRpYWxpemUgY29uZmlnIGNhY2hlc1xuICAgIHRoaXMudXBkYXRlVmFsdWVDb25maWdDYWNoZSgpO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0b3JDb25maWdDYWNoZSgpO1xuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIFJlZ2VuZXJhdGUgdmFsdWUgY29uZmlnIGNhY2hlIHdoZW4gY29uZGl0aW9uVGVtcGxhdGVzIGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlc1snY29uZGl0aW9uVGVtcGxhdGVzJ10gJiYgIWNoYW5nZXNbJ2NvbmRpdGlvblRlbXBsYXRlcyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTtcbiAgICAgIC8vIENsZWFyIHZhbHVlIGNvbmZpZ3Mgd2l0aCBoYW5kbGVycyBzaW5jZSBiYXNlIGNvbmZpZyBjaGFuZ2VkXG4gICAgICB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5jbGVhcigpO1xuICAgIH1cbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSB1cGRhdGVPcGVyYXRvckNvbmZpZ0NhY2hlKCk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0b3JDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ29wZXJhdG9yJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IG9wZXJhdG9yJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogdGhpcy5vcGVyYXRvck9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNGb3JtQXJyYXkoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25Gb3JtLmdldCgnY29uZGl0aW9ucycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbihjb25kaXRpb25UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb25kaXRpb25Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZmllbGQ6IFtjb25kaXRpb25UeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG9wZXJhdG9yOiBbJ2VxdWFscycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSwgLy8gV2lsbCBzdG9yZSB0ZW1wbGF0ZSBJRCwgdGhlbiBtYXAgdG8gQWN0aW9uVGVtcGxhdGVcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgbWV0YWRhdGE6IFsnJ10sXG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbmRpdGlvbnNGb3JtQXJyYXkubGVuZ3RoO1xuICAgIHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5wdXNoKGNvbmRpdGlvbkdyb3VwKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHZhcmlhYmxlcyBmb3JtIGZvciB0aGlzIGNvbmRpdGlvbiAoRm9ybUFycmF5KVxuICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuc2V0KGluZGV4LCB0aGlzLmZiLmFycmF5KFtdKSk7XG4gICAgXG4gICAgLy8gQ2FjaGUgdGhlIGZvcm0gZ3JvdXBcbiAgICB0aGlzLmNvbmRpdGlvbkZvcm1Hcm91cENhY2hlLnNldChpbmRleCwgY29uZGl0aW9uR3JvdXApO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25kaXRpb25zRm9ybUFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgICAvLyBDbGVhbiB1cCBhc3NvY2lhdGVkIGRhdGFcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUuZGVsZXRlKGluZGV4KTtcbiAgICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmRlbGV0ZShpbmRleCk7XG4gICAgICBcbiAgICAgIC8vIFJlaW5kZXggcmVtYWluaW5nIGNvbmRpdGlvbnNcbiAgICAgIHRoaXMucmVpbmRleENvbmRpdGlvbkRhdGEoaW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBcbiAgcHJpdmF0ZSByZWluZGV4Q29uZGl0aW9uRGF0YShyZW1vdmVkSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIENyZWF0ZSBuZXcgbWFwcyB3aXRoIHJlaW5kZXhlZCBkYXRhXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRUZW1wbGF0ZXMgPSBuZXcgTWFwPG51bWJlciwgQWN0aW9uVGVtcGxhdGU+KCk7XG4gICAgY29uc3QgbmV3VGVtcGxhdGVWYXJpYWJsZXMgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gICAgY29uc3QgbmV3VmFyaWFibGVzRm9ybXMgPSBuZXcgTWFwPG51bWJlciwgRm9ybUFycmF5PigpO1xuICAgIGNvbnN0IG5ld0Zvcm1Hcm91cENhY2hlID0gbmV3IE1hcDxudW1iZXIsIEZvcm1Hcm91cD4oKTtcbiAgICBjb25zdCBuZXdWYWx1ZUNvbmZpZ3MgPSBuZXcgTWFwPG51bWJlciwgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnPigpO1xuICAgIGNvbnN0IG5ld1VwZGF0ZWRIdG1sR3JhbW1hciA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gICAgXG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5mb3JFYWNoKCh0ZW1wbGF0ZSwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdTZWxlY3RlZFRlbXBsYXRlcy5zZXQob2xkSW5kZXgsIHRlbXBsYXRlKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3U2VsZWN0ZWRUZW1wbGF0ZXMuc2V0KG9sZEluZGV4IC0gMSwgdGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGVzLCBvbGRJbmRleCkgPT4ge1xuICAgICAgaWYgKG9sZEluZGV4IDwgcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgIG5ld1RlbXBsYXRlVmFyaWFibGVzLnNldChvbGRJbmRleCwgdmFyaWFibGVzKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VGVtcGxhdGVWYXJpYWJsZXMuc2V0KG9sZEluZGV4IC0gMSwgdmFyaWFibGVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmZvckVhY2goKGZvcm0sIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4LCBmb3JtKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VmFyaWFibGVzRm9ybXMuc2V0KG9sZEluZGV4IC0gMSwgZm9ybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZS5mb3JFYWNoKChmb3JtR3JvdXAsIG9sZEluZGV4KSA9PiB7XG4gICAgICBpZiAob2xkSW5kZXggPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3Rm9ybUdyb3VwQ2FjaGUuc2V0KG9sZEluZGV4LCBmb3JtR3JvdXApO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdGb3JtR3JvdXBDYWNoZS5zZXQob2xkSW5kZXggLSAxLCBmb3JtR3JvdXApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMudmFsdWVDb25maWdzV2l0aEhhbmRsZXJzLmZvckVhY2goKGNvbmZpZywgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdWYWx1ZUNvbmZpZ3Muc2V0KG9sZEluZGV4LCBjb25maWcpO1xuICAgICAgfSBlbHNlIGlmIChvbGRJbmRleCA+IHJlbW92ZWRJbmRleCkge1xuICAgICAgICAvLyBSZWNyZWF0ZSBjb25maWcgd2l0aCBuZXcgaW5kZXggZm9yIG9uQ2hhbmdlIGhhbmRsZXJcbiAgICAgICAgY29uc3QgbmV3Q29uZmlnID0ge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25UZW1wbGF0ZVZhbHVlQ2hhbmdlKG9sZEluZGV4IC0gMSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbmV3VmFsdWVDb25maWdzLnNldChvbGRJbmRleCAtIDEsIG5ld0NvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25VcGRhdGVkSHRtbEdyYW1tYXIuZm9yRWFjaCgoZ3JhbW1hciwgb2xkSW5kZXgpID0+IHtcbiAgICAgIGlmIChvbGRJbmRleCA8IHJlbW92ZWRJbmRleCkge1xuICAgICAgICBuZXdVcGRhdGVkSHRtbEdyYW1tYXIuc2V0KG9sZEluZGV4LCBncmFtbWFyKTtcbiAgICAgIH0gZWxzZSBpZiAob2xkSW5kZXggPiByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgbmV3VXBkYXRlZEh0bWxHcmFtbWFyLnNldChvbGRJbmRleCAtIDEsIGdyYW1tYXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMgPSBuZXdTZWxlY3RlZFRlbXBsYXRlcztcbiAgICB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzID0gbmV3VGVtcGxhdGVWYXJpYWJsZXM7XG4gICAgdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3JtcyA9IG5ld1ZhcmlhYmxlc0Zvcm1zO1xuICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwQ2FjaGUgPSBuZXdGb3JtR3JvdXBDYWNoZTtcbiAgICB0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycyA9IG5ld1ZhbHVlQ29uZmlncztcbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hciA9IG5ld1VwZGF0ZWRIdG1sR3JhbW1hcjtcbiAgfVxuXG4gIGdldE9wZXJhdG9yQ29uZmlnKGluZGV4OiBudW1iZXIpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIC8vIFJldHVybiBjYWNoZWQgY29uZmlnIChzdGF0aWMsIHNhbWUgZm9yIGFsbCBjb25kaXRpb25zKVxuICAgIGlmICghdGhpcy5vcGVyYXRvckNvbmZpZ0NhY2hlKSB7XG4gICAgICB0aGlzLnVwZGF0ZU9wZXJhdG9yQ29uZmlnQ2FjaGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JDb25maWdDYWNoZSE7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBBY3Rpb25UZW1wbGF0ZVtdIHRvIFNlbGVjdE9wdGlvbltdXG4gICAgY29uc3QgdGVtcGxhdGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9ICh0aGlzLmNvbmRpdGlvblRlbXBsYXRlcyB8fCBbXSkubWFwKHRlbXBsYXRlID0+ICh7XG4gICAgICBpZDogdGVtcGxhdGUuaWQ/LnRvU3RyaW5nKCkgfHwgdGVtcGxhdGUuZGlzcGxheU5hbWUgfHwgJycsXG4gICAgICB2YWx1ZTogdGVtcGxhdGUuaWQ/LnRvU3RyaW5nKCkgfHwgdGVtcGxhdGUuZGlzcGxheU5hbWUgfHwgJycsXG4gICAgICBuYW1lOiB0ZW1wbGF0ZS5odG1sR3JhbW1hciB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dCB8fCAnJyxcbiAgICAgIGxhYmVsOiB0ZW1wbGF0ZS5odG1sR3JhbW1hciB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dCB8fCAnJ1xuICAgIH0pKTtcblxuICAgIHRoaXMudmFsdWVDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFRlbXBsYXRlKicsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgZGlzcGxheUxhYmVsQXNJbm5lckh0bWw6IHRydWUsXG4gICAgICBvcHRpb25zOiB0ZW1wbGF0ZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0VmFsdWVDb25maWcoaW5kZXg6IG51bWJlcik6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBjb25maWcgd2l0aCBoYW5kbGVyIHRvIGF2b2lkIHJlY3JlYXRpbmcgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIGlmICh0aGlzLnZhbHVlQ29uZmlnc1dpdGhIYW5kbGVycy5oYXMoaW5kZXgpKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuZ2V0KGluZGV4KSE7XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBiYXNlIGNvbmZpZyBjYWNoZSBleGlzdHNcbiAgICBpZiAoIXRoaXMudmFsdWVDb25maWdDYWNoZSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZUNvbmZpZ0NhY2hlKCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgY29uZmlnIHdpdGggb25DaGFuZ2UgaGFuZGxlciBmb3IgdGhpcyBzcGVjaWZpYyBpbmRleFxuICAgIGNvbnN0IGNvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy52YWx1ZUNvbmZpZ0NhY2hlISxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uVGVtcGxhdGVWYWx1ZUNoYW5nZShpbmRleCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgdGhpcy52YWx1ZUNvbmZpZ3NXaXRoSGFuZGxlcnMuc2V0KGluZGV4LCBjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgXG4gIG9uVGVtcGxhdGVWYWx1ZUNoYW5nZShpbmRleDogbnVtYmVyLCB0ZW1wbGF0ZUlkOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBzZWxlY3RlZCB0ZW1wbGF0ZVxuICAgIGNvbnN0IHNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlcy5maW5kKFxuICAgICAgdCA9PiAodC5pZD8udG9TdHJpbmcoKSA9PT0gdGVtcGxhdGVJZCkgfHwgKHQuZGlzcGxheU5hbWUgPT09IHRlbXBsYXRlSWQpXG4gICAgKTtcbiAgICBcbiAgICBpZiAoc2VsZWN0ZWRUZW1wbGF0ZSAmJiB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKSB7XG4gICAgICAvLyBTdG9yZSBzZWxlY3RlZCB0ZW1wbGF0ZVxuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5zZXQoaW5kZXgsIHNlbGVjdGVkVGVtcGxhdGUpO1xuICAgICAgXG4gICAgICAvLyBHZXQgdGVtcGxhdGUgdmFyaWFibGVzIHVzaW5nIHRoZSBwcm92aWRlZCBmdW5jdGlvblxuICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhzZWxlY3RlZFRlbXBsYXRlKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuc2V0KGluZGV4LCB2YXJpYWJsZXMpO1xuICAgICAgLy8gQnVpbGQgZm9ybSBmb3IgdGVtcGxhdGUgdmFyaWFibGVzXG4gICAgICB0aGlzLmJ1aWxkQ29uZGl0aW9uVmFyaWFibGVzRm9ybShpbmRleCwgdmFyaWFibGVzKTtcbiAgICAgIC8vIEluaXRpYWxpemUgdXBkYXRlZCBIVE1MIGdyYW1tYXJcbiAgICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDbGVhciB0ZW1wbGF0ZSBhbmQgdmFyaWFibGVzIGlmIG5vIHRlbXBsYXRlIHNlbGVjdGVkXG4gICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmRlbGV0ZShpbmRleCk7XG4gICAgICB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmRlbGV0ZShpbmRleCk7XG4gICAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hci5kZWxldGUoaW5kZXgpO1xuICAgICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoaW5kZXgpO1xuICAgICAgaWYgKGZvcm1BcnJheSkge1xuICAgICAgICB3aGlsZSAoZm9ybUFycmF5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGZvcm1BcnJheS5yZW1vdmVBdCgwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvblZhcmlhYmxlc0Zvcm0oaW5kZXg6IG51bWJlciwgdmFyaWFibGVzOiBhbnlbXSk6IHZvaWQge1xuICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLmdldChpbmRleCk7XG4gICAgaWYgKCFmb3JtQXJyYXkpIHtcbiAgICAgIGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoW10pO1xuICAgICAgdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5zZXQoaW5kZXgsIGZvcm1BcnJheSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBmb3JtQXJyYXkgaXMgbm90IHVuZGVmaW5lZCAoVHlwZVNjcmlwdCBndWFyZClcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdG9yZSByZWZlcmVuY2UgdG8gYXZvaWQgVHlwZVNjcmlwdCBpc3N1ZXMgaW4gZm9yRWFjaCBjYWxsYmFja1xuICAgIC8vIFR5cGVTY3JpcHQga25vd3MgZm9ybUFycmF5IGlzIGRlZmluZWQgaGVyZSBkdWUgdG8gdGhlIGVhcmx5IHJldHVybiBhYm92ZVxuICAgIGNvbnN0IGZvcm1BcnJheVJlZjogRm9ybUFycmF5ID0gZm9ybUFycmF5O1xuICAgIFxuICAgIC8vIENsZWFyIGV4aXN0aW5nIGZvcm0gYXJyYXlcbiAgICB3aGlsZSAoZm9ybUFycmF5UmVmLmxlbmd0aCAhPT0gMCkge1xuICAgICAgZm9ybUFycmF5UmVmLnJlbW92ZUF0KDApO1xuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgZm9ybSBncm91cHMgZm9yIGVhY2ggdmFyaWFibGVcbiAgICB2YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAvLyBIYW5kbGUgYm9vbGVhbiB2YXJpYWJsZXMgLSB1c2UgYm9vbGVhbiB2YWx1ZSwgb3RoZXJzIHVzZSBzdHJpbmdcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJyBcbiAgICAgICAgPyAodmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMSlcbiAgICAgICAgOiAodmFyaWFibGUudmFsdWUgfHwgJycpO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYSBGb3JtR3JvdXAgZm9yIGVhY2ggdmFyaWFibGUgd2l0aCBuYW1lIGFuZCB2YWx1ZVxuICAgICAgY29uc3QgdmFyaWFibGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbdmFyaWFibGUubmFtZV0sXG4gICAgICAgIHZhbHVlOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXSxcbiAgICAgICAgb3B0aW9uczogW3ZhcmlhYmxlLm9wdGlvbnMgfHwgW11dXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gQWRkIGRhdGFUeXBlIGNvbnRyb2wgZm9yIHRlc3QtZGF0YSB2YXJpYWJsZXMgaWYgbmVlZGVkXG4gICAgICBjb25zdCBsYWJlbCA9IHZhcmlhYmxlLmxhYmVsPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgaWYgKGxhYmVsID09PSAndGVzdC1kYXRhJyB8fCBsYWJlbCA9PT0gJ3NvdXJjZS12YWx1ZScgfHwgbGFiZWwgPT09ICd0YXJnZXQtdmFsdWUnIHx8IFxuICAgICAgICAgIGxhYmVsID09PSAnc291cmNlX3ZhbHVlJyB8fCBsYWJlbCA9PT0gJ3RhcmdldF92YWx1ZScpIHtcbiAgICAgICAgLy8gUGFyc2UgdGhlIHZhbHVlIHRvIGRldGVybWluZSBkYXRhIHR5cGVcbiAgICAgICAgY29uc3QgdmFsdWVTdHIgPSBTdHJpbmcoZGVmYXVsdFZhbHVlIHx8ICcnKTtcbiAgICAgICAgbGV0IGRhdGFUeXBlID0gJ3BsYWluLXRleHQnO1xuICAgICAgICBpZiAodmFsdWVTdHIuc3RhcnRzV2l0aCgnQHwnKSAmJiB2YWx1ZVN0ci5lbmRzV2l0aCgnfCcpKSB7XG4gICAgICAgICAgZGF0YVR5cGUgPSAncGFyYW1ldGVyJztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCckfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIHtcbiAgICAgICAgICBkYXRhVHlwZSA9ICdydW50aW1lJztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCcqfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIHtcbiAgICAgICAgICBkYXRhVHlwZSA9ICdlbnZpcm9ubWVudCc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyaWFibGVHcm91cC5hZGRDb250cm9sKCdkYXRhVHlwZScsIG5ldyBGb3JtQ29udHJvbChkYXRhVHlwZSkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBmb3JtQXJyYXlSZWYucHVzaCh2YXJpYWJsZUdyb3VwKTtcbiAgICB9KTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHVwZGF0ZWQgSFRNTCBncmFtbWFyIGZvciB0aGlzIGNvbmRpdGlvblxuICAgIHRoaXMudXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoaW5kZXgpO1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhpbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzLmdldChpbmRleCkgfHwgW107XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvblZhcmlhYmxlc0Zvcm0oaW5kZXg6IG51bWJlcik6IEZvcm1BcnJheSB7XG4gICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgICB0aGlzLmNvbmRpdGlvblZhcmlhYmxlc0Zvcm1zLnNldChpbmRleCwgZm9ybUFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1BcnJheTtcbiAgfVxuICBcbiAgZ2V0Q29uZGl0aW9uRm9ybUdyb3VwQXQoaW5kZXg6IG51bWJlciwgdmFyaWFibGVJbmRleDogbnVtYmVyKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldENvbmRpdGlvblZhcmlhYmxlc0Zvcm0oaW5kZXgpO1xuICAgIHJldHVybiBmb3JtQXJyYXkuYXQodmFyaWFibGVJbmRleCkgYXMgRm9ybUdyb3VwO1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25VcGRhdGVkSHRtbEdyYW1tYXIoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmdldChpbmRleCk7XG4gICAgaWYgKCF0ZW1wbGF0ZSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblVwZGF0ZWRIdG1sR3JhbW1hci5nZXQoaW5kZXgpIHx8IHRlbXBsYXRlLmh0bWxHcmFtbWFyIHx8IHRlbXBsYXRlLm5hdHVyYWxUZXh0IHx8ICcnO1xuICB9XG4gIFxuICBnZXRTZWxlY3RlZFRlbXBsYXRlKGluZGV4OiBudW1iZXIpOiBBY3Rpb25UZW1wbGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGVtcGxhdGVzLmdldChpbmRleCkgfHwgbnVsbDtcbiAgfVxuICBcbiAgZ2V0U2VsZWN0Q29uZmlnRm9yVmFyaWFibGUoaW5kZXg6IG51bWJlciwgdmFyaWFibGU6IGFueSk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSAodmFyaWFibGUub3B0aW9ucyB8fCBbXSkubWFwKChvcHQ6IHN0cmluZykgPT4gKHtcbiAgICAgIGlkOiBvcHQsXG4gICAgICB2YWx1ZTogb3B0LFxuICAgICAgbmFtZTogb3B0LFxuICAgICAgbGFiZWw6IG9wdFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHZhcmlhYmxlLm5hbWUsXG4gICAgICBwbGFjZWhvbGRlcjogYFNlbGVjdCAke3ZhcmlhYmxlLmxhYmVsfWAsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vbkNvbmRpdGlvblZhcmlhYmxlVmFsdWVDaGFuZ2UoaW5kZXgsIHZhcmlhYmxlLm5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIFxuICBvbkNvbmRpdGlvblZhcmlhYmxlVmFsdWVDaGFuZ2UoY29uZGl0aW9uSW5kZXg6IG51bWJlciwgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoY29uZGl0aW9uSW5kZXgpIHx8IFtdO1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5jb25kaXRpb25WYXJpYWJsZXNGb3Jtcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmIChmb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSBmb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICAgICk7XG4gICAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgZm9ybUFycmF5LmF0KHZhcmlhYmxlSW5kZXgpLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIEhUTUwgZ3JhbW1hciBmb3IgdGhpcyBjb25kaXRpb25cbiAgICB0aGlzLnVwZGF0ZUNvbmRpdGlvbkh0bWxHcmFtbWFyKGNvbmRpdGlvbkluZGV4KTtcbiAgICBcbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBcbiAgb25Db25kaXRpb25WYXJpYWJsZUlucHV0Q2hhbmdlKGNvbmRpdGlvbkluZGV4OiBudW1iZXIsIHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRoZSB2YXJpYWJsZSBpbiB0ZW1wbGF0ZVZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGNvbmRpdGlvbkluZGV4KSB8fCBbXTtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBjb250cm9sXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGNvbmRpdGlvbkluZGV4KTtcbiAgICBpZiAoZm9ybSAmJiBmb3JtLmdldCh2YXJpYWJsZU5hbWUpKSB7XG4gICAgICBmb3JtLmdldCh2YXJpYWJsZU5hbWUpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25Db25kaXRpb25WYXJpYWJsZUJvb2xlYW5DaGFuZ2UoY29uZGl0aW9uSW5kZXg6IG51bWJlciwgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRoZSB2YXJpYWJsZSBpbiB0ZW1wbGF0ZVZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGNvbmRpdGlvbkluZGV4KSB8fCBbXTtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBhcnJheVxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuY29uZGl0aW9uVmFyaWFibGVzRm9ybXMuZ2V0KGNvbmRpdGlvbkluZGV4KTtcbiAgICBpZiAoIWZvcm1BcnJheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB2YXJpYWJsZUluZGV4ID0gZm9ybUFycmF5LmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBmb3JtQXJyYXkuYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IGZvcm0gZ3JvdXAgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgY29uc3QgdmFyaWFibGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbdmFyaWFibGVOYW1lXSxcbiAgICAgICAgdmFsdWU6IFt2YWx1ZV0sXG4gICAgICAgIHR5cGU6IFsnYm9vbGVhbiddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlPy5sYWJlbCB8fCAnJ10sXG4gICAgICAgIG9wdGlvbnM6IFt2YXJpYWJsZT8ub3B0aW9ucyB8fCBbXV1cbiAgICAgIH0pO1xuICAgICAgLy8gZm9ybUFycmF5IGlzIGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZCBoZXJlIGR1ZSB0byB0aGUgZWFybHkgcmV0dXJuIGFib3ZlXG4gICAgICBmb3JtQXJyYXkucHVzaCh2YXJpYWJsZUdyb3VwKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVXBkYXRlIEhUTUwgZ3JhbW1hciBmb3IgdGhpcyBjb25kaXRpb25cbiAgICB0aGlzLnVwZGF0ZUNvbmRpdGlvbkh0bWxHcmFtbWFyKGNvbmRpdGlvbkluZGV4KTtcbiAgICBcbiAgICAvLyBNYXJrIGZvciBjaGVjayBzaW5jZSB3ZSdyZSB1c2luZyBPblB1c2hcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFN0cmlwIEhUTUwgdGFncyBmcm9tIGEgc3RyaW5nIGZvciBzZWFyY2ggZnVuY3Rpb25hbGl0eVxuICAgKi9cbiAgcHJpdmF0ZSBzdHJpcEh0bWxUYWdzKGh0bWxTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFodG1sU3RyaW5nKSByZXR1cm4gJyc7XG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpdiBlbGVtZW50IHRvIHBhcnNlIEhUTUxcbiAgICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICB0bXAuaW5uZXJIVE1MID0gaHRtbFN0cmluZztcbiAgICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJyc7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgSFRNTCBncmFtbWFyIGZvciBhIHNwZWNpZmljIGNvbmRpdGlvbiB3aXRoIGFjdHVhbCB2YXJpYWJsZSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ29uZGl0aW9uSHRtbEdyYW1tYXIoY29uZGl0aW9uSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5zZWxlY3RlZFRlbXBsYXRlcy5nZXQoY29uZGl0aW9uSW5kZXgpO1xuICAgIGlmICghdGVtcGxhdGUgfHwgIXRlbXBsYXRlLmh0bWxHcmFtbWFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGxldCB1cGRhdGVkR3JhbW1hciA9IHRlbXBsYXRlLmh0bWxHcmFtbWFyO1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMuZ2V0KGNvbmRpdGlvbkluZGV4KSB8fCBbXTtcbiAgICBcbiAgICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIGFjdHVhbCB2YWx1ZXNcbiAgICB2YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBjb25zdCBwbGFjZWhvbGRlciA9IG5ldyBSZWdFeHAoYDxzcGFuW14+XSpkYXRhLWV2ZW50LWtleT1cIiR7dmFyaWFibGUubmFtZX1cIltePl0qPi4qPzwvc3Bhbj5gLCAnZ2knKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmFyaWFibGUudmFsdWUgfHwgJyc7XG4gICAgICAvLyBFc2NhcGUgSFRNTCBpbiB2YWx1ZSB0byBwcmV2ZW50IFhTU1xuICAgICAgY29uc3QgZXNjYXBlZFZhbHVlID0gU3RyaW5nKHZhbHVlKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gICAgICB1cGRhdGVkR3JhbW1hciA9IHVwZGF0ZWRHcmFtbWFyLnJlcGxhY2UocGxhY2Vob2xkZXIsIGVzY2FwZWRWYWx1ZSk7XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5jb25kaXRpb25VcGRhdGVkSHRtbEdyYW1tYXIuc2V0KGNvbmRpdGlvbkluZGV4LCB1cGRhdGVkR3JhbW1hcik7XG4gIH1cblxuICBnZXRDb25kaXRpb25Gb3JtR3JvdXAoaW5kZXg6IG51bWJlcik6IEZvcm1Hcm91cCB7XG4gICAgLy8gVXNlIGNhY2hlIHRvIGF2b2lkIHJlcGVhdGVkIGxvb2t1cHNcbiAgICBpZiAodGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZS5oYXMoaW5kZXgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZS5nZXQoaW5kZXgpITtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5jb25kaXRpb25zRm9ybUFycmF5LmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgdGhpcy5jb25kaXRpb25Gb3JtR3JvdXBDYWNoZS5zZXQoaW5kZXgsIGZvcm1Hcm91cCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtR3JvdXA7XG4gIH1cbiAgXG4gIGdldENvbmRpdGlvbkZpZWxkVmFsdWUoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5nZXRDb25kaXRpb25Gb3JtR3JvdXAoaW5kZXgpO1xuICAgIHJldHVybiBmb3JtR3JvdXA/LmdldCgnZmllbGQnKT8udmFsdWUgfHwgJyc7XG4gIH1cbiAgXG4gIGlzQ29uZGl0aW9uSWYoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbmRpdGlvbkZpZWxkVmFsdWUoaW5kZXgpID09PSAnQ09ORElUSU9OX0lGJztcbiAgfVxuICBcbiAgaXNDb25kaXRpb25FbHNlSWYoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbmRpdGlvbkZpZWxkVmFsdWUoaW5kZXgpID09PSAnQ09ORElUSU9OX0VMU0VfSUYnO1xuICB9XG4gIFxuICBnZXRDb25kaXRpb25MYWJlbChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5nZXRDb25kaXRpb25GaWVsZFZhbHVlKGluZGV4KTtcbiAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJ0NPTkRJVElPTl9JRicpIHJldHVybiAnSUYnO1xuICAgIGlmIChmaWVsZFZhbHVlID09PSAnQ09ORElUSU9OX0VMU0VfSUYnKSByZXR1cm4gJ0VMU0UgSUYnO1xuICAgIHJldHVybiAnRUxTRSc7XG4gIH1cbiAgXG4gIHRyYWNrQnlDb25kaXRpb25JbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBvbkluY2x1ZGVFbHNlQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmluY2x1ZGVFbHNlID0gY2hlY2tlZDtcbiAgICB0aGlzLmNvbmRpdGlvbkZvcm0ucGF0Y2hWYWx1ZSh7IGluY2x1ZGVFbHNlOiBjaGVja2VkIH0pO1xuICAgIFxuICAgIC8vIE1hcmsgZm9yIGNoZWNrIHNpbmNlIHdlJ3JlIHVzaW5nIE9uUHVzaFxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmRpdGlvbkZvcm0udmFsaWQpIHtcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuY29uZGl0aW9uRm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBEYXRhOiBDb25kaXRpb25Gb3JtRGF0YSA9IHtcbiAgICAgICAgY29uZGl0aW9uczogZm9ybVZhbHVlLmNvbmRpdGlvbnMubWFwKChjb25kOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBBY3Rpb25UZW1wbGF0ZSBvYmplY3QgZnJvbSB0aGUgc3RvcmVkIElEL3ZhbHVlXG4gICAgICAgICAgY29uc3QgdGVtcGxhdGVJZCA9IGNvbmQudmFsdWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVzLmZpbmQoXG4gICAgICAgICAgICB0ID0+ICh0LmlkPy50b1N0cmluZygpID09PSB0ZW1wbGF0ZUlkKSB8fCAodC5kaXNwbGF5TmFtZSA9PT0gdGVtcGxhdGVJZClcbiAgICAgICAgICApIHx8IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZXMuZ2V0KGluZGV4KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBHZXQgdGVtcGxhdGUgdmFyaWFibGVzIGZvciB0aGlzIGNvbmRpdGlvblxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcy5nZXQoaW5kZXgpIHx8IFtdO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWVsZDogY29uZC5maWVsZCxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBjb25kLm9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkVGVtcGxhdGUgfHwgbnVsbCxcbiAgICAgICAgICAgIHRlbXBsYXRlVmFyaWFibGVzOiB0ZW1wbGF0ZVZhcmlhYmxlcyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb25kLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGNvbmQubWV0YWRhdGEgfHwgJydcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICAgaW5jbHVkZUVsc2U6IGZvcm1WYWx1ZS5pbmNsdWRlRWxzZSB8fCBmYWxzZVxuICAgICAgfTtcbiAgICAgIGNvbnNvbGUubG9nKCdzdGVwRGF0YScsIHN0ZXBEYXRhKTtcbiAgICAgIHRoaXMuY3JlYXRlU3RlcC5lbWl0KHN0ZXBEYXRhKTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaC1mdWxsIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMlwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIENyZWF0ZSBDb25kaXRpb24gU3RlcFxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBDb25kaXRpb24gQnVpbGRlciBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0zXCI+XG4gICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgQ29uZGl0aW9uIEJ1aWxkZXJcbiAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb25kaXRpb24gUm93cyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zIGNxYS1tYi0zXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zRm9ybUFycmF5LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29uZGl0aW9uSW5kZXhcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImlzQ29uZGl0aW9uSWYoaSkgfHwgaXNDb25kaXRpb25FbHNlSWYoaSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8IS0tIENvbmRpdGlvbiBSb3cgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPCEtLSBDb25kaXRpb24gTGFiZWwgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRDb25kaXRpb25MYWJlbChpKSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIE9wZXJhdG9yIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1tYXgtdy1bMTAwcHhdIGNxYS10ZXh0LVsxMHB4XVwiPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpXCIgW2NvbmZpZ109XCJnZXRPcGVyYXRvckNvbmZpZyhpKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgPCEtLSBWYWx1ZSBUZW1wbGF0ZSBEcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LVsxNTBweF0gY3FhLXRleHQtWzEwcHhdXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSlcIiBbY29uZmlnXT1cImdldFZhbHVlQ29uZmlnKGkpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gUmVtb3ZlIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImkgPj0gMVwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICAgIGljb249XCJjbG9zZVwiXG4gICAgICAgICAgICAgICAgaWNvblBvc2l0aW9uPVwic3RhcnRcIlxuICAgICAgICAgICAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlcidcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDb25kaXRpb24oaSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZSBjb25kaXRpb24nXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctOCBjcWEtaC04IGNxYS1yb3VuZGVkIGNxYS10ZXh0LWdyYXktNTAwIGhvdmVyOmNxYS10ZXh0LWdyYXktNzAwIGhvdmVyOmNxYS1iZy1ncmF5LTEwMCBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDb25kaXRpb24oaSlcIiAqbmdJZj1cImkgPj0gMVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlIGNvbmRpdGlvbidcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtdGV4dC1bMjRweF1cIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRlbXBsYXRlIFZhcmlhYmxlcyBTZWN0aW9uIChzaG93biB3aGVuIHRlbXBsYXRlIGlzIHNlbGVjdGVkKSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRTZWxlY3RlZFRlbXBsYXRlKGkpXCIgY2xhc3M9XCJjcWEtbXQtMlwiPlxuICAgICAgICAgICAgICA8IS0tIFRlbXBsYXRlIEdyYW1tYXIgRGlzcGxheSAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi00IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTEgY3FhLXRleHQtc20gY3FhLXRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFjdGlvbi1mb3JtYXQgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsyM3B4XSBjcWEtdGV4dC1ibGFjay0xMDBcIlxuICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRTZWxlY3RlZFRlbXBsYXRlKGkpPy5odG1sR3JhbW1hciB8fCBnZXRTZWxlY3RlZFRlbXBsYXRlKGkpPy5uYXR1cmFsVGV4dCB8fCAnJ1wiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgVmFyaWFibGVzIEZvcm0gQ29tcG9uZW50IChpbmNsdWRlcyBEZXNjcmlwdGlvbiBhbmQgTWV0YWRhdGEpIC0tPlxuICAgICAgICAgICAgICA8Y3FhLXRlbXBsYXRlLXZhcmlhYmxlcy1mb3JtXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIlxuICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZVZhcmlhYmxlc109XCJnZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyhpKVwiXG4gICAgICAgICAgICAgICAgW3ZhcmlhYmxlc0Zvcm1dPVwiZ2V0Q29uZGl0aW9uVmFyaWFibGVzRm9ybShpKVwiXG4gICAgICAgICAgICAgICAgW21ldGFkYXRhXT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKS5nZXQoJ21ldGFkYXRhJyk/LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiZ2V0Q29uZGl0aW9uRm9ybUdyb3VwKGkpLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgIFtlbGVtZW50T3B0aW9uc109XCJlbGVtZW50T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2hhc01vcmVFbGVtZW50c109XCJoYXNNb3JlRWxlbWVudHNcIlxuICAgICAgICAgICAgICAgIFtpc0xvYWRpbmdFbGVtZW50c109XCJpc0xvYWRpbmdFbGVtZW50c1wiXG4gICAgICAgICAgICAgICAgW3NjcmVlbk5hbWVPcHRpb25zXT1cInNjcmVlbk5hbWVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbaGFzTW9yZVNjcmVlbk5hbWVzXT1cImhhc01vcmVTY3JlZW5OYW1lc1wiXG4gICAgICAgICAgICAgICAgW2lzTG9hZGluZ1NjcmVlbk5hbWVzXT1cImlzTG9hZGluZ1NjcmVlbk5hbWVzXCJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVyT3B0aW9uc109XCJwYXJhbWV0ZXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbaGFzTW9yZVBhcmFtZXRlcnNdPVwiaGFzTW9yZVBhcmFtZXRlcnNcIlxuICAgICAgICAgICAgICAgIFtpc0xvYWRpbmdQYXJhbWV0ZXJzXT1cImlzTG9hZGluZ1BhcmFtZXRlcnNcIlxuICAgICAgICAgICAgICAgIFtlbnZpcm9ubWVudE9wdGlvbnNdPVwiZW52aXJvbm1lbnRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbaGFzTW9yZUVudmlyb25tZW50c109XCJoYXNNb3JlRW52aXJvbm1lbnRzXCJcbiAgICAgICAgICAgICAgICBbaXNMb2FkaW5nRW52aXJvbm1lbnRzXT1cImlzTG9hZGluZ0Vudmlyb25tZW50c1wiXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZF09XCJkZWZhdWx0VGVzdERhdGFQcm9maWxlSWRcIlxuICAgICAgICAgICAgICAgIFtkZWZhdWx0VGVzdERhdGFTdGFydEluZGV4XT1cImRlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXhcIlxuICAgICAgICAgICAgICAgICh2YXJpYWJsZVZhbHVlQ2hhbmdlKT1cIm9uQ29uZGl0aW9uVmFyaWFibGVWYWx1ZUNoYW5nZShpLCAkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkNvbmRpdGlvblZhcmlhYmxlQm9vbGVhbkNoYW5nZShpLCAkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgKG1ldGFkYXRhQ2hhbmdlKT1cImdldENvbmRpdGlvbkZvcm1Hcm91cChpKS5nZXQoJ21ldGFkYXRhJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkZXNjcmlwdGlvbkNoYW5nZSk9XCJnZXRDb25kaXRpb25Gb3JtR3JvdXAoaSkuZ2V0KCdkZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobG9hZE1vcmVFbGVtZW50cyk9XCJsb2FkTW9yZUVsZW1lbnRzLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgKHNlYXJjaEVsZW1lbnRzKT1cInNlYXJjaEVsZW1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNyZWF0ZUVsZW1lbnQpPVwiY3JlYXRlRWxlbWVudC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWFyY2hTY3JlZW5OYW1lKT1cInNlYXJjaFNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobG9hZE1vcmVTY3JlZW5OYW1lcyk9XCJsb2FkTW9yZVNjcmVlbk5hbWVzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0KT1cImNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlYXJjaFBhcmFtZXRlcnMpPVwic2VhcmNoUGFyYW1ldGVycy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChsb2FkTW9yZVBhcmFtZXRlcnMpPVwibG9hZE1vcmVQYXJhbWV0ZXJzLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgKHNlYXJjaEVudmlyb25tZW50cyk9XCJzZWFyY2hFbnZpcm9ubWVudHMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobG9hZE1vcmVFbnZpcm9ubWVudHMpPVwibG9hZE1vcmVFbnZpcm9ubWVudHMuZW1pdCgpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLXRlbXBsYXRlLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQWRkIENvbmRpdGlvbiBCdXR0b24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWJvcmRlci0yIGNxYS1ib3JkZXItZGFzaGVkIGNxYS1ib3JkZXItZ3JheS0zMDAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMSBjcWEtbXQtM1wiPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICBpY29uPVwiYWRkXCJcbiAgICAgICAgICBpY29uUG9zaXRpb249XCJzdGFydFwiXG4gICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyJ1wiXG4gICAgICAgICAgW3RleHRdPVwiJ0FkZCBDb25kaXRpb24nXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJhZGRDb25kaXRpb24oJ0NPTkRJVElPTl9FTFNFX0lGJylcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEluY2x1ZGUgRUxTRSBCcmFuY2ggU2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1tYi02IGNxYS1wLTMgY3FhLWJnLWdyYXktNTAgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWdyYXktOTAwIGNxYS1tYi0xXCI+XG4gICAgICAgICAgSW5jbHVkZSBFTFNFIGJyYW5jaFxuICAgICAgICA8L2gzPlxuICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgIEV4ZWN1dGUgYWx0ZXJuYXRpdmUgc3RlcHMgd2hlbiBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbY2hlY2tlZF09XCJpbmNsdWRlRWxzZVwiIChjaGFuZ2UpPVwib25JbmNsdWRlRWxzZUNoYW5nZSgkZXZlbnQuY2hlY2tlZClcIiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1nYXAtMiBjcWEtbXQtYXV0byBjcWEtcHQtNCBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxjcWEtYnV0dG9uIGNsYXNzPVwiY3FhLXctMS8yXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgdGV4dD1cIkNhbmNlbFwiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uIGNsYXNzPVwiY3FhLXctMS8yXCIgdmFyaWFudD1cImZpbGxlZFwiIHRleHQ9XCJDcmVhdGUgU3RlcFwiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWNvbmRpdGlvbkZvcm0udmFsaWRcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|