@acorex/modules 20.7.2 → 20.7.3

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 (95) hide show
  1. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-Cb0ugn9q.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-oEQ6l_A3.mjs} +21 -21
  2. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-Cb0ugn9q.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-oEQ6l_A3.mjs.map} +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-DsZSuqhi.mjs → acorex-modules-assessment-management-answers-viewer-widget-column.component-_Tmd76C6.mjs} +2 -2
  4. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-DsZSuqhi.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-column.component-_Tmd76C6.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-CEQxo5aH.mjs → acorex-modules-assessment-management-answers-viewer-widget-edit.component-c0ryzonM.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-CEQxo5aH.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-edit.component-c0ryzonM.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-Dh4GAatw.mjs → acorex-modules-assessment-management-answers-viewer-widget-view.component-BOuzufN6.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-Dh4GAatw.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-view.component-BOuzufN6.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-oliZ_Wk_.mjs → acorex-modules-assessment-management-assessment-case.entity-yMC4T30A.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-oliZ_Wk_.mjs.map → acorex-modules-assessment-management-assessment-case.entity-yMC4T30A.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DD4GUa6H.mjs → acorex-modules-assessment-management-assessment-session.entity-boi7xntr.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DD4GUa6H.mjs.map → acorex-modules-assessment-management-assessment-session.entity-boi7xntr.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CMnXyhcS.mjs → acorex-modules-assessment-management-fill-assessment-session.command-CIywSVKe.mjs} +3 -3
  14. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CMnXyhcS.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-CIywSVKe.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Db9SiDFY.mjs → acorex-modules-assessment-management-preview-questionnaire.command-gQ-Gg2EI.mjs} +4 -4
  16. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Db9SiDFY.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-gQ-Gg2EI.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-6TlXMGHR.mjs → acorex-modules-assessment-management-question-bank-item.entity-BJi5O2hZ.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-6TlXMGHR.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-BJi5O2hZ.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-fekQ1wRZ.mjs → acorex-modules-assessment-management-questionnaire-builder-edit.component-CQQNQQIY.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-fekQ1wRZ.mjs.map → acorex-modules-assessment-management-questionnaire-builder-edit.component-CQQNQQIY.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-Bn0yoxWv.mjs → acorex-modules-assessment-management-questionnaire-builder-view.component-2CgpHl4g.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-Bn0yoxWv.mjs.map → acorex-modules-assessment-management-questionnaire-builder-view.component-2CgpHl4g.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-CfLJ27Ob.mjs → acorex-modules-assessment-management-questionnaire-builder.component-DAOND6qy.mjs} +3 -3
  24. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-CfLJ27Ob.mjs.map → acorex-modules-assessment-management-questionnaire-builder.component-DAOND6qy.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BqxEvzqZ.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Bbj8DGdn.mjs} +2 -2
  26. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BqxEvzqZ.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Bbj8DGdn.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-BhYlcsrV.mjs → acorex-modules-assessment-management-questionnaire-viewer.service-d8xlbs8Z.mjs} +2 -2
  28. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-BhYlcsrV.mjs.map → acorex-modules-assessment-management-questionnaire-viewer.service-d8xlbs8Z.mjs.map} +1 -1
  29. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrnOr1-B.mjs → acorex-modules-assessment-management-questionnaire.entity-eQ29UST5.mjs} +2 -2
  30. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrnOr1-B.mjs.map → acorex-modules-assessment-management-questionnaire.entity-eQ29UST5.mjs.map} +1 -1
  31. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CZe4mSEi.mjs → acorex-modules-assessment-management-view-session-answers.command-Z-Nk-9SY.mjs} +3 -3
  32. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CZe4mSEi.mjs.map → acorex-modules-assessment-management-view-session-answers.command-Z-Nk-9SY.mjs.map} +1 -1
  33. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  34. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HBjLE7aN.mjs → acorex-modules-auth-acorex-modules-auth-DbJdPw6r.mjs} +11 -11
  35. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-HBjLE7aN.mjs.map → acorex-modules-auth-acorex-modules-auth-DbJdPw6r.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-auth-app-chooser.component-4w3jVTCM.mjs → acorex-modules-auth-app-chooser.component-C3-Owzk3.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-auth-app-chooser.component-4w3jVTCM.mjs.map → acorex-modules-auth-app-chooser.component-C3-Owzk3.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-auth-login.module-C7zKK9Cq.mjs → acorex-modules-auth-login.module-DWVzAe71.mjs} +4 -4
  39. package/fesm2022/{acorex-modules-auth-login.module-C7zKK9Cq.mjs.map → acorex-modules-auth-login.module-DWVzAe71.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-auth-master.layout-C_F0t2Pw.mjs → acorex-modules-auth-master.layout-CRGoKIyG.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-auth-master.layout-C_F0t2Pw.mjs.map → acorex-modules-auth-master.layout-CRGoKIyG.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-auth-oauth-callback.component-D65wq-WJ.mjs → acorex-modules-auth-oauth-callback.component-BbYMC-Ue.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-auth-oauth-callback.component-D65wq-WJ.mjs.map → acorex-modules-auth-oauth-callback.component-BbYMC-Ue.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-auth-password.component-CCC116bI.mjs → acorex-modules-auth-password.component-99M7R15t.mjs} +4 -4
  45. package/fesm2022/acorex-modules-auth-password.component-99M7R15t.mjs.map +1 -0
  46. package/fesm2022/{acorex-modules-auth-password.component-B1GLfSy9.mjs → acorex-modules-auth-password.component-C6mlKjXP.mjs} +3 -3
  47. package/fesm2022/acorex-modules-auth-password.component-C6mlKjXP.mjs.map +1 -0
  48. package/fesm2022/{acorex-modules-auth-routes-DmDkUeHY.mjs → acorex-modules-auth-routes-BOhInfU0.mjs} +2 -2
  49. package/fesm2022/{acorex-modules-auth-routes-DmDkUeHY.mjs.map → acorex-modules-auth-routes-BOhInfU0.mjs.map} +1 -1
  50. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DZKmZyWk.mjs → acorex-modules-auth-tenant-chooser.component-h5qiAik2.mjs} +2 -2
  51. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DZKmZyWk.mjs.map → acorex-modules-auth-tenant-chooser.component-h5qiAik2.mjs.map} +1 -1
  52. package/fesm2022/{acorex-modules-auth-two-factor-code.component-CSGhGYVU.mjs → acorex-modules-auth-two-factor-code.component-CrP_8k0o.mjs} +2 -2
  53. package/fesm2022/acorex-modules-auth-two-factor-code.component-CrP_8k0o.mjs.map +1 -0
  54. package/fesm2022/{acorex-modules-auth-two-factor.module-DsD1WH-_.mjs → acorex-modules-auth-two-factor.module-B52z5Pre.mjs} +3 -3
  55. package/fesm2022/{acorex-modules-auth-two-factor.module-DsD1WH-_.mjs.map → acorex-modules-auth-two-factor.module-B52z5Pre.mjs.map} +1 -1
  56. package/fesm2022/{acorex-modules-auth-user-sessions.component-DPR059of.mjs → acorex-modules-auth-user-sessions.component-5YAm7mZv.mjs} +2 -2
  57. package/fesm2022/{acorex-modules-auth-user-sessions.component-DPR059of.mjs.map → acorex-modules-auth-user-sessions.component-5YAm7mZv.mjs.map} +1 -1
  58. package/fesm2022/acorex-modules-auth.mjs +1 -1
  59. package/fesm2022/{acorex-modules-document-management-link-dialog.component-C6Q2thLJ.mjs → acorex-modules-document-management-link-dialog.component-Civ7UZb8.mjs} +2 -2
  60. package/fesm2022/acorex-modules-document-management-link-dialog.component-Civ7UZb8.mjs.map +1 -0
  61. package/fesm2022/{acorex-modules-document-management-share-dialog.component-CyqY25u5.mjs → acorex-modules-document-management-share-dialog.component-BwUZShJg.mjs} +2 -2
  62. package/fesm2022/acorex-modules-document-management-share-dialog.component-BwUZShJg.mjs.map +1 -0
  63. package/fesm2022/{acorex-modules-document-management-share-email-dialog.component-DbOBvVj3.mjs → acorex-modules-document-management-share-email-dialog.component-BMiCmb1k.mjs} +2 -2
  64. package/fesm2022/acorex-modules-document-management-share-email-dialog.component-BMiCmb1k.mjs.map +1 -0
  65. package/fesm2022/acorex-modules-document-management.mjs +3 -3
  66. package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-DqnjNpEx.mjs → acorex-modules-help-desk-acorex-modules-help-desk-CA1t2gEZ.mjs} +3 -3
  67. package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-DqnjNpEx.mjs.map → acorex-modules-help-desk-acorex-modules-help-desk-CA1t2gEZ.mjs.map} +1 -1
  68. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-7zCCgi2E.mjs → acorex-modules-help-desk-capture-screen.component-Bnrk1dPT.mjs} +2 -2
  69. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-7zCCgi2E.mjs.map → acorex-modules-help-desk-capture-screen.component-Bnrk1dPT.mjs.map} +1 -1
  70. package/fesm2022/acorex-modules-help-desk.mjs +1 -1
  71. package/fesm2022/{acorex-modules-meeting-management-meeting-publish-popup.component-Inwn6yaO.mjs → acorex-modules-meeting-management-meeting-publish-popup.component-B7NAg4MD.mjs} +2 -2
  72. package/fesm2022/acorex-modules-meeting-management-meeting-publish-popup.component-B7NAg4MD.mjs.map +1 -0
  73. package/fesm2022/acorex-modules-meeting-management.mjs +1 -1
  74. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BYFduyOb.mjs → acorex-modules-settings-management-acorex-modules-settings-management-BRVfUYiM.mjs} +5 -5
  75. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BYFduyOb.mjs.map → acorex-modules-settings-management-acorex-modules-settings-management-BRVfUYiM.mjs.map} +1 -1
  76. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-B1yQvXMb.mjs → acorex-modules-settings-management-permission-definition.provider-WSxrvAsV.mjs} +2 -2
  77. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-B1yQvXMb.mjs.map → acorex-modules-settings-management-permission-definition.provider-WSxrvAsV.mjs.map} +1 -1
  78. package/fesm2022/{acorex-modules-settings-management-setting-page.component-DE4fv4Y8.mjs → acorex-modules-settings-management-setting-page.component-MYnJYUxE.mjs} +2 -2
  79. package/fesm2022/{acorex-modules-settings-management-setting-page.component-DE4fv4Y8.mjs.map → acorex-modules-settings-management-setting-page.component-MYnJYUxE.mjs.map} +1 -1
  80. package/fesm2022/{acorex-modules-settings-management-setting-view.component-CY6eBCDV.mjs → acorex-modules-settings-management-setting-view.component-Cq80snth.mjs} +3 -3
  81. package/fesm2022/acorex-modules-settings-management-setting-view.component-Cq80snth.mjs.map +1 -0
  82. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  83. package/fesm2022/{acorex-modules-task-management-task-board.page-BvDWiiTL.mjs → acorex-modules-task-management-task-board.page-D7dEWzjn.mjs} +3 -17
  84. package/fesm2022/acorex-modules-task-management-task-board.page-D7dEWzjn.mjs.map +1 -0
  85. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  86. package/package.json +6 -6
  87. package/fesm2022/acorex-modules-auth-password.component-B1GLfSy9.mjs.map +0 -1
  88. package/fesm2022/acorex-modules-auth-password.component-CCC116bI.mjs.map +0 -1
  89. package/fesm2022/acorex-modules-auth-two-factor-code.component-CSGhGYVU.mjs.map +0 -1
  90. package/fesm2022/acorex-modules-document-management-link-dialog.component-C6Q2thLJ.mjs.map +0 -1
  91. package/fesm2022/acorex-modules-document-management-share-dialog.component-CyqY25u5.mjs.map +0 -1
  92. package/fesm2022/acorex-modules-document-management-share-email-dialog.component-DbOBvVj3.mjs.map +0 -1
  93. package/fesm2022/acorex-modules-meeting-management-meeting-publish-popup.component-Inwn6yaO.mjs.map +0 -1
  94. package/fesm2022/acorex-modules-settings-management-setting-view.component-CY6eBCDV.mjs.map +0 -1
  95. package/fesm2022/acorex-modules-task-management-task-board.page-BvDWiiTL.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-assessment-management-questionnaire-builder.component-CfLJ27Ob.mjs","sources":["../tmp-esm2022/assessment-management/lib/features/questionnaire-builder/questionnaire-builder.types.js","../tmp-esm2022/assessment-management/lib/features/questionnaire-builder/questionnaire-builder.component.js"],"sourcesContent":["//#region ---- Imports ----\n//#endregion\n//#region ---- Utility Functions ----\n/**\n * Convert raw value to builder state\n */\nexport function convertValueToState(value) {\n // Handle null/undefined or empty sections\n if (!value || !value.sections || value.sections.length === 0) {\n // Always return at least one default section\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return {\n sections: [defaultSection],\n displaySettings: value?.displaySettings,\n };\n }\n // Handle structure (sections with nested items)\n return {\n sections: value.sections.map((section, sectionIndex) => ({\n id: section.id || `section-${sectionIndex}`,\n title: section.title,\n description: section.description,\n order: section.order ?? sectionIndex,\n visibilityCondition: section.visibilityCondition,\n items: (section.items || []).map((item, itemIndex) => ({\n id: item.id || `item-${itemIndex}`,\n questionBankItemId: item.questionBankItemId,\n order: item.order ?? itemIndex,\n isRequired: item.isRequired,\n visibilityCondition: item.visibilityCondition,\n requiredCondition: item.requiredCondition,\n scoringOverride: item.scoringOverride,\n interfaceOverride: item.interfaceOverride,\n isNewlyAdded: false,\n })),\n isNewlyAdded: false,\n })),\n displaySettings: value.displaySettings,\n };\n}\n/**\n * Convert builder state to value for persistence\n */\nexport function convertStateToValue(state, existingValue) {\n const result = {\n sections: state.sections\n .filter((section) => {\n // Drop sections that are NOT newly added AND have no items\n // Keep sections that are newly added OR have items\n const isNewlyAdded = section.isNewlyAdded === true;\n const hasItems = section.items.length > 0;\n return isNewlyAdded || hasItems;\n })\n .map((section) => {\n return {\n id: section.id,\n title: section.title,\n description: section.description,\n order: section.order,\n visibilityCondition: section.visibilityCondition,\n items: section.items.map((item) => ({\n id: item.id,\n questionBankItemId: item.questionBankItemId,\n order: item.order,\n isRequired: item.isRequired,\n visibilityCondition: item.visibilityCondition,\n requiredCondition: item.requiredCondition,\n scoringOverride: item.scoringOverride,\n interfaceOverride: item.interfaceOverride,\n })),\n };\n }),\n };\n // Preserve displaySettings from state first, then from existing value if state doesn't have it\n if (state.displaySettings) {\n result.displaySettings = state.displaySettings;\n }\n else if (existingValue?.displaySettings) {\n result.displaySettings = existingValue.displaySettings;\n }\n return result;\n}\n/**\n * Create a default section\n */\nexport function createDefaultSection() {\n return {\n id: `section-${Date.now()}`,\n title: 'New Section',\n description: undefined,\n order: 0,\n visibilityCondition: undefined,\n items: [],\n isNewlyAdded: true,\n };\n}\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS1idWlsZGVyLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci9xdWVzdGlvbm5haXJlLWJ1aWxkZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBK0ovQixZQUFZO0FBRVoseUNBQXlDO0FBRXpDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQW1EO0lBQ25GLDBDQUEwQztJQUMxQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzRCw2Q0FBNkM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QyxjQUFjLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPO1lBQ0gsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQzFCLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZTtTQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxPQUFPO1FBQ0gsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxXQUFXLFlBQVksRUFBRTtZQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLFlBQVk7WUFDcEMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFt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QUFFLGFBQWE7UUFDcEIsV0FBVyxFQUFFLFNBQVM7UUFDdEIsS0FBSyxFQUFFLENBQUM7UUFDUixtQkFBbUIsRUFBRSxTQUFTO1FBQzlCLEtBQUssRUFBRSxFQUFFO1FBQ1QsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQztBQUNOLENBQUM7QUFFRCxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBBWFBXaWRnZXROb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBRdWVzdGlvbm5haXJlIEJ1aWxkZXIgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBxdWVzdGlvbiBpdGVtIHdpdGhpbiBhIHNlY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbm5haXJlQnVpbGRlckl0ZW0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcXVlc3Rpb25CYW5rSXRlbUlkOiBzdHJpbmc7XG4gICAgb3JkZXI6IG51bWJlcjtcbiAgICBpc1JlcXVpcmVkPzogYm9vbGVhbjtcbiAgICB2aXNpYmlsaXR5Q29uZGl0aW9uPzogc3RyaW5nO1xuICAgIHJlcXVpcmVkQ29uZGl0aW9uPzogc3RyaW5nO1xuICAgIHNjb3JpbmdPdmVycmlkZT86IHtcbiAgICAgICAgcG9pbnRzPzogbnVtYmVyO1xuICAgICAgICB3ZWlnaHQ/OiBudW1iZXI7XG4gICAgfTtcbiAgICBpbnRlcmZhY2VPdmVycmlkZT86IEFYUFdpZGdldE5vZGU7XG4gICAgaXNOZXdseUFkZGVkPzogYm9vbGVhbjtcblxuICAgIC8vIFJlbGF0ZWQgcXVlc3Rpb24gZGF0YSAoZnJvbSBleHBvc2UpXG4gICAgcXVlc3Rpb24/OiB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBkaWZmaWN1bHR5Pzogc3RyaW5nO1xuICAgICAgICBzY29yaW5nVHlwZT86IHN0cmluZztcbiAgICB9O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBRdWVzdGlvbm5haXJlIEJ1aWxkZXIgU2VjdGlvbiBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2VjdGlvbiBjb250YWluaW5nIHF1ZXN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9ubmFpcmVCdWlsZGVyU2VjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIG9yZGVyOiBudW1iZXI7XG4gICAgdmlzaWJpbGl0eUNvbmRpdGlvbj86IHN0cmluZztcbiAgICBpdGVtczogUXVlc3Rpb25uYWlyZUJ1aWxkZXJJdGVtW107XG4gICAgaXNOZXdseUFkZGVkPzogYm9vbGVhbjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgUXVlc3Rpb25uYWlyZSBCdWlsZGVyIFN0YXRlIFR5cGVzICAgLS0tLVxuXG4vKipcbiAqIE92ZXJhbGwgc3RhdGUgZm9yIHRoZSBxdWVzdGlvbm5haXJlIGJ1aWxkZXIgd2lkZ2V0IChkZXNpZ25lciBtb2RlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9ubmFpcmVCdWlsZGVyU3RhdGUge1xuICAgIHNlY3Rpb25zOiBRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb25bXTtcbiAgICBzZWxlY3RlZEl0ZW1JZD86IHN0cmluZztcbiAgICBzZWxlY3RlZFNlY3Rpb25JZD86IHN0cmluZztcbiAgICBkaXNwbGF5U2V0dGluZ3M/OiBRdWVzdGlvbm5haXJlRGlzcGxheVNldHRpbmdzO1xufVxuXG4vKipcbiAqIERpc3BsYXkgc2V0dGluZ3MgZm9yIHF1ZXN0aW9ubmFpcmUgdmlld2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25uYWlyZURpc3BsYXlTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogVmlldyBtb2RlOiBzaW5nbGUtcGFnZSwgcGFnZS1wZXItZ3JvdXAsIHBhZ2UtcGVyLXF1ZXN0aW9uLCBzaWRlLW1lbnVcbiAgICAgKi9cbiAgICB2aWV3TW9kZT86ICdzaW5nbGUtcGFnZScgfCAncGFnZS1wZXItZ3JvdXAnIHwgJ3BhZ2UtcGVyLXF1ZXN0aW9uJyB8ICdzaWRlLW1lbnUnO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBwcm9ncmVzcyBiYXJcbiAgICAgKi9cbiAgICBzaG93UHJvZ3Jlc3NCYXI/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUHJvZ3Jlc3MgY2FsY3VsYXRpb24gbW9kZTogYW5zd2VyZWQgb3IgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHByb2dyZXNzTW9kZT86ICdhbnN3ZXJlZCcgfCAnbmF2aWdhdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRpbWVyXG4gICAgICovXG4gICAgc2hvd1RpbWVyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFNob3cgc2VjdGlvbiB0aXRsZXNcbiAgICAgKi9cbiAgICBzaG93U2VjdGlvblRpdGxlcz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHF1ZXN0aW9uIG51bWJlcnNcbiAgICAgKi9cbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEF1dG8tc2F2ZSBhbnN3ZXJzIGFzIHVzZXIgdHlwZXNcbiAgICAgKi9cbiAgICBhdXRvU2F2ZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHZhbGlkYXRpb24gZXJyb3JzIGlubGluZVxuICAgICAqL1xuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFsbG93IHNraXBwaW5nIHF1ZXN0aW9ucyAoaWYgbm90IHJlcXVpcmVkKVxuICAgICAqL1xuICAgIGFsbG93U2tpcHBpbmc/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBxdWVzdGlvbiBjb3VudGVyIChlLmcuLCBcIlF1ZXN0aW9uIDMgb2YgMTBcIilcbiAgICAgKi9cbiAgICBzaG93UXVlc3Rpb25Db3VudGVyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGJlZm9yZSBhbGxvd2luZyBuYXZpZ2F0aW9uIHRvIG90aGVyIHNlY3Rpb25zL3BhZ2VzXG4gICAgICogV2hlbiB0cnVlLCBuYXZpZ2F0aW9uIGlzIGJsb2NrZWQgaWYgY3VycmVudCBwYWdlIGhhcyB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAqIFdoZW4gZmFsc2UsIG5hdmlnYXRpb24gaXMgYWxsb3dlZCBidXQgdmFsaWRhdGlvbiBlcnJvcnMgYXJlIHN0aWxsIHNob3duXG4gICAgICogRGVmYXVsdDogdHJ1ZVxuICAgICAqL1xuICAgIHZhbGlkYXRlQmVmb3JlTmF2aWdhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVmFsdWUgc3RydWN0dXJlIHN0b3JlZCBpbiBlbnRpdHkgKHNpbXBsaWZpZWQgZm9yIHBlcnNpc3RlbmNlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUge1xuICAgIHNlY3Rpb25zOiBBcnJheTx7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBvcmRlcjogbnVtYmVyO1xuICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uPzogc3RyaW5nO1xuICAgICAgICBpdGVtczogQXJyYXk8e1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHF1ZXN0aW9uQmFua0l0ZW1JZDogc3RyaW5nO1xuICAgICAgICAgICAgb3JkZXI6IG51bWJlcjtcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgIHJlcXVpcmVkQ29uZGl0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlPzoge1xuICAgICAgICAgICAgICAgIHBvaW50cz86IG51bWJlcjtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ/OiBudW1iZXI7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW50ZXJmYWNlT3ZlcnJpZGU/OiBBWFBXaWRnZXROb2RlO1xuICAgICAgICB9PjtcbiAgICB9PjtcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5IHNldHRpbmdzIGZvciBxdWVzdGlvbm5haXJlIHZpZXdlclxuICAgICAqL1xuICAgIGRpc3BsYXlTZXR0aW5ncz86IFF1ZXN0aW9ubmFpcmVEaXNwbGF5U2V0dGluZ3M7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgRnVuY3Rpb25zICAgLS0tLVxuXG4vKipcbiAqIENvbnZlcnQgcmF3IHZhbHVlIHRvIGJ1aWxkZXIgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvU3RhdGUodmFsdWU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKTogUXVlc3Rpb25uYWlyZUJ1aWxkZXJTdGF0ZSB7XG4gICAgLy8gSGFuZGxlIG51bGwvdW5kZWZpbmVkIG9yIGVtcHR5IHNlY3Rpb25zXG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuc2VjdGlvbnMgfHwgdmFsdWUuc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYXQgbGVhc3Qgb25lIGRlZmF1bHQgc2VjdGlvblxuICAgICAgICBjb25zdCBkZWZhdWx0U2VjdGlvbiA9IGNyZWF0ZURlZmF1bHRTZWN0aW9uKCk7XG4gICAgICAgIGRlZmF1bHRTZWN0aW9uLm9yZGVyID0gMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlY3Rpb25zOiBbZGVmYXVsdFNlY3Rpb25dLFxuICAgICAgICAgICAgZGlzcGxheVNldHRpbmdzOiB2YWx1ZT8uZGlzcGxheVNldHRpbmdzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdHJ1Y3R1cmUgKHNlY3Rpb25zIHdpdGggbmVzdGVkIGl0ZW1zKVxuICAgIHJldHVybiB7XG4gICAgICAgIHNlY3Rpb25zOiB2YWx1ZS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIHNlY3Rpb25JbmRleCkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBzZWN0aW9uLmlkIHx8IGBzZWN0aW9uLSR7c2VjdGlvbkluZGV4fWAsXG4gICAgICAgICAgICB0aXRsZTogc2VjdGlvbi50aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWN0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgb3JkZXI6IHNlY3Rpb24ub3JkZXIgPz8gc2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbjogc2VjdGlvbi52aXNpYmlsaXR5Q29uZGl0aW9uLFxuICAgICAgICAgICAgaXRlbXM6IChzZWN0aW9uLml0ZW1zIHx8IFtdKS5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCB8fCBgaXRlbS0ke2l0ZW1JbmRleH1gLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uQmFua0l0ZW1JZDogaXRlbS5xdWVzdGlvbkJhbmtJdGVtSWQsXG4gICAgICAgICAgICAgICAgb3JkZXI6IGl0ZW0ub3JkZXIgPz8gaXRlbUluZGV4LFxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IGl0ZW0uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uOiBpdGVtLnZpc2liaWxpdHlDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRDb25kaXRpb246IGl0ZW0ucmVxdWlyZWRDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlOiBpdGVtLnNjb3JpbmdPdmVycmlkZSxcbiAgICAgICAgICAgICAgICBpbnRlcmZhY2VPdmVycmlkZTogaXRlbS5pbnRlcmZhY2VPdmVycmlkZSxcbiAgICAgICAgICAgICAgICBpc05ld2x5QWRkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgaXNOZXdseUFkZGVkOiBmYWxzZSxcbiAgICAgICAgfSkpLFxuICAgICAgICBkaXNwbGF5U2V0dGluZ3M6IHZhbHVlLmRpc3BsYXlTZXR0aW5ncyxcbiAgICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYnVpbGRlciBzdGF0ZSB0byB2YWx1ZSBmb3IgcGVyc2lzdGVuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTdGF0ZVRvVmFsdWUoc3RhdGU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU3RhdGUsIGV4aXN0aW5nVmFsdWU/OiBRdWVzdGlvbm5haXJlQnVpbGRlclZhbHVlKTogUXVlc3Rpb25uYWlyZUJ1aWxkZXJWYWx1ZSB7XG4gICAgY29uc3QgcmVzdWx0OiBRdWVzdGlvbm5haXJlQnVpbGRlclZhbHVlID0ge1xuICAgICAgICBzZWN0aW9uczogc3RhdGUuc2VjdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKHNlY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBEcm9wIHNlY3Rpb25zIHRoYXQgYXJlIE5PVCBuZXdseSBhZGRlZCBBTkQgaGF2ZSBubyBpdGVtc1xuICAgICAgICAgICAgICAgIC8vIEtlZXAgc2VjdGlvbnMgdGhhdCBhcmUgbmV3bHkgYWRkZWQgT1IgaGF2ZSBpdGVtc1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTmV3bHlBZGRlZCA9IHNlY3Rpb24uaXNOZXdseUFkZGVkID09PSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0l0ZW1zID0gc2VjdGlvbi5pdGVtcy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTmV3bHlBZGRlZCB8fCBoYXNJdGVtcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHNlY3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWN0aW9uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VjdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHNlY3Rpb24ub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25kaXRpb246IHNlY3Rpb24udmlzaWJpbGl0eUNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkJhbmtJdGVtSWQ6IGl0ZW0ucXVlc3Rpb25CYW5rSXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGl0ZW0ub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBpdGVtLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uOiBpdGVtLnZpc2liaWxpdHlDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZENvbmRpdGlvbjogaXRlbS5yZXF1aXJlZENvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdPdmVycmlkZTogaXRlbS5zY29yaW5nT3ZlcnJpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VPdmVycmlkZTogaXRlbS5pbnRlcmZhY2VPdmVycmlkZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgLy8gUHJlc2VydmUgZGlzcGxheVNldHRpbmdzIGZyb20gc3RhdGUgZmlyc3QsIHRoZW4gZnJvbSBleGlzdGluZyB2YWx1ZSBpZiBzdGF0ZSBkb2Vzbid0IGhhdmUgaXRcbiAgICBpZiAoc3RhdGUuZGlzcGxheVNldHRpbmdzKSB7XG4gICAgICAgIHJlc3VsdC5kaXNwbGF5U2V0dGluZ3MgPSBzdGF0ZS5kaXNwbGF5U2V0dGluZ3M7XG4gICAgfSBlbHNlIGlmIChleGlzdGluZ1ZhbHVlPy5kaXNwbGF5U2V0dGluZ3MpIHtcbiAgICAgICAgcmVzdWx0LmRpc3BsYXlTZXR0aW5ncyA9IGV4aXN0aW5nVmFsdWUuZGlzcGxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZGVmYXVsdCBzZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0U2VjdGlvbigpOiBRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb24ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgc2VjdGlvbi0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgdGl0bGU6ICdOZXcgU2VjdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgaXNOZXdseUFkZGVkOiB0cnVlLFxuICAgIH07XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4iXX0=","//#region ---- Imports ----\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CdkDrag, CdkDragHandle, CdkDropList, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPDataSelectorService } from '@acorex/platform/layout/components';\nimport { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RootConfig } from '../../const';\nimport { AXMQuestionBankItemService } from '../../entities/question-bank-item/question-bank-item.service';\nimport { convertStateToValue, convertValueToState, createDefaultSection, } from './questionnaire-builder.types';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { AXFullScreenDirective } from '@acorex/cdk/full-screen';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer/questionnaire-viewer.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@angular/common\";\nimport * as i4 from \"@acorex/core/translation\";\n//#endregion\n//#region ---- Component ----\n/**\n * Reusable Questionnaire Builder Component\n * Can be used both in dialog and inline contexts\n */\nexport class AXMQuestionnaireBuilderComponent {\n //#endregion\n //#region ---- Lifecycle ----\n constructor() {\n //#region ---- Services & Dependencies ----\n this.dataSelectorService = inject(AXPDataSelectorService);\n this.questionBankService = inject(AXMQuestionBankItemService);\n this.entityResolver = inject(AXPEntityDefinitionRegistryService);\n this.dialogService = inject(AXDialogService);\n this.translationService = inject(AXTranslationService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n //#endregion\n //#region ---- Inputs & Outputs ----\n /**\n * Initial value (QuestionnaireBuilderValue)\n */\n this.value = input(null, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n /**\n * Readonly mode\n */\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n /**\n * Value change event\n */\n this.valueChange = output();\n //#endregion\n //#region ---- Class Properties ----\n // Designer state management - always start with at least one default section\n this.builderState = signal({\n sections: [createDefaultSection()],\n }, ...(ngDevMode ? [{ debugName: \"builderState\" }] : []));\n // Selected item tracking\n this.selectedItemId = signal(null, ...(ngDevMode ? [{ debugName: \"selectedItemId\" }] : []));\n this.selectedSectionId = signal(null, ...(ngDevMode ? [{ debugName: \"selectedSectionId\" }] : []));\n // Track if we're making internal updates to prevent effect loops\n this.isInternalUpdate = false;\n // Fullscreen directive reference\n this.fullscreenDirective = viewChild('fullscreen', ...(ngDevMode ? [{ debugName: \"fullscreenDirective\" }] : []));\n //#endregion\n //#region ---- Computed Properties ----\n /**\n * Get all sections for rendering\n */\n this.sections = computed(() => this.builderState().sections, ...(ngDevMode ? [{ debugName: \"sections\" }] : []));\n /**\n * Check if can remove section (must have at least 1 section)\n */\n this.canRemoveSection = computed(() => this.sections().length > 1, ...(ngDevMode ? [{ debugName: \"canRemoveSection\" }] : []));\n /**\n * Get current display settings from state or default\n */\n this.displaySettings = computed(() => {\n const state = this.builderState();\n if (state.displaySettings) {\n return state.displaySettings;\n }\n // Fallback to value if state doesn't have it\n const currentValue = convertStateToValue(state, this.value() || undefined);\n return currentValue.displaySettings || {\n viewMode: 'single-page',\n showProgressBar: true,\n showTimer: false,\n showSectionTitles: true,\n showQuestionNumbers: true,\n };\n }, ...(ngDevMode ? [{ debugName: \"displaySettings\" }] : []));\n // Track last emitted value to prevent circular updates\n let lastEmittedValue = null;\n // Sync value input to state (only when value changes externally)\n effect(() => {\n const val = this.value();\n if (val !== null && val !== undefined && !this.isInternalUpdate) {\n const currentState = untracked(() => this.builderState());\n const currentValue = convertStateToValue(currentState);\n // Only update if the value actually changed and it's different from what we last emitted\n const valStr = JSON.stringify(val);\n const currentStr = JSON.stringify(currentValue);\n const lastEmittedStr = lastEmittedValue ? JSON.stringify(lastEmittedValue) : null;\n // Update only if:\n // 1. The incoming value is different from current state value\n // 2. AND it's not the value we just emitted (prevent circular updates)\n if (valStr !== currentStr && valStr !== lastEmittedStr) {\n const newState = convertValueToState(val);\n untracked(() => {\n this.builderState.set(newState);\n // Load question details for all items\n this.loadQuestionDetailsForState(newState);\n });\n }\n }\n else if ((val === null || val === undefined) && !this.isInternalUpdate) {\n // If value is null/undefined, ensure we have at least one default section\n const currentState = untracked(() => this.builderState());\n if (currentState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n untracked(() => {\n this.builderState.set({ sections: [defaultSection] });\n });\n }\n }\n });\n // Sync state changes to output\n effect(() => {\n const state = this.builderState();\n const currentValue = this.value();\n const value = convertStateToValue(state, currentValue || undefined);\n // Prevent circular updates\n if (!this.isInternalUpdate) {\n untracked(() => {\n lastEmittedValue = value;\n this.valueChange.emit(value);\n });\n }\n });\n }\n /**\n * Load question details for all items in the state\n */\n async loadQuestionDetailsForState(state) {\n const questionIds = new Set();\n // Collect all question bank item IDs\n state.sections.forEach((section) => {\n section.items.forEach((item) => {\n if (item.questionBankItemId && !item.question) {\n questionIds.add(item.questionBankItemId);\n }\n });\n });\n if (questionIds.size === 0)\n return;\n // Load all questions in parallel\n const questionPromises = Array.from(questionIds).map((id) => this.questionBankService.getOne(id).catch(() => null));\n const questions = await Promise.all(questionPromises);\n // Create a map of question ID to question data\n const questionMap = new Map();\n questions.forEach((q) => {\n if (q) {\n questionMap.set(q.id, q);\n }\n });\n // Update state with question details\n this.builderState.update((currentState) => ({\n ...currentState,\n sections: currentState.sections.map((section) => ({\n ...section,\n items: section.items.map((item) => {\n if (item.question)\n return item; // Already has question data\n const questionData = questionMap.get(item.questionBankItemId);\n if (questionData) {\n return {\n ...item,\n question: {\n id: questionData.id,\n title: questionData.title,\n description: questionData.description,\n difficulty: questionData.difficulty,\n scoringType: questionData.scoringType,\n },\n };\n }\n return item;\n }),\n })),\n }));\n }\n //#endregion\n //#region ---- Section Management ----\n /**\n * Helper method to update state while preventing effect loops\n * Ensures at least one section always exists\n */\n updateState(updater) {\n this.isInternalUpdate = true;\n try {\n this.builderState.update((state) => {\n const updatedState = updater(state);\n // Safety check: ensure at least one section always exists\n if (updatedState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return {\n ...updatedState,\n sections: [defaultSection],\n };\n }\n return updatedState;\n });\n }\n finally {\n // Reset flag after current execution context\n Promise.resolve().then(() => {\n this.isInternalUpdate = false;\n });\n }\n }\n /**\n * Handle adding a new section\n */\n async handleAddSection() {\n try {\n const addTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title') || 'Add Section';\n const titleLabel = await this.translationService.translateAsync('@general:terms.common.title') || 'Title';\n const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description') || 'Description';\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(addTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n title: '',\n description: '',\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(titleLabel, (field) => {\n field.path('title');\n field.textBox({\n placeholder: 'Enter section title',\n validations: [{ rule: 'required' }],\n });\n })\n .formField(descriptionLabel, (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: 'Enter section description (optional)',\n rows: 3,\n });\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n const newSection = createDefaultSection();\n newSection.order = this.sections().length;\n newSection.title = formData.title || 'New Section';\n newSection.description = formData.description || undefined;\n this.updateState((state) => ({\n ...state,\n sections: [...state.sections, newSection],\n }));\n // Scroll to the newly added section after DOM update\n setTimeout(() => {\n const sectionElement = document.getElementById(`section-${newSection.id}`);\n if (sectionElement) {\n sectionElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n }\n }\n catch (error) {\n console.error('Error adding section:', error);\n }\n }\n /**\n * Handle section editing\n */\n async handleSectionEdit(section) {\n try {\n const editTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.edit-section.title') || 'Edit Section';\n const titleLabel = await this.translationService.translateAsync('@general:terms.common.title') || 'Title';\n const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description') || 'Description';\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(editTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n title: section.title || '',\n description: section.description || '',\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(titleLabel, (field) => {\n field.path('title');\n field.textBox({\n placeholder: 'Enter section title',\n validations: [{ rule: 'required' }],\n });\n })\n .formField(descriptionLabel, (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: 'Enter section description (optional)',\n rows: 3,\n });\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n this.updateState((state) => ({\n ...state,\n sections: state.sections.map((s) => s.id === section.id\n ? {\n ...s,\n title: formData.title || s.title,\n description: formData.description !== undefined ? formData.description : s.description,\n }\n : s),\n }));\n }\n }\n catch (error) {\n console.error('Error editing section:', error);\n }\n }\n /**\n * Handle section removal\n */\n handleSectionRemove(section) {\n // Don't allow removing the last section - must always have at least one\n if (this.sections().length <= 1) {\n return;\n }\n // Remove the section and update order values\n this.updateState((state) => ({\n ...state,\n sections: state.sections\n .filter((s) => s.id !== section.id)\n .map((s, index) => ({\n ...s,\n order: index,\n })),\n }));\n }\n /**\n * Handle section drop (reordering)\n */\n handleSectionDrop(event) {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n // Update order values\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section, index) => ({\n ...section,\n order: index,\n })),\n }));\n }\n }\n //#endregion\n //#region ---- Item Management ----\n /**\n * Handle adding questions to a section\n */\n async handleAddQuestionsToSection(section) {\n try {\n const dataSource = new AXDataSource({\n key: 'id',\n pageSize: 20,\n load: async (e) => {\n const questions = await this.questionBankService.query(e);\n return {\n items: questions.items,\n total: questions.total,\n };\n },\n });\n // Create category tree data source for filtering\n const categoryTreeDataSource = {\n loadRootNodes: async () => {\n const result = await this.questionBankService.getCategoriesList({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'isEmpty' },\n value: true,\n },\n });\n return result.items.map((item) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n loadChildNodes: async (parentId) => {\n const result = await this.questionBankService.getCategoriesList({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'equal' },\n value: parentId,\n },\n });\n return result.items.map((item) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n searchNodes: async (searchValue) => {\n const result = await this.questionBankService.getCategoriesList({\n skip: 0,\n take: 1000,\n filter: {\n filters: [\n {\n field: 'title',\n operator: { type: 'contains' },\n value: searchValue,\n },\n {\n field: 'name',\n operator: { type: 'contains' },\n value: searchValue,\n },\n ],\n logic: 'or',\n },\n });\n return result.items.map((item) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n };\n const entity = await this.entityResolver.resolve(RootConfig.module.name, RootConfig.entities.questionBankItem.name);\n if (!entity) {\n throw new Error('Entity not found: ' + RootConfig.entities.questionBankItem.name);\n }\n const columns = entity.columns\n ?.filter((column) => entity.properties.some((property) => property.name === column.name))\n .map((column) => {\n const property = entity.properties.find((prop) => prop.name === column.name);\n return {\n name: column.name,\n title: property?.title ?? '',\n visible: column.options?.visible !== false,\n widget: {\n type: column.showAs?.type ?? property?.schema?.interface?.type ?? 'text-editor',\n options: column.showAs?.options ?? property?.schema?.interface?.options ?? {},\n },\n };\n }) || [];\n // Translate titles\n const selectQuestionsTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.select-questions') || 'Select Questions from Question Bank';\n const categoriesTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.categories') || 'Categories';\n const titleLabel = await this.translationService.translateAsync('@general:terms.common.title') || 'Title';\n const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description') || 'Description';\n // Open data selector with category filter\n const result = await this.dataSelectorService.openWithCategoryFilter({\n title: selectQuestionsTitle,\n dataSource: dataSource,\n columns: columns,\n selectionMode: 'multiple',\n searchFields: [\n { name: 'title', title: titleLabel },\n { name: 'description', title: descriptionLabel },\n ],\n allowCreate: false,\n }, {\n title: categoriesTitle,\n dataSource: categoryTreeDataSource,\n filterField: 'categoryIds',\n filterOperator: 'contains',\n width: '350px',\n });\n // Add selected questions to the section\n if (result?.items && result.items.length > 0) {\n // Load full question details for each selected item\n const questionPromises = result.items.map((item) => this.questionBankService.getOne(item.id).catch(() => null));\n const questions = await Promise.all(questionPromises);\n const newItems = result.items.map((item, index) => {\n const fullQuestion = questions[index];\n return {\n id: AXPDataGenerator.uuid(),\n questionBankItemId: item.id,\n order: section.items.length + index,\n isRequired: false,\n visibilityCondition: undefined,\n requiredCondition: undefined,\n scoringOverride: undefined,\n isNewlyAdded: true,\n question: fullQuestion\n ? {\n id: fullQuestion.id,\n title: fullQuestion.title,\n description: fullQuestion.description,\n difficulty: fullQuestion.difficulty,\n scoringType: fullQuestion.scoringType,\n }\n : {\n id: item.id,\n title: item.title || 'Question',\n description: item.description,\n difficulty: item.difficulty,\n scoringType: item.scoringType,\n },\n };\n });\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((s) => s.id === section.id\n ? {\n ...s,\n items: [...s.items, ...newItems],\n }\n : s),\n }));\n }\n }\n catch (error) {\n console.error('Error loading questions:', error);\n }\n }\n /**\n * Handle item removal\n */\n handleItemRemove(item, sectionId) {\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id !== sectionId)\n return section;\n // Hard delete - remove item from array\n return {\n ...section,\n items: section.items.filter((i) => i.id !== item.id).map((item, index) => ({\n ...item,\n order: index,\n })),\n };\n }),\n }));\n }\n /**\n * Handle question item editing (settings)\n */\n async handleItemEdit(item, sectionId) {\n try {\n // Load full question details to get default scoring values\n const questionDetails = item.questionBankItemId\n ? await this.questionBankService.getOne(item.questionBankItemId).catch(() => null)\n : null;\n const editTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.edit-question.title') || 'Edit Question Settings';\n const isRequiredLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.is-required.title') || 'Required';\n const visibilityConditionLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.visibility-condition.title') || 'Visibility Condition';\n const requiredConditionLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.required-condition.title') || 'Required Condition';\n const scoringPointsLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.scoring-points.title') || 'Scoring Points';\n const scoringWeightLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.scoring-weight.title') || 'Scoring Weight';\n // Get default values from question bank item or use existing override values\n const defaultScoringPoints = item.scoringOverride?.points ?? questionDetails?.points ?? '';\n const defaultScoringWeight = item.scoringOverride?.weight ?? questionDetails?.weight ?? '';\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(editTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n isRequired: item.isRequired ?? false,\n visibilityCondition: item.visibilityCondition || '',\n requiredCondition: item.requiredCondition || '',\n scoringPoints: defaultScoringPoints,\n scoringWeight: defaultScoringWeight,\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(isRequiredLabel, (field) => {\n field.path('isRequired');\n field.toggleSwitch();\n })\n .formField(visibilityConditionLabel, (field) => {\n field.path('visibilityCondition');\n field.customWidget('code-editor', {\n language: 'javascript',\n lineNumbers: true,\n height: 'min-h-48',\n });\n })\n .formField(requiredConditionLabel, (field) => {\n field.path('requiredCondition');\n field.customWidget('code-editor', {\n language: 'javascript',\n lineNumbers: true,\n height: 'min-h-48',\n });\n })\n .formField(scoringPointsLabel, (field) => {\n field.path('scoringPoints');\n field.numberBox({\n placeholder: 'Enter scoring points (optional)',\n });\n })\n .formField(scoringWeightLabel, (field) => {\n field.path('scoringWeight');\n field.numberBox({\n placeholder: 'Enter scoring weight (optional)',\n });\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n this.updateState((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id !== sectionId)\n return section;\n return {\n ...section,\n items: section.items.map((i) => {\n if (i.id !== item.id)\n return i;\n // Build scoring override if points or weight are provided\n let scoringOverride = undefined;\n const hasPoints = formData.scoringPoints !== undefined && formData.scoringPoints !== null && formData.scoringPoints !== '';\n const hasWeight = formData.scoringWeight !== undefined && formData.scoringWeight !== null && formData.scoringWeight !== '';\n if (hasPoints || hasWeight) {\n scoringOverride = {};\n if (hasPoints) {\n scoringOverride.points = Number(formData.scoringPoints);\n }\n if (hasWeight) {\n scoringOverride.weight = Number(formData.scoringWeight);\n }\n }\n return {\n ...i,\n isRequired: formData.isRequired ?? false,\n visibilityCondition: formData.visibilityCondition || undefined,\n requiredCondition: formData.requiredCondition || undefined,\n scoringOverride: scoringOverride,\n };\n }),\n };\n }),\n }));\n }\n }\n catch (error) {\n console.error('Error editing question:', error);\n }\n }\n /**\n * Handle item drop (reordering within section or between sections)\n */\n handleItemDrop(event, targetSectionId) {\n if (event.previousContainer === event.container) {\n // Reordering within same section\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id !== targetSectionId)\n return section;\n return {\n ...section,\n items: section.items.map((item, index) => ({\n ...item,\n order: index,\n })),\n };\n }),\n }));\n }\n else {\n // Moving item between sections\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n // Update orders for both sections\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id === targetSectionId || section.id === event.previousContainer.id) {\n return {\n ...section,\n items: section.items.map((item, index) => ({\n ...item,\n order: index,\n })),\n };\n }\n return section;\n }),\n }));\n }\n }\n /**\n * Get all section drop lists for drag-drop connectivity\n */\n getAllSectionDropLists() {\n return this.sections().map((section) => `section-${section.id}-items`);\n }\n //#endregion\n //#region ---- Display Settings ----\n /**\n * Handle opening display settings dialog\n */\n async handleSettings() {\n try {\n const settingsTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.settings.title') || 'Display Settings';\n const viewModeLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.title') || 'View Mode';\n const showProgressBarLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-progress-bar.title') || 'Show Progress Bar';\n const showTimerLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-timer.title') || 'Show Timer';\n const showSectionTitlesLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-section-titles.title') || 'Show Section Titles';\n const showQuestionNumbersLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-question-numbers.title') || 'Show Question Numbers';\n const validateBeforeNavigationLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.validate-before-navigation.title') || 'Validate Before Navigation';\n const currentSettings = this.displaySettings();\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(settingsTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n viewMode: currentSettings.viewMode || 'single-page',\n showProgressBar: currentSettings.showProgressBar ?? true,\n showTimer: currentSettings.showTimer ?? false,\n showSectionTitles: currentSettings.showSectionTitles ?? true,\n showQuestionNumbers: currentSettings.showQuestionNumbers ?? true,\n validateBeforeNavigation: currentSettings.validateBeforeNavigation ?? true,\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(viewModeLabel, (field) => {\n field.path('viewMode');\n field.selectBox({\n valueField: 'id',\n textField: 'title',\n dataSource: [\n { id: 'single-page', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.single-page' },\n { id: 'page-per-group', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.page-per-group' },\n { id: 'page-per-question', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.page-per-question' },\n { id: 'side-menu', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.side-menu' },\n ],\n });\n })\n .formField(showProgressBarLabel, (field) => {\n field.path('showProgressBar');\n field.toggleSwitch();\n })\n .formField(showTimerLabel, (field) => {\n field.path('showTimer');\n field.toggleSwitch();\n })\n .formField(showSectionTitlesLabel, (field) => {\n field.path('showSectionTitles');\n field.toggleSwitch();\n })\n .formField(showQuestionNumbersLabel, (field) => {\n field.path('showQuestionNumbers');\n field.toggleSwitch();\n })\n .formField(validateBeforeNavigationLabel, (field) => {\n field.path('validateBeforeNavigation');\n field.toggleSwitch();\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n // Extract viewMode - handle both string and object (from select box)\n let viewMode = 'single-page';\n const viewModeValue = formData.viewMode;\n if (typeof viewModeValue === 'string') {\n viewMode = viewModeValue;\n }\n else if (viewModeValue && typeof viewModeValue === 'object' && 'id' in viewModeValue) {\n viewMode = viewModeValue.id;\n }\n const newSettings = {\n viewMode: viewMode,\n showProgressBar: formData.showProgressBar ?? true,\n showTimer: formData.showTimer ?? false,\n showSectionTitles: formData.showSectionTitles ?? true,\n showQuestionNumbers: formData.showQuestionNumbers ?? true,\n validateBeforeNavigation: formData.validateBeforeNavigation ?? true,\n };\n // Update state by preserving existing question data and updating displaySettings in state\n this.updateState((state) => {\n // Update displaySettings in state directly\n const updatedState = {\n ...state,\n displaySettings: newSettings,\n };\n return updatedState;\n });\n }\n }\n catch (error) {\n console.error('Error opening settings:', error);\n }\n }\n //#endregion\n //#region ---- Preview ----\n /**\n * Open preview dialog with questionnaire viewer\n */\n async handlePreview() {\n if (this.sections().length === 0) {\n return;\n }\n try {\n const currentValue = convertStateToValue(this.builderState(), this.value() || undefined);\n // Always use the current displaySettings from the computed property to ensure preview uses latest settings\n currentValue.displaySettings = this.displaySettings();\n const previewTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title') || 'Preview';\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure: currentValue,\n size: 'lg',\n });\n // Handle result if needed (answers, submitted status)\n if (result) {\n console.log('Questionnaire preview result:', result);\n }\n }\n catch (error) {\n console.error('Error opening preview:', error);\n }\n }\n /**\n * Toggle fullscreen mode using the directive\n */\n async handleFullscreen() {\n const fullscreen = this.fullscreenDirective();\n if (fullscreen) {\n await fullscreen.toggle();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMQuestionnaireBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMQuestionnaireBuilderComponent, isStandalone: true, selector: \"axm-questionnaire-builder\", inputs: { value: { classPropertyName: \"value\", publicName: \"value\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: \"valueChange\" }, viewQueries: [{ propertyName: \"fullscreenDirective\", first: true, predicate: [\"fullscreen\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"axm-questionnaire-builder\\\" axFullscreen #fullscreen=\\\"axFullscreen\\\">\\n <div class=\\\"__header\\\">\\n <div class=\\\"__header-left\\\">\\n <!-- Left side can be used for other actions in the future -->\\n </div>\\n <div class=\\\"__header-right\\\">\\n @if (!readonly()) {\\n\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title' | translate | async) || 'Add Section'\\\"\\n [color]=\\\"'primary'\\\" (onClick)=\\\"handleAddSection()\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-layer-group\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.settings.title' | translate | async) || 'Settings'\\\"\\n (onClick)=\\\"handleSettings()\\\">\\n <ax-icon icon=\\\"fa-light fa-gear\\\"></ax-icon>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title' | translate | async) || 'Preview'\\\"\\n [disabled]=\\\"sections().length === 0\\\" (onClick)=\\\"handlePreview()\\\">\\n <ax-icon icon=\\\"fa-light fa-eye\\\"></ax-icon>\\n </ax-button>\\n }\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.fullscreen.title' | translate | async) || 'Full Screen'\\\"\\n (onClick)=\\\"handleFullscreen()\\\">\\n <ax-icon icon=\\\"fa-light fa-expand\\\"></ax-icon>\\n </ax-button>\\n </div>\\n </div>\\n\\n <div class=\\\"__content\\\">\\n <!-- Designer Mode -->\\n <div class=\\\"__sections-container\\\" cdkDropList [cdkDropListData]=\\\"sections()\\\"\\n (cdkDropListDropped)=\\\"handleSectionDrop($event)\\\">\\n @for (section of sections(); track section.id) {\\n <div class=\\\"__section\\\" cdkDrag [id]=\\\"'section-' + section.id\\\">\\n <div class=\\\"__section-header\\\">\\n @if (!readonly()) {\\n <div class=\\\"__section-drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n <div class=\\\"__section-info\\\">\\n <h3 class=\\\"__section-title\\\">{{ section.title }}</h3>\\n @if (section.description) {\\n <p class=\\\"__section-description\\\">{{ section.description }}</p>\\n }\\n </div>\\n @if (!readonly()) {\\n <div class=\\\"__section-actions\\\">\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"'@assessment-management:questionnaires.components.questionnaire-builder.actions.add-question.title' | translate | async\\\"\\n [color]=\\\"'accent2'\\\" (onClick)=\\\"handleAddQuestionsToSection(section)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-plus\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleSectionEdit(section)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n @if (canRemoveSection()) {\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleSectionRemove(section)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"__items-container\\\">\\n <div class=\\\"__items-list ax-overflow-auto\\\" cdkDropList [id]=\\\"'section-' + section.id + '-items'\\\"\\n [cdkDropListData]=\\\"section.items\\\" [cdkDropListConnectedTo]=\\\"getAllSectionDropLists()\\\"\\n (cdkDropListDropped)=\\\"handleItemDrop($event, section.id)\\\">\\n @if (section.items.length === 0) {\\n <axp-state-message icon=\\\"fa-light fa-inbox\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.title' | translate | async) || ''\\\"\\n [description]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.description' | translate | async) || ''\\\">\\n </axp-state-message>\\n } @else {\\n @for (item of section.items; track item.id) {\\n <div class=\\\"__item\\\" cdkDrag>\\n @if (!readonly()) {\\n <div class=\\\"__drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-header\\\">\\n <div class=\\\"__item-icon\\\"\\n [class.__difficulty-easy]=\\\"item.question?.difficulty === 'easy'\\\"\\n [class.__difficulty-medium]=\\\"item.question?.difficulty === 'medium'\\\"\\n [class.__difficulty-hard]=\\\"item.question?.difficulty === 'hard'\\\">\\n <ax-icon icon=\\\"fa-light fa-question-circle\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-info\\\">\\n <h4 class=\\\"__item-title\\\">{{ item.question?.title ?? 'Question' }}</h4>\\n @if (item.question?.description) {\\n <p class=\\\"__item-description\\\">{{ item.question?.description }}</p>\\n }\\n </div>\\n <div class=\\\"__item-meta\\\">\\n @if (item.isRequired) {\\n <span class=\\\"__item-badge __required\\\">Required</span>\\n }\\n @if (item.scoringOverride) {\\n <span class=\\\"__item-badge\\\">Custom Scoring</span>\\n }\\n </div>\\n </div>\\n </div>\\n\\n @if (!readonly()) {\\n <div class=\\\"__item-actions\\\">\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleItemEdit(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleItemRemove(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n }\\n }\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n</div>\", styles: [\".axm-questionnaire-builder{display:flex;height:100%;width:100%;flex-direction:column}.axm-questionnaire-builder .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;padding:.75rem}.axm-questionnaire-builder .__header .__header-left,.axm-questionnaire-builder .__header .__header-right{display:flex;gap:.5rem}.axm-questionnaire-builder .__content{flex:1 1 0%;overflow:auto;padding:.75rem}.axm-questionnaire-builder .__sections-container{display:flex;flex-direction:column;gap:1rem}.axm-questionnaire-builder .__section{border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__section .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__section .__items-container{padding:1rem}.axm-questionnaire-builder .__section .__items-container .__items-list{gap:.75rem;min-height:3rem;display:flex;flex-direction:column}.axm-questionnaire-builder .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));cursor:move;-webkit-user-select:none;user-select:none;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.__selected{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-accent2-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-accent2-lightest-surface));color:rgb(var(--ax-sys-color-on-accent2-lightest-surface));border-color:rgb(var(--ax-sys-color-border-accent2-lightest-surface))}.axm-questionnaire-builder .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab;transition:color .15s ease-in-out}.axm-questionnaire-builder .__item .__drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__item .__drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content{flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__preview-container>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-sections>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section{border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-description{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item{display:flex;align-items:flex-start;gap:.75rem;border-radius:.375rem;border-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-icon{display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:.375rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info{flex:1 1 0%}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-title{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-badge{margin-top:.5rem;display:inline-block;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__items-container{padding:1rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder{position:relative;opacity:.6;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.5rem;min-height:5.5rem;transition:all .2s ease-in-out;padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__drag-handle,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-content,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-actions{opacity:0}.axm-questionnaire-builder .__section.cdk-drag-placeholder{opacity:.5;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.375rem;min-height:4rem;transition:all .2s ease-in-out}.axm-questionnaire-builder .__section.cdk-drag-placeholder>*{opacity:0}.axm-questionnaire-builder .cdk-drop-list-dragging .__item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.axm-questionnaire-builder .cdk-drop-list-dragging .__section:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.__item.cdk-drag-preview{border-radius:.5rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));display:flex;align-items:center;gap:.75rem;padding:1rem;opacity:.9;box-sizing:border-box}.__item.cdk-drag-preview .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content{flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));opacity:.9;box-sizing:border-box;background-color:var(--ax-lightest-surface)}.__section.cdk-drag-preview .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.__section.cdk-drag-preview .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.__section.cdk-drag-preview .__section-header .__section-info{flex:1 1 0%}.__section.cdk-drag-preview .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-actions{display:flex;gap:.5rem}.__section.cdk-drag-preview .__items-container{padding:1rem}.__section.cdk-drag-preview .__items-container .__items-list{gap:.75rem;display:flex;flex-direction:column}.__section.cdk-drag-preview .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__section.cdk-drag-preview .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content{flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXSwitchModule }, { kind: \"ngmodule\", type: AXLabelModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"directive\", type: \n // CDK DragDrop modules\n CdkDropList, selector: \"[cdkDropList], cdk-drop-list\", inputs: [\"cdkDropListConnectedTo\", \"cdkDropListData\", \"cdkDropListOrientation\", \"id\", \"cdkDropListLockAxis\", \"cdkDropListDisabled\", \"cdkDropListSortingDisabled\", \"cdkDropListEnterPredicate\", \"cdkDropListSortPredicate\", \"cdkDropListAutoScrollDisabled\", \"cdkDropListAutoScrollStep\", \"cdkDropListElementContainer\", \"cdkDropListHasAnchor\"], outputs: [\"cdkDropListDropped\", \"cdkDropListEntered\", \"cdkDropListExited\", \"cdkDropListSorted\"], exportAs: [\"cdkDropList\"] }, { kind: \"directive\", type: CdkDrag, selector: \"[cdkDrag]\", inputs: [\"cdkDragData\", \"cdkDragLockAxis\", \"cdkDragRootElement\", \"cdkDragBoundary\", \"cdkDragStartDelay\", \"cdkDragFreeDragPosition\", \"cdkDragDisabled\", \"cdkDragConstrainPosition\", \"cdkDragPreviewClass\", \"cdkDragPreviewContainer\", \"cdkDragScale\"], outputs: [\"cdkDragStarted\", \"cdkDragReleased\", \"cdkDragEnded\", \"cdkDragEntered\", \"cdkDragExited\", \"cdkDragDropped\", \"cdkDragMoved\"], exportAs: [\"cdkDrag\"] }, { kind: \"directive\", type: CdkDragHandle, selector: \"[cdkDragHandle]\", inputs: [\"cdkDragHandleDisabled\"] }, { kind: \"directive\", type: \n // Fullscreen directive\n AXFullScreenDirective, selector: \"[axFullscreen]\", outputs: [\"fullscreenChange\"], exportAs: [\"axFullscreen\"] }, { kind: \"pipe\", type: i3.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMQuestionnaireBuilderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-questionnaire-builder', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownModule,\n AXFormModule,\n AXSwitchModule,\n AXLabelModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n // CDK DragDrop modules\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n // Fullscreen directive\n AXFullScreenDirective,\n ], template: \"<div class=\\\"axm-questionnaire-builder\\\" axFullscreen #fullscreen=\\\"axFullscreen\\\">\\n <div class=\\\"__header\\\">\\n <div class=\\\"__header-left\\\">\\n <!-- Left side can be used for other actions in the future -->\\n </div>\\n <div class=\\\"__header-right\\\">\\n @if (!readonly()) {\\n\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title' | translate | async) || 'Add Section'\\\"\\n [color]=\\\"'primary'\\\" (onClick)=\\\"handleAddSection()\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-layer-group\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.settings.title' | translate | async) || 'Settings'\\\"\\n (onClick)=\\\"handleSettings()\\\">\\n <ax-icon icon=\\\"fa-light fa-gear\\\"></ax-icon>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title' | translate | async) || 'Preview'\\\"\\n [disabled]=\\\"sections().length === 0\\\" (onClick)=\\\"handlePreview()\\\">\\n <ax-icon icon=\\\"fa-light fa-eye\\\"></ax-icon>\\n </ax-button>\\n }\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.fullscreen.title' | translate | async) || 'Full Screen'\\\"\\n (onClick)=\\\"handleFullscreen()\\\">\\n <ax-icon icon=\\\"fa-light fa-expand\\\"></ax-icon>\\n </ax-button>\\n </div>\\n </div>\\n\\n <div class=\\\"__content\\\">\\n <!-- Designer Mode -->\\n <div class=\\\"__sections-container\\\" cdkDropList [cdkDropListData]=\\\"sections()\\\"\\n (cdkDropListDropped)=\\\"handleSectionDrop($event)\\\">\\n @for (section of sections(); track section.id) {\\n <div class=\\\"__section\\\" cdkDrag [id]=\\\"'section-' + section.id\\\">\\n <div class=\\\"__section-header\\\">\\n @if (!readonly()) {\\n <div class=\\\"__section-drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n <div class=\\\"__section-info\\\">\\n <h3 class=\\\"__section-title\\\">{{ section.title }}</h3>\\n @if (section.description) {\\n <p class=\\\"__section-description\\\">{{ section.description }}</p>\\n }\\n </div>\\n @if (!readonly()) {\\n <div class=\\\"__section-actions\\\">\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"'@assessment-management:questionnaires.components.questionnaire-builder.actions.add-question.title' | translate | async\\\"\\n [color]=\\\"'accent2'\\\" (onClick)=\\\"handleAddQuestionsToSection(section)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-plus\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleSectionEdit(section)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n @if (canRemoveSection()) {\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleSectionRemove(section)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"__items-container\\\">\\n <div class=\\\"__items-list ax-overflow-auto\\\" cdkDropList [id]=\\\"'section-' + section.id + '-items'\\\"\\n [cdkDropListData]=\\\"section.items\\\" [cdkDropListConnectedTo]=\\\"getAllSectionDropLists()\\\"\\n (cdkDropListDropped)=\\\"handleItemDrop($event, section.id)\\\">\\n @if (section.items.length === 0) {\\n <axp-state-message icon=\\\"fa-light fa-inbox\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.title' | translate | async) || ''\\\"\\n [description]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.description' | translate | async) || ''\\\">\\n </axp-state-message>\\n } @else {\\n @for (item of section.items; track item.id) {\\n <div class=\\\"__item\\\" cdkDrag>\\n @if (!readonly()) {\\n <div class=\\\"__drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-header\\\">\\n <div class=\\\"__item-icon\\\"\\n [class.__difficulty-easy]=\\\"item.question?.difficulty === 'easy'\\\"\\n [class.__difficulty-medium]=\\\"item.question?.difficulty === 'medium'\\\"\\n [class.__difficulty-hard]=\\\"item.question?.difficulty === 'hard'\\\">\\n <ax-icon icon=\\\"fa-light fa-question-circle\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-info\\\">\\n <h4 class=\\\"__item-title\\\">{{ item.question?.title ?? 'Question' }}</h4>\\n @if (item.question?.description) {\\n <p class=\\\"__item-description\\\">{{ item.question?.description }}</p>\\n }\\n </div>\\n <div class=\\\"__item-meta\\\">\\n @if (item.isRequired) {\\n <span class=\\\"__item-badge __required\\\">Required</span>\\n }\\n @if (item.scoringOverride) {\\n <span class=\\\"__item-badge\\\">Custom Scoring</span>\\n }\\n </div>\\n </div>\\n </div>\\n\\n @if (!readonly()) {\\n <div class=\\\"__item-actions\\\">\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleItemEdit(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleItemRemove(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n }\\n }\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n</div>\", styles: [\".axm-questionnaire-builder{display:flex;height:100%;width:100%;flex-direction:column}.axm-questionnaire-builder .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;padding:.75rem}.axm-questionnaire-builder .__header .__header-left,.axm-questionnaire-builder .__header .__header-right{display:flex;gap:.5rem}.axm-questionnaire-builder .__content{flex:1 1 0%;overflow:auto;padding:.75rem}.axm-questionnaire-builder .__sections-container{display:flex;flex-direction:column;gap:1rem}.axm-questionnaire-builder .__section{border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__section .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__section .__items-container{padding:1rem}.axm-questionnaire-builder .__section .__items-container .__items-list{gap:.75rem;min-height:3rem;display:flex;flex-direction:column}.axm-questionnaire-builder .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));cursor:move;-webkit-user-select:none;user-select:none;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.__selected{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-accent2-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-accent2-lightest-surface));color:rgb(var(--ax-sys-color-on-accent2-lightest-surface));border-color:rgb(var(--ax-sys-color-border-accent2-lightest-surface))}.axm-questionnaire-builder .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab;transition:color .15s ease-in-out}.axm-questionnaire-builder .__item .__drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__item .__drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content{flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__preview-container>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-sections>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section{border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-description{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item{display:flex;align-items:flex-start;gap:.75rem;border-radius:.375rem;border-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-icon{display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:.375rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info{flex:1 1 0%}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-title{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-badge{margin-top:.5rem;display:inline-block;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__items-container{padding:1rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder{position:relative;opacity:.6;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.5rem;min-height:5.5rem;transition:all .2s ease-in-out;padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__drag-handle,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-content,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-actions{opacity:0}.axm-questionnaire-builder .__section.cdk-drag-placeholder{opacity:.5;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.375rem;min-height:4rem;transition:all .2s ease-in-out}.axm-questionnaire-builder .__section.cdk-drag-placeholder>*{opacity:0}.axm-questionnaire-builder .cdk-drop-list-dragging .__item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.axm-questionnaire-builder .cdk-drop-list-dragging .__section:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.__item.cdk-drag-preview{border-radius:.5rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));display:flex;align-items:center;gap:.75rem;padding:1rem;opacity:.9;box-sizing:border-box}.__item.cdk-drag-preview .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content{flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));opacity:.9;box-sizing:border-box;background-color:var(--ax-lightest-surface)}.__section.cdk-drag-preview .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.__section.cdk-drag-preview .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.__section.cdk-drag-preview .__section-header .__section-info{flex:1 1 0%}.__section.cdk-drag-preview .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-actions{display:flex;gap:.5rem}.__section.cdk-drag-preview .__items-container{padding:1rem}.__section.cdk-drag-preview .__items-container .__items-list{gap:.75rem;display:flex;flex-direction:column}.__section.cdk-drag-preview .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__section.cdk-drag-preview .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content{flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: \"value\", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: \"readonly\", required: false }] }], valueChange: [{ type: i0.Output, args: [\"valueChange\"] }], fullscreenDirective: [{ type: i0.ViewChild, args: ['fullscreen', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hc3Nlc3NtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9xdWVzdGlvbm5haXJlLWJ1aWxkZXIvcXVlc3Rpb25uYWlyZS1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hc3Nlc3NtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9xdWVzdGlvbm5haXJlLWJ1aWxkZXIvcXVlc3Rpb25uYWlyZS1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUUvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBZSxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUs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QUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQjtRQUNsQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7K0dBM2hDUSxnQ0FBZ0M7bUdBQWhDLGdDQUFnQyxzZ0JDcEU3Qyw0alFBMklNLCtweEJEekZFLFlBQVksOEJBQ1osV0FBVyw4QkFDWCxjQUFjLDZYQUNkLGlCQUFpQixzVkFDakIsZ0JBQWdCLDhCQUNoQixZQUFZLDhCQUNaLGNBQWMsOEJBQ2QsYUFBYSw4QkFDYixtQkFBbUIsK0JBQ25CLHdCQUF3QjtnQkFDeEIsdUJBQXVCO2dCQUN2QixXQUFXLHNoQkFDWCxPQUFPLHdjQUNQLGFBQWE7Z0JBQ2IsdUJBQXVCO2dCQUN2QixxQkFBcUI7OzRGQUdoQixnQ0FBZ0M7a0JBeEI1QyxTQUFTOytCQUNJLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLHVCQUF1Qjt3QkFDdkIsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixxQkFBcUI7cUJBQ3hCO2dXQWlEeUUsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiAtLS0tICAgSW1wb3J0cyAgIC0tLS1cblxuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBBWEZvcm1Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyBBWFN3aXRjaE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zd2l0Y2gnO1xuaW1wb3J0IHsgQVhMYWJlbE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sYWJlbCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlLCBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnSGFuZGxlLCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZSB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEFYUEVudGl0eSwgQVhQRW50aXR5UHJvcGVydHksIEFYUEVudGl0eVRhYmxlQ29sdW1uIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlUcmVlRGF0YVNvdXJjZSwgQVhQRGF0YVNlbGVjdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQRW50aXR5RGVmaW5pdGlvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1RdWVzdGlvbkJhbmtJdGVtU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3F1ZXN0aW9uLWJhbmstaXRlbS9xdWVzdGlvbi1iYW5rLWl0ZW0uc2VydmljZSc7XG5pbXBvcnQge1xuICAgIFF1ZXN0aW9ubmFpcmVCdWlsZGVySXRlbSxcbiAgICBRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb24sXG4gICAgUXVlc3Rpb25uYWlyZUJ1aWxkZXJTdGF0ZSxcbiAgICBRdWVzdGlvbm5haXJlQnVpbGRlclZhbHVlLFxuICAgIFF1ZXN0aW9ubmFpcmVEaXNwbGF5U2V0dGluZ3MsXG4gICAgY29udmVydFN0YXRlVG9WYWx1ZSxcbiAgICBjb252ZXJ0VmFsdWVUb1N0YXRlLFxuICAgIGNyZWF0ZURlZmF1bHRTZWN0aW9uLFxufSBmcm9tICcuL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci50eXBlcyc7XG5pbXBvcnQgeyBBWFBEYXRhR2VuZXJhdG9yIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYRnVsbFNjcmVlbkRpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY2RrL2Z1bGwtc2NyZWVuJztcbmltcG9ydCB7IEFYTVF1ZXN0aW9ubmFpcmVWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlc3Rpb25uYWlyZS12aWV3ZXIvcXVlc3Rpb25uYWlyZS12aWV3ZXIuc2VydmljZSc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIENvbXBvbmVudCAgIC0tLS1cblxuLyoqXG4gKiBSZXVzYWJsZSBRdWVzdGlvbm5haXJlIEJ1aWxkZXIgQ29tcG9uZW50XG4gKiBDYW4gYmUgdXNlZCBib3RoIGluIGRpYWxvZyBhbmQgaW5saW5lIGNvbnRleHRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXhtLXF1ZXN0aW9ubmFpcmUtYnVpbGRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIEFYRm9ybU1vZHVsZSxcbiAgICAgICAgQVhTd2l0Y2hNb2R1bGUsXG4gICAgICAgIEFYTGFiZWxNb2R1bGUsXG4gICAgICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgLy8gQ0RLIERyYWdEcm9wIG1vZHVsZXNcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIENka0RyYWdIYW5kbGUsXG4gICAgICAgIC8vIEZ1bGxzY3JlZW4gZGlyZWN0aXZlXG4gICAgICAgIEFYRnVsbFNjcmVlbkRpcmVjdGl2ZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1RdWVzdGlvbm5haXJlQnVpbGRlckNvbXBvbmVudCB7XG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAgIHByb3RlY3RlZCBkYXRhU2VsZWN0b3JTZXJ2aWNlID0gaW5qZWN0KEFYUERhdGFTZWxlY3RvclNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBxdWVzdGlvbkJhbmtTZXJ2aWNlID0gaW5qZWN0KEFYTVF1ZXN0aW9uQmFua0l0ZW1TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgZW50aXR5UmVzb2x2ZXIgPSBpbmplY3QoQVhQRW50aXR5RGVmaW5pdGlvblJlZ2lzdHJ5U2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQVhEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgbGF5b3V0QnVpbGRlciA9IGluamVjdChBWFBMYXlvdXRCdWlsZGVyU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9ubmFpcmVWaWV3ZXJTZXJ2aWNlID0gaW5qZWN0KEFYTVF1ZXN0aW9ubmFpcmVWaWV3ZXJTZXJ2aWNlKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBJbnB1dHMgJiBPdXRwdXRzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCB2YWx1ZSAoUXVlc3Rpb25uYWlyZUJ1aWxkZXJWYWx1ZSlcbiAgICAgKi9cbiAgICB2YWx1ZSA9IGlucHV0PFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUgfCBudWxsPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqIFJlYWRvbmx5IG1vZGVcbiAgICAgKi9cbiAgICByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGNoYW5nZSBldmVudFxuICAgICAqL1xuICAgIHZhbHVlQ2hhbmdlID0gb3V0cHV0PFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWU+KCk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2xhc3MgUHJvcGVydGllcyAgIC0tLS1cblxuICAgIC8vIERlc2lnbmVyIHN0YXRlIG1hbmFnZW1lbnQgLSBhbHdheXMgc3RhcnQgd2l0aCBhdCBsZWFzdCBvbmUgZGVmYXVsdCBzZWN0aW9uXG4gICAgcHJvdGVjdGVkIGJ1aWxkZXJTdGF0ZSA9IHNpZ25hbDxRdWVzdGlvbm5haXJlQnVpbGRlclN0YXRlPih7XG4gICAgICAgIHNlY3Rpb25zOiBbY3JlYXRlRGVmYXVsdFNlY3Rpb24oKV0sXG4gICAgfSk7XG5cbiAgICAvLyBTZWxlY3RlZCBpdGVtIHRyYWNraW5nXG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkSXRlbUlkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZFNlY3Rpb25JZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAgIC8vIFRyYWNrIGlmIHdlJ3JlIG1ha2luZyBpbnRlcm5hbCB1cGRhdGVzIHRvIHByZXZlbnQgZWZmZWN0IGxvb3BzXG4gICAgcHJpdmF0ZSBpc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvLyBGdWxsc2NyZWVuIGRpcmVjdGl2ZSByZWZlcmVuY2VcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZnVsbHNjcmVlbkRpcmVjdGl2ZSA9IHZpZXdDaGlsZDxBWEZ1bGxTY3JlZW5EaXJlY3RpdmU+KCdmdWxsc2NyZWVuJyk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgTGlmZWN5Y2xlICAgLS0tLVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIFRyYWNrIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBwcmV2ZW50IGNpcmN1bGFyIHVwZGF0ZXNcbiAgICAgICAgbGV0IGxhc3RFbWl0dGVkVmFsdWU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAvLyBTeW5jIHZhbHVlIGlucHV0IHRvIHN0YXRlIChvbmx5IHdoZW4gdmFsdWUgY2hhbmdlcyBleHRlcm5hbGx5KVxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc0ludGVybmFsVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdW50cmFja2VkKCgpID0+IHRoaXMuYnVpbGRlclN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnZlcnRTdGF0ZVRvVmFsdWUoY3VycmVudFN0YXRlKTtcblxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGlmIHRoZSB2YWx1ZSBhY3R1YWxseSBjaGFuZ2VkIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHdoYXQgd2UgbGFzdCBlbWl0dGVkXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsU3RyID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3RyID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0RW1pdHRlZFN0ciA9IGxhc3RFbWl0dGVkVmFsdWUgPyBKU09OLnN0cmluZ2lmeShsYXN0RW1pdHRlZFZhbHVlKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb25seSBpZjpcbiAgICAgICAgICAgICAgICAvLyAxLiBUaGUgaW5jb21pbmcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gY3VycmVudCBzdGF0ZSB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIDIuIEFORCBpdCdzIG5vdCB0aGUgdmFsdWUgd2UganVzdCBlbWl0dGVkIChwcmV2ZW50IGNpcmN1bGFyIHVwZGF0ZXMpXG4gICAgICAgICAgICAgICAgaWYgKHZhbFN0ciAhPT0gY3VycmVudFN0ciAmJiB2YWxTdHIgIT09IGxhc3RFbWl0dGVkU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gY29udmVydFZhbHVlVG9TdGF0ZSh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyU3RhdGUuc2V0KG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgcXVlc3Rpb24gZGV0YWlscyBmb3IgYWxsIGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRRdWVzdGlvbkRldGFpbHNGb3JTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgJiYgIXRoaXMuaXNJbnRlcm5hbFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIG51bGwvdW5kZWZpbmVkLCBlbnN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgZGVmYXVsdCBzZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdW50cmFja2VkKCgpID0+IHRoaXMuYnVpbGRlclN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUuc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTZWN0aW9uID0gY3JlYXRlRGVmYXVsdFNlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNlY3Rpb24ub3JkZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyU3RhdGUuc2V0KHsgc2VjdGlvbnM6IFtkZWZhdWx0U2VjdGlvbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3luYyBzdGF0ZSBjaGFuZ2VzIHRvIG91dHB1dFxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmJ1aWxkZXJTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb252ZXJ0U3RhdGVUb1ZhbHVlKHN0YXRlLCBjdXJyZW50VmFsdWUgfHwgdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgLy8gUHJldmVudCBjaXJjdWxhciB1cGRhdGVzXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcm5hbFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbWl0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBxdWVzdGlvbiBkZXRhaWxzIGZvciBhbGwgaXRlbXMgaW4gdGhlIHN0YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkUXVlc3Rpb25EZXRhaWxzRm9yU3RhdGUoc3RhdGU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb25JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAvLyBDb2xsZWN0IGFsbCBxdWVzdGlvbiBiYW5rIGl0ZW0gSURzXG4gICAgICAgIHN0YXRlLnNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHNlY3Rpb24uaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZCAmJiAhaXRlbS5xdWVzdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkcy5hZGQoaXRlbS5xdWVzdGlvbkJhbmtJdGVtSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocXVlc3Rpb25JZHMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIExvYWQgYWxsIHF1ZXN0aW9ucyBpbiBwYXJhbGxlbFxuICAgICAgICBjb25zdCBxdWVzdGlvblByb21pc2VzID0gQXJyYXkuZnJvbShxdWVzdGlvbklkcykubWFwKChpZCkgPT5cbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rU2VydmljZS5nZXRPbmUoaWQpLmNhdGNoKCgpID0+IG51bGwpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBxdWVzdGlvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChxdWVzdGlvblByb21pc2VzKTtcblxuICAgICAgICAvLyBDcmVhdGUgYSBtYXAgb2YgcXVlc3Rpb24gSUQgdG8gcXVlc3Rpb24gZGF0YVxuICAgICAgICBjb25zdCBxdWVzdGlvbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKChxKSA9PiB7XG4gICAgICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uTWFwLnNldChxLmlkLCBxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHN0YXRlIHdpdGggcXVlc3Rpb24gZGV0YWlsc1xuICAgICAgICB0aGlzLmJ1aWxkZXJTdGF0ZS51cGRhdGUoKGN1cnJlbnRTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcbiAgICAgICAgICAgIHNlY3Rpb25zOiBjdXJyZW50U3RhdGUuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnF1ZXN0aW9uKSByZXR1cm4gaXRlbTsgLy8gQWxyZWFkeSBoYXMgcXVlc3Rpb24gZGF0YVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uRGF0YSA9IHF1ZXN0aW9uTWFwLmdldChpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcXVlc3Rpb25EYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcXVlc3Rpb25EYXRhLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcXVlc3Rpb25EYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmaWN1bHR5OiBxdWVzdGlvbkRhdGEuZGlmZmljdWx0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ1R5cGU6IHF1ZXN0aW9uRGF0YS5zY29yaW5nVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENvbXB1dGVkIFByb3BlcnRpZXMgICAtLS0tXG5cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgc2VjdGlvbnMgZm9yIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYnVpbGRlclN0YXRlKCkuc2VjdGlvbnMpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2FuIHJlbW92ZSBzZWN0aW9uIChtdXN0IGhhdmUgYXQgbGVhc3QgMSBzZWN0aW9uKVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjYW5SZW1vdmVTZWN0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWN0aW9ucygpLmxlbmd0aCA+IDEpO1xuXG4gICAgLyoqXG4gICAgICogR2V0IGN1cnJlbnQgZGlzcGxheSBzZXR0aW5ncyBmcm9tIHN0YXRlIG9yIGRlZmF1bHRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGlzcGxheVNldHRpbmdzID0gY29tcHV0ZWQ8UXVlc3Rpb25uYWlyZURpc3BsYXlTZXR0aW5ncz4oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuYnVpbGRlclN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5kaXNwbGF5U2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5U2V0dGluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gdmFsdWUgaWYgc3RhdGUgZG9lc24ndCBoYXZlIGl0XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnZlcnRTdGF0ZVRvVmFsdWUoc3RhdGUsIHRoaXMudmFsdWUoKSB8fCB1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlLmRpc3BsYXlTZXR0aW5ncyB8fCB7XG4gICAgICAgICAgICB2aWV3TW9kZTogJ3NpbmdsZS1wYWdlJyBhcyBjb25zdCxcbiAgICAgICAgICAgIHNob3dQcm9ncmVzc0JhcjogdHJ1ZSxcbiAgICAgICAgICAgIHNob3dUaW1lcjogZmFsc2UsXG4gICAgICAgICAgICBzaG93U2VjdGlvblRpdGxlczogdHJ1ZSxcbiAgICAgICAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IHRydWUsXG4gICAgICAgIH07XG4gICAgfSk7XG5cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZWN0aW9uIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmV2ZW50aW5nIGVmZmVjdCBsb29wc1xuICAgICAqIEVuc3VyZXMgYXQgbGVhc3Qgb25lIHNlY3Rpb24gYWx3YXlzIGV4aXN0c1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlU3RhdGUodXBkYXRlcjogKHN0YXRlOiBRdWVzdGlvbm5haXJlQnVpbGRlclN0YXRlKSA9PiBRdWVzdGlvbm5haXJlQnVpbGRlclN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbnRlcm5hbFVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXJTdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFN0YXRlID0gdXBkYXRlcihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gU2FmZXR5IGNoZWNrOiBlbnN1cmUgYXQgbGVhc3Qgb25lIHNlY3Rpb24gYWx3YXlzIGV4aXN0c1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkU3RhdGUuc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTZWN0aW9uID0gY3JlYXRlRGVmYXVsdFNlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNlY3Rpb24ub3JkZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IFtkZWZhdWx0U2VjdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIFJlc2V0IGZsYWcgYWZ0ZXIgY3VycmVudCBleGVjdXRpb24gY29udGV4dFxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBhZGRpbmcgYSBuZXcgc2VjdGlvblxuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZUFkZFNlY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhZGRUaXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuYWRkLXNlY3Rpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdBZGQgU2VjdGlvbic7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpdGxlTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGdlbmVyYWw6dGVybXMuY29tbW9uLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnVGl0bGUnO1xuXG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi5kZXNjcmlwdGlvbidcbiAgICAgICAgICAgICkgfHwgJ0Rlc2NyaXB0aW9uJztcblxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAgICAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgICAgICAgICAgLmRpYWxvZygoZGlhbG9nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRpdGxlKGFkZFRpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNpemUoJ21kJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDbG9zZUJ1dHRvbih0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQoKGxheW91dEJ1aWxkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoKGZsZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRHYXAoJzE2cHgnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh0aXRsZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCd0aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0VudGVyIHNlY3Rpb24gdGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKGRlc2NyaXB0aW9uTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubGFyZ2VUZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBzZWN0aW9uIGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldEFjdGlvbnMoKGFjdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYW5jZWwoJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1Ym1pdCgnQGdlbmVyYWw6YWN0aW9ucy5zYXZlLnRpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gZGlhbG9nUmVmLmNvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGF3YWl0IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uICE9PSAnY2FuY2VsJyAmJiBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NlY3Rpb24gPSBjcmVhdGVEZWZhdWx0U2VjdGlvbigpO1xuICAgICAgICAgICAgICAgIG5ld1NlY3Rpb24ub3JkZXIgPSB0aGlzLnNlY3Rpb25zKCkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIG5ld1NlY3Rpb24udGl0bGUgPSBmb3JtRGF0YS50aXRsZSB8fCAnTmV3IFNlY3Rpb24nO1xuICAgICAgICAgICAgICAgIG5ld1NlY3Rpb24uZGVzY3JpcHRpb24gPSBmb3JtRGF0YS5kZXNjcmlwdGlvbiB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBbLi4uc3RhdGUuc2VjdGlvbnMsIG5ld1NlY3Rpb25dLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCB0byB0aGUgbmV3bHkgYWRkZWQgc2VjdGlvbiBhZnRlciBET00gdXBkYXRlXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNlY3Rpb24tJHtuZXdTZWN0aW9uLmlkfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25FbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIHNlY3Rpb246JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHNlY3Rpb24gZWRpdGluZ1xuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZVNlY3Rpb25FZGl0KHNlY3Rpb246IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU2VjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWRpdFRpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuYWN0aW9ucy5lZGl0LXNlY3Rpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdFZGl0IFNlY3Rpb24nO1xuXG4gICAgICAgICAgICBjb25zdCB0aXRsZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1RpdGxlJztcblxuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb25MYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAZ2VuZXJhbDp0ZXJtcy5jb21tb24uZGVzY3JpcHRpb24nXG4gICAgICAgICAgICApIHx8ICdEZXNjcmlwdGlvbic7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgICAgICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAgICAgICAgIC5kaWFsb2coKGRpYWxvZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUaXRsZShlZGl0VGl0bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0U2l6ZSgnbWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldENsb3NlQnV0dG9uKHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHNlY3Rpb24udGl0bGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlY3Rpb24uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQoKGxheW91dEJ1aWxkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoKGZsZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRHYXAoJzE2cHgnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh0aXRsZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCd0aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0VudGVyIHNlY3Rpb24gdGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKGRlc2NyaXB0aW9uTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubGFyZ2VUZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBzZWN0aW9uIGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldEFjdGlvbnMoKGFjdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYW5jZWwoJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1Ym1pdCgnQGdlbmVyYWw6YWN0aW9ucy5zYXZlLnRpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gZGlhbG9nUmVmLmNvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGF3YWl0IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uICE9PSAnY2FuY2VsJyAmJiBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgocykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHMuaWQgPT09IHNlY3Rpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvcm1EYXRhLnRpdGxlIHx8IHMudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRGF0YS5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8gZm9ybURhdGEuZGVzY3JpcHRpb24gOiBzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlZGl0aW5nIHNlY3Rpb246JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHNlY3Rpb24gcmVtb3ZhbFxuICAgICAqL1xuICAgIGhhbmRsZVNlY3Rpb25SZW1vdmUoc2VjdGlvbjogUXVlc3Rpb25uYWlyZUJ1aWxkZXJTZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIERvbid0IGFsbG93IHJlbW92aW5nIHRoZSBsYXN0IHNlY3Rpb24gLSBtdXN0IGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZVxuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucygpLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlIHNlY3Rpb24gYW5kIHVwZGF0ZSBvcmRlciB2YWx1ZXNcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNlY3Rpb25zOiBzdGF0ZS5zZWN0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHMpID0+IHMuaWQgIT09IHNlY3Rpb24uaWQpXG4gICAgICAgICAgICAgICAgLm1hcCgocywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgc2VjdGlvbiBkcm9wIChyZW9yZGVyaW5nKVxuICAgICAqL1xuICAgIGhhbmRsZVNlY3Rpb25Ecm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb25bXT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBvcmRlciB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlclN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgoc2VjdGlvbiwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgSXRlbSBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGFkZGluZyBxdWVzdGlvbnMgdG8gYSBzZWN0aW9uXG4gICAgICovXG4gICAgYXN5bmMgaGFuZGxlQWRkUXVlc3Rpb25zVG9TZWN0aW9uKHNlY3Rpb246IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU2VjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBBWERhdGFTb3VyY2Uoe1xuICAgICAgICAgICAgICAgIGtleTogJ2lkJyxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMjAsXG4gICAgICAgICAgICAgICAgbG9hZDogYXN5bmMgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25zID0gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLnF1ZXJ5KGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHF1ZXN0aW9ucy5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiBxdWVzdGlvbnMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgY2F0ZWdvcnkgdHJlZSBkYXRhIHNvdXJjZSBmb3IgZmlsdGVyaW5nXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeVRyZWVEYXRhU291cmNlOiBBWFBDYXRlZ29yeVRyZWVEYXRhU291cmNlID0ge1xuICAgICAgICAgICAgICAgIGxvYWRSb290Tm9kZXM6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLmdldENhdGVnb3JpZXNMaXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2lzRW1wdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSB8fCBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5Db3VudDogaXRlbS5jaGlsZHJlbkNvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRDaGlsZE5vZGVzOiBhc3luYyAocGFyZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXN0aW9uQmFua1NlcnZpY2UuZ2V0Q2F0ZWdvcmllc0xpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3BhcmVudElkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgfHwgaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQ291bnQ6IGl0ZW0uY2hpbGRyZW5Db3VudCB8fCAwLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWFyY2hOb2RlczogYXN5bmMgKHNlYXJjaFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLmdldENhdGVnb3JpZXNMaXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdjb250YWlucycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdjb250YWlucycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgfHwgaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQ291bnQ6IGl0ZW0uY2hpbGRyZW5Db3VudCB8fCAwLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGVudGl0eTogQVhQRW50aXR5IHwgbnVsbCA9IGF3YWl0IHRoaXMuZW50aXR5UmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgICAgIFJvb3RDb25maWcuZW50aXRpZXMucXVlc3Rpb25CYW5rSXRlbS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRpdHkgbm90IGZvdW5kOiAnICsgUm9vdENvbmZpZy5lbnRpdGllcy5xdWVzdGlvbkJhbmtJdGVtLm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID1cbiAgICAgICAgICAgICAgICBlbnRpdHkuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICA/LmZpbHRlcigoY29sdW1uOiBBWFBFbnRpdHlUYWJsZUNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eSEucHJvcGVydGllcy5zb21lKChwcm9wZXJ0eTogQVhQRW50aXR5UHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IGNvbHVtbi5uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW46IEFYUEVudGl0eVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGVudGl0eSEucHJvcGVydGllcy5maW5kKChwcm9wOiBBWFBFbnRpdHlQcm9wZXJ0eSkgPT4gcHJvcC5uYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wZXJ0eT8udGl0bGUgPz8gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY29sdW1uLm9wdGlvbnM/LnZpc2libGUgIT09IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjb2x1bW4uc2hvd0FzPy50eXBlID8/IHByb3BlcnR5Py5zY2hlbWE/LmludGVyZmFjZT8udHlwZSA/PyAndGV4dC1lZGl0b3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBjb2x1bW4uc2hvd0FzPy5vcHRpb25zID8/IHByb3BlcnR5Py5zY2hlbWE/LmludGVyZmFjZT8ub3B0aW9ucyA/PyB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSkgfHwgW107XG5cbiAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSB0aXRsZXNcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdFF1ZXN0aW9uc1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuc2VsZWN0LXF1ZXN0aW9ucydcbiAgICAgICAgICAgICkgfHwgJ1NlbGVjdCBRdWVzdGlvbnMgZnJvbSBRdWVzdGlvbiBCYW5rJztcblxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllc1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuY2F0ZWdvcmllcydcbiAgICAgICAgICAgICkgfHwgJ0NhdGVnb3JpZXMnO1xuXG4gICAgICAgICAgICBjb25zdCB0aXRsZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi50aXRsZScpIHx8ICdUaXRsZSc7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi5kZXNjcmlwdGlvbicpIHx8ICdEZXNjcmlwdGlvbic7XG5cbiAgICAgICAgICAgIC8vIE9wZW4gZGF0YSBzZWxlY3RvciB3aXRoIGNhdGVnb3J5IGZpbHRlclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5kYXRhU2VsZWN0b3JTZXJ2aWNlLm9wZW5XaXRoQ2F0ZWdvcnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc2VsZWN0UXVlc3Rpb25zVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU6ICdtdWx0aXBsZScsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndGl0bGUnLCB0aXRsZTogdGl0bGVMYWJlbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZGVzY3JpcHRpb24nLCB0aXRsZTogZGVzY3JpcHRpb25MYWJlbCB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd0NyZWF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBjYXRlZ29yaWVzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGNhdGVnb3J5VHJlZURhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnY2F0ZWdvcnlJZHMnLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJPcGVyYXRvcjogJ2NvbnRhaW5zJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICczNTBweCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBzZWxlY3RlZCBxdWVzdGlvbnMgdG8gdGhlIHNlY3Rpb25cbiAgICAgICAgICAgIGlmIChyZXN1bHQ/Lml0ZW1zICYmIHJlc3VsdC5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9hZCBmdWxsIHF1ZXN0aW9uIGRldGFpbHMgZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uUHJvbWlzZXMgPSByZXN1bHQuaXRlbXMubWFwKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rU2VydmljZS5nZXRPbmUoaXRlbS5pZCkuY2F0Y2goKCkgPT4gbnVsbCksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChxdWVzdGlvblByb21pc2VzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zOiBRdWVzdGlvbm5haXJlQnVpbGRlckl0ZW1bXSA9IHJlc3VsdC5pdGVtcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsUXVlc3Rpb24gPSBxdWVzdGlvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25CYW5rSXRlbUlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHNlY3Rpb24uaXRlbXMubGVuZ3RoICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25kaXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkQ29uZGl0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29yaW5nT3ZlcnJpZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTmV3bHlBZGRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBmdWxsUXVlc3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGZ1bGxRdWVzdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZ1bGxRdWVzdGlvbi50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGZ1bGxRdWVzdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmljdWx0eTogZnVsbFF1ZXN0aW9uLmRpZmZpY3VsdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdUeXBlOiBmdWxsUXVlc3Rpb24uc2NvcmluZ1R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgfHwgJ1F1ZXN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZpY3VsdHk6IGl0ZW0uZGlmZmljdWx0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ1R5cGU6IGl0ZW0uc2NvcmluZ1R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlclN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uczogc3RhdGUuc2VjdGlvbnMubWFwKChzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgcy5pZCA9PT0gc2VjdGlvbi5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogWy4uLnMuaXRlbXMsIC4uLm5ld0l0ZW1zXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgcXVlc3Rpb25zOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBpdGVtIHJlbW92YWxcbiAgICAgKi9cbiAgICBoYW5kbGVJdGVtUmVtb3ZlKGl0ZW06IFF1ZXN0aW9ubmFpcmVCdWlsZGVySXRlbSwgc2VjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZGVyU3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLmlkICE9PSBzZWN0aW9uSWQpIHJldHVybiBzZWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgLy8gSGFyZCBkZWxldGUgLSByZW1vdmUgaXRlbSBmcm9tIGFycmF5XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMuZmlsdGVyKChpKSA9PiBpLmlkICE9PSBpdGVtLmlkKS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBxdWVzdGlvbiBpdGVtIGVkaXRpbmcgKHNldHRpbmdzKVxuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZUl0ZW1FZGl0KGl0ZW06IFF1ZXN0aW9ubmFpcmVCdWlsZGVySXRlbSwgc2VjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExvYWQgZnVsbCBxdWVzdGlvbiBkZXRhaWxzIHRvIGdldCBkZWZhdWx0IHNjb3JpbmcgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBxdWVzdGlvbkRldGFpbHMgPSBpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZFxuICAgICAgICAgICAgICAgID8gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLmdldE9uZShpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IGVkaXRUaXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuZWRpdC1xdWVzdGlvbi50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ0VkaXQgUXVlc3Rpb24gU2V0dGluZ3MnO1xuXG4gICAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5maWVsZHMuaXMtcmVxdWlyZWQudGl0bGUnXG4gICAgICAgICAgICApIHx8ICdSZXF1aXJlZCc7XG5cbiAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlDb25kaXRpb25MYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmZpZWxkcy52aXNpYmlsaXR5LWNvbmRpdGlvbi50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Zpc2liaWxpdHkgQ29uZGl0aW9uJztcblxuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRDb25kaXRpb25MYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmZpZWxkcy5yZXF1aXJlZC1jb25kaXRpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdSZXF1aXJlZCBDb25kaXRpb24nO1xuXG4gICAgICAgICAgICBjb25zdCBzY29yaW5nUG9pbnRzTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5maWVsZHMuc2NvcmluZy1wb2ludHMudGl0bGUnXG4gICAgICAgICAgICApIHx8ICdTY29yaW5nIFBvaW50cyc7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjb3JpbmdXZWlnaHRMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmZpZWxkcy5zY29yaW5nLXdlaWdodC50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Njb3JpbmcgV2VpZ2h0JztcblxuICAgICAgICAgICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzIGZyb20gcXVlc3Rpb24gYmFuayBpdGVtIG9yIHVzZSBleGlzdGluZyBvdmVycmlkZSB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTY29yaW5nUG9pbnRzID0gaXRlbS5zY29yaW5nT3ZlcnJpZGU/LnBvaW50cyA/PyBxdWVzdGlvbkRldGFpbHM/LnBvaW50cyA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTY29yaW5nV2VpZ2h0ID0gaXRlbS5zY29yaW5nT3ZlcnJpZGU/LndlaWdodCA/PyBxdWVzdGlvbkRldGFpbHM/LndlaWdodCA/PyAnJztcblxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAgICAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgICAgICAgICAgLmRpYWxvZygoZGlhbG9nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRpdGxlKGVkaXRUaXRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTaXplKCdtZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q2xvc2VCdXR0b24odHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBpdGVtLmlzUmVxdWlyZWQgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbjogaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkQ29uZGl0aW9uOiBpdGVtLnJlcXVpcmVkQ29uZGl0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdQb2ludHM6IGRlZmF1bHRTY29yaW5nUG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdXZWlnaHQ6IGRlZmF1bHRTY29yaW5nV2VpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb250ZW50KChsYXlvdXRCdWlsZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0QnVpbGRlci5mbGV4KChmbGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREaXJlY3Rpb24oJ2NvbHVtbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0R2FwKCcxNnB4JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoaXNSZXF1aXJlZExhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdpc1JlcXVpcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh2aXNpYmlsaXR5Q29uZGl0aW9uTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3Zpc2liaWxpdHlDb25kaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2NvZGUtZWRpdG9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogJ2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnbWluLWgtNDgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQocmVxdWlyZWRDb25kaXRpb25MYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgncmVxdWlyZWRDb25kaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2NvZGUtZWRpdG9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogJ2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnbWluLWgtNDgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoc2NvcmluZ1BvaW50c0xhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdzY29yaW5nUG9pbnRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubnVtYmVyQm94KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBzY29yaW5nIHBvaW50cyAob3B0aW9uYWwpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKHNjb3JpbmdXZWlnaHRMYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2NvcmluZ1dlaWdodCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm51bWJlckJveCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnRW50ZXIgc2NvcmluZyB3ZWlnaHQgKG9wdGlvbmFsKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0QWN0aW9ucygoYWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbmNlbCgnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3VibWl0KCdAZ2VuZXJhbDphY3Rpb25zLnNhdmUudGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNob3coKTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBkaWFsb2dSZWYuY29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gYXdhaXQgZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24gIT09ICdjYW5jZWwnICYmIGZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uczogc3RhdGUuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5pZCAhPT0gc2VjdGlvbklkKSByZXR1cm4gc2VjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBzZWN0aW9uLml0ZW1zLm1hcCgoaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaS5pZCAhPT0gaXRlbS5pZCkgcmV0dXJuIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgc2NvcmluZyBvdmVycmlkZSBpZiBwb2ludHMgb3Igd2VpZ2h0IGFyZSBwcm92aWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2NvcmluZ092ZXJyaWRlOiB7IHBvaW50cz86IG51bWJlcjsgd2VpZ2h0PzogbnVtYmVyIH0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BvaW50cyA9IGZvcm1EYXRhLnNjb3JpbmdQb2ludHMgIT09IHVuZGVmaW5lZCAmJiBmb3JtRGF0YS5zY29yaW5nUG9pbnRzICE9PSBudWxsICYmIGZvcm1EYXRhLnNjb3JpbmdQb2ludHMgIT09ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNXZWlnaHQgPSBmb3JtRGF0YS5zY29yaW5nV2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgZm9ybURhdGEuc2NvcmluZ1dlaWdodCAhPT0gbnVsbCAmJiBmb3JtRGF0YS5zY29yaW5nV2VpZ2h0ICE9PSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUG9pbnRzIHx8IGhhc1dlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlLnBvaW50cyA9IE51bWJlcihmb3JtRGF0YS5zY29yaW5nUG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNXZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29yaW5nT3ZlcnJpZGUud2VpZ2h0ID0gTnVtYmVyKGZvcm1EYXRhLnNjb3JpbmdXZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBmb3JtRGF0YS5pc1JlcXVpcmVkID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbjogZm9ybURhdGEudmlzaWJpbGl0eUNvbmRpdGlvbiB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZENvbmRpdGlvbjogZm9ybURhdGEucmVxdWlyZWRDb25kaXRpb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlOiBzY29yaW5nT3ZlcnJpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlZGl0aW5nIHF1ZXN0aW9uOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBpdGVtIGRyb3AgKHJlb3JkZXJpbmcgd2l0aGluIHNlY3Rpb24gb3IgYmV0d2VlbiBzZWN0aW9ucylcbiAgICAgKi9cbiAgICBoYW5kbGVJdGVtRHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8UXVlc3Rpb25uYWlyZUJ1aWxkZXJJdGVtW10+LCB0YXJnZXRTZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgICAgICAgLy8gUmVvcmRlcmluZyB3aXRoaW4gc2FtZSBzZWN0aW9uXG4gICAgICAgICAgICBtb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXJTdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBzdGF0ZS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24uaWQgIT09IHRhcmdldFNlY3Rpb25JZCkgcmV0dXJuIHNlY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogc2VjdGlvbi5pdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTW92aW5nIGl0ZW0gYmV0d2VlbiBzZWN0aW9uc1xuICAgICAgICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBvcmRlcnMgZm9yIGJvdGggc2VjdGlvbnNcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlclN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5pZCA9PT0gdGFyZ2V0U2VjdGlvbklkIHx8IHNlY3Rpb24uaWQgPT09IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHNlY3Rpb24gZHJvcCBsaXN0cyBmb3IgZHJhZy1kcm9wIGNvbm5lY3Rpdml0eVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRBbGxTZWN0aW9uRHJvcExpc3RzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbnMoKS5tYXAoKHNlY3Rpb24pID0+IGBzZWN0aW9uLSR7c2VjdGlvbi5pZH0taXRlbXNgKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgRGlzcGxheSBTZXR0aW5ncyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBvcGVuaW5nIGRpc3BsYXkgc2V0dGluZ3MgZGlhbG9nXG4gICAgICovXG4gICAgYXN5bmMgaGFuZGxlU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nc1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuYWN0aW9ucy5zZXR0aW5ncy50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ0Rpc3BsYXkgU2V0dGluZ3MnO1xuXG4gICAgICAgICAgICBjb25zdCB2aWV3TW9kZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLXZpZXdlci5maWVsZHMudmlldy1tb2RlLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnVmlldyBNb2RlJztcblxuICAgICAgICAgICAgY29uc3Qgc2hvd1Byb2dyZXNzQmFyTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy5zaG93LXByb2dyZXNzLWJhci50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Nob3cgUHJvZ3Jlc3MgQmFyJztcblxuICAgICAgICAgICAgY29uc3Qgc2hvd1RpbWVyTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy5zaG93LXRpbWVyLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnU2hvdyBUaW1lcic7XG5cbiAgICAgICAgICAgIGNvbnN0IHNob3dTZWN0aW9uVGl0bGVzTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy5zaG93LXNlY3Rpb24tdGl0bGVzLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnU2hvdyBTZWN0aW9uIFRpdGxlcyc7XG5cbiAgICAgICAgICAgIGNvbnN0IHNob3dRdWVzdGlvbk51bWJlcnNMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnNob3ctcXVlc3Rpb24tbnVtYmVycy50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Nob3cgUXVlc3Rpb24gTnVtYmVycyc7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlQmVmb3JlTmF2aWdhdGlvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLXZpZXdlci5maWVsZHMudmFsaWRhdGUtYmVmb3JlLW5hdmlnYXRpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdWYWxpZGF0ZSBCZWZvcmUgTmF2aWdhdGlvbic7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXR0aW5ncyA9IHRoaXMuZGlzcGxheVNldHRpbmdzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgICAgICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAgICAgICAgIC5kaWFsb2coKGRpYWxvZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUaXRsZShzZXR0aW5nc1RpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNpemUoJ21kJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDbG9zZUJ1dHRvbih0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlOiBjdXJyZW50U2V0dGluZ3Mudmlld01vZGUgfHwgJ3NpbmdsZS1wYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3NCYXI6IGN1cnJlbnRTZXR0aW5ncy5zaG93UHJvZ3Jlc3NCYXIgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VGltZXI6IGN1cnJlbnRTZXR0aW5ncy5zaG93VGltZXIgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb25UaXRsZXM6IGN1cnJlbnRTZXR0aW5ncy5zaG93U2VjdGlvblRpdGxlcyA/PyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IGN1cnJlbnRTZXR0aW5ncy5zaG93UXVlc3Rpb25OdW1iZXJzID8/IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uOiBjdXJyZW50U2V0dGluZ3MudmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uID8/IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQoKGxheW91dEJ1aWxkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoKGZsZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRHYXAoJzE2cHgnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh2aWV3TW9kZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCd2aWV3TW9kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdEJveCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZDogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3NpbmdsZS1wYWdlJywgdGl0bGU6ICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnZpZXctbW9kZS5vcHRpb25zLnNpbmdsZS1wYWdlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3BhZ2UtcGVyLWdyb3VwJywgdGl0bGU6ICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnZpZXctbW9kZS5vcHRpb25zLnBhZ2UtcGVyLWdyb3VwJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3BhZ2UtcGVyLXF1ZXN0aW9uJywgdGl0bGU6ICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnZpZXctbW9kZS5vcHRpb25zLnBhZ2UtcGVyLXF1ZXN0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3NpZGUtbWVudScsIHRpdGxlOiAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy52aWV3LW1vZGUub3B0aW9ucy5zaWRlLW1lbnUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZChzaG93UHJvZ3Jlc3NCYXJMYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2hvd1Byb2dyZXNzQmFyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZChzaG93VGltZXJMYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2hvd1RpbWVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZChzaG93U2VjdGlvblRpdGxlc0xhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdzaG93U2VjdGlvblRpdGxlcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRvZ2dsZVN3aXRjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoc2hvd1F1ZXN0aW9uTnVtYmVyc0xhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdzaG93UXVlc3Rpb25OdW1iZXJzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh2YWxpZGF0ZUJlZm9yZU5hdmlnYXRpb25MYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgndmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0QWN0aW9ucygoYWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbmNlbCgnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3VibWl0KCdAZ2VuZXJhbDphY3Rpb25zLnNhdmUudGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNob3coKTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBkaWFsb2dSZWYuY29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gYXdhaXQgZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24gIT09ICdjYW5jZWwnICYmIGZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB2aWV3TW9kZSAtIGhhbmRsZSBib3RoIHN0cmluZyBhbmQgb2JqZWN0IChmcm9tIHNlbGVjdCBib3gpXG4gICAgICAgICAgICAgICAgbGV0IHZpZXdNb2RlOiAnc2luZ2xlLXBhZ2UnIHwgJ3BhZ2UtcGVyLWdyb3VwJyB8ICdwYWdlLXBlci1xdWVzdGlvbicgPSAnc2luZ2xlLXBhZ2UnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdNb2RlVmFsdWUgPSBmb3JtRGF0YS52aWV3TW9kZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZpZXdNb2RlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID0gdmlld01vZGVWYWx1ZSBhcyAnc2luZ2xlLXBhZ2UnIHwgJ3BhZ2UtcGVyLWdyb3VwJyB8ICdwYWdlLXBlci1xdWVzdGlvbic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3TW9kZVZhbHVlICYmIHR5cGVvZiB2aWV3TW9kZVZhbHVlID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZpZXdNb2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPSAodmlld01vZGVWYWx1ZSBhcyBhbnkpLmlkIGFzICdzaW5nbGUtcGFnZScgfCAncGFnZS1wZXItZ3JvdXAnIHwgJ3BhZ2UtcGVyLXF1ZXN0aW9uJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTZXR0aW5nczogUXVlc3Rpb25uYWlyZURpc3BsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU6IHZpZXdNb2RlLFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3NCYXI6IGZvcm1EYXRhLnNob3dQcm9ncmVzc0JhciA/PyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzaG93VGltZXI6IGZvcm1EYXRhLnNob3dUaW1lciA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb25UaXRsZXM6IGZvcm1EYXRhLnNob3dTZWN0aW9uVGl0bGVzID8/IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IGZvcm1EYXRhLnNob3dRdWVzdGlvbk51bWJlcnMgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uOiBmb3JtRGF0YS52YWxpZGF0ZUJlZm9yZU5hdmlnYXRpb24gPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHN0YXRlIGJ5IHByZXNlcnZpbmcgZXhpc3RpbmcgcXVlc3Rpb24gZGF0YSBhbmQgdXBkYXRpbmcgZGlzcGxheVNldHRpbmdzIGluIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGRpc3BsYXlTZXR0aW5ncyBpbiBzdGF0ZSBkaXJlY3RseVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTZXR0aW5nczogbmV3U2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9wZW5pbmcgc2V0dGluZ3M6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFByZXZpZXcgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHByZXZpZXcgZGlhbG9nIHdpdGggcXVlc3Rpb25uYWlyZSB2aWV3ZXJcbiAgICAgKi9cbiAgICBhc3luYyBoYW5kbGVQcmV2aWV3KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnZlcnRTdGF0ZVRvVmFsdWUodGhpcy5idWlsZGVyU3RhdGUoKSwgdGhpcy52YWx1ZSgpIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAvLyBBbHdheXMgdXNlIHRoZSBjdXJyZW50IGRpc3BsYXlTZXR0aW5ncyBmcm9tIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0byBlbnN1cmUgcHJldmlldyB1c2VzIGxhdGVzdCBzZXR0aW5nc1xuICAgICAgICAgICAgY3VycmVudFZhbHVlLmRpc3BsYXlTZXR0aW5ncyA9IHRoaXMuZGlzcGxheVNldHRpbmdzKCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2aWV3VGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5hY3Rpb25zLnByZXZpZXcudGl0bGUnXG4gICAgICAgICAgICApIHx8ICdQcmV2aWV3JztcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVzdGlvbm5haXJlVmlld2VyU2VydmljZS5vcGVuKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJldmlld1RpdGxlLFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHNpemU6ICdsZycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIHJlc3VsdCBpZiBuZWVkZWQgKGFuc3dlcnMsIHN1Ym1pdHRlZCBzdGF0dXMpXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1F1ZXN0aW9ubmFpcmUgcHJldmlldyByZXN1bHQ6JywgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9wZW5pbmcgcHJldmlldzonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgZnVsbHNjcmVlbiBtb2RlIHVzaW5nIHRoZSBkaXJlY3RpdmVcbiAgICAgKi9cbiAgICBhc3luYyBoYW5kbGVGdWxsc2NyZWVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmdWxsc2NyZWVuID0gdGhpcy5mdWxsc2NyZWVuRGlyZWN0aXZlKCk7XG4gICAgICAgIGlmIChmdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICBhd2FpdCBmdWxsc2NyZWVuLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuLy8jZW5kcmVnaW9uXG5cbiIsIjxkaXYgY2xhc3M9XCJheG0tcXVlc3Rpb25uYWlyZS1idWlsZGVyXCIgYXhGdWxsc2NyZWVuICNmdWxsc2NyZWVuPVwiYXhGdWxsc2NyZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIl9faGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJfX2hlYWRlci1sZWZ0XCI+XG4gICAgICAgICAgICA8IS0tIExlZnQgc2lkZSBjYW4gYmUgdXNlZCBmb3Igb3RoZXIgYWN0aW9ucyBpbiB0aGUgZnV0dXJlIC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIl9faGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICBAaWYgKCFyZWFkb25seSgpKSB7XG5cbiAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKCdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuYWRkLXNlY3Rpb24udGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICdBZGQgU2VjdGlvbidcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIiAob25DbGljayk9XCJoYW5kbGVBZGRTZWN0aW9uKClcIj5cbiAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtbGlnaHQgZmEtbGF5ZXItZ3JvdXBcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIignQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5hY3Rpb25zLnNldHRpbmdzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSB8fCAnU2V0dGluZ3MnXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVTZXR0aW5ncygpXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLWxpZ2h0IGZhLWdlYXJcIj48L2F4LWljb24+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIignQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5hY3Rpb25zLnByZXZpZXcudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICdQcmV2aWV3J1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlY3Rpb25zKCkubGVuZ3RoID09PSAwXCIgKG9uQ2xpY2spPVwiaGFuZGxlUHJldmlldygpXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLWxpZ2h0IGZhLWV5ZVwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKCdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuZnVsbHNjcmVlbi50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykgfHwgJ0Z1bGwgU2NyZWVuJ1wiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlRnVsbHNjcmVlbigpXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLWxpZ2h0IGZhLWV4cGFuZFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj5cbiAgICAgICAgPCEtLSBEZXNpZ25lciBNb2RlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiX19zZWN0aW9ucy1jb250YWluZXJcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cInNlY3Rpb25zKClcIlxuICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJoYW5kbGVTZWN0aW9uRHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zKCk7IHRyYWNrIHNlY3Rpb24uaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3NlY3Rpb25cIiBjZGtEcmFnIFtpZF09XCInc2VjdGlvbi0nICsgc2VjdGlvbi5pZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3NlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9fc2VjdGlvbi1kcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtbGlnaHQgZmEtZ3JpcC12ZXJ0aWNhbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9fc2VjdGlvbi1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJfX3NlY3Rpb24tdGl0bGVcIj57eyBzZWN0aW9uLnRpdGxlIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJfX3NlY3Rpb24tZGVzY3JpcHRpb25cIj57eyBzZWN0aW9uLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghcmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuYWN0aW9ucy5hZGQtcXVlc3Rpb24udGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCInYWNjZW50MidcIiAob25DbGljayk9XCJoYW5kbGVBZGRRdWVzdGlvbnNUb1NlY3Rpb24oc2VjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtbGlnaHQgZmEtcGx1c1wiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgW2xvb2tdPVwiJ2JsYW5rJ1wiIGNvbG9yPVwiYWNjZW50M1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlU2VjdGlvbkVkaXQoc2VjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLWxpZ2h0IGZhLXBlbmNpbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjYW5SZW1vdmVTZWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiIFtsb29rXT1cIidibGFuaydcIiBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlU2VjdGlvblJlbW92ZShzZWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2gtY2FuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbXMtbGlzdCBheC1vdmVyZmxvdy1hdXRvXCIgY2RrRHJvcExpc3QgW2lkXT1cIidzZWN0aW9uLScgKyBzZWN0aW9uLmlkICsgJy1pdGVtcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJzZWN0aW9uLml0ZW1zXCIgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiZ2V0QWxsU2VjdGlvbkRyb3BMaXN0cygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiaGFuZGxlSXRlbURyb3AoJGV2ZW50LCBzZWN0aW9uLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzZWN0aW9uLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGF4cC1zdGF0ZS1tZXNzYWdlIGljb249XCJmYS1saWdodCBmYS1pbmJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIignQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5lbXB0eS1zdGF0ZXMuZW1wdHktc2VjdGlvbi50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCIoJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuZW1wdHktc3RhdGVzLmVtcHR5LXNlY3Rpb24uZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4cC1zdGF0ZS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNlY3Rpb24uaXRlbXM7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW1cIiBjZGtEcmFnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19kcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1saWdodCBmYS1ncmlwLXZlcnRpY2FsXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuX19kaWZmaWN1bHR5LWVhc3ldPVwiaXRlbS5xdWVzdGlvbj8uZGlmZmljdWx0eSA9PT0gJ2Vhc3knXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuX19kaWZmaWN1bHR5LW1lZGl1bV09XCJpdGVtLnF1ZXN0aW9uPy5kaWZmaWN1bHR5ID09PSAnbWVkaXVtJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLl9fZGlmZmljdWx0eS1oYXJkXT1cIml0ZW0ucXVlc3Rpb24/LmRpZmZpY3VsdHkgPT09ICdoYXJkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1saWdodCBmYS1xdWVzdGlvbi1jaXJjbGVcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW0taW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIl9faXRlbS10aXRsZVwiPnt7IGl0ZW0ucXVlc3Rpb24/LnRpdGxlID8/ICdRdWVzdGlvbicgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5xdWVzdGlvbj8uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIl9faXRlbS1kZXNjcmlwdGlvblwiPnt7IGl0ZW0ucXVlc3Rpb24/LmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIl9faXRlbS1iYWRnZSBfX3JlcXVpcmVkXCI+UmVxdWlyZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5zY29yaW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIl9faXRlbS1iYWRnZVwiPkN1c3RvbSBTY29yaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgW2xvb2tdPVwiJ2JsYW5rJ1wiIGNvbG9yPVwiYWNjZW50M1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVJdGVtRWRpdChpdGVtLCBzZWN0aW9uLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1saWdodCBmYS1wZW5jaWxcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uIFtsb29rXT1cIidibGFuaydcIiBjbGFzcz1cImF4LXNtXCIgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlSXRlbVJlbW92ZShpdGVtLCBzZWN0aW9uLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1saWdodCBmYS10cmFzaC1jYW5cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ=="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-assessment-management-questionnaire-builder.component-DAOND6qy.mjs","sources":["../tmp-esm2022/assessment-management/lib/features/questionnaire-builder/questionnaire-builder.types.js","../tmp-esm2022/assessment-management/lib/features/questionnaire-builder/questionnaire-builder.component.js"],"sourcesContent":["//#region ---- Imports ----\n//#endregion\n//#region ---- Utility Functions ----\n/**\n * Convert raw value to builder state\n */\nexport function convertValueToState(value) {\n // Handle null/undefined or empty sections\n if (!value || !value.sections || value.sections.length === 0) {\n // Always return at least one default section\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return {\n sections: [defaultSection],\n displaySettings: value?.displaySettings,\n };\n }\n // Handle structure (sections with nested items)\n return {\n sections: value.sections.map((section, sectionIndex) => ({\n id: section.id || `section-${sectionIndex}`,\n title: section.title,\n description: section.description,\n order: section.order ?? sectionIndex,\n visibilityCondition: section.visibilityCondition,\n items: (section.items || []).map((item, itemIndex) => ({\n id: item.id || `item-${itemIndex}`,\n questionBankItemId: item.questionBankItemId,\n order: item.order ?? itemIndex,\n isRequired: item.isRequired,\n visibilityCondition: item.visibilityCondition,\n requiredCondition: item.requiredCondition,\n scoringOverride: item.scoringOverride,\n interfaceOverride: item.interfaceOverride,\n isNewlyAdded: false,\n })),\n isNewlyAdded: false,\n })),\n displaySettings: value.displaySettings,\n };\n}\n/**\n * Convert builder state to value for persistence\n */\nexport function convertStateToValue(state, existingValue) {\n const result = {\n sections: state.sections\n .filter((section) => {\n // Drop sections that are NOT newly added AND have no items\n // Keep sections that are newly added OR have items\n const isNewlyAdded = section.isNewlyAdded === true;\n const hasItems = section.items.length > 0;\n return isNewlyAdded || hasItems;\n })\n .map((section) => {\n return {\n id: section.id,\n title: section.title,\n description: section.description,\n order: section.order,\n visibilityCondition: section.visibilityCondition,\n items: section.items.map((item) => ({\n id: item.id,\n questionBankItemId: item.questionBankItemId,\n order: item.order,\n isRequired: item.isRequired,\n visibilityCondition: item.visibilityCondition,\n requiredCondition: item.requiredCondition,\n scoringOverride: item.scoringOverride,\n interfaceOverride: item.interfaceOverride,\n })),\n };\n }),\n };\n // Preserve displaySettings from state first, then from existing value if state doesn't have it\n if (state.displaySettings) {\n result.displaySettings = state.displaySettings;\n }\n else if (existingValue?.displaySettings) {\n result.displaySettings = existingValue.displaySettings;\n }\n return result;\n}\n/**\n * Create a default section\n */\nexport function createDefaultSection() {\n return {\n id: `section-${Date.now()}`,\n title: 'New Section',\n description: undefined,\n order: 0,\n visibilityCondition: undefined,\n items: [],\n isNewlyAdded: true,\n };\n}\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS1idWlsZGVyLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci9xdWVzdGlvbm5haXJlLWJ1aWxkZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBK0ovQixZQUFZO0FBRVoseUNBQXlDO0FBRXpDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQW1EO0lBQ25GLDBDQUEwQztJQUMxQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzRCw2Q0FBNkM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QyxjQUFjLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPO1lBQ0gsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQzFCLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZTtTQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxPQUFPO1FBQ0gsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxXQUFXLFlBQVksRUFBRTtZQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLFlBQVk7WUFDcEMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFt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QUFFLGFBQWE7UUFDcEIsV0FBVyxFQUFFLFNBQVM7UUFDdEIsS0FBSyxFQUFFLENBQUM7UUFDUixtQkFBbUIsRUFBRSxTQUFTO1FBQzlCLEtBQUssRUFBRSxFQUFFO1FBQ1QsWUFBWSxFQUFFLElBQUk7S0FDckIsQ0FBQztBQUNOLENBQUM7QUFFRCxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBBWFBXaWRnZXROb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBRdWVzdGlvbm5haXJlIEJ1aWxkZXIgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBxdWVzdGlvbiBpdGVtIHdpdGhpbiBhIHNlY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbm5haXJlQnVpbGRlckl0ZW0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcXVlc3Rpb25CYW5rSXRlbUlkOiBzdHJpbmc7XG4gICAgb3JkZXI6IG51bWJlcjtcbiAgICBpc1JlcXVpcmVkPzogYm9vbGVhbjtcbiAgICB2aXNpYmlsaXR5Q29uZGl0aW9uPzogc3RyaW5nO1xuICAgIHJlcXVpcmVkQ29uZGl0aW9uPzogc3RyaW5nO1xuICAgIHNjb3JpbmdPdmVycmlkZT86IHtcbiAgICAgICAgcG9pbnRzPzogbnVtYmVyO1xuICAgICAgICB3ZWlnaHQ/OiBudW1iZXI7XG4gICAgfTtcbiAgICBpbnRlcmZhY2VPdmVycmlkZT86IEFYUFdpZGdldE5vZGU7XG4gICAgaXNOZXdseUFkZGVkPzogYm9vbGVhbjtcblxuICAgIC8vIFJlbGF0ZWQgcXVlc3Rpb24gZGF0YSAoZnJvbSBleHBvc2UpXG4gICAgcXVlc3Rpb24/OiB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBkaWZmaWN1bHR5Pzogc3RyaW5nO1xuICAgICAgICBzY29yaW5nVHlwZT86IHN0cmluZztcbiAgICB9O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBRdWVzdGlvbm5haXJlIEJ1aWxkZXIgU2VjdGlvbiBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2VjdGlvbiBjb250YWluaW5nIHF1ZXN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9ubmFpcmVCdWlsZGVyU2VjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIG9yZGVyOiBudW1iZXI7XG4gICAgdmlzaWJpbGl0eUNvbmRpdGlvbj86IHN0cmluZztcbiAgICBpdGVtczogUXVlc3Rpb25uYWlyZUJ1aWxkZXJJdGVtW107XG4gICAgaXNOZXdseUFkZGVkPzogYm9vbGVhbjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgUXVlc3Rpb25uYWlyZSBCdWlsZGVyIFN0YXRlIFR5cGVzICAgLS0tLVxuXG4vKipcbiAqIE92ZXJhbGwgc3RhdGUgZm9yIHRoZSBxdWVzdGlvbm5haXJlIGJ1aWxkZXIgd2lkZ2V0IChkZXNpZ25lciBtb2RlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9ubmFpcmVCdWlsZGVyU3RhdGUge1xuICAgIHNlY3Rpb25zOiBRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb25bXTtcbiAgICBzZWxlY3RlZEl0ZW1JZD86IHN0cmluZztcbiAgICBzZWxlY3RlZFNlY3Rpb25JZD86IHN0cmluZztcbiAgICBkaXNwbGF5U2V0dGluZ3M/OiBRdWVzdGlvbm5haXJlRGlzcGxheVNldHRpbmdzO1xufVxuXG4vKipcbiAqIERpc3BsYXkgc2V0dGluZ3MgZm9yIHF1ZXN0aW9ubmFpcmUgdmlld2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25uYWlyZURpc3BsYXlTZXR0aW5ncyB7XG4gICAgLyoqXG4gICAgICogVmlldyBtb2RlOiBzaW5nbGUtcGFnZSwgcGFnZS1wZXItZ3JvdXAsIHBhZ2UtcGVyLXF1ZXN0aW9uLCBzaWRlLW1lbnVcbiAgICAgKi9cbiAgICB2aWV3TW9kZT86ICdzaW5nbGUtcGFnZScgfCAncGFnZS1wZXItZ3JvdXAnIHwgJ3BhZ2UtcGVyLXF1ZXN0aW9uJyB8ICdzaWRlLW1lbnUnO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBwcm9ncmVzcyBiYXJcbiAgICAgKi9cbiAgICBzaG93UHJvZ3Jlc3NCYXI/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUHJvZ3Jlc3MgY2FsY3VsYXRpb24gbW9kZTogYW5zd2VyZWQgb3IgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHByb2dyZXNzTW9kZT86ICdhbnN3ZXJlZCcgfCAnbmF2aWdhdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRpbWVyXG4gICAgICovXG4gICAgc2hvd1RpbWVyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFNob3cgc2VjdGlvbiB0aXRsZXNcbiAgICAgKi9cbiAgICBzaG93U2VjdGlvblRpdGxlcz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHF1ZXN0aW9uIG51bWJlcnNcbiAgICAgKi9cbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEF1dG8tc2F2ZSBhbnN3ZXJzIGFzIHVzZXIgdHlwZXNcbiAgICAgKi9cbiAgICBhdXRvU2F2ZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHZhbGlkYXRpb24gZXJyb3JzIGlubGluZVxuICAgICAqL1xuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFsbG93IHNraXBwaW5nIHF1ZXN0aW9ucyAoaWYgbm90IHJlcXVpcmVkKVxuICAgICAqL1xuICAgIGFsbG93U2tpcHBpbmc/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyBxdWVzdGlvbiBjb3VudGVyIChlLmcuLCBcIlF1ZXN0aW9uIDMgb2YgMTBcIilcbiAgICAgKi9cbiAgICBzaG93UXVlc3Rpb25Db3VudGVyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGJlZm9yZSBhbGxvd2luZyBuYXZpZ2F0aW9uIHRvIG90aGVyIHNlY3Rpb25zL3BhZ2VzXG4gICAgICogV2hlbiB0cnVlLCBuYXZpZ2F0aW9uIGlzIGJsb2NrZWQgaWYgY3VycmVudCBwYWdlIGhhcyB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAqIFdoZW4gZmFsc2UsIG5hdmlnYXRpb24gaXMgYWxsb3dlZCBidXQgdmFsaWRhdGlvbiBlcnJvcnMgYXJlIHN0aWxsIHNob3duXG4gICAgICogRGVmYXVsdDogdHJ1ZVxuICAgICAqL1xuICAgIHZhbGlkYXRlQmVmb3JlTmF2aWdhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVmFsdWUgc3RydWN0dXJlIHN0b3JlZCBpbiBlbnRpdHkgKHNpbXBsaWZpZWQgZm9yIHBlcnNpc3RlbmNlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUge1xuICAgIHNlY3Rpb25zOiBBcnJheTx7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBvcmRlcjogbnVtYmVyO1xuICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uPzogc3RyaW5nO1xuICAgICAgICBpdGVtczogQXJyYXk8e1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHF1ZXN0aW9uQmFua0l0ZW1JZDogc3RyaW5nO1xuICAgICAgICAgICAgb3JkZXI6IG51bWJlcjtcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgIHJlcXVpcmVkQ29uZGl0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlPzoge1xuICAgICAgICAgICAgICAgIHBvaW50cz86IG51bWJlcjtcbiAgICAgICAgICAgICAgICB3ZWlnaHQ/OiBudW1iZXI7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW50ZXJmYWNlT3ZlcnJpZGU/OiBBWFBXaWRnZXROb2RlO1xuICAgICAgICB9PjtcbiAgICB9PjtcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5IHNldHRpbmdzIGZvciBxdWVzdGlvbm5haXJlIHZpZXdlclxuICAgICAqL1xuICAgIGRpc3BsYXlTZXR0aW5ncz86IFF1ZXN0aW9ubmFpcmVEaXNwbGF5U2V0dGluZ3M7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgRnVuY3Rpb25zICAgLS0tLVxuXG4vKipcbiAqIENvbnZlcnQgcmF3IHZhbHVlIHRvIGJ1aWxkZXIgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvU3RhdGUodmFsdWU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUgfCBudWxsIHwgdW5kZWZpbmVkKTogUXVlc3Rpb25uYWlyZUJ1aWxkZXJTdGF0ZSB7XG4gICAgLy8gSGFuZGxlIG51bGwvdW5kZWZpbmVkIG9yIGVtcHR5IHNlY3Rpb25zXG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuc2VjdGlvbnMgfHwgdmFsdWUuc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYXQgbGVhc3Qgb25lIGRlZmF1bHQgc2VjdGlvblxuICAgICAgICBjb25zdCBkZWZhdWx0U2VjdGlvbiA9IGNyZWF0ZURlZmF1bHRTZWN0aW9uKCk7XG4gICAgICAgIGRlZmF1bHRTZWN0aW9uLm9yZGVyID0gMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlY3Rpb25zOiBbZGVmYXVsdFNlY3Rpb25dLFxuICAgICAgICAgICAgZGlzcGxheVNldHRpbmdzOiB2YWx1ZT8uZGlzcGxheVNldHRpbmdzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdHJ1Y3R1cmUgKHNlY3Rpb25zIHdpdGggbmVzdGVkIGl0ZW1zKVxuICAgIHJldHVybiB7XG4gICAgICAgIHNlY3Rpb25zOiB2YWx1ZS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIHNlY3Rpb25JbmRleCkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBzZWN0aW9uLmlkIHx8IGBzZWN0aW9uLSR7c2VjdGlvbkluZGV4fWAsXG4gICAgICAgICAgICB0aXRsZTogc2VjdGlvbi50aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWN0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgb3JkZXI6IHNlY3Rpb24ub3JkZXIgPz8gc2VjdGlvbkluZGV4LFxuICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbjogc2VjdGlvbi52aXNpYmlsaXR5Q29uZGl0aW9uLFxuICAgICAgICAgICAgaXRlbXM6IChzZWN0aW9uLml0ZW1zIHx8IFtdKS5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCB8fCBgaXRlbS0ke2l0ZW1JbmRleH1gLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uQmFua0l0ZW1JZDogaXRlbS5xdWVzdGlvbkJhbmtJdGVtSWQsXG4gICAgICAgICAgICAgICAgb3JkZXI6IGl0ZW0ub3JkZXIgPz8gaXRlbUluZGV4LFxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IGl0ZW0uaXNSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uOiBpdGVtLnZpc2liaWxpdHlDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRDb25kaXRpb246IGl0ZW0ucmVxdWlyZWRDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlOiBpdGVtLnNjb3JpbmdPdmVycmlkZSxcbiAgICAgICAgICAgICAgICBpbnRlcmZhY2VPdmVycmlkZTogaXRlbS5pbnRlcmZhY2VPdmVycmlkZSxcbiAgICAgICAgICAgICAgICBpc05ld2x5QWRkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgaXNOZXdseUFkZGVkOiBmYWxzZSxcbiAgICAgICAgfSkpLFxuICAgICAgICBkaXNwbGF5U2V0dGluZ3M6IHZhbHVlLmRpc3BsYXlTZXR0aW5ncyxcbiAgICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYnVpbGRlciBzdGF0ZSB0byB2YWx1ZSBmb3IgcGVyc2lzdGVuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTdGF0ZVRvVmFsdWUoc3RhdGU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU3RhdGUsIGV4aXN0aW5nVmFsdWU/OiBRdWVzdGlvbm5haXJlQnVpbGRlclZhbHVlKTogUXVlc3Rpb25uYWlyZUJ1aWxkZXJWYWx1ZSB7XG4gICAgY29uc3QgcmVzdWx0OiBRdWVzdGlvbm5haXJlQnVpbGRlclZhbHVlID0ge1xuICAgICAgICBzZWN0aW9uczogc3RhdGUuc2VjdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKHNlY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBEcm9wIHNlY3Rpb25zIHRoYXQgYXJlIE5PVCBuZXdseSBhZGRlZCBBTkQgaGF2ZSBubyBpdGVtc1xuICAgICAgICAgICAgICAgIC8vIEtlZXAgc2VjdGlvbnMgdGhhdCBhcmUgbmV3bHkgYWRkZWQgT1IgaGF2ZSBpdGVtc1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTmV3bHlBZGRlZCA9IHNlY3Rpb24uaXNOZXdseUFkZGVkID09PSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0l0ZW1zID0gc2VjdGlvbi5pdGVtcy5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTmV3bHlBZGRlZCB8fCBoYXNJdGVtcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHNlY3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWN0aW9uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VjdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHNlY3Rpb24ub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25kaXRpb246IHNlY3Rpb24udmlzaWJpbGl0eUNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkJhbmtJdGVtSWQ6IGl0ZW0ucXVlc3Rpb25CYW5rSXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGl0ZW0ub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBpdGVtLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uOiBpdGVtLnZpc2liaWxpdHlDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZENvbmRpdGlvbjogaXRlbS5yZXF1aXJlZENvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdPdmVycmlkZTogaXRlbS5zY29yaW5nT3ZlcnJpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VPdmVycmlkZTogaXRlbS5pbnRlcmZhY2VPdmVycmlkZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgLy8gUHJlc2VydmUgZGlzcGxheVNldHRpbmdzIGZyb20gc3RhdGUgZmlyc3QsIHRoZW4gZnJvbSBleGlzdGluZyB2YWx1ZSBpZiBzdGF0ZSBkb2Vzbid0IGhhdmUgaXRcbiAgICBpZiAoc3RhdGUuZGlzcGxheVNldHRpbmdzKSB7XG4gICAgICAgIHJlc3VsdC5kaXNwbGF5U2V0dGluZ3MgPSBzdGF0ZS5kaXNwbGF5U2V0dGluZ3M7XG4gICAgfSBlbHNlIGlmIChleGlzdGluZ1ZhbHVlPy5kaXNwbGF5U2V0dGluZ3MpIHtcbiAgICAgICAgcmVzdWx0LmRpc3BsYXlTZXR0aW5ncyA9IGV4aXN0aW5nVmFsdWUuZGlzcGxheVNldHRpbmdzO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZGVmYXVsdCBzZWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0U2VjdGlvbigpOiBRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb24ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgc2VjdGlvbi0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgdGl0bGU6ICdOZXcgU2VjdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICB2aXNpYmlsaXR5Q29uZGl0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgaXNOZXdseUFkZGVkOiB0cnVlLFxuICAgIH07XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4iXX0=","//#region ---- Imports ----\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CdkDrag, CdkDragHandle, CdkDropList, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPDataSelectorService } from '@acorex/platform/layout/components';\nimport { AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, untracked, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RootConfig } from '../../const';\nimport { AXMQuestionBankItemService } from '../../entities/question-bank-item/question-bank-item.service';\nimport { convertStateToValue, convertValueToState, createDefaultSection, } from './questionnaire-builder.types';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { AXFullScreenDirective } from '@acorex/cdk/full-screen';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer/questionnaire-viewer.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@angular/common\";\nimport * as i4 from \"@acorex/core/translation\";\n//#endregion\n//#region ---- Component ----\n/**\n * Reusable Questionnaire Builder Component\n * Can be used both in dialog and inline contexts\n */\nexport class AXMQuestionnaireBuilderComponent {\n //#endregion\n //#region ---- Lifecycle ----\n constructor() {\n //#region ---- Services & Dependencies ----\n this.dataSelectorService = inject(AXPDataSelectorService);\n this.questionBankService = inject(AXMQuestionBankItemService);\n this.entityResolver = inject(AXPEntityDefinitionRegistryService);\n this.dialogService = inject(AXDialogService);\n this.translationService = inject(AXTranslationService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n //#endregion\n //#region ---- Inputs & Outputs ----\n /**\n * Initial value (QuestionnaireBuilderValue)\n */\n this.value = input(null, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n /**\n * Readonly mode\n */\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n /**\n * Value change event\n */\n this.valueChange = output();\n //#endregion\n //#region ---- Class Properties ----\n // Designer state management - always start with at least one default section\n this.builderState = signal({\n sections: [createDefaultSection()],\n }, ...(ngDevMode ? [{ debugName: \"builderState\" }] : []));\n // Selected item tracking\n this.selectedItemId = signal(null, ...(ngDevMode ? [{ debugName: \"selectedItemId\" }] : []));\n this.selectedSectionId = signal(null, ...(ngDevMode ? [{ debugName: \"selectedSectionId\" }] : []));\n // Track if we're making internal updates to prevent effect loops\n this.isInternalUpdate = false;\n // Fullscreen directive reference\n this.fullscreenDirective = viewChild('fullscreen', ...(ngDevMode ? [{ debugName: \"fullscreenDirective\" }] : []));\n //#endregion\n //#region ---- Computed Properties ----\n /**\n * Get all sections for rendering\n */\n this.sections = computed(() => this.builderState().sections, ...(ngDevMode ? [{ debugName: \"sections\" }] : []));\n /**\n * Check if can remove section (must have at least 1 section)\n */\n this.canRemoveSection = computed(() => this.sections().length > 1, ...(ngDevMode ? [{ debugName: \"canRemoveSection\" }] : []));\n /**\n * Get current display settings from state or default\n */\n this.displaySettings = computed(() => {\n const state = this.builderState();\n if (state.displaySettings) {\n return state.displaySettings;\n }\n // Fallback to value if state doesn't have it\n const currentValue = convertStateToValue(state, this.value() || undefined);\n return currentValue.displaySettings || {\n viewMode: 'single-page',\n showProgressBar: true,\n showTimer: false,\n showSectionTitles: true,\n showQuestionNumbers: true,\n };\n }, ...(ngDevMode ? [{ debugName: \"displaySettings\" }] : []));\n // Track last emitted value to prevent circular updates\n let lastEmittedValue = null;\n // Sync value input to state (only when value changes externally)\n effect(() => {\n const val = this.value();\n if (val !== null && val !== undefined && !this.isInternalUpdate) {\n const currentState = untracked(() => this.builderState());\n const currentValue = convertStateToValue(currentState);\n // Only update if the value actually changed and it's different from what we last emitted\n const valStr = JSON.stringify(val);\n const currentStr = JSON.stringify(currentValue);\n const lastEmittedStr = lastEmittedValue ? JSON.stringify(lastEmittedValue) : null;\n // Update only if:\n // 1. The incoming value is different from current state value\n // 2. AND it's not the value we just emitted (prevent circular updates)\n if (valStr !== currentStr && valStr !== lastEmittedStr) {\n const newState = convertValueToState(val);\n untracked(() => {\n this.builderState.set(newState);\n // Load question details for all items\n this.loadQuestionDetailsForState(newState);\n });\n }\n }\n else if ((val === null || val === undefined) && !this.isInternalUpdate) {\n // If value is null/undefined, ensure we have at least one default section\n const currentState = untracked(() => this.builderState());\n if (currentState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n untracked(() => {\n this.builderState.set({ sections: [defaultSection] });\n });\n }\n }\n });\n // Sync state changes to output\n effect(() => {\n const state = this.builderState();\n const currentValue = this.value();\n const value = convertStateToValue(state, currentValue || undefined);\n // Prevent circular updates\n if (!this.isInternalUpdate) {\n untracked(() => {\n lastEmittedValue = value;\n this.valueChange.emit(value);\n });\n }\n });\n }\n /**\n * Load question details for all items in the state\n */\n async loadQuestionDetailsForState(state) {\n const questionIds = new Set();\n // Collect all question bank item IDs\n state.sections.forEach((section) => {\n section.items.forEach((item) => {\n if (item.questionBankItemId && !item.question) {\n questionIds.add(item.questionBankItemId);\n }\n });\n });\n if (questionIds.size === 0)\n return;\n // Load all questions in parallel\n const questionPromises = Array.from(questionIds).map((id) => this.questionBankService.getOne(id).catch(() => null));\n const questions = await Promise.all(questionPromises);\n // Create a map of question ID to question data\n const questionMap = new Map();\n questions.forEach((q) => {\n if (q) {\n questionMap.set(q.id, q);\n }\n });\n // Update state with question details\n this.builderState.update((currentState) => ({\n ...currentState,\n sections: currentState.sections.map((section) => ({\n ...section,\n items: section.items.map((item) => {\n if (item.question)\n return item; // Already has question data\n const questionData = questionMap.get(item.questionBankItemId);\n if (questionData) {\n return {\n ...item,\n question: {\n id: questionData.id,\n title: questionData.title,\n description: questionData.description,\n difficulty: questionData.difficulty,\n scoringType: questionData.scoringType,\n },\n };\n }\n return item;\n }),\n })),\n }));\n }\n //#endregion\n //#region ---- Section Management ----\n /**\n * Helper method to update state while preventing effect loops\n * Ensures at least one section always exists\n */\n updateState(updater) {\n this.isInternalUpdate = true;\n try {\n this.builderState.update((state) => {\n const updatedState = updater(state);\n // Safety check: ensure at least one section always exists\n if (updatedState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return {\n ...updatedState,\n sections: [defaultSection],\n };\n }\n return updatedState;\n });\n }\n finally {\n // Reset flag after current execution context\n Promise.resolve().then(() => {\n this.isInternalUpdate = false;\n });\n }\n }\n /**\n * Handle adding a new section\n */\n async handleAddSection() {\n try {\n const addTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title') || 'Add Section';\n const titleLabel = await this.translationService.translateAsync('@general:terms.common.title') || 'Title';\n const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description') || 'Description';\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(addTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n title: '',\n description: '',\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(titleLabel, (field) => {\n field.path('title');\n field.textBox({\n placeholder: 'Enter section title',\n validations: [{ rule: 'required' }],\n });\n })\n .formField(descriptionLabel, (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: 'Enter section description (optional)',\n rows: 3,\n });\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n const newSection = createDefaultSection();\n newSection.order = this.sections().length;\n newSection.title = formData.title || 'New Section';\n newSection.description = formData.description || undefined;\n this.updateState((state) => ({\n ...state,\n sections: [...state.sections, newSection],\n }));\n // Scroll to the newly added section after DOM update\n setTimeout(() => {\n const sectionElement = document.getElementById(`section-${newSection.id}`);\n if (sectionElement) {\n sectionElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n }, 100);\n }\n }\n catch (error) {\n console.error('Error adding section:', error);\n }\n }\n /**\n * Handle section editing\n */\n async handleSectionEdit(section) {\n try {\n const editTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.edit-section.title') || 'Edit Section';\n const titleLabel = await this.translationService.translateAsync('@general:terms.common.title') || 'Title';\n const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description') || 'Description';\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(editTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n title: section.title || '',\n description: section.description || '',\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(titleLabel, (field) => {\n field.path('title');\n field.textBox({\n placeholder: 'Enter section title',\n validations: [{ rule: 'required' }],\n });\n })\n .formField(descriptionLabel, (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: 'Enter section description (optional)',\n rows: 3,\n });\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n this.updateState((state) => ({\n ...state,\n sections: state.sections.map((s) => s.id === section.id\n ? {\n ...s,\n title: formData.title || s.title,\n description: formData.description !== undefined ? formData.description : s.description,\n }\n : s),\n }));\n }\n }\n catch (error) {\n console.error('Error editing section:', error);\n }\n }\n /**\n * Handle section removal\n */\n handleSectionRemove(section) {\n // Don't allow removing the last section - must always have at least one\n if (this.sections().length <= 1) {\n return;\n }\n // Remove the section and update order values\n this.updateState((state) => ({\n ...state,\n sections: state.sections\n .filter((s) => s.id !== section.id)\n .map((s, index) => ({\n ...s,\n order: index,\n })),\n }));\n }\n /**\n * Handle section drop (reordering)\n */\n handleSectionDrop(event) {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n // Update order values\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section, index) => ({\n ...section,\n order: index,\n })),\n }));\n }\n }\n //#endregion\n //#region ---- Item Management ----\n /**\n * Handle adding questions to a section\n */\n async handleAddQuestionsToSection(section) {\n try {\n const dataSource = new AXDataSource({\n key: 'id',\n pageSize: 20,\n load: async (e) => {\n const questions = await this.questionBankService.query(e);\n return {\n items: questions.items,\n total: questions.total,\n };\n },\n });\n // Create category tree data source for filtering\n const categoryTreeDataSource = {\n loadRootNodes: async () => {\n const result = await this.questionBankService.getCategoriesList({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'isEmpty' },\n value: true,\n },\n });\n return result.items.map((item) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n loadChildNodes: async (parentId) => {\n const result = await this.questionBankService.getCategoriesList({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'equal' },\n value: parentId,\n },\n });\n return result.items.map((item) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n searchNodes: async (searchValue) => {\n const result = await this.questionBankService.getCategoriesList({\n skip: 0,\n take: 1000,\n filter: {\n filters: [\n {\n field: 'title',\n operator: { type: 'contains' },\n value: searchValue,\n },\n {\n field: 'name',\n operator: { type: 'contains' },\n value: searchValue,\n },\n ],\n logic: 'or',\n },\n });\n return result.items.map((item) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n };\n const entity = await this.entityResolver.resolve(RootConfig.module.name, RootConfig.entities.questionBankItem.name);\n if (!entity) {\n throw new Error('Entity not found: ' + RootConfig.entities.questionBankItem.name);\n }\n const columns = entity.columns\n ?.filter((column) => entity.properties.some((property) => property.name === column.name))\n .map((column) => {\n const property = entity.properties.find((prop) => prop.name === column.name);\n return {\n name: column.name,\n title: property?.title ?? '',\n visible: column.options?.visible !== false,\n widget: {\n type: column.showAs?.type ?? property?.schema?.interface?.type ?? 'text-editor',\n options: column.showAs?.options ?? property?.schema?.interface?.options ?? {},\n },\n };\n }) || [];\n // Translate titles\n const selectQuestionsTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.select-questions') || 'Select Questions from Question Bank';\n const categoriesTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.categories') || 'Categories';\n const titleLabel = await this.translationService.translateAsync('@general:terms.common.title') || 'Title';\n const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description') || 'Description';\n // Open data selector with category filter\n const result = await this.dataSelectorService.openWithCategoryFilter({\n title: selectQuestionsTitle,\n dataSource: dataSource,\n columns: columns,\n selectionMode: 'multiple',\n searchFields: [\n { name: 'title', title: titleLabel },\n { name: 'description', title: descriptionLabel },\n ],\n allowCreate: false,\n }, {\n title: categoriesTitle,\n dataSource: categoryTreeDataSource,\n filterField: 'categoryIds',\n filterOperator: 'contains',\n width: '350px',\n });\n // Add selected questions to the section\n if (result?.items && result.items.length > 0) {\n // Load full question details for each selected item\n const questionPromises = result.items.map((item) => this.questionBankService.getOne(item.id).catch(() => null));\n const questions = await Promise.all(questionPromises);\n const newItems = result.items.map((item, index) => {\n const fullQuestion = questions[index];\n return {\n id: AXPDataGenerator.uuid(),\n questionBankItemId: item.id,\n order: section.items.length + index,\n isRequired: false,\n visibilityCondition: undefined,\n requiredCondition: undefined,\n scoringOverride: undefined,\n isNewlyAdded: true,\n question: fullQuestion\n ? {\n id: fullQuestion.id,\n title: fullQuestion.title,\n description: fullQuestion.description,\n difficulty: fullQuestion.difficulty,\n scoringType: fullQuestion.scoringType,\n }\n : {\n id: item.id,\n title: item.title || 'Question',\n description: item.description,\n difficulty: item.difficulty,\n scoringType: item.scoringType,\n },\n };\n });\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((s) => s.id === section.id\n ? {\n ...s,\n items: [...s.items, ...newItems],\n }\n : s),\n }));\n }\n }\n catch (error) {\n console.error('Error loading questions:', error);\n }\n }\n /**\n * Handle item removal\n */\n handleItemRemove(item, sectionId) {\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id !== sectionId)\n return section;\n // Hard delete - remove item from array\n return {\n ...section,\n items: section.items.filter((i) => i.id !== item.id).map((item, index) => ({\n ...item,\n order: index,\n })),\n };\n }),\n }));\n }\n /**\n * Handle question item editing (settings)\n */\n async handleItemEdit(item, sectionId) {\n try {\n // Load full question details to get default scoring values\n const questionDetails = item.questionBankItemId\n ? await this.questionBankService.getOne(item.questionBankItemId).catch(() => null)\n : null;\n const editTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.edit-question.title') || 'Edit Question Settings';\n const isRequiredLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.is-required.title') || 'Required';\n const visibilityConditionLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.visibility-condition.title') || 'Visibility Condition';\n const requiredConditionLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.required-condition.title') || 'Required Condition';\n const scoringPointsLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.scoring-points.title') || 'Scoring Points';\n const scoringWeightLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.fields.scoring-weight.title') || 'Scoring Weight';\n // Get default values from question bank item or use existing override values\n const defaultScoringPoints = item.scoringOverride?.points ?? questionDetails?.points ?? '';\n const defaultScoringWeight = item.scoringOverride?.weight ?? questionDetails?.weight ?? '';\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(editTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n isRequired: item.isRequired ?? false,\n visibilityCondition: item.visibilityCondition || '',\n requiredCondition: item.requiredCondition || '',\n scoringPoints: defaultScoringPoints,\n scoringWeight: defaultScoringWeight,\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(isRequiredLabel, (field) => {\n field.path('isRequired');\n field.toggleSwitch();\n })\n .formField(visibilityConditionLabel, (field) => {\n field.path('visibilityCondition');\n field.customWidget('code-editor', {\n language: 'javascript',\n lineNumbers: true,\n height: 'min-h-48',\n });\n })\n .formField(requiredConditionLabel, (field) => {\n field.path('requiredCondition');\n field.customWidget('code-editor', {\n language: 'javascript',\n lineNumbers: true,\n height: 'min-h-48',\n });\n })\n .formField(scoringPointsLabel, (field) => {\n field.path('scoringPoints');\n field.numberBox({\n placeholder: 'Enter scoring points (optional)',\n });\n })\n .formField(scoringWeightLabel, (field) => {\n field.path('scoringWeight');\n field.numberBox({\n placeholder: 'Enter scoring weight (optional)',\n });\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n this.updateState((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id !== sectionId)\n return section;\n return {\n ...section,\n items: section.items.map((i) => {\n if (i.id !== item.id)\n return i;\n // Build scoring override if points or weight are provided\n let scoringOverride = undefined;\n const hasPoints = formData.scoringPoints !== undefined && formData.scoringPoints !== null && formData.scoringPoints !== '';\n const hasWeight = formData.scoringWeight !== undefined && formData.scoringWeight !== null && formData.scoringWeight !== '';\n if (hasPoints || hasWeight) {\n scoringOverride = {};\n if (hasPoints) {\n scoringOverride.points = Number(formData.scoringPoints);\n }\n if (hasWeight) {\n scoringOverride.weight = Number(formData.scoringWeight);\n }\n }\n return {\n ...i,\n isRequired: formData.isRequired ?? false,\n visibilityCondition: formData.visibilityCondition || undefined,\n requiredCondition: formData.requiredCondition || undefined,\n scoringOverride: scoringOverride,\n };\n }),\n };\n }),\n }));\n }\n }\n catch (error) {\n console.error('Error editing question:', error);\n }\n }\n /**\n * Handle item drop (reordering within section or between sections)\n */\n handleItemDrop(event, targetSectionId) {\n if (event.previousContainer === event.container) {\n // Reordering within same section\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id !== targetSectionId)\n return section;\n return {\n ...section,\n items: section.items.map((item, index) => ({\n ...item,\n order: index,\n })),\n };\n }),\n }));\n }\n else {\n // Moving item between sections\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n // Update orders for both sections\n this.builderState.update((state) => ({\n ...state,\n sections: state.sections.map((section) => {\n if (section.id === targetSectionId || section.id === event.previousContainer.id) {\n return {\n ...section,\n items: section.items.map((item, index) => ({\n ...item,\n order: index,\n })),\n };\n }\n return section;\n }),\n }));\n }\n }\n /**\n * Get all section drop lists for drag-drop connectivity\n */\n getAllSectionDropLists() {\n return this.sections().map((section) => `section-${section.id}-items`);\n }\n //#endregion\n //#region ---- Display Settings ----\n /**\n * Handle opening display settings dialog\n */\n async handleSettings() {\n try {\n const settingsTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.settings.title') || 'Display Settings';\n const viewModeLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.title') || 'View Mode';\n const showProgressBarLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-progress-bar.title') || 'Show Progress Bar';\n const showTimerLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-timer.title') || 'Show Timer';\n const showSectionTitlesLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-section-titles.title') || 'Show Section Titles';\n const showQuestionNumbersLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.show-question-numbers.title') || 'Show Question Numbers';\n const validateBeforeNavigationLabel = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.fields.validate-before-navigation.title') || 'Validate Before Navigation';\n const currentSettings = this.displaySettings();\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(settingsTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n viewMode: currentSettings.viewMode || 'single-page',\n showProgressBar: currentSettings.showProgressBar ?? true,\n showTimer: currentSettings.showTimer ?? false,\n showSectionTitles: currentSettings.showSectionTitles ?? true,\n showQuestionNumbers: currentSettings.showQuestionNumbers ?? true,\n validateBeforeNavigation: currentSettings.validateBeforeNavigation ?? true,\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex\n .setDirection('column')\n .setGap('16px')\n .formField(viewModeLabel, (field) => {\n field.path('viewMode');\n field.selectBox({\n valueField: 'id',\n textField: 'title',\n dataSource: [\n { id: 'single-page', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.single-page' },\n { id: 'page-per-group', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.page-per-group' },\n { id: 'page-per-question', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.page-per-question' },\n { id: 'side-menu', title: '@assessment-management:questionnaires.components.questionnaire-viewer.fields.view-mode.options.side-menu' },\n ],\n });\n })\n .formField(showProgressBarLabel, (field) => {\n field.path('showProgressBar');\n field.toggleSwitch();\n })\n .formField(showTimerLabel, (field) => {\n field.path('showTimer');\n field.toggleSwitch();\n })\n .formField(showSectionTitlesLabel, (field) => {\n field.path('showSectionTitles');\n field.toggleSwitch();\n })\n .formField(showQuestionNumbersLabel, (field) => {\n field.path('showQuestionNumbers');\n field.toggleSwitch();\n })\n .formField(validateBeforeNavigationLabel, (field) => {\n field.path('validateBeforeNavigation');\n field.toggleSwitch();\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@general:actions.save.title');\n });\n })\n .show();\n const formData = dialogRef.context();\n const action = await dialogRef.action();\n dialogRef.close();\n if (action !== 'cancel' && formData) {\n // Extract viewMode - handle both string and object (from select box)\n let viewMode = 'single-page';\n const viewModeValue = formData.viewMode;\n if (typeof viewModeValue === 'string') {\n viewMode = viewModeValue;\n }\n else if (viewModeValue && typeof viewModeValue === 'object' && 'id' in viewModeValue) {\n viewMode = viewModeValue.id;\n }\n const newSettings = {\n viewMode: viewMode,\n showProgressBar: formData.showProgressBar ?? true,\n showTimer: formData.showTimer ?? false,\n showSectionTitles: formData.showSectionTitles ?? true,\n showQuestionNumbers: formData.showQuestionNumbers ?? true,\n validateBeforeNavigation: formData.validateBeforeNavigation ?? true,\n };\n // Update state by preserving existing question data and updating displaySettings in state\n this.updateState((state) => {\n // Update displaySettings in state directly\n const updatedState = {\n ...state,\n displaySettings: newSettings,\n };\n return updatedState;\n });\n }\n }\n catch (error) {\n console.error('Error opening settings:', error);\n }\n }\n //#endregion\n //#region ---- Preview ----\n /**\n * Open preview dialog with questionnaire viewer\n */\n async handlePreview() {\n if (this.sections().length === 0) {\n return;\n }\n try {\n const currentValue = convertStateToValue(this.builderState(), this.value() || undefined);\n // Always use the current displaySettings from the computed property to ensure preview uses latest settings\n currentValue.displaySettings = this.displaySettings();\n const previewTitle = await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title') || 'Preview';\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure: currentValue,\n size: 'lg',\n });\n // Handle result if needed (answers, submitted status)\n if (result) {\n console.log('Questionnaire preview result:', result);\n }\n }\n catch (error) {\n console.error('Error opening preview:', error);\n }\n }\n /**\n * Toggle fullscreen mode using the directive\n */\n async handleFullscreen() {\n const fullscreen = this.fullscreenDirective();\n if (fullscreen) {\n await fullscreen.toggle();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMQuestionnaireBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXMQuestionnaireBuilderComponent, isStandalone: true, selector: \"axm-questionnaire-builder\", inputs: { value: { classPropertyName: \"value\", publicName: \"value\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: \"valueChange\" }, viewQueries: [{ propertyName: \"fullscreenDirective\", first: true, predicate: [\"fullscreen\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"axm-questionnaire-builder\\\" axFullscreen #fullscreen=\\\"axFullscreen\\\">\\n <div class=\\\"__header\\\">\\n <div class=\\\"__header-left\\\">\\n <!-- Left side can be used for other actions in the future -->\\n </div>\\n <div class=\\\"__header-right\\\">\\n @if (!readonly()) {\\n\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title' | translate | async) || 'Add Section'\\\"\\n [color]=\\\"'primary'\\\" (onClick)=\\\"handleAddSection()\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-layer-group\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.settings.title' | translate | async) || 'Settings'\\\"\\n (onClick)=\\\"handleSettings()\\\">\\n <ax-icon icon=\\\"fa-light fa-gear\\\"></ax-icon>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title' | translate | async) || 'Preview'\\\"\\n [disabled]=\\\"sections().length === 0\\\" (onClick)=\\\"handlePreview()\\\">\\n <ax-icon icon=\\\"fa-light fa-eye\\\"></ax-icon>\\n </ax-button>\\n }\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.fullscreen.title' | translate | async) || 'Full Screen'\\\"\\n (onClick)=\\\"handleFullscreen()\\\">\\n <ax-icon icon=\\\"fa-light fa-expand\\\"></ax-icon>\\n </ax-button>\\n </div>\\n </div>\\n\\n <div class=\\\"__content\\\">\\n <!-- Designer Mode -->\\n <div class=\\\"__sections-container\\\" cdkDropList [cdkDropListData]=\\\"sections()\\\"\\n (cdkDropListDropped)=\\\"handleSectionDrop($event)\\\">\\n @for (section of sections(); track section.id) {\\n <div class=\\\"__section\\\" cdkDrag [id]=\\\"'section-' + section.id\\\">\\n <div class=\\\"__section-header\\\">\\n @if (!readonly()) {\\n <div class=\\\"__section-drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n <div class=\\\"__section-info\\\">\\n <h3 class=\\\"__section-title\\\">{{ section.title }}</h3>\\n @if (section.description) {\\n <p class=\\\"__section-description\\\">{{ section.description }}</p>\\n }\\n </div>\\n @if (!readonly()) {\\n <div class=\\\"__section-actions\\\">\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"'@assessment-management:questionnaires.components.questionnaire-builder.actions.add-question.title' | translate | async\\\"\\n [color]=\\\"'accent2'\\\" (onClick)=\\\"handleAddQuestionsToSection(section)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-plus\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleSectionEdit(section)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n @if (canRemoveSection()) {\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleSectionRemove(section)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"__items-container\\\">\\n <div class=\\\"__items-list ax-overflow-auto\\\" cdkDropList [id]=\\\"'section-' + section.id + '-items'\\\"\\n [cdkDropListData]=\\\"section.items\\\" [cdkDropListConnectedTo]=\\\"getAllSectionDropLists()\\\"\\n (cdkDropListDropped)=\\\"handleItemDrop($event, section.id)\\\">\\n @if (section.items.length === 0) {\\n <axp-state-message icon=\\\"fa-light fa-inbox\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.title' | translate | async) || ''\\\"\\n [description]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.description' | translate | async) || ''\\\">\\n </axp-state-message>\\n } @else {\\n @for (item of section.items; track item.id) {\\n <div class=\\\"__item\\\" cdkDrag>\\n @if (!readonly()) {\\n <div class=\\\"__drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-header\\\">\\n <div class=\\\"__item-icon\\\"\\n [class.__difficulty-easy]=\\\"item.question?.difficulty === 'easy'\\\"\\n [class.__difficulty-medium]=\\\"item.question?.difficulty === 'medium'\\\"\\n [class.__difficulty-hard]=\\\"item.question?.difficulty === 'hard'\\\">\\n <ax-icon icon=\\\"fa-light fa-question-circle\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-info\\\">\\n <h4 class=\\\"__item-title\\\">{{ item.question?.title ?? 'Question' }}</h4>\\n @if (item.question?.description) {\\n <p class=\\\"__item-description\\\">{{ item.question?.description }}</p>\\n }\\n </div>\\n <div class=\\\"__item-meta\\\">\\n @if (item.isRequired) {\\n <span class=\\\"__item-badge __required\\\">Required</span>\\n }\\n @if (item.scoringOverride) {\\n <span class=\\\"__item-badge\\\">Custom Scoring</span>\\n }\\n </div>\\n </div>\\n </div>\\n\\n @if (!readonly()) {\\n <div class=\\\"__item-actions\\\">\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleItemEdit(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleItemRemove(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n }\\n }\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n</div>\", styles: [\".axm-questionnaire-builder{display:flex;height:100%;width:100%;flex-direction:column}.axm-questionnaire-builder .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;padding:.75rem}.axm-questionnaire-builder .__header .__header-left,.axm-questionnaire-builder .__header .__header-right{display:flex;gap:.5rem}.axm-questionnaire-builder .__content{flex:1 1 0%;overflow:auto;padding:.75rem}.axm-questionnaire-builder .__sections-container{display:flex;flex-direction:column;gap:1rem}.axm-questionnaire-builder .__section{border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__section .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__section .__items-container{padding:1rem}.axm-questionnaire-builder .__section .__items-container .__items-list{gap:.75rem;min-height:3rem;display:flex;flex-direction:column}.axm-questionnaire-builder .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));cursor:move;-webkit-user-select:none;user-select:none;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.__selected{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-accent2-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-accent2-lightest-surface));color:rgb(var(--ax-sys-color-on-accent2-lightest-surface));border-color:rgb(var(--ax-sys-color-border-accent2-lightest-surface))}.axm-questionnaire-builder .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab;transition:color .15s ease-in-out}.axm-questionnaire-builder .__item .__drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__item .__drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content{flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__preview-container>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-sections>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section{border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-description{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item{display:flex;align-items:flex-start;gap:.75rem;border-radius:.375rem;border-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-icon{display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:.375rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info{flex:1 1 0%}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-title{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-badge{margin-top:.5rem;display:inline-block;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__items-container{padding:1rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder{position:relative;opacity:.6;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.5rem;min-height:5.5rem;transition:all .2s ease-in-out;padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__drag-handle,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-content,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-actions{opacity:0}.axm-questionnaire-builder .__section.cdk-drag-placeholder{opacity:.5;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.375rem;min-height:4rem;transition:all .2s ease-in-out}.axm-questionnaire-builder .__section.cdk-drag-placeholder>*{opacity:0}.axm-questionnaire-builder .cdk-drop-list-dragging .__item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.axm-questionnaire-builder .cdk-drop-list-dragging .__section:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.__item.cdk-drag-preview{border-radius:.5rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));display:flex;align-items:center;gap:.75rem;padding:1rem;opacity:.9;box-sizing:border-box}.__item.cdk-drag-preview .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content{flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));opacity:.9;box-sizing:border-box;background-color:var(--ax-lightest-surface)}.__section.cdk-drag-preview .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.__section.cdk-drag-preview .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.__section.cdk-drag-preview .__section-header .__section-info{flex:1 1 0%}.__section.cdk-drag-preview .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-actions{display:flex;gap:.5rem}.__section.cdk-drag-preview .__items-container{padding:1rem}.__section.cdk-drag-preview .__items-container .__items-list{gap:.75rem;display:flex;flex-direction:column}.__section.cdk-drag-preview .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__section.cdk-drag-preview .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content{flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXSwitchModule }, { kind: \"ngmodule\", type: AXLabelModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"directive\", type: \n // CDK DragDrop modules\n CdkDropList, selector: \"[cdkDropList], cdk-drop-list\", inputs: [\"cdkDropListConnectedTo\", \"cdkDropListData\", \"cdkDropListOrientation\", \"id\", \"cdkDropListLockAxis\", \"cdkDropListDisabled\", \"cdkDropListSortingDisabled\", \"cdkDropListEnterPredicate\", \"cdkDropListSortPredicate\", \"cdkDropListAutoScrollDisabled\", \"cdkDropListAutoScrollStep\", \"cdkDropListElementContainer\", \"cdkDropListHasAnchor\"], outputs: [\"cdkDropListDropped\", \"cdkDropListEntered\", \"cdkDropListExited\", \"cdkDropListSorted\"], exportAs: [\"cdkDropList\"] }, { kind: \"directive\", type: CdkDrag, selector: \"[cdkDrag]\", inputs: [\"cdkDragData\", \"cdkDragLockAxis\", \"cdkDragRootElement\", \"cdkDragBoundary\", \"cdkDragStartDelay\", \"cdkDragFreeDragPosition\", \"cdkDragDisabled\", \"cdkDragConstrainPosition\", \"cdkDragPreviewClass\", \"cdkDragPreviewContainer\", \"cdkDragScale\"], outputs: [\"cdkDragStarted\", \"cdkDragReleased\", \"cdkDragEnded\", \"cdkDragEntered\", \"cdkDragExited\", \"cdkDragDropped\", \"cdkDragMoved\"], exportAs: [\"cdkDrag\"] }, { kind: \"directive\", type: CdkDragHandle, selector: \"[cdkDragHandle]\", inputs: [\"cdkDragHandleDisabled\"] }, { kind: \"directive\", type: \n // Fullscreen directive\n AXFullScreenDirective, selector: \"[axFullscreen]\", outputs: [\"fullscreenChange\"], exportAs: [\"axFullscreen\"] }, { kind: \"pipe\", type: i3.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMQuestionnaireBuilderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-questionnaire-builder', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownModule,\n AXFormModule,\n AXSwitchModule,\n AXLabelModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n // CDK DragDrop modules\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n // Fullscreen directive\n AXFullScreenDirective,\n ], template: \"<div class=\\\"axm-questionnaire-builder\\\" axFullscreen #fullscreen=\\\"axFullscreen\\\">\\n <div class=\\\"__header\\\">\\n <div class=\\\"__header-left\\\">\\n <!-- Left side can be used for other actions in the future -->\\n </div>\\n <div class=\\\"__header-right\\\">\\n @if (!readonly()) {\\n\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title' | translate | async) || 'Add Section'\\\"\\n [color]=\\\"'primary'\\\" (onClick)=\\\"handleAddSection()\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-layer-group\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.settings.title' | translate | async) || 'Settings'\\\"\\n (onClick)=\\\"handleSettings()\\\">\\n <ax-icon icon=\\\"fa-light fa-gear\\\"></ax-icon>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title' | translate | async) || 'Preview'\\\"\\n [disabled]=\\\"sections().length === 0\\\" (onClick)=\\\"handlePreview()\\\">\\n <ax-icon icon=\\\"fa-light fa-eye\\\"></ax-icon>\\n </ax-button>\\n }\\n <ax-button class=\\\"ax-sm\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.actions.fullscreen.title' | translate | async) || 'Full Screen'\\\"\\n (onClick)=\\\"handleFullscreen()\\\">\\n <ax-icon icon=\\\"fa-light fa-expand\\\"></ax-icon>\\n </ax-button>\\n </div>\\n </div>\\n\\n <div class=\\\"__content\\\">\\n <!-- Designer Mode -->\\n <div class=\\\"__sections-container\\\" cdkDropList [cdkDropListData]=\\\"sections()\\\"\\n (cdkDropListDropped)=\\\"handleSectionDrop($event)\\\">\\n @for (section of sections(); track section.id) {\\n <div class=\\\"__section\\\" cdkDrag [id]=\\\"'section-' + section.id\\\">\\n <div class=\\\"__section-header\\\">\\n @if (!readonly()) {\\n <div class=\\\"__section-drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n <div class=\\\"__section-info\\\">\\n <h3 class=\\\"__section-title\\\">{{ section.title }}</h3>\\n @if (section.description) {\\n <p class=\\\"__section-description\\\">{{ section.description }}</p>\\n }\\n </div>\\n @if (!readonly()) {\\n <div class=\\\"__section-actions\\\">\\n <ax-button class=\\\"ax-sm\\\"\\n [text]=\\\"'@assessment-management:questionnaires.components.questionnaire-builder.actions.add-question.title' | translate | async\\\"\\n [color]=\\\"'accent2'\\\" (onClick)=\\\"handleAddQuestionsToSection(section)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-light fa-plus\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button>\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleSectionEdit(section)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n @if (canRemoveSection()) {\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleSectionRemove(section)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n }\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"__items-container\\\">\\n <div class=\\\"__items-list ax-overflow-auto\\\" cdkDropList [id]=\\\"'section-' + section.id + '-items'\\\"\\n [cdkDropListData]=\\\"section.items\\\" [cdkDropListConnectedTo]=\\\"getAllSectionDropLists()\\\"\\n (cdkDropListDropped)=\\\"handleItemDrop($event, section.id)\\\">\\n @if (section.items.length === 0) {\\n <axp-state-message icon=\\\"fa-light fa-inbox\\\"\\n [title]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.title' | translate | async) || ''\\\"\\n [description]=\\\"('@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.description' | translate | async) || ''\\\">\\n </axp-state-message>\\n } @else {\\n @for (item of section.items; track item.id) {\\n <div class=\\\"__item\\\" cdkDrag>\\n @if (!readonly()) {\\n <div class=\\\"__drag-handle\\\" cdkDragHandle>\\n <ax-icon icon=\\\"fa-light fa-grip-vertical\\\"></ax-icon>\\n </div>\\n }\\n\\n <div class=\\\"__item-content\\\">\\n <div class=\\\"__item-header\\\">\\n <div class=\\\"__item-icon\\\"\\n [class.__difficulty-easy]=\\\"item.question?.difficulty === 'easy'\\\"\\n [class.__difficulty-medium]=\\\"item.question?.difficulty === 'medium'\\\"\\n [class.__difficulty-hard]=\\\"item.question?.difficulty === 'hard'\\\">\\n <ax-icon icon=\\\"fa-light fa-question-circle\\\"></ax-icon>\\n </div>\\n <div class=\\\"__item-info\\\">\\n <h4 class=\\\"__item-title\\\">{{ item.question?.title ?? 'Question' }}</h4>\\n @if (item.question?.description) {\\n <p class=\\\"__item-description\\\">{{ item.question?.description }}</p>\\n }\\n </div>\\n <div class=\\\"__item-meta\\\">\\n @if (item.isRequired) {\\n <span class=\\\"__item-badge __required\\\">Required</span>\\n }\\n @if (item.scoringOverride) {\\n <span class=\\\"__item-badge\\\">Custom Scoring</span>\\n }\\n </div>\\n </div>\\n </div>\\n\\n @if (!readonly()) {\\n <div class=\\\"__item-actions\\\">\\n <ax-button class=\\\"ax-sm\\\" [look]=\\\"'blank'\\\" color=\\\"accent3\\\"\\n (onClick)=\\\"handleItemEdit(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-pencil\\\"></ax-icon>\\n </ax-button>\\n <ax-button [look]=\\\"'blank'\\\" class=\\\"ax-sm\\\" color=\\\"danger\\\"\\n (onClick)=\\\"handleItemRemove(item, section.id)\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n }\\n }\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n</div>\", styles: [\".axm-questionnaire-builder{display:flex;height:100%;width:100%;flex-direction:column}.axm-questionnaire-builder .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;padding:.75rem}.axm-questionnaire-builder .__header .__header-left,.axm-questionnaire-builder .__header .__header-right{display:flex;gap:.5rem}.axm-questionnaire-builder .__content{flex:1 1 0%;overflow:auto;padding:.75rem}.axm-questionnaire-builder .__sections-container{display:flex;flex-direction:column;gap:1rem}.axm-questionnaire-builder .__section{border-radius:.375rem;border-width:1px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__section .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__section .__section-header .__section-drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__section .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__section .__items-container{padding:1rem}.axm-questionnaire-builder .__section .__items-container .__items-list{gap:.75rem;min-height:3rem;display:flex;flex-direction:column}.axm-questionnaire-builder .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));cursor:move;-webkit-user-select:none;user-select:none;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.__selected{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-accent2-500),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-accent2-lightest-surface));color:rgb(var(--ax-sys-color-on-accent2-lightest-surface));border-color:rgb(var(--ax-sys-color-border-accent2-lightest-surface))}.axm-questionnaire-builder .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab;transition:color .15s ease-in-out}.axm-questionnaire-builder .__item .__drag-handle:active{cursor:grabbing}.axm-questionnaire-builder .__item .__drag-handle:hover{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content{flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.axm-questionnaire-builder .__preview-container>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-sections>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section{border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-section-description{margin-bottom:1rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item{display:flex;align-items:flex-start;gap:.75rem;border-radius:.375rem;border-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-icon{display:flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:.375rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));background-color:rgb(var(--ax-sys-color-primary-lightest-surface));color:rgb(var(--ax-sys-color-on-primary-lightest-surface));border-color:rgb(var(--ax-sys-color-border-primary-lightest-surface))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info{flex:1 1 0%}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-title{margin-bottom:.25rem;font-size:1rem;line-height:1.5rem;font-weight:600}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__preview-container .__preview-section .__preview-items .__preview-item .__preview-item-info .__preview-item-badge{margin-top:.5rem;display:inline-block;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info{flex:1 1 0%}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__section-header .__section-actions{display:flex;gap:.5rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__items-container{padding:1rem}.axm-questionnaire-builder .__item.cdk-drag-placeholder{position:relative;opacity:.6;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.5rem;min-height:5.5rem;transition:all .2s ease-in-out;padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axm-questionnaire-builder .__item.cdk-drag-placeholder .__drag-handle,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-content,.axm-questionnaire-builder .__item.cdk-drag-placeholder .__item-actions{opacity:0}.axm-questionnaire-builder .__section.cdk-drag-placeholder{opacity:.5;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),var(--tw-bg-opacity, 1));border-radius:.375rem;min-height:4rem;transition:all .2s ease-in-out}.axm-questionnaire-builder .__section.cdk-drag-placeholder>*{opacity:0}.axm-questionnaire-builder .cdk-drop-list-dragging .__item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.axm-questionnaire-builder .cdk-drop-list-dragging .__section:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.__item.cdk-drag-preview{border-radius:.5rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));display:flex;align-items:center;gap:.75rem;padding:1rem;opacity:.9;box-sizing:border-box}.__item.cdk-drag-preview .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content{flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0;transition:all .2s ease-in-out}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__item.cdk-drag-preview .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__item.cdk-drag-preview .__item-actions{display:flex;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));opacity:.9;box-sizing:border-box;background-color:var(--ax-lightest-surface)}.__section.cdk-drag-preview .__section-header{display:flex;align-items:center;gap:.75rem;border-bottom-width:1px;padding:.75rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.__section.cdk-drag-preview .__section-header .__section-drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1));cursor:grab}.__section.cdk-drag-preview .__section-header .__section-info{flex:1 1 0%}.__section.cdk-drag-preview .__section-header .__section-info .__section-title{margin-bottom:.25rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-description{font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-info .__section-weight{margin-top:.25rem;display:inline-block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__section-header .__section-actions{display:flex;gap:.5rem}.__section.cdk-drag-preview .__items-container{padding:1rem}.__section.cdk-drag-preview .__items-container .__items-list{gap:.75rem;display:flex;flex-direction:column}.__section.cdk-drag-preview .__item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;border-width:1px;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__section.cdk-drag-preview .__item .__drag-handle{display:flex;height:1.5rem;width:1.5rem;align-items:center;justify-content:center;--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content{flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header{display:flex;align-items:flex-start;gap:1rem}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon{display:flex;height:3rem;width:3rem;align-items:center;justify-content:center;border-radius:.5rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-easy{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-success-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-medium{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-icon.__difficulty-hard{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info{min-width:0px;flex:1 1 0%}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-title{margin-bottom:.5rem;font-size:1rem;line-height:1.5rem;font-weight:600;--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity, 1));line-height:1.4}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-info .__item-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1));line-height:1.5}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:.5rem;flex-shrink:0}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-content .__item-header .__item-meta .__item-badge.__required{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-warning-lightest-surface),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-800),var(--tw-text-opacity, 1))}.__section.cdk-drag-preview .__item .__item-actions{display:flex;gap:.5rem;flex-shrink:0}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: \"value\", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: \"readonly\", required: false }] }], valueChange: [{ type: i0.Output, args: [\"valueChange\"] }], fullscreenDirective: [{ type: i0.ViewChild, args: ['fullscreen', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hc3Nlc3NtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9xdWVzdGlvbm5haXJlLWJ1aWxkZXIvcXVlc3Rpb25uYWlyZS1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hc3Nlc3NtZW50LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9xdWVzdGlvbm5haXJlLWJ1aWxkZXIvcXVlc3Rpb25uYWlyZS1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUUvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBZSxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUs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QUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQjtRQUNsQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNMLENBQUM7K0dBM2hDUSxnQ0FBZ0M7bUdBQWhDLGdDQUFnQyxzZ0JDcEU3Qyw0alFBMklNLCtweEJEekZFLFlBQVksOEJBQ1osV0FBVyw4QkFDWCxjQUFjLDZYQUNkLGlCQUFpQixzVkFDakIsZ0JBQWdCLDhCQUNoQixZQUFZLDhCQUNaLGNBQWMsOEJBQ2QsYUFBYSw4QkFDYixtQkFBbUIsK0JBQ25CLHdCQUF3QjtnQkFDeEIsdUJBQXVCO2dCQUN2QixXQUFXLHNoQkFDWCxPQUFPLHdjQUNQLGFBQWE7Z0JBQ2IsdUJBQXVCO2dCQUN2QixxQkFBcUI7OzRGQUdoQixnQ0FBZ0M7a0JBeEI1QyxTQUFTOytCQUNJLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLHVCQUF1Qjt3QkFDdkIsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixxQkFBcUI7cUJBQ3hCO2dXQWlEeUUsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiAtLS0tICAgSW1wb3J0cyAgIC0tLS1cblxuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBBWEZvcm1Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyBBWFN3aXRjaE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zd2l0Y2gnO1xuaW1wb3J0IHsgQVhMYWJlbE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sYWJlbCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlLCBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnSGFuZGxlLCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZSB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEFYUEVudGl0eSwgQVhQRW50aXR5UHJvcGVydHksIEFYUEVudGl0eVRhYmxlQ29sdW1uIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQQ2F0ZWdvcnlUcmVlRGF0YVNvdXJjZSwgQVhQRGF0YVNlbGVjdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQRW50aXR5RGVmaW5pdGlvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1RdWVzdGlvbkJhbmtJdGVtU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3F1ZXN0aW9uLWJhbmstaXRlbS9xdWVzdGlvbi1iYW5rLWl0ZW0uc2VydmljZSc7XG5pbXBvcnQge1xuICAgIFF1ZXN0aW9ubmFpcmVCdWlsZGVySXRlbSxcbiAgICBRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb24sXG4gICAgUXVlc3Rpb25uYWlyZUJ1aWxkZXJTdGF0ZSxcbiAgICBRdWVzdGlvbm5haXJlQnVpbGRlclZhbHVlLFxuICAgIFF1ZXN0aW9ubmFpcmVEaXNwbGF5U2V0dGluZ3MsXG4gICAgY29udmVydFN0YXRlVG9WYWx1ZSxcbiAgICBjb252ZXJ0VmFsdWVUb1N0YXRlLFxuICAgIGNyZWF0ZURlZmF1bHRTZWN0aW9uLFxufSBmcm9tICcuL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci50eXBlcyc7XG5pbXBvcnQgeyBBWFBEYXRhR2VuZXJhdG9yIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYRnVsbFNjcmVlbkRpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY2RrL2Z1bGwtc2NyZWVuJztcbmltcG9ydCB7IEFYTVF1ZXN0aW9ubmFpcmVWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlc3Rpb25uYWlyZS12aWV3ZXIvcXVlc3Rpb25uYWlyZS12aWV3ZXIuc2VydmljZSc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIENvbXBvbmVudCAgIC0tLS1cblxuLyoqXG4gKiBSZXVzYWJsZSBRdWVzdGlvbm5haXJlIEJ1aWxkZXIgQ29tcG9uZW50XG4gKiBDYW4gYmUgdXNlZCBib3RoIGluIGRpYWxvZyBhbmQgaW5saW5lIGNvbnRleHRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXhtLXF1ZXN0aW9ubmFpcmUtYnVpbGRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3F1ZXN0aW9ubmFpcmUtYnVpbGRlci5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIEFYRm9ybU1vZHVsZSxcbiAgICAgICAgQVhTd2l0Y2hNb2R1bGUsXG4gICAgICAgIEFYTGFiZWxNb2R1bGUsXG4gICAgICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgLy8gQ0RLIERyYWdEcm9wIG1vZHVsZXNcbiAgICAgICAgQ2RrRHJvcExpc3QsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIENka0RyYWdIYW5kbGUsXG4gICAgICAgIC8vIEZ1bGxzY3JlZW4gZGlyZWN0aXZlXG4gICAgICAgIEFYRnVsbFNjcmVlbkRpcmVjdGl2ZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1RdWVzdGlvbm5haXJlQnVpbGRlckNvbXBvbmVudCB7XG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAgIHByb3RlY3RlZCBkYXRhU2VsZWN0b3JTZXJ2aWNlID0gaW5qZWN0KEFYUERhdGFTZWxlY3RvclNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBxdWVzdGlvbkJhbmtTZXJ2aWNlID0gaW5qZWN0KEFYTVF1ZXN0aW9uQmFua0l0ZW1TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgZW50aXR5UmVzb2x2ZXIgPSBpbmplY3QoQVhQRW50aXR5RGVmaW5pdGlvblJlZ2lzdHJ5U2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQVhEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgbGF5b3V0QnVpbGRlciA9IGluamVjdChBWFBMYXlvdXRCdWlsZGVyU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHF1ZXN0aW9ubmFpcmVWaWV3ZXJTZXJ2aWNlID0gaW5qZWN0KEFYTVF1ZXN0aW9ubmFpcmVWaWV3ZXJTZXJ2aWNlKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBJbnB1dHMgJiBPdXRwdXRzICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCB2YWx1ZSAoUXVlc3Rpb25uYWlyZUJ1aWxkZXJWYWx1ZSlcbiAgICAgKi9cbiAgICB2YWx1ZSA9IGlucHV0PFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUgfCBudWxsPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqIFJlYWRvbmx5IG1vZGVcbiAgICAgKi9cbiAgICByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGNoYW5nZSBldmVudFxuICAgICAqL1xuICAgIHZhbHVlQ2hhbmdlID0gb3V0cHV0PFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWU+KCk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2xhc3MgUHJvcGVydGllcyAgIC0tLS1cblxuICAgIC8vIERlc2lnbmVyIHN0YXRlIG1hbmFnZW1lbnQgLSBhbHdheXMgc3RhcnQgd2l0aCBhdCBsZWFzdCBvbmUgZGVmYXVsdCBzZWN0aW9uXG4gICAgcHJvdGVjdGVkIGJ1aWxkZXJTdGF0ZSA9IHNpZ25hbDxRdWVzdGlvbm5haXJlQnVpbGRlclN0YXRlPih7XG4gICAgICAgIHNlY3Rpb25zOiBbY3JlYXRlRGVmYXVsdFNlY3Rpb24oKV0sXG4gICAgfSk7XG5cbiAgICAvLyBTZWxlY3RlZCBpdGVtIHRyYWNraW5nXG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkSXRlbUlkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZFNlY3Rpb25JZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAgIC8vIFRyYWNrIGlmIHdlJ3JlIG1ha2luZyBpbnRlcm5hbCB1cGRhdGVzIHRvIHByZXZlbnQgZWZmZWN0IGxvb3BzXG4gICAgcHJpdmF0ZSBpc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG5cbiAgICAvLyBGdWxsc2NyZWVuIGRpcmVjdGl2ZSByZWZlcmVuY2VcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZnVsbHNjcmVlbkRpcmVjdGl2ZSA9IHZpZXdDaGlsZDxBWEZ1bGxTY3JlZW5EaXJlY3RpdmU+KCdmdWxsc2NyZWVuJyk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgTGlmZWN5Y2xlICAgLS0tLVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIFRyYWNrIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBwcmV2ZW50IGNpcmN1bGFyIHVwZGF0ZXNcbiAgICAgICAgbGV0IGxhc3RFbWl0dGVkVmFsdWU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyVmFsdWUgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAvLyBTeW5jIHZhbHVlIGlucHV0IHRvIHN0YXRlIChvbmx5IHdoZW4gdmFsdWUgY2hhbmdlcyBleHRlcm5hbGx5KVxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc0ludGVybmFsVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdW50cmFja2VkKCgpID0+IHRoaXMuYnVpbGRlclN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnZlcnRTdGF0ZVRvVmFsdWUoY3VycmVudFN0YXRlKTtcblxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGlmIHRoZSB2YWx1ZSBhY3R1YWxseSBjaGFuZ2VkIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHdoYXQgd2UgbGFzdCBlbWl0dGVkXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsU3RyID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3RyID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0RW1pdHRlZFN0ciA9IGxhc3RFbWl0dGVkVmFsdWUgPyBKU09OLnN0cmluZ2lmeShsYXN0RW1pdHRlZFZhbHVlKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb25seSBpZjpcbiAgICAgICAgICAgICAgICAvLyAxLiBUaGUgaW5jb21pbmcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gY3VycmVudCBzdGF0ZSB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIDIuIEFORCBpdCdzIG5vdCB0aGUgdmFsdWUgd2UganVzdCBlbWl0dGVkIChwcmV2ZW50IGNpcmN1bGFyIHVwZGF0ZXMpXG4gICAgICAgICAgICAgICAgaWYgKHZhbFN0ciAhPT0gY3VycmVudFN0ciAmJiB2YWxTdHIgIT09IGxhc3RFbWl0dGVkU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gY29udmVydFZhbHVlVG9TdGF0ZSh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyU3RhdGUuc2V0KG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgcXVlc3Rpb24gZGV0YWlscyBmb3IgYWxsIGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRRdWVzdGlvbkRldGFpbHNGb3JTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgJiYgIXRoaXMuaXNJbnRlcm5hbFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIG51bGwvdW5kZWZpbmVkLCBlbnN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgZGVmYXVsdCBzZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdW50cmFja2VkKCgpID0+IHRoaXMuYnVpbGRlclN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUuc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTZWN0aW9uID0gY3JlYXRlRGVmYXVsdFNlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNlY3Rpb24ub3JkZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyU3RhdGUuc2V0KHsgc2VjdGlvbnM6IFtkZWZhdWx0U2VjdGlvbl0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3luYyBzdGF0ZSBjaGFuZ2VzIHRvIG91dHB1dFxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmJ1aWxkZXJTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb252ZXJ0U3RhdGVUb1ZhbHVlKHN0YXRlLCBjdXJyZW50VmFsdWUgfHwgdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgLy8gUHJldmVudCBjaXJjdWxhciB1cGRhdGVzXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcm5hbFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbWl0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBxdWVzdGlvbiBkZXRhaWxzIGZvciBhbGwgaXRlbXMgaW4gdGhlIHN0YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkUXVlc3Rpb25EZXRhaWxzRm9yU3RhdGUoc3RhdGU6IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb25JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICAvLyBDb2xsZWN0IGFsbCBxdWVzdGlvbiBiYW5rIGl0ZW0gSURzXG4gICAgICAgIHN0YXRlLnNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIHNlY3Rpb24uaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZCAmJiAhaXRlbS5xdWVzdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkcy5hZGQoaXRlbS5xdWVzdGlvbkJhbmtJdGVtSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocXVlc3Rpb25JZHMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIExvYWQgYWxsIHF1ZXN0aW9ucyBpbiBwYXJhbGxlbFxuICAgICAgICBjb25zdCBxdWVzdGlvblByb21pc2VzID0gQXJyYXkuZnJvbShxdWVzdGlvbklkcykubWFwKChpZCkgPT5cbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rU2VydmljZS5nZXRPbmUoaWQpLmNhdGNoKCgpID0+IG51bGwpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBxdWVzdGlvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChxdWVzdGlvblByb21pc2VzKTtcblxuICAgICAgICAvLyBDcmVhdGUgYSBtYXAgb2YgcXVlc3Rpb24gSUQgdG8gcXVlc3Rpb24gZGF0YVxuICAgICAgICBjb25zdCBxdWVzdGlvbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIHF1ZXN0aW9ucy5mb3JFYWNoKChxKSA9PiB7XG4gICAgICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uTWFwLnNldChxLmlkLCBxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHN0YXRlIHdpdGggcXVlc3Rpb24gZGV0YWlsc1xuICAgICAgICB0aGlzLmJ1aWxkZXJTdGF0ZS51cGRhdGUoKGN1cnJlbnRTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcbiAgICAgICAgICAgIHNlY3Rpb25zOiBjdXJyZW50U3RhdGUuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnF1ZXN0aW9uKSByZXR1cm4gaXRlbTsgLy8gQWxyZWFkeSBoYXMgcXVlc3Rpb24gZGF0YVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uRGF0YSA9IHF1ZXN0aW9uTWFwLmdldChpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcXVlc3Rpb25EYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcXVlc3Rpb25EYXRhLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcXVlc3Rpb25EYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmaWN1bHR5OiBxdWVzdGlvbkRhdGEuZGlmZmljdWx0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ1R5cGU6IHF1ZXN0aW9uRGF0YS5zY29yaW5nVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIENvbXB1dGVkIFByb3BlcnRpZXMgICAtLS0tXG5cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgc2VjdGlvbnMgZm9yIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYnVpbGRlclN0YXRlKCkuc2VjdGlvbnMpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgY2FuIHJlbW92ZSBzZWN0aW9uIChtdXN0IGhhdmUgYXQgbGVhc3QgMSBzZWN0aW9uKVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjYW5SZW1vdmVTZWN0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWN0aW9ucygpLmxlbmd0aCA+IDEpO1xuXG4gICAgLyoqXG4gICAgICogR2V0IGN1cnJlbnQgZGlzcGxheSBzZXR0aW5ncyBmcm9tIHN0YXRlIG9yIGRlZmF1bHRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGlzcGxheVNldHRpbmdzID0gY29tcHV0ZWQ8UXVlc3Rpb25uYWlyZURpc3BsYXlTZXR0aW5ncz4oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuYnVpbGRlclN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5kaXNwbGF5U2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5U2V0dGluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gdmFsdWUgaWYgc3RhdGUgZG9lc24ndCBoYXZlIGl0XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnZlcnRTdGF0ZVRvVmFsdWUoc3RhdGUsIHRoaXMudmFsdWUoKSB8fCB1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlLmRpc3BsYXlTZXR0aW5ncyB8fCB7XG4gICAgICAgICAgICB2aWV3TW9kZTogJ3NpbmdsZS1wYWdlJyBhcyBjb25zdCxcbiAgICAgICAgICAgIHNob3dQcm9ncmVzc0JhcjogdHJ1ZSxcbiAgICAgICAgICAgIHNob3dUaW1lcjogZmFsc2UsXG4gICAgICAgICAgICBzaG93U2VjdGlvblRpdGxlczogdHJ1ZSxcbiAgICAgICAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IHRydWUsXG4gICAgICAgIH07XG4gICAgfSk7XG5cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZWN0aW9uIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmV2ZW50aW5nIGVmZmVjdCBsb29wc1xuICAgICAqIEVuc3VyZXMgYXQgbGVhc3Qgb25lIHNlY3Rpb24gYWx3YXlzIGV4aXN0c1xuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlU3RhdGUodXBkYXRlcjogKHN0YXRlOiBRdWVzdGlvbm5haXJlQnVpbGRlclN0YXRlKSA9PiBRdWVzdGlvbm5haXJlQnVpbGRlclN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbnRlcm5hbFVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXJTdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFN0YXRlID0gdXBkYXRlcihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gU2FmZXR5IGNoZWNrOiBlbnN1cmUgYXQgbGVhc3Qgb25lIHNlY3Rpb24gYWx3YXlzIGV4aXN0c1xuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkU3RhdGUuc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTZWN0aW9uID0gY3JlYXRlRGVmYXVsdFNlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNlY3Rpb24ub3JkZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IFtkZWZhdWx0U2VjdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIFJlc2V0IGZsYWcgYWZ0ZXIgY3VycmVudCBleGVjdXRpb24gY29udGV4dFxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ludGVybmFsVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBhZGRpbmcgYSBuZXcgc2VjdGlvblxuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZUFkZFNlY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhZGRUaXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuYWRkLXNlY3Rpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdBZGQgU2VjdGlvbic7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpdGxlTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGdlbmVyYWw6dGVybXMuY29tbW9uLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnVGl0bGUnO1xuXG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi5kZXNjcmlwdGlvbidcbiAgICAgICAgICAgICkgfHwgJ0Rlc2NyaXB0aW9uJztcblxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAgICAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgICAgICAgICAgLmRpYWxvZygoZGlhbG9nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRpdGxlKGFkZFRpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNpemUoJ21kJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDbG9zZUJ1dHRvbih0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQoKGxheW91dEJ1aWxkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoKGZsZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRHYXAoJzE2cHgnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh0aXRsZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCd0aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0VudGVyIHNlY3Rpb24gdGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKGRlc2NyaXB0aW9uTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubGFyZ2VUZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBzZWN0aW9uIGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldEFjdGlvbnMoKGFjdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYW5jZWwoJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1Ym1pdCgnQGdlbmVyYWw6YWN0aW9ucy5zYXZlLnRpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gZGlhbG9nUmVmLmNvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGF3YWl0IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uICE9PSAnY2FuY2VsJyAmJiBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NlY3Rpb24gPSBjcmVhdGVEZWZhdWx0U2VjdGlvbigpO1xuICAgICAgICAgICAgICAgIG5ld1NlY3Rpb24ub3JkZXIgPSB0aGlzLnNlY3Rpb25zKCkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIG5ld1NlY3Rpb24udGl0bGUgPSBmb3JtRGF0YS50aXRsZSB8fCAnTmV3IFNlY3Rpb24nO1xuICAgICAgICAgICAgICAgIG5ld1NlY3Rpb24uZGVzY3JpcHRpb24gPSBmb3JtRGF0YS5kZXNjcmlwdGlvbiB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBbLi4uc3RhdGUuc2VjdGlvbnMsIG5ld1NlY3Rpb25dLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCB0byB0aGUgbmV3bHkgYWRkZWQgc2VjdGlvbiBhZnRlciBET00gdXBkYXRlXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHNlY3Rpb24tJHtuZXdTZWN0aW9uLmlkfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25FbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIHNlY3Rpb246JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHNlY3Rpb24gZWRpdGluZ1xuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZVNlY3Rpb25FZGl0KHNlY3Rpb246IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU2VjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWRpdFRpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuYWN0aW9ucy5lZGl0LXNlY3Rpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdFZGl0IFNlY3Rpb24nO1xuXG4gICAgICAgICAgICBjb25zdCB0aXRsZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1RpdGxlJztcblxuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb25MYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAZ2VuZXJhbDp0ZXJtcy5jb21tb24uZGVzY3JpcHRpb24nXG4gICAgICAgICAgICApIHx8ICdEZXNjcmlwdGlvbic7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgICAgICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAgICAgICAgIC5kaWFsb2coKGRpYWxvZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUaXRsZShlZGl0VGl0bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0U2l6ZSgnbWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldENsb3NlQnV0dG9uKHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHNlY3Rpb24udGl0bGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlY3Rpb24uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQoKGxheW91dEJ1aWxkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoKGZsZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRHYXAoJzE2cHgnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh0aXRsZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCd0aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0VudGVyIHNlY3Rpb24gdGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKGRlc2NyaXB0aW9uTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubGFyZ2VUZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBzZWN0aW9uIGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldEFjdGlvbnMoKGFjdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYW5jZWwoJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1Ym1pdCgnQGdlbmVyYWw6YWN0aW9ucy5zYXZlLnRpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gZGlhbG9nUmVmLmNvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGF3YWl0IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uICE9PSAnY2FuY2VsJyAmJiBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgocykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHMuaWQgPT09IHNlY3Rpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvcm1EYXRhLnRpdGxlIHx8IHMudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRGF0YS5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8gZm9ybURhdGEuZGVzY3JpcHRpb24gOiBzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlZGl0aW5nIHNlY3Rpb246JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHNlY3Rpb24gcmVtb3ZhbFxuICAgICAqL1xuICAgIGhhbmRsZVNlY3Rpb25SZW1vdmUoc2VjdGlvbjogUXVlc3Rpb25uYWlyZUJ1aWxkZXJTZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIERvbid0IGFsbG93IHJlbW92aW5nIHRoZSBsYXN0IHNlY3Rpb24gLSBtdXN0IGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZVxuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucygpLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlIHNlY3Rpb24gYW5kIHVwZGF0ZSBvcmRlciB2YWx1ZXNcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNlY3Rpb25zOiBzdGF0ZS5zZWN0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHMpID0+IHMuaWQgIT09IHNlY3Rpb24uaWQpXG4gICAgICAgICAgICAgICAgLm1hcCgocywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgc2VjdGlvbiBkcm9wIChyZW9yZGVyaW5nKVxuICAgICAqL1xuICAgIGhhbmRsZVNlY3Rpb25Ecm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxRdWVzdGlvbm5haXJlQnVpbGRlclNlY3Rpb25bXT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBvcmRlciB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlclN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgoc2VjdGlvbiwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgSXRlbSBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGFkZGluZyBxdWVzdGlvbnMgdG8gYSBzZWN0aW9uXG4gICAgICovXG4gICAgYXN5bmMgaGFuZGxlQWRkUXVlc3Rpb25zVG9TZWN0aW9uKHNlY3Rpb246IFF1ZXN0aW9ubmFpcmVCdWlsZGVyU2VjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBBWERhdGFTb3VyY2Uoe1xuICAgICAgICAgICAgICAgIGtleTogJ2lkJyxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMjAsXG4gICAgICAgICAgICAgICAgbG9hZDogYXN5bmMgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25zID0gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLnF1ZXJ5KGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHF1ZXN0aW9ucy5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiBxdWVzdGlvbnMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgY2F0ZWdvcnkgdHJlZSBkYXRhIHNvdXJjZSBmb3IgZmlsdGVyaW5nXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeVRyZWVEYXRhU291cmNlOiBBWFBDYXRlZ29yeVRyZWVEYXRhU291cmNlID0ge1xuICAgICAgICAgICAgICAgIGxvYWRSb290Tm9kZXM6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLmdldENhdGVnb3JpZXNMaXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2lzRW1wdHknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSB8fCBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5Db3VudDogaXRlbS5jaGlsZHJlbkNvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRDaGlsZE5vZGVzOiBhc3luYyAocGFyZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXN0aW9uQmFua1NlcnZpY2UuZ2V0Q2F0ZWdvcmllc0xpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3BhcmVudElkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgfHwgaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQ291bnQ6IGl0ZW0uY2hpbGRyZW5Db3VudCB8fCAwLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWFyY2hOb2RlczogYXN5bmMgKHNlYXJjaFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLmdldENhdGVnb3JpZXNMaXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdjb250YWlucycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdjb250YWlucycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgfHwgaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQ291bnQ6IGl0ZW0uY2hpbGRyZW5Db3VudCB8fCAwLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGVudGl0eTogQVhQRW50aXR5IHwgbnVsbCA9IGF3YWl0IHRoaXMuZW50aXR5UmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgICAgIFJvb3RDb25maWcuZW50aXRpZXMucXVlc3Rpb25CYW5rSXRlbS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRpdHkgbm90IGZvdW5kOiAnICsgUm9vdENvbmZpZy5lbnRpdGllcy5xdWVzdGlvbkJhbmtJdGVtLm5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID1cbiAgICAgICAgICAgICAgICBlbnRpdHkuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICA/LmZpbHRlcigoY29sdW1uOiBBWFBFbnRpdHlUYWJsZUNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eSEucHJvcGVydGllcy5zb21lKChwcm9wZXJ0eTogQVhQRW50aXR5UHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IGNvbHVtbi5uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW46IEFYUEVudGl0eVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGVudGl0eSEucHJvcGVydGllcy5maW5kKChwcm9wOiBBWFBFbnRpdHlQcm9wZXJ0eSkgPT4gcHJvcC5uYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9wZXJ0eT8udGl0bGUgPz8gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY29sdW1uLm9wdGlvbnM/LnZpc2libGUgIT09IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjb2x1bW4uc2hvd0FzPy50eXBlID8/IHByb3BlcnR5Py5zY2hlbWE/LmludGVyZmFjZT8udHlwZSA/PyAndGV4dC1lZGl0b3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBjb2x1bW4uc2hvd0FzPy5vcHRpb25zID8/IHByb3BlcnR5Py5zY2hlbWE/LmludGVyZmFjZT8ub3B0aW9ucyA/PyB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSkgfHwgW107XG5cbiAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSB0aXRsZXNcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdFF1ZXN0aW9uc1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuc2VsZWN0LXF1ZXN0aW9ucydcbiAgICAgICAgICAgICkgfHwgJ1NlbGVjdCBRdWVzdGlvbnMgZnJvbSBRdWVzdGlvbiBCYW5rJztcblxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllc1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuY2F0ZWdvcmllcydcbiAgICAgICAgICAgICkgfHwgJ0NhdGVnb3JpZXMnO1xuXG4gICAgICAgICAgICBjb25zdCB0aXRsZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi50aXRsZScpIHx8ICdUaXRsZSc7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi5kZXNjcmlwdGlvbicpIHx8ICdEZXNjcmlwdGlvbic7XG5cbiAgICAgICAgICAgIC8vIE9wZW4gZGF0YSBzZWxlY3RvciB3aXRoIGNhdGVnb3J5IGZpbHRlclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5kYXRhU2VsZWN0b3JTZXJ2aWNlLm9wZW5XaXRoQ2F0ZWdvcnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc2VsZWN0UXVlc3Rpb25zVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU6ICdtdWx0aXBsZScsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAndGl0bGUnLCB0aXRsZTogdGl0bGVMYWJlbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnZGVzY3JpcHRpb24nLCB0aXRsZTogZGVzY3JpcHRpb25MYWJlbCB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd0NyZWF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBjYXRlZ29yaWVzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGNhdGVnb3J5VHJlZURhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkOiAnY2F0ZWdvcnlJZHMnLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJPcGVyYXRvcjogJ2NvbnRhaW5zJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICczNTBweCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBzZWxlY3RlZCBxdWVzdGlvbnMgdG8gdGhlIHNlY3Rpb25cbiAgICAgICAgICAgIGlmIChyZXN1bHQ/Lml0ZW1zICYmIHJlc3VsdC5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9hZCBmdWxsIHF1ZXN0aW9uIGRldGFpbHMgZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uUHJvbWlzZXMgPSByZXN1bHQuaXRlbXMubWFwKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rU2VydmljZS5nZXRPbmUoaXRlbS5pZCkuY2F0Y2goKCkgPT4gbnVsbCksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChxdWVzdGlvblByb21pc2VzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zOiBRdWVzdGlvbm5haXJlQnVpbGRlckl0ZW1bXSA9IHJlc3VsdC5pdGVtcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsUXVlc3Rpb24gPSBxdWVzdGlvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IEFYUERhdGFHZW5lcmF0b3IudXVpZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25CYW5rSXRlbUlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IHNlY3Rpb24uaXRlbXMubGVuZ3RoICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHlDb25kaXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkQ29uZGl0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29yaW5nT3ZlcnJpZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTmV3bHlBZGRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBmdWxsUXVlc3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGZ1bGxRdWVzdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZ1bGxRdWVzdGlvbi50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGZ1bGxRdWVzdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmljdWx0eTogZnVsbFF1ZXN0aW9uLmRpZmZpY3VsdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdUeXBlOiBmdWxsUXVlc3Rpb24uc2NvcmluZ1R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUgfHwgJ1F1ZXN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZpY3VsdHk6IGl0ZW0uZGlmZmljdWx0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ1R5cGU6IGl0ZW0uc2NvcmluZ1R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlclN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uczogc3RhdGUuc2VjdGlvbnMubWFwKChzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgcy5pZCA9PT0gc2VjdGlvbi5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogWy4uLnMuaXRlbXMsIC4uLm5ld0l0ZW1zXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgcXVlc3Rpb25zOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBpdGVtIHJlbW92YWxcbiAgICAgKi9cbiAgICBoYW5kbGVJdGVtUmVtb3ZlKGl0ZW06IFF1ZXN0aW9ubmFpcmVCdWlsZGVySXRlbSwgc2VjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZGVyU3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLmlkICE9PSBzZWN0aW9uSWQpIHJldHVybiBzZWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgLy8gSGFyZCBkZWxldGUgLSByZW1vdmUgaXRlbSBmcm9tIGFycmF5XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMuZmlsdGVyKChpKSA9PiBpLmlkICE9PSBpdGVtLmlkKS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBxdWVzdGlvbiBpdGVtIGVkaXRpbmcgKHNldHRpbmdzKVxuICAgICAqL1xuICAgIGFzeW5jIGhhbmRsZUl0ZW1FZGl0KGl0ZW06IFF1ZXN0aW9ubmFpcmVCdWlsZGVySXRlbSwgc2VjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExvYWQgZnVsbCBxdWVzdGlvbiBkZXRhaWxzIHRvIGdldCBkZWZhdWx0IHNjb3JpbmcgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBxdWVzdGlvbkRldGFpbHMgPSBpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZFxuICAgICAgICAgICAgICAgID8gYXdhaXQgdGhpcy5xdWVzdGlvbkJhbmtTZXJ2aWNlLmdldE9uZShpdGVtLnF1ZXN0aW9uQmFua0l0ZW1JZCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IGVkaXRUaXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuZWRpdC1xdWVzdGlvbi50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ0VkaXQgUXVlc3Rpb24gU2V0dGluZ3MnO1xuXG4gICAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5maWVsZHMuaXMtcmVxdWlyZWQudGl0bGUnXG4gICAgICAgICAgICApIHx8ICdSZXF1aXJlZCc7XG5cbiAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlDb25kaXRpb25MYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmZpZWxkcy52aXNpYmlsaXR5LWNvbmRpdGlvbi50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Zpc2liaWxpdHkgQ29uZGl0aW9uJztcblxuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRDb25kaXRpb25MYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmZpZWxkcy5yZXF1aXJlZC1jb25kaXRpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdSZXF1aXJlZCBDb25kaXRpb24nO1xuXG4gICAgICAgICAgICBjb25zdCBzY29yaW5nUG9pbnRzTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5maWVsZHMuc2NvcmluZy1wb2ludHMudGl0bGUnXG4gICAgICAgICAgICApIHx8ICdTY29yaW5nIFBvaW50cyc7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjb3JpbmdXZWlnaHRMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmZpZWxkcy5zY29yaW5nLXdlaWdodC50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Njb3JpbmcgV2VpZ2h0JztcblxuICAgICAgICAgICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzIGZyb20gcXVlc3Rpb24gYmFuayBpdGVtIG9yIHVzZSBleGlzdGluZyBvdmVycmlkZSB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTY29yaW5nUG9pbnRzID0gaXRlbS5zY29yaW5nT3ZlcnJpZGU/LnBvaW50cyA/PyBxdWVzdGlvbkRldGFpbHM/LnBvaW50cyA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTY29yaW5nV2VpZ2h0ID0gaXRlbS5zY29yaW5nT3ZlcnJpZGU/LndlaWdodCA/PyBxdWVzdGlvbkRldGFpbHM/LndlaWdodCA/PyAnJztcblxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAgICAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgICAgICAgICAgLmRpYWxvZygoZGlhbG9nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRpdGxlKGVkaXRUaXRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTaXplKCdtZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q2xvc2VCdXR0b24odHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBpdGVtLmlzUmVxdWlyZWQgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbjogaXRlbS52aXNpYmlsaXR5Q29uZGl0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkQ29uZGl0aW9uOiBpdGVtLnJlcXVpcmVkQ29uZGl0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdQb2ludHM6IGRlZmF1bHRTY29yaW5nUG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JpbmdXZWlnaHQ6IGRlZmF1bHRTY29yaW5nV2VpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb250ZW50KChsYXlvdXRCdWlsZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0QnVpbGRlci5mbGV4KChmbGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREaXJlY3Rpb24oJ2NvbHVtbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0R2FwKCcxNnB4JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoaXNSZXF1aXJlZExhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdpc1JlcXVpcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh2aXNpYmlsaXR5Q29uZGl0aW9uTGFiZWwsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3Zpc2liaWxpdHlDb25kaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2NvZGUtZWRpdG9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogJ2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnbWluLWgtNDgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQocmVxdWlyZWRDb25kaXRpb25MYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgncmVxdWlyZWRDb25kaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2NvZGUtZWRpdG9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogJ2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnbWluLWgtNDgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoc2NvcmluZ1BvaW50c0xhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdzY29yaW5nUG9pbnRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQubnVtYmVyQm94KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBzY29yaW5nIHBvaW50cyAob3B0aW9uYWwpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKHNjb3JpbmdXZWlnaHRMYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2NvcmluZ1dlaWdodCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm51bWJlckJveCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnRW50ZXIgc2NvcmluZyB3ZWlnaHQgKG9wdGlvbmFsKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0QWN0aW9ucygoYWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbmNlbCgnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3VibWl0KCdAZ2VuZXJhbDphY3Rpb25zLnNhdmUudGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNob3coKTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBkaWFsb2dSZWYuY29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gYXdhaXQgZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24gIT09ICdjYW5jZWwnICYmIGZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uczogc3RhdGUuc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5pZCAhPT0gc2VjdGlvbklkKSByZXR1cm4gc2VjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBzZWN0aW9uLml0ZW1zLm1hcCgoaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaS5pZCAhPT0gaXRlbS5pZCkgcmV0dXJuIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgc2NvcmluZyBvdmVycmlkZSBpZiBwb2ludHMgb3Igd2VpZ2h0IGFyZSBwcm92aWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2NvcmluZ092ZXJyaWRlOiB7IHBvaW50cz86IG51bWJlcjsgd2VpZ2h0PzogbnVtYmVyIH0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BvaW50cyA9IGZvcm1EYXRhLnNjb3JpbmdQb2ludHMgIT09IHVuZGVmaW5lZCAmJiBmb3JtRGF0YS5zY29yaW5nUG9pbnRzICE9PSBudWxsICYmIGZvcm1EYXRhLnNjb3JpbmdQb2ludHMgIT09ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNXZWlnaHQgPSBmb3JtRGF0YS5zY29yaW5nV2VpZ2h0ICE9PSB1bmRlZmluZWQgJiYgZm9ybURhdGEuc2NvcmluZ1dlaWdodCAhPT0gbnVsbCAmJiBmb3JtRGF0YS5zY29yaW5nV2VpZ2h0ICE9PSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUG9pbnRzIHx8IGhhc1dlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlLnBvaW50cyA9IE51bWJlcihmb3JtRGF0YS5zY29yaW5nUG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNXZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29yaW5nT3ZlcnJpZGUud2VpZ2h0ID0gTnVtYmVyKGZvcm1EYXRhLnNjb3JpbmdXZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBmb3JtRGF0YS5pc1JlcXVpcmVkID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eUNvbmRpdGlvbjogZm9ybURhdGEudmlzaWJpbGl0eUNvbmRpdGlvbiB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZENvbmRpdGlvbjogZm9ybURhdGEucmVxdWlyZWRDb25kaXRpb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmluZ092ZXJyaWRlOiBzY29yaW5nT3ZlcnJpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlZGl0aW5nIHF1ZXN0aW9uOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBpdGVtIGRyb3AgKHJlb3JkZXJpbmcgd2l0aGluIHNlY3Rpb24gb3IgYmV0d2VlbiBzZWN0aW9ucylcbiAgICAgKi9cbiAgICBoYW5kbGVJdGVtRHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8UXVlc3Rpb25uYWlyZUJ1aWxkZXJJdGVtW10+LCB0YXJnZXRTZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgICAgICAgLy8gUmVvcmRlcmluZyB3aXRoaW4gc2FtZSBzZWN0aW9uXG4gICAgICAgICAgICBtb3ZlSXRlbUluQXJyYXkoZXZlbnQuY29udGFpbmVyLmRhdGEsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXJTdGF0ZS51cGRhdGUoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBzdGF0ZS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24uaWQgIT09IHRhcmdldFNlY3Rpb25JZCkgcmV0dXJuIHNlY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogc2VjdGlvbi5pdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTW92aW5nIGl0ZW0gYmV0d2VlbiBzZWN0aW9uc1xuICAgICAgICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBvcmRlcnMgZm9yIGJvdGggc2VjdGlvbnNcbiAgICAgICAgICAgIHRoaXMuYnVpbGRlclN0YXRlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VjdGlvbnM6IHN0YXRlLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5pZCA9PT0gdGFyZ2V0U2VjdGlvbklkIHx8IHNlY3Rpb24uaWQgPT09IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHNlY3Rpb24gZHJvcCBsaXN0cyBmb3IgZHJhZy1kcm9wIGNvbm5lY3Rpdml0eVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRBbGxTZWN0aW9uRHJvcExpc3RzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbnMoKS5tYXAoKHNlY3Rpb24pID0+IGBzZWN0aW9uLSR7c2VjdGlvbi5pZH0taXRlbXNgKTtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgRGlzcGxheSBTZXR0aW5ncyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBvcGVuaW5nIGRpc3BsYXkgc2V0dGluZ3MgZGlhbG9nXG4gICAgICovXG4gICAgYXN5bmMgaGFuZGxlU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nc1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuYWN0aW9ucy5zZXR0aW5ncy50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ0Rpc3BsYXkgU2V0dGluZ3MnO1xuXG4gICAgICAgICAgICBjb25zdCB2aWV3TW9kZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLXZpZXdlci5maWVsZHMudmlldy1tb2RlLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnVmlldyBNb2RlJztcblxuICAgICAgICAgICAgY29uc3Qgc2hvd1Byb2dyZXNzQmFyTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy5zaG93LXByb2dyZXNzLWJhci50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Nob3cgUHJvZ3Jlc3MgQmFyJztcblxuICAgICAgICAgICAgY29uc3Qgc2hvd1RpbWVyTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy5zaG93LXRpbWVyLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnU2hvdyBUaW1lcic7XG5cbiAgICAgICAgICAgIGNvbnN0IHNob3dTZWN0aW9uVGl0bGVzTGFiZWwgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy5zaG93LXNlY3Rpb24tdGl0bGVzLnRpdGxlJ1xuICAgICAgICAgICAgKSB8fCAnU2hvdyBTZWN0aW9uIFRpdGxlcyc7XG5cbiAgICAgICAgICAgIGNvbnN0IHNob3dRdWVzdGlvbk51bWJlcnNMYWJlbCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKFxuICAgICAgICAgICAgICAgICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnNob3ctcXVlc3Rpb24tbnVtYmVycy50aXRsZSdcbiAgICAgICAgICAgICkgfHwgJ1Nob3cgUXVlc3Rpb24gTnVtYmVycyc7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlQmVmb3JlTmF2aWdhdGlvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLXZpZXdlci5maWVsZHMudmFsaWRhdGUtYmVmb3JlLW5hdmlnYXRpb24udGl0bGUnXG4gICAgICAgICAgICApIHx8ICdWYWxpZGF0ZSBCZWZvcmUgTmF2aWdhdGlvbic7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXR0aW5ncyA9IHRoaXMuZGlzcGxheVNldHRpbmdzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgICAgICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAgICAgICAgIC5kaWFsb2coKGRpYWxvZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUaXRsZShzZXR0aW5nc1RpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNpemUoJ21kJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDbG9zZUJ1dHRvbih0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlOiBjdXJyZW50U2V0dGluZ3Mudmlld01vZGUgfHwgJ3NpbmdsZS1wYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3NCYXI6IGN1cnJlbnRTZXR0aW5ncy5zaG93UHJvZ3Jlc3NCYXIgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93VGltZXI6IGN1cnJlbnRTZXR0aW5ncy5zaG93VGltZXIgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb25UaXRsZXM6IGN1cnJlbnRTZXR0aW5ncy5zaG93U2VjdGlvblRpdGxlcyA/PyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IGN1cnJlbnRTZXR0aW5ncy5zaG93UXVlc3Rpb25OdW1iZXJzID8/IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uOiBjdXJyZW50U2V0dGluZ3MudmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uID8/IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQoKGxheW91dEJ1aWxkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoKGZsZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRHYXAoJzE2cHgnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh2aWV3TW9kZUxhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCd2aWV3TW9kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdEJveCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZDogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3NpbmdsZS1wYWdlJywgdGl0bGU6ICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnZpZXctbW9kZS5vcHRpb25zLnNpbmdsZS1wYWdlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3BhZ2UtcGVyLWdyb3VwJywgdGl0bGU6ICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnZpZXctbW9kZS5vcHRpb25zLnBhZ2UtcGVyLWdyb3VwJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3BhZ2UtcGVyLXF1ZXN0aW9uJywgdGl0bGU6ICdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS12aWV3ZXIuZmllbGRzLnZpZXctbW9kZS5vcHRpb25zLnBhZ2UtcGVyLXF1ZXN0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3NpZGUtbWVudScsIHRpdGxlOiAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtdmlld2VyLmZpZWxkcy52aWV3LW1vZGUub3B0aW9ucy5zaWRlLW1lbnUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZChzaG93UHJvZ3Jlc3NCYXJMYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2hvd1Byb2dyZXNzQmFyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZChzaG93VGltZXJMYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2hvd1RpbWVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZChzaG93U2VjdGlvblRpdGxlc0xhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdzaG93U2VjdGlvblRpdGxlcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnRvZ2dsZVN3aXRjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoc2hvd1F1ZXN0aW9uTnVtYmVyc0xhYmVsLCAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdzaG93UXVlc3Rpb25OdW1iZXJzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCh2YWxpZGF0ZUJlZm9yZU5hdmlnYXRpb25MYWJlbCwgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgndmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQudG9nZ2xlU3dpdGNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0QWN0aW9ucygoYWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbmNlbCgnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3VibWl0KCdAZ2VuZXJhbDphY3Rpb25zLnNhdmUudGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNob3coKTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBkaWFsb2dSZWYuY29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gYXdhaXQgZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24gIT09ICdjYW5jZWwnICYmIGZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB2aWV3TW9kZSAtIGhhbmRsZSBib3RoIHN0cmluZyBhbmQgb2JqZWN0IChmcm9tIHNlbGVjdCBib3gpXG4gICAgICAgICAgICAgICAgbGV0IHZpZXdNb2RlOiAnc2luZ2xlLXBhZ2UnIHwgJ3BhZ2UtcGVyLWdyb3VwJyB8ICdwYWdlLXBlci1xdWVzdGlvbicgPSAnc2luZ2xlLXBhZ2UnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdNb2RlVmFsdWUgPSBmb3JtRGF0YS52aWV3TW9kZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZpZXdNb2RlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID0gdmlld01vZGVWYWx1ZSBhcyAnc2luZ2xlLXBhZ2UnIHwgJ3BhZ2UtcGVyLWdyb3VwJyB8ICdwYWdlLXBlci1xdWVzdGlvbic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3TW9kZVZhbHVlICYmIHR5cGVvZiB2aWV3TW9kZVZhbHVlID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZpZXdNb2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGUgPSAodmlld01vZGVWYWx1ZSBhcyBhbnkpLmlkIGFzICdzaW5nbGUtcGFnZScgfCAncGFnZS1wZXItZ3JvdXAnIHwgJ3BhZ2UtcGVyLXF1ZXN0aW9uJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTZXR0aW5nczogUXVlc3Rpb25uYWlyZURpc3BsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU6IHZpZXdNb2RlLFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3NCYXI6IGZvcm1EYXRhLnNob3dQcm9ncmVzc0JhciA/PyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzaG93VGltZXI6IGZvcm1EYXRhLnNob3dUaW1lciA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb25UaXRsZXM6IGZvcm1EYXRhLnNob3dTZWN0aW9uVGl0bGVzID8/IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IGZvcm1EYXRhLnNob3dRdWVzdGlvbk51bWJlcnMgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVCZWZvcmVOYXZpZ2F0aW9uOiBmb3JtRGF0YS52YWxpZGF0ZUJlZm9yZU5hdmlnYXRpb24gPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHN0YXRlIGJ5IHByZXNlcnZpbmcgZXhpc3RpbmcgcXVlc3Rpb24gZGF0YSBhbmQgdXBkYXRpbmcgZGlzcGxheVNldHRpbmdzIGluIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGRpc3BsYXlTZXR0aW5ncyBpbiBzdGF0ZSBkaXJlY3RseVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTZXR0aW5nczogbmV3U2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9wZW5pbmcgc2V0dGluZ3M6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gLS0tLSAgIFByZXZpZXcgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHByZXZpZXcgZGlhbG9nIHdpdGggcXVlc3Rpb25uYWlyZSB2aWV3ZXJcbiAgICAgKi9cbiAgICBhc3luYyBoYW5kbGVQcmV2aWV3KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnZlcnRTdGF0ZVRvVmFsdWUodGhpcy5idWlsZGVyU3RhdGUoKSwgdGhpcy52YWx1ZSgpIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAvLyBBbHdheXMgdXNlIHRoZSBjdXJyZW50IGRpc3BsYXlTZXR0aW5ncyBmcm9tIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0byBlbnN1cmUgcHJldmlldyB1c2VzIGxhdGVzdCBzZXR0aW5nc1xuICAgICAgICAgICAgY3VycmVudFZhbHVlLmRpc3BsYXlTZXR0aW5ncyA9IHRoaXMuZGlzcGxheVNldHRpbmdzKCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2aWV3VGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhcbiAgICAgICAgICAgICAgICAnQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5hY3Rpb25zLnByZXZpZXcudGl0bGUnXG4gICAgICAgICAgICApIHx8ICdQcmV2aWV3JztcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVzdGlvbm5haXJlVmlld2VyU2VydmljZS5vcGVuKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcHJldmlld1RpdGxlLFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHNpemU6ICdsZycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIHJlc3VsdCBpZiBuZWVkZWQgKGFuc3dlcnMsIHN1Ym1pdHRlZCBzdGF0dXMpXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1F1ZXN0aW9ubmFpcmUgcHJldmlldyByZXN1bHQ6JywgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9wZW5pbmcgcHJldmlldzonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgZnVsbHNjcmVlbiBtb2RlIHVzaW5nIHRoZSBkaXJlY3RpdmVcbiAgICAgKi9cbiAgICBhc3luYyBoYW5kbGVGdWxsc2NyZWVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmdWxsc2NyZWVuID0gdGhpcy5mdWxsc2NyZWVuRGlyZWN0aXZlKCk7XG4gICAgICAgIGlmIChmdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICBhd2FpdCBmdWxsc2NyZWVuLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuLy8jZW5kcmVnaW9uXG5cbiIsIjxkaXYgY2xhc3M9XCJheG0tcXVlc3Rpb25uYWlyZS1idWlsZGVyXCIgYXhGdWxsc2NyZWVuICNmdWxsc2NyZWVuPVwiYXhGdWxsc2NyZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIl9faGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJfX2hlYWRlci1sZWZ0XCI+XG4gICAgICAgICAgICA8IS0tIExlZnQgc2lkZSBjYW4gYmUgdXNlZCBmb3Igb3RoZXIgYWN0aW9ucyBpbiB0aGUgZnV0dXJlIC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIl9faGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICBAaWYgKCFyZWFkb25seSgpKSB7XG5cbiAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKCdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuYWRkLXNlY3Rpb24udGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICdBZGQgU2VjdGlvbidcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIiAob25DbGljayk9XCJoYW5kbGVBZGRTZWN0aW9uKClcIj5cbiAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtbGlnaHQgZmEtbGF5ZXItZ3JvdXBcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIignQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5hY3Rpb25zLnNldHRpbmdzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSB8fCAnU2V0dGluZ3MnXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVTZXR0aW5ncygpXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLWxpZ2h0IGZhLWdlYXJcIj48L2F4LWljb24+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIignQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5hY3Rpb25zLnByZXZpZXcudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICdQcmV2aWV3J1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlY3Rpb25zKCkubGVuZ3RoID09PSAwXCIgKG9uQ2xpY2spPVwiaGFuZGxlUHJldmlldygpXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLWxpZ2h0IGZhLWV5ZVwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKCdAYXNzZXNzbWVudC1tYW5hZ2VtZW50OnF1ZXN0aW9ubmFpcmVzLmNvbXBvbmVudHMucXVlc3Rpb25uYWlyZS1idWlsZGVyLmFjdGlvbnMuZnVsbHNjcmVlbi50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykgfHwgJ0Z1bGwgU2NyZWVuJ1wiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlRnVsbHNjcmVlbigpXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLWxpZ2h0IGZhLWV4cGFuZFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJfX2NvbnRlbnRcIj5cbiAgICAgICAgPCEtLSBEZXNpZ25lciBNb2RlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiX19zZWN0aW9ucy1jb250YWluZXJcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cInNlY3Rpb25zKClcIlxuICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJoYW5kbGVTZWN0aW9uRHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zKCk7IHRyYWNrIHNlY3Rpb24uaWQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3NlY3Rpb25cIiBjZGtEcmFnIFtpZF09XCInc2VjdGlvbi0nICsgc2VjdGlvbi5pZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX3NlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9fc2VjdGlvbi1kcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtbGlnaHQgZmEtZ3JpcC12ZXJ0aWNhbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9fc2VjdGlvbi1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJfX3NlY3Rpb24tdGl0bGVcIj57eyBzZWN0aW9uLnRpdGxlIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VjdGlvbi5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJfX3NlY3Rpb24tZGVzY3JpcHRpb25cIj57eyBzZWN0aW9uLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghcmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuYWN0aW9ucy5hZGQtcXVlc3Rpb24udGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCInYWNjZW50MidcIiAob25DbGljayk9XCJoYW5kbGVBZGRRdWVzdGlvbnNUb1NlY3Rpb24oc2VjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtbGlnaHQgZmEtcGx1c1wiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgW2xvb2tdPVwiJ2JsYW5rJ1wiIGNvbG9yPVwiYWNjZW50M1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlU2VjdGlvbkVkaXQoc2VjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLWxpZ2h0IGZhLXBlbmNpbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjYW5SZW1vdmVTZWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiIFtsb29rXT1cIidibGFuaydcIiBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlU2VjdGlvblJlbW92ZShzZWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2gtY2FuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbXMtbGlzdCBheC1vdmVyZmxvdy1hdXRvXCIgY2RrRHJvcExpc3QgW2lkXT1cIidzZWN0aW9uLScgKyBzZWN0aW9uLmlkICsgJy1pdGVtcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJzZWN0aW9uLml0ZW1zXCIgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiZ2V0QWxsU2VjdGlvbkRyb3BMaXN0cygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiaGFuZGxlSXRlbURyb3AoJGV2ZW50LCBzZWN0aW9uLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzZWN0aW9uLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGF4cC1zdGF0ZS1tZXNzYWdlIGljb249XCJmYS1saWdodCBmYS1pbmJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIignQGFzc2Vzc21lbnQtbWFuYWdlbWVudDpxdWVzdGlvbm5haXJlcy5jb21wb25lbnRzLnF1ZXN0aW9ubmFpcmUtYnVpbGRlci5lbXB0eS1zdGF0ZXMuZW1wdHktc2VjdGlvbi50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCIoJ0Bhc3Nlc3NtZW50LW1hbmFnZW1lbnQ6cXVlc3Rpb25uYWlyZXMuY29tcG9uZW50cy5xdWVzdGlvbm5haXJlLWJ1aWxkZXIuZW1wdHktc3RhdGVzLmVtcHR5LXNlY3Rpb24uZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4cC1zdGF0ZS1tZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNlY3Rpb24uaXRlbXM7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW1cIiBjZGtEcmFnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19kcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1saWdodCBmYS1ncmlwLXZlcnRpY2FsXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuX19kaWZmaWN1bHR5LWVhc3ldPVwiaXRlbS5xdWVzdGlvbj8uZGlmZmljdWx0eSA9PT0gJ2Vhc3knXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuX19kaWZmaWN1bHR5LW1lZGl1bV09XCJpdGVtLnF1ZXN0aW9uPy5kaWZmaWN1bHR5ID09PSAnbWVkaXVtJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLl9fZGlmZmljdWx0eS1oYXJkXT1cIml0ZW0ucXVlc3Rpb24/LmRpZmZpY3VsdHkgPT09ICdoYXJkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1saWdodCBmYS1xdWVzdGlvbi1jaXJjbGVcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJfX2l0ZW0taW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIl9faXRlbS10aXRsZVwiPnt7IGl0ZW0ucXVlc3Rpb24/LnRpdGxlID8/ICdRdWVzdGlvbicgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5xdWVzdGlvbj8uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIl9faXRlbS1kZXNjcmlwdGlvblwiPnt7IGl0ZW0ucXVlc3Rpb24/LmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIl9faXRlbS1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIl9faXRlbS1iYWRnZSBfX3JlcXVpcmVkXCI+UmVxdWlyZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5zY29yaW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIl9faXRlbS1iYWRnZVwiPkN1c3RvbSBTY29yaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiX19pdGVtLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgW2xvb2tdPVwiJ2JsYW5rJ1wiIGNvbG9yPVwiYWNjZW50M1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVJdGVtRWRpdChpdGVtLCBzZWN0aW9uLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1saWdodCBmYS1wZW5jaWxcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uIFtsb29rXT1cIidibGFuaydcIiBjbGFzcz1cImF4LXNtXCIgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlSXRlbVJlbW92ZShpdGVtLCBzZWN0aW9uLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1saWdodCBmYS10cmFzaC1jYW5cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ=="],"names":[],"mappings":"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"}