@cqa-lib/cqa-ui 1.1.241 → 1.1.243
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/export-code-modal/export-code-modal.component.mjs +3 -3
- package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +3 -3
- package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-group/step-builder-group.component.mjs +72 -12
- package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +12 -5
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +23 -22
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +23 -21
- package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +3 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +134 -62
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +130 -61
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-group/step-builder-group.component.d.ts +36 -1
- package/lib/step-builder/template-variables-form/template-variables-form.component.d.ts +4 -1
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -120,10 +120,10 @@ export class ExportCodeModalComponent {
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
ExportCodeModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ExportCodeModalComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }, { token: i1.MatDialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
-
ExportCodeModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: { isOpen: "isOpen", cases: "cases", disabled: "disabled" }, outputs: { closeModal: "closeModal", export: "export" }, ngImport: i0, template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n <p class=\"cqa-text-sm cqa-text-[#4A5565]\">Choose how you want to export the test case code:</p>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Export Options -->\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(C-
|
|
123
|
+
ExportCodeModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ExportCodeModalComponent, selector: "cqa-export-code-modal", inputs: { isOpen: "isOpen", cases: "cases", disabled: "disabled" }, outputs: { closeModal: "closeModal", export: "export" }, ngImport: i0, template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n <p class=\"cqa-text-sm cqa-text-[#4A5565]\">Choose how you want to export the test case code:</p>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Export Options -->\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(C-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", components: [{ type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
124
124
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ExportCodeModalComponent, decorators: [{
|
|
125
125
|
type: Component,
|
|
126
|
-
args: [{ selector: 'cqa-export-code-modal', template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n <p class=\"cqa-text-sm cqa-text-[#4A5565]\">Choose how you want to export the test case code:</p>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Export Options -->\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(C-
|
|
126
|
+
args: [{ selector: 'cqa-export-code-modal', template: "<div *ngIf=\"isOpen || isDialogMode\"\n [class.modal-backdrop]=\"!isDialogMode\"\n [class.cqa-fixed]=\"!isDialogMode\"\n [class.cqa-inset-0]=\"!isDialogMode\"\n [class.cqa-bg-black]=\"!isDialogMode\"\n [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n [class.cqa-flex]=\"!isDialogMode\"\n [class.cqa-items-center]=\"!isDialogMode\"\n [class.cqa-justify-center]=\"!isDialogMode\"\n [class.cqa-p-4]=\"!isDialogMode\"\n (click)=\"!isDialogMode && onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n <!-- Sticky Header -->\n <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n Export Code\n </h2>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'md'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n </div>\n <p class=\"cqa-text-sm cqa-text-[#4A5565]\">Choose how you want to export the test case code:</p>\n </div>\n\n <!-- Content -->\n <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n <!-- Export Options -->\n <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n [class.cqa-border-gray-300]=\"!exportOnLocal\"\n (click)=\"exportOnLocal = true\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"exportOnLocal\" \n (click)=\"$event.stopPropagation()\"\n name=\"exportType\"\n style=\"pointer-events: none;\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n </div>\n </div>\n </div>\n \n <div \n class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n [class.cqa-border-gray-300]=\"exportOnLocal\"\n (click)=\"exportOnLocal = false\">\n <div class=\"cqa-flex cqa-items-center\">\n <input \n type=\"radio\" \n [checked]=\"!exportOnLocal\" \n name=\"exportType\"\n style=\"pointer-events: none;\"\n (click)=\"$event.stopPropagation()\"\n class=\"cqa-mr-2 cqa-cursor-pointer\">\n <div>\n <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Email Input Section (only shown when Via Email is selected) -->\n <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <cqa-custom-input\n class=\"cqa-flex-1\"\n [type]=\"'email'\"\n [placeholder]=\"'Type email and press Enter or Add button'\"\n [value]=\"emailInputControl.value || ''\"\n [fullWidth]=\"true\"\n [errors]=\"getEmailErrors()\"\n (valueChange)=\"emailInputControl.setValue($event)\"\n (enterPressed)=\"addEmail()\">\n </cqa-custom-input>\n <cqa-button \n [variant]=\"'outlined'\"\n [icon]=\"'add'\"\n [btnSize]=\"'lg'\"\n [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n (clicked)=\"addEmail()\">\n </cqa-button>\n </div>\n\n <!-- Email Validation Error for Empty List -->\n <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n At least one email address is required\n </div>\n\n <!-- Email Chips -->\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n <div *ngFor=\"let email of emailList; let i = index\" \n class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n <cqa-button \n [variant]=\"'text'\"\n [icon]=\"'close'\"\n [btnSize]=\"'sm'\"\n [iconColor]=\"'#6366F1'\"\n (clicked)=\"removeEmail(i)\">\n </cqa-button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Cases List -->\n <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px] cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(C-{{case.id}})</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n <cqa-button \n [variant]=\"'outlined'\"\n [text]=\"'Cancel'\"\n (clicked)=\"onClose()\">\n </cqa-button>\n <cqa-button \n [variant]=\"'filled'\"\n [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n [disabled]=\"disabled || isExportDisabled()\"\n (clicked)=\"handleExport()\">\n </cqa-button>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
127
127
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
128
128
|
type: Optional
|
|
129
129
|
}, {
|
|
@@ -142,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
142
142
|
}], export: [{
|
|
143
143
|
type: Output
|
|
144
144
|
}] } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWNvZGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leHBvcnQtY29kZS1tb2RhbC9leHBvcnQtY29kZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4cG9ydC1jb2RlLW1vZGFsL2V4cG9ydC1jb2RlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQWtCekUsTUFBTSxPQUFPLHdCQUF3QjtJQWNuQyxZQUM4QyxTQUErQixFQUN2RCxTQUFrRDtRQUQxQixjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUN2RCxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQWYvRCxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUV6QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtELENBQUM7UUFFL0Usa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFhLEVBQUUsQ0FBQztRQUV6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQU1uQyxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxVQUFVLENBQUMsS0FBSztT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QUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7O3FIQWxJVSx3QkFBd0Isa0JBZWIsZUFBZTt5R0FmMUIsd0JBQXdCLDBMQ3BCckMsMDFOQTRKQTsyRkR4SWEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHVCQUF1Qjs7MEJBbUI5QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUNsQyxRQUFROzRDQWZGLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZSB7XG4gIGlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvZGVNb2RhbERhdGEge1xuICBjb3VudD86IG51bWJlcjtcbiAgY2FzZXM/OiBUZXN0Q2FzZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1leHBvcnQtY29kZS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBvcnQtY29kZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29kZU1vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNhc2VzOiBUZXN0Q2FzZVtdID0gW107XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdIH0+KCk7XG5cbiAgcHVibGljIGV4cG9ydE9uTG9jYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZW1haWxMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgZW1haWxJbnB1dENvbnRyb2w6IEZvcm1Db250cm9sO1xuICBwdWJsaWMgc2hvd0VtYWlsRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzRGlhbG9nTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgbW9kYWxEYXRhPzogRXhwb3J0Q29kZU1vZGFsRGF0YSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpYWxvZ1JlZj86IE1hdERpYWxvZ1JlZjxFeHBvcnRDb2RlTW9kYWxDb21wb25lbnQ+XG4gICkge1xuICAgIC8vIEluaXRpYWxpemUgZW1haWwgaW5wdXQgY29udHJvbCB3aXRoIHZhbGlkYXRpb25cbiAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXG4gICAgICBWYWxpZGF0b3JzLmVtYWlsXG4gICAgXSk7XG5cbiAgICAvLyBJZiB1c2VkIHdpdGggTWF0RGlhbG9nLCBpbml0aWFsaXplIGZyb20gbW9kYWxEYXRhXG4gICAgaWYgKG1vZGFsRGF0YSkge1xuICAgICAgdGhpcy5pc0RpYWxvZ01vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5jYXNlcyA9IG1vZGFsRGF0YS5jYXNlcyB8fCBbXTtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSBtb2RhbERhdGEuZGlzYWJsZWQgfHwgZmFsc2U7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrZHJvcENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIFxuICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQgfHwgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtYmFja2Ryb3AnKSkge1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0RpYWxvZ01vZGUgJiYgdGhpcy5kaWFsb2dSZWYpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gICAgfVxuICAgIC8vIFJlc2V0IGZvcm0gd2hlbiBjbG9zaW5nXG4gICAgdGhpcy5leHBvcnRPbkxvY2FsID0gdHJ1ZTtcbiAgICB0aGlzLmVtYWlsTGlzdCA9IFtdO1xuICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wucmVzZXQoKTtcbiAgICB0aGlzLnNob3dFbWFpbEVycm9yID0gZmFsc2U7XG4gIH1cblxuICBhZGRFbWFpbCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IHRoaXMuZW1haWxJbnB1dENvbnRyb2wudmFsdWU/LnRyaW0oKTtcbiAgICBcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXNcbiAgICBpZiAodGhpcy5lbWFpbExpc3QuaW5jbHVkZXMoZW1haWwpKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IGR1cGxpY2F0ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZCBlbWFpbCB0byBsaXN0XG4gICAgdGhpcy5lbWFpbExpc3QucHVzaChlbWFpbCk7XG4gICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5yZXNldCgpO1xuICAgIHRoaXMuc2hvd0VtYWlsRXJyb3IgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUVtYWlsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuZW1haWxMaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5lbWFpbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbEVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSW5wdXRDb250cm9sLnRvdWNoZWQgfHwgIXRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcbiAgICAgIGVycm9ycy5wdXNoKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbWFpbElucHV0Q29udHJvbC5lcnJvcnM/LlsnZW1haWwnXSkge1xuICAgICAgZXJyb3JzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ2R1cGxpY2F0ZSddKSB7XG4gICAgICBlcnJvcnMucHVzaCgnVGhpcyBlbWFpbCBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlzRXhwb3J0RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZXhwb3J0T25Mb2NhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBGb3IgZW1haWwgZXhwb3J0LCBhdCBsZWFzdCBvbmUgdmFsaWQgZW1haWwgaXMgcmVxdWlyZWRcbiAgICByZXR1cm4gdGhpcy5lbWFpbExpc3QubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHBvcnRPbkxvY2FsICYmIHRoaXMuZW1haWxMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93RW1haWxFcnJvciA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRW1pdCBleHBvcnQgZXZlbnQgd2l0aCBhcHByb3ByaWF0ZSBkYXRhXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5leHBvcnRPbkxvY2FsID8geyB0eXBlOiAnbG9jYWwnIGFzIGNvbnN0IH0gOiB7XG4gICAgICB0eXBlOiAnZW1haWwnIGFzIGNvbnN0LFxuICAgICAgZW1haWxzOiB0aGlzLmVtYWlsTGlzdFxuICAgIH07XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEaWFsb2dNb2RlICYmIHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydC5lbWl0KHJlc3VsdCk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgKm5nSWY9XCJpc09wZW4gfHwgaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLm1vZGFsLWJhY2tkcm9wXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWZpeGVkXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWluc2V0LTBdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctYmxhY2tdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctb3BhY2l0eS01MF09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1mbGV4XT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWl0ZW1zLWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1qdXN0aWZ5LWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1wLTRdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmIG9uQmFja2Ryb3BDbGljaygkZXZlbnQpXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1yb3VuZGVkLWxnIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LXhsIGNxYS13LWZ1bGwgY3FhLW1heC13LVs2MDBweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1heC1oLVs5MHZoXVwiXG4gICAgW3N0eWxlLmJveC1zaGFkb3ddPVwiJzBweCA4cHggOHB4IC00cHggIzEwMTgyODA4J1wiIFxuICAgIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgPCEtLSBTdGlja3kgSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RpY2t5IGNxYS10b3AtMCBjcWEtYmctd2hpdGUgY3FhLW10LTIgY3FhLXotMTAgY3FhLXB4LTQgY3FhLXB0LTIgY3FhLXBiLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTNcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMENdXCI+XG4gICAgICAgICAgRXhwb3J0IENvZGVcbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbaWNvbl09XCInY2xvc2UnXCJcbiAgICAgICAgICBbYnRuU2l6ZV09XCInbWQnXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjNEE1NTY1XVwiPkNob29zZSBob3cgeW91IHdhbnQgdG8gZXhwb3J0IHRoZSB0ZXN0IGNhc2UgY29kZTo8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtcHgtNCBjcWEtcGItNFwiPlxuICAgICAgPCEtLSBFeHBvcnQgT3B0aW9ucyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTQgY3FhLW1iLTJcIj5cbiAgICAgICAgPGRpdiBcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLWJvcmRlciBjcWEtcm91bmRlZC1sZyBjcWEtcHgtNCBjcWEtcHktMSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRyYW5zaXRpb24tYWxsXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJvcmRlci1bIzNmNDNlZV1dPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1iZy1bI0YwRjBGRl1dPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItZ3JheS0zMDBdPVwiIWV4cG9ydE9uTG9jYWxcIlxuICAgICAgICAgIChjbGljayk9XCJleHBvcnRPbkxvY2FsID0gdHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJleHBvcnRPbkxvY2FsXCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBuYW1lPVwiZXhwb3J0VHlwZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtbXItMiBjcWEtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWJsb2NrIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzBCMEIwQ11cIj5Eb3dubG9hZCBpbiBMb2NhbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1ib3JkZXIgY3FhLXJvdW5kZWQtbGcgY3FhLXB4LTQgY3FhLXB5LTEgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItWyMzZjQzZWVdXT1cIiFleHBvcnRPbkxvY2FsXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJnLVsjRjBGMEZGXV09XCIhZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItZ3JheS0zMDBdPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImV4cG9ydE9uTG9jYWwgPSBmYWxzZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhZXhwb3J0T25Mb2NhbFwiIFxuICAgICAgICAgICAgICBuYW1lPVwiZXhwb3J0VHlwZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1yLTIgY3FhLWN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1ibG9jayBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwQjBCMENdXCI+VmlhIEVtYWlsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRW1haWwgSW5wdXQgU2VjdGlvbiAob25seSBzaG93biB3aGVuIFZpYSBFbWFpbCBpcyBzZWxlY3RlZCkgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW10LTJcIiAqbmdJZj1cIiFleHBvcnRPbkxvY2FsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtYmctZ3JheS01MCBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtc20gY3FhLXRleHQtWyMwQjBCMENdIGNxYS1tYi0yXCI+RW1haWwgQWRkcmVzc2VzOjwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMlwiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2VtYWlsJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVHlwZSBlbWFpbCBhbmQgcHJlc3MgRW50ZXIgb3IgQWRkIGJ1dHRvbidcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZW1haWxJbnB1dENvbnRyb2wudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZXJyb3JzXT1cImdldEVtYWlsRXJyb3JzKClcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZW1haWxJbnB1dENvbnRyb2wuc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChlbnRlclByZXNzZWQpPVwiYWRkRW1haWwoKVwiPlxuICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgICAgICAgIFt2YXJpYW50XT1cIidvdXRsaW5lZCdcIlxuICAgICAgICAgICAgICBbaWNvbl09XCInYWRkJ1wiXG4gICAgICAgICAgICAgIFtidG5TaXplXT1cIidsZydcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVtYWlsSW5wdXRDb250cm9sLnZhbGlkIHx8ICFlbWFpbElucHV0Q29udHJvbC52YWx1ZT8udHJpbSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkRW1haWwoKVwiPlxuICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCBWYWxpZGF0aW9uIEVycm9yIGZvciBFbXB0eSBMaXN0IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1yZWQtNjAwIGNxYS10ZXh0LXhzIGNxYS1tYi0yXCIgKm5nSWY9XCIhZXhwb3J0T25Mb2NhbCAmJiBlbWFpbExpc3QubGVuZ3RoID09PSAwICYmIHNob3dFbWFpbEVycm9yXCI+XG4gICAgICAgICAgICBBdCBsZWFzdCBvbmUgZW1haWwgYWRkcmVzcyBpcyByZXF1aXJlZFxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCBDaGlwcyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTIgY3FhLW10LTJcIiAqbmdJZj1cImVtYWlsTGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbWFpbCBvZiBlbWFpbExpc3Q7IGxldCBpID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktMSBjcWEtYmctWyNERkRGRkRdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0RGREZGRF0gY3FhLXJvdW5kZWQtbWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNjM2NkYxXSBjcWEtdGV4dC1bMTJweF1cIj57e2VtYWlsfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Nsb3NlJ1wiXG4gICAgICAgICAgICAgICAgW2J0blNpemVdPVwiJ3NtJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25Db2xvcl09XCInIzYzNjZGMSdcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZUVtYWlsKGkpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENhc2VzIExpc3QgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW10LTFcIiAqbmdJZj1cImNhc2VzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTQgY3FhLWJnLWdyYXktNTAgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjMEIwQjBDXSBjcWEtbWItMlwiPlRlc3QgQ2FzZXMgdG8gRXhwb3J0ICh7e2Nhc2VzLmxlbmd0aH19KTo8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1heC1oLVsxNTBweF0gY3FhLW92ZXJmbG93LXktYXV0byBjcWEtcHItNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWItWzFweF0gY3FhLWJvcmRlci10LVswcHhdIGNxYS1ib3JkZXItbC1bMHB4XSBjcWEtYm9yZGVyLXItWzBweF0gIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiICpuZ0Zvcj1cImxldCBjYXNlIG9mIGNhc2VzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzNmNDNlZV0gY3FhLW1pbi13LVsyNHB4XVwiPnt7aSArIDF9fS48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMwQjBCMENdXCI+e3tjYXNlLm5hbWUgfHwgJ1VubmFtZWQgVGVzdCBDYXNlJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJjYXNlLmlkXCI+KEMtSUQ6IHt7Y2FzZS5pZH19KTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1weC00IGNxYS1weS0zIGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1mbGV4IGNxYS1qdXN0aWZ5LWVuZCBjcWEtZ2FwLTNcIj5cbiAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICBbdmFyaWFudF09XCInb3V0bGluZWQnXCJcbiAgICAgICAgW3RleHRdPVwiJ0NhbmNlbCdcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICBbdmFyaWFudF09XCInZmlsbGVkJ1wiXG4gICAgICAgIFt0ZXh0XT1cImV4cG9ydE9uTG9jYWwgPyAnRXhwb3J0JyA6ICdTZW5kJ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBpc0V4cG9ydERpc2FibGVkKClcIlxuICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVFeHBvcnQoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWNvZGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leHBvcnQtY29kZS1tb2RhbC9leHBvcnQtY29kZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4cG9ydC1jb2RlLW1vZGFsL2V4cG9ydC1jb2RlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQWtCekUsTUFBTSxPQUFPLHdCQUF3QjtJQWNuQyxZQUM4QyxTQUErQixFQUN2RCxTQUFrRDtRQUQxQixjQUFTLEdBQVQsU0FBUyxDQUFzQjtRQUN2RCxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQWYvRCxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUV6QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN0QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWtELENBQUM7UUFFL0Usa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFhLEVBQUUsQ0FBQztRQUV6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQU1uQyxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxVQUFVLENBQUMsS0FBSztT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QUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7O3FIQWxJVSx3QkFBd0Isa0JBZWIsZUFBZTt5R0FmMUIsd0JBQXdCLDBMQ3BCckMsczFOQTRKQTsyRkR4SWEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHVCQUF1Qjs7MEJBbUI5QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUNsQyxRQUFROzRDQWZGLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZSB7XG4gIGlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvZGVNb2RhbERhdGEge1xuICBjb3VudD86IG51bWJlcjtcbiAgY2FzZXM/OiBUZXN0Q2FzZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1leHBvcnQtY29kZS1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBvcnQtY29kZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29kZU1vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNhc2VzOiBUZXN0Q2FzZVtdID0gW107XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdIH0+KCk7XG5cbiAgcHVibGljIGV4cG9ydE9uTG9jYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZW1haWxMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgZW1haWxJbnB1dENvbnRyb2w6IEZvcm1Db250cm9sO1xuICBwdWJsaWMgc2hvd0VtYWlsRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzRGlhbG9nTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgbW9kYWxEYXRhPzogRXhwb3J0Q29kZU1vZGFsRGF0YSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpYWxvZ1JlZj86IE1hdERpYWxvZ1JlZjxFeHBvcnRDb2RlTW9kYWxDb21wb25lbnQ+XG4gICkge1xuICAgIC8vIEluaXRpYWxpemUgZW1haWwgaW5wdXQgY29udHJvbCB3aXRoIHZhbGlkYXRpb25cbiAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXG4gICAgICBWYWxpZGF0b3JzLmVtYWlsXG4gICAgXSk7XG5cbiAgICAvLyBJZiB1c2VkIHdpdGggTWF0RGlhbG9nLCBpbml0aWFsaXplIGZyb20gbW9kYWxEYXRhXG4gICAgaWYgKG1vZGFsRGF0YSkge1xuICAgICAgdGhpcy5pc0RpYWxvZ01vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5jYXNlcyA9IG1vZGFsRGF0YS5jYXNlcyB8fCBbXTtcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSBtb2RhbERhdGEuZGlzYWJsZWQgfHwgZmFsc2U7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrZHJvcENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIFxuICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQgfHwgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtYmFja2Ryb3AnKSkge1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0RpYWxvZ01vZGUgJiYgdGhpcy5kaWFsb2dSZWYpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gICAgfVxuICAgIC8vIFJlc2V0IGZvcm0gd2hlbiBjbG9zaW5nXG4gICAgdGhpcy5leHBvcnRPbkxvY2FsID0gdHJ1ZTtcbiAgICB0aGlzLmVtYWlsTGlzdCA9IFtdO1xuICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wucmVzZXQoKTtcbiAgICB0aGlzLnNob3dFbWFpbEVycm9yID0gZmFsc2U7XG4gIH1cblxuICBhZGRFbWFpbCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IHRoaXMuZW1haWxJbnB1dENvbnRyb2wudmFsdWU/LnRyaW0oKTtcbiAgICBcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXNcbiAgICBpZiAodGhpcy5lbWFpbExpc3QuaW5jbHVkZXMoZW1haWwpKSB7XG4gICAgICB0aGlzLmVtYWlsSW5wdXRDb250cm9sLnNldEVycm9ycyh7IGR1cGxpY2F0ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuZW1haWxJbnB1dENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZCBlbWFpbCB0byBsaXN0XG4gICAgdGhpcy5lbWFpbExpc3QucHVzaChlbWFpbCk7XG4gICAgdGhpcy5lbWFpbElucHV0Q29udHJvbC5yZXNldCgpO1xuICAgIHRoaXMuc2hvd0VtYWlsRXJyb3IgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUVtYWlsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuZW1haWxMaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5lbWFpbExpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbEVycm9ycygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSW5wdXRDb250cm9sLnRvdWNoZWQgfHwgIXRoaXMuZW1haWxJbnB1dENvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ3JlcXVpcmVkJ10pIHtcbiAgICAgIGVycm9ycy5wdXNoKCdFbWFpbCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbWFpbElucHV0Q29udHJvbC5lcnJvcnM/LlsnZW1haWwnXSkge1xuICAgICAgZXJyb3JzLnB1c2goJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW1haWxJbnB1dENvbnRyb2wuZXJyb3JzPy5bJ2R1cGxpY2F0ZSddKSB7XG4gICAgICBlcnJvcnMucHVzaCgnVGhpcyBlbWFpbCBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlzRXhwb3J0RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZXhwb3J0T25Mb2NhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBGb3IgZW1haWwgZXhwb3J0LCBhdCBsZWFzdCBvbmUgdmFsaWQgZW1haWwgaXMgcmVxdWlyZWRcbiAgICByZXR1cm4gdGhpcy5lbWFpbExpc3QubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5leHBvcnRPbkxvY2FsICYmIHRoaXMuZW1haWxMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93RW1haWxFcnJvciA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRW1pdCBleHBvcnQgZXZlbnQgd2l0aCBhcHByb3ByaWF0ZSBkYXRhXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5leHBvcnRPbkxvY2FsID8geyB0eXBlOiAnbG9jYWwnIGFzIGNvbnN0IH0gOiB7XG4gICAgICB0eXBlOiAnZW1haWwnIGFzIGNvbnN0LFxuICAgICAgZW1haWxzOiB0aGlzLmVtYWlsTGlzdFxuICAgIH07XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEaWFsb2dNb2RlICYmIHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydC5lbWl0KHJlc3VsdCk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgKm5nSWY9XCJpc09wZW4gfHwgaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLm1vZGFsLWJhY2tkcm9wXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWZpeGVkXT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWluc2V0LTBdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctYmxhY2tdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIFtjbGFzcy5jcWEtYmctb3BhY2l0eS01MF09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1mbGV4XT1cIiFpc0RpYWxvZ01vZGVcIlxuICBbY2xhc3MuY3FhLWl0ZW1zLWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1qdXN0aWZ5LWNlbnRlcl09XCIhaXNEaWFsb2dNb2RlXCJcbiAgW2NsYXNzLmNxYS1wLTRdPVwiIWlzRGlhbG9nTW9kZVwiXG4gIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmIG9uQmFja2Ryb3BDbGljaygkZXZlbnQpXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1yb3VuZGVkLWxnIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LXhsIGNxYS13LWZ1bGwgY3FhLW1heC13LVs2MDBweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1heC1oLVs5MHZoXVwiXG4gICAgW3N0eWxlLmJveC1zaGFkb3ddPVwiJzBweCA4cHggOHB4IC00cHggIzEwMTgyODA4J1wiIFxuICAgIChjbGljayk9XCIhaXNEaWFsb2dNb2RlICYmICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgPCEtLSBTdGlja3kgSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc3RpY2t5IGNxYS10b3AtMCBjcWEtYmctd2hpdGUgY3FhLW10LTIgY3FhLXotMTAgY3FhLXB4LTQgY3FhLXB0LTIgY3FhLXBiLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1iLTNcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMENdXCI+XG4gICAgICAgICAgRXhwb3J0IENvZGVcbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbaWNvbl09XCInY2xvc2UnXCJcbiAgICAgICAgICBbYnRuU2l6ZV09XCInbWQnXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjNEE1NTY1XVwiPkNob29zZSBob3cgeW91IHdhbnQgdG8gZXhwb3J0IHRoZSB0ZXN0IGNhc2UgY29kZTo8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtcHgtNCBjcWEtcGItNFwiPlxuICAgICAgPCEtLSBFeHBvcnQgT3B0aW9ucyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTQgY3FhLW1iLTJcIj5cbiAgICAgICAgPGRpdiBcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLWJvcmRlciBjcWEtcm91bmRlZC1sZyBjcWEtcHgtNCBjcWEtcHktMSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRyYW5zaXRpb24tYWxsXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJvcmRlci1bIzNmNDNlZV1dPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1iZy1bI0YwRjBGRl1dPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItZ3JheS0zMDBdPVwiIWV4cG9ydE9uTG9jYWxcIlxuICAgICAgICAgIChjbGljayk9XCJleHBvcnRPbkxvY2FsID0gdHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJleHBvcnRPbkxvY2FsXCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBuYW1lPVwiZXhwb3J0VHlwZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtbXItMiBjcWEtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWJsb2NrIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzBCMEIwQ11cIj5Eb3dubG9hZCBpbiBMb2NhbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1ib3JkZXIgY3FhLXJvdW5kZWQtbGcgY3FhLXB4LTQgY3FhLXB5LTEgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItWyMzZjQzZWVdXT1cIiFleHBvcnRPbkxvY2FsXCJcbiAgICAgICAgICBbY2xhc3MuY3FhLWJnLVsjRjBGMEZGXV09XCIhZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgW2NsYXNzLmNxYS1ib3JkZXItZ3JheS0zMDBdPVwiZXhwb3J0T25Mb2NhbFwiXG4gICAgICAgICAgKGNsaWNrKT1cImV4cG9ydE9uTG9jYWwgPSBmYWxzZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiIFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhZXhwb3J0T25Mb2NhbFwiIFxuICAgICAgICAgICAgICBuYW1lPVwiZXhwb3J0VHlwZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLW1yLTIgY3FhLWN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1ibG9jayBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwQjBCMENdXCI+VmlhIEVtYWlsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRW1haWwgSW5wdXQgU2VjdGlvbiAob25seSBzaG93biB3aGVuIFZpYSBFbWFpbCBpcyBzZWxlY3RlZCkgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW10LTJcIiAqbmdJZj1cIiFleHBvcnRPbkxvY2FsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtYmctZ3JheS01MCBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtc20gY3FhLXRleHQtWyMwQjBCMENdIGNxYS1tYi0yXCI+RW1haWwgQWRkcmVzc2VzOjwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMlwiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2VtYWlsJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVHlwZSBlbWFpbCBhbmQgcHJlc3MgRW50ZXIgb3IgQWRkIGJ1dHRvbidcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZW1haWxJbnB1dENvbnRyb2wudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZXJyb3JzXT1cImdldEVtYWlsRXJyb3JzKClcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZW1haWxJbnB1dENvbnRyb2wuc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChlbnRlclByZXNzZWQpPVwiYWRkRW1haWwoKVwiPlxuICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgICAgICAgIFt2YXJpYW50XT1cIidvdXRsaW5lZCdcIlxuICAgICAgICAgICAgICBbaWNvbl09XCInYWRkJ1wiXG4gICAgICAgICAgICAgIFtidG5TaXplXT1cIidsZydcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVtYWlsSW5wdXRDb250cm9sLnZhbGlkIHx8ICFlbWFpbElucHV0Q29udHJvbC52YWx1ZT8udHJpbSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkRW1haWwoKVwiPlxuICAgICAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCBWYWxpZGF0aW9uIEVycm9yIGZvciBFbXB0eSBMaXN0IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1yZWQtNjAwIGNxYS10ZXh0LXhzIGNxYS1tYi0yXCIgKm5nSWY9XCIhZXhwb3J0T25Mb2NhbCAmJiBlbWFpbExpc3QubGVuZ3RoID09PSAwICYmIHNob3dFbWFpbEVycm9yXCI+XG4gICAgICAgICAgICBBdCBsZWFzdCBvbmUgZW1haWwgYWRkcmVzcyBpcyByZXF1aXJlZFxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCBDaGlwcyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTIgY3FhLW10LTJcIiAqbmdJZj1cImVtYWlsTGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbWFpbCBvZiBlbWFpbExpc3Q7IGxldCBpID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktMSBjcWEtYmctWyNERkRGRkRdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0RGREZGRF0gY3FhLXJvdW5kZWQtbWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNjM2NkYxXSBjcWEtdGV4dC1bMTJweF1cIj57e2VtYWlsfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxjcWEtYnV0dG9uIFxuICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ2Nsb3NlJ1wiXG4gICAgICAgICAgICAgICAgW2J0blNpemVdPVwiJ3NtJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25Db2xvcl09XCInIzYzNjZGMSdcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZUVtYWlsKGkpXCI+XG4gICAgICAgICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENhc2VzIExpc3QgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW10LTFcIiAqbmdJZj1cImNhc2VzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTQgY3FhLWJnLWdyYXktNTAgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjMEIwQjBDXSBjcWEtbWItMlwiPlRlc3QgQ2FzZXMgdG8gRXhwb3J0ICh7e2Nhc2VzLmxlbmd0aH19KTo8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1heC1oLVsxNTBweF0gY3FhLW92ZXJmbG93LXktYXV0byBjcWEtcHItNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWItWzFweF0gY3FhLWJvcmRlci10LVswcHhdIGNxYS1ib3JkZXItbC1bMHB4XSBjcWEtYm9yZGVyLXItWzBweF0gIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiICpuZ0Zvcj1cImxldCBjYXNlIG9mIGNhc2VzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzNmNDNlZV0gY3FhLW1pbi13LVsyNHB4XVwiPnt7aSArIDF9fS48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMwQjBCMENdXCI+e3tjYXNlLm5hbWUgfHwgJ1VubmFtZWQgVGVzdCBDYXNlJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJjYXNlLmlkXCI+KEMte3tjYXNlLmlkfX0pPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvb3RlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTMgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1nYXAtM1wiPlxuICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgIFt2YXJpYW50XT1cIidvdXRsaW5lZCdcIlxuICAgICAgICBbdGV4dF09XCInQ2FuY2VsJ1wiXG4gICAgICAgIChjbGlja2VkKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPGNxYS1idXR0b24gXG4gICAgICAgIFt2YXJpYW50XT1cIidmaWxsZWQnXCJcbiAgICAgICAgW3RleHRdPVwiZXhwb3J0T25Mb2NhbCA/ICdFeHBvcnQnIDogJ1NlbmQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGlzRXhwb3J0RGlzYWJsZWQoKVwiXG4gICAgICAgIChjbGlja2VkKT1cImhhbmRsZUV4cG9ydCgpXCI+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|