@piserve-tech/form-submission 1.3.315 → 1.3.317

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 (443) hide show
  1. package/README.md +24 -24
  2. package/ng-package.json +30 -0
  3. package/package.json +33 -46
  4. package/{assets → src/assets}/icons/close-sidebar-mark-icon.svg +3 -3
  5. package/{assets → src/assets}/icons/copy-icon.svg +5 -5
  6. package/{assets → src/assets}/icons/delete-icon.svg +7 -7
  7. package/{assets → src/assets}/icons/delete-no-outline-icon.svg +7 -7
  8. package/src/environment/environment.ts +6 -0
  9. package/src/form-fields/aggregate-function/aggregate-function.component.html +63 -0
  10. package/src/form-fields/aggregate-function/aggregate-function.component.scss +1 -0
  11. package/src/form-fields/aggregate-function/aggregate-function.component.spec.ts +21 -0
  12. package/src/form-fields/aggregate-function/aggregate-function.component.ts +148 -0
  13. package/src/form-fields/check-box-fields/check-box-fields.component.html +81 -0
  14. package/src/form-fields/check-box-fields/check-box-fields.component.scss +28 -0
  15. package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +21 -0
  16. package/src/form-fields/check-box-fields/check-box-fields.component.ts +538 -0
  17. package/src/form-fields/currency-fields/currency-fields.component.html +85 -0
  18. package/src/form-fields/currency-fields/currency-fields.component.scss +48 -0
  19. package/src/form-fields/currency-fields/currency-fields.component.spec.ts +21 -0
  20. package/src/form-fields/currency-fields/currency-fields.component.ts +589 -0
  21. package/src/form-fields/date-time-fields/date-time-fields.component.html +268 -0
  22. package/src/form-fields/date-time-fields/date-time-fields.component.scss +88 -0
  23. package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +21 -0
  24. package/src/form-fields/date-time-fields/date-time-fields.component.ts +693 -0
  25. package/src/form-fields/drop-down-fields/drop-down-fields.component.html +77 -0
  26. package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +12 -0
  27. package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +21 -0
  28. package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +698 -0
  29. package/src/form-fields/file-picker-fields/file-picker-fields.component.html +72 -0
  30. package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +33 -0
  31. package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +21 -0
  32. package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +256 -0
  33. package/src/form-fields/form-fields.module.ts +110 -0
  34. package/src/form-fields/hidden-field/hidden-field.component.scss +0 -0
  35. package/src/form-fields/hidden-field/hidden-field.component.spec.ts +21 -0
  36. package/src/form-fields/hidden-field/hidden-field.component.ts +156 -0
  37. package/src/form-fields/iframe-fields/iframe-fields.component.html +31 -0
  38. package/src/form-fields/iframe-fields/iframe-fields.component.scss +0 -0
  39. package/src/form-fields/iframe-fields/iframe-fields.component.spec.ts +21 -0
  40. package/src/form-fields/iframe-fields/iframe-fields.component.ts +225 -0
  41. package/src/form-fields/location-fields/location-fields.component.html +54 -0
  42. package/src/form-fields/location-fields/location-fields.component.scss +22 -0
  43. package/src/form-fields/location-fields/location-fields.component.spec.ts +21 -0
  44. package/src/form-fields/location-fields/location-fields.component.ts +83 -0
  45. package/src/form-fields/mail-fields/mail-fields.component.html +66 -0
  46. package/src/form-fields/mail-fields/mail-fields.component.scss +10 -0
  47. package/src/form-fields/mail-fields/mail-fields.component.spec.ts +21 -0
  48. package/src/form-fields/mail-fields/mail-fields.component.ts +127 -0
  49. package/src/form-fields/mobile-fields/mobile-fields.component.html +97 -0
  50. package/src/form-fields/mobile-fields/mobile-fields.component.scss +52 -0
  51. package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +21 -0
  52. package/src/form-fields/mobile-fields/mobile-fields.component.ts +310 -0
  53. package/src/form-fields/number-fields/number-fields.component.html +70 -0
  54. package/src/form-fields/number-fields/number-fields.component.scss +17 -0
  55. package/src/form-fields/number-fields/number-fields.component.spec.ts +21 -0
  56. package/src/form-fields/number-fields/number-fields.component.ts +256 -0
  57. package/src/form-fields/password-fields/password-fields.component.html +113 -0
  58. package/src/form-fields/password-fields/password-fields.component.scss +61 -0
  59. package/src/form-fields/password-fields/password-fields.component.spec.ts +21 -0
  60. package/src/form-fields/password-fields/password-fields.component.ts +273 -0
  61. package/src/form-fields/radio-button-fields/radio-button-fields.component.html +82 -0
  62. package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +28 -0
  63. package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +21 -0
  64. package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +391 -0
  65. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +67 -0
  66. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +23 -0
  67. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +21 -0
  68. package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +145 -0
  69. package/src/form-fields/section-fields/section-fields.component.html +4 -0
  70. package/src/form-fields/section-fields/section-fields.component.scss +37 -0
  71. package/src/form-fields/section-fields/section-fields.component.spec.ts +21 -0
  72. package/src/form-fields/section-fields/section-fields.component.ts +25 -0
  73. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +93 -0
  74. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +52 -0
  75. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +21 -0
  76. package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +155 -0
  77. package/src/form-fields/signature-fields/signature-fields.component.html +43 -0
  78. package/src/form-fields/signature-fields/signature-fields.component.scss +10 -0
  79. package/src/form-fields/signature-fields/signature-fields.component.spec.ts +21 -0
  80. package/src/form-fields/signature-fields/signature-fields.component.ts +25 -0
  81. package/src/form-fields/slider-fields/slider-fields.component.html +67 -0
  82. package/src/form-fields/slider-fields/slider-fields.component.scss +55 -0
  83. package/src/form-fields/slider-fields/slider-fields.component.spec.ts +21 -0
  84. package/src/form-fields/slider-fields/slider-fields.component.ts +63 -0
  85. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +52 -0
  86. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +85 -0
  87. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +21 -0
  88. package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +62 -0
  89. package/src/form-fields/text-area-fields/text-area-fields.component.html +68 -0
  90. package/src/form-fields/text-area-fields/text-area-fields.component.scss +19 -0
  91. package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +21 -0
  92. package/src/form-fields/text-area-fields/text-area-fields.component.ts +166 -0
  93. package/src/form-fields/text-fields/text-fields.component.html +67 -0
  94. package/src/form-fields/text-fields/text-fields.component.scss +26 -0
  95. package/src/form-fields/text-fields/text-fields.component.spec.ts +21 -0
  96. package/src/form-fields/text-fields/text-fields.component.ts +248 -0
  97. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +70 -0
  98. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +112 -0
  99. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +21 -0
  100. package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +74 -0
  101. package/src/form-fields/url-fields/url-fields.component.html +109 -0
  102. package/src/form-fields/url-fields/url-fields.component.scss +22 -0
  103. package/src/form-fields/url-fields/url-fields.component.spec.ts +21 -0
  104. package/src/form-fields/url-fields/url-fields.component.ts +123 -0
  105. package/src/form-submission/form-submission.module.ts +40 -0
  106. package/src/form-submission/header/header.component.html +6 -0
  107. package/src/form-submission/header/header.component.scss +26 -0
  108. package/src/form-submission/header/header.component.spec.ts +21 -0
  109. package/src/form-submission/header/header.component.ts +12 -0
  110. package/src/form-submission/navigation-tabs/navigation-tabs.component.html +134 -0
  111. package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +200 -0
  112. package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +21 -0
  113. package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +134 -0
  114. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +207 -0
  115. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +208 -0
  116. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +21 -0
  117. package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +74 -0
  118. package/src/form-submission/save-as-draft/saveDraftModalComponent .ts +60 -0
  119. package/src/form-submission/save-as-draft/saveDraftModalComponent.html +33 -0
  120. package/src/form-submission/save-as-draft/saveDraftModalComponent.scss +195 -0
  121. package/src/form-submission/submission-container/submission-container.component.html +30 -0
  122. package/src/form-submission/submission-container/submission-container.component.scss +67 -0
  123. package/src/form-submission/submission-container/submission-container.component.spec.ts +21 -0
  124. package/src/form-submission/submission-container/submission-container.component.ts +14 -0
  125. package/src/form-submission/submit-form/submit-form.component.html +76 -0
  126. package/src/form-submission/submit-form/submit-form.component.scss +88 -0
  127. package/src/form-submission/submit-form/submit-form.component.spec.ts +21 -0
  128. package/src/form-submission/submit-form/submit-form.component.ts +1953 -0
  129. package/src/lib/form-submission.component.html +15 -0
  130. package/src/lib/form-submission.component.scss +1 -0
  131. package/src/lib/form-submission.component.ts +120 -0
  132. package/src/lib/form-submission.module.ts +31 -0
  133. package/src/lib/form-submission.service.spec.ts +16 -0
  134. package/src/lib/form-submission.service.ts +9 -0
  135. package/src/models/aggregate.model.ts +4 -0
  136. package/{models/answer.model.d.ts → src/models/answer.model.ts} +25 -23
  137. package/src/models/appearance.model.ts +64 -0
  138. package/{models/attachment.model.d.ts → src/models/attachment.model.ts} +6 -6
  139. package/{models/defaultAnswerEntry.model.d.ts → src/models/defaultAnswerEntry.model.ts} +7 -5
  140. package/{models/defaultAnswersModel.model.d.ts → src/models/defaultAnswersModel.model.ts} +5 -4
  141. package/{models/defaultQuestionAnswer.model.d.ts → src/models/defaultQuestionAnswer.model.ts} +6 -6
  142. package/src/models/elementOptionAPI.model.ts +13 -0
  143. package/src/models/elementOptionAPIData.model.ts +5 -0
  144. package/src/models/elementOptionDB.model.ts +9 -0
  145. package/src/models/elementOptionDBCriteria.model.ts +7 -0
  146. package/{models/emitters.model.d.ts → src/models/emitters.model.ts} +8 -8
  147. package/{models/enum/condition.enum.d.ts → src/models/enum/condition.enum.ts} +2 -2
  148. package/src/models/enum/elementType .enum.ts +22 -0
  149. package/src/models/enum/entityType.enum.ts +10 -0
  150. package/{models/formConfiguration.model.d.ts → src/models/formConfiguration.model.ts} +2 -2
  151. package/{models/formElement.model.d.ts → src/models/formElement.model.ts} +22 -22
  152. package/{models/formElementType.model.d.ts → src/models/formElementType.model.ts} +3 -2
  153. package/{models/grid.model.d.ts → src/models/grid.model.ts} +14 -13
  154. package/{models/hiddenField.model.d.ts → src/models/hiddenField.model.ts} +5 -5
  155. package/{models/iFrameProperties.model.d.ts → src/models/iFrameProperties.model.ts} +13 -13
  156. package/src/models/logic.model.ts +11 -0
  157. package/src/models/multifields.model.ts +12 -0
  158. package/{models/option.model.d.ts → src/models/option.model.ts} +5 -5
  159. package/src/models/page.model.ts +7 -0
  160. package/src/models/publicForm.model.ts +19 -0
  161. package/src/models/question.model.ts +27 -0
  162. package/src/models/questionAnswer.model.ts +8 -0
  163. package/src/models/questionGroup.model.ts +12 -0
  164. package/src/models/response.model.ts +9 -0
  165. package/src/models/result.model.ts +5 -0
  166. package/{models/row.model.d.ts → src/models/row.model.ts} +2 -1
  167. package/src/models/scoring.model.ts +10 -0
  168. package/src/models/section.model.ts +6 -0
  169. package/src/models/subForm.model.ts +25 -0
  170. package/src/models/subformConfiguration.model.ts +4 -0
  171. package/src/models/subformPropery.model.ts +8 -0
  172. package/{models/submission.model.d.ts → src/models/submission.model.ts} +16 -14
  173. package/{models/submissionCopyConfig.mopdel.d.ts → src/models/submissionCopyConfig.mopdel.ts} +4 -4
  174. package/{models/terms&condition.model.d.ts → src/models/terms&condition.model.ts} +1 -1
  175. package/src/models/validation.model.ts +48 -0
  176. package/src/models/whenClause.model.ts +7 -0
  177. package/{models/whenClauseCondition.model.d.ts → src/models/whenClauseCondition.model.ts} +6 -6
  178. package/{models/whenClauseElements.model.d.ts → src/models/whenClauseElements.model.ts} +6 -5
  179. package/{public-api.d.ts → src/public-api.ts} +4 -0
  180. package/src/question/card-subform/card-subform.component.html +282 -0
  181. package/src/question/card-subform/card-subform.component.scss +49 -0
  182. package/src/question/card-subform/card-subform.component.spec.ts +21 -0
  183. package/src/question/card-subform/card-subform.component.ts +407 -0
  184. package/src/question/confirm-dialog/confirm-dialog.component.html +32 -0
  185. package/src/question/confirm-dialog/confirm-dialog.component.scss +109 -0
  186. package/src/question/confirm-dialog/confirm-dialog.component.spec.ts +21 -0
  187. package/src/question/confirm-dialog/confirm-dialog.component.ts +24 -0
  188. package/src/question/form-elements/form-elements.component.html +28 -0
  189. package/src/question/form-elements/form-elements.component.scss +0 -0
  190. package/src/question/form-elements/form-elements.component.spec.ts +21 -0
  191. package/src/question/form-elements/form-elements.component.ts +41 -0
  192. package/src/question/inline-multiple-subform/inline-multiple-subform.component.html +321 -0
  193. package/src/question/inline-multiple-subform/inline-multiple-subform.component.scss +78 -0
  194. package/src/question/inline-multiple-subform/inline-multiple-subform.component.spec.ts +21 -0
  195. package/src/question/inline-multiple-subform/inline-multiple-subform.component.ts +425 -0
  196. package/src/question/multifields/multifields.component.html +78 -0
  197. package/src/question/multifields/multifields.component.scss +6 -0
  198. package/src/question/multifields/multifields.component.spec.ts +21 -0
  199. package/src/question/multifields/multifields.component.ts +27 -0
  200. package/src/question/multiple-subform/multiple-subform.component.html +185 -0
  201. package/src/question/multiple-subform/multiple-subform.component.scss +52 -0
  202. package/src/question/multiple-subform/multiple-subform.component.spec.ts +21 -0
  203. package/src/question/multiple-subform/multiple-subform.component.ts +481 -0
  204. package/src/question/question/question.component.html +51 -0
  205. package/src/question/question/question.component.scss +0 -0
  206. package/src/question/question/question.component.spec.ts +21 -0
  207. package/src/question/question/question.component.ts +129 -0
  208. package/src/question/question-group/question-group.component.html +147 -0
  209. package/src/question/question-group/question-group.component.scss +36 -0
  210. package/src/question/question-group/question-group.component.spec.ts +21 -0
  211. package/src/question/question-group/question-group.component.ts +94 -0
  212. package/src/question/question.module.ts +22 -0
  213. package/src/question/recursive-logic/recursive-logic.component.html +33 -0
  214. package/src/question/recursive-logic/recursive-logic.component.scss +0 -0
  215. package/src/question/recursive-logic/recursive-logic.component.spec.ts +21 -0
  216. package/src/question/recursive-logic/recursive-logic.component.ts +29 -0
  217. package/src/question/sub-form/sub-form.component.html +254 -0
  218. package/src/question/sub-form/sub-form.component.scss +83 -0
  219. package/src/question/sub-form/sub-form.component.spec.ts +21 -0
  220. package/src/question/sub-form/sub-form.component.ts +421 -0
  221. package/src/services/aggregate.service.ts +148 -0
  222. package/src/services/countryService.ts +92 -0
  223. package/src/services/data.service.ts +36 -0
  224. package/src/services/element-tracker.service.spec.ts +16 -0
  225. package/src/services/element-tracker.service.ts +24 -0
  226. package/src/services/form-validation.service.ts +151 -0
  227. package/src/services/form.service.spec.ts +16 -0
  228. package/src/services/form.service.ts +407 -0
  229. package/src/services/mapper.service.ts +625 -0
  230. package/src/services/recaptcha.service.spec.ts +16 -0
  231. package/src/services/recaptcha.service.ts +179 -0
  232. package/src/services/score.service.ts +352 -0
  233. package/src/services/subform-copy.service.ts +148 -0
  234. package/src/services/validation.service.spec.ts +16 -0
  235. package/src/services/validation.service.ts +33 -0
  236. package/src/services/whenClause.service.ts +502 -0
  237. package/src/shared/shared.module.ts +58 -0
  238. package/src/styles/shared-style.scss +86 -0
  239. package/src/sub-form/sub-form.module.ts +24 -0
  240. package/src/sub-form/submission-modal/submission-modal.component.html +160 -0
  241. package/src/sub-form/submission-modal/submission-modal.component.scss +54 -0
  242. package/src/sub-form/submission-modal/submission-modal.component.spec.ts +21 -0
  243. package/src/sub-form/submission-modal/submission-modal.component.ts +127 -0
  244. package/tsconfig.lib.json +14 -0
  245. package/tsconfig.lib.prod.json +10 -0
  246. package/tsconfig.spec.json +14 -0
  247. package/environment/environment.d.ts +0 -5
  248. package/esm2022/environment/environment.mjs +0 -6
  249. package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +0 -146
  250. package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +0 -473
  251. package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +0 -502
  252. package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +0 -608
  253. package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +0 -585
  254. package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +0 -224
  255. package/esm2022/form-fields/form-fields.module.mjs +0 -174
  256. package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +0 -137
  257. package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +0 -198
  258. package/esm2022/form-fields/location-fields/location-fields.component.mjs +0 -85
  259. package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +0 -131
  260. package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +0 -270
  261. package/esm2022/form-fields/number-fields/number-fields.component.mjs +0 -242
  262. package/esm2022/form-fields/password-fields/password-fields.component.mjs +0 -257
  263. package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +0 -346
  264. package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +0 -148
  265. package/esm2022/form-fields/section-fields/section-fields.component.mjs +0 -29
  266. package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +0 -158
  267. package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +0 -32
  268. package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +0 -73
  269. package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +0 -66
  270. package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +0 -159
  271. package/esm2022/form-fields/text-fields/text-fields.component.mjs +0 -245
  272. package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +0 -85
  273. package/esm2022/form-fields/url-fields/url-fields.component.mjs +0 -124
  274. package/esm2022/form-submission/form-submission.module.mjs +0 -64
  275. package/esm2022/form-submission/header/header.component.mjs +0 -20
  276. package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +0 -171
  277. package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +0 -124
  278. package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +0 -50
  279. package/esm2022/form-submission/submission-container/submission-container.component.mjs +0 -17
  280. package/esm2022/form-submission/submit-form/submit-form.component.mjs +0 -1610
  281. package/esm2022/lib/form-submission.component.mjs +0 -113
  282. package/esm2022/lib/form-submission.module.mjs +0 -56
  283. package/esm2022/lib/form-submission.service.mjs +0 -14
  284. package/esm2022/models/aggregate.model.mjs +0 -2
  285. package/esm2022/models/answer.model.mjs +0 -2
  286. package/esm2022/models/appearance.model.mjs +0 -2
  287. package/esm2022/models/attachment.model.mjs +0 -2
  288. package/esm2022/models/defaultAnswerEntry.model.mjs +0 -2
  289. package/esm2022/models/defaultAnswersModel.model.mjs +0 -2
  290. package/esm2022/models/defaultQuestionAnswer.model.mjs +0 -2
  291. package/esm2022/models/elementOptionAPI.model.mjs +0 -2
  292. package/esm2022/models/elementOptionAPIData.model.mjs +0 -2
  293. package/esm2022/models/elementOptionDB.model.mjs +0 -2
  294. package/esm2022/models/elementOptionDBCriteria.model.mjs +0 -2
  295. package/esm2022/models/emitters.model.mjs +0 -2
  296. package/esm2022/models/enum/condition.enum.mjs +0 -18
  297. package/esm2022/models/enum/elementType .enum.mjs +0 -24
  298. package/esm2022/models/enum/entityType.enum.mjs +0 -12
  299. package/esm2022/models/formConfiguration.model.mjs +0 -2
  300. package/esm2022/models/formElement.model.mjs +0 -2
  301. package/esm2022/models/formElementType.model.mjs +0 -2
  302. package/esm2022/models/grid.model.mjs +0 -2
  303. package/esm2022/models/hiddenField.model.mjs +0 -2
  304. package/esm2022/models/iFrameProperties.model.mjs +0 -2
  305. package/esm2022/models/logic.model.mjs +0 -2
  306. package/esm2022/models/multifields.model.mjs +0 -2
  307. package/esm2022/models/option.model.mjs +0 -2
  308. package/esm2022/models/page.model.mjs +0 -2
  309. package/esm2022/models/publicForm.model.mjs +0 -2
  310. package/esm2022/models/question.model.mjs +0 -2
  311. package/esm2022/models/questionAnswer.model.mjs +0 -2
  312. package/esm2022/models/questionGroup.model.mjs +0 -2
  313. package/esm2022/models/row.model.mjs +0 -2
  314. package/esm2022/models/scoring.model.mjs +0 -2
  315. package/esm2022/models/section.model.mjs +0 -2
  316. package/esm2022/models/subForm.model.mjs +0 -2
  317. package/esm2022/models/subformConfiguration.model.mjs +0 -2
  318. package/esm2022/models/subformPropery.model.mjs +0 -2
  319. package/esm2022/models/submission.model.mjs +0 -2
  320. package/esm2022/models/submissionCopyConfig.mopdel.mjs +0 -2
  321. package/esm2022/models/terms&condition.model.mjs +0 -2
  322. package/esm2022/models/validation.model.mjs +0 -2
  323. package/esm2022/models/whenClause.model.mjs +0 -2
  324. package/esm2022/models/whenClauseCondition.model.mjs +0 -2
  325. package/esm2022/models/whenClauseElements.model.mjs +0 -2
  326. package/esm2022/piserve-tech-form-submission.mjs +0 -5
  327. package/esm2022/public-api.mjs +0 -7
  328. package/esm2022/question/card-subform/card-subform.component.mjs +0 -354
  329. package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +0 -27
  330. package/esm2022/question/form-elements/form-elements.component.mjs +0 -62
  331. package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +0 -384
  332. package/esm2022/question/multifields/multifields.component.mjs +0 -54
  333. package/esm2022/question/multiple-subform/multiple-subform.component.mjs +0 -413
  334. package/esm2022/question/question/question.component.mjs +0 -145
  335. package/esm2022/question/question-group/question-group.component.mjs +0 -102
  336. package/esm2022/question/recursive-logic/recursive-logic.component.mjs +0 -49
  337. package/esm2022/question/sub-form/sub-form.component.mjs +0 -355
  338. package/esm2022/services/aggregate.service.mjs +0 -139
  339. package/esm2022/services/countryService.mjs +0 -89
  340. package/esm2022/services/data.service.mjs +0 -36
  341. package/esm2022/services/element-tracker.service.mjs +0 -27
  342. package/esm2022/services/form-validation.service.mjs +0 -128
  343. package/esm2022/services/form.service.mjs +0 -332
  344. package/esm2022/services/mapper.service.mjs +0 -519
  345. package/esm2022/services/recaptcha.service.mjs +0 -136
  346. package/esm2022/services/score.service.mjs +0 -268
  347. package/esm2022/services/subform-copy.service.mjs +0 -122
  348. package/esm2022/services/validation.service.mjs +0 -35
  349. package/esm2022/services/whenClause.service.mjs +0 -423
  350. package/esm2022/shared/shared.module.mjs +0 -97
  351. package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +0 -133
  352. package/fesm2022/piserve-tech-form-submission.mjs +0 -11661
  353. package/fesm2022/piserve-tech-form-submission.mjs.map +0 -1
  354. package/form-fields/aggregate-function/aggregate-function.component.d.ts +0 -43
  355. package/form-fields/check-box-fields/check-box-fields.component.d.ts +0 -73
  356. package/form-fields/currency-fields/currency-fields.component.d.ts +0 -62
  357. package/form-fields/date-time-fields/date-time-fields.component.d.ts +0 -96
  358. package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +0 -88
  359. package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +0 -72
  360. package/form-fields/form-fields.module.d.ts +0 -40
  361. package/form-fields/hidden-field/hidden-field.component.d.ts +0 -38
  362. package/form-fields/iframe-fields/iframe-fields.component.d.ts +0 -35
  363. package/form-fields/location-fields/location-fields.component.d.ts +0 -29
  364. package/form-fields/mail-fields/mail-fields.component.d.ts +0 -41
  365. package/form-fields/mobile-fields/mobile-fields.component.d.ts +0 -71
  366. package/form-fields/number-fields/number-fields.component.d.ts +0 -53
  367. package/form-fields/password-fields/password-fields.component.d.ts +0 -57
  368. package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +0 -70
  369. package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +0 -46
  370. package/form-fields/section-fields/section-fields.component.d.ts +0 -10
  371. package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +0 -45
  372. package/form-fields/signature-fields/signature-fields.component.d.ts +0 -13
  373. package/form-fields/slider-fields/slider-fields.component.d.ts +0 -32
  374. package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +0 -26
  375. package/form-fields/text-area-fields/text-area-fields.component.d.ts +0 -49
  376. package/form-fields/text-fields/text-fields.component.d.ts +0 -49
  377. package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +0 -29
  378. package/form-fields/url-fields/url-fields.component.d.ts +0 -41
  379. package/form-submission/form-submission.module.d.ts +0 -20
  380. package/form-submission/header/header.component.d.ts +0 -7
  381. package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +0 -57
  382. package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +0 -46
  383. package/form-submission/save-as-draft/saveDraftModalComponent .d.ts +0 -17
  384. package/form-submission/submission-container/submission-container.component.d.ts +0 -7
  385. package/form-submission/submit-form/submit-form.component.d.ts +0 -237
  386. package/index.d.ts +0 -5
  387. package/lib/form-submission.component.d.ts +0 -30
  388. package/lib/form-submission.module.d.ts +0 -16
  389. package/lib/form-submission.service.d.ts +0 -6
  390. package/models/aggregate.model.d.ts +0 -4
  391. package/models/appearance.model.d.ts +0 -64
  392. package/models/elementOptionAPI.model.d.ts +0 -12
  393. package/models/elementOptionAPIData.model.d.ts +0 -5
  394. package/models/elementOptionDB.model.d.ts +0 -8
  395. package/models/elementOptionDBCriteria.model.d.ts +0 -7
  396. package/models/enum/elementType .enum.d.ts +0 -22
  397. package/models/enum/entityType.enum.d.ts +0 -10
  398. package/models/logic.model.d.ts +0 -9
  399. package/models/multifields.model.d.ts +0 -11
  400. package/models/page.model.d.ts +0 -6
  401. package/models/publicForm.model.d.ts +0 -18
  402. package/models/question.model.d.ts +0 -26
  403. package/models/questionAnswer.model.d.ts +0 -7
  404. package/models/questionGroup.model.d.ts +0 -11
  405. package/models/scoring.model.d.ts +0 -10
  406. package/models/section.model.d.ts +0 -6
  407. package/models/subForm.model.d.ts +0 -24
  408. package/models/subformConfiguration.model.d.ts +0 -4
  409. package/models/subformPropery.model.d.ts +0 -7
  410. package/models/validation.model.d.ts +0 -48
  411. package/models/whenClause.model.d.ts +0 -6
  412. package/question/card-subform/card-subform.component.d.ts +0 -44
  413. package/question/confirm-dialog/confirm-dialog.component.d.ts +0 -12
  414. package/question/form-elements/form-elements.component.d.ts +0 -20
  415. package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +0 -47
  416. package/question/multifields/multifields.component.d.ts +0 -11
  417. package/question/multiple-subform/multiple-subform.component.d.ts +0 -39
  418. package/question/question/question.component.d.ts +0 -30
  419. package/question/question-group/question-group.component.d.ts +0 -29
  420. package/question/recursive-logic/recursive-logic.component.d.ts +0 -19
  421. package/question/sub-form/sub-form.component.d.ts +0 -70
  422. package/services/aggregate.service.d.ts +0 -29
  423. package/services/countryService.d.ts +0 -21
  424. package/services/data.service.d.ts +0 -19
  425. package/services/element-tracker.service.d.ts +0 -10
  426. package/services/form-validation.service.d.ts +0 -16
  427. package/services/form.service.d.ts +0 -27
  428. package/services/mapper.service.d.ts +0 -31
  429. package/services/recaptcha.service.d.ts +0 -46
  430. package/services/score.service.d.ts +0 -27
  431. package/services/subform-copy.service.d.ts +0 -10
  432. package/services/validation.service.d.ts +0 -14
  433. package/services/whenClause.service.d.ts +0 -45
  434. package/shared/shared.module.d.ts +0 -25
  435. package/sub-form/submission-modal/submission-modal.component.d.ts +0 -31
  436. /package/{assets → src/assets}/fonts/Garamond.woff2 +0 -0
  437. /package/{assets → src/assets}/fonts/Georgia.woff2 +0 -0
  438. /package/{assets → src/assets}/fonts/Poppins.woff2 +0 -0
  439. /package/{assets → src/assets}/fonts/Tahoma.woff2 +0 -0
  440. /package/{assets → src/assets}/fonts/Tajawal.woff2 +0 -0
  441. /package/{assets → src/assets}/fonts/Verdana.woff2 +0 -0
  442. /package/{assets → src/assets}/icons/left_arrow.svg +0 -0
  443. /package/{assets → src/assets}/icons/right_arrow.svg +0 -0
