@cqa-lib/cqa-ui 1.1.556-gamma.27 → 1.1.556-gamma.29

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.
@@ -50,7 +50,7 @@ export class NewDbConfigDialogComponent {
50
50
  : this.defaultPortForDriver(this.driver);
51
51
  this.database = this.initialValue.database ?? '';
52
52
  this.username = this.initialValue.username ?? '';
53
- this.password = '';
53
+ this.password = this.initialValue.password ?? '';
54
54
  }
55
55
  else {
56
56
  this.port = this.defaultPortForDriver(this.driver);
@@ -73,7 +73,7 @@ export class NewDbConfigDialogComponent {
73
73
  return this.mode === 'edit' ? 'Save changes' : 'Add DB config';
74
74
  }
75
75
  get passwordPlaceholder() {
76
- return this.mode === 'edit' ? '•••••• (leave blank to keep existing)' : 'Enter password';
76
+ return 'Enter password';
77
77
  }
78
78
  get connectionNameErrorsArray() {
79
79
  return this.connectionNameError ? [this.connectionNameError] : [];
@@ -281,10 +281,10 @@ export class NewDbConfigDialogComponent {
281
281
  }
282
282
  }
283
283
  NewDbConfigDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewDbConfigDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
284
- NewDbConfigDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewDbConfigDialogComponent, selector: "cqa-new-db-config-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName", testFn: "testFn" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Row: Connection name + Driver -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Connection name\"\n placeholder=\"e.g. Primary (bookings)\"\n type=\"text\"\n [value]=\"connectionName\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"connectionNameErrorsArray\"\n (valueChange)=\"onConnectionNameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Driver</label>\n <cqa-dropdown-button\n [options]=\"driverOptions\"\n [selectedValue]=\"driver\"\n (selectionChange)=\"onDriverChange($event)\">\n </cqa-dropdown-button>\n </div>\n </div>\n\n <!-- Row: Host + Port -->\n <div class=\"cqa-grid cqa-grid-cols-4 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-3\">\n <cqa-custom-input\n label=\"Host\"\n placeholder=\"db.example.com\"\n type=\"text\"\n [value]=\"host\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"hostErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onHostChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-1\">\n <cqa-custom-input\n label=\"Port\"\n type=\"number\"\n [value]=\"port != null ? port.toString() : ''\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"portErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onPortChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Database -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Database\"\n placeholder=\"bookings_qa\"\n type=\"text\"\n [value]=\"database\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"databaseErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onDatabaseChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Row: Username + Password -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Username\"\n type=\"text\"\n [value]=\"username\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"usernameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onUsernameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Password\"\n type=\"password\"\n [value]=\"password\"\n [placeholder]=\"passwordPlaceholder\"\n [required]=\"isPasswordRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"passwordErrorsArray\"\n (valueChange)=\"onPasswordChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Test connection action + result -->\n <div *ngIf=\"testFn\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <span class=\"cqa-text-xs cqa-text-gray-600\">\n Validate the connection without saving. The credentials are sent over the wire only for this check.\n </span>\n <cqa-button\n class=\"cqa-shrink-0\"\n style=\"min-width: max-content;\"\n variant=\"outlined\"\n btnSize=\"md\"\n icon=\"bolt\"\n text=\"Test connection\"\n [loading]=\"isTesting\"\n [disabled]=\"!canTest\"\n (clicked)=\"onTestClick()\">\n </cqa-button>\n </div>\n\n <div *ngIf=\"testResult\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-text-sm\"\n [ngClass]=\"testResult.status === 'success'\n ? 'cqa-bg-[#ECFDF5] cqa-text-[#065F46] cqa-border cqa-border-[#A7F3D0]'\n : 'cqa-bg-[#FEF2F2] cqa-text-[#991B1B] cqa-border cqa-border-[#FECACA]'\">\n <mat-icon class=\"!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]\">\n {{ testResult.status === 'success' ? 'check_circle' : 'error' }}\n </mat-icon>\n <span>{{ testResult.message }}</span>\n </div>\n </div>\n\n <!-- Encryption notice -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#EEF2FF] cqa-border cqa-border-[#C7D2FE] cqa-text-xs cqa-text-[#3730A3]\">\n <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">lock</mat-icon>\n <span>Credentials are encrypted at rest and masked in the audit log.</span>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
284
+ NewDbConfigDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewDbConfigDialogComponent, selector: "cqa-new-db-config-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName", testFn: "testFn" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Row: Connection name + Driver -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Connection name\"\n placeholder=\"e.g. Primary (bookings)\"\n type=\"text\"\n [value]=\"connectionName\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"connectionNameErrorsArray\"\n (valueChange)=\"onConnectionNameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-w-fit\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Driver</label>\n <cqa-dropdown-button\n [options]=\"driverOptions\"\n [selectedValue]=\"driver\"\n (selectionChange)=\"onDriverChange($event)\">\n </cqa-dropdown-button>\n </div>\n </div>\n\n <!-- Row: Host + Port -->\n <div class=\"cqa-grid cqa-grid-cols-4 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-3\">\n <cqa-custom-input\n label=\"Host\"\n placeholder=\"db.example.com\"\n type=\"text\"\n [value]=\"host\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"hostErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onHostChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-1\">\n <cqa-custom-input\n label=\"Port\"\n type=\"number\"\n [value]=\"port != null ? port.toString() : ''\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"portErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onPortChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Database -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Database\"\n placeholder=\"bookings_qa\"\n type=\"text\"\n [value]=\"database\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"databaseErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onDatabaseChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Row: Username + Password -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Username\"\n type=\"text\"\n [value]=\"username\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"usernameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onUsernameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Password\"\n type=\"password\"\n [value]=\"password\"\n [placeholder]=\"passwordPlaceholder\"\n [required]=\"isPasswordRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"passwordErrorsArray\"\n [showPasswordToggle]=\"true\"\n (valueChange)=\"onPasswordChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Test connection action + result -->\n <div *ngIf=\"testFn\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <span class=\"cqa-text-xs cqa-text-gray-600\">\n Validate the connection without saving. The credentials are sent over the wire only for this check.\n </span>\n <cqa-button\n class=\"cqa-shrink-0\"\n style=\"min-width: max-content;\"\n variant=\"outlined\"\n btnSize=\"md\"\n icon=\"bolt\"\n text=\"Test connection\"\n [loading]=\"isTesting\"\n [disabled]=\"!canTest\"\n (clicked)=\"onTestClick()\">\n </cqa-button>\n </div>\n\n <div *ngIf=\"testResult\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-text-sm\"\n [ngClass]=\"testResult.status === 'success'\n ? 'cqa-bg-[#ECFDF5] cqa-text-[#065F46] cqa-border cqa-border-[#A7F3D0]'\n : 'cqa-bg-[#FEF2F2] cqa-text-[#991B1B] cqa-border cqa-border-[#FECACA]'\">\n <mat-icon class=\"!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]\">\n {{ testResult.status === 'success' ? 'check_circle' : 'error' }}\n </mat-icon>\n <span>{{ testResult.message }}</span>\n </div>\n </div>\n\n <!-- Encryption notice -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#EEF2FF] cqa-border cqa-border-[#C7D2FE] cqa-text-xs cqa-text-[#3730A3]\">\n <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">lock</mat-icon>\n <span>Credentials are encrypted at rest and masked in the audit log.</span>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
285
285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewDbConfigDialogComponent, decorators: [{
286
286
  type: Component,
287
- args: [{ selector: 'cqa-new-db-config-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Row: Connection name + Driver -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Connection name\"\n placeholder=\"e.g. Primary (bookings)\"\n type=\"text\"\n [value]=\"connectionName\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"connectionNameErrorsArray\"\n (valueChange)=\"onConnectionNameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Driver</label>\n <cqa-dropdown-button\n [options]=\"driverOptions\"\n [selectedValue]=\"driver\"\n (selectionChange)=\"onDriverChange($event)\">\n </cqa-dropdown-button>\n </div>\n </div>\n\n <!-- Row: Host + Port -->\n <div class=\"cqa-grid cqa-grid-cols-4 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-3\">\n <cqa-custom-input\n label=\"Host\"\n placeholder=\"db.example.com\"\n type=\"text\"\n [value]=\"host\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"hostErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onHostChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-1\">\n <cqa-custom-input\n label=\"Port\"\n type=\"number\"\n [value]=\"port != null ? port.toString() : ''\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"portErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onPortChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Database -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Database\"\n placeholder=\"bookings_qa\"\n type=\"text\"\n [value]=\"database\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"databaseErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onDatabaseChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Row: Username + Password -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Username\"\n type=\"text\"\n [value]=\"username\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"usernameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onUsernameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Password\"\n type=\"password\"\n [value]=\"password\"\n [placeholder]=\"passwordPlaceholder\"\n [required]=\"isPasswordRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"passwordErrorsArray\"\n (valueChange)=\"onPasswordChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Test connection action + result -->\n <div *ngIf=\"testFn\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <span class=\"cqa-text-xs cqa-text-gray-600\">\n Validate the connection without saving. The credentials are sent over the wire only for this check.\n </span>\n <cqa-button\n class=\"cqa-shrink-0\"\n style=\"min-width: max-content;\"\n variant=\"outlined\"\n btnSize=\"md\"\n icon=\"bolt\"\n text=\"Test connection\"\n [loading]=\"isTesting\"\n [disabled]=\"!canTest\"\n (clicked)=\"onTestClick()\">\n </cqa-button>\n </div>\n\n <div *ngIf=\"testResult\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-text-sm\"\n [ngClass]=\"testResult.status === 'success'\n ? 'cqa-bg-[#ECFDF5] cqa-text-[#065F46] cqa-border cqa-border-[#A7F3D0]'\n : 'cqa-bg-[#FEF2F2] cqa-text-[#991B1B] cqa-border cqa-border-[#FECACA]'\">\n <mat-icon class=\"!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]\">\n {{ testResult.status === 'success' ? 'check_circle' : 'error' }}\n </mat-icon>\n <span>{{ testResult.message }}</span>\n </div>\n </div>\n\n <!-- Encryption notice -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#EEF2FF] cqa-border cqa-border-[#C7D2FE] cqa-text-xs cqa-text-[#3730A3]\">\n <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">lock</mat-icon>\n <span>Credentials are encrypted at rest and masked in the audit log.</span>\n </div>\n\n</div>\n" }]
287
+ args: [{ selector: 'cqa-new-db-config-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Row: Connection name + Driver -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Connection name\"\n placeholder=\"e.g. Primary (bookings)\"\n type=\"text\"\n [value]=\"connectionName\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"connectionNameErrorsArray\"\n (valueChange)=\"onConnectionNameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-w-fit\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Driver</label>\n <cqa-dropdown-button\n [options]=\"driverOptions\"\n [selectedValue]=\"driver\"\n (selectionChange)=\"onDriverChange($event)\">\n </cqa-dropdown-button>\n </div>\n </div>\n\n <!-- Row: Host + Port -->\n <div class=\"cqa-grid cqa-grid-cols-4 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-3\">\n <cqa-custom-input\n label=\"Host\"\n placeholder=\"db.example.com\"\n type=\"text\"\n [value]=\"host\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"hostErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onHostChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-col-span-1\">\n <cqa-custom-input\n label=\"Port\"\n type=\"number\"\n [value]=\"port != null ? port.toString() : ''\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"portErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onPortChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Database -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Database\"\n placeholder=\"bookings_qa\"\n type=\"text\"\n [value]=\"database\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"databaseErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onDatabaseChange($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Row: Username + Password -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Username\"\n type=\"text\"\n [value]=\"username\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"usernameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onUsernameChange($event)\">\n </cqa-custom-input>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Password\"\n type=\"password\"\n [value]=\"password\"\n [placeholder]=\"passwordPlaceholder\"\n [required]=\"isPasswordRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"passwordErrorsArray\"\n [showPasswordToggle]=\"true\"\n (valueChange)=\"onPasswordChange($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Test connection action + result -->\n <div *ngIf=\"testFn\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <span class=\"cqa-text-xs cqa-text-gray-600\">\n Validate the connection without saving. The credentials are sent over the wire only for this check.\n </span>\n <cqa-button\n class=\"cqa-shrink-0\"\n style=\"min-width: max-content;\"\n variant=\"outlined\"\n btnSize=\"md\"\n icon=\"bolt\"\n text=\"Test connection\"\n [loading]=\"isTesting\"\n [disabled]=\"!canTest\"\n (clicked)=\"onTestClick()\">\n </cqa-button>\n </div>\n\n <div *ngIf=\"testResult\"\n class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-text-sm\"\n [ngClass]=\"testResult.status === 'success'\n ? 'cqa-bg-[#ECFDF5] cqa-text-[#065F46] cqa-border cqa-border-[#A7F3D0]'\n : 'cqa-bg-[#FEF2F2] cqa-text-[#991B1B] cqa-border cqa-border-[#FECACA]'\">\n <mat-icon class=\"!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]\">\n {{ testResult.status === 'success' ? 'check_circle' : 'error' }}\n </mat-icon>\n <span>{{ testResult.message }}</span>\n </div>\n </div>\n\n <!-- Encryption notice -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#EEF2FF] cqa-border cqa-border-[#C7D2FE] cqa-text-xs cqa-text-[#3730A3]\">\n <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">lock</mat-icon>\n <span>Credentials are encrypted at rest and masked in the audit log.</span>\n </div>\n\n</div>\n" }]
288
288
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
289
289
  type: Input
290
290
  }], initialValue: [{
@@ -296,4 +296,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
296
296
  }], testFn: [{
297
297
  type: Input
298
298
  }] } });
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWRiLWNvbmZpZy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9uZXctZGItY29uZmlnLWRpYWxvZy9uZXctZGItY29uZmlnLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1kYi1jb25maWctZGlhbG9nL25ldy1kYi1jb25maWctZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFjM0MsTUFBTSxPQUFPLDBCQUEwQjtJQW1DckMsWUFBNkIsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFsQzFDLFNBQUksR0FBc0IsUUFBUSxDQUFDO1FBRW5DLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFHckIsa0JBQWEsR0FBeUM7WUFDN0QsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFPLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDdkMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFNLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDeEMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDM0MsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFJLEtBQUssRUFBRSxVQUFVLEVBQUU7U0FDM0MsQ0FBQztRQUVGLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFdBQU0sR0FBYSxPQUFPLENBQUM7UUFDM0IsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFNBQUksR0FBa0Is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QkFOdEMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBRW5CLHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRTt3R0FHekQsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBEYkNvbmZpZ0RpYWxvZ1ZhbHVlLFxuICBEYkNvbmZpZ1Rlc3RSZXN1bHQsXG4gIERiRHJpdmVyLFxufSBmcm9tICcuL25ldy1kYi1jb25maWctZGlhbG9nLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1uZXctZGItY29uZmlnLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZXctZGItY29uZmlnLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnLCBzdHlsZTogJ2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTsnIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ld0RiQ29uZmlnRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBtb2RlOiAnY3JlYXRlJyB8ICdlZGl0JyA9ICdjcmVhdGUnO1xuICBASW5wdXQoKSBpbml0aWFsVmFsdWU/OiBQYXJ0aWFsPERiQ29uZmlnRGlhbG9nVmFsdWU+O1xuICBASW5wdXQoKSBleGlzdGluZ05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBlbnZOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdGVzdEZuPzogKHZhbHVlOiBEYkNvbmZpZ0RpYWxvZ1ZhbHVlKSA9PiBPYnNlcnZhYmxlPERiQ29uZmlnVGVzdFJlc3VsdD47XG5cbiAgcmVhZG9ubHkgZHJpdmVyT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogRGJEcml2ZXIgfVtdID0gW1xuICAgIHsgbGFiZWw6ICdNeVNRTCcsICAgICAgdmFsdWU6ICdNeVNRTCcgfSxcbiAgICB7IGxhYmVsOiAnT3JhY2xlJywgICAgIHZhbHVlOiAnT3JhY2xlJyB9LFxuICAgIHsgbGFiZWw6ICdTUUwgU2VydmVyJywgdmFsdWU6ICdTUUxTZXJ2ZXInIH0sXG4gICAgeyBsYWJlbDogJ1Bvc3RncmVzJywgICB2YWx1ZTogJ1Bvc3RncmVzJyB9LFxuICBdO1xuXG4gIGNvbm5lY3Rpb25OYW1lID0gJyc7XG4gIGRyaXZlcjogRGJEcml2ZXIgPSAnTXlTUUwnO1xuICBob3N0ID0gJyc7XG4gIHBvcnQ6IG51bWJlciB8IG51bGwgPSAzMzA2O1xuICBkYXRhYmFzZSA9ICcnO1xuICB1c2VybmFtZSA9ICcnO1xuICBwYXNzd29yZCA9ICcnO1xuXG4gIGNvbm5lY3Rpb25OYW1lRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBob3N0RXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwb3J0RXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBkYXRhYmFzZUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgdXNlcm5hbWVFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHBhc3N3b3JkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHBhc3N3b3JkVG91Y2hlZCA9IGZhbHNlO1xuICBpc1Rlc3RpbmcgPSBmYWxzZTtcbiAgdGVzdFJlc3VsdDogRGJDb25maWdUZXN0UmVzdWx0IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uTmFtZSA9IHRoaXMuaW5pdGlhbFZhbHVlLmNvbm5lY3Rpb25OYW1lID8/ICcnO1xuICAgICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlLmRyaXZlcikgeyB0aGlzLmRyaXZlciA9IHRoaXMuaW5pdGlhbFZhbHVlLmRyaXZlcjsgfVxuICAgICAgdGhpcy5ob3N0ID0gdGhpcy5pbml0aWFsVmFsdWUuaG9zdCA/PyAnJztcbiAgICAgIGNvbnN0IGluaXRpYWxQb3J0ID0gdGhpcy5pbml0aWFsVmFsdWUucG9ydDtcbiAgICAgIHRoaXMucG9ydCA9IGluaXRpYWxQb3J0ICE9IG51bGwgJiYgIU51bWJlci5pc05hTihpbml0aWFsUG9ydClcbiAgICAgICAgPyBOdW1iZXIoaW5pdGlhbFBvcnQpXG4gICAgICAgIDogdGhpcy5kZWZhdWx0UG9ydEZvckRyaXZlcih0aGlzLmRyaXZlcik7XG4gICAgICB0aGlzLmRhdGFiYXNlID0gdGhpcy5pbml0aWFsVmFsdWUuZGF0YWJhc2UgPz8gJyc7XG4gICAgICB0aGlzLnVzZXJuYW1lID0gdGhpcy5pbml0aWFsVmFsdWUudXNlcm5hbWUgPz8gJyc7XG4gICAgICB0aGlzLnBhc3N3b3JkID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9ydCA9IHRoaXMuZGVmYXVsdFBvcnRGb3JEcml2ZXIodGhpcy5kcml2ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tIENvbXB1dGVkIHN0cmluZ3MgLS0tLS0tLS1cblxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCcgPyAnRWRpdCBEQiBjb25maWd1cmF0aW9uJyA6ICdOZXcgZGF0YWJhc2UgY29uZmlndXJhdGlvbic7XG4gIH1cblxuICBnZXQgc3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbnZOYW1lXG4gICAgICA/IGBTY29wZWQgdG8gdGhlICR7dGhpcy5lbnZOYW1lfSBlbnZpcm9ubWVudC4gTXVsdGlwbGUgY29uZmlncyBjYW4gbGl2ZSBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudC5gXG4gICAgICA6ICdNdWx0aXBsZSBjb25maWdzIGNhbiBsaXZlIGluIHRoZSBzYW1lIGVudmlyb25tZW50Lic7XG4gIH1cblxuICBnZXQgcHJpbWFyeUJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ1NhdmUgY2hhbmdlcycgOiAnQWRkIERCIGNvbmZpZyc7XG4gIH1cblxuICBnZXQgcGFzc3dvcmRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdlZGl0JyA/ICfigKLigKLigKLigKLigKLigKIgKGxlYXZlIGJsYW5rIHRvIGtlZXAgZXhpc3RpbmcpJyA6ICdFbnRlciBwYXNzd29yZCc7XG4gIH1cblxuICBnZXQgY29ubmVjdGlvbk5hbWVFcnJvcnNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbk5hbWVFcnJvciA/IFt0aGlzLmNvbm5lY3Rpb25OYW1lRXJyb3JdIDogW107XG4gIH1cbiAgZ2V0IGhvc3RFcnJvcnNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEVycm9yID8gW3RoaXMuaG9zdEVycm9yXSA6IFtdO1xuICB9XG4gIGdldCBwb3J0RXJyb3JzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBvcnRFcnJvciA/IFt0aGlzLnBvcnRFcnJvcl0gOiBbXTtcbiAgfVxuICBnZXQgZGF0YWJhc2VFcnJvcnNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VFcnJvciA/IFt0aGlzLmRhdGFiYXNlRXJyb3JdIDogW107XG4gIH1cbiAgZ2V0IHVzZXJuYW1lRXJyb3JzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnVzZXJuYW1lRXJyb3IgPyBbdGhpcy51c2VybmFtZUVycm9yXSA6IFtdO1xuICB9XG4gIGdldCBwYXNzd29yZEVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wYXNzd29yZEVycm9yID8gW3RoaXMucGFzc3dvcmRFcnJvcl0gOiBbXTtcbiAgfVxuXG4gIGdldCBpc1Bhc3N3b3JkUmVxdWlyZWRWaXN1YWxseSgpOiBib29sZWFuIHtcbiAgICAvLyBJbiBlZGl0IG1vZGUsIGJsYW5rIHBhc3N3b3JkIG1lYW5zIFwia2VlcCBleGlzdGluZ1wiIOKAlCBtYXRjaCB0aGUgZW52LXZhciBwYXR0ZXJuLlxuICAgIHJldHVybiB0aGlzLm1vZGUgIT09ICdlZGl0JztcbiAgfVxuXG4gIGdldCBoYXNTdWNjZXNzZnVsVGVzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0UmVzdWx0Py5zdGF0dXMgPT09ICdzdWNjZXNzJztcbiAgfVxuXG4gIGdldCBjYW5UZXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudGVzdEZuICYmICF0aGlzLmlzVGVzdGluZztcbiAgfVxuXG4gIC8vIC0tLS0tLS0tIEZvcm0gaGFuZGxlcnMgLS0tLS0tLS1cblxuICBvbkNvbm5lY3Rpb25OYW1lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25OYW1lID0gdmFsdWU7XG4gICAgdGhpcy5jb25uZWN0aW9uTmFtZUVycm9yID0gbnVsbDtcbiAgICB0aGlzLnRlc3RSZXN1bHQgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Ecml2ZXJDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSAodmFsdWUgYXMgRGJEcml2ZXIpID8/ICdNeVNRTCc7XG4gICAgY29uc3QgcHJldmlvdXNEZWZhdWx0ID0gdGhpcy5kZWZhdWx0UG9ydEZvckRyaXZlcih0aGlzLmRyaXZlcik7XG4gICAgdGhpcy5kcml2ZXIgPSBuZXh0O1xuICAgIGlmICh0aGlzLnBvcnQgPT0gbnVsbCB8fCB0aGlzLnBvcnQgPT09IHByZXZpb3VzRGVmYXVsdCkge1xuICAgICAgdGhpcy5wb3J0ID0gdGhpcy5kZWZhdWx0UG9ydEZvckRyaXZlcihuZXh0KTtcbiAgICB9XG4gICAgdGhpcy50ZXN0UmVzdWx0ID0gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uSG9zdENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ob3N0ID0gdmFsdWU7XG4gICAgdGhpcy5ob3N0RXJyb3IgPSBudWxsO1xuICAgIHRoaXMudGVzdFJlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblBvcnRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbiA9IE51bWJlcih2YWx1ZSk7XG4gICAgICB0aGlzLnBvcnQgPSBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wb3J0RXJyb3IgPSBudWxsO1xuICAgIHRoaXMudGVzdFJlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkRhdGFiYXNlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFiYXNlID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhYmFzZUVycm9yID0gbnVsbDtcbiAgICB0aGlzLnRlc3RSZXN1bHQgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Vc2VybmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51c2VybmFtZSA9IHZhbHVlO1xuICAgIHRoaXMudXNlcm5hbWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy50ZXN0UmVzdWx0ID0gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUGFzc3dvcmRDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGFzc3dvcmQgPSB2YWx1ZTtcbiAgICB0aGlzLnBhc3N3b3JkVG91Y2hlZCA9IHRydWU7XG4gICAgdGhpcy5wYXNzd29yZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLnRlc3RSZXN1bHQgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0gVGVzdCBjb25uZWN0aW9uIC0tLS0tLS0tXG5cbiAgb25UZXN0Q2xpY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRlc3RGbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2FwdHVyZUZvcm0oKTtcbiAgICBpZiAoIXZhbHVlKSB7IHJldHVybjsgfVxuICAgIHRoaXMuaXNUZXN0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnRlc3RSZXN1bHQgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMudGVzdEZuKHZhbHVlKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5pc1Rlc3RpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50ZXN0UmVzdWx0ID0gcmVzdWx0IHx8IHsgc3RhdHVzOiAnZmFpbHVyZScsIG1lc3NhZ2U6ICdDb25uZWN0aW9uIHRlc3QgZmFpbGVkJyB9O1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLmlzVGVzdGluZyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0Nvbm5lY3Rpb24gdGVzdCBmYWlsZWQnO1xuICAgICAgICB0aGlzLnRlc3RSZXN1bHQgPSB7IHN0YXR1czogJ2ZhaWx1cmUnLCBtZXNzYWdlIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tIFNhdmUgKGNhbGxlZCBieSBob3N0IGRpYWxvZykgLS0tLS0tLS1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsaWRhdGVkIGZvcm0gdmFsdWUsIG9yIG51bGwgaWYgdmFsaWRhdGlvbiBmYWlscyAoaW5saW5lXG4gICAqIGVycm9ycyBhcmUgcG9wdWxhdGVkIGFuZCB0aGUgZGlhbG9nIHN0YXlzIG9wZW4pLlxuICAgKi9cbiAgZ2V0VmFsdWUoKTogRGJDb25maWdEaWFsb2dWYWx1ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNhcHR1cmVGb3JtKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLSBJbnRlcm5hbHMgLS0tLS0tLS1cblxuICBwcml2YXRlIGNhcHR1cmVGb3JtKCk6IERiQ29uZmlnRGlhbG9nVmFsdWUgfCBudWxsIHtcbiAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgIGNvbnN0IHRyaW1tZWROYW1lID0gdGhpcy5jb25uZWN0aW9uTmFtZS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkTmFtZSkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uTmFtZUVycm9yID0gJ0Nvbm5lY3Rpb24gbmFtZSBpcyByZXF1aXJlZC4nO1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0R1cGxpY2F0ZU5hbWUodHJpbW1lZE5hbWUpKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25OYW1lRXJyb3IgPSAnQSBjb25uZWN0aW9uIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgZW52aXJvbm1lbnQuJztcbiAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25uZWN0aW9uTmFtZUVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkSG9zdCA9IHRoaXMuaG9zdC50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkSG9zdCkge1xuICAgICAgdGhpcy5ob3N0RXJyb3IgPSAnSG9zdCBpcyByZXF1aXJlZC4nO1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvc3RFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9ydCA9PSBudWxsIHx8ICFOdW1iZXIuaXNGaW5pdGUodGhpcy5wb3J0KSB8fCB0aGlzLnBvcnQgPD0gMCB8fCB0aGlzLnBvcnQgPiA2NTUzNSkge1xuICAgICAgdGhpcy5wb3J0RXJyb3IgPSAnUG9ydCBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgNjU1MzUuJztcbiAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3J0RXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWREYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2UudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZERhdGFiYXNlKSB7XG4gICAgICB0aGlzLmRhdGFiYXNlRXJyb3IgPSAnRGF0YWJhc2UgbmFtZSBpcyByZXF1aXJlZC4nO1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFiYXNlRXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRVc2VybmFtZSA9ICh0aGlzLnVzZXJuYW1lID8/ICcnKS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkVXNlcm5hbWUpIHtcbiAgICAgIHRoaXMudXNlcm5hbWVFcnJvciA9ICdVc2VybmFtZSBpcyByZXF1aXJlZC4nO1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJuYW1lRXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3N3b3JkSXNCbGFuayA9ICh0aGlzLnBhc3N3b3JkID8/ICcnKS5sZW5ndGggPT09IDA7XG4gICAgY29uc3QgYWxsb3dCbGFua1Bhc3N3b3JkT25FZGl0ID0gdGhpcy5tb2RlID09PSAnZWRpdCcgJiYgIXRoaXMucGFzc3dvcmRUb3VjaGVkO1xuICAgIGlmIChwYXNzd29yZElzQmxhbmsgJiYgIWFsbG93QmxhbmtQYXNzd29yZE9uRWRpdCkge1xuICAgICAgdGhpcy5wYXNzd29yZEVycm9yID0gJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkLic7XG4gICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFzc3dvcmRFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25uZWN0aW9uTmFtZTogdHJpbW1lZE5hbWUsXG4gICAgICBkcml2ZXI6IHRoaXMuZHJpdmVyLFxuICAgICAgaG9zdDogdHJpbW1lZEhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnBvcnQgYXMgbnVtYmVyLFxuICAgICAgZGF0YWJhc2U6IHRyaW1tZWREYXRhYmFzZSxcbiAgICAgIHVzZXJuYW1lOiB0cmltbWVkVXNlcm5hbWUsXG4gICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0R1cGxpY2F0ZU5hbWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IHBvb2wgPSAodGhpcy5leGlzdGluZ05hbWVzIHx8IFtdKS5tYXAobiA9PiBTdHJpbmcobiB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiB0aGlzLmluaXRpYWxWYWx1ZT8uY29ubmVjdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5pbml0aWFsVmFsdWUuY29ubmVjdGlvbk5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBwb29sID0gcG9vbC5maWx0ZXIobiA9PiBuICE9PSBvcmlnaW5hbCk7XG4gICAgfVxuICAgIHJldHVybiBwb29sLmluY2x1ZGVzKGxvd2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFBvcnRGb3JEcml2ZXIoZHJpdmVyOiBEYkRyaXZlcik6IG51bWJlciB7XG4gICAgc3dpdGNoIChkcml2ZXIpIHtcbiAgICAgIGNhc2UgJ1Bvc3RncmVzJzogIHJldHVybiA1NDMyO1xuICAgICAgY2FzZSAnT3JhY2xlJzogICAgcmV0dXJuIDE1MjE7XG4gICAgICBjYXNlICdTUUxTZXJ2ZXInOlxuICAgICAgY2FzZSAnTVNTUUwnOiAgICAgcmV0dXJuIDE0MzM7XG4gICAgICBjYXNlICdNeVNRTCc6XG4gICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4gMzMwNjtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS13LWZ1bGxcIj5cblxuICA8IS0tIFJvdzogQ29ubmVjdGlvbiBuYW1lICsgRHJpdmVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIGxhYmVsPVwiQ29ubmVjdGlvbiBuYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIFByaW1hcnkgKGJvb2tpbmdzKVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3ZhbHVlXT1cImNvbm5lY3Rpb25OYW1lXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbZXJyb3JzXT1cImNvbm5lY3Rpb25OYW1lRXJyb3JzQXJyYXlcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Db25uZWN0aW9uTmFtZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLW1iLTEuNSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5Ecml2ZXI8L2xhYmVsPlxuICAgICAgPGNxYS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgW29wdGlvbnNdPVwiZHJpdmVyT3B0aW9uc1wiXG4gICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cImRyaXZlclwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25Ecml2ZXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZHJvcGRvd24tYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJvdzogSG9zdCArIFBvcnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTQgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtY29sLXNwYW4tM1wiPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgbGFiZWw9XCJIb3N0XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJkYi5leGFtcGxlLmNvbVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3ZhbHVlXT1cImhvc3RcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtlcnJvcnNdPVwiaG9zdEVycm9yc0FycmF5XCJcbiAgICAgICAgaW5wdXRJbmxpbmVTdHlsZT1cImZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Ib3N0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1jb2wtc3Bhbi0xXCI+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBsYWJlbD1cIlBvcnRcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInBvcnQgIT0gbnVsbCA/IHBvcnQudG9TdHJpbmcoKSA6ICcnXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbZXJyb3JzXT1cInBvcnRFcnJvcnNBcnJheVwiXG4gICAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUG9ydENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGF0YWJhc2UgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgbGFiZWw9XCJEYXRhYmFzZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cImJvb2tpbmdzX3FhXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFt2YWx1ZV09XCJkYXRhYmFzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgW2Vycm9yc109XCJkYXRhYmFzZUVycm9yc0FycmF5XCJcbiAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkRhdGFiYXNlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUm93OiBVc2VybmFtZSArIFBhc3N3b3JkIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIGxhYmVsPVwiVXNlcm5hbWVcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFt2YWx1ZV09XCJ1c2VybmFtZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yc109XCJ1c2VybmFtZUVycm9yc0FycmF5XCJcbiAgICAgICAgaW5wdXRJbmxpbmVTdHlsZT1cImZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Vc2VybmFtZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgbGFiZWw9XCJQYXNzd29yZFwiXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgIFt2YWx1ZV09XCJwYXNzd29yZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwYXNzd29yZFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cImlzUGFzc3dvcmRSZXF1aXJlZFZpc3VhbGx5XCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yc109XCJwYXNzd29yZEVycm9yc0FycmF5XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUGFzc3dvcmRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRlc3QgY29ubmVjdGlvbiBhY3Rpb24gKyByZXN1bHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0ZXN0Rm5cIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtM1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICBWYWxpZGF0ZSB0aGUgY29ubmVjdGlvbiB3aXRob3V0IHNhdmluZy4gVGhlIGNyZWRlbnRpYWxzIGFyZSBzZW50IG92ZXIgdGhlIHdpcmUgb25seSBmb3IgdGhpcyBjaGVjay5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wXCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IG1heC1jb250ZW50O1wiXG4gICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgIGJ0blNpemU9XCJtZFwiXG4gICAgICAgIGljb249XCJib2x0XCJcbiAgICAgICAgdGV4dD1cIlRlc3QgY29ubmVjdGlvblwiXG4gICAgICAgIFtsb2FkaW5nXT1cImlzVGVzdGluZ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY2FuVGVzdFwiXG4gICAgICAgIChjbGlja2VkKT1cIm9uVGVzdENsaWNrKClcIj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJ0ZXN0UmVzdWx0XCJcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMiBjcWEtcHgtMyBjcWEtcHktMiBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1zbVwiXG4gICAgICBbbmdDbGFzc109XCJ0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnXG4gICAgICAgID8gJ2NxYS1iZy1bI0VDRkRGNV0gY3FhLXRleHQtWyMwNjVGNDZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0E3RjNEMF0nXG4gICAgICAgIDogJ2NxYS1iZy1bI0ZFRjJGMl0gY3FhLXRleHQtWyM5OTFCMUJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZFQ0FDQV0nXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXctWzE4cHhdICFjcWEtaC1bMThweF0gIWNxYS10ZXh0LVsxOHB4XVwiPlxuICAgICAgICB7eyB0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ2NoZWNrX2NpcmNsZScgOiAnZXJyb3InIH19XG4gICAgICA8L21hdC1pY29uPlxuICAgICAgPHNwYW4+e3sgdGVzdFJlc3VsdC5tZXNzYWdlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVuY3J5cHRpb24gbm90aWNlIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLVsjRUVGMkZGXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNDN0QyRkVdIGNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMzczMEEzXVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdy1bMTZweF0gIWNxYS1oLVsxNnB4XSAhY3FhLXRleHQtWzE2cHhdXCI+bG9jazwvbWF0LWljb24+XG4gICAgPHNwYW4+Q3JlZGVudGlhbHMgYXJlIGVuY3J5cHRlZCBhdCByZXN0IGFuZCBtYXNrZWQgaW4gdGhlIGF1ZGl0IGxvZy48L3NwYW4+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWRiLWNvbmZpZy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9uZXctZGItY29uZmlnLWRpYWxvZy9uZXctZGItY29uZmlnLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1kYi1jb25maWctZGlhbG9nL25ldy1kYi1jb25maWctZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFjM0MsTUFBTSxPQUFPLDBCQUEwQjtJQW1DckMsWUFBNkIsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFsQzFDLFNBQUksR0FBc0IsUUFBUSxDQUFDO1FBRW5DLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFHckIsa0JBQWEsR0FBeUM7WUFDN0QsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFPLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDdkMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFNLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDeEMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDM0MsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFJLEtBQUssRUFBRSxVQUFVLEVBQUU7U0FDM0MsQ0FBQztRQUVGLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFdBQU0sR0FBYSxPQUFPLENBQUM7UUFDM0IsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFNBQUksR0FBa0Is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QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7d0dBR3pELElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgRGJDb25maWdEaWFsb2dWYWx1ZSxcbiAgRGJDb25maWdUZXN0UmVzdWx0LFxuICBEYkRyaXZlcixcbn0gZnJvbSAnLi9uZXctZGItY29uZmlnLWRpYWxvZy5tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbmV3LWRiLWNvbmZpZy1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmV3LWRiLWNvbmZpZy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290Jywgc3R5bGU6ICdkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZXdEYkNvbmZpZ0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgbW9kZTogJ2NyZWF0ZScgfCAnZWRpdCcgPSAnY3JlYXRlJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlPzogUGFydGlhbDxEYkNvbmZpZ0RpYWxvZ1ZhbHVlPjtcbiAgQElucHV0KCkgZXhpc3RpbmdOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgZW52TmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHRlc3RGbj86ICh2YWx1ZTogRGJDb25maWdEaWFsb2dWYWx1ZSkgPT4gT2JzZXJ2YWJsZTxEYkNvbmZpZ1Rlc3RSZXN1bHQ+O1xuXG4gIHJlYWRvbmx5IGRyaXZlck9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IERiRHJpdmVyIH1bXSA9IFtcbiAgICB7IGxhYmVsOiAnTXlTUUwnLCAgICAgIHZhbHVlOiAnTXlTUUwnIH0sXG4gICAgeyBsYWJlbDogJ09yYWNsZScsICAgICB2YWx1ZTogJ09yYWNsZScgfSxcbiAgICB7IGxhYmVsOiAnU1FMIFNlcnZlcicsIHZhbHVlOiAnU1FMU2VydmVyJyB9LFxuICAgIHsgbGFiZWw6ICdQb3N0Z3JlcycsICAgdmFsdWU6ICdQb3N0Z3JlcycgfSxcbiAgXTtcblxuICBjb25uZWN0aW9uTmFtZSA9ICcnO1xuICBkcml2ZXI6IERiRHJpdmVyID0gJ015U1FMJztcbiAgaG9zdCA9ICcnO1xuICBwb3J0OiBudW1iZXIgfCBudWxsID0gMzMwNjtcbiAgZGF0YWJhc2UgPSAnJztcbiAgdXNlcm5hbWUgPSAnJztcbiAgcGFzc3dvcmQgPSAnJztcblxuICBjb25uZWN0aW9uTmFtZUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaG9zdEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcG9ydEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZGF0YWJhc2VFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHVzZXJuYW1lRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwYXNzd29yZEVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwYXNzd29yZFRvdWNoZWQgPSBmYWxzZTtcbiAgaXNUZXN0aW5nID0gZmFsc2U7XG4gIHRlc3RSZXN1bHQ6IERiQ29uZmlnVGVzdFJlc3VsdCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsVmFsdWUpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbk5hbWUgPSB0aGlzLmluaXRpYWxWYWx1ZS5jb25uZWN0aW9uTmFtZSA/PyAnJztcbiAgICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZS5kcml2ZXIpIHsgdGhpcy5kcml2ZXIgPSB0aGlzLmluaXRpYWxWYWx1ZS5kcml2ZXI7IH1cbiAgICAgIHRoaXMuaG9zdCA9IHRoaXMuaW5pdGlhbFZhbHVlLmhvc3QgPz8gJyc7XG4gICAgICBjb25zdCBpbml0aWFsUG9ydCA9IHRoaXMuaW5pdGlhbFZhbHVlLnBvcnQ7XG4gICAgICB0aGlzLnBvcnQgPSBpbml0aWFsUG9ydCAhPSBudWxsICYmICFOdW1iZXIuaXNOYU4oaW5pdGlhbFBvcnQpXG4gICAgICAgID8gTnVtYmVyKGluaXRpYWxQb3J0KVxuICAgICAgICA6IHRoaXMuZGVmYXVsdFBvcnRGb3JEcml2ZXIodGhpcy5kcml2ZXIpO1xuICAgICAgdGhpcy5kYXRhYmFzZSA9IHRoaXMuaW5pdGlhbFZhbHVlLmRhdGFiYXNlID8/ICcnO1xuICAgICAgdGhpcy51c2VybmFtZSA9IHRoaXMuaW5pdGlhbFZhbHVlLnVzZXJuYW1lID8/ICcnO1xuICAgICAgdGhpcy5wYXNzd29yZCA9IHRoaXMuaW5pdGlhbFZhbHVlLnBhc3N3b3JkID8/ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcnQgPSB0aGlzLmRlZmF1bHRQb3J0Rm9yRHJpdmVyKHRoaXMuZHJpdmVyKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLSBDb21wdXRlZCBzdHJpbmdzIC0tLS0tLS0tXG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ0VkaXQgREIgY29uZmlndXJhdGlvbicgOiAnTmV3IGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24nO1xuICB9XG5cbiAgZ2V0IHN1YnRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW52TmFtZVxuICAgICAgPyBgU2NvcGVkIHRvIHRoZSAke3RoaXMuZW52TmFtZX0gZW52aXJvbm1lbnQuIE11bHRpcGxlIGNvbmZpZ3MgY2FuIGxpdmUgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQuYFxuICAgICAgOiAnTXVsdGlwbGUgY29uZmlncyBjYW4gbGl2ZSBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudC4nO1xuICB9XG5cbiAgZ2V0IHByaW1hcnlCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdlZGl0JyA/ICdTYXZlIGNoYW5nZXMnIDogJ0FkZCBEQiBjb25maWcnO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0VudGVyIHBhc3N3b3JkJztcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uTmFtZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uTmFtZUVycm9yID8gW3RoaXMuY29ubmVjdGlvbk5hbWVFcnJvcl0gOiBbXTtcbiAgfVxuICBnZXQgaG9zdEVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0RXJyb3IgPyBbdGhpcy5ob3N0RXJyb3JdIDogW107XG4gIH1cbiAgZ2V0IHBvcnRFcnJvcnNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucG9ydEVycm9yID8gW3RoaXMucG9ydEVycm9yXSA6IFtdO1xuICB9XG4gIGdldCBkYXRhYmFzZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZUVycm9yID8gW3RoaXMuZGF0YWJhc2VFcnJvcl0gOiBbXTtcbiAgfVxuICBnZXQgdXNlcm5hbWVFcnJvcnNBcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWVFcnJvciA/IFt0aGlzLnVzZXJuYW1lRXJyb3JdIDogW107XG4gIH1cbiAgZ2V0IHBhc3N3b3JkRXJyb3JzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkRXJyb3IgPyBbdGhpcy5wYXNzd29yZEVycm9yXSA6IFtdO1xuICB9XG5cbiAgZ2V0IGlzUGFzc3dvcmRSZXF1aXJlZFZpc3VhbGx5KCk6IGJvb2xlYW4ge1xuICAgIC8vIEluIGVkaXQgbW9kZSwgYmxhbmsgcGFzc3dvcmQgbWVhbnMgXCJrZWVwIGV4aXN0aW5nXCIg4oCUIG1hdGNoIHRoZSBlbnYtdmFyIHBhdHRlcm4uXG4gICAgcmV0dXJuIHRoaXMubW9kZSAhPT0gJ2VkaXQnO1xuICB9XG5cbiAgZ2V0IGhhc1N1Y2Nlc3NmdWxUZXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlc3RSZXN1bHQ/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnO1xuICB9XG5cbiAgZ2V0IGNhblRlc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50ZXN0Rm4gJiYgIXRoaXMuaXNUZXN0aW5nO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0gRm9ybSBoYW5kbGVycyAtLS0tLS0tLVxuXG4gIG9uQ29ubmVjdGlvbk5hbWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29ubmVjdGlvbk5hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbm5lY3Rpb25OYW1lRXJyb3IgPSBudWxsO1xuICAgIHRoaXMudGVzdFJlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkRyaXZlckNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9ICh2YWx1ZSBhcyBEYkRyaXZlcikgPz8gJ015U1FMJztcbiAgICBjb25zdCBwcmV2aW91c0RlZmF1bHQgPSB0aGlzLmRlZmF1bHRQb3J0Rm9yRHJpdmVyKHRoaXMuZHJpdmVyKTtcbiAgICB0aGlzLmRyaXZlciA9IG5leHQ7XG4gICAgaWYgKHRoaXMucG9ydCA9PSBudWxsIHx8IHRoaXMucG9ydCA9PT0gcHJldmlvdXNEZWZhdWx0KSB7XG4gICAgICB0aGlzLnBvcnQgPSB0aGlzLmRlZmF1bHRQb3J0Rm9yRHJpdmVyKG5leHQpO1xuICAgIH1cbiAgICB0aGlzLnRlc3RSZXN1bHQgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Ib3N0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhvc3QgPSB2YWx1ZTtcbiAgICB0aGlzLmhvc3RFcnJvciA9IG51bGw7XG4gICAgdGhpcy50ZXN0UmVzdWx0ID0gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUG9ydENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLnBvcnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHRoaXMucG9ydCA9IE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBudWxsO1xuICAgIH1cbiAgICB0aGlzLnBvcnRFcnJvciA9IG51bGw7XG4gICAgdGhpcy50ZXN0UmVzdWx0ID0gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0YWJhc2UgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGFiYXNlRXJyb3IgPSBudWxsO1xuICAgIHRoaXMudGVzdFJlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblVzZXJuYW1lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJuYW1lID0gdmFsdWU7XG4gICAgdGhpcy51c2VybmFtZUVycm9yID0gbnVsbDtcbiAgICB0aGlzLnRlc3RSZXN1bHQgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25QYXNzd29yZENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXNzd29yZCA9IHZhbHVlO1xuICAgIHRoaXMucGFzc3dvcmRUb3VjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLnBhc3N3b3JkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMudGVzdFJlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLSBUZXN0IGNvbm5lY3Rpb24gLS0tLS0tLS1cblxuICBvblRlc3RDbGljaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGVzdEZuKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYXB0dXJlRm9ybSgpO1xuICAgIGlmICghdmFsdWUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5pc1Rlc3RpbmcgPSB0cnVlO1xuICAgIHRoaXMudGVzdFJlc3VsdCA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy50ZXN0Rm4odmFsdWUpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLmlzVGVzdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRlc3RSZXN1bHQgPSByZXN1bHQgfHwgeyBzdGF0dXM6ICdmYWlsdXJlJywgbWVzc2FnZTogJ0Nvbm5lY3Rpb24gdGVzdCBmYWlsZWQnIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuaXNUZXN0aW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCAnQ29ubmVjdGlvbiB0ZXN0IGZhaWxlZCc7XG4gICAgICAgIHRoaXMudGVzdFJlc3VsdCA9IHsgc3RhdHVzOiAnZmFpbHVyZScsIG1lc3NhZ2UgfTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0gU2F2ZSAoY2FsbGVkIGJ5IGhvc3QgZGlhbG9nKSAtLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWxpZGF0ZWQgZm9ybSB2YWx1ZSwgb3IgbnVsbCBpZiB2YWxpZGF0aW9uIGZhaWxzIChpbmxpbmVcbiAgICogZXJyb3JzIGFyZSBwb3B1bGF0ZWQgYW5kIHRoZSBkaWFsb2cgc3RheXMgb3BlbikuXG4gICAqL1xuICBnZXRWYWx1ZSgpOiBEYkNvbmZpZ0RpYWxvZ1ZhbHVlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FwdHVyZUZvcm0oKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tIEludGVybmFscyAtLS0tLS0tLVxuXG4gIHByaXZhdGUgY2FwdHVyZUZvcm0oKTogRGJDb25maWdEaWFsb2dWYWx1ZSB8IG51bGwge1xuICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHJpbW1lZE5hbWUgPSB0aGlzLmNvbm5lY3Rpb25OYW1lLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWROYW1lKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25OYW1lRXJyb3IgPSAnQ29ubmVjdGlvbiBuYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRHVwbGljYXRlTmFtZSh0cmltbWVkTmFtZSkpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbk5hbWVFcnJvciA9ICdBIGNvbm5lY3Rpb24gd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBlbnZpcm9ubWVudC4nO1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25OYW1lRXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRIb3N0ID0gdGhpcy5ob3N0LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWRIb3N0KSB7XG4gICAgICB0aGlzLmhvc3RFcnJvciA9ICdIb3N0IGlzIHJlcXVpcmVkLic7XG4gICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG9zdEVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3J0ID09IG51bGwgfHwgIU51bWJlci5pc0Zpbml0ZSh0aGlzLnBvcnQpIHx8IHRoaXMucG9ydCA8PSAwIHx8IHRoaXMucG9ydCA+IDY1NTM1KSB7XG4gICAgICB0aGlzLnBvcnRFcnJvciA9ICdQb3J0IG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCA2NTUzNS4nO1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcnRFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpbW1lZERhdGFiYXNlID0gdGhpcy5kYXRhYmFzZS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkRGF0YWJhc2UpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VFcnJvciA9ICdEYXRhYmFzZSBuYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpbW1lZFVzZXJuYW1lID0gKHRoaXMudXNlcm5hbWUgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWRVc2VybmFtZSkge1xuICAgICAgdGhpcy51c2VybmFtZUVycm9yID0gJ1VzZXJuYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlcm5hbWVFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc3dvcmRJc0JsYW5rID0gKHRoaXMucGFzc3dvcmQgPz8gJycpLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBhbGxvd0JsYW5rUGFzc3dvcmRPbkVkaXQgPSB0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiAhdGhpcy5wYXNzd29yZFRvdWNoZWQ7XG4gICAgaWYgKHBhc3N3b3JkSXNCbGFuayAmJiAhYWxsb3dCbGFua1Bhc3N3b3JkT25FZGl0KSB7XG4gICAgICB0aGlzLnBhc3N3b3JkRXJyb3IgPSAnUGFzc3dvcmQgaXMgcmVxdWlyZWQuJztcbiAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXNzd29yZEVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbm5lY3Rpb25OYW1lOiB0cmltbWVkTmFtZSxcbiAgICAgIGRyaXZlcjogdGhpcy5kcml2ZXIsXG4gICAgICBob3N0OiB0cmltbWVkSG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMucG9ydCBhcyBudW1iZXIsXG4gICAgICBkYXRhYmFzZTogdHJpbW1lZERhdGFiYXNlLFxuICAgICAgdXNlcm5hbWU6IHRyaW1tZWRVc2VybmFtZSxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzRHVwbGljYXRlTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlciA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgcG9vbCA9ICh0aGlzLmV4aXN0aW5nTmFtZXMgfHwgW10pLm1hcChuID0+IFN0cmluZyhuIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXQnICYmIHRoaXMuaW5pdGlhbFZhbHVlPy5jb25uZWN0aW9uTmFtZSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLmluaXRpYWxWYWx1ZS5jb25uZWN0aW9uTmFtZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHBvb2wgPSBwb29sLmZpbHRlcihuID0+IG4gIT09IG9yaWdpbmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHBvb2wuaW5jbHVkZXMobG93ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UG9ydEZvckRyaXZlcihkcml2ZXI6IERiRHJpdmVyKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKGRyaXZlcikge1xuICAgICAgY2FzZSAnUG9zdGdyZXMnOiAgcmV0dXJuIDU0MzI7XG4gICAgICBjYXNlICdPcmFjbGUnOiAgICByZXR1cm4gMTUyMTtcbiAgICAgIGNhc2UgJ1NRTFNlcnZlcic6XG4gICAgICBjYXNlICdNU1NRTCc6ICAgICByZXR1cm4gMTQzMztcbiAgICAgIGNhc2UgJ015U1FMJzpcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgIHJldHVybiAzMzA2O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXctZnVsbFwiPlxuXG4gIDwhLS0gUm93OiBDb25uZWN0aW9uIG5hbWUgKyBEcml2ZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgbGFiZWw9XCJDb25uZWN0aW9uIG5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gUHJpbWFyeSAoYm9va2luZ3MpXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbdmFsdWVdPVwiY29ubmVjdGlvbk5hbWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtlcnJvcnNdPVwiY29ubmVjdGlvbk5hbWVFcnJvcnNBcnJheVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNvbm5lY3Rpb25OYW1lQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZpdFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLW1iLTEuNSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5Ecml2ZXI8L2xhYmVsPlxuICAgICAgPGNxYS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgW29wdGlvbnNdPVwiZHJpdmVyT3B0aW9uc1wiXG4gICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cImRyaXZlclwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25Ecml2ZXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZHJvcGRvd24tYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJvdzogSG9zdCArIFBvcnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTQgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtY29sLXNwYW4tM1wiPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgbGFiZWw9XCJIb3N0XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJkYi5leGFtcGxlLmNvbVwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3ZhbHVlXT1cImhvc3RcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtlcnJvcnNdPVwiaG9zdEVycm9yc0FycmF5XCJcbiAgICAgICAgaW5wdXRJbmxpbmVTdHlsZT1cImZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Ib3N0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1jb2wtc3Bhbi0xXCI+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBsYWJlbD1cIlBvcnRcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInBvcnQgIT0gbnVsbCA/IHBvcnQudG9TdHJpbmcoKSA6ICcnXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbZXJyb3JzXT1cInBvcnRFcnJvcnNBcnJheVwiXG4gICAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUG9ydENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGF0YWJhc2UgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgbGFiZWw9XCJEYXRhYmFzZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cImJvb2tpbmdzX3FhXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFt2YWx1ZV09XCJkYXRhYmFzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgW2Vycm9yc109XCJkYXRhYmFzZUVycm9yc0FycmF5XCJcbiAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkRhdGFiYXNlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUm93OiBVc2VybmFtZSArIFBhc3N3b3JkIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIGxhYmVsPVwiVXNlcm5hbWVcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFt2YWx1ZV09XCJ1c2VybmFtZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yc109XCJ1c2VybmFtZUVycm9yc0FycmF5XCJcbiAgICAgICAgaW5wdXRJbmxpbmVTdHlsZT1cImZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25Vc2VybmFtZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgbGFiZWw9XCJQYXNzd29yZFwiXG4gICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgIFt2YWx1ZV09XCJwYXNzd29yZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwYXNzd29yZFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cImlzUGFzc3dvcmRSZXF1aXJlZFZpc3VhbGx5XCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yc109XCJwYXNzd29yZEVycm9yc0FycmF5XCJcbiAgICAgICAgW3Nob3dQYXNzd29yZFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUGFzc3dvcmRDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRlc3QgY29ubmVjdGlvbiBhY3Rpb24gKyByZXN1bHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0ZXN0Rm5cIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtM1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICBWYWxpZGF0ZSB0aGUgY29ubmVjdGlvbiB3aXRob3V0IHNhdmluZy4gVGhlIGNyZWRlbnRpYWxzIGFyZSBzZW50IG92ZXIgdGhlIHdpcmUgb25seSBmb3IgdGhpcyBjaGVjay5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wXCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IG1heC1jb250ZW50O1wiXG4gICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgIGJ0blNpemU9XCJtZFwiXG4gICAgICAgIGljb249XCJib2x0XCJcbiAgICAgICAgdGV4dD1cIlRlc3QgY29ubmVjdGlvblwiXG4gICAgICAgIFtsb2FkaW5nXT1cImlzVGVzdGluZ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY2FuVGVzdFwiXG4gICAgICAgIChjbGlja2VkKT1cIm9uVGVzdENsaWNrKClcIj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJ0ZXN0UmVzdWx0XCJcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMiBjcWEtcHgtMyBjcWEtcHktMiBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1zbVwiXG4gICAgICBbbmdDbGFzc109XCJ0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnXG4gICAgICAgID8gJ2NxYS1iZy1bI0VDRkRGNV0gY3FhLXRleHQtWyMwNjVGNDZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0E3RjNEMF0nXG4gICAgICAgIDogJ2NxYS1iZy1bI0ZFRjJGMl0gY3FhLXRleHQtWyM5OTFCMUJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZFQ0FDQV0nXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXctWzE4cHhdICFjcWEtaC1bMThweF0gIWNxYS10ZXh0LVsxOHB4XVwiPlxuICAgICAgICB7eyB0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ2NoZWNrX2NpcmNsZScgOiAnZXJyb3InIH19XG4gICAgICA8L21hdC1pY29uPlxuICAgICAgPHNwYW4+e3sgdGVzdFJlc3VsdC5tZXNzYWdlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVuY3J5cHRpb24gbm90aWNlIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLVsjRUVGMkZGXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNDN0QyRkVdIGNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjMzczMEEzXVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdy1bMTZweF0gIWNxYS1oLVsxNnB4XSAhY3FhLXRleHQtWzE2cHhdXCI+bG9jazwvbWF0LWljb24+XG4gICAgPHNwYW4+Q3JlZGVudGlhbHMgYXJlIGVuY3J5cHRlZCBhdCByZXN0IGFuZCBtYXNrZWQgaW4gdGhlIGF1ZGl0IGxvZy48L3NwYW4+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
@@ -190,10 +190,10 @@ export class NewEnvironmentVariableDialogComponent {
190
190
  }
191
191
  }
192
192
  NewEnvironmentVariableDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentVariableDialogComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
193
- NewEnvironmentVariableDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewEnvironmentVariableDialogComponent, selector: "cqa-new-environment-variable-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n [showPasswordToggle]=\"isPassword\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "displayOnly", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
193
+ NewEnvironmentVariableDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewEnvironmentVariableDialogComponent, selector: "cqa-new-environment-variable-dialog", inputs: { mode: "mode", initialValue: "initialValue", existingNames: "existingNames", envName: "envName" }, host: { styleAttribute: "display:block;width:100%;", classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-fit\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\" [class.cqa-w-fit]=\"isBoolean\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n [showPasswordToggle]=\"isPassword\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n", components: [{ type: i1.CustomInputComponent, selector: "cqa-custom-input", inputs: ["inputId", "label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle", "showPasswordToggle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i2.DropdownButtonComponent, selector: "cqa-dropdown-button", inputs: ["label", "options", "selectedValue", "disabled", "placeholder"], outputs: ["selectionChange", "opened", "closed"] }, { type: i3.PermissionToggleComponent, selector: "cqa-permission-toggle", inputs: ["value", "disabled", "displayOnly", "roTooltip", "rwTooltip"], outputs: ["valueChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
194
194
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewEnvironmentVariableDialogComponent, decorators: [{
195
195
  type: Component,
196
- args: [{ selector: 'cqa-new-environment-variable-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n [showPasswordToggle]=\"isPassword\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n" }]
196
+ args: [{ selector: 'cqa-new-environment-variable-dialog', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n <!-- Name -->\n <div class=\"cqa-flex cqa-flex-col\">\n <cqa-custom-input\n label=\"Name\"\n placeholder=\"e.g. order_id\"\n type=\"text\"\n [value]=\"name\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [errors]=\"nameErrorsArray\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onNameChange($event)\">\n </cqa-custom-input>\n <span *ngIf=\"!nameError\"\n class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n {{ nameHelperText }}\n </span>\n </div>\n\n <!-- Type + Permission -->\n <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-fit\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n <cqa-dropdown-button\n [options]=\"typeDropdownOptions\"\n [selectedValue]=\"type\"\n (selectionChange)=\"onTypeChange($event)\">\n </cqa-dropdown-button>\n </div>\n <div class=\"cqa-flex cqa-flex-col\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n <div class=\"cqa-pt-0.5\">\n <cqa-permission-toggle\n [value]=\"readWriteMode\"\n (valueChange)=\"onPermissionChange($event)\">\n </cqa-permission-toggle>\n </div>\n <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n </div>\n </div>\n\n <!-- Value -->\n <div class=\"cqa-flex cqa-flex-col\" [class.cqa-w-fit]=\"isBoolean\">\n <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n <cqa-dropdown-button\n [options]=\"booleanDropdownOptions\"\n [selectedValue]=\"value\"\n (selectionChange)=\"onBooleanValueChange($event)\">\n </cqa-dropdown-button>\n </ng-container>\n <ng-template #nonBooleanValue>\n <cqa-custom-input\n label=\"Value\"\n [type]=\"isPassword ? 'password' : (isNumber ? 'number' : 'text')\"\n [value]=\"value\"\n [placeholder]=\"valuePlaceholder\"\n [required]=\"isValueRequiredVisually\"\n [fullWidth]=\"true\"\n [errors]=\"valueErrorsArray\"\n [showPasswordToggle]=\"isPassword\"\n inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n (valueChange)=\"onValueChange($event)\">\n </cqa-custom-input>\n </ng-template>\n </div>\n\n</div>\n" }]
197
197
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
198
198
  type: Input
199
199
  }], initialValue: [{
@@ -203,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
203
203
  }], envName: [{
204
204
  type: Input
205
205
  }] } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWFyRyxNQUFNLE9BQU8scUNBQXFDO0lBc0JoRCxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXJCMUMsU0FBSSxHQUFzQixRQUFRLENBQUM7UUFFbkMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQix3QkFBbUIsR0FBa0Q7WUFDNUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDdEMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7U0FDekMsQ0FBQztRQUVGLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixTQUFJLEdBQXNCLFFBQVEsQ0FBQztRQUNuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsa0JBQWEsR0FBNEIsSUFBSSxDQUFDO1FBQzlDLG9CQUFlLEdBQUcsS0FB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Q0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7a0lBbk1VLHFDQUFxQztzSEFBckMscUNBQXFDLDZRQ2JsRCwwbEZBc0VBOzJGRHpEYSxxQ0FBcUM7a0JBTmpELFNBQVM7K0JBQ0UscUNBQXFDLG1CQUU5Qix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7d0dBR3pELElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEVudlZhcmlhYmxlRGlhbG9nVmFsdWUsXG4gIEVudlZhcmlhYmxlVUlQZXJtaXNzaW9uLFxuICBFbnZWYXJpYWJsZVVJVHlwZSxcbn0gZnJvbSAnLi9uZXctZW52aXJvbm1lbnQtdmFyaWFibGUtZGlhbG9nLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1uZXctZW52aXJvbm1lbnQtdmFyaWFibGUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290Jywgc3R5bGU6ICdkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZXdFbnZpcm9ubWVudFZhcmlhYmxlRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kZTogJ2NyZWF0ZScgfCAnZWRpdCcgPSAnY3JlYXRlJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlPzogUGFydGlhbDxFbnZWYXJpYWJsZURpYWxvZ1ZhbHVlPjtcbiAgQElucHV0KCkgZXhpc3RpbmdOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgZW52TmFtZTogc3RyaW5nID0gJyc7XG5cbiAgcmVhZG9ubHkgdHlwZURyb3Bkb3duT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogRW52VmFyaWFibGVVSVR5cGUgfVtdID0gW1xuICAgIHsgbGFiZWw6ICdTdHJpbmcnLCB2YWx1ZTogJ1N0cmluZycgfSxcbiAgICB7IGxhYmVsOiAnTnVtYmVyJywgdmFsdWU6ICdOdW1iZXInIH0sXG4gICAgeyBsYWJlbDogJ0Jvb2xlYW4nLCB2YWx1ZTogJ0Jvb2xlYW4nIH0sXG4gICAgeyBsYWJlbDogJ1Bhc3N3b3JkJywgdmFsdWU6ICdQYXNzd29yZCcgfSxcbiAgXTtcblxuICBuYW1lID0gJyc7XG4gIHR5cGU6IEVudlZhcmlhYmxlVUlUeXBlID0gJ1N0cmluZyc7XG4gIHZhbHVlID0gJyc7XG4gIHJlYWRXcml0ZU1vZGU6IEVudlZhcmlhYmxlVUlQZXJtaXNzaW9uID0gJ1JXJztcbiAgcGFzc3dvcmRUb3VjaGVkID0gZmFsc2U7XG5cbiAgbmFtZUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgdmFsdWVFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5uYW1lID0gdGhpcy5pbml0aWFsVmFsdWUubmFtZSA/PyAnJztcbiAgICAgIHRoaXMudHlwZSA9IHRoaXMuaW5pdGlhbFZhbHVlLnR5cGUgPz8gJ1N0cmluZyc7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWUudmFsdWUgPz8gJyc7XG4gICAgICB0aGlzLnJlYWRXcml0ZU1vZGUgPSB0aGlzLmluaXRpYWxWYWx1ZS5yZWFkV3JpdGVNb2RlID8/ICdSVyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdCb29sZWFuJyAmJiB0aGlzLnZhbHVlICE9PSAndHJ1ZScgJiYgdGhpcy52YWx1ZSAhPT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy52YWx1ZSA9ICdmYWxzZSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ0VkaXQgdmFyaWFibGUnIDogJ05ldyB2YXJpYWJsZSc7XG4gIH1cblxuICBnZXQgc3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbnZOYW1lID8gYFNjb3BlZCB0byB0aGUgJHt0aGlzLmVudk5hbWV9IGVudmlyb25tZW50LmAgOiAnU2NvcGVkIHRvIHRoaXMgZW52aXJvbm1lbnQuJztcbiAgfVxuXG4gIGdldCBwcmltYXJ5QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCcgPyAnU2F2ZSBjaGFuZ2VzJyA6ICdBZGQgdmFyaWFibGUnO1xuICB9XG5cbiAgZ2V0IGlzQm9vbGVhbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ0Jvb2xlYW4nOyB9XG4gIGdldCBpc1Bhc3N3b3JkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50eXBlID09PSAnUGFzc3dvcmQnOyB9XG4gIGdldCBpc051bWJlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ051bWJlcic7IH1cblxuICBnZXQgdmFsdWVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlYWRXcml0ZU1vZGUgPT09ICdSVycpIHtcbiAgICAgIHJldHVybiAnTGVhdmUgYmxhbmsgdG8gcG9wdWxhdGUgZHVyaW5nIHRlc3QgZXhlY3V0aW9uJztcbiAgICB9XG4gICAgcmV0dXJuICdFbnRlciBhIHZhbHVlJztcbiAgfVxuXG4gIGdldCBuYW1lSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm5hbWVFcnJvcikgeyByZXR1cm4gdGhpcy5uYW1lRXJyb3I7IH1cbiAgICByZXR1cm4gJ1ZhcmlhYmxlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZW52aXJvbm1lbnQuJztcbiAgfVxuXG4gIGdldCBwZXJtaXNzaW9uSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRXcml0ZU1vZGUgPT09ICdSTydcbiAgICAgID8gJ1JlYWQgb25seSDigJQgdGVzdCBzdGVwcyBjYW4gcmVhZCBidXQgbm90IG92ZXJ3cml0ZS4nXG4gICAgICA6ICdSZWFkL3dyaXRlIOKAlCB0ZXN0IGNhc2VzIGNhbiBjYXB0dXJlIHZhbHVlcyBoZXJlLic7XG4gIH1cblxuICBnZXQgbmFtZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMubmFtZUVycm9yID8gW3RoaXMubmFtZUVycm9yXSA6IFtdOyB9XG4gIGdldCB2YWx1ZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMudmFsdWVFcnJvciA/IFt0aGlzLnZhbHVlRXJyb3JdIDogW107IH1cblxuICBnZXQgYm9vbGVhbkRyb3Bkb3duT3B0aW9ucygpOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyBsYWJlbDogJ3RydWUnLCB2YWx1ZTogJ3RydWUnIH0sXG4gICAgICB7IGxhYmVsOiAnZmFsc2UnLCB2YWx1ZTogJ2ZhbHNlJyB9LFxuICAgIF07XG4gIH1cblxuICBnZXQgaXNWYWx1ZVJlcXVpcmVkVmlzdWFsbHkoKTogYm9vbGVhbiB7XG4gICAgLy8gQm9vbGVhbiBpcyBzZWxlY3RlZCB2aWEgZHJvcGRvd24gKGFsd2F5cyBoYXMgYSB2YWx1ZSk7IHBhc3N3b3JkIGVkaXQtbW9kZVxuICAgIC8vIGFsbG93cyBibGFuayB0byBtZWFuIFwia2VlcCBleGlzdGluZyBzZWNyZXRcIiDigJQgYm90aCByZW5kZXIgd2l0aG91dCB0aGUgYXN0ZXJpc2suXG4gICAgaWYgKHRoaXMuaXNCb29sZWFuKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0aGlzLmlzUGFzc3dvcmQgJiYgdGhpcy5tb2RlID09PSAnZWRpdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbk5hbWVDaGFuZ2UobmV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uYW1lID0gbmV4dDtcbiAgICB0aGlzLm5hbWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblR5cGVDaGFuZ2UobmV4dDogRW52VmFyaWFibGVVSVR5cGUpOiB2b2lkIHtcbiAgICBpZiAoIW5leHQpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgcHJldiA9IHRoaXMudHlwZTtcbiAgICB0aGlzLnR5cGUgPSBuZXh0O1xuICAgIGlmIChwcmV2ID09PSAnQm9vbGVhbicgJiYgbmV4dCAhPT0gJ0Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSAnQm9vbGVhbicgJiYgdGhpcy52YWx1ZSAhPT0gJ3RydWUnICYmIHRoaXMudmFsdWUgIT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnZmFsc2UnO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gJ051bWJlcicgJiYgdGhpcy52YWx1ZSAmJiAhdGhpcy5pc1ZhbGlkTnVtYmVyKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmIChuZXh0ID09PSAnUGFzc3dvcmQnICYmIHByZXYgIT09ICdQYXNzd29yZCcpIHtcbiAgICAgIHRoaXMucGFzc3dvcmRUb3VjaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblBlcm1pc3Npb25DaGFuZ2UobmV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkV3JpdGVNb2RlID0gbmV4dCA9PT0gJ1JPJyA/ICdSTycgOiAnUlcnO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25WYWx1ZUNoYW5nZShuZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV4dDtcbiAgICBpZiAodGhpcy5pc1Bhc3N3b3JkKSB7IHRoaXMucGFzc3dvcmRUb3VjaGVkID0gdHJ1ZTsgfVxuICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShuZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV4dDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3N0IHJlYWRzIHZpYSBEaWFsb2dSZWYuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKS4gUmV0dXJucyBudWxsIG9uIHZhbGlkYXRpb25cbiAgICogZmFpbHVyZSDigJQgaG9zdCBrZWVwcyB0aGUgZGlhbG9nIG9wZW4gYW5kIHN1cmZhY2VzIHRoZSBpbmxpbmUgZXJyb3IgYWxyZWFkeVxuICAgKiB3cml0dGVuIG9udG8gbmFtZUVycm9yIC8gdmFsdWVFcnJvci5cbiAgICovXG4gIGdldFZhbHVlKCk6IEVudlZhcmlhYmxlRGlhbG9nVmFsdWUgfCBudWxsIHtcbiAgICBjb25zdCB0cmltbWVkTmFtZSA9IHRoaXMubmFtZS50cmltKCk7XG5cbiAgICBpZiAoIXRyaW1tZWROYW1lKSB7XG4gICAgICB0aGlzLm5hbWVFcnJvciA9ICdOYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRHVwbGljYXRlTmFtZSh0cmltbWVkTmFtZSkpIHtcbiAgICAgIHRoaXMubmFtZUVycm9yID0gJ0EgdmFyaWFibGUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBlbnZpcm9ubWVudC4nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWVFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3VmFsdWUgPSAodGhpcy52YWx1ZSA/PyAnJykudG9TdHJpbmcoKTtcbiAgICBjb25zdCB2YWx1ZUlzQmxhbmsgPSAhdGhpcy5pc0Jvb2xlYW4gJiYgcmF3VmFsdWUudHJpbSgpID09PSAnJztcbiAgICBjb25zdCBhbGxvd0JsYW5rUGFzc3dvcmRPbkVkaXQgPSB0aGlzLmlzUGFzc3dvcmQgJiYgdGhpcy5tb2RlID09PSAnZWRpdCcgJiYgIXRoaXMucGFzc3dvcmRUb3VjaGVkO1xuXG4gICAgaWYgKHZhbHVlSXNCbGFuayAmJiAhYWxsb3dCbGFua1Bhc3N3b3JkT25FZGl0KSB7XG4gICAgICB0aGlzLnZhbHVlRXJyb3IgPSAnVmFsdWUgaXMgcmVxdWlyZWQuJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXIgJiYgcmF3VmFsdWUgJiYgIXRoaXMuaXNWYWxpZE51bWJlcihyYXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWVFcnJvciA9ICdWYWx1ZSBtdXN0IGJlIGEgbnVtYmVyLic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFtZUVycm9yIHx8IHRoaXMudmFsdWVFcnJvcikge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBvbWl0UGFzc3dvcmRWYWx1ZSA9IHRoaXMuaXNQYXNzd29yZCAmJiB0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiAhdGhpcy5wYXNzd29yZFRvdWNoZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdHJpbW1lZE5hbWUsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2YWx1ZTogb21pdFBhc3N3b3JkVmFsdWUgPyBudWxsIDogdGhpcy5zZXJpYWxpemVWYWx1ZSgpLFxuICAgICAgcmVhZFdyaXRlTW9kZTogdGhpcy5yZWFkV3JpdGVNb2RlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmlzQm9vbGVhbikge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09ICd0cnVlJyA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0R1cGxpY2F0ZU5hbWUoY2FuZGlkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdGluZyA9ICh0aGlzLmV4aXN0aW5nTmFtZXMgPz8gW10pLm1hcChuID0+IChuID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgbG93ZXJlZCA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSAodGhpcy5pbml0aWFsVmFsdWU/Lm5hbWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGxvd2VyZWQgIT09IG9yaWdpbmFsICYmIGV4aXN0aW5nLmluY2x1ZGVzKGxvd2VyZWQpO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3RpbmcuaW5jbHVkZXMobG93ZXJlZCk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWROdW1iZXIocmF3OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0cmltbWVkID0gcmF3LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHsgcmV0dXJuIHRydWU7IH1cbiAgICByZXR1cm4gIU51bWJlci5pc05hTihOdW1iZXIodHJpbW1lZCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtdy1mdWxsXCI+XG5cbiAgPCEtLSBOYW1lIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgIGxhYmVsPVwiTmFtZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cImUuZy4gb3JkZXJfaWRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW3ZhbHVlXT1cIm5hbWVcIlxuICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIFtlcnJvcnNdPVwibmFtZUVycm9yc0FycmF5XCJcbiAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbk5hbWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8c3BhbiAqbmdJZj1cIiFuYW1lRXJyb3JcIlxuICAgICAgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTUwMCBjcWEtbXQtMVwiPlxuICAgICAge3sgbmFtZUhlbHBlclRleHQgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVHlwZSArIFBlcm1pc3Npb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLW1iLTEuNSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDBcIj5UeXBlPC9sYWJlbD5cbiAgICAgIDxjcWEtZHJvcGRvd24tYnV0dG9uXG4gICAgICAgIFtvcHRpb25zXT1cInR5cGVEcm9wZG93bk9wdGlvbnNcIlxuICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJ0eXBlXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblR5cGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZHJvcGRvd24tYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1tYi0xLjUgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+UGVybWlzc2lvbjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXB0LTAuNVwiPlxuICAgICAgICA8Y3FhLXBlcm1pc3Npb24tdG9nZ2xlXG4gICAgICAgICAgW3ZhbHVlXT1cInJlYWRXcml0ZU1vZGVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblBlcm1pc3Npb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1wZXJtaXNzaW9uLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTUwMCBjcWEtbXQtMVwiPnt7IHBlcm1pc3Npb25IZWxwZXJUZXh0IH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFZhbHVlIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQm9vbGVhbjsgZWxzZSBub25Cb29sZWFuVmFsdWVcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1tYi0xLjUgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+VmFsdWU8L2xhYmVsPlxuICAgICAgPGNxYS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgW29wdGlvbnNdPVwiYm9vbGVhbkRyb3Bkb3duT3B0aW9uc1wiXG4gICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkJvb2xlYW5WYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1kcm9wZG93bi1idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub25Cb29sZWFuVmFsdWU+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBsYWJlbD1cIlZhbHVlXCJcbiAgICAgICAgW3R5cGVdPVwiaXNQYXNzd29yZCA/ICdwYXNzd29yZCcgOiAoaXNOdW1iZXIgPyAnbnVtYmVyJyA6ICd0ZXh0JylcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwidmFsdWVQbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1ZhbHVlUmVxdWlyZWRWaXN1YWxseVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtlcnJvcnNdPVwidmFsdWVFcnJvcnNBcnJheVwiXG4gICAgICAgIFtzaG93UGFzc3dvcmRUb2dnbGVdPVwiaXNQYXNzd29yZFwiXG4gICAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cvbmV3LWVudmlyb25tZW50LXZhcmlhYmxlLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWFyRyxNQUFNLE9BQU8scUNBQXFDO0lBc0JoRCxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXJCMUMsU0FBSSxHQUFzQixRQUFRLENBQUM7UUFFbkMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQix3QkFBbUIsR0FBa0Q7WUFDNUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDdEMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7U0FDekMsQ0FBQztRQUVGLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixTQUFJLEdBQXNCLFFBQVEsQ0FBQztRQUNuQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsa0JBQWEsR0FBNEIsSUFBSSxDQUFDO1FBQzlDLG9CQUFlLEdBQUcsS0FB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Q0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7a0lBbk1VLHFDQUFxQztzSEFBckMscUNBQXFDLDZRQ2JsRCxvb0ZBc0VBOzJGRHpEYSxxQ0FBcUM7a0JBTmpELFNBQVM7K0JBQ0UscUNBQXFDLG1CQUU5Qix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUU7d0dBR3pELElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEVudlZhcmlhYmxlRGlhbG9nVmFsdWUsXG4gIEVudlZhcmlhYmxlVUlQZXJtaXNzaW9uLFxuICBFbnZWYXJpYWJsZVVJVHlwZSxcbn0gZnJvbSAnLi9uZXctZW52aXJvbm1lbnQtdmFyaWFibGUtZGlhbG9nLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1uZXctZW52aXJvbm1lbnQtdmFyaWFibGUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25ldy1lbnZpcm9ubWVudC12YXJpYWJsZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290Jywgc3R5bGU6ICdkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZXdFbnZpcm9ubWVudFZhcmlhYmxlRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kZTogJ2NyZWF0ZScgfCAnZWRpdCcgPSAnY3JlYXRlJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlPzogUGFydGlhbDxFbnZWYXJpYWJsZURpYWxvZ1ZhbHVlPjtcbiAgQElucHV0KCkgZXhpc3RpbmdOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgZW52TmFtZTogc3RyaW5nID0gJyc7XG5cbiAgcmVhZG9ubHkgdHlwZURyb3Bkb3duT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogRW52VmFyaWFibGVVSVR5cGUgfVtdID0gW1xuICAgIHsgbGFiZWw6ICdTdHJpbmcnLCB2YWx1ZTogJ1N0cmluZycgfSxcbiAgICB7IGxhYmVsOiAnTnVtYmVyJywgdmFsdWU6ICdOdW1iZXInIH0sXG4gICAgeyBsYWJlbDogJ0Jvb2xlYW4nLCB2YWx1ZTogJ0Jvb2xlYW4nIH0sXG4gICAgeyBsYWJlbDogJ1Bhc3N3b3JkJywgdmFsdWU6ICdQYXNzd29yZCcgfSxcbiAgXTtcblxuICBuYW1lID0gJyc7XG4gIHR5cGU6IEVudlZhcmlhYmxlVUlUeXBlID0gJ1N0cmluZyc7XG4gIHZhbHVlID0gJyc7XG4gIHJlYWRXcml0ZU1vZGU6IEVudlZhcmlhYmxlVUlQZXJtaXNzaW9uID0gJ1JXJztcbiAgcGFzc3dvcmRUb3VjaGVkID0gZmFsc2U7XG5cbiAgbmFtZUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgdmFsdWVFcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgdGhpcy5uYW1lID0gdGhpcy5pbml0aWFsVmFsdWUubmFtZSA/PyAnJztcbiAgICAgIHRoaXMudHlwZSA9IHRoaXMuaW5pdGlhbFZhbHVlLnR5cGUgPz8gJ1N0cmluZyc7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWUudmFsdWUgPz8gJyc7XG4gICAgICB0aGlzLnJlYWRXcml0ZU1vZGUgPSB0aGlzLmluaXRpYWxWYWx1ZS5yZWFkV3JpdGVNb2RlID8/ICdSVyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdCb29sZWFuJyAmJiB0aGlzLnZhbHVlICE9PSAndHJ1ZScgJiYgdGhpcy52YWx1ZSAhPT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy52YWx1ZSA9ICdmYWxzZSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ0VkaXQgdmFyaWFibGUnIDogJ05ldyB2YXJpYWJsZSc7XG4gIH1cblxuICBnZXQgc3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbnZOYW1lID8gYFNjb3BlZCB0byB0aGUgJHt0aGlzLmVudk5hbWV9IGVudmlyb25tZW50LmAgOiAnU2NvcGVkIHRvIHRoaXMgZW52aXJvbm1lbnQuJztcbiAgfVxuXG4gIGdldCBwcmltYXJ5QnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCcgPyAnU2F2ZSBjaGFuZ2VzJyA6ICdBZGQgdmFyaWFibGUnO1xuICB9XG5cbiAgZ2V0IGlzQm9vbGVhbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ0Jvb2xlYW4nOyB9XG4gIGdldCBpc1Bhc3N3b3JkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50eXBlID09PSAnUGFzc3dvcmQnOyB9XG4gIGdldCBpc051bWJlcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ051bWJlcic7IH1cblxuICBnZXQgdmFsdWVQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlYWRXcml0ZU1vZGUgPT09ICdSVycpIHtcbiAgICAgIHJldHVybiAnTGVhdmUgYmxhbmsgdG8gcG9wdWxhdGUgZHVyaW5nIHRlc3QgZXhlY3V0aW9uJztcbiAgICB9XG4gICAgcmV0dXJuICdFbnRlciBhIHZhbHVlJztcbiAgfVxuXG4gIGdldCBuYW1lSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm5hbWVFcnJvcikgeyByZXR1cm4gdGhpcy5uYW1lRXJyb3I7IH1cbiAgICByZXR1cm4gJ1ZhcmlhYmxlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZW52aXJvbm1lbnQuJztcbiAgfVxuXG4gIGdldCBwZXJtaXNzaW9uSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRXcml0ZU1vZGUgPT09ICdSTydcbiAgICAgID8gJ1JlYWQgb25seSDigJQgdGVzdCBzdGVwcyBjYW4gcmVhZCBidXQgbm90IG92ZXJ3cml0ZS4nXG4gICAgICA6ICdSZWFkL3dyaXRlIOKAlCB0ZXN0IGNhc2VzIGNhbiBjYXB0dXJlIHZhbHVlcyBoZXJlLic7XG4gIH1cblxuICBnZXQgbmFtZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMubmFtZUVycm9yID8gW3RoaXMubmFtZUVycm9yXSA6IFtdOyB9XG4gIGdldCB2YWx1ZUVycm9yc0FycmF5KCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMudmFsdWVFcnJvciA/IFt0aGlzLnZhbHVlRXJyb3JdIDogW107IH1cblxuICBnZXQgYm9vbGVhbkRyb3Bkb3duT3B0aW9ucygpOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgeyBsYWJlbDogJ3RydWUnLCB2YWx1ZTogJ3RydWUnIH0sXG4gICAgICB7IGxhYmVsOiAnZmFsc2UnLCB2YWx1ZTogJ2ZhbHNlJyB9LFxuICAgIF07XG4gIH1cblxuICBnZXQgaXNWYWx1ZVJlcXVpcmVkVmlzdWFsbHkoKTogYm9vbGVhbiB7XG4gICAgLy8gQm9vbGVhbiBpcyBzZWxlY3RlZCB2aWEgZHJvcGRvd24gKGFsd2F5cyBoYXMgYSB2YWx1ZSk7IHBhc3N3b3JkIGVkaXQtbW9kZVxuICAgIC8vIGFsbG93cyBibGFuayB0byBtZWFuIFwia2VlcCBleGlzdGluZyBzZWNyZXRcIiDigJQgYm90aCByZW5kZXIgd2l0aG91dCB0aGUgYXN0ZXJpc2suXG4gICAgaWYgKHRoaXMuaXNCb29sZWFuKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0aGlzLmlzUGFzc3dvcmQgJiYgdGhpcy5tb2RlID09PSAnZWRpdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbk5hbWVDaGFuZ2UobmV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5uYW1lID0gbmV4dDtcbiAgICB0aGlzLm5hbWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblR5cGVDaGFuZ2UobmV4dDogRW52VmFyaWFibGVVSVR5cGUpOiB2b2lkIHtcbiAgICBpZiAoIW5leHQpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgcHJldiA9IHRoaXMudHlwZTtcbiAgICB0aGlzLnR5cGUgPSBuZXh0O1xuICAgIGlmIChwcmV2ID09PSAnQm9vbGVhbicgJiYgbmV4dCAhPT0gJ0Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuZXh0ID09PSAnQm9vbGVhbicgJiYgdGhpcy52YWx1ZSAhPT0gJ3RydWUnICYmIHRoaXMudmFsdWUgIT09ICdmYWxzZScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnZmFsc2UnO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PT0gJ051bWJlcicgJiYgdGhpcy52YWx1ZSAmJiAhdGhpcy5pc1ZhbGlkTnVtYmVyKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIGlmIChuZXh0ID09PSAnUGFzc3dvcmQnICYmIHByZXYgIT09ICdQYXNzd29yZCcpIHtcbiAgICAgIHRoaXMucGFzc3dvcmRUb3VjaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblBlcm1pc3Npb25DaGFuZ2UobmV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkV3JpdGVNb2RlID0gbmV4dCA9PT0gJ1JPJyA/ICdSTycgOiAnUlcnO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25WYWx1ZUNoYW5nZShuZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV4dDtcbiAgICBpZiAodGhpcy5pc1Bhc3N3b3JkKSB7IHRoaXMucGFzc3dvcmRUb3VjaGVkID0gdHJ1ZTsgfVxuICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShuZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV4dDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3N0IHJlYWRzIHZpYSBEaWFsb2dSZWYuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKS4gUmV0dXJucyBudWxsIG9uIHZhbGlkYXRpb25cbiAgICogZmFpbHVyZSDigJQgaG9zdCBrZWVwcyB0aGUgZGlhbG9nIG9wZW4gYW5kIHN1cmZhY2VzIHRoZSBpbmxpbmUgZXJyb3IgYWxyZWFkeVxuICAgKiB3cml0dGVuIG9udG8gbmFtZUVycm9yIC8gdmFsdWVFcnJvci5cbiAgICovXG4gIGdldFZhbHVlKCk6IEVudlZhcmlhYmxlRGlhbG9nVmFsdWUgfCBudWxsIHtcbiAgICBjb25zdCB0cmltbWVkTmFtZSA9IHRoaXMubmFtZS50cmltKCk7XG5cbiAgICBpZiAoIXRyaW1tZWROYW1lKSB7XG4gICAgICB0aGlzLm5hbWVFcnJvciA9ICdOYW1lIGlzIHJlcXVpcmVkLic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRHVwbGljYXRlTmFtZSh0cmltbWVkTmFtZSkpIHtcbiAgICAgIHRoaXMubmFtZUVycm9yID0gJ0EgdmFyaWFibGUgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBlbnZpcm9ubWVudC4nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWVFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3VmFsdWUgPSAodGhpcy52YWx1ZSA/PyAnJykudG9TdHJpbmcoKTtcbiAgICBjb25zdCB2YWx1ZUlzQmxhbmsgPSAhdGhpcy5pc0Jvb2xlYW4gJiYgcmF3VmFsdWUudHJpbSgpID09PSAnJztcbiAgICBjb25zdCBhbGxvd0JsYW5rUGFzc3dvcmRPbkVkaXQgPSB0aGlzLmlzUGFzc3dvcmQgJiYgdGhpcy5tb2RlID09PSAnZWRpdCcgJiYgIXRoaXMucGFzc3dvcmRUb3VjaGVkO1xuXG4gICAgaWYgKHZhbHVlSXNCbGFuayAmJiAhYWxsb3dCbGFua1Bhc3N3b3JkT25FZGl0KSB7XG4gICAgICB0aGlzLnZhbHVlRXJyb3IgPSAnVmFsdWUgaXMgcmVxdWlyZWQuJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOdW1iZXIgJiYgcmF3VmFsdWUgJiYgIXRoaXMuaXNWYWxpZE51bWJlcihyYXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWVFcnJvciA9ICdWYWx1ZSBtdXN0IGJlIGEgbnVtYmVyLic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVFcnJvciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFtZUVycm9yIHx8IHRoaXMudmFsdWVFcnJvcikge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBvbWl0UGFzc3dvcmRWYWx1ZSA9IHRoaXMuaXNQYXNzd29yZCAmJiB0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiAhdGhpcy5wYXNzd29yZFRvdWNoZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdHJpbW1lZE5hbWUsXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICB2YWx1ZTogb21pdFBhc3N3b3JkVmFsdWUgPyBudWxsIDogdGhpcy5zZXJpYWxpemVWYWx1ZSgpLFxuICAgICAgcmVhZFdyaXRlTW9kZTogdGhpcy5yZWFkV3JpdGVNb2RlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmlzQm9vbGVhbikge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09ICd0cnVlJyA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhbHVlID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0R1cGxpY2F0ZU5hbWUoY2FuZGlkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBleGlzdGluZyA9ICh0aGlzLmV4aXN0aW5nTmFtZXMgPz8gW10pLm1hcChuID0+IChuID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgbG93ZXJlZCA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSAodGhpcy5pbml0aWFsVmFsdWU/Lm5hbWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIGxvd2VyZWQgIT09IG9yaWdpbmFsICYmIGV4aXN0aW5nLmluY2x1ZGVzKGxvd2VyZWQpO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3RpbmcuaW5jbHVkZXMobG93ZXJlZCk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWROdW1iZXIocmF3OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0cmltbWVkID0gcmF3LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHsgcmV0dXJuIHRydWU7IH1cbiAgICByZXR1cm4gIU51bWJlci5pc05hTihOdW1iZXIodHJpbW1lZCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtdy1mdWxsXCI+XG5cbiAgPCEtLSBOYW1lIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgIGxhYmVsPVwiTmFtZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cImUuZy4gb3JkZXJfaWRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW3ZhbHVlXT1cIm5hbWVcIlxuICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIFtlcnJvcnNdPVwibmFtZUVycm9yc0FycmF5XCJcbiAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbk5hbWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8c3BhbiAqbmdJZj1cIiFuYW1lRXJyb3JcIlxuICAgICAgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1ncmF5LTUwMCBjcWEtbXQtMVwiPlxuICAgICAge3sgbmFtZUhlbHBlclRleHQgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVHlwZSArIFBlcm1pc3Npb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1maXRcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1tYi0xLjUgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+VHlwZTwvbGFiZWw+XG4gICAgICA8Y3FhLWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICBbb3B0aW9uc109XCJ0eXBlRHJvcGRvd25PcHRpb25zXCJcbiAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwidHlwZVwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25UeXBlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWRyb3Bkb3duLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbWItMS41IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMFwiPlBlcm1pc3Npb248L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1wdC0wLjVcIj5cbiAgICAgICAgPGNxYS1wZXJtaXNzaW9uLXRvZ2dsZVxuICAgICAgICAgIFt2YWx1ZV09XCJyZWFkV3JpdGVNb2RlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25QZXJtaXNzaW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtcGVybWlzc2lvbi10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtZ3JheS01MDAgY3FhLW10LTFcIj57eyBwZXJtaXNzaW9uSGVscGVyVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWYWx1ZSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiIFtjbGFzcy5jcWEtdy1maXRdPVwiaXNCb29sZWFuXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQm9vbGVhbjsgZWxzZSBub25Cb29sZWFuVmFsdWVcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1tYi0xLjUgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwXCI+VmFsdWU8L2xhYmVsPlxuICAgICAgPGNxYS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgW29wdGlvbnNdPVwiYm9vbGVhbkRyb3Bkb3duT3B0aW9uc1wiXG4gICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkJvb2xlYW5WYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1kcm9wZG93bi1idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNub25Cb29sZWFuVmFsdWU+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBsYWJlbD1cIlZhbHVlXCJcbiAgICAgICAgW3R5cGVdPVwiaXNQYXNzd29yZCA/ICdwYXNzd29yZCcgOiAoaXNOdW1iZXIgPyAnbnVtYmVyJyA6ICd0ZXh0JylcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwidmFsdWVQbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1ZhbHVlUmVxdWlyZWRWaXN1YWxseVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtlcnJvcnNdPVwidmFsdWVFcnJvcnNBcnJheVwiXG4gICAgICAgIFtzaG93UGFzc3dvcmRUb2dnbGVdPVwiaXNQYXNzd29yZFwiXG4gICAgICAgIGlucHV0SW5saW5lU3R5bGU9XCJmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2U7XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==