verben-workflow-ui 0.5.77 → 0.5.78

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 (182) hide show
  1. package/README.md +13 -0
  2. package/esm2022/src/lib/components/actors/actors.component.mjs +5 -5
  3. package/esm2022/src/lib/components/actors/actors.facade.mjs +3 -3
  4. package/esm2022/src/lib/components/actors/actors.form.component.mjs +5 -5
  5. package/esm2022/src/lib/components/actors/actors.module.mjs +4 -4
  6. package/esm2022/src/lib/components/actors/actors.service.mjs +3 -3
  7. package/esm2022/src/lib/components/actors/actors.state.mjs +3 -3
  8. package/esm2022/src/lib/components/designer/components/label-editor.component.mjs +6 -6
  9. package/esm2022/src/lib/components/designer/components/node-selector.component.mjs +4 -4
  10. package/esm2022/src/lib/components/designer/components/swimlane-label.component.mjs +3 -3
  11. package/esm2022/src/lib/components/designer/components/swimlane-popup.component.mjs +3 -3
  12. package/esm2022/src/lib/components/designer/components/wf-canvas.component.mjs +6 -6
  13. package/esm2022/src/lib/components/designer/components/wf-designer.component.mjs +3 -3
  14. package/esm2022/src/lib/components/designer/components/wf-toolbar.component.mjs +6 -6
  15. package/esm2022/src/lib/components/designer/services/canvas-state.service.mjs +3 -3
  16. package/esm2022/src/lib/components/designer/services/connection-segment-interaction.service.mjs +3 -3
  17. package/esm2022/src/lib/components/designer/services/connection.service.mjs +3 -3
  18. package/esm2022/src/lib/components/designer/services/keyboard-handler.service.mjs +3 -3
  19. package/esm2022/src/lib/components/designer/services/label-management.service.mjs +3 -3
  20. package/esm2022/src/lib/components/designer/services/node-finder.service.mjs +3 -3
  21. package/esm2022/src/lib/components/designer/services/node-interaction.service.mjs +3 -3
  22. package/esm2022/src/lib/components/designer/services/node-precondition.service.mjs +3 -3
  23. package/esm2022/src/lib/components/designer/services/node-selection.service.mjs +3 -3
  24. package/esm2022/src/lib/components/designer/services/orthogonal-router.service.mjs +3 -3
  25. package/esm2022/src/lib/components/designer/services/position-update.service.mjs +3 -3
  26. package/esm2022/src/lib/components/designer/services/rendering.service.mjs +3 -3
  27. package/esm2022/src/lib/components/designer/services/swimlane-management.service.mjs +3 -3
  28. package/esm2022/src/lib/components/designer/services/swimlane-stats.service.mjs +3 -3
  29. package/esm2022/src/lib/components/designer/services/viewport.service.mjs +3 -3
  30. package/esm2022/src/lib/components/designer/services/wf-facade.service.mjs +3 -3
  31. package/esm2022/src/lib/components/designer/services/wf-mapper.service.mjs +3 -3
  32. package/esm2022/src/lib/components/designer/services/wf-persistence.service.mjs +3 -3
  33. package/esm2022/src/lib/components/designer/services/wf-state.service.mjs +3 -3
  34. package/esm2022/src/lib/components/expiration/expiration.component.mjs +3 -3
  35. package/esm2022/src/lib/components/expiration/expiration.module.mjs +4 -4
  36. package/esm2022/src/lib/components/file-render/file-render.component.mjs +5 -5
  37. package/esm2022/src/lib/components/file-render/file-render.module.mjs +4 -4
  38. package/esm2022/src/lib/components/file-upload/file-upload.component.mjs +5 -5
  39. package/esm2022/src/lib/components/file-upload/file-upload.module.mjs +4 -4
  40. package/esm2022/src/lib/components/flowable-status/flowable-status.component.mjs +5 -5
  41. package/esm2022/src/lib/components/flowable-status/flowable-status.facade.mjs +3 -3
  42. package/esm2022/src/lib/components/flowable-status/flowable-status.form.component.mjs +5 -5
  43. package/esm2022/src/lib/components/flowable-status/flowable-status.module.mjs +4 -4
  44. package/esm2022/src/lib/components/flowable-status/flowable-status.service.mjs +3 -3
  45. package/esm2022/src/lib/components/flowable-status/flowable-status.state.mjs +3 -3
  46. package/esm2022/src/lib/components/form-control/form-control.component.mjs +5 -5
  47. package/esm2022/src/lib/components/form-control/form-control.module.mjs +4 -4
  48. package/esm2022/src/lib/components/form-group/base-table-style.mjs +6 -6
  49. package/esm2022/src/lib/components/form-group/form-fields/form-fields.component.mjs +5 -5
  50. package/esm2022/src/lib/components/form-group/form-fields/form-fields.module.mjs +4 -4
  51. package/esm2022/src/lib/components/form-group/form-fields/form-fields.service.mjs +3 -3
  52. package/esm2022/src/lib/components/form-group/form-group.component.mjs +5 -5
  53. package/esm2022/src/lib/components/form-group/form-group.module.mjs +4 -4
  54. package/esm2022/src/lib/components/form-group/form-group.service.mjs +3 -3
  55. package/esm2022/src/lib/components/form-response/form-response.component.mjs +5 -5
  56. package/esm2022/src/lib/components/form-response/form-response.module.mjs +4 -4
  57. package/esm2022/src/lib/components/form-response/form-response.service.mjs +3 -3
  58. package/esm2022/src/lib/components/form-timer/form-timer.component.mjs +5 -5
  59. package/esm2022/src/lib/components/form-timer/form-timer.module.mjs +4 -4
  60. package/esm2022/src/lib/components/forms/base-table-style.mjs +6 -6
  61. package/esm2022/src/lib/components/forms/forms.component.mjs +5 -5
  62. package/esm2022/src/lib/components/forms/forms.module.mjs +4 -4
  63. package/esm2022/src/lib/components/forms/forms.service.mjs +3 -3
  64. package/esm2022/src/lib/components/journal/journal.component.mjs +3 -3
  65. package/esm2022/src/lib/components/journal/journal.module.mjs +4 -4
  66. package/esm2022/src/lib/components/my-queue/my-queue.component.mjs +5 -5
  67. package/esm2022/src/lib/components/my-queue/my-queue.facade.mjs +3 -3
  68. package/esm2022/src/lib/components/my-queue/my-queue.module.mjs +4 -4
  69. package/esm2022/src/lib/components/my-queue/my-queue.service.mjs +3 -3
  70. package/esm2022/src/lib/components/my-queue/my-queue.state.mjs +3 -3
  71. package/esm2022/src/lib/components/my-queue/tasks.form.component.mjs +5 -5
  72. package/esm2022/src/lib/components/operation-popup/operation-popup.component.mjs +5 -5
  73. package/esm2022/src/lib/components/operation-popup/operation-popup.facade.mjs +3 -3
  74. package/esm2022/src/lib/components/operation-popup/operation-popup.service.mjs +3 -3
  75. package/esm2022/src/lib/components/operation-popup/operation-popup.state.mjs +3 -3
  76. package/esm2022/src/lib/components/stage-details/stage-details.component.mjs +5 -5
  77. package/esm2022/src/lib/components/stage-details/stage-details.module.mjs +4 -4
  78. package/esm2022/src/lib/components/task-form/task-form.component.mjs +5 -5
  79. package/esm2022/src/lib/components/task-form/task-form.module.mjs +4 -4
  80. package/esm2022/src/lib/components/task-history/task-history.component.mjs +5 -5
  81. package/esm2022/src/lib/components/task-history/task-history.module.mjs +4 -4
  82. package/esm2022/src/lib/components/task-history/task-history.service.mjs +3 -3
  83. package/esm2022/src/lib/components/task-notification/base-table-style.mjs +6 -6
  84. package/esm2022/src/lib/components/task-notification/task-notification.component.mjs +5 -5
  85. package/esm2022/src/lib/components/task-notification/task-notification.module.mjs +4 -4
  86. package/esm2022/src/lib/components/task-notification/task-notification.service.mjs +3 -3
  87. package/esm2022/src/lib/components/tasks/tasks.component.mjs +5 -5
  88. package/esm2022/src/lib/components/tasks/tasks.facade.mjs +3 -3
  89. package/esm2022/src/lib/components/tasks/tasks.form.component.mjs +5 -5
  90. package/esm2022/src/lib/components/tasks/tasks.module.mjs +4 -4
  91. package/esm2022/src/lib/components/tasks/tasks.service.mjs +3 -3
  92. package/esm2022/src/lib/components/tasks/tasks.state.mjs +3 -3
  93. package/esm2022/src/lib/components/wf/wf.component.mjs +3 -3
  94. package/esm2022/src/lib/components/wf/wf.module.mjs +4 -4
  95. package/esm2022/src/lib/components/wf/wf.service.mjs +3 -3
  96. package/esm2022/src/lib/components/workflow/table-style.mjs +6 -6
  97. package/esm2022/src/lib/components/workflow/workflow.component.mjs +8 -8
  98. package/esm2022/src/lib/components/workflow/workflow.module.mjs +4 -4
  99. package/esm2022/src/lib/components/workflow-designer/action-dialog/action-dialog.component.mjs +5 -5
  100. package/esm2022/src/lib/components/workflow-designer/actor-tags-dialog/actor-tags-dialog.component.mjs +5 -5
  101. package/esm2022/src/lib/components/workflow-designer/conditions-popup/conditions-popup.component.mjs +3 -3
  102. package/esm2022/src/lib/components/workflow-designer/decision-popup/decision-popup.component.mjs +4 -4
  103. package/esm2022/src/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +3 -3
  104. package/esm2022/src/lib/components/workflow-designer/designer-toolbar/designer-toolbar.component.mjs +5 -5
  105. package/esm2022/src/lib/components/workflow-designer/escalation-dialog/escalation-dialog.component.mjs +5 -5
  106. package/esm2022/src/lib/components/workflow-designer/services/connection.service.mjs +3 -3
  107. package/esm2022/src/lib/components/workflow-designer/services/node-management.service.mjs +3 -3
  108. package/esm2022/src/lib/components/workflow-designer/services/popup.service.mjs +3 -3
  109. package/esm2022/src/lib/components/workflow-designer/services/swimlane.service.mjs +3 -3
  110. package/esm2022/src/lib/components/workflow-designer/services/transformer.service.mjs +3 -3
  111. package/esm2022/src/lib/components/workflow-designer/stage-dialog/stage-dialog.component.mjs +5 -5
  112. package/esm2022/src/lib/components/workflow-designer/stage-node/stage-node.component.mjs +5 -5
  113. package/esm2022/src/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.mjs +5 -5
  114. package/esm2022/src/lib/components/workflow-designer/workflow-data.service.mjs +3 -3
  115. package/esm2022/src/lib/components/workflow-designer/workflow-designer.component.mjs +4 -4
  116. package/esm2022/src/lib/components/workflow-designer/workflow-designer.module.mjs +4 -4
  117. package/esm2022/src/lib/components/workflow-designer/workflow-designer.state.mjs +3 -3
  118. package/esm2022/src/lib/components/workflows/workflow-form/workflow-form.component.mjs +5 -5
  119. package/esm2022/src/lib/components/workflows/workflows.component.mjs +5 -5
  120. package/esm2022/src/lib/components/workflows/workflows.facade.mjs +3 -3
  121. package/esm2022/src/lib/components/workflows/workflows.module.mjs +4 -4
  122. package/esm2022/src/lib/components/workflows/workflows.service.mjs +3 -3
  123. package/esm2022/src/lib/components/workflows/workflows.state.mjs +3 -3
  124. package/esm2022/src/lib/pipes/async-label.pipe.mjs +3 -3
  125. package/esm2022/src/lib/services/environment.service.mjs +3 -3
  126. package/esm2022/src/lib/services/http-web-request.service.mjs +3 -3
  127. package/esm2022/src/lib/services/label.service.mjs +3 -3
  128. package/esm2022/src/lib/services/util.service.mjs +3 -3
  129. package/esm2022/src/lib/shared/base-table-style.mjs +6 -6
  130. package/esm2022/src/lib/shared/components/base-data-view.component.mjs +3 -3
  131. package/esm2022/src/lib/shared/shared.module.mjs +4 -4
  132. package/fesm2022/verben-workflow-ui-src-lib-components-actors.mjs +21 -21
  133. package/fesm2022/verben-workflow-ui-src-lib-components-actors.mjs.map +1 -1
  134. package/fesm2022/verben-workflow-ui-src-lib-components-designer.mjs +85 -85
  135. package/fesm2022/verben-workflow-ui-src-lib-components-designer.mjs.map +1 -1
  136. package/fesm2022/verben-workflow-ui-src-lib-components-expiration.mjs +7 -7
  137. package/fesm2022/verben-workflow-ui-src-lib-components-expiration.mjs.map +1 -1
  138. package/fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs +8 -8
  139. package/fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs.map +1 -1
  140. package/fesm2022/verben-workflow-ui-src-lib-components-file-upload.mjs +8 -8
  141. package/fesm2022/verben-workflow-ui-src-lib-components-file-upload.mjs.map +1 -1
  142. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs +21 -21
  143. package/fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs.map +1 -1
  144. package/fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs +8 -8
  145. package/fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs.map +1 -1
  146. package/fesm2022/verben-workflow-ui-src-lib-components-form-group.mjs +27 -27
  147. package/fesm2022/verben-workflow-ui-src-lib-components-form-group.mjs.map +1 -1
  148. package/fesm2022/verben-workflow-ui-src-lib-components-form-response.mjs +11 -11
  149. package/fesm2022/verben-workflow-ui-src-lib-components-form-response.mjs.map +1 -1
  150. package/fesm2022/verben-workflow-ui-src-lib-components-form-timer.mjs +8 -8
  151. package/fesm2022/verben-workflow-ui-src-lib-components-form-timer.mjs.map +1 -1
  152. package/fesm2022/verben-workflow-ui-src-lib-components-forms.mjs +16 -16
  153. package/fesm2022/verben-workflow-ui-src-lib-components-forms.mjs.map +1 -1
  154. package/fesm2022/verben-workflow-ui-src-lib-components-journal.mjs +7 -7
  155. package/fesm2022/verben-workflow-ui-src-lib-components-my-queue.mjs +21 -21
  156. package/fesm2022/verben-workflow-ui-src-lib-components-my-queue.mjs.map +1 -1
  157. package/fesm2022/verben-workflow-ui-src-lib-components-operation-popup.mjs +13 -13
  158. package/fesm2022/verben-workflow-ui-src-lib-components-operation-popup.mjs.map +1 -1
  159. package/fesm2022/verben-workflow-ui-src-lib-components-stage-details.mjs +8 -8
  160. package/fesm2022/verben-workflow-ui-src-lib-components-stage-details.mjs.map +1 -1
  161. package/fesm2022/verben-workflow-ui-src-lib-components-task-form.mjs +8 -8
  162. package/fesm2022/verben-workflow-ui-src-lib-components-task-form.mjs.map +1 -1
  163. package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs +11 -11
  164. package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs.map +1 -1
  165. package/fesm2022/verben-workflow-ui-src-lib-components-task-notification.mjs +16 -16
  166. package/fesm2022/verben-workflow-ui-src-lib-components-task-notification.mjs.map +1 -1
  167. package/fesm2022/verben-workflow-ui-src-lib-components-tasks.mjs +21 -21
  168. package/fesm2022/verben-workflow-ui-src-lib-components-tasks.mjs.map +1 -1
  169. package/fesm2022/verben-workflow-ui-src-lib-components-wf.mjs +10 -10
  170. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs +67 -67
  171. package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs.map +1 -1
  172. package/fesm2022/verben-workflow-ui-src-lib-components-workflow.mjs +16 -16
  173. package/fesm2022/verben-workflow-ui-src-lib-components-workflow.mjs.map +1 -1
  174. package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs +21 -21
  175. package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs.map +1 -1
  176. package/fesm2022/verben-workflow-ui-src-lib-pipes.mjs +3 -3
  177. package/fesm2022/verben-workflow-ui-src-lib-services.mjs +12 -12
  178. package/fesm2022/verben-workflow-ui-src-lib-shared.mjs +12 -12
  179. package/fesm2022/verben-workflow-ui-src-lib-shared.mjs.map +1 -1
  180. package/package.json +36 -36
  181. package/src/lib/components/workflow/workflow.component.d.ts +1 -1
  182. package/styles/styles.css +19 -1436
