@cqa-lib/cqa-ui 1.1.229 → 1.1.232

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.
Files changed (28) hide show
  1. package/esm2020/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.mjs +14 -6
  2. package/esm2020/lib/execution-screen/ai-action-step/ai-action-step.component.mjs +3 -5
  3. package/esm2020/lib/execution-screen/ai-agent-step/ai-agent-step.component.mjs +3 -5
  4. package/esm2020/lib/execution-screen/api-step/api-step.component.mjs +3 -5
  5. package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +3 -5
  6. package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +3 -5
  7. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +3 -5
  8. package/esm2020/lib/execution-screen/document-verification-step/document-verification-step.component.mjs +3 -5
  9. package/esm2020/lib/execution-screen/failed-step/failed-step.component.mjs +3 -5
  10. package/esm2020/lib/execution-screen/file-download-step/file-download-step.component.mjs +3 -5
  11. package/esm2020/lib/execution-screen/live-execution-step/live-execution-step.component.mjs +3 -5
  12. package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +31 -21
  13. package/esm2020/lib/execution-screen/main-step-collapse/main-step-collapse.component.mjs +3 -5
  14. package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +3 -5
  15. package/esm2020/lib/execution-screen/step-renderer/step-renderer.component.mjs +74 -4
  16. package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +11 -3
  17. package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +3 -3
  18. package/esm2020/lib/test-case-details/test-case-details.component.mjs +3 -3
  19. package/fesm2015/cqa-lib-cqa-ui.mjs +157 -86
  20. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  21. package/fesm2020/cqa-lib-cqa-ui.mjs +154 -82
  22. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  23. package/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.d.ts +5 -1
  24. package/lib/execution-screen/loop-step/loop-step.component.d.ts +5 -1
  25. package/lib/execution-screen/step-renderer/step-renderer.component.d.ts +4 -0
  26. package/lib/test-case-details/delete-steps/delete-steps.component.d.ts +2 -0
  27. package/package.json +1 -1
  28. package/styles.css +1 -1
@@ -106,12 +106,20 @@ export class DeleteStepsComponent {
106
106
  hasStepImage(step) {
107
107
  return this.getStepImage(step) !== null;
108
108
  }
109
+ /** Get step number from step data, falling back to index + 1 */
110
+ getStepNumber(step, index) {
111
+ const stepNum = step?.stepNumber;
112
+ if (stepNum != null && stepNum !== '') {
113
+ return stepNum;
114
+ }
115
+ return index + 1;
116
+ }
109
117
  }
110
118
  DeleteStepsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