@@ -1,355 +0,0 @@
1
- import { Component, EventEmitter, HostListener, Injector, Input, Output, } from '@angular/core';
2
- import { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
3
- import { MatDialogConfig } from '@angular/material/dialog';
4
- import { v4 as uuidv4 } from 'uuid';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../services/subform-copy.service";
7
- import * as i2 from "@angular/material/dialog";
8
- import * as i3 from "../../services/data.service";
9
- import * as i4 from "../../services/form.service";
10
- import * as i5 from "../../services/whenClause.service";
11
- import * as i6 from "../../services/validation.service";
12
- import * as i7 from "../../services/score.service";
13
- import * as i8 from "@angular/common";
14
- import * as i9 from "../../form-fields/check-box-fields/check-box-fields.component";
15
- import * as i10 from "../../form-fields/date-time-fields/date-time-fields.component";
16
- import * as i11 from "../../form-fields/drop-down-fields/drop-down-fields.component";
17
- import * as i12 from "../../form-fields/file-picker-fields/file-picker-fields.component";
18
- import * as i13 from "../../form-fields/location-fields/location-fields.component";
19
- import * as i14 from "../../form-fields/mail-fields/mail-fields.component";
20
- import * as i15 from "../../form-fields/mobile-fields/mobile-fields.component";
21
- import * as i16 from "../../form-fields/number-fields/number-fields.component";
22
- import * as i17 from "../../form-fields/password-fields/password-fields.component";
23
- import * as i18 from "../../form-fields/radio-button-fields/radio-button-fields.component";
24
- import * as i19 from "../../form-fields/rich-text-editor-fields/rich-text-editor-fields.component";
25
- import * as i20 from "../../form-fields/selection-matrix-fields/selection-matrix-fields.component";
26
- import * as i21 from "../../form-fields/signature-fields/signature-fields.component";
27
- import * as i22 from "../../form-fields/slider-fields/slider-fields.component";
28
- import * as i23 from "../../form-fields/terms-and-condition-fields/terms-and-condition-fields.component";
29
- import * as i24 from "../../form-fields/text-area-fields/text-area-fields.component";
30
- import * as i25 from "../../form-fields/text-fields/text-fields.component";
31
- import * as i26 from "../../form-fields/toggle-switch-fields/toggle-switch-fields.component";
32
- import * as i27 from "../../form-fields/url-fields/url-fields.component";
33
- import * as i28 from "../../form-fields/section-fields/section-fields.component";
34
- import * as i29 from "../../form-fields/aggregate-function/aggregate-function.component";
35
- import * as i30 from "../../form-fields/currency-fields/currency-fields.component";
36
- import * as i31 from "../../form-fields/hidden-field/hidden-field.component";
37
- import * as i32 from "../../form-fields/iframe-fields/iframe-fields.component";
38
- import * as i33 from "ngx-quill";
39
- import * as i34 from "@angular/forms";
40
- import * as i35 from "../multiple-subform/multiple-subform.component";
41
- import * as i36 from "../inline-multiple-subform/inline-multiple-subform.component";
42
- import * as i37 from "../card-subform/card-subform.component";
43
- export class SubFormComponent {
44
- constructor(subformCopyService, dialog, dataService, formService, whenClauseService, validationService, scoreCalcService) {
45
- this.subformCopyService = subformCopyService;
46
- this.dialog = dialog;
47
- this.dataService = dataService;
48
- this.formService = formService;
49
- this.whenClauseService = whenClauseService;
50
- this.validationService = validationService;
51
- this.scoreCalcService = scoreCalcService;
52
- this.subForm = {};
53
- this.edit = false;
54
- this.subFormChange = new EventEmitter();
55
- this.acceptedLanguage = '';
56
- this.pages = [];
57
- this.decodedDescription = '';
58
- this.childLogicCache = {};
59
- this.subformDescription = '';
60
- this.subformTitle = '';
61
- this.allowCopy = false;
62
- this.allowDelete = false;
63
- this.previousSubmissions = [];
64
- this.dataService.subform$.subscribe((data) => {
65
- this.subformData = data;
66
- this.tryLoadPreviousSubmissions();
67
- });
68
- }
69
- tryLoadPreviousSubmissions() {
70
- if (this.subformData &&
71
- this.subForm &&
72
- !this.edit &&
73
- this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions) {
74
- this.loadPreviousSubmissions();
75
- }
76
- }
77
- loadPreviousSubmissions() {
78
- if (this.subformData && Object.keys(this.subformData).length > 0 && !this.edit) {
79
- this.formService.getSubformSubmissions(this.subformData)?.subscribe({
80
- next: (response) => {
81
- this.previousSubmissions = response;
82
- const targetSubForms = this.subformData?.duplicateSubmission?.targetSubForm ?? [];
83
- if (Array.isArray(targetSubForms) &&
84
- targetSubForms.includes(this.subForm.title)) {
85
- // ✅ Filter submissions belonging to this subform
86
- const filteredSubmissions = this.previousSubmissions.filter((submission) => submission.title === this.subForm.title);
87
- const loadedSubmissions = this.createSubmissionsFromApi(filteredSubmissions, this.subForm);
88
- const existingSubmissions = this.subForm.submissions ?? [];
89
- this.subForm = {
90
- ...this.subForm,
91
- submissions: [
92
- ...existingSubmissions,
93
- ...loadedSubmissions
94
- ]
95
- };
96
- const hasAnyScore = this.subForm.submissions.some((sub) => sub.scores?.some((s) => s.score !== null && s.score !== undefined));
97
- if (hasAnyScore) {
98
- this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.subForm.submissions, this.maxPossibleGoodScore, this.maxPossibleBadScore);
99
- }
100
- else {
101
- this.subForm.scores = null;
102
- }
103
- }
104
- },
105
- error: (error) => { }
106
- });
107
- }
108
- }
109
- ngOnInit() {
110
- this.allowCopy = this.subForm.property?.allowCopy;
111
- this.allowDelete = this.subForm.property?.allowDelete;
112
- this.copySubFormdata = this.subForm?.copySubformMeta;
113
- this.tryLoadPreviousSubmissions();
114
- if (this.subForm.property.subFormStructure == 'single') {
115
- this.bindAnswersToFormElements();
116
- this.loadComponent();
117
- this.whenClauseService.addGridsFromSubform(this.subForm);
118
- }
119
- const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(this.subForm);
120
- this.maxPossibleGoodScore = goodMax;
121
- this.maxPossibleBadScore = badMax;
122
- }
123
- editorCreated(editorInstance) {
124
- this.editor = editorInstance;
125
- }
126
- async loadComponent() {
127
- this.componentToLoad = await this.loadFormElementsComponent();
128
- this.injector = this.createInjector();
129
- }
130
- async loadFormElementsComponent() {
131
- const { FormElementsComponent } = await import('../form-elements/form-elements.component');
132
- return FormElementsComponent;
133
- }
134
- createInjector() {
135
- return Injector.create({
136
- providers: [
137
- { provide: 'grid', useValue: this.grid?.element.childLogics },
138
- { provide: 'state', useValue: 'child' },
139
- ],
140
- });
141
- }
142
- decodeHtml(html) {
143
- const textArea = document.createElement('textarea');
144
- textArea.innerHTML = html;
145
- return textArea.value;
146
- }
147
- bindAnswersToFormElements() {
148
- const bindAnswers = (formElements, submissions) => {
149
- formElements?.forEach((grids) => {
150
- grids?.grid?.forEach((formElement) => {
151
- if (formElement.entityType === 'QUESTION') {
152
- const submission = submissions.find((sub) => sub.answers.some((ans) => ans.questionId === formElement.element.id));
153
- if (submission) {
154
- const answer = submission.answers.find((ans) => ans.questionId === formElement.element.id);
155
- if (answer) {
156
- formElement.element.answer = answer.answer;
157
- formElement.element.answerId = answer.answerId;
158
- formElement.element.validation = true;
159
- formElement.element.attachments = answer.attachments;
160
- formElement.element.amountInWords = answer.amountInWords;
161
- this.subForm.submissionId = submission.submissionId;
162
- formElement.element.answerCurrency = answer.answerCurrency;
163
- }
164
- }
165
- if (formElement.element.childLogics) {
166
- formElement.element.childLogics.forEach((childLogic) => {
167
- bindAnswers(childLogic.rows, submissions);
168
- });
169
- }
170
- }
171
- });
172
- });
173
- };
174
- if (this.subForm && this.subForm.rows && this.subForm.submissions) {
175
- bindAnswers(this.subForm.rows, this.subForm.submissions);
176
- }
177
- }
178
- updateSubFormWithSubmissions(event) {
179
- this.subForm = event;
180
- this.subFormChange.emit(this.subForm);
181
- }
182
- ngOnChanges() {
183
- if (this.subForm.description) {
184
- this.decodedDescription = this.decodeHtml(this.subForm.description);
185
- }
186
- }
187
- copySubform() {
188
- const { updatedPages } = this.subformCopyService.copySubform(this.subForm, this.pages);
189
- this.pages = updatedPages;
190
- // Emit updated pages or subFormChange if needed
191
- // Optionally pass meta to parent if needed
192
- // this.copyMeta.emit(copySubFormMeta);
193
- }
194
- updateSubformData(event, subformId, field) {
195
- if (this.copySubFormdata.id == subformId) {
196
- this.copySubFormdata[field] = event;
197
- }
198
- }
199
- deleteCopySubform(subformId) {
200
- const dialogConfig = new MatDialogConfig();
201
- dialogConfig.data = {
202
- messageHeader: "Are you sure?",
203
- message: "Do you want to delete this subform?"
204
- };
205
- dialogConfig.hasBackdrop = true;
206
- dialogConfig.disableClose = true;
207
- this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);
208
- this.dialogRef.afterClosed().subscribe((result) => {
209
- if (result) {
210
- // 1. Remove the copied subform from the pages
211
- for (const page of this.pages) {
212
- const rowIndex = page.rows.findIndex((row) => row.grid.some((grid) => grid.entityType === 'SUBFORM' &&
213
- grid.element?.id === subformId &&
214
- grid.element?.copied));
215
- if (rowIndex !== -1) {
216
- page.rows.splice(rowIndex, 1);
217
- break;
218
- }
219
- }
220
- // 2. Remove this subformId from any subform's copiedForms array
221
- for (const page of this.pages) {
222
- for (const row of page.rows) {
223
- for (const grid of row.grid) {
224
- if (grid.entityType === 'SUBFORM' && grid.element?.copiedForms) {
225
- const index = grid.element.copiedForms.indexOf(subformId);
226
- if (index !== -1) {
227
- grid.element.copiedForms.splice(index, 1);
228
- }
229
- }
230
- }
231
- }
232
- }
233
- }
234
- });
235
- }
236
- deleteMainSubform(subformId) {
237
- const dialogConfig = new MatDialogConfig();
238
- dialogConfig.data = {
239
- messageHeader: "Are you sure?",
240
- message: "Do you want to delete this subform?"
241
- };
242
- dialogConfig.hasBackdrop = true;
243
- dialogConfig.disableClose = true;
244
- this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);
245
- this.dialogRef.afterClosed().subscribe((result) => {
246
- if (result) {
247
- for (const page of this.pages) {
248
- for (const row of page.rows) {
249
- for (const gridItem of row.grid) {
250
- if (gridItem.entityType === 'SUBFORM' &&
251
- gridItem.element?.id === subformId) {
252
- gridItem.element.deleted = true;
253
- return; // stop after the first match
254
- }
255
- }
256
- }
257
- }
258
- }
259
- });
260
- }
261
- createSubmissionsFromApi(apiSubmissions, subform) {
262
- return apiSubmissions.map(apiSubmission => {
263
- const answers = [];
264
- subform.rows.forEach((row) => {
265
- row.grid.forEach((gridItem) => {
266
- if (gridItem.entityType !== 'QUESTION')
267
- return;
268
- const element = gridItem.element;
269
- const questionKey = element.question;
270
- if (!apiSubmission.answers || !apiSubmission.answers[questionKey]) {
271
- return;
272
- }
273
- const apiAnswer = apiSubmission.answers[questionKey];
274
- // ✅ CASE 1: File upload (array with name & url)
275
- if (Array.isArray(apiAnswer) &&
276
- apiAnswer.length &&
277
- apiAnswer[0].name &&
278
- apiAnswer[0].url) {
279
- answers.push({
280
- questionId: element.id,
281
- answer: null,
282
- attachments: apiAnswer.map((file) => ({
283
- fileId: file.id,
284
- fileName: file.name,
285
- fileUrl: file.url
286
- })),
287
- copiedAttachments: apiAnswer.map((file) => file.id)
288
- });
289
- return;
290
- }
291
- // ✅ CASE 2: Normal question object
292
- answers.push({
293
- questionId: element.id,
294
- answer: apiAnswer.answer ?? null,
295
- attachments: apiAnswer.file
296
- ? apiAnswer.file.map((file) => ({
297
- fileName: file.name,
298
- fileUrl: file.url
299
- }))
300
- : undefined,
301
- scores: apiAnswer.scores,
302
- maximumPossibleScore: apiAnswer.maximumPossibleScore
303
- });
304
- });
305
- });
306
- return {
307
- submissionId: uuidv4(),
308
- sourceSubmissionId: apiSubmission.submissionId,
309
- answers,
310
- configuration: {
311
- isDefault: false,
312
- allowDelete: true
313
- },
314
- scores: apiSubmission.score
315
- };
316
- });
317
- }
318
- get isInvalid() {
319
- return !!this.validationService.getErrorMessage(this.subForm.id);
320
- }
321
- get errorMessage() {
322
- return this.validationService.getErrorMessage(this.subForm.id);
323
- }
324
- clearInvalid() {
325
- this.validationService.clearInvalid(this.subForm.id);
326
- }
327
- onAnyClick(event) {
328
- this.clearInvalid();
329
- }
330
- ngOnDestroy() {
331
- if (this.dialogRef) {
332
- this.dialogRef.close();
333
- }
334
- }
335
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubFormComponent, deps: [{ token: i1.SubformCopyService }, { token: i2.MatDialog }, { token: i3.DataService }, { token: i4.FormService }, { token: i5.WhenClauseService }, { token: i6.ValidationService }, { token: i7.ScoreCalculationService }], target: i0.ɵɵFactoryTarget.Component }); }
336
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SubFormComponent, selector: "lib-sub-form", inputs: { subForm: "subForm", edit: "edit", acceptedLanguage: "acceptedLanguage", pages: "pages" }, outputs: { subFormChange: "subFormChange" }, host: { listeners: { "click": "onAnyClick($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"outer-container mb-4 px-3\"\n [id]=\"'question-' + subForm.id\"\n [attr.name]=\"subForm.testElementName\"\n *ngIf=\"!subForm.deleted\"\n>\n <div class=\"body py-1 px-1\">\n <div class=\"tab-content pt-4 pb-3 px-3\">\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\n <div class=\"subform-header\">\n <div class=\"data-container\">\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n </div>\n <div class=\"d-flex gap-3\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\">\n <img\n src=\"assets/icons/copy-icon.svg\"\n alt=\"copy-icon\"\n (click)=\"copySubform()\"\n *ngIf=\"allowCopy\"\n />\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon ms-3\"\n alt=\"delete icon\"\n (click)=\"deleteMainSubform(subForm.id)\"\n *ngIf=\"allowDelete\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #copySubformContainer>\n <div class=\"d-flex justify-content-end gap-4\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon\"\n alt=\"delete icon\"\n />\n </div>\n </div>\n <div class=\"copy-subform-container mb-3\">\n <p>Title</p>\n <input\n type=\"text\"\n class=\"form-control\"\n [(ngModel)]=\"subformTitle\"\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\n />\n <p class=\"mt-3\">Description</p>\n <quill-editor\n [(ngModel)]=\"subformDescription\"\n (ngModelChange)=\"\n updateSubformData($event, subForm.id, 'description')\n \"\n (onEditorCreated)=\"editorCreated($event)\"\n class=\"editor\"\n placeholder=\"\"\n ></quill-editor>\n </div>\n </ng-template>\n\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\n <lib-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'table'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-multiple-subform>\n\n <lib-inline-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'inline'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-inline-multiple-subform>\n <lib-card-subform\n *ngIf=\"subForm.property.subFormType === 'card'\"\n [subForm]=\"subForm\"\n [acceptedLanguage]=\"acceptedLanguage\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [edit]=\"edit\"\n ></lib-card-subform>\n </div>\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\n <div *ngFor=\"let row of subForm.rows\">\n <div class=\"d-flex\">\n <div\n *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n >\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"grid.element\"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"grid.element\"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"grid.element\"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"grid.element\"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [question]=\"grid.element\"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [question]=\"grid.element\"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [question]=\"grid.element\"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"grid.element\"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"grid.element\"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"grid.element\"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngSwitchCase=\"'SIGNATURE'\"\n [question]=\"grid.element\"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [question]=\"grid.element\"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"grid.element\"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"grid.element\"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"grid.element\"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [question]=\"grid.element\"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"grid.element\"\n ></lib-currency-fields>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-aggregate-function>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [question]=\"grid.element\"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\n [question]=\"grid.element\"\n ></lib-iframe-fields>\n </div>\n\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n </ng-container>\n </ng-container>\n </ng-container> -->\n <ng-container *ngIf=\"grid?.element?.childLogics\">\n <ng-container *ngIf=\"componentToLoad\">\n <ng-container\n *ngComponentOutlet=\"\n componentToLoad;\n inputs: {\n grid: grid?.element?.childLogics,\n answer: grid?.element?.answer,\n state: 'child'\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\n <lib-section-fields\n [section]=\"grid.element\"\n ></lib-section-fields>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;position:relative}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:19px;font-weight:700;margin-bottom:20px;word-break:break-word}.description{font-size:17px;font-weight:500;margin-bottom:18px;word-break:break-word}::ng-deep .description img{max-width:100%}.subform-header{display:flex;justify-content:space-between;margin-bottom:10px}.icon-container{cursor:pointer}.delete-icon{height:36px;width:36px}.finalScore{width:57px;height:52px;border-radius:6px;border:1px solid #c8c8c8;display:flex;flex-direction:column;justify-content:center;align-items:center;font-weight:500}.goodScore{border-color:#50f550}.badScore{border-color:#f08080}.scoreTitle{font-weight:400;font-size:14px;color:#2b2e3e80}.error-message{color:#f44336;font-size:1em;margin-top:4px;padding:0 8px}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i9.CheckBoxFieldsComponent, selector: "lib-check-box-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i10.DateTimeFieldsComponent, selector: "lib-date-time-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i11.DropDownFieldsComponent, selector: "lib-drop-down-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i12.FilePickerFieldsComponent, selector: "lib-file-picker-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange", "inlineDeleteFiles"] }, { kind: "component", type: i13.LocationFieldsComponent, selector: "lib-location-fields", inputs: ["question", "inLine"], outputs: ["answerChange"] }, { kind: "component", type: i14.MailFieldsComponent, selector: "lib-mail-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i15.MobileFieldsComponent, selector: "lib-mobile-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i16.NumberFieldsComponent, selector: "lib-number-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i17.PasswordFieldsComponent, selector: "lib-password-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i18.RadioButtonFieldsComponent, selector: "lib-radio-button-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i19.RichTextEditorFieldsComponent, selector: "lib-rich-text-editor-fields", inputs: ["question", "inLine", "inSubForm", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i20.SelectionMatrixFieldsComponent, selector: "lib-selection-matrix-fields", inputs: ["question", "inLine", "acceptedLanguage", "rowId", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i21.SignatureFieldsComponent, selector: "lib-signature-fields", inputs: ["question", "inLine"] }, { kind: "component", type: i22.SliderFieldsComponent, selector: "lib-slider-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i23.TermsAndConditionFieldsComponent, selector: "lib-terms-and-condition-fields", inputs: ["question", "inLine"] }, { kind: "component", type: i24.TextAreaFieldsComponent, selector: "lib-text-area-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i25.TextFieldsComponent, selector: "lib-text-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i26.ToggleSwitchFieldsComponent, selector: "lib-toggle-switch-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "acceptedLanguage", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i27.UrlFieldsComponent, selector: "lib-url-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i28.SectionFieldsComponent, selector: "lib-section-fields", inputs: ["section"] }, { kind: "component", type: i29.AggregateFunctionComponent, selector: "lib-aggregate-function", inputs: ["question", "inLine", "inCard", "submissionIndex", "rowId", "disableEdit"], outputs: ["answerChange"] }, { kind: "component", type: i30.CurrencyFieldsComponent, selector: "lib-currency-fields", inputs: ["question", "inLine", "inCard", "submissionIndex", "disableEdit", "rowId"], outputs: ["answerChange"] }, { kind: "component", type: i31.HiddenFieldComponent, selector: "lib-hidden-field", inputs: ["question", "inLine", "inCard", "submissionIndex"], outputs: ["answerChange"] }, { kind: "component", type: i32.IframeFieldsComponent, selector: "lib-iframe-fields", inputs: ["question"] }, { kind: "component", type: i33.QuillEditorComponent, selector: "quill-editor" }, { kind: "directive", type: i34.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i34.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i34.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i35.MultipleSubformComponent, selector: "lib-multiple-subform", inputs: ["subForm", "acceptedLanguage"], outputs: ["subFormChange"] }, { kind: "component", type: i36.InlineMultipleSubformComponent, selector: "lib-inline-multiple-subform", inputs: ["subForm", "acceptedLanguage"], outputs: ["subFormChange"] }, { kind: "component", type: i37.CardSubformComponent, selector: "lib-card-subform", inputs: ["subForm", "acceptedLanguage", "edit"], outputs: ["subFormChange"] }] }); }
337
- }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubFormComponent, decorators: [{
339
- type: Component,
340
- args: [{ selector: 'lib-sub-form', template: "<div\n class=\"outer-container mb-4 px-3\"\n [id]=\"'question-' + subForm.id\"\n [attr.name]=\"subForm.testElementName\"\n *ngIf=\"!subForm.deleted\"\n>\n <div class=\"body py-1 px-1\">\n <div class=\"tab-content pt-4 pb-3 px-3\">\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\n <div class=\"subform-header\">\n <div class=\"data-container\">\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n </div>\n <div class=\"d-flex gap-3\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\">\n <img\n src=\"assets/icons/copy-icon.svg\"\n alt=\"copy-icon\"\n (click)=\"copySubform()\"\n *ngIf=\"allowCopy\"\n />\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon ms-3\"\n alt=\"delete icon\"\n (click)=\"deleteMainSubform(subForm.id)\"\n *ngIf=\"allowDelete\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #copySubformContainer>\n <div class=\"d-flex justify-content-end gap-4\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon\"\n alt=\"delete icon\"\n />\n </div>\n </div>\n <div class=\"copy-subform-container mb-3\">\n <p>Title</p>\n <input\n type=\"text\"\n class=\"form-control\"\n [(ngModel)]=\"subformTitle\"\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\n />\n <p class=\"mt-3\">Description</p>\n <quill-editor\n [(ngModel)]=\"subformDescription\"\n (ngModelChange)=\"\n updateSubformData($event, subForm.id, 'description')\n \"\n (onEditorCreated)=\"editorCreated($event)\"\n class=\"editor\"\n placeholder=\"\"\n ></quill-editor>\n </div>\n </ng-template>\n\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\n <lib-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'table'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-multiple-subform>\n\n <lib-inline-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'inline'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-inline-multiple-subform>\n <lib-card-subform\n *ngIf=\"subForm.property.subFormType === 'card'\"\n [subForm]=\"subForm\"\n [acceptedLanguage]=\"acceptedLanguage\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [edit]=\"edit\"\n ></lib-card-subform>\n </div>\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\n <div *ngFor=\"let row of subForm.rows\">\n <div class=\"d-flex\">\n <div\n *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n >\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"grid.element\"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"grid.element\"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"grid.element\"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"grid.element\"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [question]=\"grid.element\"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [question]=\"grid.element\"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [question]=\"grid.element\"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"grid.element\"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"grid.element\"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"grid.element\"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngSwitchCase=\"'SIGNATURE'\"\n [question]=\"grid.element\"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [question]=\"grid.element\"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"grid.element\"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"grid.element\"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"grid.element\"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [question]=\"grid.element\"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"grid.element\"\n ></lib-currency-fields>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-aggregate-function>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [question]=\"grid.element\"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\n [question]=\"grid.element\"\n ></lib-iframe-fields>\n </div>\n\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n </ng-container>\n </ng-container>\n </ng-container> -->\n <ng-container *ngIf=\"grid?.element?.childLogics\">\n <ng-container *ngIf=\"componentToLoad\">\n <ng-container\n *ngComponentOutlet=\"\n componentToLoad;\n inputs: {\n grid: grid?.element?.childLogics,\n answer: grid?.element?.answer,\n state: 'child'\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\n <lib-section-fields\n [section]=\"grid.element\"\n ></lib-section-fields>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n</div>\n", styles: [".outer-container{background-color:#fff;position:relative}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:19px;font-weight:700;margin-bottom:20px;word-break:break-word}.description{font-size:17px;font-weight:500;margin-bottom:18px;word-break:break-word}::ng-deep .description img{max-width:100%}.subform-header{display:flex;justify-content:space-between;margin-bottom:10px}.icon-container{cursor:pointer}.delete-icon{height:36px;width:36px}.finalScore{width:57px;height:52px;border-radius:6px;border:1px solid #c8c8c8;display:flex;flex-direction:column;justify-content:center;align-items:center;font-weight:500}.goodScore{border-color:#50f550}.badScore{border-color:#f08080}.scoreTitle{font-weight:400;font-size:14px;color:#2b2e3e80}.error-message{color:#f44336;font-size:1em;margin-top:4px;padding:0 8px}\n"] }]
341
- }], ctorParameters: function () { return [{ type: i1.SubformCopyService }, { type: i2.MatDialog }, { type: i3.DataService }, { type: i4.FormService }, { type: i5.WhenClauseService }, { type: i6.ValidationService }, { type: i7.ScoreCalculationService }]; }, propDecorators: { subForm: [{
342
- type: Input
343
- }], edit: [{
344
- type: Input
345
- }], subFormChange: [{
346
- type: Output
347
- }], acceptedLanguage: [{
348
- type: Input
349
- }], pages: [{
350
- type: Input
351
- }], onAnyClick: [{
352
- type: HostListener,
353
- args: ['click', ['$event']]
354
- }] } });
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9xdWVzdGlvbi9zdWItZm9ybS9zdWItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3F1ZXN0aW9uL3N1Yi1mb3JtL3N1Yi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBR3BGLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZcEMsTUFBTSxPQUFPLGdCQUFnQjtJQXdCM0IsWUFDVSxrQkFBcUMsRUFDdEMsTUFBaUIsRUFDaEIsV0FBd0IsRUFDeEIsV0FBdUIsRUFDdkIsaUJBQW1DLEVBQ25DLGlCQUFvQyxFQUNwQyxnQkFBeUM7UUFOekMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBOUIxQyxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLFNBQUks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LE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViZm9ybUNvcHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3ViZm9ybS1jb3B5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFN1Ym1pc3Npb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvc3VibWlzc2lvbi5tb2RlbCc7XG5pbXBvcnQgeyBBbnN3ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvYW5zd2VyLm1vZGVsJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2hlbkNsYXVzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93aGVuQ2xhdXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NvcmVDYWxjdWxhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zY29yZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXN1Yi1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1Yi1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3ViLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3ViRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN1YkZvcm06IGFueSA9IHt9O1xuICBASW5wdXQoKSBlZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBzdWJGb3JtQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGFjY2VwdGVkTGFuZ3VhZ2U6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBwYWdlczogYW55W10gPSBbXTtcbiAgZGVjb2RlZERlc2NyaXB0aW9uOiBzdHJpbmcgPSAnJztcbiAgZ3JpZDogYW55O1xuICBzdGF0ZSE6IHN0cmluZztcbiAgY2hpbGRMb2dpY0NhY2hlOiB7IFtrZXk6IHN0cmluZ106IHsgY29tcG9uZW50OiBQcm9taXNlPGFueT4sIGluamVjdG9yOiBJbmplY3RvciB9IH0gPSB7fTtcbiAgY29tcG9uZW50VG9Mb2FkOiBhbnk7XG4gIGluamVjdG9yITogSW5qZWN0b3I7XG4gIGNvcHlTdWJGb3JtZGF0YTphbnk7XG4gIHN1YmZvcm1EZXNjcmlwdGlvbjpzdHJpbmcgPSAnJztcbiAgc3ViZm9ybVRpdGxlOiBzdHJpbmc9ICcnO1xuICBlZGl0b3I6IGFueTtcbiAgYWxsb3dDb3B5OiBib29sZWFuID0gZmFsc2U7XG4gIGFsbG93RGVsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgZGlhbG9nUmVmPzogTWF0RGlhbG9nUmVmPENvbmZpcm1EaWFsb2dDb21wb25lbnQ+O1xuICBzdWJmb3JtRGF0YTphbnk7XG4gIHByZXZpb3VzU3VibWlzc2lvbnM6YW55W109W107XG4gIG1heFBvc3NpYmxlR29vZFNjb3JlITogbnVtYmVyO1xuICBtYXhQb3NzaWJsZUJhZFNjb3JlITogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3ViZm9ybUNvcHlTZXJ2aWNlOlN1YmZvcm1Db3B5U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTpGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHdoZW5DbGF1c2VTZXJ2aWNlOldoZW5DbGF1c2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NvcmVDYWxjU2VydmljZTogU2NvcmVDYWxjdWxhdGlvblNlcnZpY2VcbiAgKXtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnN1YmZvcm0kLnN1YnNjcmliZSgoZGF0YSk9PntcbiAgICAgIHRoaXMuc3ViZm9ybURhdGEgPSBkYXRhO1xuICAgICAgdGhpcy50cnlMb2FkUHJldmlvdXNTdWJtaXNzaW9ucygpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHRyeUxvYWRQcmV2aW91c1N1Ym1pc3Npb25zKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3ViZm9ybURhdGEgJiZcbiAgICAgIHRoaXMuc3ViRm9ybSAmJlxuICAgICAgIXRoaXMuZWRpdCAmJlxuICAgICAgdGhpcy5zdWJGb3JtLnN1Ym1pc3Npb25Db3B5Q29uZmlnPy5hbGxvd0NvcHlGcm9tT3RoZXJTdWJtaXNzaW9uc1xuICAgICkge1xuICAgICAgdGhpcy5sb2FkUHJldmlvdXNTdWJtaXNzaW9ucygpO1xuICAgIH1cbiAgfVxuXG5cbiAgbG9hZFByZXZpb3VzU3VibWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuc3ViZm9ybURhdGEgJiYgT2JqZWN0LmtleXModGhpcy5zdWJmb3JtRGF0YSkubGVuZ3RoID4gMCAmJiAhdGhpcy5lZGl0KSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLmdldFN1YmZvcm1TdWJtaXNzaW9ucyh0aGlzLnN1YmZvcm1EYXRhKT8uc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzU3VibWlzc2lvbnMgPSByZXNwb25zZTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRTdWJGb3Jtczogc3RyaW5nW10gPVxuICAgICAgICAgICAgdGhpcy5zdWJmb3JtRGF0YT8uZHVwbGljYXRlU3VibWlzc2lvbj8udGFyZ2V0U3ViRm9ybSA/PyBbXTtcbiAgXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0YXJnZXRTdWJGb3JtcykgJiZcbiAgICAgICAgICAgIHRhcmdldFN1YkZvcm1zLmluY2x1ZGVzKHRoaXMuc3ViRm9ybS50aXRsZSlcbiAgICAgICAgICApIHtcbiAgXG4gICAgICAgICAgICAvLyDinIUgRmlsdGVyIHN1Ym1pc3Npb25zIGJlbG9uZ2luZyB0byB0aGlzIHN1YmZvcm1cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkU3VibWlzc2lvbnMgPSB0aGlzLnByZXZpb3VzU3VibWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAoc3VibWlzc2lvbjogYW55KSA9PlxuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24udGl0bGUgPT09IHRoaXMuc3ViRm9ybS50aXRsZVxuICAgICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRTdWJtaXNzaW9ucyA9IHRoaXMuY3JlYXRlU3VibWlzc2lvbnNGcm9tQXBpKFxuICAgICAgICAgICAgICBmaWx0ZXJlZFN1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICB0aGlzLnN1YkZvcm1cbiAgICAgICAgICAgICk7XG4gIFxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdWJtaXNzaW9ucyA9IHRoaXMuc3ViRm9ybS5zdWJtaXNzaW9ucyA/PyBbXTtcbiAgXG4gICAgICAgICAgICB0aGlzLnN1YkZvcm0gPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuc3ViRm9ybSxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IFtcbiAgICAgICAgICAgICAgICAuLi5leGlzdGluZ1N1Ym1pc3Npb25zLFxuICAgICAgICAgICAgICAgIC4uLmxvYWRlZFN1Ym1pc3Npb25zXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG4gIFxuICAgICAgICAgICAgY29uc3QgaGFzQW55U2NvcmUgPSB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMuc29tZSgoc3ViOiBhbnkpID0+XG4gICAgICAgICAgICAgIHN1Yi5zY29yZXM/LnNvbWUoXG4gICAgICAgICAgICAgICAgKHM6IGFueSkgPT4gcy5zY29yZSAhPT0gbnVsbCAmJiBzLnNjb3JlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgXG4gICAgICAgICAgICBpZiAoaGFzQW55U2NvcmUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdWJGb3JtLnNjb3JlcyA9IHRoaXMuc2NvcmVDYWxjU2VydmljZS5jYWxjdWxhdGVGaW5hbFNjb3JlKFxuICAgICAgICAgICAgICAgIHRoaXMuc3ViRm9ybS5zdWJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICB0aGlzLm1heFBvc3NpYmxlR29vZFNjb3JlLFxuICAgICAgICAgICAgICAgIHRoaXMubWF4UG9zc2libGVCYWRTY29yZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zdWJGb3JtLnNjb3JlcyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHt9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hbGxvd0NvcHkgPSB0aGlzLnN1YkZvcm0ucHJvcGVydHk/LmFsbG93Q29weTtcbiAgICB0aGlzLmFsbG93RGVsZXRlID0gdGhpcy5zdWJGb3JtLnByb3BlcnR5Py5hbGxvd0RlbGV0ZTtcbiAgICB0aGlzLmNvcHlTdWJGb3JtZGF0YSA9IHRoaXMuc3ViRm9ybT8uY29weVN1YmZvcm1NZXRhO1xuICAgIHRoaXMudHJ5TG9hZFByZXZpb3VzU3VibWlzc2lvbnMoKTtcbiAgICBpZiAodGhpcy5zdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuYmluZEFuc3dlcnNUb0Zvcm1FbGVtZW50cygpO1xuICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLndoZW5DbGF1c2VTZXJ2aWNlLmFkZEdyaWRzRnJvbVN1YmZvcm0odGhpcy5zdWJGb3JtKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGdvb2RNYXgsIGJhZE1heCB9ID0gdGhpcy5zY29yZUNhbGNTZXJ2aWNlLmdldE1heFBvc3NpYmxlU2NvcmUoXG4gICAgICB0aGlzLnN1YkZvcm1cbiAgICApO1xuICAgIHRoaXMubWF4UG9zc2libGVHb29kU2NvcmUgPSBnb29kTWF4O1xuICAgIHRoaXMubWF4UG9zc2libGVCYWRTY29yZSA9IGJhZE1heDtcbiAgfVxuXG4gIGVkaXRvckNyZWF0ZWQoZWRpdG9ySW5zdGFuY2U6IGFueSkge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9ySW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRDb21wb25lbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jb21wb25lbnRUb0xvYWQgPSBhd2FpdCB0aGlzLmxvYWRGb3JtRWxlbWVudHNDb21wb25lbnQoKTtcbiAgICB0aGlzLmluamVjdG9yID0gdGhpcy5jcmVhdGVJbmplY3RvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRm9ybUVsZW1lbnRzQ29tcG9uZW50KCkge1xuICAgIGNvbnN0IHsgRm9ybUVsZW1lbnRzQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2Zvcm0tZWxlbWVudHMvZm9ybS1lbGVtZW50cy5jb21wb25lbnQnKTtcbiAgICByZXR1cm4gRm9ybUVsZW1lbnRzQ29tcG9uZW50O1xuICB9XG5cbiAgY3JlYXRlSW5qZWN0b3IoKTogSW5qZWN0b3Ige1xuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogJ2dyaWQnLCB1c2VWYWx1ZTogdGhpcy5ncmlkPy5lbGVtZW50LmNoaWxkTG9naWNzICB9LFxuICAgICAgICB7IHByb3ZpZGU6ICdzdGF0ZScsIHVzZVZhbHVlOiAnY2hpbGQnIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgZGVjb2RlSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB0ZXh0QXJlYS5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXh0QXJlYS52YWx1ZTtcbiAgfVxuXG4gIGJpbmRBbnN3ZXJzVG9Gb3JtRWxlbWVudHMoKSB7XG4gICAgY29uc3QgYmluZEFuc3dlcnMgPSAoZm9ybUVsZW1lbnRzOiBhbnlbXSwgc3VibWlzc2lvbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3JtRWxlbWVudHM/LmZvckVhY2goKGdyaWRzOiBhbnkpID0+IHtcbiAgICAgICAgZ3JpZHM/LmdyaWQ/LmZvckVhY2goXG4gICAgICAgICAgKGZvcm1FbGVtZW50OiB7IGVudGl0eVR5cGU6IHN0cmluZzsgZWxlbWVudDogYW55IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1Ym1pc3Npb24gPSBzdWJtaXNzaW9ucy5maW5kKChzdWI6IHsgYW5zd2VyczogYW55W10gfSkgPT5cbiAgICAgICAgICAgICAgICBzdWIuYW5zd2Vycy5zb21lKFxuICAgICAgICAgICAgICAgICAgKGFuczogeyBxdWVzdGlvbklkOiBhbnkgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgYW5zLnF1ZXN0aW9uSWQgPT09IGZvcm1FbGVtZW50LmVsZW1lbnQuaWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1Ym1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBzdWJtaXNzaW9uLmFuc3dlcnMuZmluZChcbiAgICAgICAgICAgICAgICAgIChhbnM6IHsgcXVlc3Rpb25JZDogYW55IH0pID0+XG4gICAgICAgICAgICAgICAgICAgIGFucy5xdWVzdGlvbklkID09PSBmb3JtRWxlbWVudC5lbGVtZW50LmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFuc3dlciA9IGFuc3dlci5hbnN3ZXI7XG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFuc3dlcklkID0gYW5zd2VyLmFuc3dlcklkO1xuICAgICAgICAgICAgICAgICAgZm9ybUVsZW1lbnQuZWxlbWVudC52YWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LmVsZW1lbnQuYXR0YWNobWVudHMgPSBhbnN3ZXIuYXR0YWNobWVudHM7XG4gICAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmFtb3VudEluV29yZHMgPSBhbnN3ZXIuYW1vdW50SW5Xb3JkcztcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3ViRm9ybS5zdWJtaXNzaW9uSWQgPSBzdWJtaXNzaW9uLnN1Ym1pc3Npb25JZDtcbiAgICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LmVsZW1lbnQuYW5zd2VyQ3VycmVuY3kgPSBhbnN3ZXIuYW5zd2VyQ3VycmVuY3k7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAoY2hpbGRMb2dpYzogeyByb3dzOiBhbnlbXSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGJpbmRBbnN3ZXJzKGNoaWxkTG9naWMucm93cywgc3VibWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc3ViRm9ybSAmJiB0aGlzLnN1YkZvcm0ucm93cyAmJiB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMpIHtcbiAgICAgIGJpbmRBbnN3ZXJzKHRoaXMuc3ViRm9ybS5yb3dzLCB0aGlzLnN1YkZvcm0uc3VibWlzc2lvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc3ViRm9ybSA9IGV2ZW50O1xuICAgIHRoaXMuc3ViRm9ybUNoYW5nZS5lbWl0KHRoaXMuc3ViRm9ybSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJGb3JtLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRlY29kZWREZXNjcmlwdGlvbiA9IHRoaXMuZGVjb2RlSHRtbCh0aGlzLnN1YkZvcm0uZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlTdWJmb3JtKCkge1xuICAgIGNvbnN0IHsgdXBkYXRlZFBhZ2VzIH0gPSB0aGlzLnN1YmZvcm1Db3B5U2VydmljZS5jb3B5U3ViZm9ybSh0aGlzLnN1YkZvcm0sIHRoaXMucGFnZXMpO1xuXG4gICAgdGhpcy5wYWdlcyA9IHVwZGF0ZWRQYWdlcztcbiAgICAvLyBFbWl0IHVwZGF0ZWQgcGFnZXMgb3Igc3ViRm9ybUNoYW5nZSBpZiBuZWVkZWRcblxuICAgIC8vIE9wdGlvbmFsbHkgcGFzcyBtZXRhIHRvIHBhcmVudCBpZiBuZWVkZWRcbiAgICAvLyB0aGlzLmNvcHlNZXRhLmVtaXQoY29weVN1YkZvcm1NZXRhKTtcbiAgfVxuXG5cbiAgdXBkYXRlU3ViZm9ybURhdGEoZXZlbnQ6IGFueSwgc3ViZm9ybUlkOiBzdHJpbmcsIGZpZWxkOiAndGl0bGUnIHwgJ2Rlc2NyaXB0aW9uJykge1xuICAgIGlmKHRoaXMuY29weVN1YkZvcm1kYXRhLmlkID09IHN1YmZvcm1JZCl7XG4gICAgICB0aGlzLmNvcHlTdWJGb3JtZGF0YVtmaWVsZF0gPSBldmVudDtcbiAgICB9XG4gIH1cblxuICBkZWxldGVDb3B5U3ViZm9ybShzdWJmb3JtSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGRpYWxvZ0NvbmZpZyA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcbiAgICBkaWFsb2dDb25maWcuZGF0YSA9IHtcbiAgICAgIG1lc3NhZ2VIZWFkZXI6IFwiQXJlIHlvdSBzdXJlP1wiLFxuICAgICAgbWVzc2FnZTogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBzdWJmb3JtP1wiXG4gICAgfTtcbiAgICBkaWFsb2dDb25maWcuaGFzQmFja2Ryb3AgPSB0cnVlO1xuICAgIGRpYWxvZ0NvbmZpZy5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gMS4gUmVtb3ZlIHRoZSBjb3BpZWQgc3ViZm9ybSBmcm9tIHRoZSBwYWdlc1xuICAgICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgdGhpcy5wYWdlcykge1xuICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcGFnZS5yb3dzLmZpbmRJbmRleCgocm93OiBhbnkpID0+XG4gICAgICAgICAgICByb3cuZ3JpZC5zb21lKChncmlkOiBhbnkpID0+XG4gICAgICAgICAgICAgIGdyaWQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICAgIGdyaWQuZWxlbWVudD8uaWQgPT09IHN1YmZvcm1JZCAmJlxuICAgICAgICAgICAgICBncmlkLmVsZW1lbnQ/LmNvcGllZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocm93SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBwYWdlLnJvd3Muc3BsaWNlKHJvd0luZGV4LCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFJlbW92ZSB0aGlzIHN1YmZvcm1JZCBmcm9tIGFueSBzdWJmb3JtJ3MgY29waWVkRm9ybXMgYXJyYXlcbiAgICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHRoaXMucGFnZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZ3JpZCBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgICBpZiAoZ3JpZC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZ3JpZC5lbGVtZW50Py5jb3BpZWRGb3Jtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JpZC5lbGVtZW50LmNvcGllZEZvcm1zLmluZGV4T2Yoc3ViZm9ybUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICBncmlkLmVsZW1lbnQuY29waWVkRm9ybXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgZGVsZXRlTWFpblN1YmZvcm0oc3ViZm9ybUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XG4gICAgZGlhbG9nQ29uZmlnLmRhdGEgPSB7XG4gICAgICBtZXNzYWdlSGVhZGVyOiBcIkFyZSB5b3Ugc3VyZT9cIixcbiAgICAgIG1lc3NhZ2U6IFwiRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgc3ViZm9ybT9cIlxuICAgIH07XG4gICAgZGlhbG9nQ29uZmlnLmhhc0JhY2tkcm9wID0gdHJ1ZTtcbiAgICBkaWFsb2dDb25maWcuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcblxuICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuXG4gICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgcGFnZS5yb3dzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiZcbiAgICAgICAgICAgICAgICBncmlkSXRlbS5lbGVtZW50Py5pZCA9PT0gc3ViZm9ybUlkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdyaWRJdGVtLmVsZW1lbnQuZGVsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBzdG9wIGFmdGVyIHRoZSBmaXJzdCBtYXRjaFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVTdWJtaXNzaW9uc0Zyb21BcGkoYXBpU3VibWlzc2lvbnM6IGFueVtdLCBzdWJmb3JtOiBhbnkpOiBTdWJtaXNzaW9uW10ge1xuICAgIHJldHVybiBhcGlTdWJtaXNzaW9ucy5tYXAoYXBpU3VibWlzc2lvbiA9PiB7XG4gICAgICBjb25zdCBhbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuXG4gICAgICBzdWJmb3JtLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlICE9PSAnUVVFU1RJT04nKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZ3JpZEl0ZW0uZWxlbWVudDtcbiAgICAgICAgICBjb25zdCBxdWVzdGlvbktleSA9IGVsZW1lbnQucXVlc3Rpb247XG4gICAgICAgICAgaWYgKCFhcGlTdWJtaXNzaW9uLmFuc3dlcnMgfHwgIWFwaVN1Ym1pc3Npb24uYW5zd2Vyc1txdWVzdGlvbktleV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXBpQW5zd2VyID0gYXBpU3VibWlzc2lvbi5hbnN3ZXJzW3F1ZXN0aW9uS2V5XTtcbiAgICAgICAgICAvLyDinIUgQ0FTRSAxOiBGaWxlIHVwbG9hZCAoYXJyYXkgd2l0aCBuYW1lICYgdXJsKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXBpQW5zd2VyKSAmJlxuICAgICAgICAgICAgYXBpQW5zd2VyLmxlbmd0aCAmJlxuICAgICAgICAgICAgYXBpQW5zd2VyWzBdLm5hbWUgJiZcbiAgICAgICAgICAgIGFwaUFuc3dlclswXS51cmxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFuc3dlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgIGFuc3dlcjogbnVsbCxcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGFwaUFuc3dlci5tYXAoKGZpbGU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlVXJsOiBmaWxlLnVybFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIGNvcGllZEF0dGFjaG1lbnRzOiBhcGlBbnN3ZXIubWFwKChmaWxlOiBhbnkpID0+IGZpbGUuaWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyDinIUgQ0FTRSAyOiBOb3JtYWwgcXVlc3Rpb24gb2JqZWN0XG4gICAgICAgICAgYW5zd2Vycy5wdXNoKHtcbiAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICBhbnN3ZXI6IGFwaUFuc3dlci5hbnN3ZXIgPz8gbnVsbCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhcGlBbnN3ZXIuZmlsZVxuICAgICAgICAgICAgICA/IGFwaUFuc3dlci5maWxlLm1hcCgoZmlsZTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVVcmw6IGZpbGUudXJsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc2NvcmVzOiBhcGlBbnN3ZXIuc2NvcmVzLFxuICAgICAgICAgICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6IGFwaUFuc3dlci5tYXhpbXVtUG9zc2libGVTY29yZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWJtaXNzaW9uSWQ6IHV1aWR2NCgpLFxuICAgICAgICBzb3VyY2VTdWJtaXNzaW9uSWQ6IGFwaVN1Ym1pc3Npb24uc3VibWlzc2lvbklkLFxuICAgICAgICBhbnN3ZXJzLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBhbGxvd0RlbGV0ZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBzY29yZXM6IGFwaVN1Ym1pc3Npb24uc2NvcmVcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHRoaXMuc3ViRm9ybS5pZCk7XG4gIH1cblxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEVycm9yTWVzc2FnZSh0aGlzLnN1YkZvcm0uaWQpO1xuICB9XG5cbiAgY2xlYXJJbnZhbGlkKCl7XG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5zdWJGb3JtLmlkKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbkFueUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckludmFsaWQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuXG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwib3V0ZXItY29udGFpbmVyIG1iLTQgcHgtM1wiXG4gIFtpZF09XCIncXVlc3Rpb24tJyArIHN1YkZvcm0uaWRcIlxuICBbYXR0ci5uYW1lXT1cInN1YkZvcm0udGVzdEVsZW1lbnROYW1lXCJcbiAgKm5nSWY9XCIhc3ViRm9ybS5kZWxldGVkXCJcbj5cbiAgPGRpdiBjbGFzcz1cImJvZHkgcHktMSBweC0xXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50IHB0LTQgcGItMyBweC0zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN1YkZvcm0uY29waWVkOyBlbHNlIGNvcHlTdWJmb3JtQ29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJmb3JtLWhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzZWN0aW9uVGl0bGVcIj57eyBzdWJGb3JtLnRpdGxlIH19PC9wPlxuICAgICAgICAgICAgPHAgW2lubmVySFRNTF09XCJkZWNvZGVkRGVzY3JpcHRpb25cIiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaW5hbFNjb3JlXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHMgb2Ygc3ViRm9ybT8uc2NvcmVzXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIGdvb2RTY29yZTogcy5zY29yZVR5cGUgPT09ICdHT09EX1NDT1JFJyxcbiAgICAgICAgICAgICAgICBiYWRTY29yZTogcy5zY29yZVR5cGUgPT09ICdCQURfU0NPUkUnXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjb3JlVGl0bGVcIj5TY29yZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3sgcy5zY29yZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvY29weS1pY29uLnN2Z1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiY29weS1pY29uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weVN1YmZvcm0oKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd0NvcHlcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2RlbGV0ZS1pY29uLnN2Z1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGUtaWNvbiBtcy0zXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJkZWxldGUgaWNvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU1haW5TdWJmb3JtKHN1YkZvcm0uaWQpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFsbG93RGVsZXRlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb3B5U3ViZm9ybUNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC00XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZpbmFsU2NvcmVcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcyBvZiBzdWJGb3JtPy5zY29yZXNcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgZ29vZFNjb3JlOiBzLnNjb3JlVHlwZSA9PT0gJ0dPT0RfU0NPUkUnLFxuICAgICAgICAgICAgICAgIGJhZFNjb3JlOiBzLnNjb3JlVHlwZSA9PT0gJ0JBRF9TQ09SRSdcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2NvcmVUaXRsZVwiPlNjb3JlPC9zcGFuPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj57eyBzLnNjb3JlIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCIgKGNsaWNrKT1cImRlbGV0ZUNvcHlTdWJmb3JtKHN1YkZvcm0uaWQpXCI+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9kZWxldGUtaWNvbi5zdmdcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZS1pY29uXCJcbiAgICAgICAgICAgICAgYWx0PVwiZGVsZXRlIGljb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3B5LXN1YmZvcm0tY29udGFpbmVyIG1iLTNcIj5cbiAgICAgICAgICA8cD5UaXRsZTwvcD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3ViZm9ybVRpdGxlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVN1YmZvcm1EYXRhKCRldmVudCwgc3ViRm9ybS5pZCwgJ3RpdGxlJylcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+RGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgPHF1aWxsLWVkaXRvclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdWJmb3JtRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHVwZGF0ZVN1YmZvcm1EYXRhKCRldmVudCwgc3ViRm9ybS5pZCwgJ2Rlc2NyaXB0aW9uJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAob25FZGl0b3JDcmVhdGVkKT1cImVkaXRvckNyZWF0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImVkaXRvclwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgICAgPjwvcXVpbGwtZWRpdG9yPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT0gJ211bHRpcGxlJ1wiPlxuICAgICAgICA8bGliLW11bHRpcGxlLXN1YmZvcm1cbiAgICAgICAgICAqbmdJZj1cInN1YkZvcm0ucHJvcGVydHkuc3ViRm9ybVR5cGUgPT09ICd0YWJsZSdcIlxuICAgICAgICAgIFtzdWJGb3JtXT1cInN1YkZvcm1cIlxuICAgICAgICAgIChzdWJGb3JtQ2hhbmdlKT1cInVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoJGV2ZW50KVwiXG4gICAgICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdPVwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICAgID48L2xpYi1tdWx0aXBsZS1zdWJmb3JtPlxuXG4gICAgICAgIDxsaWItaW5saW5lLW11bHRpcGxlLXN1YmZvcm1cbiAgICAgICAgICAqbmdJZj1cInN1YkZvcm0ucHJvcGVydHkuc3ViRm9ybVR5cGUgPT09ICdpbmxpbmUnXCJcbiAgICAgICAgICBbc3ViRm9ybV09XCJzdWJGb3JtXCJcbiAgICAgICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgICAgICAgIFthY2NlcHRlZExhbmd1YWdlXT1cImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgICA+PC9saWItaW5saW5lLW11bHRpcGxlLXN1YmZvcm0+XG4gICAgICAgIDxsaWItY2FyZC1zdWJmb3JtXG4gICAgICAgICAgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1UeXBlID09PSAnY2FyZCdcIlxuICAgICAgICAgIFtzdWJGb3JtXT1cInN1YkZvcm1cIlxuICAgICAgICAgIFthY2NlcHRlZExhbmd1YWdlXT1cImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgICAgIChzdWJGb3JtQ2hhbmdlKT1cInVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoJGV2ZW50KVwiXG4gICAgICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICAgID48L2xpYi1jYXJkLXN1YmZvcm0+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzdWJGb3JtLnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT0gJ3NpbmdsZSdcIj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIHN1YkZvcm0ucm93c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyaWQgb2Ygcm93LmdyaWRcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICd3aWR0aC4lJzogZ3JpZC5lbGVtZW50LmNvdW50ICogKDEwMCAvIDEyKSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyaWQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJyAmJiBncmlkLnNob3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJncmlkLmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxsaWItY2hlY2stYm94LWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NIRUNLX0JPWCdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1jaGVjay1ib3gtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1kYXRlLXRpbWUtZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInREFURV9USU1FJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLWRhdGUtdGltZS1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLWRyb3AtZG93bi1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidEUk9QX0RPV04nXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItZHJvcC1kb3duLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItZmlsZS1waWNrZXItZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInRklMRV9QSUNLRVInXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItZmlsZS1waWNrZXItZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1sb2NhdGlvbi1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidMT0NBVElPTidcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1sb2NhdGlvbi1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLW1haWwtZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInRU1BSUwnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItbWFpbC1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLW1vYmlsZS1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidNT0JJTEUnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItbW9iaWxlLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItbnVtYmVyLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ05VTUJFUidcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cIicwJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9saWItbnVtYmVyLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItcGFzc3dvcmQtZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInUEFTU1dPUkQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICA+PC9saWItcGFzc3dvcmQtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1yYWRpby1idXR0b24tZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInUkFESU9fQlVUVE9OJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLXJhZGlvLWJ1dHRvbi1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLXJpY2gtdGV4dC1lZGl0b3ItZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInUklDSF9URVhUX0VESVRPUidcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1yaWNoLXRleHQtZWRpdG9yLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0aW9uLW1hdHJpeC1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidTRUxFQ1RJT05fTUFUUklYJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRMYW5ndWFnZV09XCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1zZWxlY3Rpb24tbWF0cml4LWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItc2lnbmF0dXJlLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1NJR05BVFVSRSdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1zaWduYXR1cmUtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi1zbGlkZXItZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInU0xJREVSJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLXNsaWRlci1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLXRlcm1zLWFuZC1jb25kaXRpb24tZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInVEVSTVNfQU5EX0NPTkRJVElPTidcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi10ZXJtcy1hbmQtY29uZGl0aW9uLWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItdGV4dC1hcmVhLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1RFWFRfQVJFQSdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi10ZXh0LWFyZWEtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi10ZXh0LWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1RFWFRfQk9YJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLXRleHQtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi10b2dnbGUtc3dpdGNoLWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1RPR0dMRV9TV0lUQ0gnXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZExhbmd1YWdlXT1cImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLXRvZ2dsZS1zd2l0Y2gtZmllbGRzPlxuICAgICAgICAgICAgICAgICAgPGxpYi11cmwtZmllbGRzXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInVVJMJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLXVybC1maWVsZHM+XG4gICAgICAgICAgICAgICAgICA8bGliLWN1cnJlbmN5LWZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NVUlJFTkNZJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLWN1cnJlbmN5LWZpZWxkcz5cbiAgICAgICAgICAgICAgICAgIDxsaWItYWdncmVnYXRlLWZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQUdHUkVHQVRFX0ZVTkNUSU9OJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiJzAnXCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1hZ2dyZWdhdGUtZnVuY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8bGliLWhpZGRlbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0hJRERFTl9GSUVMRCdcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwiZ3JpZC5lbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgID48L2xpYi1oaWRkZW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGliLWlmcmFtZS1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidJRlJBTUVfV0lER0VUJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJncmlkLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgPjwvbGliLWlmcmFtZS1maWVsZHM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3NcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb21wb25lbnRGb3JDaGlsZExvZ2ljcyhncmlkLmVsZW1lbnQuY2hpbGRMb2dpY3MsICdjaGlsZCcsIGdyaWQuZWxlbWVudC5hbnN3ZXIpIGFzIG91dGxldFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIm91dGxldC5jb21wb25lbnQgfCBhc3luYzsgaW5qZWN0b3I6IG91dGxldC5pbmplY3RvclwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JpZD8uZWxlbWVudD8uY2hpbGRMb2dpY3NcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnRUb0xvYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VG9Mb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQ6IGdyaWQ/LmVsZW1lbnQ/LmNoaWxkTG9naWNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWQ/LmVsZW1lbnQ/LmFuc3dlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdjaGlsZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyaWQuZW50aXR5VHlwZSA9PT0gJ1NFQ1RJT04nICYmIGdyaWQuc2hvd1wiPlxuICAgICAgICAgICAgICAgIDxsaWItc2VjdGlvbi1maWVsZHNcbiAgICAgICAgICAgICAgICAgIFtzZWN0aW9uXT1cImdyaWQuZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgPjwvbGliLXNlY3Rpb24tZmllbGRzPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlIG10LTRcIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==