@@ -161,15 +161,15 @@ export class StageDialogComponent {
161
161
  }
162
162
  }
163
163
  }
164
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageDialogComponent, deps: [{ token: i1.FormBuilder }, { token: i2.WorkflowDataService }, { token: i3.NodeManagementService }, { token: i4.PopupService }], target: i0.ɵɵFactoryTarget.Component });
165
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: StageDialogComponent, selector: "lib-stage-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, stageData: { classPropertyName: "stageData", publicName: "stageData", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed", saved: "saved" }, usesOnChanges: true, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"grid gap-y-4\">\n <!-- Stage Name -->\n <verbena-input\n name=\"Name\"\n label=\"Stage Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Stage Name\"\n />\n\n <!-- Description -->\n <verbena-textarea\n label=\"Description\"\n [rows]=\"3\"\n formControlName=\"Description\"\n ></verbena-textarea>\n\n <!-- Recipient Count -->\n <verbena-input\n name=\"MinNoOfActor\"\n label=\"Recipient Count\"\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeHolder=\"Enter Count\"\n />\n\n <!-- Pass On Rule -->\n <verbena-input\n name=\"PassOnRule\"\n label=\"Pass On Rule\"\n formControlName=\"PassOnRule\"\n placeHolder=\"Select Rule\"\n />\n\n <!-- Duration -->\n <verbena-input\n name=\"Duration\"\n label=\"Duration\"\n type=\"number\"\n formControlName=\"Duration\"\n placeHolder=\"Set Duration\"\n />\n\n <!-- Actor Rule -->\n <div class=\"space-y-1\">\n <label for=\"actor-rule\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Actor Rule\n </label>\n <verben-drop-down\n id=\"actor-rule\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select Rule\"\n [options]=\"actorRules\"\n formControlName=\"ActorRule\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Assignment Type -->\n <div class=\"space-y-1\">\n <label for=\"assignment\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Assignment Type\n </label>\n <verben-drop-down\n id=\"assignment\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"assignmentTypes\"\n formControlName=\"AssignmentType\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Tags -->\n <div class=\"space-y-1\">\n <label for=\"tags\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Tags\n </label>\n <verben-drop-down\n id=\"tags\"\n selectKey=\"Code\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n formControlName=\"Tags\"\n class=\"form-control\"\n [filter]=\"true\"\n filterBy=\"Name\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Is Entry Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-entry-point\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Entry Point\n </label>\n <verbena-switch\n id=\"is-entry-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'#1A237E'\"\n formControlName=\"IsEntryPoint\"\n ></verbena-switch>\n </div>\n\n <!-- Is Exit Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-exit-point\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Exit Point\n </label>\n <verbena-switch\n id=\"is-exit-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'#1A237E'\"\n formControlName=\"IsExitPoint\"\n ></verbena-switch>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"w-full flex justify-between gap-4 p-4 border-t border-gray-200\">\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"deleteStage()\"\n >\n Delete\n </button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n (click)=\"deleteStage()\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n (click)=\"saveStage()\"\n [disable]=\"stageForm.invalid\"\n ></verbena-button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "component", type: i5.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i5.VerbenaTextareaComponent, selector: "verbena-textarea", inputs: ["label", "required", "rows", "cols", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "value", "errorMessageColor"], outputs: ["valueChange"] }] });
164
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StageDialogComponent, deps: [{ token: i1.FormBuilder }, { token: i2.WorkflowDataService }, { token: i3.NodeManagementService }, { token: i4.PopupService }], target: i0.ɵɵFactoryTarget.Component });
165
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: StageDialogComponent, selector: "lib-stage-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, stageData: { classPropertyName: "stageData", publicName: "stageData", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed", saved: "saved" }, usesOnChanges: true, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"grid gap-y-4\">\n <!-- Stage Name -->\n <verbena-input\n name=\"Name\"\n label=\"Stage Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Stage Name\"\n />\n\n <!-- Description -->\n <verbena-textarea\n label=\"Description\"\n [rows]=\"3\"\n formControlName=\"Description\"\n ></verbena-textarea>\n\n <!-- Recipient Count -->\n <verbena-input\n name=\"MinNoOfActor\"\n label=\"Recipient Count\"\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeHolder=\"Enter Count\"\n />\n\n <!-- Pass On Rule -->\n <verbena-input\n name=\"PassOnRule\"\n label=\"Pass On Rule\"\n formControlName=\"PassOnRule\"\n placeHolder=\"Select Rule\"\n />\n\n <!-- Duration -->\n <verbena-input\n name=\"Duration\"\n label=\"Duration\"\n type=\"number\"\n formControlName=\"Duration\"\n placeHolder=\"Set Duration\"\n />\n\n <!-- Actor Rule -->\n <div class=\"space-y-1\">\n <label for=\"actor-rule\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Actor Rule\n </label>\n <verben-drop-down\n id=\"actor-rule\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select Rule\"\n [options]=\"actorRules\"\n formControlName=\"ActorRule\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Assignment Type -->\n <div class=\"space-y-1\">\n <label for=\"assignment\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Assignment Type\n </label>\n <verben-drop-down\n id=\"assignment\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"assignmentTypes\"\n formControlName=\"AssignmentType\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Tags -->\n <div class=\"space-y-1\">\n <label for=\"tags\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Tags\n </label>\n <verben-drop-down\n id=\"tags\"\n selectKey=\"Code\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n formControlName=\"Tags\"\n class=\"form-control\"\n [filter]=\"true\"\n filterBy=\"Name\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Is Entry Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-entry-point\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Entry Point\n </label>\n <verbena-switch\n id=\"is-entry-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'var(--vbn-color-text)'\"\n formControlName=\"IsEntryPoint\"\n ></verbena-switch>\n </div>\n\n <!-- Is Exit Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-exit-point\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Exit Point\n </label>\n <verbena-switch\n id=\"is-exit-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'var(--vbn-color-text)'\"\n formControlName=\"IsExitPoint\"\n ></verbena-switch>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"w-full flex justify-between gap-4 p-4 border-t border-gray-200\">\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"deleteStage()\"\n >\n Delete\n </button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"var(--vbn-color-text-muted)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n (click)=\"deleteStage()\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"var(--vbn-color-primary)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n (click)=\"saveStage()\"\n [disable]=\"stageForm.invalid\"\n ></verbena-button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "component", type: i5.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.VerbenaButtonComponent, selector: "verbena-button", inputs: ["type", "text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i5.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "overlayWidth", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "refPageSize", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.VerbenaInputComponent, selector: "verbena-input", inputs: ["disabled", "label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i5.VerbenaTextareaComponent, selector: "verbena-textarea", inputs: ["disabled", "label", "required", "rows", "cols", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "value", "errorMessageColor"], outputs: ["valueChange"] }] });
166
166
  }