111
- DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + (i + 1)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
119
+ DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
112
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, decorators: [{
113
121
  type: Component,
114
- args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + (i + 1)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n" }]
122
+ args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n" }]
115
123
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
116
124
  type: Optional
117
125
  }, {
@@ -122,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
122
130
  }], cancelled: [{
123
131
  type: Output
124
132
  }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUVsQzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUF3RCxJQUl2RDtRQUp1RCxTQUFJLEdBQUosSUFBSSxDQUkzRDtRQWJELHNEQUFzRDtRQUN0RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLCtEQUErRDtRQUMvRCxlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFlM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBVDdDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElB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QUFZLENBQUMsSUFBd0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUMxQyxDQUFDOztpSEFsSFUsb0JBQW9CLGtCQVVDLGVBQWU7cUdBVnBDLG9CQUFvQixzS0NuQmpDLHU1SEF5RUE7MkZEdERhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzswQkFZakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzRDQWFyQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuLyoqXG4gKiBEZWxldGUgU3RlcHMgY29uZmlybWF0aW9uIG1vZGFsIGZvciBUZXN0IENhc2UgRGV0YWlscy5cbiAqIE1hdGNoZXMgdGhlIGRlc2lnbiBvZiBDcmVhdGUgU3RlcCBHcm91cDogc2hvd3Mgc2VsZWN0ZWQgc3RlcHMgd2l0aCBjb250ZXh0IChlLmcuIFwiSUYgbGFuZVwiKSxcbiAqIHdhcm5pbmcgdGV4dCwgYW5kIENhbmNlbCAvIERlbGV0ZSBhY3Rpb25zLiBTdGVwcyBhcmUgc2hvd24gd2l0aCByZWQvZGFuZ2VyIHN0eWxpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZWxldGUtc3RlcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZWxldGVTdGVwc0NvbXBvbmVudCB7XG4gIC8qKiBTdGVwcyB0aGF0IHdpbGwgYmUgZGVsZXRlZCAoc2hvd24gaW4gdGhlIGxpc3QpLiAqL1xuICBzdGVwc1RvRGVsZXRlOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuXG4gIC8qKiBDb250ZXh0IGxhYmVsIGZvciB0aGUgc3ViLWhlYWRpbmcsIGUuZy4gXCJJRiBsYW5lXCIsIFwiRUxTRVwiLCBcIkZvciBsb29wXCIuICovXG4gIGNvbnRleHRMYWJlbCA9ICcnO1xuXG4gIC8qKiBPcHRpb25hbCBzdGVwIGltYWdlcy9zY3JlZW5zaG90cyBtYXA6IHN0ZXBJZCAtPiBpbWFnZVVybCAqL1xuICBzdGVwSW1hZ2VzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YT86IHtcbiAgICBzdGVwc1RvRGVsZXRlPzogVGVzdENhc2VTdGVwQ29uZmlnW107XG4gICAgY29udGV4dExhYmVsPzogc3RyaW5nO1xuICAgIHN0ZXBJbWFnZXM/OiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+O1xuICB9KSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmcm9tIGRpYWxvZyBkYXRhIGlmIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc3RlcHNUb0RlbGV0ZSA9IGRhdGEuc3RlcHNUb0RlbGV0ZSB8fCBbXTtcbiAgICAgIHRoaXMuY29udGV4dExhYmVsID0gZGF0YS5jb250ZXh0TGFiZWwgfHwgJyc7XG4gICAgICB0aGlzLnN0ZXBJbWFnZXMgPSBkYXRhLnN0ZXBJbWFnZXMgfHwgbmV3IE1hcCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBjb25maXJtRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldCBzdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHNUb0RlbGV0ZT8ubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgdGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbiA9IHRoaXMuc3RlcHNDb3VudDtcbiAgICByZXR1cm4gbiA9PT0gMSA/ICdEZWxldGUgMSBzdGVwPycgOiBgRGVsZXRlICR7bn0gc3RlcHM/YDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFN0ZXBzU3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRMYWJlbD8udHJpbSgpIHx8ICdzZWxlY3RlZCc7XG4gICAgcmV0dXJuIGBTZWxlY3RlZCBzdGVwcyBmb3IgJHtjdHh9ICgke3RoaXMuc3RlcHNDb3VudH0pYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIGxpc3QgKHNhbWUgcGF0dGVybiBhcyBjcmVhdGUtc3RlcC1ncm91cCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE5vcm1hbFN0ZXBMYWJlbChzdGVwOiBOb3JtYWxTdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdGVwLnBhcmFtZXRlcnMgPz8gW107XG4gICAgY29uc3QgZ2V0UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgcGFyYW1zLmZpbmQoKHApID0+IHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCB2YWwgPSAocDogeyB2YWx1ZT86IHN0cmluZzsgZGlzcGxheVZhbHVlPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpID0+XG4gICAgICBwPy5kaXNwbGF5VmFsdWUgPz8gcD8udmFsdWUgPz8gJyc7XG5cbiAgICBzd2l0Y2ggKHN0ZXAuZXZlbnRUeXBlIGFzIFRlc3RDYXNlRXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0UGFyYW0oJ3VybCcpO1xuICAgICAgICByZXR1cm4gdXJsID8gYE5hdmlnYXRlIHRvICR7dmFsKHVybCl9YCA6ICdOYXZpZ2F0ZSB0byc7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ3RleHQnKSkgfHwgJ1R5cGUnO1xuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdzZWxlY3RvcicpKSA/IGBDbGljayAke3ZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSl9YCA6ICdDbGljayc7XG4gICAgICBjYXNlICd2ZXJpZnknOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCAnVmVyaWZ5JztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpID8/IGdldFBhcmFtKCdhY3Rpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChkZXNjKSB8fCAnQ3VzdG9tIHN0ZXAnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgdmFsKHBhcmFtc1swXSkgfHwgJ1N0ZXAnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICAvKiogR2V0IHN0ZXAgaW1hZ2UgVVJMIGlmIGF2YWlsYWJsZSAqL1xuICBnZXRTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzdGVwPy5pZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEltYWdlcy5nZXQoc3RlcC5pZCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiBzdGVwIGhhcyBhbiBpbWFnZSAqL1xuICBoYXNTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEltYWdlKHN0ZXApICE9PSBudWxsO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLVsxMnB4XSBjcWEtc2hhZG93LWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtdy1mdWxsIGNxYS1tYXgtdy1bNTAwcHhdIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXAtNiBjcWEtYm94LWJvcmRlciBjcWEtbWluLWgtMFwiPlxuICA8IS0tIEhlYWRlcjogdGl0bGUgKyBjbG9zZSAoWCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGgyIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsyMnB4XSBjcWEtbGVhZGluZy1bMjhweF0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzEwMTgyOF0gY3FhLW0tMFwiPlxuICAgICAgICB7eyB0aXRsZVRleHQgfX1cbiAgICAgIDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIxcHhdIGNxYS10cmFja2luZy1bLTAuMTVweF0gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tLTBcIj5cbiAgICAgICAgVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSwgYnV0IHlvdSBjYW4gdXNlIHRoZSB1bmRvIGZ1bmN0aW9uIGluIHRoZSB0b29sYmFyLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbWluLWgtNyBjcWEtbWluLXctNyBjcWEtcm91bmRlZCBjcWEtdGV4dC1bIzZCNzI4MF0gaG92ZXI6Y3FhLWJnLVsjRjNGNEY2XSBjcWEtcC0wIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xOCA2TDYgMThNNiA2bDEyIDEyXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFNlbGVjdGVkIHN0ZXBzIGZvciBbY29udGV4dF0gKE4pIOKAkyBzY3JvbGwgd2hlbiBtYW55IHN0ZXBzLCBzY3JvbGxiYXIgaGlkZGVuIChzYW1lIGFzIGNyZWF0ZS1zdGVwLWdyb3VwKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1pbi1oLTBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1hbGlnbi1taWRkbGVcIj5cbiAgICAgIHt7IHNlbGVjdGVkU3RlcHNTdWJ0aXRsZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cInN0ZXBzQ291bnQgPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXAtNCBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgIE5vIHN0ZXBzIHNlbGVjdGVkLiBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBzdGVwIHRvIGRlbGV0ZS5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RlcHNDb3VudCA+IDBcIiBjbGFzcz1cImNxYS1zY3JvbGxiYXItaGlkZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bMjAwcHhdIGNxYS1taW4taC0wIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1wLVs2cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVtyZ2JhKDAsMCwwLDAuMSldXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzVG9EZWxldGU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bOHB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHQtWzRweF0gY3FhLXBiLVs0cHhdIGNxYS1wbC1bOHB4XSBjcWEtcHItWzhweF0gY3FhLWJnLVtyZ2JhKDIzOCw2Myw2MywwLjEpXVwiPlxuICAgICAgICA8IS0tIE51bWJlcmVkIGJhZGdlIChyZWQpIC0tPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjQzYzNTM1XSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPCEtLSBTdGVwIGltYWdlIGlmIGF2YWlsYWJsZSAtLT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiaGFzU3RlcEltYWdlKHN0ZXApXCJcbiAgICAgICAgICBbc3JjXT1cImdldFN0ZXBJbWFnZShzdGVwKVwiXG4gICAgICAgICAgW2FsdF09XCInU3RlcCAnICsgKGkgKyAxKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy04IGNxYS1oLTggY3FhLXJvdW5kZWQtWzRweF0gY3FhLW9iamVjdC1jb3ZlciBjcWEtZmxleC1zaHJpbmstMCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bcmdiYSgyMjAsMzgsMzgsMC4yKV1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdHJhY2tpbmctWzBweF0gY3FhLXRleHQtWyNEQzI2MjZdIGNxYS1mbGV4LTEgY3FhLW1pbi13LTAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAge3sgZ2V0U3RlcERpc3BsYXlMYWJlbChzdGVwLCBpKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+ICBcblxuICA8IS0tIEFjdGlvbnM6IENhbmNlbCB8IERlbGV0ZSAocmlnaHQtYWxpZ25lZCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWVuZCBjcWEtdy1mdWxsIGNxYS1nYXAtM1wiPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIHRleHQ9XCJDYW5jZWxcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzQxNDE0Nl0gY3FhLXRleHQtWyM0MTQxNDZdJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwiZmlsbGVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiRGVsZXRlXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtcm91bmRlZC1bOHB4XSBjcWEtYm9yZGVyLTAgY3FhLWJnLVsjRUUzRjNGXSBjcWEtdGV4dC13aGl0ZSdcIlxuICAgICAgW2Rpc2FibGVkXT1cInN0ZXBzQ291bnQgPT09IDBcIlxuICAgICAgKGNsaWNrZWQpPVwib25EZWxldGUoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUVsQzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUF3RCxJQUl2RDtRQUp1RCxTQUFJLEdBQUosSUFBSSxDQUkzRDtRQWJELHNEQUFzRDtRQUN0RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLCtEQUErRDtRQUMvRCxlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFlM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBVDdDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElB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QUFZLENBQUMsSUFBd0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLGFBQWEsQ0FBQyxJQUF3QixFQUFFLEtBQWE7UUFDbkQsTUFBTSxPQUFPLEdBQUksSUFBWSxFQUFFLFVBQVUsQ0FBQztRQUMxQyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDOztpSEEzSFUsb0JBQW9CLGtCQVVDLGVBQWU7cUdBVnBDLG9CQUFvQixzS0NuQmpDLHU3SEF5RUE7MkZEdERhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzswQkFZakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzRDQWFyQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuLyoqXG4gKiBEZWxldGUgU3RlcHMgY29uZmlybWF0aW9uIG1vZGFsIGZvciBUZXN0IENhc2UgRGV0YWlscy5cbiAqIE1hdGNoZXMgdGhlIGRlc2lnbiBvZiBDcmVhdGUgU3RlcCBHcm91cDogc2hvd3Mgc2VsZWN0ZWQgc3RlcHMgd2l0aCBjb250ZXh0IChlLmcuIFwiSUYgbGFuZVwiKSxcbiAqIHdhcm5pbmcgdGV4dCwgYW5kIENhbmNlbCAvIERlbGV0ZSBhY3Rpb25zLiBTdGVwcyBhcmUgc2hvd24gd2l0aCByZWQvZGFuZ2VyIHN0eWxpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZWxldGUtc3RlcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZWxldGVTdGVwc0NvbXBvbmVudCB7XG4gIC8qKiBTdGVwcyB0aGF0IHdpbGwgYmUgZGVsZXRlZCAoc2hvd24gaW4gdGhlIGxpc3QpLiAqL1xuICBzdGVwc1RvRGVsZXRlOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuXG4gIC8qKiBDb250ZXh0IGxhYmVsIGZvciB0aGUgc3ViLWhlYWRpbmcsIGUuZy4gXCJJRiBsYW5lXCIsIFwiRUxTRVwiLCBcIkZvciBsb29wXCIuICovXG4gIGNvbnRleHRMYWJlbCA9ICcnO1xuXG4gIC8qKiBPcHRpb25hbCBzdGVwIGltYWdlcy9zY3JlZW5zaG90cyBtYXA6IHN0ZXBJZCAtPiBpbWFnZVVybCAqL1xuICBzdGVwSW1hZ2VzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YT86IHtcbiAgICBzdGVwc1RvRGVsZXRlPzogVGVzdENhc2VTdGVwQ29uZmlnW107XG4gICAgY29udGV4dExhYmVsPzogc3RyaW5nO1xuICAgIHN0ZXBJbWFnZXM/OiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+O1xuICB9KSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmcm9tIGRpYWxvZyBkYXRhIGlmIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc3RlcHNUb0RlbGV0ZSA9IGRhdGEuc3RlcHNUb0RlbGV0ZSB8fCBbXTtcbiAgICAgIHRoaXMuY29udGV4dExhYmVsID0gZGF0YS5jb250ZXh0TGFiZWwgfHwgJyc7XG4gICAgICB0aGlzLnN0ZXBJbWFnZXMgPSBkYXRhLnN0ZXBJbWFnZXMgfHwgbmV3IE1hcCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBjb25maXJtRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldCBzdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHNUb0RlbGV0ZT8ubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgdGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbiA9IHRoaXMuc3RlcHNDb3VudDtcbiAgICByZXR1cm4gbiA9PT0gMSA/ICdEZWxldGUgMSBzdGVwPycgOiBgRGVsZXRlICR7bn0gc3RlcHM/YDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFN0ZXBzU3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRMYWJlbD8udHJpbSgpIHx8ICdzZWxlY3RlZCc7XG4gICAgcmV0dXJuIGBTZWxlY3RlZCBzdGVwcyBmb3IgJHtjdHh9ICgke3RoaXMuc3RlcHNDb3VudH0pYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIGxpc3QgKHNhbWUgcGF0dGVybiBhcyBjcmVhdGUtc3RlcC1ncm91cCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE5vcm1hbFN0ZXBMYWJlbChzdGVwOiBOb3JtYWxTdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdGVwLnBhcmFtZXRlcnMgPz8gW107XG4gICAgY29uc3QgZ2V0UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgcGFyYW1zLmZpbmQoKHApID0+IHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCB2YWwgPSAocDogeyB2YWx1ZT86IHN0cmluZzsgZGlzcGxheVZhbHVlPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpID0+XG4gICAgICBwPy5kaXNwbGF5VmFsdWUgPz8gcD8udmFsdWUgPz8gJyc7XG5cbiAgICBzd2l0Y2ggKHN0ZXAuZXZlbnRUeXBlIGFzIFRlc3RDYXNlRXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0UGFyYW0oJ3VybCcpO1xuICAgICAgICByZXR1cm4gdXJsID8gYE5hdmlnYXRlIHRvICR7dmFsKHVybCl9YCA6ICdOYXZpZ2F0ZSB0byc7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ3RleHQnKSkgfHwgJ1R5cGUnO1xuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdzZWxlY3RvcicpKSA/IGBDbGljayAke3ZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSl9YCA6ICdDbGljayc7XG4gICAgICBjYXNlICd2ZXJpZnknOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCAnVmVyaWZ5JztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpID8/IGdldFBhcmFtKCdhY3Rpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChkZXNjKSB8fCAnQ3VzdG9tIHN0ZXAnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgdmFsKHBhcmFtc1swXSkgfHwgJ1N0ZXAnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICAvKiogR2V0IHN0ZXAgaW1hZ2UgVVJMIGlmIGF2YWlsYWJsZSAqL1xuICBnZXRTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzdGVwPy5pZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEltYWdlcy5nZXQoc3RlcC5pZCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiBzdGVwIGhhcyBhbiBpbWFnZSAqL1xuICBoYXNTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEltYWdlKHN0ZXApICE9PSBudWxsO1xuICB9XG5cbiAgLyoqIEdldCBzdGVwIG51bWJlciBmcm9tIHN0ZXAgZGF0YSwgZmFsbGluZyBiYWNrIHRvIGluZGV4ICsgMSAqL1xuICBnZXRTdGVwTnVtYmVyKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcik6IG51bWJlciB8IHN0cmluZyB7XG4gICAgY29uc3Qgc3RlcE51bSA9IChzdGVwIGFzIGFueSk/LnN0ZXBOdW1iZXI7XG4gICAgaWYgKHN0ZXBOdW0gIT0gbnVsbCAmJiBzdGVwTnVtICE9PSAnJykge1xuICAgICAgcmV0dXJuIHN0ZXBOdW07XG4gICAgfVxuICAgIHJldHVybiBpbmRleCArIDE7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEycHhdIGNxYS1zaGFkb3ctbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS13LWZ1bGwgY3FhLW1heC13LVs1MDBweF0gY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtcC02IGNxYS1ib3gtYm9yZGVyIGNxYS1taW4taC0wXCI+XG4gIDwhLS0gSGVhZGVyOiB0aXRsZSArIGNsb3NlIChYKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICA8aDIgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzIycHhdIGNxYS1sZWFkaW5nLVsyOHB4XSBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS10ZXh0LVsjMTAxODI4XSBjcWEtbS0wXCI+XG4gICAgICAgIHt7IHRpdGxlVGV4dCB9fVxuICAgICAgPC9oMj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMjFweF0gY3FhLXRyYWNraW5nLVstMC4xNXB4XSBjcWEtdGV4dC1bIzRBNTU2NV0gY3FhLW0tMFwiPlxuICAgICAgICBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLCBidXQgeW91IGNhbiB1c2UgdGhlIHVuZG8gZnVuY3Rpb24gaW4gdGhlIHRvb2xiYXIuXG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwib25DYW5jZWwoKVwiXG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1taW4taC03IGNxYS1taW4tdy03IGNxYS1yb3VuZGVkIGNxYS10ZXh0LVsjNkI3MjgwXSBob3ZlcjpjcWEtYmctWyNGM0Y0RjZdIGNxYS1wLTAgY3FhLWZsZXgtc2hyaW5rLTBcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8cGF0aCBkPVwiTTE4IDZMNiAxOE02IDZsMTIgMTJcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU2VsZWN0ZWQgc3RlcHMgZm9yIFtjb250ZXh0XSAoTikg4oCTIHNjcm9sbCB3aGVuIG1hbnkgc3RlcHMsIHNjcm9sbGJhciBoaWRkZW4gKHNhbWUgYXMgY3JlYXRlLXN0ZXAtZ3JvdXApIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtbWluLWgtMFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzBBMEEwQV0gY3FhLWFsaWduLW1pZGRsZVwiPlxuICAgICAge3sgc2VsZWN0ZWRTdGVwc1N1YnRpdGxlIH19XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2ICpuZ0lmPVwic3RlcHNDb3VudCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtcC00IGNxYS10ZXh0LWNlbnRlclwiPlxuICAgICAgTm8gc3RlcHMgc2VsZWN0ZWQuIFBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHN0ZXAgdG8gZGVsZXRlLlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzdGVwc0NvdW50ID4gMFwiIGNsYXNzPVwiY3FhLXNjcm9sbGJhci1oaWRlIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1heC1oLVsyMDBweF0gY3FhLW1pbi1oLTAgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtb3ZlcmZsb3cteC1oaWRkZW4gY3FhLXJvdW5kZWQtWzhweF0gY3FhLXAtWzZweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItW3JnYmEoMCwwLDAsMC4xKV1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcHNUb0RlbGV0ZTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVs4cHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1wdC1bNHB4XSBjcWEtcGItWzRweF0gY3FhLXBsLVs4cHhdIGNxYS1wci1bOHB4XSBjcWEtYmctW3JnYmEoMjM4LDYzLDYzLDAuMSldXCI+XG4gICAgICAgIDwhLS0gTnVtYmVyZWQgYmFkZ2UgKHJlZCkgLS0+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy03IGNxYS1oLTcgY3FhLXJvdW5kZWQtZnVsbCBjcWEtYmctWyNDNjM1MzVdIGNxYS10ZXh0LXdoaXRlIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICAgICAge3sgZ2V0U3RlcE51bWJlcihzdGVwLCBpKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwhLS0gU3RlcCBpbWFnZSBpZiBhdmFpbGFibGUgLS0+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cImhhc1N0ZXBJbWFnZShzdGVwKVwiXG4gICAgICAgICAgW3NyY109XCJnZXRTdGVwSW1hZ2Uoc3RlcClcIlxuICAgICAgICAgIFthbHRdPVwiJ1N0ZXAgJyArIGdldFN0ZXBOdW1iZXIoc3RlcCwgaSlcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXctOCBjcWEtaC04IGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1vYmplY3QtY292ZXIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItW3JnYmEoMjIwLDM4LDM4LDAuMildXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRyYWNraW5nLVswcHhdIGNxYS10ZXh0LVsjREMyNjI2XSBjcWEtZmxleC0xIGNxYS1taW4tdy0wIGNxYS10cnVuY2F0ZVwiPlxuICAgICAgICAgIHt7IGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcCwgaSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAgXG5cbiAgPCEtLSBBY3Rpb25zOiBDYW5jZWwgfCBEZWxldGUgKHJpZ2h0LWFsaWduZWQpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLXctZnVsbCBjcWEtZ2FwLTNcIj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiQ2FuY2VsXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM0MTQxNDZdIGNxYS10ZXh0LVsjNDE0MTQ2XSdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICBidG5TaXplPVwibGdcIlxuICAgICAgdGV4dD1cIkRlbGV0ZVwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLXJvdW5kZWQtWzhweF0gY3FhLWJvcmRlci0wIGNxYS1iZy1bI0VFM0YzRl0gY3FhLXRleHQtd2hpdGUnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJzdGVwc0NvdW50ID09PSAwXCJcbiAgICAgIChjbGlja2VkKT1cIm9uRGVsZXRlKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=