@cqa-lib/cqa-ui 1.1.334 → 1.1.335
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/code-editor/code-editor.component.mjs +267 -0
- package/esm2020/lib/code-editor/code-editor.styles.mjs +56 -0
- package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +26 -4
- package/esm2020/lib/ui-kit.module.mjs +17 -4
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +368 -21
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +373 -21
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/code-editor/code-editor.component.d.ts +66 -0
- package/lib/code-editor/code-editor.styles.d.ts +7 -0
- package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +7 -0
- package/lib/ui-kit.module.d.ts +84 -82
- package/package.json +3 -1
- package/public-api.d.ts +1 -0
- package/styles.css +1 -1
package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { FormControl, FormArray, Validators } from '@angular/forms';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/forms";
|
|
5
5
|
import * as i2 from "../../dynamic-select/dynamic-select-field.component";
|
|
6
|
-
import * as i3 from "../../
|
|
6
|
+
import * as i3 from "../../code-editor/code-editor.component";
|
|
7
7
|
import * as i4 from "../../custom-input/custom-input.component";
|
|
8
8
|
import * as i5 from "@angular/material/slide-toggle";
|
|
9
9
|
import * as i6 from "@angular/material/icon";
|
|
@@ -29,6 +29,7 @@ export class StepBuilderCustomCodeComponent {
|
|
|
29
29
|
this.templateVariables = [];
|
|
30
30
|
this.advancedSettingsVariables = [];
|
|
31
31
|
this.advancedExpanded = true;
|
|
32
|
+
this.codeValidationErrors = [];
|
|
32
33
|
this.customCodeForm = this.fb.group({
|
|
33
34
|
language: ['', Validators.required],
|
|
34
35
|
code: ['', Validators.required],
|
|
@@ -219,6 +220,27 @@ export class StepBuilderCustomCodeComponent {
|
|
|
219
220
|
toggleAdvanced() {
|
|
220
221
|
this.advancedExpanded = !this.advancedExpanded;
|
|
221
222
|
}
|
|
223
|
+
onCodeValueChange(value) {
|
|
224
|
+
this.customCodeForm.get('code')?.setValue(value, { emitEvent: false });
|
|
225
|
+
}
|
|
226
|
+
onCodeValidationChange(errors) {
|
|
227
|
+
this.codeValidationErrors = errors || [];
|
|
228
|
+
}
|
|
229
|
+
get hasCodeSyntaxErrors() {
|
|
230
|
+
return this.codeValidationErrors.length > 0;
|
|
231
|
+
}
|
|
232
|
+
/** Form validation errors for the code field (e.g. "Code is required") - passed to code editor [errors] */
|
|
233
|
+
get codeFieldErrors() {
|
|
234
|
+
const codeControl = this.customCodeForm.get('code');
|
|
235
|
+
if (!codeControl?.invalid || !codeControl?.touched)
|
|
236
|
+
return [];
|
|
237
|
+
const err = codeControl.errors;
|
|
238
|
+
if (!err)
|
|
239
|
+
return [];
|
|
240
|
+
if (err['required'])
|
|
241
|
+
return ['Code is required'];
|
|
242
|
+
return [];
|
|
243
|
+
}
|
|
222
244
|
onCreateStep() {
|
|
223
245
|
if (this.customCodeForm.valid) {
|
|
224
246
|
// Sync advanced variables from form to array
|
|
@@ -249,10 +271,10 @@ export class StepBuilderCustomCodeComponent {
|
|
|
249
271
|
}
|
|
250
272
|
}
|
|
251
273
|
StepBuilderCustomCodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderCustomCodeComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
252
|
-
StepBuilderCustomCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderCustomCodeComponent, selector: "cqa-step-builder-custom-code", inputs: { languageOptions: "languageOptions", template: "template", setTemplateVariables: "setTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", initialCode: "initialCode", initialLanguage: "initialLanguage", initialMetadata: "initialMetadata", initialDescription: "initialDescription", isEditMode: "isEditMode" }, outputs: { createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col 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 Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code
|
|
274
|
+
StepBuilderCustomCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderCustomCodeComponent, selector: "cqa-step-builder-custom-code", inputs: { languageOptions: "languageOptions", template: "template", setTemplateVariables: "setTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", initialCode: "initialCode", initialLanguage: "initialLanguage", initialMetadata: "initialMetadata", initialDescription: "initialDescription", isEditMode: "isEditMode" }, outputs: { createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code Editor -->\n <div class=\"cqa-mb-3\">\n <cqa-code-editor\n [label]=\"'Code'\"\n [required]=\"true\"\n [value]=\"customCodeForm.get('code')?.value\"\n [language]=\"customCodeForm.get('language')?.value || 'javascript'\"\n [minHeight]=\"'220px'\"\n [fullWidth]=\"true\"\n [errors]=\"codeFieldErrors\"\n (valueChange)=\"onCodeValueChange($event)\"\n (validationChange)=\"onCodeValidationChange($event)\"\n (blur)=\"customCodeForm.get('code')?.markAsTouched()\">\n </cqa-code-editor>\n </div>\n\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Template Variables Section -->\n <div *ngIf=\"templateVariables && templateVariables.length > 0\" class=\"cqa-mb-4\">\n <!-- Template Variables Form Fields -->\n <div class=\"cqa-flex cqa-gap-x-6 cqa-flex-wrap cqa-mb-4\">\n <ng-container *ngFor=\"let variable of templateVariables\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"variable.type === 'boolean'\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">\n {{ variable.label }}\n </label>\n <mat-slide-toggle\n [checked]=\"variablesForm.get(variable.name)?.value || variable.value || false\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n </div>\n </ng-container>\n \n <!-- Non-boolean, non-custom_code variables -->\n <ng-container *ngIf=\"variable.name !== 'custom_code' && variable.type !== 'boolean'\">\n <ng-container *ngIf=\"(variable.name === 'type' || variable.name === 'scrollTo'); else defaultInput\">\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-dynamic-select [form]=\"variablesForm\" [config]=\"getSelectConfig(variable)\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-template #defaultInput>\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n </cqa-custom-input>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"advancedSettingsVariables.length > 0\" class=\"cqa-mb-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"advancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"advancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n\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 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"isEditMode ? 'Save Changes' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!customCodeForm.valid || hasCodeSyntaxErrors\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.CodeEditorComponent, selector: "cqa-code-editor", inputs: ["value", "language", "label", "required", "placeholder", "fullWidth", "ariaLabel", "minHeight", "readOnly", "errors", "useFallback"], outputs: ["valueChange", "validationChange", "blur"] }, { type: i4.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { 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"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i8.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
253
275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderCustomCodeComponent, decorators: [{
|
|
254
276
|
type: Component,
|
|
255
|
-
args: [{ selector: 'cqa-step-builder-custom-code', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col 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 Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code
|
|
277
|
+
args: [{ selector: 'cqa-step-builder-custom-code', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code Editor -->\n <div class=\"cqa-mb-3\">\n <cqa-code-editor\n [label]=\"'Code'\"\n [required]=\"true\"\n [value]=\"customCodeForm.get('code')?.value\"\n [language]=\"customCodeForm.get('language')?.value || 'javascript'\"\n [minHeight]=\"'220px'\"\n [fullWidth]=\"true\"\n [errors]=\"codeFieldErrors\"\n (valueChange)=\"onCodeValueChange($event)\"\n (validationChange)=\"onCodeValidationChange($event)\"\n (blur)=\"customCodeForm.get('code')?.markAsTouched()\">\n </cqa-code-editor>\n </div>\n\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Template Variables Section -->\n <div *ngIf=\"templateVariables && templateVariables.length > 0\" class=\"cqa-mb-4\">\n <!-- Template Variables Form Fields -->\n <div class=\"cqa-flex cqa-gap-x-6 cqa-flex-wrap cqa-mb-4\">\n <ng-container *ngFor=\"let variable of templateVariables\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"variable.type === 'boolean'\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">\n {{ variable.label }}\n </label>\n <mat-slide-toggle\n [checked]=\"variablesForm.get(variable.name)?.value || variable.value || false\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n </div>\n </ng-container>\n \n <!-- Non-boolean, non-custom_code variables -->\n <ng-container *ngIf=\"variable.name !== 'custom_code' && variable.type !== 'boolean'\">\n <ng-container *ngIf=\"(variable.name === 'type' || variable.name === 'scrollTo'); else defaultInput\">\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-dynamic-select [form]=\"variablesForm\" [config]=\"getSelectConfig(variable)\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-template #defaultInput>\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n </cqa-custom-input>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"advancedSettingsVariables.length > 0\" class=\"cqa-mb-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"advancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"advancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n\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 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"isEditMode ? 'Save Changes' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!customCodeForm.valid || hasCodeSyntaxErrors\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
|
|
256
278
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { languageOptions: [{
|
|
257
279
|
type: Input
|
|
258
280
|
}], template: [{
|
|
@@ -276,4 +298,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
276
298
|
}], cancelled: [{
|
|
277
299
|
type: Output
|
|
278
300
|
}] } });
|
|
279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS9zdGVwLWJ1aWxkZXItY3VzdG9tLWNvZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBbUI1RixNQUFNLE9BQU8sOEJBQThCO0lBZ0N6QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQS9CbkMsb0NBQW9DO1FBQzNCLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUU5QyxxQ0FBcUM7UUFDNUIsYUFBUSxHQUEwQixJQUFJLENBQUM7UUFFaEQsbUdBQW1HO1FBQzFGLHlCQUFvQixHQUF1QyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQSxDQUFBLENBQUMsQ0FBQztRQUN2RiwyRkFBMkY7UUFDbEYsaUNBQTRCLEdBQXdELEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBLENBQUEsQ0FBQyxDQUFDO1FBT3ZHLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFckMsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUU5RCwwQkFBMEI7UUFDaEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHL0Ms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SztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9zdGVwLWJ1aWxkZXItYWN0aW9uL3N0ZXAtYnVpbGRlci1hY3Rpb24uY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Db2RlRm9ybURhdGEge1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdGVtcGxhdGVWYXJpYWJsZXM/OiBhbnlbXTtcbiAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcz86IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckN1c3RvbUNvZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciBsYW5ndWFnZSBkcm9wZG93biAqL1xuICBASW5wdXQoKSBsYW5ndWFnZU9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIFRlbXBsYXRlIHRvIGdldCB2YXJpYWJsZXMgZnJvbSAqL1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogQWN0aW9uVGVtcGxhdGUgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKiBGdW5jdGlvbiB0byBoYW5kbGUgdmFyaWFibGUgcHJvY2Vzc2luZyBvciBjdXN0b20gbG9naWMuIENhbiBiZSBwYXNzZWQgZnJvbSBwYXJlbnQgY29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzZXRUZW1wbGF0ZVZhcmlhYmxlczogKHZhcmlhYmxlczogQWN0aW9uVGVtcGxhdGUpID0+IGFueSA9ICgpID0+IHsgcmV0dXJuIFtdfTtcbiAgLyoqIEZ1bmN0aW9uIHRvIGhhbmRsZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMuIENhbiBiZSBwYXNzZWQgZnJvbSBwYXJlbnQgY29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiAodGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlLCB0ZXN0U3RlcD86IGFueSkgPT4gYW55W10gPSAoKSA9PiB7IHJldHVybiBbXX07XG4gIFxuICAvKiogSW5pdGlhbCB2YWx1ZXMgZm9yIGVkaXRpbmcgbW9kZSAqL1xuICBASW5wdXQoKSBpbml0aWFsQ29kZT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbExhbmd1YWdlPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsTWV0YWRhdGE/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCkgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPEN1c3RvbUNvZGVGb3JtRGF0YT4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGN1c3RvbUNvZGVGb3JtOiBGb3JtR3JvdXA7XG4gIHRlbXBsYXRlVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICB2YXJpYWJsZXNGb3JtOiBGb3JtR3JvdXA7XG4gIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IGFueVtdID0gW107XG4gIGFkdmFuY2VkVmFyaWFibGVzRm9ybTogRm9ybUFycmF5O1xuICBhZHZhbmNlZEV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxhbmd1YWdlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgY29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLnZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuYXJyYXkoW10pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmb3JtIHdpdGggaW5pdGlhbCB2YWx1ZXMgaWYgaW4gZWRpdCBtb2RlXG4gICAgaWYgKHRoaXMuaXNFZGl0TW9kZSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybVdpdGhWYWx1ZXMoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB0ZW1wbGF0ZSB2YXJpYWJsZXMgaWYgdGVtcGxhdGUgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW1wbGF0ZSkge1xuICAgICAgdGhpcy5sb2FkVGVtcGxhdGVWYXJpYWJsZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3RlbXBsYXRlJ10gJiYgdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgdGhpcy5sb2FkVGVtcGxhdGVWYXJpYWJsZXMoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmUtaW5pdGlhbGl6ZSBmb3JtIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZVxuICAgIGlmICgoY2hhbmdlc1snaW5pdGlhbENvZGUnXSB8fCBjaGFuZ2VzWydpbml0aWFsTGFuZ3VhZ2UnXSB8fCBjaGFuZ2VzWydpbml0aWFsTWV0YWRhdGEnXSB8fCBcbiAgICAgICAgIGNoYW5nZXNbJ2luaXRpYWxEZXNjcmlwdGlvbiddIHx8IGNoYW5nZXNbJ2lzRWRpdE1vZGUnXSkgJiYgdGhpcy5pc0VkaXRNb2RlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtV2l0aFZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm1XaXRoVmFsdWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxDb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0ucGF0Y2hWYWx1ZSh7IGNvZGU6IHRoaXMuaW5pdGlhbENvZGUgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmluaXRpYWxMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgbGFuZ3VhZ2U6IHRoaXMuaW5pdGlhbExhbmd1YWdlIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsTWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgbWV0YWRhdGE6IHRoaXMuaW5pdGlhbE1ldGFkYXRhIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsRGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgZGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRlbXBsYXRlVmFyaWFibGVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlICYmIHRoaXMuc2V0VGVtcGxhdGVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldFRlbXBsYXRlVmFyaWFibGVzKHRoaXMudGVtcGxhdGUpO1xuICAgICAgdGhpcy5idWlsZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIFxuICAgICAgLy8gSW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXNcbiAgICAgIGlmICh0aGlzLnNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMpIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzID0gdGhpcy5zZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKHRoaXMudGVtcGxhdGUpO1xuICAgICAgICB0aGlzLmJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBjb250cm9sc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudmFyaWFibGVzRm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBmb3JtIGNvbnRyb2xzIGZvciBlYWNoIHZhcmlhYmxlXG4gICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBib29sZWFuIHZhcmlhYmxlcyAtIHVzZSBib29sZWFuIHZhbHVlLCBvdGhlcnMgdXNlIHN0cmluZ1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICA6ICh2YXJpYWJsZS52YWx1ZSB8fCAnJyk7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uYWRkQ29udHJvbCh2YXJpYWJsZS5uYW1lLCBuZXcgRm9ybUNvbnRyb2woZGVmYXVsdFZhbHVlKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRTZWxlY3RDb25maWcodmFyaWFibGU6IGFueSk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSAodmFyaWFibGUub3B0aW9ucyB8fCBbXSkubWFwKChvcHQ6IHN0cmluZykgPT4gKHtcbiAgICAgIGlkOiBvcHQsXG4gICAgICB2YWx1ZTogb3B0LFxuICAgICAgbmFtZTogb3B0LFxuICAgICAgbGFiZWw6IG9wdFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHZhcmlhYmxlLm5hbWUsXG4gICAgICBwbGFjZWhvbGRlcjogYFNlbGVjdCAke3ZhcmlhYmxlLmxhYmVsfWAsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAodGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAodGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uYWRkQ29udHJvbCh2YXJpYWJsZU5hbWUsIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldExhbmd1YWdlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogdGhpcy5sYW5ndWFnZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGFycmF5XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZvcm0gZ3JvdXBzIGZvciBlYWNoIGFkdmFuY2VkIHZhcmlhYmxlXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCB0eXBlc1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55O1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgLy8gRm9yIHN0cl9saXN0LCBjcmVhdGUgYSBGb3JtQXJyYXlcbiAgICAgICAgY29uc3QgdmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFyaWFibGUudmFsdWUpID8gdmFyaWFibGUudmFsdWUgOiBbXTtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5VmFsdWUgPSB0aGlzLmZiLmFycmF5KFxuICAgICAgICAgIHZhbHVlQXJyYXkubGVuZ3RoID4gMCBcbiAgICAgICAgICAgID8gdmFsdWVBcnJheS5tYXAoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5mYi5jb250cm9sKGl0ZW0pKVxuICAgICAgICAgICAgOiBbdGhpcy5mYi5jb250cm9sKCcnKV0gLy8gU3RhcnQgd2l0aCBvbmUgZW1wdHkgY29udHJvbFxuICAgICAgICApO1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSBmb3JtQXJyYXlWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgRm9ybUdyb3VwIGZvciBlYWNoIHZhcmlhYmxlXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgICAgLy8gRm9yIHN0cl9saXN0LCB0aGUgRm9ybUFycmF5IGlzIGFscmVhZHkgbWFuYWdlZCBpbnNpZGUgQWR2YW5jZWRWYXJpYWJsZXNGb3JtQ29tcG9uZW50LFxuICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIG9yIHVwZGF0ZSBpdCBoZXJlIHRvIGF2b2lkIGZvY3VzIGxvc3MuXG4gICAgICBpZiAodmFyaWFibGU/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgZm9ybUdyb3VwPy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hZHZhbmNlZEV4cGFuZGVkID0gIXRoaXMuYWR2YW5jZWRFeHBhbmRlZDtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXN0b21Db2RlRm9ybS52YWxpZCkge1xuICAgICAgLy8gU3luYyBhZHZhbmNlZCB2YXJpYWJsZXMgZnJvbSBmb3JtIHRvIGFycmF5XG4gICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KGluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy52YWx1ZTtcbiAgICAgICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JyAmJiBmb3JtVmFsdWUgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgdmFsdWVzIGZyb20gRm9ybUFycmF5XG4gICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZvcm1WYWx1ZS5jb250cm9scy5tYXAoY29udHJvbCA9PiBjb250cm9sLnZhbHVlKS5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWwgJiYgdmFsLnRyaW0oKSAhPT0gJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZvcm1WYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmN1c3RvbUNvZGVGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IEN1c3RvbUNvZGVGb3JtRGF0YSA9IHtcbiAgICAgICAgbGFuZ3VhZ2U6IGZvcm1WYWx1ZS5sYW5ndWFnZSB8fCAnJyxcbiAgICAgICAgY29kZTogZm9ybVZhbHVlLmNvZGUgfHwgJycsXG4gICAgICAgIG1ldGFkYXRhOiBmb3JtVmFsdWUubWV0YWRhdGEgfHwgJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIHRlbXBsYXRlVmFyaWFibGVzOiB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmxlbmd0aCA+IDAgPyB0aGlzLnRlbXBsYXRlVmFyaWFibGVzIDogdW5kZWZpbmVkLFxuICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCA/IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlU3RlcC5lbWl0KHN0ZXBEYXRhKTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtYmctd2hpdGUgY3FhLXB4LTQgY3FhLXB5LTJcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ibGFjay0xMDAgY3FhLW1iLTRcIj5cbiAgICBDdXN0b20gQ29kZSBTdGVwXG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xIGNxYS1tYXgtaC1bNTAwcHhdIGNxYS1vdmVyZmxvdy15LWF1dG9cIj5cbiAgIFxuXG4gICAgPCEtLSBMYW5ndWFnZSBEcm9wZG93biAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgTGFuZ3VhZ2U8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IGNsYXNzPVwiY3FhLXctZnVsbFwiIFtmb3JtXT1cImN1c3RvbUNvZGVGb3JtXCIgW2NvbmZpZ109XCJnZXRMYW5ndWFnZUNvbmZpZygpXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29kZSBUZXh0YXJlYSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICBDb2RlPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20tdGV4dGFyZWFcbiAgICAgICAgY2xhc3M9XCJjcWEtc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlLXRleHRhcmVhXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIicvLyBXcml0ZSB5b3VyIGNvZGUgaGVyZS4uLidcIlxuICAgICAgICBbdmFsdWVdPVwiY3VzdG9tQ29kZUZvcm0uZ2V0KCdjb2RlJyk/LnZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW3Jvd3NdPVwiNFwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjdXN0b21Db2RlRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWN1c3RvbS1mb3JtLWZpZWxkc1wiPlxuICAgICAgPCEtLSBNZXRhZGF0YSBJbnB1dCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMiBjcWEtdy0xLzIgY3FhLXByLTJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICAgIE1ldGFkYXRhXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbWV0YWRhdGEnKT8udmFsdWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZXNjcmlwdGlvbiBJbnB1dCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXBsLTJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICAgIERlc2NyaXB0aW9uXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgICA8IS0tIFRlbXBsYXRlIFZhcmlhYmxlcyBTZWN0aW9uIC0tPlxuICAgICA8ZGl2ICpuZ0lmPVwidGVtcGxhdGVWYXJpYWJsZXMgJiYgdGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiY3FhLW1iLTRcIj5cbiAgICAgIDwhLS0gVGVtcGxhdGUgVmFyaWFibGVzIEZvcm0gRmllbGRzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAteC02IGNxYS1mbGV4LXdyYXAgY3FhLW1iLTRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgdGVtcGxhdGVWYXJpYWJsZXNcIj5cbiAgICAgICAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZSB8fCB2YXJpYWJsZS52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIE5vbi1ib29sZWFuLCBub24tY3VzdG9tX2NvZGUgdmFyaWFibGVzIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS5uYW1lICE9PSAnY3VzdG9tX2NvZGUnICYmIHZhcmlhYmxlLnR5cGUgIT09ICdib29sZWFuJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih2YXJpYWJsZS5uYW1lID09PSAndHlwZScgfHwgdmFyaWFibGUubmFtZSA9PT0gJ3Njcm9sbFRvJyk7IGVsc2UgZGVmYXVsdElucHV0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwidmFyaWFibGVzRm9ybVwiIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnKHZhcmlhYmxlKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIiBbdmFsdWVdPVwidmFyaWFibGUudmFsdWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEFkdmFuY2VkIFNldHRpbmdzIFZhcmlhYmxlcyBGb3JtIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1tYi00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXAtMCBjcWEtbWItMS41XCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWQoKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdXCI+QWR2YW5jZWQ8L3NwYW4+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtYmFzZVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJhZHZhbmNlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWR2YW5jZWRFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLW10LTJcIj5cbiAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybSBcbiAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZXNdPVwiYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc1wiXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVGb3JtXT1cImFkdmFuY2VkVmFyaWFibGVzRm9ybVwiXG4gICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImlzRWRpdE1vZGUgPyAnU2F2ZSBDaGFuZ2VzJyA6ICdDcmVhdGUgU3RlcCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXN0b21Db2RlRm9ybS52YWxpZFwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNyZWF0ZVN0ZXAoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS9zdGVwLWJ1aWxkZXItY3VzdG9tLWNvZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWN1c3RvbS1jb2RlL3N0ZXAtYnVpbGRlci1jdXN0b20tY29kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBb0I1RixNQUFNLE9BQU8sOEJBQThCO0lBaUN6QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWhDbkMsb0NBQW9DO1FBQzNCLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUU5QyxxQ0FBcUM7UUFDNUIsYUFBUSxHQUEwQixJQUFJLENBQUM7UUFFaEQsbUdBQW1HO1FBQzFGLHlCQUFvQixHQUF1QyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQSxDQUFBLENBQUMsQ0FBQztRQUN2RiwyRkFBMkY7UUFDbEYsaUNBQTRCLEdBQXdELEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBLENBQUEsQ0FBQyxDQUFDO1FBT3ZHLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFckMsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUU5RCwwQkFBMEI7UUFDaEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHL0Ms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QUFTLENBQUMsUUFBUSxJQUFJLEVBQUU7Z0JBQ2xDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxJQUFJLEVBQUU7Z0JBQ2xDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxJQUFJLEVBQUU7Z0JBQ3hDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3pGLHlCQUF5QixFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDbEgsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7MkhBMVNVLDhCQUE4QjsrR0FBOUIsOEJBQThCLDJoQkNyQjNDLDA4TUE2SUE7MkZEeEhhLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDRSw4QkFBOEIsUUFHbEMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2tHQUlyQixlQUFlO3NCQUF2QixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBGb3JtQXJyYXksIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25UZW1wbGF0ZSB9IGZyb20gJy4uL3N0ZXAtYnVpbGRlci1hY3Rpb24vc3RlcC1idWlsZGVyLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29kZUVkaXRvck1hcmtlciB9IGZyb20gJy4uLy4uL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQ29kZUZvcm1EYXRhIHtcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRlbXBsYXRlVmFyaWFibGVzPzogYW55W107XG4gIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM/OiBhbnlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1jdXN0b20tY29kZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItY3VzdG9tLWNvZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJDdXN0b21Db2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKiogT3B0aW9ucyBmb3IgbGFuZ3VhZ2UgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgbGFuZ3VhZ2VPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBUZW1wbGF0ZSB0byBnZXQgdmFyaWFibGVzIGZyb20gKi9cbiAgQElucHV0KCkgdGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvKiogRnVuY3Rpb24gdG8gaGFuZGxlIHZhcmlhYmxlIHByb2Nlc3Npbmcgb3IgY3VzdG9tIGxvZ2ljLiBDYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0VGVtcGxhdGVWYXJpYWJsZXM6ICh2YXJpYWJsZXM6IEFjdGlvblRlbXBsYXRlKSA9PiBhbnkgPSAoKSA9PiB7IHJldHVybiBbXX07XG4gIC8qKiBGdW5jdGlvbiB0byBoYW5kbGUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzLiBDYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogKHRlbXBsYXRlOiBBY3Rpb25UZW1wbGF0ZSwgdGVzdFN0ZXA/OiBhbnkpID0+IGFueVtdID0gKCkgPT4geyByZXR1cm4gW119O1xuICBcbiAgLyoqIEluaXRpYWwgdmFsdWVzIGZvciBlZGl0aW5nIG1vZGUgKi9cbiAgQElucHV0KCkgaW5pdGlhbENvZGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxMYW5ndWFnZT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbE1ldGFkYXRhPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBpcyBjcmVhdGVkICovXG4gIEBPdXRwdXQoKSBjcmVhdGVTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21Db2RlRm9ybURhdGE+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjdXN0b21Db2RlRm9ybTogRm9ybUdyb3VwO1xuICB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgdmFyaWFibGVzRm9ybTogRm9ybUdyb3VwO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcbiAgYWR2YW5jZWRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIGNvZGVWYWxpZGF0aW9uRXJyb3JzOiBDb2RlRWRpdG9yTWFya2VyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxhbmd1YWdlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgY29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLnZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuYXJyYXkoW10pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmb3JtIHdpdGggaW5pdGlhbCB2YWx1ZXMgaWYgaW4gZWRpdCBtb2RlXG4gICAgaWYgKHRoaXMuaXNFZGl0TW9kZSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybVdpdGhWYWx1ZXMoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSB0ZW1wbGF0ZSB2YXJpYWJsZXMgaWYgdGVtcGxhdGUgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW1wbGF0ZSkge1xuICAgICAgdGhpcy5sb2FkVGVtcGxhdGVWYXJpYWJsZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3RlbXBsYXRlJ10gJiYgdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgdGhpcy5sb2FkVGVtcGxhdGVWYXJpYWJsZXMoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmUtaW5pdGlhbGl6ZSBmb3JtIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZVxuICAgIGlmICgoY2hhbmdlc1snaW5pdGlhbENvZGUnXSB8fCBjaGFuZ2VzWydpbml0aWFsTGFuZ3VhZ2UnXSB8fCBjaGFuZ2VzWydpbml0aWFsTWV0YWRhdGEnXSB8fCBcbiAgICAgICAgIGNoYW5nZXNbJ2luaXRpYWxEZXNjcmlwdGlvbiddIHx8IGNoYW5nZXNbJ2lzRWRpdE1vZGUnXSkgJiYgdGhpcy5pc0VkaXRNb2RlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtV2l0aFZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm1XaXRoVmFsdWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxDb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VzdG9tQ29kZUZvcm0ucGF0Y2hWYWx1ZSh7IGNvZGU6IHRoaXMuaW5pdGlhbENvZGUgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmluaXRpYWxMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgbGFuZ3VhZ2U6IHRoaXMuaW5pdGlhbExhbmd1YWdlIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsTWV0YWRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgbWV0YWRhdGE6IHRoaXMuaW5pdGlhbE1ldGFkYXRhIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsRGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXN0b21Db2RlRm9ybS5wYXRjaFZhbHVlKHsgZGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRlbXBsYXRlVmFyaWFibGVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRlbXBsYXRlICYmIHRoaXMuc2V0VGVtcGxhdGVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldFRlbXBsYXRlVmFyaWFibGVzKHRoaXMudGVtcGxhdGUpO1xuICAgICAgdGhpcy5idWlsZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIFxuICAgICAgLy8gSW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXNcbiAgICAgIGlmICh0aGlzLnNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMpIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzID0gdGhpcy5zZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKHRoaXMudGVtcGxhdGUpO1xuICAgICAgICB0aGlzLmJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBjb250cm9sc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudmFyaWFibGVzRm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBmb3JtIGNvbnRyb2xzIGZvciBlYWNoIHZhcmlhYmxlXG4gICAgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBib29sZWFuIHZhcmlhYmxlcyAtIHVzZSBib29sZWFuIHZhbHVlLCBvdGhlcnMgdXNlIHN0cmluZ1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIFxuICAgICAgICA/ICh2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxKVxuICAgICAgICA6ICh2YXJpYWJsZS52YWx1ZSB8fCAnJyk7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uYWRkQ29udHJvbCh2YXJpYWJsZS5uYW1lLCBuZXcgRm9ybUNvbnRyb2woZGVmYXVsdFZhbHVlKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRTZWxlY3RDb25maWcodmFyaWFibGU6IGFueSk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSAodmFyaWFibGUub3B0aW9ucyB8fCBbXSkubWFwKChvcHQ6IHN0cmluZykgPT4gKHtcbiAgICAgIGlkOiBvcHQsXG4gICAgICB2YWx1ZTogb3B0LFxuICAgICAgbmFtZTogb3B0LFxuICAgICAgbGFiZWw6IG9wdFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHZhcmlhYmxlLm5hbWUsXG4gICAgICBwbGFjZWhvbGRlcjogYFNlbGVjdCAke3ZhcmlhYmxlLmxhYmVsfWAsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGUubmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAodGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIHRlbXBsYXRlVmFyaWFibGVzIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAodGhpcy52YXJpYWJsZXNGb3JtLmdldCh2YXJpYWJsZU5hbWUpKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlTmFtZSk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICB0aGlzLnZhcmlhYmxlc0Zvcm0uYWRkQ29udHJvbCh2YXJpYWJsZU5hbWUsIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldExhbmd1YWdlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogdGhpcy5sYW5ndWFnZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGFycmF5XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZvcm0gZ3JvdXBzIGZvciBlYWNoIGFkdmFuY2VkIHZhcmlhYmxlXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCB0eXBlc1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55O1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgLy8gRm9yIHN0cl9saXN0LCBjcmVhdGUgYSBGb3JtQXJyYXlcbiAgICAgICAgY29uc3QgdmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFyaWFibGUudmFsdWUpID8gdmFyaWFibGUudmFsdWUgOiBbXTtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5VmFsdWUgPSB0aGlzLmZiLmFycmF5KFxuICAgICAgICAgIHZhbHVlQXJyYXkubGVuZ3RoID4gMCBcbiAgICAgICAgICAgID8gdmFsdWVBcnJheS5tYXAoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5mYi5jb250cm9sKGl0ZW0pKVxuICAgICAgICAgICAgOiBbdGhpcy5mYi5jb250cm9sKCcnKV0gLy8gU3RhcnQgd2l0aCBvbmUgZW1wdHkgY29udHJvbFxuICAgICAgICApO1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSBmb3JtQXJyYXlWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YXJpYWJsZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgRm9ybUdyb3VwIGZvciBlYWNoIHZhcmlhYmxlXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdmFyaWFibGUgaW4gYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvLyBBbHNvIHVwZGF0ZSBmb3JtIGFycmF5XG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIHZhcmlhYmxlIGluIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgYXJyYXlcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLy8gQWxzbyB1cGRhdGUgZm9ybSBhcnJheVxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgICAgLy8gRm9yIHN0cl9saXN0LCB0aGUgRm9ybUFycmF5IGlzIGFscmVhZHkgbWFuYWdlZCBpbnNpZGUgQWR2YW5jZWRWYXJpYWJsZXNGb3JtQ29tcG9uZW50LFxuICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIG9yIHVwZGF0ZSBpdCBoZXJlIHRvIGF2b2lkIGZvY3VzIGxvc3MuXG4gICAgICBpZiAodmFyaWFibGU/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgZm9ybUdyb3VwPy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hZHZhbmNlZEV4cGFuZGVkID0gIXRoaXMuYWR2YW5jZWRFeHBhbmRlZDtcbiAgfVxuXG4gIG9uQ29kZVZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmN1c3RvbUNvZGVGb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgb25Db2RlVmFsaWRhdGlvbkNoYW5nZShlcnJvcnM6IENvZGVFZGl0b3JNYXJrZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbGlkYXRpb25FcnJvcnMgPSBlcnJvcnMgfHwgW107XG4gIH1cblxuICBnZXQgaGFzQ29kZVN5bnRheEVycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2RlVmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqIEZvcm0gdmFsaWRhdGlvbiBlcnJvcnMgZm9yIHRoZSBjb2RlIGZpZWxkIChlLmcuIFwiQ29kZSBpcyByZXF1aXJlZFwiKSAtIHBhc3NlZCB0byBjb2RlIGVkaXRvciBbZXJyb3JzXSAqL1xuICBnZXQgY29kZUZpZWxkRXJyb3JzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb2RlQ29udHJvbCA9IHRoaXMuY3VzdG9tQ29kZUZvcm0uZ2V0KCdjb2RlJyk7XG4gICAgaWYgKCFjb2RlQ29udHJvbD8uaW52YWxpZCB8fCAhY29kZUNvbnRyb2w/LnRvdWNoZWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBlcnIgPSBjb2RlQ29udHJvbC5lcnJvcnM7XG4gICAgaWYgKCFlcnIpIHJldHVybiBbXTtcbiAgICBpZiAoZXJyWydyZXF1aXJlZCddKSByZXR1cm4gWydDb2RlIGlzIHJlcXVpcmVkJ107XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1c3RvbUNvZGVGb3JtLnZhbGlkKSB7XG4gICAgICAvLyBTeW5jIGFkdmFuY2VkIHZhcmlhYmxlcyBmcm9tIGZvcm0gdG8gYXJyYXlcbiAgICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKGZvcm1Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGZvcm1Hcm91cC5nZXQoJ3ZhbHVlJyk/LnZhbHVlO1xuICAgICAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnICYmIGZvcm1WYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCB2YWx1ZXMgZnJvbSBGb3JtQXJyYXlcbiAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlLmNvbnRyb2xzLm1hcChjb250cm9sID0+IGNvbnRyb2wudmFsdWUpLmZpbHRlcigodmFsOiBzdHJpbmcpID0+IHZhbCAmJiB2YWwudHJpbSgpICE9PSAnJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuY3VzdG9tQ29kZUZvcm0udmFsdWU7XG4gICAgICBjb25zdCBzdGVwRGF0YTogQ3VzdG9tQ29kZUZvcm1EYXRhID0ge1xuICAgICAgICBsYW5ndWFnZTogZm9ybVZhbHVlLmxhbmd1YWdlIHx8ICcnLFxuICAgICAgICBjb2RlOiBmb3JtVmFsdWUuY29kZSB8fCAnJyxcbiAgICAgICAgbWV0YWRhdGE6IGZvcm1WYWx1ZS5tZXRhZGF0YSB8fCAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgdGVtcGxhdGVWYXJpYWJsZXM6IHRoaXMudGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMCA/IHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgOiB1bmRlZmluZWQsXG4gICAgICAgIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwID8gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAgQ3VzdG9tIENvZGUgU3RlcFxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtbWF4LWgtWzUwMHB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICBcblxuICAgIDwhLS0gTGFuZ3VhZ2UgRHJvcGRvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0zXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIExhbmd1YWdlPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBjbGFzcz1cImNxYS13LWZ1bGxcIiBbZm9ybV09XCJjdXN0b21Db2RlRm9ybVwiIFtjb25maWddPVwiZ2V0TGFuZ3VhZ2VDb25maWcoKVwiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvZGUgRWRpdG9yIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItM1wiPlxuICAgICAgPGNxYS1jb2RlLWVkaXRvclxuICAgICAgICBbbGFiZWxdPVwiJ0NvZGUnXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbdmFsdWVdPVwiY3VzdG9tQ29kZUZvcm0uZ2V0KCdjb2RlJyk/LnZhbHVlXCJcbiAgICAgICAgW2xhbmd1YWdlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbGFuZ3VhZ2UnKT8udmFsdWUgfHwgJ2phdmFzY3JpcHQnXCJcbiAgICAgICAgW21pbkhlaWdodF09XCInMjIwcHgnXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yc109XCJjb2RlRmllbGRFcnJvcnNcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Db2RlVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICh2YWxpZGF0aW9uQ2hhbmdlKT1cIm9uQ29kZVZhbGlkYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnY29kZScpPy5tYXJrQXNUb3VjaGVkKClcIj5cbiAgICAgIDwvY3FhLWNvZGUtZWRpdG9yPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWN1c3RvbS1mb3JtLWZpZWxkc1wiPlxuICAgICAgPCEtLSBNZXRhZGF0YSBJbnB1dCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMiBjcWEtdy0xLzIgY3FhLXByLTJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICAgIE1ldGFkYXRhXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbWV0YWRhdGEnKT8udmFsdWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZXNjcmlwdGlvbiBJbnB1dCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXBsLTJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICAgIERlc2NyaXB0aW9uXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImN1c3RvbUNvZGVGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImN1c3RvbUNvZGVGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgICA8IS0tIFRlbXBsYXRlIFZhcmlhYmxlcyBTZWN0aW9uIC0tPlxuICAgICA8ZGl2ICpuZ0lmPVwidGVtcGxhdGVWYXJpYWJsZXMgJiYgdGVtcGxhdGVWYXJpYWJsZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiY3FhLW1iLTRcIj5cbiAgICAgIDwhLS0gVGVtcGxhdGUgVmFyaWFibGVzIEZvcm0gRmllbGRzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAteC02IGNxYS1mbGV4LXdyYXAgY3FhLW1iLTRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgdGVtcGxhdGVWYXJpYWJsZXNcIj5cbiAgICAgICAgICA8IS0tIEJvb2xlYW4gdmFyaWFibGVzIHdpdGggbWF0LXNsaWRlLXRvZ2dsZSAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInZhcmlhYmxlc0Zvcm0uZ2V0KHZhcmlhYmxlLm5hbWUpPy52YWx1ZSB8fCB2YXJpYWJsZS52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIE5vbi1ib29sZWFuLCBub24tY3VzdG9tX2NvZGUgdmFyaWFibGVzIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YXJpYWJsZS5uYW1lICE9PSAnY3VzdG9tX2NvZGUnICYmIHZhcmlhYmxlLnR5cGUgIT09ICdib29sZWFuJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih2YXJpYWJsZS5uYW1lID09PSAndHlwZScgfHwgdmFyaWFibGUubmFtZSA9PT0gJ3Njcm9sbFRvJyk7IGVsc2UgZGVmYXVsdElucHV0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwidmFyaWFibGVzRm9ybVwiIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnKHZhcmlhYmxlKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDEycHgpO1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMVwiPlxuICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIiBbdmFsdWVdPVwidmFyaWFibGUudmFsdWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFyaWFibGVWYWx1ZUNoYW5nZSh2YXJpYWJsZS5uYW1lLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEFkdmFuY2VkIFNldHRpbmdzIFZhcmlhYmxlcyBGb3JtIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1tYi00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXAtMCBjcWEtbWItMS41XCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWQoKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdXCI+QWR2YW5jZWQ8L3NwYW4+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtYmFzZVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJhZHZhbmNlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWR2YW5jZWRFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLW10LTJcIj5cbiAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybSBcbiAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZXNdPVwiYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc1wiXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVGb3JtXT1cImFkdmFuY2VkVmFyaWFibGVzRm9ybVwiXG4gICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImlzRWRpdE1vZGUgPyAnU2F2ZSBDaGFuZ2VzJyA6ICdDcmVhdGUgU3RlcCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFjdXN0b21Db2RlRm9ybS52YWxpZCB8fCBoYXNDb2RlU3ludGF4RXJyb3JzXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|