@piserve-tech/form-submission 1.3.314 → 1.3.316

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 -351
  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 -333
  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 -11658
  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,519 +0,0 @@
1
- export function mapPublicFormToModel(apiPublicForm) {
2
- return {
3
- name: apiPublicForm.result.name,
4
- formConfiguration: mapFormConfigurationToModel(apiPublicForm.result.moduleConfiguration),
5
- currency: apiPublicForm?.result?.currency,
6
- defautlCurrency: apiPublicForm?.result?.defaultCurrency,
7
- pages: apiPublicForm.result.pages.map((apiPage) => mapPageToModel(apiPage, apiPublicForm?.result?.currency, apiPublicForm?.result?.defaultCurrency)),
8
- questionAnswers: apiPublicForm.result.questionAnswers,
9
- parentId: apiPublicForm.result.parentId,
10
- emitters: apiPublicForm.result.emittersDTOS
11
- ? apiPublicForm.result.emittersDTOS.map((emitter) => mapEmitterToModel(emitter))
12
- : [],
13
- score: apiPublicForm.score,
14
- maximumPossibleScore: apiPublicForm.maximumPossibleScore,
15
- };
16
- }
17
- export function mapEmitterToModel(apiEmitter) {
18
- return {
19
- id: apiEmitter.id,
20
- keyName: apiEmitter.keyName,
21
- valueSource: apiEmitter.valueSource,
22
- questionId: apiEmitter.questionId,
23
- inputValue: apiEmitter.inputValue,
24
- isConflict: apiEmitter.isConflict ?? false
25
- };
26
- }
27
- function mapFormConfigurationToModel(apiFormConfiguration) {
28
- return {
29
- saveAutomatically: apiFormConfiguration?.saveAutomatically,
30
- saveInterval: apiFormConfiguration?.saveInterval,
31
- customizeFont: apiFormConfiguration?.customizeFont,
32
- fontFamily: apiFormConfiguration?.fontFamily,
33
- fontSize: apiFormConfiguration?.fontSize,
34
- enableDataExport: apiFormConfiguration?.enableDataExport,
35
- fileFormats: apiFormConfiguration?.fileFormats,
36
- enableQuestionNumbering: apiFormConfiguration?.enableQuestionNumbering,
37
- questionNumbering: apiFormConfiguration?.questionNumbering,
38
- enableGoogleRecaptcha: apiFormConfiguration?.enableGoogleRecaptcha,
39
- googleRecaptchaKey: apiFormConfiguration?.googleRecaptchaKey,
40
- googleRecaptchaSecret: apiFormConfiguration?.googleRecaptchaSecret,
41
- navigation: apiFormConfiguration?.navigation,
42
- markAllQuestionsAsRequired: apiFormConfiguration?.markAllQuestionsAsRequired,
43
- };
44
- }
45
- export function mapPageToModel(apiPage, currency, defaultCurrency) {
46
- return {
47
- title: apiPage.title,
48
- testElementName: apiPage.testElementName,
49
- rows: apiPage?.rows?.map((apiRow) => mapRowToModel(apiRow, currency, defaultCurrency)),
50
- };
51
- }
52
- function mapRowToModel(apiRow, currency, defaultCurrency) {
53
- return {
54
- grid: apiRow.grid.map((apiGrid) => mapGridToModel(apiGrid, currency, defaultCurrency)),
55
- };
56
- }
57
- function mapGridToModel(apiGrid, currency, defaultCurrency) {
58
- let entity;
59
- switch (apiGrid.entityType) {
60
- case 'QUESTION':
61
- entity = mapQuestionToModel(apiGrid.element, currency, defaultCurrency);
62
- break;
63
- case 'SECTION':
64
- entity = mapSectionToModel(apiGrid.element);
65
- break;
66
- case 'SUBFORM':
67
- entity = mapSubFormToModel(apiGrid.element, currency, defaultCurrency);
68
- break;
69
- case 'QUESTION_GROUP':
70
- entity = mapQuestionGroupToModel(apiGrid.element, currency, defaultCurrency);
71
- break;
72
- case 'MULTIFIELD':
73
- entity = mapMultifieldsToModel(apiGrid.element, currency, defaultCurrency);
74
- break;
75
- default:
76
- throw new Error(`Unknown entity type: ${apiGrid.entityType}`);
77
- }
78
- const whenClause = mapWhenClauseModel(apiGrid.whenClauseDTO);
79
- // read actions safely
80
- const actions = Array.isArray(whenClause?.whenClauseActions)
81
- ? whenClause.whenClauseActions
82
- : [];
83
- // pick last action if multiple (your UI prevents that but safe handling)
84
- const action = actions.length > 0 ? actions[actions.length - 1] : undefined;
85
- let shouldShow = true; // default visible
86
- if (action === 'SHOW') {
87
- shouldShow = false; // default hidden when action = SHOW
88
- }
89
- if (action === 'HIDE') {
90
- shouldShow = true; // default shown when action = HIDE
91
- }
92
- return {
93
- entityType: apiGrid.entityType,
94
- element: entity,
95
- whenClause: whenClause,
96
- show: shouldShow
97
- };
98
- }
99
- export function mapWhenClauseModel(whenClauseDTO) {
100
- // 🧩 Guard: Handle undefined/null or malformed data
101
- if (!whenClauseDTO || !Array.isArray(whenClauseDTO.whenClauseCondition)) {
102
- return {
103
- activate: false,
104
- whenClauseCondition: [],
105
- whenClauseActions: []
106
- };
107
- }
108
- return {
109
- activate: !!whenClauseDTO.activate,
110
- whenClauseActions: whenClauseDTO.whenClauseActions || [],
111
- whenClauseCondition: whenClauseDTO.whenClauseCondition.map((condition) => ({
112
- logic: condition.logic || '',
113
- questionid: condition.questionid || '',
114
- condition: condition.condition || '',
115
- value: condition.value ?? '' // handle null/undefined gracefully
116
- }))
117
- };
118
- }
119
- export function mapSectionToModel(apiSection) {
120
- return {
121
- id: apiSection.id,
122
- title: apiSection.title,
123
- description: apiSection.description,
124
- testElementName: apiSection.testElementName
125
- };
126
- }
127
- export function mapQuestionToModel(apiQuestion, currency, defaultCurrency) {
128
- return {
129
- count: apiQuestion.count,
130
- id: apiQuestion.id,
131
- questionNumber: apiQuestion.questionNumber,
132
- required: apiQuestion.required,
133
- hint: apiQuestion.hint,
134
- question: apiQuestion.question,
135
- testElementName: apiQuestion.testElementName,
136
- answer: apiQuestion?.answer,
137
- validation: true,
138
- formElement: mapFormElementToModel(apiQuestion.formElement, currency, defaultCurrency),
139
- childLogics: apiQuestion?.childLogics?.map((logic) => mapLogicToModel(logic, currency, defaultCurrency)),
140
- answerId: apiQuestion?.answerId,
141
- attachments: apiQuestion?.attachments?.map((attachment) => mapAttachmentToModel(attachment)) || [],
142
- deleteFiles: [],
143
- defaultValue: apiQuestion?.defaultValue,
144
- disableEdit: apiQuestion?.disableEdit,
145
- score: apiQuestion.score,
146
- maximumPossibleScore: apiQuestion.maximumPossibleScore,
147
- amountInWords: apiQuestion?.amountInWords,
148
- answerCurrency: apiQuestion?.currencySymbol
149
- };
150
- }
151
- function mapAttachmentToModel(apiAttachment) {
152
- return {
153
- fileId: apiAttachment.fileId,
154
- fileName: apiAttachment.fileName,
155
- fileUrl: apiAttachment.fileUrl,
156
- fileSize: apiAttachment?.fileSize
157
- };
158
- }
159
- function mapFormElementToModel(apiFormElement, currency, defaultCurrency) {
160
- return {
161
- elementType: apiFormElement.elementType,
162
- appearance: mapAppearanceToModel(apiFormElement.appearance, currency, defaultCurrency),
163
- validation: mapValidationToModel(apiFormElement.validation),
164
- option: mapOptionToModel(apiFormElement?.option),
165
- aggregateFunction: mapAggregateFunction(apiFormElement?.aggregateFunction),
166
- selectionMatrixLabel: apiFormElement.selectionMatrixLabel,
167
- selectionMatrixColumn: apiFormElement.selectionMatrixColumn,
168
- termsAndConditionType: maptermsAndCondition(apiFormElement),
169
- scoring: mapScoringToModel(apiFormElement.scoring),
170
- hiddenField: mapHiddenFieldToModel(apiFormElement?.hiddenField),
171
- iFrameProperties: mapIframeProperties(apiFormElement?.iFrameProperties)
172
- };
173
- }
174
- function mapIframeProperties(iFrameProperties) {
175
- return {
176
- contentType: iFrameProperties?.contentType,
177
- url: iFrameProperties?.url,
178
- html: iFrameProperties?.html,
179
- style: iFrameProperties?.style,
180
- script: iFrameProperties?.script
181
- };
182
- }
183
- function mapHiddenFieldToModel(hiddenField) {
184
- return {
185
- value: hiddenField?.value,
186
- valueSource: hiddenField?.valueSource,
187
- key: hiddenField?.key
188
- };
189
- }
190
- function mapAggregateFunction(aggregateFunction) {
191
- if (!aggregateFunction) {
192
- return undefined;
193
- }
194
- return {
195
- aggregateOperation: aggregateFunction.aggregateOperation,
196
- formula: aggregateFunction.formula
197
- };
198
- }
199
- function maptermsAndCondition(Element) {
200
- if (Element.termsAndCondition != undefined) {
201
- let data = Element.termsAndCondition;
202
- return {
203
- termsAndConditionType: data.termsAndConditionType,
204
- fileUrl: data.fileUrl,
205
- fileName: data.fileName,
206
- };
207
- }
208
- else {
209
- return {
210
- termsAndConditionType: '',
211
- fileUrl: '',
212
- fileName: '',
213
- };
214
- }
215
- }
216
- function mapLogicToModel(apiLogic, currency, defaultCurrency) {
217
- return {
218
- id: apiLogic.id,
219
- inputValue: apiLogic.inputValue,
220
- condition: apiLogic.condition,
221
- showLogic: false,
222
- rows: apiLogic?.rows?.map((element) => mapRowToModel(element, currency, defaultCurrency)),
223
- };
224
- }
225
- export function mapSubFormToModel(apiSubForm, currency, defaultCurrency) {
226
- return {
227
- id: apiSubForm.id,
228
- count: apiSubForm.count,
229
- title: apiSubForm.title,
230
- description: apiSubForm.description,
231
- testElementName: apiSubForm.testElementName,
232
- rows: apiSubForm.rows.map((element) => mapRowToModel(element, currency, defaultCurrency)),
233
- submissions: apiSubForm?.submissions?.map((submission) => mapSubmissionToModel(submission)),
234
- property: apiSubForm.property ? mapPropertyToModel(apiSubForm.property) : undefined,
235
- defaultAnswers: apiSubForm.defaultAnswers ? mapDefaultAnswersToModel(apiSubForm.defaultAnswers) : undefined,
236
- deleted: false,
237
- scores: apiSubForm.scores,
238
- maximumPossibleScore: apiSubForm.maximumPossibleScore,
239
- submissionCopyConfig: mapSubmissionCopyConfig(apiSubForm.submissionCopyConfig),
240
- required: apiSubForm.required
241
- };
242
- }
243
- export function mapSubmissionCopyConfig(copyConfig) {
244
- if (!copyConfig)
245
- return undefined;
246
- return {
247
- allowCopyFromOtherSubmissions: copyConfig.allowCopyFromOtherSubmissions,
248
- editableQuestions: copyConfig.editableQuestions,
249
- };
250
- }
251
- export function mapDefaultAnswersToModel(apiDefaultAnswers) {
252
- return {
253
- answers: apiDefaultAnswers.answers.map((entry) => mapDefaultAnswerEntry(entry))
254
- };
255
- }
256
- export function mapDefaultAnswerEntry(apiEntry) {
257
- return {
258
- isDeleteEnable: apiEntry.isDeleteEnable,
259
- defaultQuestionsAnswers: apiEntry.defaultQuestionsAnswers.map((question) => mapDefaultQuestionAnswer(question))
260
- };
261
- }
262
- export function mapDefaultQuestionAnswer(apiQuestion) {
263
- return {
264
- defaultAnswer: apiQuestion.defaultAnswer,
265
- readOnly: apiQuestion.readOnly,
266
- isDeleteEnable: apiQuestion.isDeleteEnable,
267
- questionId: apiQuestion.questionId
268
- };
269
- }
270
- function mapPropertyToModel(apiProperty) {
271
- return {
272
- subFormStructure: apiProperty.subFormStructure,
273
- subFormType: apiProperty.subFormType,
274
- allowDelete: apiProperty.allowDelete,
275
- allowCopy: apiProperty.allowCopy,
276
- addButtonLabel: apiProperty.addButtonLabel
277
- };
278
- }
279
- export function mapQuestionGroupToModel(apiQuestionGroup, currency, defaultCurrency) {
280
- return {
281
- id: apiQuestionGroup.id,
282
- count: apiQuestionGroup.count,
283
- title: apiQuestionGroup.title,
284
- description: apiQuestionGroup.description,
285
- testElementName: apiQuestionGroup.testElementName,
286
- rows: apiQuestionGroup.rows.map((element) => mapRowToModel(element, currency, defaultCurrency)),
287
- submissions: apiQuestionGroup?.submissions?.map((submission) => mapSubmissionToModel(submission)),
288
- };
289
- }
290
- export function mapMultifieldsToModel(apiQuestionGroup, currency, defaultCurrency) {
291
- return {
292
- id: apiQuestionGroup.id,
293
- question: apiQuestionGroup.question,
294
- questionNumber: apiQuestionGroup.questionNumber,
295
- count: apiQuestionGroup.count,
296
- testElementName: apiQuestionGroup.testElementName,
297
- rows: apiQuestionGroup.rows.map((element) => mapRowToModel(element, currency, defaultCurrency)),
298
- submissions: apiQuestionGroup?.submissions?.map((submission) => mapSubmissionToModel(submission)),
299
- };
300
- }
301
- function mapSubmissionToModel(apiSubmission) {
302
- return {
303
- submissionId: apiSubmission?.submissionId,
304
- answers: apiSubmission?.answers?.map((answer) => mapAnswerToModel(answer)),
305
- configuration: mapSubformConfiguration(apiSubmission?.configuration),
306
- scores: apiSubmission.scores,
307
- sourceSubmissionId: apiSubmission.sourceSubmissionId,
308
- isCopied: apiSubmission.isCopied
309
- };
310
- }
311
- function mapAnswerToModel(apiAnswer) {
312
- return {
313
- questionId: apiAnswer.questionId,
314
- answer: apiAnswer?.answer,
315
- answerId: apiAnswer?.answerId,
316
- attachments: apiAnswer?.attachments?.map((attachment) => mapAttachmentToModel(attachment)),
317
- scores: apiAnswer.scores,
318
- maximumPossibleScore: apiAnswer.maximumPossibleScore,
319
- show: apiAnswer?.show,
320
- amountInWords: apiAnswer?.amountInWords,
321
- answerCurrency: apiAnswer?.currencySymbol
322
- };
323
- }
324
- function mapSubformConfiguration(config) {
325
- if (!config)
326
- return undefined;
327
- return {
328
- allowDelete: !!config.allowDelete,
329
- isDefault: !!config.isDefault,
330
- };
331
- }
332
- export function mapFormElementTypeToModel(apiFormElementType) {
333
- return {
334
- entityType: apiFormElementType?.entityType,
335
- element: apiFormElementType?.element,
336
- };
337
- }
338
- function mapAppearanceToModel(apiAppearance, currency, defaultCurrency) {
339
- return {
340
- placeholder: apiAppearance?.placeholder,
341
- fontSize: apiAppearance?.fontSize,
342
- textAlign: apiAppearance?.textAlign,
343
- font: apiAppearance?.font,
344
- underline: apiAppearance?.underline,
345
- bold: apiAppearance?.bold,
346
- italics: apiAppearance?.italics,
347
- defaultValue: apiAppearance?.defaultValue,
348
- numberOfRows: apiAppearance?.numberOfRows,
349
- singleSelection: apiAppearance?.singleSelection,
350
- displayCountryCode: apiAppearance?.displayCountryCode,
351
- displayFlag: apiAppearance?.displayFlag,
352
- displayCode: apiAppearance?.displayCode,
353
- showCountryName: apiAppearance?.showCountryName,
354
- beautifyNumbers: apiAppearance?.beautifyNumbers,
355
- upAndDownButton: apiAppearance?.upAndDownButton,
356
- allowNegativeValues: apiAppearance?.allowNegativeValues,
357
- showPreviewButton: apiAppearance?.showPreviewButton,
358
- confirmPassword: apiAppearance?.confirmPassword,
359
- viewButton: apiAppearance?.viewButton,
360
- displayStrong: apiAppearance?.displayStrong,
361
- dateType: apiAppearance?.dateType,
362
- format: apiAppearance?.format,
363
- setCurrentPosition: apiAppearance?.setCurrentPosition,
364
- defaultZoomLevel: apiAppearance?.defaultZoomLevel,
365
- allowFullScreen: apiAppearance?.allowFullScreen,
366
- latitude: apiAppearance?.latitude,
367
- longitude: apiAppearance?.longitude,
368
- showAcceptButton: apiAppearance?.showAcceptButton,
369
- labelOnValue: apiAppearance?.labelOnValue,
370
- labelOffValue: apiAppearance?.labelOffValue,
371
- labelOnColor: apiAppearance?.labelOnColor,
372
- labelOffColor: apiAppearance?.labelOffColor,
373
- minValue: apiAppearance?.minValue,
374
- maxValue: apiAppearance?.maxValue,
375
- stepValue: apiAppearance?.stepValue,
376
- changeSliderColor: apiAppearance?.changeSliderColor,
377
- sliderColor: apiAppearance?.sliderColor,
378
- canvasOption: apiAppearance?.canvasOption,
379
- selectionType: apiAppearance?.selectionType,
380
- dragAndDrop: apiAppearance?.dragAndDrop,
381
- previewUploadedFiles: apiAppearance?.previewUploadedFiles,
382
- multiFileUploads: apiAppearance?.multiFileUploads,
383
- selectionColorRequired: apiAppearance?.selectionColorRequired,
384
- selectionColor: apiAppearance?.selectionColor,
385
- color: apiAppearance?.color,
386
- avatarPicker: apiAppearance?.avatarPicker,
387
- timeFormat: apiAppearance?.timeFormat,
388
- displayOptionsInColumn: apiAppearance?.displayOptionsInColumn,
389
- currencySymbol: apiAppearance?.currencySymbol,
390
- decimalPrecision: apiAppearance?.decimalPrecision,
391
- symbolPosition: apiAppearance?.symbolPosition,
392
- thousandSeparator: apiAppearance?.thousandSeparator,
393
- currency: currency,
394
- limitCurrencies: apiAppearance?.limitCurrencies,
395
- currencyOption: apiAppearance?.currencyOption,
396
- specificCurrencySymbol: apiAppearance?.specificCurrencySymbol,
397
- limitCurrencySymbol: apiAppearance?.limitCurrencySymbol,
398
- width: apiAppearance?.width,
399
- height: apiAppearance?.height,
400
- showAmountInWords: apiAppearance?.showAmountInWords,
401
- defaultCurrency: defaultCurrency
402
- };
403
- }
404
- function mapValidationToModel(apiValidation) {
405
- return {
406
- regexValidation: apiValidation?.regexValidation,
407
- regex: apiValidation?.regex,
408
- validationMessage: apiValidation?.validationMessage,
409
- limitedCharacters: apiValidation?.limitedCharacters,
410
- count: apiValidation?.count,
411
- minimumSelection: apiValidation?.minimumSelection,
412
- maximumSelection: apiValidation?.maximumSelection,
413
- countryWiseValidation: apiValidation?.countryWiseValidation,
414
- restrictCountry: apiValidation?.restrictCountry,
415
- allowedCountries: apiValidation?.allowedCountries,
416
- blockedCountries: apiValidation?.blockedCountries,
417
- regularExpression: apiValidation?.regularExpression,
418
- expectedDomains: apiValidation?.expectedDomains,
419
- min: apiValidation?.min,
420
- max: apiValidation?.max,
421
- minLength: apiValidation?.minLength,
422
- maxLength: apiValidation?.maxLength,
423
- requireLowercaseLetters: apiValidation?.requireLowercaseLetters,
424
- requireUppercaseLetters: apiValidation?.requireUppercaseLetters,
425
- requireNumbers: apiValidation?.requireNumbers,
426
- requireSpecialCharacters: apiValidation?.requireSpecialCharacters,
427
- allowedSpecialCharacters: apiValidation?.allowedSpecialCharacters,
428
- minDateOption: apiValidation?.minDateOption,
429
- minDate: apiValidation?.minDate,
430
- maxDateOption: apiValidation?.maxDateOption,
431
- maxDate: apiValidation?.maxDate,
432
- regionBoundary: apiValidation?.regionBoundary,
433
- region: apiValidation?.region,
434
- preventFromProceedingWithoutAgree: apiValidation?.preventFromProceedingWithoutAgree,
435
- buttonColour: apiValidation?.buttonColour,
436
- maxFileSize: apiValidation?.maxFileSize,
437
- minFileSize: apiValidation?.minFileSize,
438
- minSelection: apiValidation?.minSelection,
439
- maxSelection: apiValidation?.maxSelection,
440
- fileTypes: apiValidation?.fileTypes,
441
- fileSize: apiValidation?.fileSize,
442
- fileSizeUnit: apiValidation?.fileSizeUnit,
443
- totalFileSize: apiValidation?.totalFileSize,
444
- minSelectionRequired: apiValidation?.minSelectionRequired,
445
- minSelectionValue: apiValidation?.minSelectionValue,
446
- validationType: apiValidation?.validationType,
447
- validation: apiValidation?.validation,
448
- minTime: apiValidation?.minTime,
449
- maxTime: apiValidation?.maxTime,
450
- minTimeOption: apiValidation?.minTimeOption,
451
- maxTimeOption: apiValidation?.maxTimeOption,
452
- };
453
- }
454
- function mapElementOptionDBToModel(apiElementOptionDB) {
455
- return {
456
- tableName: apiElementOptionDB.tableName,
457
- valueField: apiElementOptionDB.valueField,
458
- labelField: apiElementOptionDB.labelField,
459
- labelPattern: apiElementOptionDB.labelPattern,
460
- criteria: apiElementOptionDB?.criteria.map((apiCriteria) => mapElementOptionDBCriteriaToModel(apiCriteria)),
461
- };
462
- }
463
- function mapElementOptionDBCriteriaToModel(apiElementOptionDBCriteria) {
464
- return {
465
- field: apiElementOptionDBCriteria?.field,
466
- condition: apiElementOptionDBCriteria?.condition,
467
- valueSource: apiElementOptionDBCriteria?.valueSource,
468
- inputValue: apiElementOptionDBCriteria?.inputValue,
469
- logicalOperator: apiElementOptionDBCriteria?.logicalOperator,
470
- };
471
- }
472
- function mapElementOptionAPIToModel(apiElementOptionAPI) {
473
- return {
474
- external: apiElementOptionAPI?.external,
475
- url: apiElementOptionAPI?.url,
476
- valueField: apiElementOptionAPI?.valueField,
477
- labelField: apiElementOptionAPI?.labelField,
478
- pathToValue: apiElementOptionAPI?.pathToValue,
479
- headers: apiElementOptionAPI?.headers?.map(mapElementOptionAPIDataToModel),
480
- params: apiElementOptionAPI?.params?.map(mapElementOptionAPIDataToModel),
481
- pathVariables: apiElementOptionAPI?.pathVariables?.map(mapElementOptionAPIDataToModel),
482
- labelPattern: apiElementOptionAPI?.labelPattern
483
- };
484
- }
485
- function mapElementOptionAPIDataToModel(apiElementOptionAPIData) {
486
- return {
487
- keyName: apiElementOptionAPIData?.keyName,
488
- valueSource: apiElementOptionAPIData?.valueSource,
489
- inputValue: apiElementOptionAPIData?.inputValue,
490
- };
491
- }
492
- function mapOptionToModel(apiOption) {
493
- return {
494
- optionType: apiOption?.optionType,
495
- lookupTable: apiOption?.lookupTable,
496
- customOptions: apiOption?.customOptions?.map((option) => ({
497
- value: option.value,
498
- })),
499
- database: apiOption?.database
500
- ? mapElementOptionDBToModel(apiOption?.database)
501
- : undefined,
502
- api: apiOption?.api ? mapElementOptionAPIToModel(apiOption.api) : undefined,
503
- };
504
- }
505
- function mapScoringToModel(apiScoring) {
506
- if (!apiScoring)
507
- return undefined;
508
- return {
509
- enableScoring: apiScoring.enableScoring,
510
- defaultScore: apiScoring.defaultScore,
511
- enableScoringType: apiScoring.enableScoringType,
512
- score: apiScoring.score?.map((s) => ({
513
- label: s.label || [],
514
- score: s.score,
515
- scoreType: s.scoreType
516
- }))
517
- };
518
- }
519
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL21hcHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFDQSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsYUFBa0I7SUFDckQsT0FBTztRQUNMLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDL0IsaUJBQWlCLEVBQUUsMkJBQTJCLENBQzVDLGFBQWEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQ3pDO1FBQ0QsUUFBUSxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsUUFBUTtRQUN4QyxlQUFlLEVBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxlQUFlO1FBQ3RELEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNyRCxjQUFjLENBQUMsT0FBTyxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQy9GO1FBQ0QsZUFBZSxFQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsZUFBZTtRQUNwRCxRQUFRLEVBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1FBQ3RDLFFBQVEsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDekMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckYsQ0FBQyxDQUFDLEVBQUU7UUFDTixLQUFLLEVBQUMsYUFBYSxDQUFDLEtBQUs7UUFDekIsb0JBQW9CLEVBQUMsYUFBYSxDQUFDLG9CQUFvQjtLQUN4RCxDQUFDO0FBQ0osQ0FBQztBQUdE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LFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1lBQ2QsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztLQUNKLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwZWFyYW5jZSB9IGZyb20gJy4uL21vZGVscy9hcHBlYXJhbmNlLm1vZGVsJztcbmltcG9ydCB7IEVsZW1lbnRPcHRpb25BUEkgfSBmcm9tICcuLi9tb2RlbHMvZWxlbWVudE9wdGlvbkFQSS5tb2RlbCc7XG5pbXBvcnQgeyBlbGVtZW50T3B0aW9uQVBJRGF0YSB9IGZyb20gJy4uL21vZGVscy9lbGVtZW50T3B0aW9uQVBJRGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBFbGVtZW50T3B0aW9uREIgfSBmcm9tICcuLi9tb2RlbHMvZWxlbWVudE9wdGlvbkRCLm1vZGVsJztcbmltcG9ydCB7IEVsZW1lbnRPcHRpb25EQkNyaXRlcmlhIH0gZnJvbSAnLi4vbW9kZWxzL2VsZW1lbnRPcHRpb25EQkNyaXRlcmlhLm1vZGVsJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm1FbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEdyaWQgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2UubW9kZWwnO1xuaW1wb3J0IHsgUHVibGljRm9ybSB9IGZyb20gJy4uL21vZGVscy9wdWJsaWNGb3JtLm1vZGVsJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL3F1ZXN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uL21vZGVscy9yb3cubW9kZWwnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uL21vZGVscy92YWxpZGF0aW9uLm1vZGVsJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9vcHRpb24ubW9kZWwnO1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uL21vZGVscy9zZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFN1YkZvcm0gfSBmcm9tICcuLi9tb2RlbHMvc3ViRm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtRWxlbWVudFR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZm9ybUVsZW1lbnRUeXBlLm1vZGVsJztcbmltcG9ydCB7IExvZ2ljIH0gZnJvbSAnLi4vbW9kZWxzL2xvZ2ljLm1vZGVsJztcbmltcG9ydCB7IEF0dGFjaG1lbnQgfSBmcm9tICcuLi9tb2RlbHMvYXR0YWNobWVudC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3N1Ym1pc3Npb24ubW9kZWwnO1xuaW1wb3J0IHsgQW5zd2VyIH0gZnJvbSAnLi4vbW9kZWxzL2Fuc3dlci5tb2RlbCc7XG5pbXBvcnQgeyB0ZXJtc0FuZENvbmRpdGlvblR5cGUgfSBmcm9tICcuLi9tb2RlbHMvdGVybXMmY29uZGl0aW9uLm1vZGVsJztcbmltcG9ydCB7IEZvcm1Db25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm1Db25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IFF1ZXN0aW9uR3JvdXAgfSBmcm9tICcuLi9tb2RlbHMvcXVlc3Rpb25Hcm91cC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJmb3JtUHJvcGVydHkgfSBmcm9tICcuLi9tb2RlbHMvc3ViZm9ybVByb3BlcnkubW9kZWwnO1xuaW1wb3J0IHsgTXVsdGlmaWVsZHMgfSBmcm9tICcuLi9tb2RlbHMvbXVsdGlmaWVsZHMubW9kZWwnO1xuaW1wb3J0IHsgQWdncmVnYXRlRnVuY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvYWdncmVnYXRlLm1vZGVsJztcbmltcG9ydCB7IERlZmF1bHRBbnN3ZXJzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZGVmYXVsdEFuc3dlcnNNb2RlbC5tb2RlbCc7XG5pbXBvcnQgeyBEZWZhdWx0QW5zd2VyRW50cnkgfSBmcm9tICcuLi9tb2RlbHMvZGVmYXVsdEFuc3dlckVudHJ5Lm1vZGVsJztcbmltcG9ydCB7IERlZmF1bHRRdWVzdGlvbkFuc3dlciB9IGZyb20gJy4uL21vZGVscy9kZWZhdWx0UXVlc3Rpb25BbnN3ZXIubW9kZWwnO1xuaW1wb3J0IHsgU3ViZm9ybUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvc3ViZm9ybUNvbmZpZ3VyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRW1pdHRlckRUTyB9IGZyb20gJy4uL21vZGVscy9lbWl0dGVycy5tb2RlbCc7XG5pbXBvcnQgeyBhZGQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Nocm9ub3MnO1xuaW1wb3J0IHsgU2NvcmluZyB9IGZyb20gJy4uL21vZGVscy9zY29yaW5nLm1vZGVsJztcbmltcG9ydCB7IEhpZGRlbkZpZWxkIH0gZnJvbSAnLi4vbW9kZWxzL2hpZGRlbkZpZWxkLm1vZGVsJztcbmltcG9ydCB7IElGcmFtZVByb3BlcnRpZXMgfSBmcm9tICcuLi9tb2RlbHMvaUZyYW1lUHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBTdWJtaXNzaW9uQ29weUNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9zdWJtaXNzaW9uQ29weUNvbmZpZy5tb3BkZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFwUHVibGljRm9ybVRvTW9kZWwoYXBpUHVibGljRm9ybTogYW55KTogUHVibGljRm9ybSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogYXBpUHVibGljRm9ybS5yZXN1bHQubmFtZSxcbiAgICBmb3JtQ29uZmlndXJhdGlvbjogbWFwRm9ybUNvbmZpZ3VyYXRpb25Ub01vZGVsKFxuICAgICAgYXBpUHVibGljRm9ybS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvblxuICAgICksXG4gICAgY3VycmVuY3k6YXBpUHVibGljRm9ybT8ucmVzdWx0Py5jdXJyZW5jeSxcbiAgICBkZWZhdXRsQ3VycmVuY3k6YXBpUHVibGljRm9ybT8ucmVzdWx0Py5kZWZhdWx0Q3VycmVuY3ksXG4gICAgcGFnZXM6IGFwaVB1YmxpY0Zvcm0ucmVzdWx0LnBhZ2VzLm1hcCgoYXBpUGFnZTogYW55KSA9PlxuICAgICAgbWFwUGFnZVRvTW9kZWwoYXBpUGFnZSxhcGlQdWJsaWNGb3JtPy5yZXN1bHQ/LmN1cnJlbmN5LGFwaVB1YmxpY0Zvcm0/LnJlc3VsdD8uZGVmYXVsdEN1cnJlbmN5KVxuICAgICksXG4gICAgcXVlc3Rpb25BbnN3ZXJzOmFwaVB1YmxpY0Zvcm0ucmVzdWx0LnF1ZXN0aW9uQW5zd2VycyxcbiAgICBwYXJlbnRJZDphcGlQdWJsaWNGb3JtLnJlc3VsdC5wYXJlbnRJZCxcbiAgICBlbWl0dGVyczogYXBpUHVibGljRm9ybS5yZXN1bHQuZW1pdHRlcnNEVE9TXG4gICAgICA/IGFwaVB1YmxpY0Zvcm0ucmVzdWx0LmVtaXR0ZXJzRFRPUy5tYXAoKGVtaXR0ZXI6IGFueSkgPT4gbWFwRW1pdHRlclRvTW9kZWwoZW1pdHRlcikpXG4gICAgICA6IFtdLFxuICAgIHNjb3JlOmFwaVB1YmxpY0Zvcm0uc2NvcmUsXG4gICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6YXBpUHVibGljRm9ybS5tYXhpbXVtUG9zc2libGVTY29yZSxcbiAgfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gbWFwRW1pdHRlclRvTW9kZWwoYXBpRW1pdHRlcjogYW55KTogRW1pdHRlckRUTyB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGFwaUVtaXR0ZXIuaWQsXG4gICAga2V5TmFtZTogYXBpRW1pdHRlci5rZXlOYW1lLFxuICAgIHZhbHVlU291cmNlOiBhcGlFbWl0dGVyLnZhbHVlU291cmNlLFxuICAgIHF1ZXN0aW9uSWQ6IGFwaUVtaXR0ZXIucXVlc3Rpb25JZCxcbiAgICBpbnB1dFZhbHVlOiBhcGlFbWl0dGVyLmlucHV0VmFsdWUsXG4gICAgaXNDb25mbGljdDogYXBpRW1pdHRlci5pc0NvbmZsaWN0ID8/IGZhbHNlXG4gIH07XG59XG5cblxuZnVuY3Rpb24gbWFwRm9ybUNvbmZpZ3VyYXRpb25Ub01vZGVsKFxuICBhcGlGb3JtQ29uZmlndXJhdGlvbjogYW55XG4pOiBGb3JtQ29uZmlndXJhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgc2F2ZUF1dG9tYXRpY2FsbHk6IGFwaUZvcm1Db25maWd1cmF0aW9uPy5zYXZlQXV0b21hdGljYWxseSxcbiAgICBzYXZlSW50ZXJ2YWw6IGFwaUZvcm1Db25maWd1cmF0aW9uPy5zYXZlSW50ZXJ2YWwsXG4gICAgY3VzdG9taXplRm9udDogYXBpRm9ybUNvbmZpZ3VyYXRpb24/LmN1c3RvbWl6ZUZvbnQsXG4gICAgZm9udEZhbWlseTogYXBpRm9ybUNvbmZpZ3VyYXRpb24/LmZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IGFwaUZvcm1Db25maWd1cmF0aW9uPy5mb250U2l6ZSxcbiAgICBlbmFibGVEYXRhRXhwb3J0OiBhcGlGb3JtQ29uZmlndXJhdGlvbj8uZW5hYmxlRGF0YUV4cG9ydCxcbiAgICBmaWxlRm9ybWF0czogYXBpRm9ybUNvbmZpZ3VyYXRpb24/LmZpbGVGb3JtYXRzLFxuICAgIGVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nOiBhcGlGb3JtQ29uZmlndXJhdGlvbj8uZW5hYmxlUXVlc3Rpb25OdW1iZXJpbmcsXG4gICAgcXVlc3Rpb25OdW1iZXJpbmc6IGFwaUZvcm1Db25maWd1cmF0aW9uPy5xdWVzdGlvbk51bWJlcmluZyxcbiAgICBlbmFibGVHb29nbGVSZWNhcHRjaGE6IGFwaUZvcm1Db25maWd1cmF0aW9uPy5lbmFibGVHb29nbGVSZWNhcHRjaGEsXG4gICAgZ29vZ2xlUmVjYXB0Y2hhS2V5OiBhcGlGb3JtQ29uZmlndXJhdGlvbj8uZ29vZ2xlUmVjYXB0Y2hhS2V5LFxuICAgIGdvb2dsZVJlY2FwdGNoYVNlY3JldDogYXBpRm9ybUNvbmZpZ3VyYXRpb24/Lmdvb2dsZVJlY2FwdGNoYVNlY3JldCxcbiAgICBuYXZpZ2F0aW9uOiBhcGlGb3JtQ29uZmlndXJhdGlvbj8ubmF2aWdhdGlvbixcbiAgICBtYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDogYXBpRm9ybUNvbmZpZ3VyYXRpb24/Lm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkLFxuICB9O1xufVxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFBhZ2VUb01vZGVsKGFwaVBhZ2U6IGFueSwgY3VycmVuY3k6YW55LCBkZWZhdWx0Q3VycmVuY3k6YW55KTogUGFnZSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6IGFwaVBhZ2UudGl0bGUsXG4gICAgdGVzdEVsZW1lbnROYW1lOiBhcGlQYWdlLnRlc3RFbGVtZW50TmFtZSxcbiAgICByb3dzOiBhcGlQYWdlPy5yb3dzPy5tYXAoKGFwaVJvdzogYW55KSA9PiBtYXBSb3dUb01vZGVsKGFwaVJvdyxjdXJyZW5jeSxkZWZhdWx0Q3VycmVuY3kpKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFwUm93VG9Nb2RlbChhcGlSb3c6IGFueSwgY3VycmVuY3k6YW55LGRlZmF1bHRDdXJyZW5jeTphbnkpOiBSb3cge1xuICByZXR1cm4ge1xuICAgIGdyaWQ6IGFwaVJvdy5ncmlkLm1hcCgoYXBpR3JpZDogYW55KSA9PiBtYXBHcmlkVG9Nb2RlbChhcGlHcmlkLGN1cnJlbmN5LGRlZmF1bHRDdXJyZW5jeSkpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXBHcmlkVG9Nb2RlbChhcGlHcmlkOiBhbnksIGN1cnJlbmN5OmFueSxkZWZhdWx0Q3VycmVuY3k6YW55KTogR3JpZCB7XG4gIGxldCBlbnRpdHk6IFNlY3Rpb24gfCBRdWVzdGlvbiB8IFN1YkZvcm0gfCBRdWVzdGlvbkdyb3VwIHwgTXVsdGlmaWVsZHMgfCB1bmRlZmluZWQ7XG5cbiAgc3dpdGNoIChhcGlHcmlkLmVudGl0eVR5cGUpIHtcbiAgICBjYXNlICdRVUVTVElPTic6XG4gICAgICBlbnRpdHkgPSBtYXBRdWVzdGlvblRvTW9kZWwoYXBpR3JpZC5lbGVtZW50LGN1cnJlbmN5LGRlZmF1bHRDdXJyZW5jeSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdTRUNUSU9OJzpcbiAgICAgIGVudGl0eSA9IG1hcFNlY3Rpb25Ub01vZGVsKGFwaUdyaWQuZWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdTVUJGT1JNJzpcbiAgICAgIGVudGl0eSA9IG1hcFN1YkZvcm1Ub01vZGVsKGFwaUdyaWQuZWxlbWVudCxjdXJyZW5jeSxkZWZhdWx0Q3VycmVuY3kpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUVVFU1RJT05fR1JPVVAnOlxuICAgICAgZW50aXR5ID0gbWFwUXVlc3Rpb25Hcm91cFRvTW9kZWwoYXBpR3JpZC5lbGVtZW50LGN1cnJlbmN5LGRlZmF1bHRDdXJyZW5jeSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNVUxUSUZJRUxEJzpcbiAgICAgIGVudGl0eSA9IG1hcE11bHRpZmllbGRzVG9Nb2RlbChhcGlHcmlkLmVsZW1lbnQsY3VycmVuY3ksZGVmYXVsdEN1cnJlbmN5KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZW50aXR5IHR5cGU6ICR7YXBpR3JpZC5lbnRpdHlUeXBlfWApO1xuICB9XG5cbiAgY29uc3Qgd2hlbkNsYXVzZSA9IG1hcFdoZW5DbGF1c2VNb2RlbChhcGlHcmlkLndoZW5DbGF1c2VEVE8pO1xuICAvLyByZWFkIGFjdGlvbnMgc2FmZWx5XG4gIGNvbnN0IGFjdGlvbnM6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh3aGVuQ2xhdXNlPy53aGVuQ2xhdXNlQWN0aW9ucylcbiAgICA/IHdoZW5DbGF1c2Uud2hlbkNsYXVzZUFjdGlvbnNcbiAgICA6IFtdO1xuXG4gIC8vIHBpY2sgbGFzdCBhY3Rpb24gaWYgbXVsdGlwbGUgKHlvdXIgVUkgcHJldmVudHMgdGhhdCBidXQgc2FmZSBoYW5kbGluZylcbiAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy5sZW5ndGggPiAwID8gYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuXG4gIGxldCBzaG91bGRTaG93ID0gdHJ1ZTsgLy8gZGVmYXVsdCB2aXNpYmxlXG5cbiAgaWYgKGFjdGlvbiA9PT0gJ1NIT1cnKSB7XG4gICAgc2hvdWxkU2hvdyA9IGZhbHNlOyAgLy8gZGVmYXVsdCBoaWRkZW4gd2hlbiBhY3Rpb24gPSBTSE9XXG4gIH1cbiAgaWYgKGFjdGlvbiA9PT0gJ0hJREUnKSB7XG4gICAgc2hvdWxkU2hvdyA9IHRydWU7ICAgLy8gZGVmYXVsdCBzaG93biB3aGVuIGFjdGlvbiA9IEhJREVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW50aXR5VHlwZTogYXBpR3JpZC5lbnRpdHlUeXBlLFxuICAgIGVsZW1lbnQ6IGVudGl0eSxcbiAgICB3aGVuQ2xhdXNlOiB3aGVuQ2xhdXNlLFxuICAgIHNob3c6IHNob3VsZFNob3dcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFdoZW5DbGF1c2VNb2RlbCh3aGVuQ2xhdXNlRFRPOiBhbnkpIHtcbiAgLy8g8J+nqSBHdWFyZDogSGFuZGxlIHVuZGVmaW5lZC9udWxsIG9yIG1hbGZvcm1lZCBkYXRhXG4gIGlmICghd2hlbkNsYXVzZURUTyB8fCAhQXJyYXkuaXNBcnJheSh3aGVuQ2xhdXNlRFRPLndoZW5DbGF1c2VDb25kaXRpb24pKSB7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZhdGU6IGZhbHNlLFxuICAgICAgd2hlbkNsYXVzZUNvbmRpdGlvbjogW10sXG4gICAgICB3aGVuQ2xhdXNlQWN0aW9uczogW11cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmF0ZTogISF3aGVuQ2xhdXNlRFRPLmFjdGl2YXRlLFxuICAgIHdoZW5DbGF1c2VBY3Rpb25zOiB3aGVuQ2xhdXNlRFRPLndoZW5DbGF1c2VBY3Rpb25zIHx8IFtdLFxuICAgIHdoZW5DbGF1c2VDb25kaXRpb246IHdoZW5DbGF1c2VEVE8ud2hlbkNsYXVzZUNvbmRpdGlvbi5tYXAoKGNvbmRpdGlvbjogYW55KSA9PiAoe1xuICAgICAgbG9naWM6IGNvbmRpdGlvbi5sb2dpYyB8fCAnJyxcbiAgICAgIHF1ZXN0aW9uaWQ6IGNvbmRpdGlvbi5xdWVzdGlvbmlkIHx8ICcnLFxuICAgICAgY29uZGl0aW9uOiBjb25kaXRpb24uY29uZGl0aW9uIHx8ICcnLFxuICAgICAgdmFsdWU6IGNvbmRpdGlvbi52YWx1ZSA/PyAnJyAvLyBoYW5kbGUgbnVsbC91bmRlZmluZWQgZ3JhY2VmdWxseVxuICAgIH0pKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwU2VjdGlvblRvTW9kZWwoYXBpU2VjdGlvbjogYW55KTogU2VjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGFwaVNlY3Rpb24uaWQsXG4gICAgdGl0bGU6IGFwaVNlY3Rpb24udGl0bGUsXG4gICAgZGVzY3JpcHRpb246IGFwaVNlY3Rpb24uZGVzY3JpcHRpb24sXG4gICAgdGVzdEVsZW1lbnROYW1lOiBhcGlTZWN0aW9uLnRlc3RFbGVtZW50TmFtZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwUXVlc3Rpb25Ub01vZGVsKGFwaVF1ZXN0aW9uOiBhbnksIGN1cnJlbmN5OmFueSwgZGVmYXVsdEN1cnJlbmN5OmFueSk6IFF1ZXN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBjb3VudDogYXBpUXVlc3Rpb24uY291bnQsXG4gICAgaWQ6IGFwaVF1ZXN0aW9uLmlkLFxuICAgIHF1ZXN0aW9uTnVtYmVyOiBhcGlRdWVzdGlvbi5xdWVzdGlvbk51bWJlcixcbiAgICByZXF1aXJlZDogYXBpUXVlc3Rpb24ucmVxdWlyZWQsXG4gICAgaGludDogYXBpUXVlc3Rpb24uaGludCxcbiAgICBxdWVzdGlvbjogYXBpUXVlc3Rpb24ucXVlc3Rpb24sXG4gICAgdGVzdEVsZW1lbnROYW1lOiBhcGlRdWVzdGlvbi50ZXN0RWxlbWVudE5hbWUsXG4gICAgYW5zd2VyOiBhcGlRdWVzdGlvbj8uYW5zd2VyLFxuICAgIHZhbGlkYXRpb246IHRydWUsXG4gICAgZm9ybUVsZW1lbnQ6IG1hcEZvcm1FbGVtZW50VG9Nb2RlbChhcGlRdWVzdGlvbi5mb3JtRWxlbWVudCxjdXJyZW5jeSxkZWZhdWx0Q3VycmVuY3kpLFxuICAgIGNoaWxkTG9naWNzOiBhcGlRdWVzdGlvbj8uY2hpbGRMb2dpY3M/Lm1hcCgobG9naWM6IGFueSkgPT5cbiAgICAgIG1hcExvZ2ljVG9Nb2RlbChsb2dpYywgY3VycmVuY3ksZGVmYXVsdEN1cnJlbmN5KVxuICAgICksXG4gICAgYW5zd2VySWQ6IGFwaVF1ZXN0aW9uPy5hbnN3ZXJJZCxcbiAgICBhdHRhY2htZW50czogYXBpUXVlc3Rpb24/LmF0dGFjaG1lbnRzPy5tYXAoKGF0dGFjaG1lbnQ6IGFueSkgPT4gbWFwQXR0YWNobWVudFRvTW9kZWwoYXR0YWNobWVudCkpIHx8IFtdLFxuICAgIGRlbGV0ZUZpbGVzOiBbXSxcbiAgICBkZWZhdWx0VmFsdWU6YXBpUXVlc3Rpb24/LmRlZmF1bHRWYWx1ZSxcbiAgICBkaXNhYmxlRWRpdDphcGlRdWVzdGlvbj8uZGlzYWJsZUVkaXQsXG4gICAgc2NvcmU6YXBpUXVlc3Rpb24uc2NvcmUsXG4gICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6YXBpUXVlc3Rpb24ubWF4aW11bVBvc3NpYmxlU2NvcmUsXG4gICAgYW1vdW50SW5Xb3JkczogYXBpUXVlc3Rpb24/LmFtb3VudEluV29yZHMsXG4gICAgYW5zd2VyQ3VycmVuY3k6YXBpUXVlc3Rpb24/LmN1cnJlbmN5U3ltYm9sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcEF0dGFjaG1lbnRUb01vZGVsKGFwaUF0dGFjaG1lbnQ6IGFueSk6IEF0dGFjaG1lbnQge1xuICByZXR1cm4ge1xuICAgIGZpbGVJZDogYXBpQXR0YWNobWVudC5maWxlSWQsXG4gICAgZmlsZU5hbWU6IGFwaUF0dGFjaG1lbnQuZmlsZU5hbWUsXG4gICAgZmlsZVVybDogYXBpQXR0YWNobWVudC5maWxlVXJsLFxuICAgIGZpbGVTaXplOmFwaUF0dGFjaG1lbnQ/LmZpbGVTaXplXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcEZvcm1FbGVtZW50VG9Nb2RlbChhcGlGb3JtRWxlbWVudDogYW55LCBjdXJyZW5jeTphbnksIGRlZmF1bHRDdXJyZW5jeTphbnkpOiBGb3JtRWxlbWVudCB7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudFR5cGU6IGFwaUZvcm1FbGVtZW50LmVsZW1lbnRUeXBlLFxuICAgIGFwcGVhcmFuY2U6IG1hcEFwcGVhcmFuY2VUb01vZGVsKGFwaUZvcm1FbGVtZW50LmFwcGVhcmFuY2UsY3VycmVuY3ksZGVmYXVsdEN1cnJlbmN5KSxcbiAgICB2YWxpZGF0aW9uOiBtYXBWYWxpZGF0aW9uVG9Nb2RlbChhcGlGb3JtRWxlbWVudC52YWxpZGF0aW9uKSxcbiAgICBvcHRpb246IG1hcE9wdGlvblRvTW9kZWwoYXBpRm9ybUVsZW1lbnQ/Lm9wdGlvbiksXG4gICAgYWdncmVnYXRlRnVuY3Rpb246IG1hcEFnZ3JlZ2F0ZUZ1bmN0aW9uKGFwaUZvcm1FbGVtZW50Py5hZ2dyZWdhdGVGdW5jdGlvbiksXG4gICAgc2VsZWN0aW9uTWF0cml4TGFiZWw6IGFwaUZvcm1FbGVtZW50LnNlbGVjdGlvbk1hdHJpeExhYmVsLFxuICAgIHNlbGVjdGlvbk1hdHJpeENvbHVtbjogYXBpRm9ybUVsZW1lbnQuc2VsZWN0aW9uTWF0cml4Q29sdW1uLFxuICAgIHRlcm1zQW5kQ29uZGl0aW9uVHlwZTogbWFwdGVybXNBbmRDb25kaXRpb24oYXBpRm9ybUVsZW1lbnQpLFxuICAgIHNjb3Jpbmc6IG1hcFNjb3JpbmdUb01vZGVsKGFwaUZvcm1FbGVtZW50LnNjb3JpbmcpLFxuICAgIGhpZGRlbkZpZWxkOiBtYXBIaWRkZW5GaWVsZFRvTW9kZWwoYXBpRm9ybUVsZW1lbnQ/LmhpZGRlbkZpZWxkKSxcbiAgICBpRnJhbWVQcm9wZXJ0aWVzOiBtYXBJZnJhbWVQcm9wZXJ0aWVzKGFwaUZvcm1FbGVtZW50Py5pRnJhbWVQcm9wZXJ0aWVzKVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXBJZnJhbWVQcm9wZXJ0aWVzKGlGcmFtZVByb3BlcnRpZXM6IGFueSk6IElGcmFtZVByb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIGNvbnRlbnRUeXBlOiBpRnJhbWVQcm9wZXJ0aWVzPy5jb250ZW50VHlwZSxcbiAgICB1cmw6IGlGcmFtZVByb3BlcnRpZXM/LnVybCxcbiAgICBodG1sOiBpRnJhbWVQcm9wZXJ0aWVzPy5odG1sLFxuICAgIHN0eWxlOiBpRnJhbWVQcm9wZXJ0aWVzPy5zdHlsZSxcbiAgICBzY3JpcHQ6IGlGcmFtZVByb3BlcnRpZXM/LnNjcmlwdFxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcEhpZGRlbkZpZWxkVG9Nb2RlbChoaWRkZW5GaWVsZDogYW55KTogSGlkZGVuRmllbGQge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBoaWRkZW5GaWVsZD8udmFsdWUsXG4gICAgdmFsdWVTb3VyY2U6IGhpZGRlbkZpZWxkPy52YWx1ZVNvdXJjZSxcbiAgICBrZXk6IGhpZGRlbkZpZWxkPy5rZXlcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBBZ2dyZWdhdGVGdW5jdGlvbihhZ2dyZWdhdGVGdW5jdGlvbjogYW55KTogQWdncmVnYXRlRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIWFnZ3JlZ2F0ZUZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWdncmVnYXRlT3BlcmF0aW9uOiBhZ2dyZWdhdGVGdW5jdGlvbi5hZ2dyZWdhdGVPcGVyYXRpb24sXG4gICAgZm9ybXVsYTogYWdncmVnYXRlRnVuY3Rpb24uZm9ybXVsYVxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXB0ZXJtc0FuZENvbmRpdGlvbihFbGVtZW50OiBhbnkpOiB0ZXJtc0FuZENvbmRpdGlvblR5cGUge1xuICBpZihFbGVtZW50LnRlcm1zQW5kQ29uZGl0aW9uICE9IHVuZGVmaW5lZCl7XG4gICAgbGV0IGRhdGEgPSBFbGVtZW50LnRlcm1zQW5kQ29uZGl0aW9uXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlcm1zQW5kQ29uZGl0aW9uVHlwZTogZGF0YS50ZXJtc0FuZENvbmRpdGlvblR5cGUsXG4gICAgICBmaWxlVXJsOiBkYXRhLmZpbGVVcmwsXG4gICAgICBmaWxlTmFtZTogZGF0YS5maWxlTmFtZSxcbiAgfTtcbiAgfVxuICBlbHNle1xuICAgIHJldHVybiB7XG4gICAgICB0ZXJtc0FuZENvbmRpdGlvblR5cGU6ICcnLFxuICAgICAgZmlsZVVybDogJycsXG4gICAgICBmaWxlTmFtZTogJycsXG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gbWFwTG9naWNUb01vZGVsKGFwaUxvZ2ljOiBhbnksIGN1cnJlbmN5OmFueSxkZWZhdWx0Q3VycmVuY3k6YW55KTogTG9naWMge1xuICByZXR1cm4ge1xuICAgIGlkOiBhcGlMb2dpYy5pZCxcbiAgICBpbnB1dFZhbHVlOiBhcGlMb2dpYy5pbnB1dFZhbHVlLFxuICAgIGNvbmRpdGlvbjogYXBpTG9naWMuY29uZGl0aW9uLFxuICAgIHNob3dMb2dpYzogZmFsc2UsXG4gICAgcm93czogYXBpTG9naWM/LnJvd3M/Lm1hcCgoZWxlbWVudDogYW55KSA9PlxuICAgICAgbWFwUm93VG9Nb2RlbChlbGVtZW50LGN1cnJlbmN5LGRlZmF1bHRDdXJyZW5jeSlcbiAgICApLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwU3ViRm9ybVRvTW9kZWwoYXBpU3ViRm9ybTogYW55LCBjdXJyZW5jeTphbnksZGVmYXVsdEN1cnJlbmN5OmFueSk6IFN1YkZvcm0ge1xuICByZXR1cm4ge1xuICAgIGlkOiBhcGlTdWJGb3JtLmlkLFxuICAgIGNvdW50OiBhcGlTdWJGb3JtLmNvdW50LFxuICAgIHRpdGxlOiBhcGlTdWJGb3JtLnRpdGxlLFxuICAgIGRlc2NyaXB0aW9uOiBhcGlTdWJGb3JtLmRlc2NyaXB0aW9uLFxuICAgIHRlc3RFbGVtZW50TmFtZTogYXBpU3ViRm9ybS50ZXN0RWxlbWVudE5hbWUsXG4gICAgcm93czogYXBpU3ViRm9ybS5yb3dzLm1hcCgoZWxlbWVudDogYW55KSA9PiBtYXBSb3dUb01vZGVsKGVsZW1lbnQsY3VycmVuY3ksZGVmYXVsdEN1cnJlbmN5KSksXG4gICAgc3VibWlzc2lvbnM6IGFwaVN1YkZvcm0/LnN1Ym1pc3Npb25zPy5tYXAoKHN1Ym1pc3Npb246IGFueSkgPT4gbWFwU3VibWlzc2lvblRvTW9kZWwoc3VibWlzc2lvbikpLFxuICAgIHByb3BlcnR5OiBhcGlTdWJGb3JtLnByb3BlcnR5ID8gbWFwUHJvcGVydHlUb01vZGVsKGFwaVN1YkZvcm0ucHJvcGVydHkpIDogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRBbnN3ZXJzOiBhcGlTdWJGb3JtLmRlZmF1bHRBbnN3ZXJzID8gbWFwRGVmYXVsdEFuc3dlcnNUb01vZGVsKGFwaVN1YkZvcm0uZGVmYXVsdEFuc3dlcnMpIDogdW5kZWZpbmVkLFxuICAgIGRlbGV0ZWQ6IGZhbHNlLFxuICAgIHNjb3JlczphcGlTdWJGb3JtLnNjb3JlcyxcbiAgICBtYXhpbXVtUG9zc2libGVTY29yZTphcGlTdWJGb3JtLm1heGltdW1Qb3NzaWJsZVNjb3JlLFxuICAgIHN1Ym1pc3Npb25Db3B5Q29uZmlnOiBtYXBTdWJtaXNzaW9uQ29weUNvbmZpZyhhcGlTdWJGb3JtLnN1Ym1pc3Npb25Db3B5Q29uZmlnKSxcbiAgICByZXF1aXJlZDogYXBpU3ViRm9ybS5yZXF1aXJlZFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwU3VibWlzc2lvbkNvcHlDb25maWcoY29weUNvbmZpZzphbnkpOiBTdWJtaXNzaW9uQ29weUNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmKCFjb3B5Q29uZmlnKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGFsbG93Q29weUZyb21PdGhlclN1Ym1pc3Npb25zOiBjb3B5Q29uZmlnLmFsbG93Q29weUZyb21PdGhlclN1Ym1pc3Npb25zLFxuICAgIGVkaXRhYmxlUXVlc3Rpb25zOiBjb3B5Q29uZmlnLmVkaXRhYmxlUXVlc3Rpb25zLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwRGVmYXVsdEFuc3dlcnNUb01vZGVsKGFwaURlZmF1bHRBbnN3ZXJzOiBhbnkpOiBEZWZhdWx0QW5zd2Vyc01vZGVsIHtcbiAgcmV0dXJuIHtcbiAgICAgIGFuc3dlcnM6IGFwaURlZmF1bHRBbnN3ZXJzLmFuc3dlcnMubWFwKChlbnRyeTogYW55KSA9PiBtYXBEZWZhdWx0QW5zd2VyRW50cnkoZW50cnkpKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwRGVmYXVsdEFuc3dlckVudHJ5KGFwaUVudHJ5OiBhbnkpOiBEZWZhdWx0QW5zd2VyRW50cnkge1xuICByZXR1cm4ge1xuICAgIGlzRGVsZXRlRW5hYmxlOiBhcGlFbnRyeS5pc0RlbGV0ZUVuYWJsZSxcbiAgICBkZWZhdWx0UXVlc3Rpb25zQW5zd2VyczogYXBpRW50cnkuZGVmYXVsdFF1ZXN0aW9uc0Fuc3dlcnMubWFwKChxdWVzdGlvbjogYW55KSA9PiBtYXBEZWZhdWx0UXVlc3Rpb25BbnN3ZXIocXVlc3Rpb24pKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwRGVmYXVsdFF1ZXN0aW9uQW5zd2VyKGFwaVF1ZXN0aW9uOiBhbnkpOiBEZWZhdWx0UXVlc3Rpb25BbnN3ZXIge1xuICByZXR1cm4ge1xuICAgIGRlZmF1bHRBbnN3ZXI6IGFwaVF1ZXN0aW9uLmRlZmF1bHRBbnN3ZXIsXG4gICAgcmVhZE9ubHk6IGFwaVF1ZXN0aW9uLnJlYWRPbmx5LFxuICAgIGlzRGVsZXRlRW5hYmxlOiBhcGlRdWVzdGlvbi5pc0RlbGV0ZUVuYWJsZSxcbiAgICBxdWVzdGlvbklkOiBhcGlRdWVzdGlvbi5xdWVzdGlvbklkXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcFByb3BlcnR5VG9Nb2RlbChhcGlQcm9wZXJ0eTogYW55KTogU3ViZm9ybVByb3BlcnR5IHtcbiAgcmV0dXJuIHtcbiAgICBzdWJGb3JtU3RydWN0dXJlOiBhcGlQcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlLFxuICAgIHN1YkZvcm1UeXBlOiBhcGlQcm9wZXJ0eS5zdWJGb3JtVHlwZSxcbiAgICBhbGxvd0RlbGV0ZTogYXBpUHJvcGVydHkuYWxsb3dEZWxldGUsXG4gICAgYWxsb3dDb3B5OiBhcGlQcm9wZXJ0eS5hbGxvd0NvcHksXG4gICAgYWRkQnV0dG9uTGFiZWw6IGFwaVByb3BlcnR5LmFkZEJ1dHRvbkxhYmVsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVzdGlvbkdyb3VwVG9Nb2RlbChhcGlRdWVzdGlvbkdyb3VwOiBhbnksY3VycmVuY3k6YW55LGRlZmF1bHRDdXJyZW5jeTphbnkpOiBRdWVzdGlvbkdyb3VwIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogYXBpUXVlc3Rpb25Hcm91cC5pZCxcbiAgICBjb3VudDogYXBpUXVlc3Rpb25Hcm91cC5jb3VudCxcbiAgICB0aXRsZTogYXBpUXVlc3Rpb25Hcm91cC50aXRsZSxcbiAgICBkZXNjcmlwdGlvbjogYXBpUXVlc3Rpb25Hcm91cC5kZXNjcmlwdGlvbixcbiAgICB0ZXN0RWxlbWVudE5hbWU6IGFwaVF1ZXN0aW9uR3JvdXAudGVzdEVsZW1lbnROYW1lLFxuICAgIHJvd3M6IGFwaVF1ZXN0aW9uR3JvdXAucm93cy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4gbWFwUm93VG9Nb2RlbChlbGVtZW50LGN1cnJlbmN5LGRlZmF1bHRDdXJyZW5jeSkpLFxuICAgIHN1Ym1pc3Npb25zOiBhcGlRdWVzdGlvbkdyb3VwPy5zdWJtaXNzaW9ucz8ubWFwKChzdWJtaXNzaW9uOiBhbnkpID0+IG1hcFN1Ym1pc3Npb25Ub01vZGVsKHN1Ym1pc3Npb24pKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcE11bHRpZmllbGRzVG9Nb2RlbChhcGlRdWVzdGlvbkdyb3VwOiBhbnksY3VycmVuY3k6YW55LGRlZmF1bHRDdXJyZW5jeTphbnkpOiBNdWx0aWZpZWxkcyB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGFwaVF1ZXN0aW9uR3JvdXAuaWQsXG4gICAgcXVlc3Rpb246IGFwaVF1ZXN0aW9uR3JvdXAucXVlc3Rpb24sXG4gICAgcXVlc3Rpb25OdW1iZXI6IGFwaVF1ZXN0aW9uR3JvdXAucXVlc3Rpb25OdW1iZXIsXG4gICAgY291bnQ6IGFwaVF1ZXN0aW9uR3JvdXAuY291bnQsXG4gICAgdGVzdEVsZW1lbnROYW1lOiBhcGlRdWVzdGlvbkdyb3VwLnRlc3RFbGVtZW50TmFtZSxcbiAgICByb3dzOiBhcGlRdWVzdGlvbkdyb3VwLnJvd3MubWFwKChlbGVtZW50OiBhbnkpID0+IG1hcFJvd1RvTW9kZWwoZWxlbWVudCxjdXJyZW5jeSxkZWZhdWx0Q3VycmVuY3kpKSxcbiAgICBzdWJtaXNzaW9uczogYXBpUXVlc3Rpb25Hcm91cD8uc3VibWlzc2lvbnM/Lm1hcCgoc3VibWlzc2lvbjogYW55KSA9PiBtYXBTdWJtaXNzaW9uVG9Nb2RlbChzdWJtaXNzaW9uKSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcFN1Ym1pc3Npb25Ub01vZGVsKGFwaVN1Ym1pc3Npb246IGFueSk6IFN1Ym1pc3Npb24ge1xuICByZXR1cm4ge1xuICAgIHN1Ym1pc3Npb25JZDogYXBpU3VibWlzc2lvbj8uc3VibWlzc2lvbklkLFxuICAgIGFuc3dlcnM6IGFwaVN1Ym1pc3Npb24/LmFuc3dlcnM/Lm1hcCgoYW5zd2VyOiBhbnkpID0+IG1hcEFuc3dlclRvTW9kZWwoYW5zd2VyKSksXG4gICAgY29uZmlndXJhdGlvbjogbWFwU3ViZm9ybUNvbmZpZ3VyYXRpb24oYXBpU3VibWlzc2lvbj8uY29uZmlndXJhdGlvbiksXG4gICAgc2NvcmVzOmFwaVN1Ym1pc3Npb24uc2NvcmVzLFxuICAgIHNvdXJjZVN1Ym1pc3Npb25JZDphcGlTdWJtaXNzaW9uLnNvdXJjZVN1Ym1pc3Npb25JZCxcbiAgICBpc0NvcGllZDphcGlTdWJtaXNzaW9uLmlzQ29waWVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcEFuc3dlclRvTW9kZWwoYXBpQW5zd2VyOiBhbnkpOiBBbnN3ZXIge1xuICByZXR1cm4ge1xuICAgIHF1ZXN0aW9uSWQ6IGFwaUFuc3dlci5xdWVzdGlvbklkLFxuICAgIGFuc3dlcjogYXBpQW5zd2VyPy5hbnN3ZXIsXG4gICAgYW5zd2VySWQ6IGFwaUFuc3dlcj8uYW5zd2VySWQsXG4gICAgYXR0YWNobWVudHM6IGFwaUFuc3dlcj8uYXR0YWNobWVudHM/Lm1hcCgoYXR0YWNobWVudDogYW55KSA9PiBtYXBBdHRhY2htZW50VG9Nb2RlbChhdHRhY2htZW50KSksXG4gICAgc2NvcmVzOmFwaUFuc3dlci5zY29yZXMsXG4gICAgbWF4aW11bVBvc3NpYmxlU2NvcmU6YXBpQW5zd2VyLm1heGltdW1Qb3NzaWJsZVNjb3JlLFxuICAgIHNob3c6YXBpQW5zd2VyPy5zaG93LFxuICAgIGFtb3VudEluV29yZHM6IGFwaUFuc3dlcj8uYW1vdW50SW5Xb3JkcyxcbiAgICBhbnN3ZXJDdXJyZW5jeTphcGlBbnN3ZXI/LmN1cnJlbmN5U3ltYm9sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcFN1YmZvcm1Db25maWd1cmF0aW9uKGNvbmZpZzogYW55KTogU3ViZm9ybUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIWNvbmZpZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBhbGxvd0RlbGV0ZTogISFjb25maWcuYWxsb3dEZWxldGUsXG4gICAgaXNEZWZhdWx0OiAhIWNvbmZpZy5pc0RlZmF1bHQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBGb3JtRWxlbWVudFR5cGVUb01vZGVsKFxuICBhcGlGb3JtRWxlbWVudFR5cGU6IGFueVxuKTogRm9ybUVsZW1lbnRUeXBlPGFueT4ge1xuICByZXR1cm4ge1xuICAgIGVudGl0eVR5cGU6IGFwaUZvcm1FbGVtZW50VHlwZT8uZW50aXR5VHlwZSxcbiAgICBlbGVtZW50OiBhcGlGb3JtRWxlbWVudFR5cGU/LmVsZW1lbnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcEFwcGVhcmFuY2VUb01vZGVsKGFwaUFwcGVhcmFuY2U6IGFueSwgY3VycmVuY3k6YW55LCBkZWZhdWx0Q3VycmVuY3k6YW55KTogQXBwZWFyYW5jZSB7XG4gIHJldHVybiB7XG4gICAgcGxhY2Vob2xkZXI6IGFwaUFwcGVhcmFuY2U/LnBsYWNlaG9sZGVyLFxuICAgIGZvbnRTaXplOiBhcGlBcHBlYXJhbmNlPy5mb250U2l6ZSxcbiAgICB0ZXh0QWxpZ246IGFwaUFwcGVhcmFuY2U/LnRleHRBbGlnbixcbiAgICBmb250OiBhcGlBcHBlYXJhbmNlPy5mb250LFxuICAgIHVuZGVybGluZTogYXBpQXBwZWFyYW5jZT8udW5kZXJsaW5lLFxuICAgIGJvbGQ6IGFwaUFwcGVhcmFuY2U/LmJvbGQsXG4gICAgaXRhbGljczogYXBpQXBwZWFyYW5jZT8uaXRhbGljcyxcbiAgICBkZWZhdWx0VmFsdWU6IGFwaUFwcGVhcmFuY2U/LmRlZmF1bHRWYWx1ZSxcbiAgICBudW1iZXJPZlJvd3M6IGFwaUFwcGVhcmFuY2U/Lm51bWJlck9mUm93cyxcbiAgICBzaW5nbGVTZWxlY3Rpb246IGFwaUFwcGVhcmFuY2U/LnNpbmdsZVNlbGVjdGlvbixcbiAgICBkaXNwbGF5Q291bnRyeUNvZGU6IGFwaUFwcGVhcmFuY2U/LmRpc3BsYXlDb3VudHJ5Q29kZSxcbiAgICBkaXNwbGF5RmxhZzogYXBpQXBwZWFyYW5jZT8uZGlzcGxheUZsYWcsXG4gICAgZGlzcGxheUNvZGU6IGFwaUFwcGVhcmFuY2U/LmRpc3BsYXlDb2RlLFxuICAgIHNob3dDb3VudHJ5TmFtZTogYXBpQXBwZWFyYW5jZT8uc2hvd0NvdW50cnlOYW1lLFxuICAgIGJlYXV0aWZ5TnVtYmVyczogYXBpQXBwZWFyYW5jZT8uYmVhdXRpZnlOdW1iZXJzLFxuICAgIHVwQW5kRG93bkJ1dHRvbjogYXBpQXBwZWFyYW5jZT8udXBBbmREb3duQnV0dG9uLFxuICAgIGFsbG93TmVnYXRpdmVWYWx1ZXM6IGFwaUFwcGVhcmFuY2U/LmFsbG93TmVnYXRpdmVWYWx1ZXMsXG4gICAgc2hvd1ByZXZpZXdCdXR0b246IGFwaUFwcGVhcmFuY2U/LnNob3dQcmV2aWV3QnV0dG9uLFxuICAgIGNvbmZpcm1QYXNzd29yZDogYXBpQXBwZWFyYW5jZT8uY29uZmlybVBhc3N3b3JkLFxuICAgIHZpZXdCdXR0b246IGFwaUFwcGVhcmFuY2U/LnZpZXdCdXR0b24sXG4gICAgZGlzcGxheVN0cm9uZzogYXBpQXBwZWFyYW5jZT8uZGlzcGxheVN0cm9uZyxcbiAgICBkYXRlVHlwZTogYXBpQXBwZWFyYW5jZT8uZGF0ZVR5cGUsXG4gICAgZm9ybWF0OiBhcGlBcHBlYXJhbmNlPy5mb3JtYXQsXG4gICAgc2V0Q3VycmVudFBvc2l0aW9uOiBhcGlBcHBlYXJhbmNlPy5zZXRDdXJyZW50UG9zaXRpb24sXG4gICAgZGVmYXVsdFpvb21MZXZlbDogYXBpQXBwZWFyYW5jZT8uZGVmYXVsdFpvb21MZXZlbCxcbiAgICBhbGxvd0Z1bGxTY3JlZW46IGFwaUFwcGVhcmFuY2U/LmFsbG93RnVsbFNjcmVlbixcbiAgICBsYXRpdHVkZTogYXBpQXBwZWFyYW5jZT8ubGF0aXR1ZGUsXG4gICAgbG9uZ2l0dWRlOiBhcGlBcHBlYXJhbmNlPy5sb25naXR1ZGUsXG4gICAgc2hvd0FjY2VwdEJ1dHRvbjogYXBpQXBwZWFyYW5jZT8uc2hvd0FjY2VwdEJ1dHRvbixcbiAgICBsYWJlbE9uVmFsdWU6IGFwaUFwcGVhcmFuY2U/LmxhYmVsT25WYWx1ZSxcbiAgICBsYWJlbE9mZlZhbHVlOiBhcGlBcHBlYXJhbmNlPy5sYWJlbE9mZlZhbHVlLFxuICAgIGxhYmVsT25Db2xvcjogYXBpQXBwZWFyYW5jZT8ubGFiZWxPbkNvbG9yLFxuICAgIGxhYmVsT2ZmQ29sb3I6IGFwaUFwcGVhcmFuY2U/LmxhYmVsT2ZmQ29sb3IsXG4gICAgbWluVmFsdWU6IGFwaUFwcGVhcmFuY2U/Lm1pblZhbHVlLFxuICAgIG1heFZhbHVlOiBhcGlBcHBlYXJhbmNlPy5tYXhWYWx1ZSxcbiAgICBzdGVwVmFsdWU6IGFwaUFwcGVhcmFuY2U/LnN0ZXBWYWx1ZSxcbiAgICBjaGFuZ2VTbGlkZXJDb2xvcjogYXBpQXBwZWFyYW5jZT8uY2hhbmdlU2xpZGVyQ29sb3IsXG4gICAgc2xpZGVyQ29sb3I6IGFwaUFwcGVhcmFuY2U/LnNsaWRlckNvbG9yLFxuICAgIGNhbnZhc09wdGlvbjogYXBpQXBwZWFyYW5jZT8uY2FudmFzT3B0aW9uLFxuICAgIHNlbGVjdGlvblR5cGU6IGFwaUFwcGVhcmFuY2U/LnNlbGVjdGlvblR5cGUsXG4gICAgZHJhZ0FuZERyb3A6IGFwaUFwcGVhcmFuY2U/LmRyYWdBbmREcm9wLFxuICAgIHByZXZpZXdVcGxvYWRlZEZpbGVzOiBhcGlBcHBlYXJhbmNlPy5wcmV2aWV3VXBsb2FkZWRGaWxlcyxcbiAgICBtdWx0aUZpbGVVcGxvYWRzOiBhcGlBcHBlYXJhbmNlPy5tdWx0aUZpbGVVcGxvYWRzLFxuICAgIHNlbGVjdGlvbkNvbG9yUmVxdWlyZWQ6IGFwaUFwcGVhcmFuY2U/LnNlbGVjdGlvbkNvbG9yUmVxdWlyZWQsXG4gICAgc2VsZWN0aW9uQ29sb3I6IGFwaUFwcGVhcmFuY2U/LnNlbGVjdGlvbkNvbG9yLFxuICAgIGNvbG9yOiBhcGlBcHBlYXJhbmNlPy5jb2xvcixcbiAgICBhdmF0YXJQaWNrZXI6YXBpQXBwZWFyYW5jZT8uYXZhdGFyUGlja2VyLFxuICAgIHRpbWVGb3JtYXQ6YXBpQXBwZWFyYW5jZT8udGltZUZvcm1hdCxcbiAgICBkaXNwbGF5T3B0aW9uc0luQ29sdW1uOmFwaUFwcGVhcmFuY2U/LmRpc3BsYXlPcHRpb25zSW5Db2x1bW4sXG4gICAgY3VycmVuY3lTeW1ib2w6YXBpQXBwZWFyYW5jZT8uY3VycmVuY3lTeW1ib2wsXG4gICAgZGVjaW1hbFByZWNpc2lvbjphcGlBcHBlYXJhbmNlPy5kZWNpbWFsUHJlY2lzaW9uLFxuICAgIHN5bWJvbFBvc2l0aW9uOmFwaUFwcGVhcmFuY2U/LnN5bWJvbFBvc2l0aW9uLFxuICAgIHRob3VzYW5kU2VwYXJhdG9yOmFwaUFwcGVhcmFuY2U/LnRob3VzYW5kU2VwYXJhdG9yLFxuICAgIGN1cnJlbmN5OmN1cnJlbmN5LFxuICAgIGxpbWl0Q3VycmVuY2llczphcGlBcHBlYXJhbmNlPy5saW1pdEN1cnJlbmNpZXMsXG4gICAgY3VycmVuY3lPcHRpb246YXBpQXBwZWFyYW5jZT8uY3VycmVuY3lPcHRpb24sXG4gICAgc3BlY2lmaWNDdXJyZW5jeVN5bWJvbDphcGlBcHBlYXJhbmNlPy5zcGVjaWZpY0N1cnJlbmN5U3ltYm9sLFxuICAgIGxpbWl0Q3VycmVuY3lTeW1ib2w6YXBpQXBwZWFyYW5jZT8ubGltaXRDdXJyZW5jeVN5bWJvbCxcbiAgICB3aWR0aDogYXBpQXBwZWFyYW5jZT8ud2lkdGgsXG4gICAgaGVpZ2h0OiBhcGlBcHBlYXJhbmNlPy5oZWlnaHQsXG4gICAgc2hvd0Ftb3VudEluV29yZHM6IGFwaUFwcGVhcmFuY2U/LnNob3dBbW91bnRJbldvcmRzLFxuICAgIGRlZmF1bHRDdXJyZW5jeTpkZWZhdWx0Q3VycmVuY3lcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFwVmFsaWRhdGlvblRvTW9kZWwoYXBpVmFsaWRhdGlvbjogYW55KTogVmFsaWRhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcmVnZXhWYWxpZGF0aW9uOiBhcGlWYWxpZGF0aW9uPy5yZWdleFZhbGlkYXRpb24sXG4gICAgcmVnZXg6IGFwaVZhbGlkYXRpb24/LnJlZ2V4LFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBhcGlWYWxpZGF0aW9uPy52YWxpZGF0aW9uTWVzc2FnZSxcbiAgICBsaW1pdGVkQ2hhcmFjdGVyczogYXBpVmFsaWRhdGlvbj8ubGltaXRlZENoYXJhY3RlcnMsXG4gICAgY291bnQ6IGFwaVZhbGlkYXRpb24/LmNvdW50LFxuICAgIG1pbmltdW1TZWxlY3Rpb246IGFwaVZhbGlkYXRpb24/Lm1pbmltdW1TZWxlY3Rpb24sXG4gICAgbWF4aW11bVNlbGVjdGlvbjogYXBpVmFsaWRhdGlvbj8ubWF4aW11bVNlbGVjdGlvbixcbiAgICBjb3VudHJ5V2lzZVZhbGlkYXRpb246IGFwaVZhbGlkYXRpb24/LmNvdW50cnlXaXNlVmFsaWRhdGlvbixcbiAgICByZXN0cmljdENvdW50cnk6IGFwaVZhbGlkYXRpb24/LnJlc3RyaWN0Q291bnRyeSxcbiAgICBhbGxvd2VkQ291bnRyaWVzOiBhcGlWYWxpZGF0aW9uPy5hbGxvd2VkQ291bnRyaWVzLFxuICAgIGJsb2NrZWRDb3VudHJpZXM6IGFwaVZhbGlkYXRpb24/LmJsb2NrZWRDb3VudHJpZXMsXG4gICAgcmVndWxhckV4cHJlc3Npb246IGFwaVZhbGlkYXRpb24/LnJlZ3VsYXJFeHByZXNzaW9uLFxuICAgIGV4cGVjdGVkRG9tYWluczogYXBpVmFsaWRhdGlvbj8uZXhwZWN0ZWREb21haW5zLFxuICAgIG1pbjogYXBpVmFsaWRhdGlvbj8ubWluLFxuICAgIG1heDogYXBpVmFsaWRhdGlvbj8ubWF4LFxuICAgIG1pbkxlbmd0aDogYXBpVmFsaWRhdGlvbj8ubWluTGVuZ3RoLFxuICAgIG1heExlbmd0aDogYXBpVmFsaWRhdGlvbj8ubWF4TGVuZ3RoLFxuICAgIHJlcXVpcmVMb3dlcmNhc2VMZXR0ZXJzOiBhcGlWYWxpZGF0aW9uPy5yZXF1aXJlTG93ZXJjYXNlTGV0dGVycyxcbiAgICByZXF1aXJlVXBwZXJjYXNlTGV0dGVyczogYXBpVmFsaWRhdGlvbj8ucmVxdWlyZVVwcGVyY2FzZUxldHRlcnMsXG4gICAgcmVxdWlyZU51bWJlcnM6IGFwaVZhbGlkYXRpb24/LnJlcXVpcmVOdW1iZXJzLFxuICAgIHJlcXVpcmVTcGVjaWFsQ2hhcmFjdGVyczogYXBpVmFsaWRhdGlvbj8ucmVxdWlyZVNwZWNpYWxDaGFyYWN0ZXJzLFxuICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogYXBpVmFsaWRhdGlvbj8uYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzLFxuICAgIG1pbkRhdGVPcHRpb246IGFwaVZhbGlkYXRpb24/Lm1pbkRhdGVPcHRpb24sXG4gICAgbWluRGF0ZTogYXBpVmFsaWRhdGlvbj8ubWluRGF0ZSxcbiAgICBtYXhEYXRlT3B0aW9uOiBhcGlWYWxpZGF0aW9uPy5tYXhEYXRlT3B0aW9uLFxuICAgIG1heERhdGU6IGFwaVZhbGlkYXRpb24/Lm1heERhdGUsXG4gICAgcmVnaW9uQm91bmRhcnk6IGFwaVZhbGlkYXRpb24/LnJlZ2lvbkJvdW5kYXJ5LFxuICAgIHJlZ2lvbjogYXBpVmFsaWRhdGlvbj8ucmVnaW9uLFxuICAgIHByZXZlbnRGcm9tUHJvY2VlZGluZ1dpdGhvdXRBZ3JlZTpcbiAgICAgIGFwaVZhbGlkYXRpb24/LnByZXZlbnRGcm9tUHJvY2VlZGluZ1dpdGhvdXRBZ3JlZSxcbiAgICBidXR0b25Db2xvdXI6IGFwaVZhbGlkYXRpb24/LmJ1dHRvbkNvbG91cixcbiAgICBtYXhGaWxlU2l6ZTogYXBpVmFsaWRhdGlvbj8ubWF4RmlsZVNpemUsXG4gICAgbWluRmlsZVNpemU6IGFwaVZhbGlkYXRpb24/Lm1pbkZpbGVTaXplLFxuICAgIG1pblNlbGVjdGlvbjogYXBpVmFsaWRhdGlvbj8ubWluU2VsZWN0aW9uLFxuICAgIG1heFNlbGVjdGlvbjogYXBpVmFsaWRhdGlvbj8ubWF4U2VsZWN0aW9uLFxuICAgIGZpbGVUeXBlczogYXBpVmFsaWRhdGlvbj8uZmlsZVR5cGVzLFxuICAgIGZpbGVTaXplOiBhcGlWYWxpZGF0aW9uPy5maWxlU2l6ZSxcbiAgICBmaWxlU2l6ZVVuaXQ6IGFwaVZhbGlkYXRpb24/LmZpbGVTaXplVW5pdCxcbiAgICB0b3RhbEZpbGVTaXplOiBhcGlWYWxpZGF0aW9uPy50b3RhbEZpbGVTaXplLFxuICAgIG1pblNlbGVjdGlvblJlcXVpcmVkOiBhcGlWYWxpZGF0aW9uPy5taW5TZWxlY3Rpb25SZXF1aXJlZCxcbiAgICBtaW5TZWxlY3Rpb25WYWx1ZTogYXBpVmFsaWRhdGlvbj8ubWluU2VsZWN0aW9uVmFsdWUsXG4gICAgdmFsaWRhdGlvblR5cGU6IGFwaVZhbGlkYXRpb24/LnZhbGlkYXRpb25UeXBlLFxuICAgIHZhbGlkYXRpb246IGFwaVZhbGlkYXRpb24/LnZhbGlkYXRpb24sXG4gICAgbWluVGltZTogYXBpVmFsaWRhdGlvbj8ubWluVGltZSxcbiAgICBtYXhUaW1lOmFwaVZhbGlkYXRpb24/Lm1heFRpbWUsXG4gICAgbWluVGltZU9wdGlvbjphcGlWYWxpZGF0aW9uPy5taW5UaW1lT3B0aW9uLFxuICAgIG1heFRpbWVPcHRpb246IGFwaVZhbGlkYXRpb24/Lm1heFRpbWVPcHRpb24sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcEVsZW1lbnRPcHRpb25EQlRvTW9kZWwoYXBpRWxlbWVudE9wdGlvbkRCOiBhbnkpOiBFbGVtZW50T3B0aW9uREIge1xuICByZXR1cm4ge1xuICAgIHRhYmxlTmFtZTogYXBpRWxlbWVudE9wdGlvbkRCLnRhYmxlTmFtZSxcbiAgICB2YWx1ZUZpZWxkOiBhcGlFbGVtZW50T3B0aW9uREIudmFsdWVGaWVsZCxcbiAgICBsYWJlbEZpZWxkOiBhcGlFbGVtZW50T3B0aW9uREIubGFiZWxGaWVsZCxcbiAgICBsYWJlbFBhdHRlcm46IGFwaUVsZW1lbnRPcHRpb25EQi5sYWJlbFBhdHRlcm4sXG4gICAgY3JpdGVyaWE6IGFwaUVsZW1lbnRPcHRpb25EQj8uY3JpdGVyaWEubWFwKChhcGlDcml0ZXJpYTogYW55KSA9PlxuICAgICAgbWFwRWxlbWVudE9wdGlvbkRCQ3JpdGVyaWFUb01vZGVsKGFwaUNyaXRlcmlhKVxuICAgICksXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcEVsZW1lbnRPcHRpb25EQkNyaXRlcmlhVG9Nb2RlbChcbiAgYXBpRWxlbWVudE9wdGlvbkRCQ3JpdGVyaWE6IGFueVxuKTogRWxlbWVudE9wdGlvbkRCQ3JpdGVyaWEge1xuICByZXR1cm4ge1xuICAgIGZpZWxkOiBhcGlFbGVtZW50T3B0aW9uREJDcml0ZXJpYT8uZmllbGQsXG4gICAgY29uZGl0aW9uOiBhcGlFbGVtZW50T3B0aW9uREJDcml0ZXJpYT8uY29uZGl0aW9uLFxuICAgIHZhbHVlU291cmNlOiBhcGlFbGVtZW50T3B0aW9uREJDcml0ZXJpYT8udmFsdWVTb3VyY2UsXG4gICAgaW5wdXRWYWx1ZTogYXBpRWxlbWVudE9wdGlvbkRCQ3JpdGVyaWE/LmlucHV0VmFsdWUsXG4gICAgbG9naWNhbE9wZXJhdG9yOiBhcGlFbGVtZW50T3B0aW9uREJDcml0ZXJpYT8ubG9naWNhbE9wZXJhdG9yLFxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXBFbGVtZW50T3B0aW9uQVBJVG9Nb2RlbChcbiAgYXBpRWxlbWVudE9wdGlvbkFQSTogYW55XG4pOiBFbGVtZW50T3B0aW9uQVBJIHtcbiAgcmV0dXJuIHtcbiAgICBleHRlcm5hbDogYXBpRWxlbWVudE9wdGlvbkFQST8uZXh0ZXJuYWwsXG4gICAgdXJsOiBhcGlFbGVtZW50T3B0aW9uQVBJPy51cmwsXG4gICAgdmFsdWVGaWVsZDogYXBpRWxlbWVudE9wdGlvbkFQST8udmFsdWVGaWVsZCxcbiAgICBsYWJlbEZpZWxkOiBhcGlFbGVtZW50T3B0aW9uQVBJPy5sYWJlbEZpZWxkLFxuICAgIHBhdGhUb1ZhbHVlOiBhcGlFbGVtZW50T3B0aW9uQVBJPy5wYXRoVG9WYWx1ZSxcbiAgICBoZWFkZXJzOiBhcGlFbGVtZW50T3B0aW9uQVBJPy5oZWFkZXJzPy5tYXAobWFwRWxlbWVudE9wdGlvbkFQSURhdGFUb01vZGVsKSxcbiAgICBwYXJhbXM6IGFwaUVsZW1lbnRPcHRpb25BUEk/LnBhcmFtcz8ubWFwKG1hcEVsZW1lbnRPcHRpb25BUElEYXRhVG9Nb2RlbCksXG4gICAgcGF0aFZhcmlhYmxlczogYXBpRWxlbWVudE9wdGlvbkFQST8ucGF0aFZhcmlhYmxlcz8ubWFwKFxuICAgICAgbWFwRWxlbWVudE9wdGlvbkFQSURhdGFUb01vZGVsXG4gICAgKSxcbiAgICAgbGFiZWxQYXR0ZXJuOmFwaUVsZW1lbnRPcHRpb25BUEk/LmxhYmVsUGF0dGVyblxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXBFbGVtZW50T3B0aW9uQVBJRGF0YVRvTW9kZWwoXG4gIGFwaUVsZW1lbnRPcHRpb25BUElEYXRhOiBhbnlcbik6IGVsZW1lbnRPcHRpb25BUElEYXRhIHtcbiAgcmV0dXJuIHtcbiAgICBrZXlOYW1lOiBhcGlFbGVtZW50T3B0aW9uQVBJRGF0YT8ua2V5TmFtZSxcbiAgICB2YWx1ZVNvdXJjZTogYXBpRWxlbWVudE9wdGlvbkFQSURhdGE/LnZhbHVlU291cmNlLFxuICAgIGlucHV0VmFsdWU6IGFwaUVsZW1lbnRPcHRpb25BUElEYXRhPy5pbnB1dFZhbHVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBtYXBPcHRpb25Ub01vZGVsKGFwaU9wdGlvbjogYW55KTogT3B0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBvcHRpb25UeXBlOiBhcGlPcHRpb24/Lm9wdGlvblR5cGUsXG4gICAgbG9va3VwVGFibGU6IGFwaU9wdGlvbj8ubG9va3VwVGFibGUsXG4gICAgY3VzdG9tT3B0aW9uczogYXBpT3B0aW9uPy5jdXN0b21PcHRpb25zPy5tYXAoKG9wdGlvbjogeyB2YWx1ZTogYW55IH0pID0+ICh7XG4gICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgIH0pKSxcbiAgICBkYXRhYmFzZTogYXBpT3B0aW9uPy5kYXRhYmFzZVxuICAgICAgPyBtYXBFbGVtZW50T3B0aW9uREJUb01vZGVsKGFwaU9wdGlvbj8uZGF0YWJhc2UpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICBhcGk6IGFwaU9wdGlvbj8uYXBpID8gbWFwRWxlbWVudE9wdGlvbkFQSVRvTW9kZWwoYXBpT3B0aW9uLmFwaSkgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hcFNjb3JpbmdUb01vZGVsKGFwaVNjb3Jpbmc6IGFueSk6IFNjb3JpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWFwaVNjb3JpbmcpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmFibGVTY29yaW5nOiBhcGlTY29yaW5nLmVuYWJsZVNjb3JpbmcsXG4gICAgZGVmYXVsdFNjb3JlOiBhcGlTY29yaW5nLmRlZmF1bHRTY29yZSxcbiAgICBlbmFibGVTY29yaW5nVHlwZTogYXBpU2NvcmluZy5lbmFibGVTY29yaW5nVHlwZSxcbiAgICBzY29yZTogYXBpU2NvcmluZy5zY29yZT8ubWFwKChzOiBhbnkpID0+ICh7XG4gICAgICBsYWJlbDogcy5sYWJlbCB8fCBbXSxcbiAgICAgIHNjb3JlOiBzLnNjb3JlLFxuICAgICAgc2NvcmVUeXBlOiBzLnNjb3JlVHlwZVxuICAgIH0pKVxuICB9O1xufVxuIl19