167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageDialogComponent, decorators: [{
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StageDialogComponent, decorators: [{
168
168
  type: Component,
169
- args: [{ selector: 'lib-stage-dialog', template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"grid gap-y-4\">\n <!-- Stage Name -->\n <verbena-input\n name=\"Name\"\n label=\"Stage Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Stage Name\"\n />\n\n <!-- Description -->\n <verbena-textarea\n label=\"Description\"\n [rows]=\"3\"\n formControlName=\"Description\"\n ></verbena-textarea>\n\n <!-- Recipient Count -->\n <verbena-input\n name=\"MinNoOfActor\"\n label=\"Recipient Count\"\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeHolder=\"Enter Count\"\n />\n\n <!-- Pass On Rule -->\n <verbena-input\n name=\"PassOnRule\"\n label=\"Pass On Rule\"\n formControlName=\"PassOnRule\"\n placeHolder=\"Select Rule\"\n />\n\n <!-- Duration -->\n <verbena-input\n name=\"Duration\"\n label=\"Duration\"\n type=\"number\"\n formControlName=\"Duration\"\n placeHolder=\"Set Duration\"\n />\n\n <!-- Actor Rule -->\n <div class=\"space-y-1\">\n <label for=\"actor-rule\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Actor Rule\n </label>\n <verben-drop-down\n id=\"actor-rule\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select Rule\"\n [options]=\"actorRules\"\n formControlName=\"ActorRule\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Assignment Type -->\n <div class=\"space-y-1\">\n <label for=\"assignment\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Assignment Type\n </label>\n <verben-drop-down\n id=\"assignment\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"assignmentTypes\"\n formControlName=\"AssignmentType\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Tags -->\n <div class=\"space-y-1\">\n <label for=\"tags\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Tags\n </label>\n <verben-drop-down\n id=\"tags\"\n selectKey=\"Code\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n formControlName=\"Tags\"\n class=\"form-control\"\n [filter]=\"true\"\n filterBy=\"Name\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Is Entry Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-entry-point\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Entry Point\n </label>\n <verbena-switch\n id=\"is-entry-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'#1A237E'\"\n formControlName=\"IsEntryPoint\"\n ></verbena-switch>\n </div>\n\n <!-- Is Exit Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-exit-point\" class=\"text-sm font-semibold text-[#3E3E3E]\">\n Exit Point\n </label>\n <verbena-switch\n id=\"is-exit-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'#1A237E'\"\n formControlName=\"IsExitPoint\"\n ></verbena-switch>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"w-full flex justify-between gap-4 p-4 border-t border-gray-200\">\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"deleteStage()\"\n >\n Delete\n </button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n (click)=\"deleteStage()\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n (click)=\"saveStage()\"\n [disable]=\"stageForm.invalid\"\n ></verbena-button>\n </div>\n</ng-template>\n" }]
169
+ args: [{ selector: 'lib-stage-dialog', template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible()\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div class=\"p-4 border-b border-gray-200\">\n <h2 class=\"text-xl font-medium m-0\">Stage Properties</h2>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-4\">\n <form [formGroup]=\"stageForm\" class=\"grid gap-y-4\">\n <!-- Stage Name -->\n <verbena-input\n name=\"Name\"\n label=\"Stage Name\"\n formControlName=\"Name\"\n placeHolder=\"Enter Stage Name\"\n />\n\n <!-- Description -->\n <verbena-textarea\n label=\"Description\"\n [rows]=\"3\"\n formControlName=\"Description\"\n ></verbena-textarea>\n\n <!-- Recipient Count -->\n <verbena-input\n name=\"MinNoOfActor\"\n label=\"Recipient Count\"\n type=\"number\"\n formControlName=\"MinNoOfActor\"\n placeHolder=\"Enter Count\"\n />\n\n <!-- Pass On Rule -->\n <verbena-input\n name=\"PassOnRule\"\n label=\"Pass On Rule\"\n formControlName=\"PassOnRule\"\n placeHolder=\"Select Rule\"\n />\n\n <!-- Duration -->\n <verbena-input\n name=\"Duration\"\n label=\"Duration\"\n type=\"number\"\n formControlName=\"Duration\"\n placeHolder=\"Set Duration\"\n />\n\n <!-- Actor Rule -->\n <div class=\"space-y-1\">\n <label for=\"actor-rule\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Actor Rule\n </label>\n <verben-drop-down\n id=\"actor-rule\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select Rule\"\n [options]=\"actorRules\"\n formControlName=\"ActorRule\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Assignment Type -->\n <div class=\"space-y-1\">\n <label for=\"assignment\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Assignment Type\n </label>\n <verben-drop-down\n id=\"assignment\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n placeholder=\"Select\"\n [options]=\"assignmentTypes\"\n formControlName=\"AssignmentType\"\n class=\"form-control\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Tags -->\n <div class=\"space-y-1\">\n <label for=\"tags\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Tags\n </label>\n <verben-drop-down\n id=\"tags\"\n selectKey=\"Code\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n formControlName=\"Tags\"\n class=\"form-control\"\n [filter]=\"true\"\n filterBy=\"Name\"\n >\n </verben-drop-down>\n </div>\n\n <!-- Is Entry Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-entry-point\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Entry Point\n </label>\n <verbena-switch\n id=\"is-entry-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'var(--vbn-color-text)'\"\n formControlName=\"IsEntryPoint\"\n ></verbena-switch>\n </div>\n\n <!-- Is Exit Point -->\n <div class=\"flex items-center gap-4\">\n <label for=\"is-exit-point\" class=\"text-sm font-semibold text-[var(--vbn-color-text)]\">\n Exit Point\n </label>\n <verbena-switch\n id=\"is-exit-point\"\n onText=\"Yes\"\n offText=\"No\"\n [onColor]=\"'var(--vbn-color-text)'\"\n formControlName=\"IsExitPoint\"\n ></verbena-switch>\n </div>\n </form>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"w-full flex justify-between gap-4 p-4 border-t border-gray-200\">\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button>\n <button\n class=\"px-4 py-2 bg-yellow-300 text-black rounded text-sm font-medium\"\n (click)=\"saveStage()\"\n [disabled]=\"stageForm.invalid\"\n >\n Save\n </button>\n <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"deleteStage()\"\n >\n Delete\n </button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"var(--vbn-color-text-muted)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n (click)=\"deleteStage()\"\n ></verbena-button>\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n class=\"ml-auto\"\n ></verbena-button>\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"var(--vbn-color-primary)\"\n textColor=\"var(--vbn-color-on-primary)\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n (click)=\"saveStage()\"\n [disable]=\"stageForm.invalid\"\n ></verbena-button>\n </div>\n</ng-template>\n" }]
170
170
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.WorkflowDataService }, { type: i3.NodeManagementService }, { type: i4.PopupService }], propDecorators: { closed: [{
171
171
  type: Output
172
172
  }], saved: [{
173
173
  type: Output
174
174
  }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3RhZ2UtZGlhbG9nL3N0YWdlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLWRpYWxvZy9zdGFnZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFPLGtCQUFrQixFQUFpQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBVTNHLE1BQU0sT0FBTyxvQkFBb0I7SUFlckI7SUFDQTtJQUNBO0lBQ0E7SUFqQlYsbUNBQW1DO0lBQ25DLE9BQU8sR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsOEJBQThCO0lBQzVFLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztJQUU3RCxTQUFTLENBQVk7SUFDckIsSUFBSSxHQUFVLEVBQUUsQ0FBQztJQUNqQixVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxlQUFlLEdBQUcsTUFBTSxDQUFD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dGVyLFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3RhZ2VBY3RvclJ1bGUsIFRhZywgVGFza0Fzc2lnbm1lbnRUeXBlLCBXb3JrZmxvd1N0YWdlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IE5vZGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcHVwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BvcHVwLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zdGFnZS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RhZ2VEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBVc2UgQW5ndWxhcidzIHNpZ25hbC1iYXNlZCBpbnB1dFxuICB2aXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzdGFnZURhdGEgPSBpbnB1dC5yZXF1aXJlZDxQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+Pih7fSk7IC8vIEZvciBlZGl0aW5nIGV4aXN0aW5nIHN0YWdlc1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4+KCk7XG5cbiAgc3RhZ2VGb3JtOiBGb3JtR3JvdXA7XG4gIHRhZ3M6IFRhZ1tdID0gW107XG4gIGFjdG9yUnVsZXMgPSBPYmplY3QudmFsdWVzKFN0YWdlQWN0b3JSdWxlKTtcbiAgYXNzaWdubWVudFR5cGVzID0gT2JqZWN0LnZhbHVlcyhUYXNrQXNzaWdubWVudFR5cGUpO1xuXG4gIGhhc091dGdvaW5nQ29ubmVjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IE5vZGVNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHBvcHVwU2VydmljZTogUG9wdXBTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhZ2VGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBOYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgRGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBNaW5Ob09mQWN0b3I6IFswXSxcbiAgICAgIER1cmF0aW9uOiBbMF0sXG4gICAgICBQYXNzT25SdWxlOiBbJyddLFxuICAgICAgQWN0b3JSdWxlOiBbU3RhZ2VBY3RvclJ1bGUuTm9uZV0sXG4gICAgICBBc3NpZ25tZW50VHlwZTogW1Rhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGVdLFxuICAgICAgSXNFbnRyeVBvaW50OiBbZmFsc2VdLFxuICAgICAgSXNFeGl0UG9pbnQ6IFtmYWxzZV0sXG4gICAgICBUYWdzOiBbW11dLFxuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIElmIHN0YWdlRGF0YSBjaGFuZ2VzLCB1cGRhdGUgdGhlIGZvcm1cbiAgICAgIGNvbnN0IHN0YWdlRGF0YSA9IHRoaXMuc3RhZ2VEYXRhKCk7XG4gICAgICBpZiAoc3RhZ2VEYXRhKSB7XG4gICAgICAgIHRoaXMuc3RhZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIE5hbWU6IHN0YWdlRGF0YS5OYW1lIHx8ICcnLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiBzdGFnZURhdGEuRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgTWluTm9PZkFjdG9yOiBzdGFnZURhdGEuTWluTm9PZkFjdG9yIHx8IDAsXG4gICAgICAgICAgRHVyYXRpb246IHN0YWdlRGF0YS5EdXJhdGlvbiB8fCAwLFxuICAgICAgICAgIFBhc3NPblJ1bGU6IHN0YWdlRGF0YS5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICAgIEFjdG9yUnVsZTogc3RhZ2VEYXRhLkFjdG9yUnVsZSB8fCBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICAgIEFzc2lnbm1lbnRUeXBlOlxuICAgICAgICAgICAgc3RhZ2VEYXRhLkFzc2lnbm1lbnRUeXBlIHx8IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgICAgSXNFbnRyeVBvaW50OiBzdGFnZURhdGEuSXNFbnRyeVBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIElzRXhpdFBvaW50OiBzdGFnZURhdGEuSXNFeGl0UG9pbnQgfHwgZmFsc2UsXG4gICAgICAgICAgVGFnczogc3RhZ2VEYXRhLlRhZ3MgfHwgW10sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gTG9hZCB0YWdzXG4gICAgdGhpcy5sb2FkVGFncygpO1xuXG4gICAgLy8gSWYgZWRpdGluZyBhbiBleGlzdGluZyBzdGFnZSwgcG9wdWxhdGUgZm9ybVxuICAgIHRoaXMuaW5pdEZvcm1XaXRoU3RhZ2VEYXRhKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7IH1cblxuICAvKipcbiAgICogTG9hZCB0YWdzIGZyb20gZGF0YSBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIGxvYWRUYWdzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0VGFncygpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMudGFncyA9IGRhdGEuUmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgZm9ybSB3aXRoIHN0YWdlIGRhdGEgaWYgcHJvdmlkZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdEZvcm1XaXRoU3RhZ2VEYXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YWdlRGF0YSgpKSB7XG4gICAgICBjb25zb2xlLmxvZygnSW5pdGlhbGl6aW5nIGZvcm0gd2l0aCBzdGFnZSBkYXRhOicsIHRoaXMuc3RhZ2VEYXRhKCkpO1xuICAgICAgdGhpcy5zdGFnZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIE5hbWU6IHRoaXMuc3RhZ2VEYXRhKCkuTmFtZSB8fCAnJyxcbiAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuc3RhZ2VEYXRhKCkuRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIE1pbk5vT2ZBY3RvcjogdGhpcy5zdGFnZURhdGEoKS5NaW5Ob09mQWN0b3IgfHwgMCxcbiAgICAgICAgRHVyYXRpb246IHRoaXMuc3RhZ2VEYXRhKCkuRHVyYXRpb24gfHwgMCxcbiAgICAgICAgUGFzc09uUnVsZTogdGhpcy5zdGFnZURhdGEoKS5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICBBY3RvclJ1bGU6IHRoaXMuc3RhZ2VEYXRhKCkuQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICAgIEFzc2lnbm1lbnRUeXBlOlxuICAgICAgICAgIHRoaXMuc3RhZ2VEYXRhKCkuQXNzaWdubWVudFR5cGUgfHwgVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgSXNFbnRyeVBvaW50OiB0aGlzLnN0YWdlRGF0YSgpLklzRW50cnlQb2ludCB8fCBmYWxzZSxcbiAgICAgICAgSXNFeGl0UG9pbnQ6IHRoaXMuc3RhZ2VEYXRhKCkuSXNFeGl0UG9pbnQgfHwgZmFsc2UsXG4gICAgICAgIFRhZ3M6IHRoaXMuc3RhZ2VEYXRhKCkuVGFncyB8fCBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tPdXRnb2luZ0Nvbm5lY3Rpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWdlRGF0YSA9IHRoaXMuc3RhZ2VEYXRhKCk7XG5cbiAgICBpZiAoc3RhZ2VEYXRhICYmIHN0YWdlRGF0YS5Db2RlKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgb3V0Z29pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGlzIHN0YWdlXG4gICAgICB0aGlzLmhhc091dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLm5vZGVTZXJ2aWNlLmhhc091dGdvaW5nQ29ubmVjdGlvbnMoXG4gICAgICAgIHN0YWdlRGF0YS5Db2RlXG4gICAgICApO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgb3V0Z29pbmcgY29ubmVjdGlvbnMsIGRpc2FibGUgSXNFeGl0UG9pbnRcbiAgICAgIGlmICh0aGlzLmhhc091dGdvaW5nQ29ubmVjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdGFnZUZvcm0uZ2V0KCdJc0V4aXRQb2ludCcpPy5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YWdlRm9ybS5nZXQoJ0lzRXhpdFBvaW50Jyk/LmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGlhbG9nQ2xvc2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIHNhdmVTdGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGFnZUZvcm0udmFsaWQpIHtcbiAgICAgIGNvbnN0IHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHtcbiAgICAgICAgLi4udGhpcy5zdGFnZUZvcm0udmFsdWUsXG4gICAgICB9O1xuXG4gICAgICAvLyBSZXNldCBmb3JtIGFmdGVyIHNhdmluZ1xuICAgICAgdGhpcy5zdGFnZUZvcm0ucmVzZXQoKTtcblxuICAgICAgLy8gRW1pdCB0aGUgc2F2ZWQgZGF0YSB0byB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgICAgdGhpcy5zYXZlZC5lbWl0KHN0YWdlRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25EaWFsb2dPcGVuKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnRGlhbG9nIG9wZW5lZDonLCBldmVudCk7XG4gIH1cblxuICBkZWxldGVTdGFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZURhdGEgPSB0aGlzLnN0YWdlRGF0YSgpO1xuICAgIGNvbnNvbGUubG9nKHN0YWdlRGF0YSk7XG4gICAgaWYgKHN0YWdlRGF0YSkge1xuICAgICAgY29uc3Qgc3RhZ2VDb2RlID0gc3RhZ2VEYXRhLkNvZGU7XG4gICAgICBpZiAoc3RhZ2VDb2RlKSB7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgICAgICAuZGVsZXRlV29ya2Zsb3dTdGFnZXMoW3N0YWdlQ29kZV0pXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RhZ2UgZGVsZXRlZCBzdWNjZXNzZnVsbHk6JywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgbm9kZSBzZXJ2aWNlIHRvIGRlbGV0ZSB0aGUgc3RhZ2VcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLm5vZGVTZXJ2aWNlLmRlbGV0ZU5vZGUoc3RhZ2VDb2RlKTtcbiAgICAgICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gbm90aWZ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdGFnZTonLCBzdGFnZUNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgc3RhZ2U6JywgZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzdGFnZURhdGEuaWQpIHtcbiAgICAgICAgLy8gQ2FsbCB0aGUgbm9kZSBzZXJ2aWNlIHRvIGRlbGV0ZSB0aGUgc3RhZ2VcbiAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMubm9kZVNlcnZpY2UuZGVsZXRlTm9kZShzdGFnZURhdGEuaWQpO1xuICAgICAgICBpZiAoZGVsZXRlZCkge1xuICAgICAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gbm90aWZ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdGFnZTonLCBzdGFnZURhdGEuQ29kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx2ZXJiZW4tZGlhbG9ndWVcbiAgW3Nob3dDbG9zZUljb25dPVwidHJ1ZVwiXG4gIFtkaXNtaXNzT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJ0cnVlXCJcbiAgW3NpemVdPVwiJ21lZGl1bSdcIlxuICBbbW9kZV09XCInZHJhd2VyJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW2lzVmlzaWJsZV09XCJ2aXNpYmxlKClcIlxuICBbaGVhZGVyVGVtcGxhdGVdPVwiaGVhZGVyVGVtcGxhdGVcIlxuICBbYm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXG4gIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXG4gIChvcGVuTW9kYWwpPVwib25EaWFsb2dPcGVuKCRldmVudClcIlxuICAoY2xvc2VNb2RhbCk9XCJvbkRpYWxvZ0Nsb3NlKCRldmVudClcIlxuPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwLTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGgyIGNsYXNzPVwidGV4dC14bCBmb250LW1lZGl1bSBtLTBcIj5TdGFnZSBQcm9wZXJ0aWVzPC9oMj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic3RhZ2VGb3JtXCIgY2xhc3M9XCJncmlkIGdhcC15LTRcIj5cbiAgICAgIDwhLS0gU3RhZ2UgTmFtZSAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIG5hbWU9XCJOYW1lXCJcbiAgICAgICAgbGFiZWw9XCJTdGFnZSBOYW1lXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiXG4gICAgICAgIHBsYWNlSG9sZGVyPVwiRW50ZXIgU3RhZ2UgTmFtZVwiXG4gICAgICAvPlxuXG4gICAgICA8IS0tIERlc2NyaXB0aW9uIC0tPlxuICAgICAgPHZlcmJlbmEtdGV4dGFyZWFcbiAgICAgICAgbGFiZWw9XCJEZXNjcmlwdGlvblwiXG4gICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJEZXNjcmlwdGlvblwiXG4gICAgICA+PC92ZXJiZW5hLXRleHRhcmVhPlxuXG4gICAgICA8IS0tIFJlY2lwaWVudCBDb3VudCAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIG5hbWU9XCJNaW5Ob09mQWN0b3JcIlxuICAgICAgICBsYWJlbD1cIlJlY2lwaWVudCBDb3VudFwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJNaW5Ob09mQWN0b3JcIlxuICAgICAgICBwbGFjZUhvbGRlcj1cIkVudGVyIENvdW50XCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gUGFzcyBPbiBSdWxlIC0tPlxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgbmFtZT1cIlBhc3NPblJ1bGVcIlxuICAgICAgICBsYWJlbD1cIlBhc3MgT24gUnVsZVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIlBhc3NPblJ1bGVcIlxuICAgICAgICBwbGFjZUhvbGRlcj1cIlNlbGVjdCBSdWxlXCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gRHVyYXRpb24gLS0+XG4gICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICBuYW1lPVwiRHVyYXRpb25cIlxuICAgICAgICBsYWJlbD1cIkR1cmF0aW9uXCJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkR1cmF0aW9uXCJcbiAgICAgICAgcGxhY2VIb2xkZXI9XCJTZXQgRHVyYXRpb25cIlxuICAgICAgLz5cblxuICAgICAgPCEtLSBBY3RvciBSdWxlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiYWN0b3ItcnVsZVwiIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtWyMzRTNFM0VdXCI+XG4gICAgICAgICAgQWN0b3IgUnVsZVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIGlkPVwiYWN0b3ItcnVsZVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJ1bGVcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImFjdG9yUnVsZXNcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkFjdG9yUnVsZVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQXNzaWdubWVudCBUeXBlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiYXNzaWdubWVudFwiIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtWyMzRTNFM0VdXCI+XG4gICAgICAgICAgQXNzaWdubWVudCBUeXBlXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgaWQ9XCJhc3NpZ25tZW50XCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImFzc2lnbm1lbnRUeXBlc1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQXNzaWdubWVudFR5cGVcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFRhZ3MgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJ0YWdzXCIgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1bIzNFM0UzRV1cIj5cbiAgICAgICAgICBUYWdzXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgaWQ9XCJ0YWdzXCJcbiAgICAgICAgICBzZWxlY3RLZXk9XCJDb2RlXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwidGFnc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJUYWdzXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBmaWx0ZXJCeT1cIk5hbWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIElzIEVudHJ5IFBvaW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJpcy1lbnRyeS1wb2ludFwiIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtWyMzRTNFM0VdXCI+XG4gICAgICAgICAgRW50cnkgUG9pbnRcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHZlcmJlbmEtc3dpdGNoXG4gICAgICAgICAgaWQ9XCJpcy1lbnRyeS1wb2ludFwiXG4gICAgICAgICAgb25UZXh0PVwiWWVzXCJcbiAgICAgICAgICBvZmZUZXh0PVwiTm9cIlxuICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiSXNFbnRyeVBvaW50XCJcbiAgICAgICAgPjwvdmVyYmVuYS1zd2l0Y2g+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBJcyBFeGl0IFBvaW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJpcy1leGl0LXBvaW50XCIgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1bIzNFM0UzRV1cIj5cbiAgICAgICAgICBFeGl0IFBvaW50XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx2ZXJiZW5hLXN3aXRjaFxuICAgICAgICAgIGlkPVwiaXMtZXhpdC1wb2ludFwiXG4gICAgICAgICAgb25UZXh0PVwiWWVzXCJcbiAgICAgICAgICBvZmZUZXh0PVwiTm9cIlxuICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiSXNFeGl0UG9pbnRcIlxuICAgICAgICA+PC92ZXJiZW5hLXN3aXRjaD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXgganVzdGlmeS1iZXR3ZWVuIGdhcC00IHAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8IS0tIDxidXR0b25cbiAgICAgIGNsYXNzPVwicHgtNCBweS0yIG1yLTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gZm9udC1tZWRpdW1cIlxuICAgICAgKGNsaWNrKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgYmcteWVsbG93LTMwMCB0ZXh0LWJsYWNrIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwic2F2ZVN0YWdlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cInN0YWdlRm9ybS5pbnZhbGlkXCJcbiAgICA+XG4gICAgICBTYXZlXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgbXItMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlU3RhZ2UoKVwiXG4gICAgPlxuICAgICAgRGVsZXRlXG4gICAgPC9idXR0b24+IC0tPlxuICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgd2lkdGg9XCIxMTRweFwiXG4gICAgICBoZWlnaHQ9XCIzOXB4XCJcbiAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgYmdDb2xvcj1cIiM5OTk5OTlcIlxuICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgIChjbGljayk9XCJkZWxldGVTdGFnZSgpXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cblxuICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgKGNsaWNrKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4gICAgICB0ZXh0PVwiQ2FuY2VsXCJcbiAgICAgIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCJcbiAgICAgIGNsYXNzPVwibWwtYXV0b1wiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIHRleHQ9XCJTYXZlXCJcbiAgICAgIGJnQ29sb3I9XCIjRkZFNjgxXCJcbiAgICAgIHRleHRDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICB3aWR0aD1cIjExNHB4XCJcbiAgICAgIGhlaWdodD1cIjM5cHhcIlxuICAgICAgKGNsaWNrKT1cInNhdmVTdGFnZSgpXCJcbiAgICAgIFtkaXNhYmxlXT1cInN0YWdlRm9ybS5pbnZhbGlkXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3RhZ2UtZGlhbG9nL3N0YWdlLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLWRpYWxvZy9zdGFnZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFPLGtCQUFrQixFQUFpQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBVTNHLE1BQU0sT0FBTyxvQkFBb0I7SUFlckI7SUFDQTtJQUNBO0lBQ0E7SUFqQlYsbUNBQW1DO0lBQ25DLE9BQU8sR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsOEJBQThCO0lBQzVFLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztJQUU3RCxTQUFTLENBQVk7SUFDckIsSUFBSSxHQUFVLEVBQUUsQ0FBQztJQUNqQixVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzQyxlQUFlLEdBQUcsTUFBTSxDQUFD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dGVyLFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3RhZ2VBY3RvclJ1bGUsIFRhZywgVGFza0Fzc2lnbm1lbnRUeXBlLCBXb3JrZmxvd1N0YWdlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IE5vZGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcHVwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BvcHVwLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zdGFnZS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhZ2UtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RhZ2VEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBVc2UgQW5ndWxhcidzIHNpZ25hbC1iYXNlZCBpbnB1dFxuICB2aXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzdGFnZURhdGEgPSBpbnB1dC5yZXF1aXJlZDxQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+Pih7fSk7IC8vIEZvciBlZGl0aW5nIGV4aXN0aW5nIHN0YWdlc1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4+KCk7XG5cbiAgc3RhZ2VGb3JtOiBGb3JtR3JvdXA7XG4gIHRhZ3M6IFRhZ1tdID0gW107XG4gIGFjdG9yUnVsZXMgPSBPYmplY3QudmFsdWVzKFN0YWdlQWN0b3JSdWxlKTtcbiAgYXNzaWdubWVudFR5cGVzID0gT2JqZWN0LnZhbHVlcyhUYXNrQXNzaWdubWVudFR5cGUpO1xuXG4gIGhhc091dGdvaW5nQ29ubmVjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IE5vZGVNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHBvcHVwU2VydmljZTogUG9wdXBTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhZ2VGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBOYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgRGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBNaW5Ob09mQWN0b3I6IFswXSxcbiAgICAgIER1cmF0aW9uOiBbMF0sXG4gICAgICBQYXNzT25SdWxlOiBbJyddLFxuICAgICAgQWN0b3JSdWxlOiBbU3RhZ2VBY3RvclJ1bGUuTm9uZV0sXG4gICAgICBBc3NpZ25tZW50VHlwZTogW1Rhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGVdLFxuICAgICAgSXNFbnRyeVBvaW50OiBbZmFsc2VdLFxuICAgICAgSXNFeGl0UG9pbnQ6IFtmYWxzZV0sXG4gICAgICBUYWdzOiBbW11dLFxuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIElmIHN0YWdlRGF0YSBjaGFuZ2VzLCB1cGRhdGUgdGhlIGZvcm1cbiAgICAgIGNvbnN0IHN0YWdlRGF0YSA9IHRoaXMuc3RhZ2VEYXRhKCk7XG4gICAgICBpZiAoc3RhZ2VEYXRhKSB7XG4gICAgICAgIHRoaXMuc3RhZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIE5hbWU6IHN0YWdlRGF0YS5OYW1lIHx8ICcnLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiBzdGFnZURhdGEuRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgTWluTm9PZkFjdG9yOiBzdGFnZURhdGEuTWluTm9PZkFjdG9yIHx8IDAsXG4gICAgICAgICAgRHVyYXRpb246IHN0YWdlRGF0YS5EdXJhdGlvbiB8fCAwLFxuICAgICAgICAgIFBhc3NPblJ1bGU6IHN0YWdlRGF0YS5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICAgIEFjdG9yUnVsZTogc3RhZ2VEYXRhLkFjdG9yUnVsZSB8fCBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICAgIEFzc2lnbm1lbnRUeXBlOlxuICAgICAgICAgICAgc3RhZ2VEYXRhLkFzc2lnbm1lbnRUeXBlIHx8IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgICAgSXNFbnRyeVBvaW50OiBzdGFnZURhdGEuSXNFbnRyeVBvaW50IHx8IGZhbHNlLFxuICAgICAgICAgIElzRXhpdFBvaW50OiBzdGFnZURhdGEuSXNFeGl0UG9pbnQgfHwgZmFsc2UsXG4gICAgICAgICAgVGFnczogc3RhZ2VEYXRhLlRhZ3MgfHwgW10sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gTG9hZCB0YWdzXG4gICAgdGhpcy5sb2FkVGFncygpO1xuXG4gICAgLy8gSWYgZWRpdGluZyBhbiBleGlzdGluZyBzdGFnZSwgcG9wdWxhdGUgZm9ybVxuICAgIHRoaXMuaW5pdEZvcm1XaXRoU3RhZ2VEYXRhKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7IH1cblxuICAvKipcbiAgICogTG9hZCB0YWdzIGZyb20gZGF0YSBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIGxvYWRUYWdzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0VGFncygpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMudGFncyA9IGRhdGEuUmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgZm9ybSB3aXRoIHN0YWdlIGRhdGEgaWYgcHJvdmlkZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdEZvcm1XaXRoU3RhZ2VEYXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YWdlRGF0YSgpKSB7XG4gICAgICBjb25zb2xlLmxvZygnSW5pdGlhbGl6aW5nIGZvcm0gd2l0aCBzdGFnZSBkYXRhOicsIHRoaXMuc3RhZ2VEYXRhKCkpO1xuICAgICAgdGhpcy5zdGFnZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIE5hbWU6IHRoaXMuc3RhZ2VEYXRhKCkuTmFtZSB8fCAnJyxcbiAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuc3RhZ2VEYXRhKCkuRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIE1pbk5vT2ZBY3RvcjogdGhpcy5zdGFnZURhdGEoKS5NaW5Ob09mQWN0b3IgfHwgMCxcbiAgICAgICAgRHVyYXRpb246IHRoaXMuc3RhZ2VEYXRhKCkuRHVyYXRpb24gfHwgMCxcbiAgICAgICAgUGFzc09uUnVsZTogdGhpcy5zdGFnZURhdGEoKS5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICBBY3RvclJ1bGU6IHRoaXMuc3RhZ2VEYXRhKCkuQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICAgIEFzc2lnbm1lbnRUeXBlOlxuICAgICAgICAgIHRoaXMuc3RhZ2VEYXRhKCkuQXNzaWdubWVudFR5cGUgfHwgVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgSXNFbnRyeVBvaW50OiB0aGlzLnN0YWdlRGF0YSgpLklzRW50cnlQb2ludCB8fCBmYWxzZSxcbiAgICAgICAgSXNFeGl0UG9pbnQ6IHRoaXMuc3RhZ2VEYXRhKCkuSXNFeGl0UG9pbnQgfHwgZmFsc2UsXG4gICAgICAgIFRhZ3M6IHRoaXMuc3RhZ2VEYXRhKCkuVGFncyB8fCBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tPdXRnb2luZ0Nvbm5lY3Rpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWdlRGF0YSA9IHRoaXMuc3RhZ2VEYXRhKCk7XG5cbiAgICBpZiAoc3RhZ2VEYXRhICYmIHN0YWdlRGF0YS5Db2RlKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgb3V0Z29pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGlzIHN0YWdlXG4gICAgICB0aGlzLmhhc091dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLm5vZGVTZXJ2aWNlLmhhc091dGdvaW5nQ29ubmVjdGlvbnMoXG4gICAgICAgIHN0YWdlRGF0YS5Db2RlXG4gICAgICApO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgb3V0Z29pbmcgY29ubmVjdGlvbnMsIGRpc2FibGUgSXNFeGl0UG9pbnRcbiAgICAgIGlmICh0aGlzLmhhc091dGdvaW5nQ29ubmVjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdGFnZUZvcm0uZ2V0KCdJc0V4aXRQb2ludCcpPy5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YWdlRm9ybS5nZXQoJ0lzRXhpdFBvaW50Jyk/LmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGlhbG9nQ2xvc2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIHNhdmVTdGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGFnZUZvcm0udmFsaWQpIHtcbiAgICAgIGNvbnN0IHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHtcbiAgICAgICAgLi4udGhpcy5zdGFnZUZvcm0udmFsdWUsXG4gICAgICB9O1xuXG4gICAgICAvLyBSZXNldCBmb3JtIGFmdGVyIHNhdmluZ1xuICAgICAgdGhpcy5zdGFnZUZvcm0ucmVzZXQoKTtcblxuICAgICAgLy8gRW1pdCB0aGUgc2F2ZWQgZGF0YSB0byB0aGUgcGFyZW50IGNvbXBvbmVudFxuICAgICAgdGhpcy5zYXZlZC5lbWl0KHN0YWdlRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25EaWFsb2dPcGVuKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnRGlhbG9nIG9wZW5lZDonLCBldmVudCk7XG4gIH1cblxuICBkZWxldGVTdGFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZURhdGEgPSB0aGlzLnN0YWdlRGF0YSgpO1xuICAgIGNvbnNvbGUubG9nKHN0YWdlRGF0YSk7XG4gICAgaWYgKHN0YWdlRGF0YSkge1xuICAgICAgY29uc3Qgc3RhZ2VDb2RlID0gc3RhZ2VEYXRhLkNvZGU7XG4gICAgICBpZiAoc3RhZ2VDb2RlKSB7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgICAgICAuZGVsZXRlV29ya2Zsb3dTdGFnZXMoW3N0YWdlQ29kZV0pXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3RhZ2UgZGVsZXRlZCBzdWNjZXNzZnVsbHk6JywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgbm9kZSBzZXJ2aWNlIHRvIGRlbGV0ZSB0aGUgc3RhZ2VcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSB0aGlzLm5vZGVTZXJ2aWNlLmRlbGV0ZU5vZGUoc3RhZ2VDb2RlKTtcbiAgICAgICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gbm90aWZ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdGFnZTonLCBzdGFnZUNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgc3RhZ2U6JywgZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzdGFnZURhdGEuaWQpIHtcbiAgICAgICAgLy8gQ2FsbCB0aGUgbm9kZSBzZXJ2aWNlIHRvIGRlbGV0ZSB0aGUgc3RhZ2VcbiAgICAgICAgY29uc3QgZGVsZXRlZCA9IHRoaXMubm9kZVNlcnZpY2UuZGVsZXRlTm9kZShzdGFnZURhdGEuaWQpO1xuICAgICAgICBpZiAoZGVsZXRlZCkge1xuICAgICAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gbm90aWZ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdGFnZTonLCBzdGFnZURhdGEuQ29kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx2ZXJiZW4tZGlhbG9ndWVcbiAgW3Nob3dDbG9zZUljb25dPVwidHJ1ZVwiXG4gIFtkaXNtaXNzT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJ0cnVlXCJcbiAgW3NpemVdPVwiJ21lZGl1bSdcIlxuICBbbW9kZV09XCInZHJhd2VyJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW2lzVmlzaWJsZV09XCJ2aXNpYmxlKClcIlxuICBbaGVhZGVyVGVtcGxhdGVdPVwiaGVhZGVyVGVtcGxhdGVcIlxuICBbYm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXG4gIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXG4gIChvcGVuTW9kYWwpPVwib25EaWFsb2dPcGVuKCRldmVudClcIlxuICAoY2xvc2VNb2RhbCk9XCJvbkRpYWxvZ0Nsb3NlKCRldmVudClcIlxuPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwLTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGgyIGNsYXNzPVwidGV4dC14bCBmb250LW1lZGl1bSBtLTBcIj5TdGFnZSBQcm9wZXJ0aWVzPC9oMj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic3RhZ2VGb3JtXCIgY2xhc3M9XCJncmlkIGdhcC15LTRcIj5cbiAgICAgIDwhLS0gU3RhZ2UgTmFtZSAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIG5hbWU9XCJOYW1lXCJcbiAgICAgICAgbGFiZWw9XCJTdGFnZSBOYW1lXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiTmFtZVwiXG4gICAgICAgIHBsYWNlSG9sZGVyPVwiRW50ZXIgU3RhZ2UgTmFtZVwiXG4gICAgICAvPlxuXG4gICAgICA8IS0tIERlc2NyaXB0aW9uIC0tPlxuICAgICAgPHZlcmJlbmEtdGV4dGFyZWFcbiAgICAgICAgbGFiZWw9XCJEZXNjcmlwdGlvblwiXG4gICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJEZXNjcmlwdGlvblwiXG4gICAgICA+PC92ZXJiZW5hLXRleHRhcmVhPlxuXG4gICAgICA8IS0tIFJlY2lwaWVudCBDb3VudCAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIG5hbWU9XCJNaW5Ob09mQWN0b3JcIlxuICAgICAgICBsYWJlbD1cIlJlY2lwaWVudCBDb3VudFwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJNaW5Ob09mQWN0b3JcIlxuICAgICAgICBwbGFjZUhvbGRlcj1cIkVudGVyIENvdW50XCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gUGFzcyBPbiBSdWxlIC0tPlxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgbmFtZT1cIlBhc3NPblJ1bGVcIlxuICAgICAgICBsYWJlbD1cIlBhc3MgT24gUnVsZVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIlBhc3NPblJ1bGVcIlxuICAgICAgICBwbGFjZUhvbGRlcj1cIlNlbGVjdCBSdWxlXCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gRHVyYXRpb24gLS0+XG4gICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICBuYW1lPVwiRHVyYXRpb25cIlxuICAgICAgICBsYWJlbD1cIkR1cmF0aW9uXCJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkR1cmF0aW9uXCJcbiAgICAgICAgcGxhY2VIb2xkZXI9XCJTZXQgRHVyYXRpb25cIlxuICAgICAgLz5cblxuICAgICAgPCEtLSBBY3RvciBSdWxlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiYWN0b3ItcnVsZVwiIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtW3ZhcigtLXZibi1jb2xvci10ZXh0KV1cIj5cbiAgICAgICAgICBBY3RvciBSdWxlXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgaWQ9XCJhY3Rvci1ydWxlXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUnVsZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiYWN0b3JSdWxlc1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiQWN0b3JSdWxlXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBBc3NpZ25tZW50IFR5cGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJhc3NpZ25tZW50XCIgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1bdmFyKC0tdmJuLWNvbG9yLXRleHQpXVwiPlxuICAgICAgICAgIEFzc2lnbm1lbnQgVHlwZVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIGlkPVwiYXNzaWdubWVudFwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCJcbiAgICAgICAgICBbb3B0aW9uc109XCJhc3NpZ25tZW50VHlwZXNcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkFzc2lnbm1lbnRUeXBlXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBUYWdzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwidGFnc1wiIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtW3ZhcigtLXZibi1jb2xvci10ZXh0KV1cIj5cbiAgICAgICAgICBUYWdzXG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgaWQ9XCJ0YWdzXCJcbiAgICAgICAgICBzZWxlY3RLZXk9XCJDb2RlXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiXG4gICAgICAgICAgW29wdGlvbnNdPVwidGFnc1wiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJUYWdzXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgICAgICBmaWx0ZXJCeT1cIk5hbWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIElzIEVudHJ5IFBvaW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJpcy1lbnRyeS1wb2ludFwiIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtW3ZhcigtLXZibi1jb2xvci10ZXh0KV1cIj5cbiAgICAgICAgICBFbnRyeSBQb2ludFxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8dmVyYmVuYS1zd2l0Y2hcbiAgICAgICAgICBpZD1cImlzLWVudHJ5LXBvaW50XCJcbiAgICAgICAgICBvblRleHQ9XCJZZXNcIlxuICAgICAgICAgIG9mZlRleHQ9XCJOb1wiXG4gICAgICAgICAgW29uQ29sb3JdPVwiJ3ZhcigtLXZibi1jb2xvci10ZXh0KSdcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIklzRW50cnlQb2ludFwiXG4gICAgICAgID48L3ZlcmJlbmEtc3dpdGNoPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gSXMgRXhpdCBQb2ludCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiaXMtZXhpdC1wb2ludFwiIGNsYXNzPVwidGV4dC1zbSBmb250LXNlbWlib2xkIHRleHQtW3ZhcigtLXZibi1jb2xvci10ZXh0KV1cIj5cbiAgICAgICAgICBFeGl0IFBvaW50XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDx2ZXJiZW5hLXN3aXRjaFxuICAgICAgICAgIGlkPVwiaXMtZXhpdC1wb2ludFwiXG4gICAgICAgICAgb25UZXh0PVwiWWVzXCJcbiAgICAgICAgICBvZmZUZXh0PVwiTm9cIlxuICAgICAgICAgIFtvbkNvbG9yXT1cIid2YXIoLS12Ym4tY29sb3ItdGV4dCknXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJJc0V4aXRQb2ludFwiXG4gICAgICAgID48L3ZlcmJlbmEtc3dpdGNoPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZm9vdGVyVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDwhLS0gPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgbXItMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInB4LTQgcHktMiBiZy15ZWxsb3ctMzAwIHRleHQtYmxhY2sgcm91bmRlZCB0ZXh0LXNtIGZvbnQtbWVkaXVtXCJcbiAgICAgIChjbGljayk9XCJzYXZlU3RhZ2UoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwic3RhZ2VGb3JtLmludmFsaWRcIlxuICAgID5cbiAgICAgIFNhdmVcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInB4LTQgcHktMiBtci0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGZvbnQtbWVkaXVtXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVTdGFnZSgpXCJcbiAgICA+XG4gICAgICBEZWxldGVcbiAgICA8L2J1dHRvbj4gLS0+XG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICB3aWR0aD1cIjExNHB4XCJcbiAgICAgIGhlaWdodD1cIjM5cHhcIlxuICAgICAgdGV4dD1cIkRlbGV0ZVwiXG4gICAgICBiZ0NvbG9yPVwidmFyKC0tdmJuLWNvbG9yLXRleHQtbXV0ZWQpXCJcbiAgICAgIHRleHRDb2xvcj1cInZhcigtLXZibi1jb2xvci1vbi1wcmltYXJ5KVwiXG4gICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgIChjbGljayk9XCJkZWxldGVTdGFnZSgpXCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cblxuICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgKGNsaWNrKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4gICAgICB0ZXh0PVwiQ2FuY2VsXCJcbiAgICAgIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCJcbiAgICAgIGNsYXNzPVwibWwtYXV0b1wiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIHRleHQ9XCJTYXZlXCJcbiAgICAgIGJnQ29sb3I9XCJ2YXIoLS12Ym4tY29sb3ItcHJpbWFyeSlcIlxuICAgICAgdGV4dENvbG9yPVwidmFyKC0tdmJuLWNvbG9yLW9uLXByaW1hcnkpXCJcbiAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgcGQ9XCIxMHB4IDIwcHhcIlxuICAgICAgd2lkdGg9XCIxMTRweFwiXG4gICAgICBoZWlnaHQ9XCIzOXB4XCJcbiAgICAgIChjbGljayk9XCJzYXZlU3RhZ2UoKVwiXG4gICAgICBbZGlzYWJsZV09XCJzdGFnZUZvcm0uaW52YWxpZFwiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -189,12 +189,12 @@ export class StageNodeComponent {
189
189
  });
190
190
  console.log('Stage properties updated:', stageData);
191
191
  }
192
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.WorkflowDataService }], target: i0.ɵɵFactoryTarget.Component });
193
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", isSubflow: "isSubflow", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled", showShieldDialog: "showShieldDialog", showEscalationDialog: "showEscalationDialog", showFormDialog: "showFormDialog" }, ngImport: i0, template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"></svg:path>\n } @else {\n <svg:rect x=\"0\" y=\"0\" [attr.width]=\"node.width\" [attr.height]=\"node.height\" fill=\"transparent\" stroke=\"#D36CFF\"\n stroke-width=\"1\"></svg:rect>\n }\n\n <!-- Top-left icon: Stage form -->\n <svg:g (click)=\"toggleFormPopup($event)\" class=\"stage-icon\" transform=\"translate(6, 6)\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\" />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g (click)=\"toggleShieldPopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\" fill=\"black\" />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\" />\n </svg:g>\n\n @if (node.stageData?.Code) {\n <!-- Left-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('left', $event)\" class=\"stage-icon\" transform=\"translate(6, 38)\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('right', $event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n }\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g *ngIf=\"hasMultipleConnectedStages\" (click)=\"toggleCodePopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\">\n <svg:text font-family=\"'Plus Jakarta Sans', sans-serif\" font-weight=\"500\" font-size=\"16px\"\n dominant-baseline=\"middle\" [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\">\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g (click)=\"toggleTimerPopup($event)\" class=\"stage-icon\" [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \">\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\" />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text [attr.x]=\"node.width / 2\" [attr.y]=\"node.height / 2\" text-anchor=\"middle\" dominant-baseline=\"middle\"\n [attr.font-size]=\"isSubflow ? '10' : '14'\" fill=\"#000000\">\n {{ truncatedDisplayName }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n", styles: [":host{pointer-events:none}.stage-icon{cursor:pointer;pointer-events:all}.stage-icon:hover path{fill:#d36cff}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StageNodeComponent, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.WorkflowDataService }], target: i0.ɵɵFactoryTarget.Component });
193
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", isSubflow: "isSubflow", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled", showShieldDialog: "showShieldDialog", showEscalationDialog: "showEscalationDialog", showFormDialog: "showFormDialog" }, ngImport: i0, template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"></svg:path>\n } @else {\n <svg:rect x=\"0\" y=\"0\" [attr.width]=\"node.width\" [attr.height]=\"node.height\" fill=\"transparent\" stroke=\"#D36CFF\"\n stroke-width=\"1\"></svg:rect>\n }\n\n <!-- Top-left icon: Stage form -->\n <svg:g (click)=\"toggleFormPopup($event)\" class=\"stage-icon\" transform=\"translate(6, 6)\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\" />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g (click)=\"toggleShieldPopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\" fill=\"black\" />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\" />\n </svg:g>\n\n @if (node.stageData?.Code) {\n <!-- Left-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('left', $event)\" class=\"stage-icon\" transform=\"translate(6, 38)\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('right', $event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n }\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g *ngIf=\"hasMultipleConnectedStages\" (click)=\"toggleCodePopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\">\n <svg:text font-family=\"'Plus Jakarta Sans', sans-serif\" font-weight=\"500\" font-size=\"16px\"\n dominant-baseline=\"middle\" [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\">\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g (click)=\"toggleTimerPopup($event)\" class=\"stage-icon\" [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \">\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\" />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text [attr.x]=\"node.width / 2\" [attr.y]=\"node.height / 2\" text-anchor=\"middle\" dominant-baseline=\"middle\"\n [attr.font-size]=\"isSubflow ? '10' : '14'\" fill=\"var(--vbn-color-text)\">\n {{ truncatedDisplayName }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n", styles: [":host{pointer-events:none}.stage-icon{cursor:pointer;pointer-events:all}.stage-icon:hover path{fill:#d36cff}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
194
194
  }
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, decorators: [{
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StageNodeComponent, decorators: [{
196
196
  type: Component,
197
- args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"></svg:path>\n } @else {\n <svg:rect x=\"0\" y=\"0\" [attr.width]=\"node.width\" [attr.height]=\"node.height\" fill=\"transparent\" stroke=\"#D36CFF\"\n stroke-width=\"1\"></svg:rect>\n }\n\n <!-- Top-left icon: Stage form -->\n <svg:g (click)=\"toggleFormPopup($event)\" class=\"stage-icon\" transform=\"translate(6, 6)\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\" />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g (click)=\"toggleShieldPopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\" fill=\"black\" />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\" />\n </svg:g>\n\n @if (node.stageData?.Code) {\n <!-- Left-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('left', $event)\" class=\"stage-icon\" transform=\"translate(6, 38)\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('right', $event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n }\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g *ngIf=\"hasMultipleConnectedStages\" (click)=\"toggleCodePopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\">\n <svg:text font-family=\"'Plus Jakarta Sans', sans-serif\" font-weight=\"500\" font-size=\"16px\"\n dominant-baseline=\"middle\" [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\">\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g (click)=\"toggleTimerPopup($event)\" class=\"stage-icon\" [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \">\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\" />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text [attr.x]=\"node.width / 2\" [attr.y]=\"node.height / 2\" text-anchor=\"middle\" dominant-baseline=\"middle\"\n [attr.font-size]=\"isSubflow ? '10' : '14'\" fill=\"#000000\">\n {{ truncatedDisplayName }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n", styles: [":host{pointer-events:none}.stage-icon{cursor:pointer;pointer-events:all}.stage-icon:hover path{fill:#d36cff}\n"] }]
197
+ args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Shape: Rectangle for stage, Hexagon for subflow -->\n @if (isSubflow) {\n <svg:path [attr.d]=\"\n 'M 1 ' +\n node.height / 4 +\n ' L ' +\n node.width / 2 +\n ' 1 L ' +\n (node.width - 1) +\n ' ' +\n node.height / 4 +\n ' V ' +\n (node.height * 3) / 4 +\n ' L ' +\n node.width / 2 +\n ' ' +\n (node.height - 1) +\n ' L 1 ' +\n (node.height * 3) / 4 +\n ' Z'\n \" fill=\"transparent\" stroke=\"#D36CFF\" stroke-width=\"1\"></svg:path>\n } @else {\n <svg:rect x=\"0\" y=\"0\" [attr.width]=\"node.width\" [attr.height]=\"node.height\" fill=\"transparent\" stroke=\"#D36CFF\"\n stroke-width=\"1\"></svg:rect>\n }\n\n <!-- Top-left icon: Stage form -->\n <svg:g (click)=\"toggleFormPopup($event)\" class=\"stage-icon\" transform=\"translate(6, 6)\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\" />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g (click)=\"toggleShieldPopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\">\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect x=\"-2\" y=\"-2\" width=\"24\" height=\"24\" fill=\"transparent\" style=\"cursor: pointer\" />\n\n <svg:path d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\" fill=\"black\" />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\" />\n </svg:g>\n\n @if (node.stageData?.Code) {\n <!-- Left-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('left', $event)\" class=\"stage-icon\" transform=\"translate(6, 38)\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g (click)=\"toggleActionPopup('right', $event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\">\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n }\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g *ngIf=\"hasMultipleConnectedStages\" (click)=\"toggleCodePopup($event)\" class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\">\n <svg:text font-family=\"'Plus Jakarta Sans', sans-serif\" font-weight=\"500\" font-size=\"16px\"\n dominant-baseline=\"middle\" [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\">\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g (click)=\"toggleTimerPopup($event)\" class=\"stage-icon\" [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \">\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\" />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text [attr.x]=\"node.width / 2\" [attr.y]=\"node.height / 2\" text-anchor=\"middle\" dominant-baseline=\"middle\"\n [attr.font-size]=\"isSubflow ? '10' : '14'\" fill=\"var(--vbn-color-text)\">\n {{ truncatedDisplayName }}\n </svg:text>\n</svg:g>\n\n<!-- <lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog> -->\n", styles: [":host{pointer-events:none}.stage-icon{cursor:pointer;pointer-events:all}.stage-icon:hover path{fill:#d36cff}\n"] }]
198
198
  }], ctorParameters: () => [{ type: i1.WorkflowDesignerState }, { type: i2.WorkflowDataService }], propDecorators: { node: [{
199
199
  type: Input
200
200
  }], isStartNode: [{
@@ -214,4 +214,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
214
214
  }], showFormDialog: [{
215
215
  type: Output
216
216
  }] } });
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBVXhGLE1BQU0sT0FBTyxrQkFBa0I7SUErQ25CO0lBQ0E7SUEvQ0QsSUFBSSxDQUFRO0lBQ1osV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBRWhELElBQUksV0FBVztRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUM7UUFDaEYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFO1lBQ2pD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QUFDO0lBQ3RELENBQUM7d0dBM09VLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDhZQ2hCL0IsOHBLQTZGQTs7NEZEN0VhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSx1QkFBdUI7NEhBS3hCLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFjSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUlHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXNjYWxhdGlvblR5cGUsIEZvcm0sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdmc6Z1tsaWItc3RhZ2Utbm9kZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YWdlLW5vZGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFnZU5vZGVDb21wb25lbnQge1xuICBASW5wdXQoKSBub2RlITogTm9kZTtcbiAgQElucHV0KCkgaXNTdGFydE5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNTdWJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHt9O1xuXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzU3ViZmxvdykge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgdGhpcy5ub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCAnU3ViZmxvdyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vZGUuc3RhZ2VEYXRhPy5OYW1lIHx8ICdTdGFnZSc7XG4gIH1cblxuICBnZXQgdHJ1bmNhdGVkRGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZS5sZW5ndGggPiAxMlxuICAgICAgPyB0aGlzLmRpc3BsYXlOYW1lLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJ1xuICAgICAgOiB0aGlzLmRpc3BsYXlOYW1lO1xuICB9XG4gIEBPdXRwdXQoKSBzdGFnZVByb3BlcnRpZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgcGFyYWxsZWxFeGVjdXRpb25Ub2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc291cmNlTm9kZUlkOiBzdHJpbmc7XG4gICAgaXNQYXJhbGxlbDogYm9vbGVhbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNob3dTaGllbGREaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNob3dFc2NhbGF0aW9uRGlhbG9nID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc3RhZ2VJZDogc3RyaW5nO1xuICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2hvd0Zvcm1EaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gUHJvcGVydGllcyBmb3IgaWNvbiBjbGljayBldmVudHNcbiAgc2hvd0Zvcm1Qb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93VGltZXJQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWN0aW9uUG9wdXBMZWZ0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3Rpb25Qb3B1cFJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dDb2RlUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3Jtc0xpc3Q6IEZvcm1bXSA9IFtdO1xuICBpc0xvYWRpbmdGb3JtczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm1Qb3B1cFg6IG51bWJlciA9IDA7XG4gIGZvcm1Qb3B1cFk6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdGF0ZTogV29ya2Zsb3dEZXNpZ25lclN0YXRlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU3RhZ2Ugbm9kZSBpbml0aWFsaXplZCB3aXRoOicsIHRoaXMubm9kZSk7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgdGhpcyBzdGFnZSBoYXMgbXVsdGlwbGUgb3V0Z29pbmcgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3RhZ2VzXG4gIHVwZGF0ZUNvbm5lY3RlZFN0YWdlc0luZm8oKTogdm9pZCB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBjb25uZWN0aW9ucyB0aGF0IGNvbm5lY3QgdG8gc3RhZ2VzXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGNvbm4pID0+IGNvbm4uc291cmNlTm9kZUlkID09PSB0aGlzLm5vZGUuaWRcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBub2RlcyBhcmUgc3RhZ2VzXG4gICAgY29uc3QgY29ubmVjdGVkU3RhZ2VOb2RlcyA9IG91dGdvaW5nQ29ubmVjdGlvbnNcbiAgICAgIC5tYXAoKGNvbm4pID0+IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKSlcbiAgICAgIC5maWx0ZXIoKG5vZGVJbmZvKSA9PiBub2RlSW5mbyAmJiBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScpO1xuXG4gICAgdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5sZW5ndGggPiAxO1xuICAgIHRoaXMubm9kZS5oYXNQYXJhbGxlbFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMuZXZlcnkoXG4gICAgICAobmQpID0+IG5kPy5ub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzTXVsdGlwbGVDb25uZWN0ZWRTdGFnZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1BhcmFsbGVsRXhlY3V0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5vZGUuaGFzUGFyYWxsZWxTdGFnZXMgPT09IHRydWU7XG4gIH1cblxuICBzZWxlY3RGb3JtKGZvcm06IEZvcm0gfCBudWxsKSB7XG4gICAgLy8gSWYgZm9ybSBpcyBudWxsLCB3ZSdyZSBjbGVhcmluZyB0aGUgc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLm5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkID0gZm9ybS5Db2RlO1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YS5mb3JtTmFtZSA9IGZvcm0uTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2xlYXIgZm9ybSBzZWxlY3Rpb25cbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1JZDtcbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBwb3B1cFxuICAgIHRoaXMuc2hvd0Zvcm1Qb3B1cCA9IGZhbHNlO1xuXG4gICAgLy8gRW1pdCBhbiBldmVudCB0byB1cGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICB0aGlzLnN0YWdlUHJvcGVydGllc1VwZGF0ZWQuZW1pdCh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZS5pZCxcbiAgICAgIHN0YWdlRGF0YTogdGhpcy5ub2RlLnN0YWdlRGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUZvcm1Qb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIHBvc2l0aW9uIGZvciB0aGUgcG9wdXBcbiAgICAgIC8vIGNvbnN0IHJlY3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgLy8gdGhpcy5mb3JtUG9wdXBYID0gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAvLyB0aGlzLmZvcm1Qb3B1cFkgPSByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm1EaWFsb2cuZW1pdChldmVudCk7XG5cbiAgICAvLyAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRoZSBwb3B1cCwgbG9hZCBmb3Jtc1xuICAgIC8vIGlmICghdGhpcy5zaG93Rm9ybVBvcHVwKSB7XG4gICAgLy8gICB0aGlzLmlzTG9hZGluZ0Zvcm1zID0gdHJ1ZTtcbiAgICAvLyAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAvLyAgICAgLmdldEZvcm1zKClcbiAgICAvLyAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5mb3Jtc0xpc3QgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KVxuICAgIC8vICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtczonLCBlcnJvcik7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyB0aGlzLnNob3dGb3JtUG9wdXAgPSAhdGhpcy5zaG93Rm9ybVBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlU2hpZWxkUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1NoaWVsZCBpY29uIGNsaWNrZWQgZm9yIG5vZGU6JywgdGhpcy5ub2RlLmlkKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YWdlRGF0YSwgdGhpcy5ub2RlKTtcbiAgICB0aGlzLnNob3dTaGllbGREaWFsb2cuZW1pdCh0aGlzLm5vZGUuaWQpO1xuICB9XG5cbiAgdG9nZ2xlVGltZXJQb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5zaG93VGltZXJQb3B1cCA9ICF0aGlzLnNob3dUaW1lclBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9uUG9wdXAoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0JywgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvblBvcHVwTGVmdCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cExlZnQ7XG4gICAgICB0aGlzLnNob3dFc2NhbGF0aW9uRGlhbG9nLmVtaXQoe1xuICAgICAgICBzdGFnZUlkOiB0aGlzLm5vZGUuaWQsXG4gICAgICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlLk9uRW50cnksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QWN0aW9uUG9wdXBSaWdodCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cFJpZ2h0O1xuICAgICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZy5lbWl0KHtcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgICB0eXBlOiBFc2NhbGF0aW9uVHlwZS5PbkV4aXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2RlUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHBhcmFsbGVsIGV4ZWN1dGlvbiBzdGF0ZVxuICAgIGNvbnN0IG5ld1BhcmFsbGVsU3RhdGUgPSAhdGhpcy5pc1BhcmFsbGVsRXhlY3V0aW9uO1xuXG4gICAgLy8gVXBkYXRlIHRoaXMgbm9kZSdzIHN0YWdlIGRhdGFcbiAgICBpZiAoIXRoaXMubm9kZS5zdGFnZURhdGEpIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmhhc1BhcmFsbGVsU3RhZ2VzID0gbmV3UGFyYWxsZWxTdGF0ZTtcblxuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gdGhpcy5ub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXMubWFwKChzdywgaSkgPT4ge1xuICAgICAgc3cubm9kZXMgPSBzdz8ubm9kZXM/Lm1hcCgoc3dOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGNvbm5lY3RlZFN0YWdlTm9kZXNcbiAgICAgICAgICAubWFwKChjb25uZWN0ZWQpID0+IGNvbm5lY3RlZD8ubm9kZSlcbiAgICAgICAgICAuZmluZCgobmRlKSA9PiBuZGU/LmlkID09PSBzd05vZGUuaWQpO1xuICAgICAgICBpZiAoZm91bmROb2RlPy5zdGFnZURhdGEpIHtcbiAgICAgICAgICBmb3VuZE5vZGUuc3RhZ2VEYXRhLklzUGFyYWxsZWwgPSBuZXdQYXJhbGxlbFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzd05vZGU7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN3O1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUGFyYWxsZWwgZXhlY3V0aW9uICR7bmV3UGFyYWxsZWxTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCdcbiAgICAgIH0gZm9yIG5vZGU6YCxcbiAgICAgIHRoaXMubm9kZS5pZFxuICAgICk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGNvbm5lY3Rpb25zIGNoYW5nZVxuICByZWZyZXNoU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICBvblN0YWdlUHJvcGVydGllc1NhdmVkKHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPikge1xuICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIG5vZGUgaWQgYW5kIHVwZGF0ZWQgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnU3RhZ2UgcHJvcGVydGllcyB1cGRhdGVkOicsIHN0YWdlRGF0YSk7XG4gIH1cbn1cbiIsIjxzdmc6Zz5cbiAgPCEtLSBTaGFwZTogUmVjdGFuZ2xlIGZvciBzdGFnZSwgSGV4YWdvbiBmb3Igc3ViZmxvdyAtLT5cbiAgQGlmIChpc1N1YmZsb3cpIHtcbiAgPHN2ZzpwYXRoIFthdHRyLmRdPVwiXG4gICAgICAnTSAxICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgTCAnICtcbiAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICcgMSBMICcgK1xuICAgICAgKG5vZGUud2lkdGggLSAxKSArXG4gICAgICAnICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgViAnICtcbiAgICAgIChub2RlLmhlaWdodCAqIDMpIC8gNCArXG4gICAgICAnIEwgJyArXG4gICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAnICcgK1xuICAgICAgKG5vZGUuaGVpZ2h0IC0gMSkgK1xuICAgICAgJyBMIDEgJyArXG4gICAgICAobm9kZS5oZWlnaHQgKiAzKSAvIDQgK1xuICAgICAgJyBaJ1xuICAgIFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCI+PC9zdmc6cGF0aD5cbiAgfSBAZWxzZSB7XG4gIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgW2F0dHIud2lkdGhdPVwibm9kZS53aWR0aFwiIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgIHN0cm9rZS13aWR0aD1cIjFcIj48L3N2ZzpyZWN0PlxuICB9XG5cbiAgPCEtLSBUb3AtbGVmdCBpY29uOiBTdGFnZSBmb3JtIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZUZvcm1Qb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDYpXCI+XG4gICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgPHN2ZzpyZWN0IHg9XCItMlwiIHk9XCItMlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgLz5cblxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xNi41IDIwLjQ3NVYxNy40NzVIMTMuNVYxNi40NzVIMTYuNVYxMy40NzVIMTcuNVYxNi40NzVIMjAuNVYxNy40NzVIMTcuNVYyMC40NzVIMTYuNVpNMy41IDE3LjVWMTYuNUg0LjVWMTcuNUgzLjVaTTYuNSAxNy41VjE2LjVIMTEuNTE3QzExLjUwNTcgMTYuNjc2NyAxMS41MDQzIDE2Ljg0NSAxMS41MTMgMTcuMDA1QzExLjUyMSAxNy4xNjUgMTEuNTMxIDE3LjMzIDExLjU0MyAxNy41SDYuNVpNMy41IDEzLjVWMTIuNUg0LjVWMTMuNUgzLjVaTTYuNSAxMy41VjEyLjVIMTMuODA0QzEzLjYxMjcgMTIuNjM4NyAxMy40MzMzIDEyLjc5MTMgMTMuMjY2IDEyLjk1OEMxMy4wOTkzIDEzLjEyNDcgMTIuOTM3NyAxMy4zMDUzIDEyLjc4MSAxMy41SDYuNVpNMy41IDkuNVY4LjVINC41VjkuNUgzLjVaTTYuNSA5LjVWOC41SDE4LjVWOS41SDYuNVpNMy41IDUuNVY0LjVINC41VjUuNUgzLjVaTTYuNSA1LjVWNC41SDE4LjVWNS41SDYuNVpcIlxuICAgICAgW2F0dHIuZmlsbF09XCJub2RlLnN0YWdlRGF0YT8uZm9ybUlkID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBUb3AtcmlnaHQgaWNvbjogU2hpZWxkIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZVNoaWVsZFBvcHVwKCRldmVudClcIiBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcgKyAobm9kZS53aWR0aCAtIDMwKSArICcsIDYpJ1wiPlxuICAgIDwhLS0gVHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRvIGNhcHR1cmUgY2xpY2tzIC0tPlxuICAgIDxzdmc6cmVjdCB4PVwiLTJcIiB5PVwiLTJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XG5cbiAgICA8c3ZnOnBhdGggZD1cIk03LjUgMTJIMTYuNVYxMy41SDcuNVYxMlpNNy41IDcuNUgxNi41VjlINy41VjcuNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMiAyMi41TDcuMzY4MDEgMjAuMDMwM0M2LjA0NzQgMTkuMzI3OSA0Ljk0MzAzIDE4LjI3OTEgNC4xNzM0OCAxNi45OTY0QzMuNDAzOTMgMTUuNzEzOCAyLjk5ODI1IDE0LjI0NTggMy4wMDAwMSAxMi43NVYzQzMuMDAwMDEgMi42MDIxOCAzLjE1ODA0IDIuMjIwNjQgMy40MzkzNSAxLjkzOTM0QzMuNzIwNjUgMS42NTgwNCA0LjEwMjE4IDEuNSA0LjUwMDAxIDEuNUgxOS41QzE5Ljg5NzggMS41IDIwLjI3OTQgMS42NTgwNCAyMC41NjA3IDEuOTM5MzRDMjAuODQyIDIuMjIwNjQgMjEgMi42MDIxOCAyMSAzVjEyLjc1QzIxLjAwMTggMTQuMjQ1OCAyMC41OTYxIDE1LjcxMzggMTkuODI2NSAxNi45OTY0QzE5LjA1NyAxOC4yNzkxIDE3Ljk1MjYgMTkuMzI3OSAxNi42MzIgMjAuMDMwM0wxMiAyMi41Wk00LjUwMDAxIDNWMTIuNzVDNC40OTkxNyAxMy45NzM4IDQuODMxNDEgMTUuMTc0NyA1LjQ2MTExIDE2LjIyNEM2LjA5MDgyIDE3LjI3MzMgNi45OTQyMyAxOC4xMzE1IDguMDc0NTEgMTguNzA2NUwxMiAyMC43OTk3TDE1LjkyNTUgMTguNzA3M0MxNy4wMDU5IDE4LjEzMjIgMTcuOTA5NCAxNy4yNzM5IDE4LjUzOTEgMTYuMjI0NEMxOS4xNjg4IDE1LjE3NSAxOS41MDEgMTMuOTczOSAxOS41IDEyLjc1VjNINC41MDAwMVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICBAaWYgKG5vZGUuc3RhZ2VEYXRhPy5Db2RlKSB7XG4gIDwhLS0gTGVmdC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ2xlZnQnLCAkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDM4KVwiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBSaWdodC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ3JpZ2h0JywgJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgMzgpJ1wiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG4gIH1cblxuICA8IS0tIEJvdHRvbS1sZWZ0IGljb246IERvdWJsZSBzbGFzaCB0ZXh0IC0tPlxuICA8c3ZnOmcgKm5nSWY9XCJoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlc1wiIChjbGljayk9XCJ0b2dnbGVDb2RlUG9wdXAoJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoNiwgJyArIChub2RlLmhlaWdodCAtIDE2KSArICcpJ1wiPlxuICAgIDxzdmc6dGV4dCBmb250LWZhbWlseT1cIidQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWZcIiBmb250LXdlaWdodD1cIjUwMFwiIGZvbnQtc2l6ZT1cIjE2cHhcIlxuICAgICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIiBbYXR0ci5maWxsXT1cImlzUGFyYWxsZWxFeGVjdXRpb24gPyAnI0QzNkNGRicgOiAnYmxhY2snXCI+XG4gICAgICAvL1xuICAgIDwvc3ZnOnRleHQ+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tcmlnaHQgaWNvbjogVGltZXIgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlVGltZXJQb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAnICsgKG5vZGUuaGVpZ2h0IC0gMzApICsgJyknXG4gICAgXCI+XG4gICAgPHN2ZzpwYXRoXG4gICAgICBkPVwiTTExLjUgM0MxNC4wMTk2IDMgMTYuNDM1OSA0LjAwMDg5IDE4LjIxNzUgNS43ODI0OUMxOS45OTkxIDcuNTY0MDggMjEgOS45ODA0NCAyMSAxMi41QzIxIDE1LjAxOTYgMTkuOTk5MSAxNy40MzU5IDE4LjIxNzUgMTkuMjE3NUMxNi40MzU5IDIwLjk5OTEgMTQuMDE5NiAyMiAxMS41IDIyQzguOTgwNDQgMjIgNi41NjQwOCAyMC45OTkxIDQuNzgyNDkgMTkuMjE3NUMzLjAwMDg5IDE3LjQzNTkgMiAxNS4wMTk2IDIgMTIuNUMyIDkuOTgwNDQgMy4wMDA4OSA3LjU2NDA4IDQuNzgyNDkgNS43ODI0OUM2LjU2NDA4IDQuMDAwODkgOC45ODA0NCAzIDExLjUgM1pNMTEuNSA0QzkuMjQ1NjYgNCA3LjA4MzY1IDQuODk1NTMgNS40ODk1OSA2LjQ4OTU5QzMuODk1NTMgOC4wODM2NSAzIDEwLjI0NTcgMyAxMi41QzMgMTQuNzU0MyAzLjg5NTUzIDE2LjkxNjMgNS40ODk1OSAxOC41MTA0QzcuMDgzNjUgMjAuMTA0NSA5LjI0NTY2IDIxIDExLjUgMjFDMTIuNjE2MiAyMSAxMy43MjE1IDIwLjc4MDEgMTQuNzUyOCAyMC4zNTNDMTUuNzg0MSAxOS45MjU4IDE2LjcyMTEgMTkuMjk5NyAxNy41MTA0IDE4LjUxMDRDMTguMjk5NyAxNy43MjExIDE4LjkyNTggMTYuNzg0MSAxOS4zNTMgMTUuNzUyOEMxOS43ODAxIDE0LjcyMTUgMjAgMTMuNjE2MiAyMCAxMi41QzIwIDEwLjI0NTcgMTkuMTA0NSA4LjA4MzY1IDE3LjUxMDQgNi40ODk1OUMxNS45MTYzIDQuODk1NTMgMTMuNzU0MyA0IDExLjUgNFpNMTEgN0gxMlYxMi40MkwxNi43IDE1LjEzTDE2LjIgMTZMMTEgMTNWN1pcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExhYmVsIGluIHRoZSBjZW50ZXIgLS0+XG4gIDxzdmc6dGV4dCBbYXR0ci54XT1cIm5vZGUud2lkdGggLyAyXCIgW2F0dHIueV09XCJub2RlLmhlaWdodCAvIDJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGRvbWluYW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICBbYXR0ci5mb250LXNpemVdPVwiaXNTdWJmbG93ID8gJzEwJyA6ICcxNCdcIiBmaWxsPVwiIzAwMDAwMFwiPlxuICAgIHt7IHRydW5jYXRlZERpc3BsYXlOYW1lIH19XG4gIDwvc3ZnOnRleHQ+XG48L3N2ZzpnPlxuXG48IS0tIDxsaWItc3RhZ2UtZGlhbG9nXG4gIFt2aXNpYmxlXT1cInNob3dTaGllbGRQb3B1cCgpXCJcbiAgW3N0YWdlRGF0YV09XCJub2RlLnN0YWdlRGF0YSB8fCB7fVwiXG4gIChjbG9zZWQpPVwic2hvd1NoaWVsZFBvcHVwLnNldChmYWxzZSlcIlxuICAoc2F2ZWQpPVwib25TdGFnZVByb3BlcnRpZXNTYXZlZCgkZXZlbnQpXCJcbj48L2xpYi1zdGFnZS1kaWFsb2c+IC0tPlxuIl19
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sbUNBQW1DLENBQUM7Ozs7O0FBVXhGLE1BQU0sT0FBTyxrQkFBa0I7SUErQ25CO0lBQ0E7SUEvQ0QsSUFBSSxDQUFRO0lBQ1osV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBRWhELElBQUksV0FBVztRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxTQUFTLENBQUM7UUFDaEYsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFO1lBQ2pD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QUFDO0lBQ3RELENBQUM7d0dBM09VLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDhZQ2hCL0IsNHFLQTZGQTs7NEZEN0VhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSx1QkFBdUI7NEhBS3hCLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFjSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUlHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXNjYWxhdGlvblR5cGUsIEZvcm0sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdmc6Z1tsaWItc3RhZ2Utbm9kZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YWdlLW5vZGUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFnZU5vZGVDb21wb25lbnQge1xuICBASW5wdXQoKSBub2RlITogTm9kZTtcbiAgQElucHV0KCkgaXNTdGFydE5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNTdWJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHt9O1xuXG4gIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzU3ViZmxvdykge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgdGhpcy5ub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCAnU3ViZmxvdyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vZGUuc3RhZ2VEYXRhPy5OYW1lIHx8ICdTdGFnZSc7XG4gIH1cblxuICBnZXQgdHJ1bmNhdGVkRGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZS5sZW5ndGggPiAxMlxuICAgICAgPyB0aGlzLmRpc3BsYXlOYW1lLnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJ1xuICAgICAgOiB0aGlzLmRpc3BsYXlOYW1lO1xuICB9XG4gIEBPdXRwdXQoKSBzdGFnZVByb3BlcnRpZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgcGFyYWxsZWxFeGVjdXRpb25Ub2dnbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc291cmNlTm9kZUlkOiBzdHJpbmc7XG4gICAgaXNQYXJhbGxlbDogYm9vbGVhbjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHNob3dTaGllbGREaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNob3dFc2NhbGF0aW9uRGlhbG9nID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgc3RhZ2VJZDogc3RyaW5nO1xuICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2hvd0Zvcm1EaWFsb2cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLy8gUHJvcGVydGllcyBmb3IgaWNvbiBjbGljayBldmVudHNcbiAgc2hvd0Zvcm1Qb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93VGltZXJQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWN0aW9uUG9wdXBMZWZ0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3Rpb25Qb3B1cFJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dDb2RlUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3Jtc0xpc3Q6IEZvcm1bXSA9IFtdO1xuICBpc0xvYWRpbmdGb3JtczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm1Qb3B1cFg6IG51bWJlciA9IDA7XG4gIGZvcm1Qb3B1cFk6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdGF0ZTogV29ya2Zsb3dEZXNpZ25lclN0YXRlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU3RhZ2Ugbm9kZSBpbml0aWFsaXplZCB3aXRoOicsIHRoaXMubm9kZSk7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgdGhpcyBzdGFnZSBoYXMgbXVsdGlwbGUgb3V0Z29pbmcgY29ubmVjdGlvbnMgdG8gb3RoZXIgc3RhZ2VzXG4gIHVwZGF0ZUNvbm5lY3RlZFN0YWdlc0luZm8oKTogdm9pZCB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBvdXRnb2luZyBjb25uZWN0aW9ucyB0aGF0IGNvbm5lY3QgdG8gc3RhZ2VzXG4gICAgY29uc3Qgb3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGNvbm4pID0+IGNvbm4uc291cmNlTm9kZUlkID09PSB0aGlzLm5vZGUuaWRcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBub2RlcyBhcmUgc3RhZ2VzXG4gICAgY29uc3QgY29ubmVjdGVkU3RhZ2VOb2RlcyA9IG91dGdvaW5nQ29ubmVjdGlvbnNcbiAgICAgIC5tYXAoKGNvbm4pID0+IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKSlcbiAgICAgIC5maWx0ZXIoKG5vZGVJbmZvKSA9PiBub2RlSW5mbyAmJiBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScpO1xuXG4gICAgdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5sZW5ndGggPiAxO1xuICAgIHRoaXMubm9kZS5oYXNQYXJhbGxlbFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMuZXZlcnkoXG4gICAgICAobmQpID0+IG5kPy5ub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzTXVsdGlwbGVDb25uZWN0ZWRTdGFnZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1BhcmFsbGVsRXhlY3V0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5vZGUuaGFzUGFyYWxsZWxTdGFnZXMgPT09IHRydWU7XG4gIH1cblxuICBzZWxlY3RGb3JtKGZvcm06IEZvcm0gfCBudWxsKSB7XG4gICAgLy8gSWYgZm9ybSBpcyBudWxsLCB3ZSdyZSBjbGVhcmluZyB0aGUgc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLm5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkID0gZm9ybS5Db2RlO1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YS5mb3JtTmFtZSA9IGZvcm0uTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2xlYXIgZm9ybSBzZWxlY3Rpb25cbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1JZDtcbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBwb3B1cFxuICAgIHRoaXMuc2hvd0Zvcm1Qb3B1cCA9IGZhbHNlO1xuXG4gICAgLy8gRW1pdCBhbiBldmVudCB0byB1cGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICB0aGlzLnN0YWdlUHJvcGVydGllc1VwZGF0ZWQuZW1pdCh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZS5pZCxcbiAgICAgIHN0YWdlRGF0YTogdGhpcy5ub2RlLnN0YWdlRGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUZvcm1Qb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIHBvc2l0aW9uIGZvciB0aGUgcG9wdXBcbiAgICAgIC8vIGNvbnN0IHJlY3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgLy8gdGhpcy5mb3JtUG9wdXBYID0gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAvLyB0aGlzLmZvcm1Qb3B1cFkgPSByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm1EaWFsb2cuZW1pdChldmVudCk7XG5cbiAgICAvLyAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRoZSBwb3B1cCwgbG9hZCBmb3Jtc1xuICAgIC8vIGlmICghdGhpcy5zaG93Rm9ybVBvcHVwKSB7XG4gICAgLy8gICB0aGlzLmlzTG9hZGluZ0Zvcm1zID0gdHJ1ZTtcbiAgICAvLyAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAvLyAgICAgLmdldEZvcm1zKClcbiAgICAvLyAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gICAgICAgdGhpcy5mb3Jtc0xpc3QgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KVxuICAgIC8vICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtczonLCBlcnJvcik7XG4gICAgLy8gICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cbiAgICAvLyB0aGlzLnNob3dGb3JtUG9wdXAgPSAhdGhpcy5zaG93Rm9ybVBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlU2hpZWxkUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1NoaWVsZCBpY29uIGNsaWNrZWQgZm9yIG5vZGU6JywgdGhpcy5ub2RlLmlkKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0YWdlRGF0YSwgdGhpcy5ub2RlKTtcbiAgICB0aGlzLnNob3dTaGllbGREaWFsb2cuZW1pdCh0aGlzLm5vZGUuaWQpO1xuICB9XG5cbiAgdG9nZ2xlVGltZXJQb3B1cChldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5zaG93VGltZXJQb3B1cCA9ICF0aGlzLnNob3dUaW1lclBvcHVwO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9uUG9wdXAoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0JywgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSAnbGVmdCcpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvblBvcHVwTGVmdCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cExlZnQ7XG4gICAgICB0aGlzLnNob3dFc2NhbGF0aW9uRGlhbG9nLmVtaXQoe1xuICAgICAgICBzdGFnZUlkOiB0aGlzLm5vZGUuaWQsXG4gICAgICAgIHR5cGU6IEVzY2FsYXRpb25UeXBlLk9uRW50cnksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QWN0aW9uUG9wdXBSaWdodCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cFJpZ2h0O1xuICAgICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZy5lbWl0KHtcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgICB0eXBlOiBFc2NhbGF0aW9uVHlwZS5PbkV4aXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2RlUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHBhcmFsbGVsIGV4ZWN1dGlvbiBzdGF0ZVxuICAgIGNvbnN0IG5ld1BhcmFsbGVsU3RhdGUgPSAhdGhpcy5pc1BhcmFsbGVsRXhlY3V0aW9uO1xuXG4gICAgLy8gVXBkYXRlIHRoaXMgbm9kZSdzIHN0YWdlIGRhdGFcbiAgICBpZiAoIXRoaXMubm9kZS5zdGFnZURhdGEpIHtcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGEgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmhhc1BhcmFsbGVsU3RhZ2VzID0gbmV3UGFyYWxsZWxTdGF0ZTtcblxuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gdGhpcy5ub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXMubWFwKChzdywgaSkgPT4ge1xuICAgICAgc3cubm9kZXMgPSBzdz8ubm9kZXM/Lm1hcCgoc3dOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGNvbm5lY3RlZFN0YWdlTm9kZXNcbiAgICAgICAgICAubWFwKChjb25uZWN0ZWQpID0+IGNvbm5lY3RlZD8ubm9kZSlcbiAgICAgICAgICAuZmluZCgobmRlKSA9PiBuZGU/LmlkID09PSBzd05vZGUuaWQpO1xuICAgICAgICBpZiAoZm91bmROb2RlPy5zdGFnZURhdGEpIHtcbiAgICAgICAgICBmb3VuZE5vZGUuc3RhZ2VEYXRhLklzUGFyYWxsZWwgPSBuZXdQYXJhbGxlbFN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzd05vZGU7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN3O1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUGFyYWxsZWwgZXhlY3V0aW9uICR7bmV3UGFyYWxsZWxTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCdcbiAgICAgIH0gZm9yIG5vZGU6YCxcbiAgICAgIHRoaXMubm9kZS5pZFxuICAgICk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGNvbm5lY3Rpb25zIGNoYW5nZVxuICByZWZyZXNoU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk7XG4gIH1cblxuICBvblN0YWdlUHJvcGVydGllc1NhdmVkKHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPikge1xuICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIG5vZGUgaWQgYW5kIHVwZGF0ZWQgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnU3RhZ2UgcHJvcGVydGllcyB1cGRhdGVkOicsIHN0YWdlRGF0YSk7XG4gIH1cbn1cbiIsIjxzdmc6Zz5cbiAgPCEtLSBTaGFwZTogUmVjdGFuZ2xlIGZvciBzdGFnZSwgSGV4YWdvbiBmb3Igc3ViZmxvdyAtLT5cbiAgQGlmIChpc1N1YmZsb3cpIHtcbiAgPHN2ZzpwYXRoIFthdHRyLmRdPVwiXG4gICAgICAnTSAxICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgTCAnICtcbiAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICcgMSBMICcgK1xuICAgICAgKG5vZGUud2lkdGggLSAxKSArXG4gICAgICAnICcgK1xuICAgICAgbm9kZS5oZWlnaHQgLyA0ICtcbiAgICAgICcgViAnICtcbiAgICAgIChub2RlLmhlaWdodCAqIDMpIC8gNCArXG4gICAgICAnIEwgJyArXG4gICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAnICcgK1xuICAgICAgKG5vZGUuaGVpZ2h0IC0gMSkgK1xuICAgICAgJyBMIDEgJyArXG4gICAgICAobm9kZS5oZWlnaHQgKiAzKSAvIDQgK1xuICAgICAgJyBaJ1xuICAgIFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCI+PC9zdmc6cGF0aD5cbiAgfSBAZWxzZSB7XG4gIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgW2F0dHIud2lkdGhdPVwibm9kZS53aWR0aFwiIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgIHN0cm9rZS13aWR0aD1cIjFcIj48L3N2ZzpyZWN0PlxuICB9XG5cbiAgPCEtLSBUb3AtbGVmdCBpY29uOiBTdGFnZSBmb3JtIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZUZvcm1Qb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDYpXCI+XG4gICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgPHN2ZzpyZWN0IHg9XCItMlwiIHk9XCItMlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgLz5cblxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xNi41IDIwLjQ3NVYxNy40NzVIMTMuNVYxNi40NzVIMTYuNVYxMy40NzVIMTcuNVYxNi40NzVIMjAuNVYxNy40NzVIMTcuNVYyMC40NzVIMTYuNVpNMy41IDE3LjVWMTYuNUg0LjVWMTcuNUgzLjVaTTYuNSAxNy41VjE2LjVIMTEuNTE3QzExLjUwNTcgMTYuNjc2NyAxMS41MDQzIDE2Ljg0NSAxMS41MTMgMTcuMDA1QzExLjUyMSAxNy4xNjUgMTEuNTMxIDE3LjMzIDExLjU0MyAxNy41SDYuNVpNMy41IDEzLjVWMTIuNUg0LjVWMTMuNUgzLjVaTTYuNSAxMy41VjEyLjVIMTMuODA0QzEzLjYxMjcgMTIuNjM4NyAxMy40MzMzIDEyLjc5MTMgMTMuMjY2IDEyLjk1OEMxMy4wOTkzIDEzLjEyNDcgMTIuOTM3NyAxMy4zMDUzIDEyLjc4MSAxMy41SDYuNVpNMy41IDkuNVY4LjVINC41VjkuNUgzLjVaTTYuNSA5LjVWOC41SDE4LjVWOS41SDYuNVpNMy41IDUuNVY0LjVINC41VjUuNUgzLjVaTTYuNSA1LjVWNC41SDE4LjVWNS41SDYuNVpcIlxuICAgICAgW2F0dHIuZmlsbF09XCJub2RlLnN0YWdlRGF0YT8uZm9ybUlkID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBUb3AtcmlnaHQgaWNvbjogU2hpZWxkIC0tPlxuICA8c3ZnOmcgKGNsaWNrKT1cInRvZ2dsZVNoaWVsZFBvcHVwKCRldmVudClcIiBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcgKyAobm9kZS53aWR0aCAtIDMwKSArICcsIDYpJ1wiPlxuICAgIDwhLS0gVHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRvIGNhcHR1cmUgY2xpY2tzIC0tPlxuICAgIDxzdmc6cmVjdCB4PVwiLTJcIiB5PVwiLTJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XG5cbiAgICA8c3ZnOnBhdGggZD1cIk03LjUgMTJIMTYuNVYxMy41SDcuNVYxMlpNNy41IDcuNUgxNi41VjlINy41VjcuNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMiAyMi41TDcuMzY4MDEgMjAuMDMwM0M2LjA0NzQgMTkuMzI3OSA0Ljk0MzAzIDE4LjI3OTEgNC4xNzM0OCAxNi45OTY0QzMuNDAzOTMgMTUuNzEzOCAyLjk5ODI1IDE0LjI0NTggMy4wMDAwMSAxMi43NVYzQzMuMDAwMDEgMi42MDIxOCAzLjE1ODA0IDIuMjIwNjQgMy40MzkzNSAxLjkzOTM0QzMuNzIwNjUgMS42NTgwNCA0LjEwMjE4IDEuNSA0LjUwMDAxIDEuNUgxOS41QzE5Ljg5NzggMS41IDIwLjI3OTQgMS42NTgwNCAyMC41NjA3IDEuOTM5MzRDMjAuODQyIDIuMjIwNjQgMjEgMi42MDIxOCAyMSAzVjEyLjc1QzIxLjAwMTggMTQuMjQ1OCAyMC41OTYxIDE1LjcxMzggMTkuODI2NSAxNi45OTY0QzE5LjA1NyAxOC4yNzkxIDE3Ljk1MjYgMTkuMzI3OSAxNi42MzIgMjAuMDMwM0wxMiAyMi41Wk00LjUwMDAxIDNWMTIuNzVDNC40OTkxNyAxMy45NzM4IDQuODMxNDEgMTUuMTc0NyA1LjQ2MTExIDE2LjIyNEM2LjA5MDgyIDE3LjI3MzMgNi45OTQyMyAxOC4xMzE1IDguMDc0NTEgMTguNzA2NUwxMiAyMC43OTk3TDE1LjkyNTUgMTguNzA3M0MxNy4wMDU5IDE4LjEzMjIgMTcuOTA5NCAxNy4yNzM5IDE4LjUzOTEgMTYuMjI0NEMxOS4xNjg4IDE1LjE3NSAxOS41MDEgMTMuOTczOSAxOS41IDEyLjc1VjNINC41MDAwMVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICBAaWYgKG5vZGUuc3RhZ2VEYXRhPy5Db2RlKSB7XG4gIDwhLS0gTGVmdC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ2xlZnQnLCAkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDM4KVwiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBSaWdodC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ3JpZ2h0JywgJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgMzgpJ1wiPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG4gIH1cblxuICA8IS0tIEJvdHRvbS1sZWZ0IGljb246IERvdWJsZSBzbGFzaCB0ZXh0IC0tPlxuICA8c3ZnOmcgKm5nSWY9XCJoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlc1wiIChjbGljayk9XCJ0b2dnbGVDb2RlUG9wdXAoJGV2ZW50KVwiIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoNiwgJyArIChub2RlLmhlaWdodCAtIDE2KSArICcpJ1wiPlxuICAgIDxzdmc6dGV4dCBmb250LWZhbWlseT1cIidQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWZcIiBmb250LXdlaWdodD1cIjUwMFwiIGZvbnQtc2l6ZT1cIjE2cHhcIlxuICAgICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIiBbYXR0ci5maWxsXT1cImlzUGFyYWxsZWxFeGVjdXRpb24gPyAnI0QzNkNGRicgOiAnYmxhY2snXCI+XG4gICAgICAvL1xuICAgIDwvc3ZnOnRleHQ+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tcmlnaHQgaWNvbjogVGltZXIgLS0+XG4gIDxzdmc6ZyAoY2xpY2spPVwidG9nZ2xlVGltZXJQb3B1cCgkZXZlbnQpXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAnICsgKG5vZGUuaGVpZ2h0IC0gMzApICsgJyknXG4gICAgXCI+XG4gICAgPHN2ZzpwYXRoXG4gICAgICBkPVwiTTExLjUgM0MxNC4wMTk2IDMgMTYuNDM1OSA0LjAwMDg5IDE4LjIxNzUgNS43ODI0OUMxOS45OTkxIDcuNTY0MDggMjEgOS45ODA0NCAyMSAxMi41QzIxIDE1LjAxOTYgMTkuOTk5MSAxNy40MzU5IDE4LjIxNzUgMTkuMjE3NUMxNi40MzU5IDIwLjk5OTEgMTQuMDE5NiAyMiAxMS41IDIyQzguOTgwNDQgMjIgNi41NjQwOCAyMC45OTkxIDQuNzgyNDkgMTkuMjE3NUMzLjAwMDg5IDE3LjQzNTkgMiAxNS4wMTk2IDIgMTIuNUMyIDkuOTgwNDQgMy4wMDA4OSA3LjU2NDA4IDQuNzgyNDkgNS43ODI0OUM2LjU2NDA4IDQuMDAwODkgOC45ODA0NCAzIDExLjUgM1pNMTEuNSA0QzkuMjQ1NjYgNCA3LjA4MzY1IDQuODk1NTMgNS40ODk1OSA2LjQ4OTU5QzMuODk1NTMgOC4wODM2NSAzIDEwLjI0NTcgMyAxMi41QzMgMTQuNzU0MyAzLjg5NTUzIDE2LjkxNjMgNS40ODk1OSAxOC41MTA0QzcuMDgzNjUgMjAuMTA0NSA5LjI0NTY2IDIxIDExLjUgMjFDMTIuNjE2MiAyMSAxMy43MjE1IDIwLjc4MDEgMTQuNzUyOCAyMC4zNTNDMTUuNzg0MSAxOS45MjU4IDE2LjcyMTEgMTkuMjk5NyAxNy41MTA0IDE4LjUxMDRDMTguMjk5NyAxNy43MjExIDE4LjkyNTggMTYuNzg0MSAxOS4zNTMgMTUuNzUyOEMxOS43ODAxIDE0LjcyMTUgMjAgMTMuNjE2MiAyMCAxMi41QzIwIDEwLjI0NTcgMTkuMTA0NSA4LjA4MzY1IDE3LjUxMDQgNi40ODk1OUMxNS45MTYzIDQuODk1NTMgMTMuNzU0MyA0IDExLjUgNFpNMTEgN0gxMlYxMi40MkwxNi43IDE1LjEzTDE2LjIgMTZMMTEgMTNWN1pcIlxuICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExhYmVsIGluIHRoZSBjZW50ZXIgLS0+XG4gIDxzdmc6dGV4dCBbYXR0ci54XT1cIm5vZGUud2lkdGggLyAyXCIgW2F0dHIueV09XCJub2RlLmhlaWdodCAvIDJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGRvbWluYW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICBbYXR0ci5mb250LXNpemVdPVwiaXNTdWJmbG93ID8gJzEwJyA6ICcxNCdcIiBmaWxsPVwidmFyKC0tdmJuLWNvbG9yLXRleHQpXCI+XG4gICAge3sgdHJ1bmNhdGVkRGlzcGxheU5hbWUgfX1cbiAgPC9zdmc6dGV4dD5cbjwvc3ZnOmc+XG5cbjwhLS0gPGxpYi1zdGFnZS1kaWFsb2dcbiAgW3Zpc2libGVdPVwic2hvd1NoaWVsZFBvcHVwKClcIlxuICBbc3RhZ2VEYXRhXT1cIm5vZGUuc3RhZ2VEYXRhIHx8IHt9XCJcbiAgKGNsb3NlZCk9XCJzaG93U2hpZWxkUG9wdXAuc2V0KGZhbHNlKVwiXG4gIChzYXZlZCk9XCJvblN0YWdlUHJvcGVydGllc1NhdmVkKCRldmVudClcIlxuPjwvbGliLXN0YWdlLWRpYWxvZz4gLS0+XG4iXX0=