@reusa/ngx-reusa-app-lib 0.0.1333 → 0.0.1334

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 (528) hide show
  1. package/esm2022/lib/components/add-employer/add-employer.component.mjs +2376 -1248
  2. package/esm2022/lib/components/add-participant/add-participant.component.mjs +158 -99
  3. package/esm2022/lib/components/add-payment/add-payment.component.mjs +36 -16
  4. package/esm2022/lib/components/add-wage/add-wage.component.mjs +161 -0
  5. package/esm2022/lib/components/address/address.component.mjs +267 -81
  6. package/esm2022/lib/components/address-popup/address-popup.component.mjs +97 -0
  7. package/esm2022/lib/components/address-suggestion/address-suggestion.component.mjs +289 -0
  8. package/esm2022/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.mjs +245 -0
  9. package/esm2022/lib/components/associate-ssn/associate-ssn.component.mjs +203 -0
  10. package/esm2022/lib/components/bank-details/bank-details.component.mjs +47 -123
  11. package/esm2022/lib/components/claim-info/claim-info.component.mjs +408 -0
  12. package/esm2022/lib/components/contact-us/contact-us.component.mjs +4 -16
  13. package/esm2022/lib/components/correspondence-download/correspondence-download.component.mjs +3 -9
  14. package/esm2022/lib/components/dashboard-card/dashboard-card.component.mjs +32 -4
  15. package/esm2022/lib/components/dependent-grid/dependent-grid.component.mjs +30 -15
  16. package/esm2022/lib/components/disclosure/disclosure.component.mjs +1 -1
  17. package/esm2022/lib/components/dropdown/dropdown.component.mjs +4 -4
  18. package/esm2022/lib/components/dropdown/dropdown.interface.mjs +1 -1
  19. package/esm2022/lib/components/dua-request-page/dua-request-page.component.mjs +596 -0
  20. package/esm2022/lib/components/dua-request-popup/dua-request-popup.component.mjs +356 -0
  21. package/esm2022/lib/components/email-update/email-update.component.mjs +16 -36
  22. package/esm2022/lib/components/employer-grid/employer-grid.component.mjs +379 -450
  23. package/esm2022/lib/components/employer-info/employer-info.component.mjs +319 -0
  24. package/esm2022/lib/components/employer-pay/employer-pay.component.mjs +238 -0
  25. package/esm2022/lib/components/employer-pay-grid/employer-pay-grid.component.mjs +302 -0
  26. package/esm2022/lib/components/error/error.component.mjs +22 -5
  27. package/esm2022/lib/components/farm-usage/farm-usage.component.mjs +172 -0
  28. package/esm2022/lib/components/fav-menu/fav-menu.component.mjs +1 -1
  29. package/esm2022/lib/components/file-uploader/file-uploader.component.mjs +178 -49
  30. package/esm2022/lib/components/footer/footer.component.mjs +108 -85
  31. package/esm2022/lib/components/gross-earnings/gross-earnings.component.mjs +201 -0
  32. package/esm2022/lib/components/header/header.component.mjs +456 -136
  33. package/esm2022/lib/components/history-page/history-page.component.mjs +571 -0
  34. package/esm2022/lib/components/idle-detector/idle-detector.component.mjs +13 -13
  35. package/esm2022/lib/components/idme/idme.component.mjs +84 -0
  36. package/esm2022/lib/components/info/info.component.mjs +4 -12
  37. package/esm2022/lib/components/job-search-result-page/job-search-result-page.component.mjs +1 -1
  38. package/esm2022/lib/components/job-title/job-title.component.mjs +93 -94
  39. package/esm2022/lib/components/legal-disclaimar/legal-disclaimar.component.mjs +142 -331
  40. package/esm2022/lib/components/link/link.component.mjs +1 -1
  41. package/esm2022/lib/components/menu/menu.component.mjs +59 -53
  42. package/esm2022/lib/components/mfa/mfa.component.mjs +116 -188
  43. package/esm2022/lib/components/mfa-popup/mfa-popup.component.mjs +11 -18
  44. package/esm2022/lib/components/money-expect/money-expect.component.mjs +148 -36
  45. package/esm2022/lib/components/offline-add-employer/offline-add-employer.component.mjs +3661 -0
  46. package/esm2022/lib/components/offline-bank-details/offline-bank-details.component.mjs +258 -0
  47. package/esm2022/lib/components/offline-employer-grid/offline-employer-grid.component.mjs +853 -0
  48. package/esm2022/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.mjs +251 -0
  49. package/esm2022/lib/components/profile/profile.component.mjs +754 -338
  50. package/esm2022/lib/components/profile-redirect/profile-redirect.component.mjs +110 -33
  51. package/esm2022/lib/components/proof-of-anything/proof-of-anything.component.mjs +261 -0
  52. package/esm2022/lib/components/proof-of-document-upload/proof-of-document-upload.component.mjs +560 -0
  53. package/esm2022/lib/components/questionnaire/AppValidators.mjs +296 -47
  54. package/esm2022/lib/components/questionnaire/account-success/account-success.page.mjs +110 -65
  55. package/esm2022/lib/components/questionnaire/common-success/common-success.page.mjs +386 -129
  56. package/esm2022/lib/components/questionnaire/dynamic-form-panel.component.mjs +72 -70
  57. package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +875 -1091
  58. package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +186 -565
  59. package/esm2022/lib/components/questionnaire/form-builder/form-builder.page.mjs +28 -22
  60. package/esm2022/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.mjs +113 -29
  61. package/esm2022/lib/components/questionnaire/question-control.service.mjs +2 -1
  62. package/esm2022/lib/components/questionnaire/question.service.mjs +5 -7
  63. package/esm2022/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.mjs +15 -29
  64. package/esm2022/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.mjs +497 -237
  65. package/esm2022/lib/components/scrollable-text/scrollable-text.component.mjs +25 -0
  66. package/esm2022/lib/components/search-employer/search-employer.component.mjs +155 -27
  67. package/esm2022/lib/components/sign-ssn/sign-ssn.component.mjs +3 -3
  68. package/esm2022/lib/components/sms/sms.component.mjs +336 -0
  69. package/esm2022/lib/components/ssn-reverify/ssn-reverify.component.mjs +4 -4
  70. package/esm2022/lib/components/user-login/user-login.component.mjs +116 -300
  71. package/esm2022/lib/components/wage-calculator/wage-calculator.component.mjs +527 -0
  72. package/esm2022/lib/components/wage-grid/wage-grid.component.mjs +274 -0
  73. package/esm2022/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.mjs +147 -0
  74. package/esm2022/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.mjs +167 -0
  75. package/esm2022/lib/components/weekly-cert-employer/weekly-cert-employer.component.mjs +612 -241
  76. package/esm2022/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.mjs +125 -61
  77. package/esm2022/lib/components/weekly-certification/weekly-certification.component.mjs +806 -0
  78. package/esm2022/lib/components/weekly-confirmation/confirmation.component.mjs +129 -0
  79. package/esm2022/lib/components/weekly-interim-confirmation/interim-confirmation.component.mjs +136 -0
  80. package/esm2022/lib/components/weekly-summary-v2/summary.component-v2.mjs +72 -0
  81. package/esm2022/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.mjs +50 -0
  82. package/esm2022/lib/components/weekly-work-search-counter/work-search-counter.component.mjs +92 -0
  83. package/esm2022/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.mjs +1190 -0
  84. package/esm2022/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.mjs +685 -0
  85. package/esm2022/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.mjs +524 -0
  86. package/esm2022/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.mjs +394 -0
  87. package/esm2022/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.mjs +640 -0
  88. package/esm2022/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.mjs +33 -0
  89. package/esm2022/lib/enums/AddressValidationResponseEnum.mjs +9 -0
  90. package/esm2022/lib/enums/AddressValidationSourceFunctionEnum.mjs +5 -0
  91. package/esm2022/lib/guards/auth.guard.mjs +50 -2
  92. package/esm2022/lib/guards/no-login/no-login.guard.mjs +1 -1
  93. package/esm2022/lib/interceptors/error-interceptor/http-error-interceptor.mjs +51 -3
  94. package/esm2022/lib/interceptors/header-interceptor/http-header.interceptor.mjs +1 -1
  95. package/esm2022/lib/models/ActiveClaimModel.mjs +3 -0
  96. package/esm2022/lib/models/CountyModel.mjs +3 -0
  97. package/esm2022/lib/models/DuaAppDataModel.mjs +3 -0
  98. package/esm2022/lib/models/DuaRequestModel.mjs +3 -0
  99. package/esm2022/lib/models/DuaRetroWeeksComponentModel.mjs +6 -0
  100. package/esm2022/lib/models/EmployerDetailSearchResult.mjs +1 -1
  101. package/esm2022/lib/models/EmployerInfoComponentModel.mjs +4 -0
  102. package/esm2022/lib/models/EmployerPayInfoModel.mjs +6 -0
  103. package/esm2022/lib/models/FarmUsageComponentModel.mjs +2 -0
  104. package/esm2022/lib/models/GrossEarningsModel.mjs +3 -0
  105. package/esm2022/lib/models/HelpConstants.mjs +5 -0
  106. package/esm2022/lib/models/LexisNexisOtpDetailsResponseModel.mjs +3 -0
  107. package/esm2022/lib/models/LibConstants.mjs +45 -6
  108. package/esm2022/lib/models/PaymentComponentModel.mjs +1 -1
  109. package/esm2022/lib/models/ReasonSeparationRequestModel.mjs +3 -0
  110. package/esm2022/lib/models/RetroWeeksModel.mjs +3 -0
  111. package/esm2022/lib/models/SecurityQuestionAnswerModel.mjs +3 -0
  112. package/esm2022/lib/models/SendOtpRequestModel.mjs +3 -0
  113. package/esm2022/lib/models/VerifyOtpRequestModel.mjs +3 -0
  114. package/esm2022/lib/models/WageCalculatorModel.mjs +3 -0
  115. package/esm2022/lib/models/WageInfoModel.mjs +4 -0
  116. package/esm2022/lib/models/addressValidation/AddressRecommendationModel.mjs +3 -0
  117. package/esm2022/lib/models/addressValidation/AddressValidationRequestComponentModel.mjs +3 -0
  118. package/esm2022/lib/models/addressValidation/AddressValidationResponseComponentModel.mjs +3 -0
  119. package/esm2022/lib/models/addressValidation/AddressValidationReturnComponentModel.mjs +3 -0
  120. package/esm2022/lib/models/combo-model.mjs +343 -0
  121. package/esm2022/lib/models/dashboard-model.mjs +1 -1
  122. package/esm2022/lib/models/dependent.model.mjs +1 -1
  123. package/esm2022/lib/models/fileupload/DocUploadModel.mjs +7 -0
  124. package/esm2022/lib/models/fileupload/EmployerDataModel.mjs +3 -0
  125. package/esm2022/lib/models/fileupload/FileObject.mjs +3 -0
  126. package/esm2022/lib/models/fileupload/FileObjectArray.mjs +7 -0
  127. package/esm2022/lib/models/questionnaire/AppealParticipantModel.mjs +8 -0
  128. package/esm2022/lib/models/questionnaire/ClaimAppEmpResponseModel.mjs +1 -1
  129. package/esm2022/lib/models/questionnaire/ClaimAppEmployerDetailsModel.mjs +2 -1
  130. package/esm2022/lib/models/questionnaire/ClaimOnlyEmployerDataModel.mjs +1 -1
  131. package/esm2022/lib/models/questionnaire/ComboModel.mjs +101 -179
  132. package/esm2022/lib/models/questionnaire/ElementsModel.mjs +1 -1
  133. package/esm2022/lib/models/questionnaire/LegalDiscaimarModel.mjs +1 -1
  134. package/esm2022/lib/models/questionnaire/ScrollableTextModel.mjs +3 -0
  135. package/esm2022/lib/models/questionnaire/StatusModel.mjs +1 -1
  136. package/esm2022/lib/models/questionnaire/WbaHelperTextModel.mjs +3 -0
  137. package/esm2022/lib/models/weekly-cert/WorkSearchWaiverModel.mjs +3 -0
  138. package/esm2022/lib/models/weekly-cert/address-detail-model.mjs +2 -0
  139. package/esm2022/lib/models/weekly-cert/admin-leave-details-model.mjs +7 -0
  140. package/esm2022/lib/models/weekly-cert/employer-info-v2-model.mjs +7 -0
  141. package/esm2022/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.mjs +6 -0
  142. package/esm2022/lib/models/weekly-cert/weekly-certification-v2-model.mjs +34 -0
  143. package/esm2022/lib/models/weekly-cert/work-search-record-v2-model.mjs +15 -0
  144. package/esm2022/lib/models/weekly-cert/work-search-v2-model.mjs +11 -0
  145. package/esm2022/lib/ngx-reusa-app-lib.module.mjs +135 -23
  146. package/esm2022/lib/pages/BasePage.mjs +4 -23
  147. package/esm2022/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +22 -18
  148. package/esm2022/lib/pages/common/change-password/change-password.page.mjs +142 -124
  149. package/esm2022/lib/pages/common/landing/landing.component.mjs +7 -8
  150. package/esm2022/lib/pages/common/landing2/landing2.component.mjs +4 -4
  151. package/esm2022/lib/pages/common/login/login.component.mjs +6 -5
  152. package/esm2022/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +14 -14
  153. package/esm2022/lib/pages/common/security-policy/security-policy.page.mjs +5 -5
  154. package/esm2022/lib/pages/popovers/language/language.page.mjs +1 -1
  155. package/esm2022/lib/pages/popovers/my-notifications/my-notifications.page.mjs +4 -4
  156. package/esm2022/lib/pages/popovers/my-profile/my-profile.page.mjs +7 -2
  157. package/esm2022/lib/pipes/format-worksearch/format-worksearch.pipe.mjs +101 -0
  158. package/esm2022/lib/pipes/translate/dynamic-translate.pipe.mjs +1 -1
  159. package/esm2022/lib/services/address-validation-service/address-validation.service.mjs +151 -0
  160. package/esm2022/lib/services/appeal/appeal.service.mjs +37 -0
  161. package/esm2022/lib/services/base-service.mjs +4 -1
  162. package/esm2022/lib/services/birt-service/birt.service.mjs +57 -0
  163. package/esm2022/lib/services/chatbot/chatbot.service.mjs +1 -2
  164. package/esm2022/lib/services/claimant-service/claimant.service.mjs +7 -13
  165. package/esm2022/lib/services/claims/claims.service.mjs +105 -14
  166. package/esm2022/lib/services/employer/employer-service.mjs +35 -0
  167. package/esm2022/lib/services/event-service/event-service.mjs +44 -0
  168. package/esm2022/lib/services/help/help.service.mjs +1 -1
  169. package/esm2022/lib/services/logger/logger.service.mjs +1 -1
  170. package/esm2022/lib/services/login/login.service.mjs +29 -11
  171. package/esm2022/lib/services/offline-claims/offline-claims.service.mjs +327 -0
  172. package/esm2022/lib/services/questionnaire/questionnaire.service.mjs +4 -1
  173. package/esm2022/lib/services/questionnaire/validation.service.mjs +4 -1
  174. package/esm2022/lib/services/security-service/security.service.mjs +23 -6
  175. package/esm2022/lib/services/util/util.service.mjs +61 -5
  176. package/esm2022/lib/services/weekly-cert/review.service.mjs +101 -0
  177. package/esm2022/lib/services/weekly-cert/weekly-cert-v2.service.mjs +186 -14
  178. package/esm2022/lib/services/weekly-cert/weekly-cert.service.mjs +37 -0
  179. package/esm2022/lib/services/weekly-cert/work-search.service.mjs +58 -0
  180. package/esm2022/lib/validations/AppRegex.mjs +1 -3
  181. package/esm2022/lib/validations/AppValidators.mjs +78 -62
  182. package/esm2022/public-api.mjs +47 -5
  183. package/fesm2022/reusa-ngx-reusa-app-lib.mjs +42087 -22504
  184. package/fesm2022/reusa-ngx-reusa-app-lib.mjs.map +1 -1
  185. package/lib/components/add-employer/add-employer.component.d.ts +85 -52
  186. package/lib/components/add-employer/add-employer.component.d.ts.map +1 -1
  187. package/lib/components/add-participant/add-participant.component.d.ts +11 -2
  188. package/lib/components/add-participant/add-participant.component.d.ts.map +1 -1
  189. package/lib/components/add-payment/add-payment.component.d.ts +7 -2
  190. package/lib/components/add-payment/add-payment.component.d.ts.map +1 -1
  191. package/lib/components/add-wage/add-wage.component.d.ts +30 -0
  192. package/lib/components/add-wage/add-wage.component.d.ts.map +1 -0
  193. package/lib/components/address/address.component.d.ts +41 -5
  194. package/lib/components/address/address.component.d.ts.map +1 -1
  195. package/lib/components/address-popup/address-popup.component.d.ts +16 -0
  196. package/lib/components/address-popup/address-popup.component.d.ts.map +1 -0
  197. package/lib/components/address-suggestion/address-suggestion.component.d.ts +43 -0
  198. package/lib/components/address-suggestion/address-suggestion.component.d.ts.map +1 -0
  199. package/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.d.ts +37 -0
  200. package/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.d.ts.map +1 -0
  201. package/lib/components/associate-ssn/associate-ssn.component.d.ts +33 -0
  202. package/lib/components/associate-ssn/associate-ssn.component.d.ts.map +1 -0
  203. package/lib/components/bank-details/bank-details.component.d.ts +0 -6
  204. package/lib/components/bank-details/bank-details.component.d.ts.map +1 -1
  205. package/lib/components/claim-info/claim-info.component.d.ts +49 -0
  206. package/lib/components/claim-info/claim-info.component.d.ts.map +1 -0
  207. package/lib/components/correspondence-download/correspondence-download.component.d.ts.map +1 -1
  208. package/lib/components/dashboard-card/dashboard-card.component.d.ts.map +1 -1
  209. package/lib/components/dua-request-page/dua-request-page.component.d.ts +74 -0
  210. package/lib/components/dua-request-page/dua-request-page.component.d.ts.map +1 -0
  211. package/lib/components/dua-request-popup/dua-request-popup.component.d.ts +61 -0
  212. package/lib/components/dua-request-popup/dua-request-popup.component.d.ts.map +1 -0
  213. package/lib/components/email-update/email-update.component.d.ts +1 -7
  214. package/lib/components/email-update/email-update.component.d.ts.map +1 -1
  215. package/lib/components/employer-grid/employer-grid.component.d.ts +5 -13
  216. package/lib/components/employer-grid/employer-grid.component.d.ts.map +1 -1
  217. package/lib/components/employer-info/employer-info.component.d.ts +50 -0
  218. package/lib/components/employer-info/employer-info.component.d.ts.map +1 -0
  219. package/lib/components/employer-pay/employer-pay.component.d.ts +51 -0
  220. package/lib/components/employer-pay/employer-pay.component.d.ts.map +1 -0
  221. package/lib/components/employer-pay-grid/employer-pay-grid.component.d.ts +43 -0
  222. package/lib/components/employer-pay-grid/employer-pay-grid.component.d.ts.map +1 -0
  223. package/lib/components/error/error.component.d.ts +3 -2
  224. package/lib/components/error/error.component.d.ts.map +1 -1
  225. package/lib/components/farm-usage/farm-usage.component.d.ts +33 -0
  226. package/lib/components/farm-usage/farm-usage.component.d.ts.map +1 -0
  227. package/lib/components/file-uploader/file-uploader.component.d.ts +5 -1
  228. package/lib/components/file-uploader/file-uploader.component.d.ts.map +1 -1
  229. package/lib/components/footer/footer.component.d.ts.map +1 -1
  230. package/lib/components/gross-earnings/gross-earnings.component.d.ts +42 -0
  231. package/lib/components/gross-earnings/gross-earnings.component.d.ts.map +1 -0
  232. package/lib/components/header/header.component.d.ts +17 -2
  233. package/lib/components/header/header.component.d.ts.map +1 -1
  234. package/lib/components/history-page/history-page.component.d.ts +80 -0
  235. package/lib/components/history-page/history-page.component.d.ts.map +1 -0
  236. package/lib/components/idme/idme.component.d.ts +19 -0
  237. package/lib/components/idme/idme.component.d.ts.map +1 -0
  238. package/lib/components/job-title/job-title.component.d.ts +22 -21
  239. package/lib/components/job-title/job-title.component.d.ts.map +1 -1
  240. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts +5 -2
  241. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts.map +1 -1
  242. package/lib/components/menu/menu.component.d.ts +2 -1
  243. package/lib/components/menu/menu.component.d.ts.map +1 -1
  244. package/lib/components/mfa/mfa.component.d.ts +7 -14
  245. package/lib/components/mfa/mfa.component.d.ts.map +1 -1
  246. package/lib/components/mfa-popup/mfa-popup.component.d.ts +6 -8
  247. package/lib/components/mfa-popup/mfa-popup.component.d.ts.map +1 -1
  248. package/lib/components/money-expect/money-expect.component.d.ts +15 -4
  249. package/lib/components/money-expect/money-expect.component.d.ts.map +1 -1
  250. package/lib/components/offline-add-employer/offline-add-employer.component.d.ts +311 -0
  251. package/lib/components/offline-add-employer/offline-add-employer.component.d.ts.map +1 -0
  252. package/lib/components/offline-bank-details/offline-bank-details.component.d.ts +33 -0
  253. package/lib/components/offline-bank-details/offline-bank-details.component.d.ts.map +1 -0
  254. package/lib/components/offline-employer-grid/offline-employer-grid.component.d.ts +97 -0
  255. package/lib/components/offline-employer-grid/offline-employer-grid.component.d.ts.map +1 -0
  256. package/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.d.ts +33 -0
  257. package/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.d.ts.map +1 -0
  258. package/lib/components/profile/profile.component.d.ts +82 -49
  259. package/lib/components/profile/profile.component.d.ts.map +1 -1
  260. package/lib/components/profile-redirect/profile-redirect.component.d.ts +9 -2
  261. package/lib/components/profile-redirect/profile-redirect.component.d.ts.map +1 -1
  262. package/lib/components/proof-of-anything/proof-of-anything.component.d.ts +54 -0
  263. package/lib/components/proof-of-anything/proof-of-anything.component.d.ts.map +1 -0
  264. package/lib/components/proof-of-document-upload/proof-of-document-upload.component.d.ts +74 -0
  265. package/lib/components/proof-of-document-upload/proof-of-document-upload.component.d.ts.map +1 -0
  266. package/lib/components/questionnaire/AppValidators.d.ts +1 -0
  267. package/lib/components/questionnaire/AppValidators.d.ts.map +1 -1
  268. package/lib/components/questionnaire/account-success/account-success.page.d.ts +13 -10
  269. package/lib/components/questionnaire/account-success/account-success.page.d.ts.map +1 -1
  270. package/lib/components/questionnaire/common-success/common-success.page.d.ts +7 -0
  271. package/lib/components/questionnaire/common-success/common-success.page.d.ts.map +1 -1
  272. package/lib/components/questionnaire/dynamic-form-panel.component.d.ts +3 -1
  273. package/lib/components/questionnaire/dynamic-form-panel.component.d.ts.map +1 -1
  274. package/lib/components/questionnaire/dynamic-form-question.component.d.ts +33 -34
  275. package/lib/components/questionnaire/dynamic-form-question.component.d.ts.map +1 -1
  276. package/lib/components/questionnaire/dynamic-form.component.d.ts +10 -34
  277. package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -1
  278. package/lib/components/questionnaire/form-builder/form-builder.page.d.ts +0 -7
  279. package/lib/components/questionnaire/form-builder/form-builder.page.d.ts.map +1 -1
  280. package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts +7 -1
  281. package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts.map +1 -1
  282. package/lib/components/questionnaire/question-control.service.d.ts.map +1 -1
  283. package/lib/components/questionnaire/question.service.d.ts +0 -1
  284. package/lib/components/questionnaire/question.service.d.ts.map +1 -1
  285. package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts +1 -7
  286. package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts.map +1 -1
  287. package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts +11 -3
  288. package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts.map +1 -1
  289. package/lib/components/scrollable-text/scrollable-text.component.d.ts +11 -0
  290. package/lib/components/scrollable-text/scrollable-text.component.d.ts.map +1 -0
  291. package/lib/components/search-employer/search-employer.component.d.ts +5 -4
  292. package/lib/components/search-employer/search-employer.component.d.ts.map +1 -1
  293. package/lib/components/sms/sms.component.d.ts +63 -0
  294. package/lib/components/sms/sms.component.d.ts.map +1 -0
  295. package/lib/components/user-login/user-login.component.d.ts +5 -32
  296. package/lib/components/user-login/user-login.component.d.ts.map +1 -1
  297. package/lib/components/wage-calculator/wage-calculator.component.d.ts +44 -0
  298. package/lib/components/wage-calculator/wage-calculator.component.d.ts.map +1 -0
  299. package/lib/components/wage-grid/wage-grid.component.d.ts +43 -0
  300. package/lib/components/wage-grid/wage-grid.component.d.ts.map +1 -0
  301. package/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.d.ts +28 -0
  302. package/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.d.ts.map +1 -0
  303. package/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.d.ts +28 -0
  304. package/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.d.ts.map +1 -0
  305. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts +26 -3
  306. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts.map +1 -1
  307. package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts +9 -3
  308. package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts.map +1 -1
  309. package/lib/components/weekly-certification/weekly-certification.component.d.ts +101 -0
  310. package/lib/components/weekly-certification/weekly-certification.component.d.ts.map +1 -0
  311. package/lib/components/weekly-confirmation/confirmation.component.d.ts +21 -0
  312. package/lib/components/weekly-confirmation/confirmation.component.d.ts.map +1 -0
  313. package/lib/components/weekly-interim-confirmation/interim-confirmation.component.d.ts +34 -0
  314. package/lib/components/weekly-interim-confirmation/interim-confirmation.component.d.ts.map +1 -0
  315. package/lib/components/weekly-summary-v2/summary.component-v2.d.ts +17 -0
  316. package/lib/components/weekly-summary-v2/summary.component-v2.d.ts.map +1 -0
  317. package/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.d.ts +10 -0
  318. package/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.d.ts.map +1 -0
  319. package/lib/components/weekly-work-search-counter/work-search-counter.component.d.ts +17 -0
  320. package/lib/components/weekly-work-search-counter/work-search-counter.component.d.ts.map +1 -0
  321. package/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.d.ts +105 -0
  322. package/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.d.ts.map +1 -0
  323. package/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.d.ts +71 -0
  324. package/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.d.ts.map +1 -0
  325. package/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.d.ts +59 -0
  326. package/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.d.ts.map +1 -0
  327. package/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.d.ts +47 -0
  328. package/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.d.ts.map +1 -0
  329. package/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.d.ts +78 -0
  330. package/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.d.ts.map +1 -0
  331. package/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.d.ts +8 -0
  332. package/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.d.ts.map +1 -0
  333. package/lib/enums/AddressValidationResponseEnum.d.ts +8 -0
  334. package/lib/enums/AddressValidationResponseEnum.d.ts.map +1 -0
  335. package/lib/enums/AddressValidationSourceFunctionEnum.d.ts +4 -0
  336. package/lib/enums/AddressValidationSourceFunctionEnum.d.ts.map +1 -0
  337. package/lib/guards/auth.guard.d.ts.map +1 -1
  338. package/lib/interceptors/error-interceptor/http-error-interceptor.d.ts.map +1 -1
  339. package/lib/models/ActiveClaimModel.d.ts +8 -0
  340. package/lib/models/ActiveClaimModel.d.ts.map +1 -0
  341. package/lib/models/CountyModel.d.ts +8 -0
  342. package/lib/models/CountyModel.d.ts.map +1 -0
  343. package/lib/models/DuaAppDataModel.d.ts +5 -0
  344. package/lib/models/DuaAppDataModel.d.ts.map +1 -0
  345. package/lib/models/DuaRequestModel.d.ts +10 -0
  346. package/lib/models/DuaRequestModel.d.ts.map +1 -0
  347. package/lib/models/DuaRetroWeeksComponentModel.d.ts +5 -0
  348. package/lib/models/DuaRetroWeeksComponentModel.d.ts.map +1 -0
  349. package/lib/models/EmployerDetailSearchResult.d.ts +4 -1
  350. package/lib/models/EmployerDetailSearchResult.d.ts.map +1 -1
  351. package/lib/models/EmployerInfoComponentModel.d.ts +9 -0
  352. package/lib/models/EmployerInfoComponentModel.d.ts.map +1 -0
  353. package/lib/models/EmployerPayInfoModel.d.ts +20 -0
  354. package/lib/models/EmployerPayInfoModel.d.ts.map +1 -0
  355. package/lib/models/FarmUsageComponentModel.d.ts +10 -0
  356. package/lib/models/FarmUsageComponentModel.d.ts.map +1 -0
  357. package/lib/models/GrossEarningsModel.d.ts +6 -0
  358. package/lib/models/GrossEarningsModel.d.ts.map +1 -0
  359. package/lib/models/HelpConstants.d.ts +5 -0
  360. package/lib/models/HelpConstants.d.ts.map +1 -0
  361. package/lib/models/LexisNexisOtpDetailsResponseModel.d.ts +7 -0
  362. package/lib/models/LexisNexisOtpDetailsResponseModel.d.ts.map +1 -0
  363. package/lib/models/LibConstants.d.ts +40 -1
  364. package/lib/models/LibConstants.d.ts.map +1 -1
  365. package/lib/models/PaymentComponentModel.d.ts +1 -1
  366. package/lib/models/PaymentComponentModel.d.ts.map +1 -1
  367. package/lib/models/ReasonSeparationRequestModel.d.ts +7 -0
  368. package/lib/models/ReasonSeparationRequestModel.d.ts.map +1 -0
  369. package/lib/models/RetroWeeksModel.d.ts +11 -0
  370. package/lib/models/RetroWeeksModel.d.ts.map +1 -0
  371. package/lib/models/SecurityQuestionAnswerModel.d.ts +7 -0
  372. package/lib/models/SecurityQuestionAnswerModel.d.ts.map +1 -0
  373. package/lib/models/SendOtpRequestModel.d.ts +12 -0
  374. package/lib/models/SendOtpRequestModel.d.ts.map +1 -0
  375. package/lib/models/VerifyOtpRequestModel.d.ts +8 -0
  376. package/lib/models/VerifyOtpRequestModel.d.ts.map +1 -0
  377. package/lib/models/WageCalculatorModel.d.ts +15 -0
  378. package/lib/models/WageCalculatorModel.d.ts.map +1 -0
  379. package/lib/models/WageInfoModel.d.ts +9 -0
  380. package/lib/models/WageInfoModel.d.ts.map +1 -0
  381. package/lib/models/addressValidation/AddressRecommendationModel.d.ts +12 -0
  382. package/lib/models/addressValidation/AddressRecommendationModel.d.ts.map +1 -0
  383. package/lib/models/addressValidation/AddressValidationRequestComponentModel.d.ts +11 -0
  384. package/lib/models/addressValidation/AddressValidationRequestComponentModel.d.ts.map +1 -0
  385. package/lib/models/addressValidation/AddressValidationResponseComponentModel.d.ts +6 -0
  386. package/lib/models/addressValidation/AddressValidationResponseComponentModel.d.ts.map +1 -0
  387. package/lib/models/addressValidation/AddressValidationReturnComponentModel.d.ts +16 -0
  388. package/lib/models/addressValidation/AddressValidationReturnComponentModel.d.ts.map +1 -0
  389. package/lib/models/combo-model.d.ts +42 -0
  390. package/lib/models/combo-model.d.ts.map +1 -0
  391. package/lib/models/dashboard-model.d.ts +22 -0
  392. package/lib/models/dashboard-model.d.ts.map +1 -1
  393. package/lib/models/fileupload/DocUploadModel.d.ts +22 -0
  394. package/lib/models/fileupload/DocUploadModel.d.ts.map +1 -0
  395. package/lib/models/fileupload/EmployerDataModel.d.ts +6 -0
  396. package/lib/models/fileupload/EmployerDataModel.d.ts.map +1 -0
  397. package/lib/models/fileupload/FileObject.d.ts +8 -0
  398. package/lib/models/fileupload/FileObject.d.ts.map +1 -0
  399. package/lib/models/fileupload/FileObjectArray.d.ts +8 -0
  400. package/lib/models/fileupload/FileObjectArray.d.ts.map +1 -0
  401. package/lib/models/questionnaire/AppealParticipantModel.d.ts +17 -0
  402. package/lib/models/questionnaire/AppealParticipantModel.d.ts.map +1 -0
  403. package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts +3 -0
  404. package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts.map +1 -1
  405. package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts +15 -4
  406. package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts.map +1 -1
  407. package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts +4 -1
  408. package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts.map +1 -1
  409. package/lib/models/questionnaire/ComboModel.d.ts +28 -16
  410. package/lib/models/questionnaire/ComboModel.d.ts.map +1 -1
  411. package/lib/models/questionnaire/ElementsModel.d.ts +0 -1
  412. package/lib/models/questionnaire/ElementsModel.d.ts.map +1 -1
  413. package/lib/models/questionnaire/LegalDiscaimarModel.d.ts +2 -0
  414. package/lib/models/questionnaire/LegalDiscaimarModel.d.ts.map +1 -1
  415. package/lib/models/questionnaire/ScrollableTextModel.d.ts +4 -0
  416. package/lib/models/questionnaire/ScrollableTextModel.d.ts.map +1 -0
  417. package/lib/models/questionnaire/StatusModel.d.ts +1 -0
  418. package/lib/models/questionnaire/StatusModel.d.ts.map +1 -1
  419. package/lib/models/questionnaire/WbaHelperTextModel.d.ts +4 -0
  420. package/lib/models/questionnaire/WbaHelperTextModel.d.ts.map +1 -0
  421. package/lib/models/weekly-cert/WorkSearchWaiverModel.d.ts +9 -0
  422. package/lib/models/weekly-cert/WorkSearchWaiverModel.d.ts.map +1 -0
  423. package/lib/models/weekly-cert/address-detail-model.d.ts +14 -0
  424. package/lib/models/weekly-cert/address-detail-model.d.ts.map +1 -0
  425. package/lib/models/weekly-cert/admin-leave-details-model.d.ts +15 -0
  426. package/lib/models/weekly-cert/admin-leave-details-model.d.ts.map +1 -0
  427. package/lib/models/weekly-cert/employer-info-v2-model.d.ts +27 -0
  428. package/lib/models/weekly-cert/employer-info-v2-model.d.ts.map +1 -0
  429. package/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.d.ts +57 -0
  430. package/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.d.ts.map +1 -0
  431. package/lib/models/weekly-cert/weekly-certification-v2-model.d.ts +59 -0
  432. package/lib/models/weekly-cert/weekly-certification-v2-model.d.ts.map +1 -0
  433. package/lib/models/weekly-cert/work-search-record-v2-model.d.ts +66 -0
  434. package/lib/models/weekly-cert/work-search-record-v2-model.d.ts.map +1 -0
  435. package/lib/models/weekly-cert/work-search-v2-model.d.ts +18 -0
  436. package/lib/models/weekly-cert/work-search-v2-model.d.ts.map +1 -0
  437. package/lib/ngx-reusa-app-lib.module.d.ts +124 -86
  438. package/lib/ngx-reusa-app-lib.module.d.ts.map +1 -1
  439. package/lib/pages/BasePage.d.ts +3 -6
  440. package/lib/pages/BasePage.d.ts.map +1 -1
  441. package/lib/pages/common/change-password/change-password.page.d.ts +3 -0
  442. package/lib/pages/common/change-password/change-password.page.d.ts.map +1 -1
  443. package/lib/pages/common/login/login.component.d.ts.map +1 -1
  444. package/lib/pages/popovers/my-profile/my-profile.page.d.ts.map +1 -1
  445. package/lib/pipes/format-worksearch/format-worksearch.pipe.d.ts +14 -0
  446. package/lib/pipes/format-worksearch/format-worksearch.pipe.d.ts.map +1 -0
  447. package/lib/services/address-validation-service/address-validation.service.d.ts +44 -0
  448. package/lib/services/address-validation-service/address-validation.service.d.ts.map +1 -0
  449. package/lib/services/appeal/appeal.service.d.ts +16 -0
  450. package/lib/services/appeal/appeal.service.d.ts.map +1 -0
  451. package/lib/services/base-service.d.ts +12 -0
  452. package/lib/services/base-service.d.ts.map +1 -1
  453. package/lib/services/birt-service/birt.service.d.ts +17 -0
  454. package/lib/services/birt-service/birt.service.d.ts.map +1 -0
  455. package/lib/services/claimant-service/claimant.service.d.ts +5 -6
  456. package/lib/services/claimant-service/claimant.service.d.ts.map +1 -1
  457. package/lib/services/claims/claims.service.d.ts +39 -5
  458. package/lib/services/claims/claims.service.d.ts.map +1 -1
  459. package/lib/services/employer/employer-service.d.ts +16 -0
  460. package/lib/services/employer/employer-service.d.ts.map +1 -0
  461. package/lib/services/event-service/event-service.d.ts +20 -0
  462. package/lib/services/event-service/event-service.d.ts.map +1 -0
  463. package/lib/services/login/login.service.d.ts +5 -3
  464. package/lib/services/login/login.service.d.ts.map +1 -1
  465. package/lib/services/offline-claims/offline-claims.service.d.ts +64 -0
  466. package/lib/services/offline-claims/offline-claims.service.d.ts.map +1 -0
  467. package/lib/services/questionnaire/questionnaire.service.d.ts +1 -0
  468. package/lib/services/questionnaire/questionnaire.service.d.ts.map +1 -1
  469. package/lib/services/questionnaire/validation.service.d.ts +3 -0
  470. package/lib/services/questionnaire/validation.service.d.ts.map +1 -1
  471. package/lib/services/security-service/security.service.d.ts +12 -4
  472. package/lib/services/security-service/security.service.d.ts.map +1 -1
  473. package/lib/services/util/util.service.d.ts +6 -0
  474. package/lib/services/util/util.service.d.ts.map +1 -1
  475. package/lib/services/weekly-cert/review.service.d.ts +23 -0
  476. package/lib/services/weekly-cert/review.service.d.ts.map +1 -0
  477. package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts +47 -5
  478. package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts.map +1 -1
  479. package/lib/services/weekly-cert/weekly-cert.service.d.ts +17 -0
  480. package/lib/services/weekly-cert/weekly-cert.service.d.ts.map +1 -0
  481. package/lib/services/weekly-cert/work-search.service.d.ts +26 -0
  482. package/lib/services/weekly-cert/work-search.service.d.ts.map +1 -0
  483. package/lib/validations/AppRegex.d.ts +0 -2
  484. package/lib/validations/AppRegex.d.ts.map +1 -1
  485. package/lib/validations/AppValidators.d.ts +20 -24
  486. package/lib/validations/AppValidators.d.ts.map +1 -1
  487. package/package.json +2 -2
  488. package/public-api.d.ts +46 -4
  489. package/public-api.d.ts.map +1 -1
  490. package/esm2022/lib/components/lexis-nexis/lexis-nexis.component.mjs +0 -340
  491. package/esm2022/lib/components/mfa2/mfa2.component.mjs +0 -261
  492. package/esm2022/lib/components/security-question/security-question.component.mjs +0 -189
  493. package/esm2022/lib/models/LexisNexisAccountCreationModel.mjs +0 -2
  494. package/esm2022/lib/models/LexisNexisAuthSelectionRequestModel.mjs +0 -2
  495. package/esm2022/lib/models/LexisNexisAuthSelectionResponseModel.mjs +0 -2
  496. package/esm2022/lib/models/LexisNexisEnabledResponseModel.mjs +0 -2
  497. package/esm2022/lib/models/LexisNexisResponseModel.mjs +0 -3
  498. package/esm2022/lib/models/PartialEmploymentModel.mjs +0 -3
  499. package/esm2022/lib/models/SecurityQuestionModel.mjs +0 -3
  500. package/esm2022/lib/services/claimant-service/claimant-usps-redirect.service.mjs +0 -36
  501. package/esm2022/lib/services/lexis-nexis/lexis.nexis.service.mjs +0 -60
  502. package/esm2022/lib/services/ovp/ovp.service.mjs +0 -43
  503. package/lib/components/lexis-nexis/lexis-nexis.component.d.ts +0 -59
  504. package/lib/components/lexis-nexis/lexis-nexis.component.d.ts.map +0 -1
  505. package/lib/components/mfa2/mfa2.component.d.ts +0 -48
  506. package/lib/components/mfa2/mfa2.component.d.ts.map +0 -1
  507. package/lib/components/security-question/security-question.component.d.ts +0 -37
  508. package/lib/components/security-question/security-question.component.d.ts.map +0 -1
  509. package/lib/models/LexisNexisAccountCreationModel.d.ts +0 -15
  510. package/lib/models/LexisNexisAccountCreationModel.d.ts.map +0 -1
  511. package/lib/models/LexisNexisAuthSelectionRequestModel.d.ts +0 -16
  512. package/lib/models/LexisNexisAuthSelectionRequestModel.d.ts.map +0 -1
  513. package/lib/models/LexisNexisAuthSelectionResponseModel.d.ts +0 -39
  514. package/lib/models/LexisNexisAuthSelectionResponseModel.d.ts.map +0 -1
  515. package/lib/models/LexisNexisEnabledResponseModel.d.ts +0 -5
  516. package/lib/models/LexisNexisEnabledResponseModel.d.ts.map +0 -1
  517. package/lib/models/LexisNexisResponseModel.d.ts +0 -7
  518. package/lib/models/LexisNexisResponseModel.d.ts.map +0 -1
  519. package/lib/models/PartialEmploymentModel.d.ts +0 -6
  520. package/lib/models/PartialEmploymentModel.d.ts.map +0 -1
  521. package/lib/models/SecurityQuestionModel.d.ts +0 -7
  522. package/lib/models/SecurityQuestionModel.d.ts.map +0 -1
  523. package/lib/services/claimant-service/claimant-usps-redirect.service.d.ts +0 -16
  524. package/lib/services/claimant-service/claimant-usps-redirect.service.d.ts.map +0 -1
  525. package/lib/services/lexis-nexis/lexis.nexis.service.d.ts +0 -26
  526. package/lib/services/lexis-nexis/lexis.nexis.service.d.ts.map +0 -1
  527. package/lib/services/ovp/ovp.service.d.ts +0 -17
  528. package/lib/services/ovp/ovp.service.d.ts.map +0 -1
@@ -5,20 +5,21 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "./question.service";
6
6
  import * as i2 from "../../services/questionnaire/validation.service";
7
7
  import * as i3 from "../../services/util/util.service";
8
- import * as i4 from "@ionic/angular";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "primeng/api";
11
- import * as i7 from "@angular/forms";
12
- import * as i8 from "primeng/autocomplete";
13
- import * as i9 from "primeng/dialog";
14
- import * as i10 from "primeng/password";
15
- import * as i11 from "primeng/inputtext";
16
- import * as i12 from "primeng/inputmask";
17
- import * as i13 from "primeng/calendar";
18
- import * as i14 from "primeng/selectbutton";
19
- import * as i15 from "../file-uploader/file-uploader.component";
20
- import * as i16 from "../overlay-info/overlay-info.component";
21
- import * as i17 from "../money-expect/money-expect.component";
8
+ import * as i4 from "../../services/logger/logger.service";
9
+ import * as i5 from "@ionic/angular";
10
+ import * as i6 from "@angular/common";
11
+ import * as i7 from "primeng/api";
12
+ import * as i8 from "@angular/forms";
13
+ import * as i9 from "primeng/autocomplete";
14
+ import * as i10 from "primeng/dialog";
15
+ import * as i11 from "primeng/password";
16
+ import * as i12 from "primeng/inputtext";
17
+ import * as i13 from "primeng/inputmask";
18
+ import * as i14 from "primeng/calendar";
19
+ import * as i15 from "primeng/selectbutton";
20
+ import * as i16 from "../file-uploader/file-uploader.component";
21
+ import * as i17 from "../overlay-info/overlay-info.component";
22
+ import * as i18 from "../money-expect/money-expect.component";
22
23
  function DynamicFormPanelComponent_p_dialog_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
23
24
  const _r27 = i0.ɵɵgetCurrentView();
24
25
  i0.ɵɵelementStart(0, "ion-button", 10);
@@ -129,7 +130,7 @@ function DynamicFormPanelComponent_div_8_Template(rf, ctx) { if (rf & 1) {
129
130
  } if (rf & 2) {
130
131
  const ctx_r7 = i0.ɵɵnextContext();
131
132
  i0.ɵɵadvance(1);
132
- i0.ɵɵproperty("formControlName", ctx_r7.question.name)("id", ctx_r7.question.name)("monthNavigator", true)("yearNavigator", true)("showIcon", true)("minDate", ctx_r7.minDate)("maxDate", ctx_r7.maxDate);
133
+ i0.ɵɵproperty("formControlName", ctx_r7.question.name)("id", ctx_r7.question.name)("monthNavigator", true)("yearNavigator", true)("readonlyInput", true)("showIcon", true)("minDate", ctx_r7.minDate)("maxDate", ctx_r7.maxDate);
133
134
  } }
134
135
  function DynamicFormPanelComponent_div_9_Template(rf, ctx) { if (rf & 1) {
135
136
  i0.ɵɵelementStart(0, "div");
@@ -138,7 +139,7 @@ function DynamicFormPanelComponent_div_9_Template(rf, ctx) { if (rf & 1) {
138
139
  } if (rf & 2) {
139
140
  const ctx_r8 = i0.ɵɵnextContext();
140
141
  i0.ɵɵadvance(1);
141
- i0.ɵɵproperty("formControlName", ctx_r8.question.name)("id", ctx_r8.question.name)("monthNavigator", true)("yearNavigator", true)("inputId", ctx_r8.question.name)("showIcon", true);
142
+ i0.ɵɵproperty("formControlName", ctx_r8.question.name)("id", ctx_r8.question.name)("monthNavigator", true)("yearNavigator", true)("inputId", ctx_r8.question.name)("readonlyInput", true)("showIcon", true);
142
143
  } }
143
144
  function DynamicFormPanelComponent_div_10_Template(rf, ctx) { if (rf & 1) {
144
145
  i0.ɵɵelementStart(0, "div");
@@ -147,7 +148,7 @@ function DynamicFormPanelComponent_div_10_Template(rf, ctx) { if (rf & 1) {
147
148
  } if (rf & 2) {
148
149
  const ctx_r9 = i0.ɵɵnextContext();
149
150
  i0.ɵɵadvance(1);
150
- i0.ɵɵproperty("formControlName", ctx_r9.question.name)("id", ctx_r9.question.name)("monthNavigator", true)("yearNavigator", true)("inputId", ctx_r9.question.name)("maxDate", ctx_r9.maxDate)("showIcon", true);
151
+ i0.ɵɵproperty("formControlName", ctx_r9.question.name)("id", ctx_r9.question.name)("monthNavigator", true)("yearNavigator", true)("inputId", ctx_r9.question.name)("maxDate", ctx_r9.maxDate)("readonlyInput", true)("showIcon", true);
151
152
  } }
152
153
  function DynamicFormPanelComponent_div_11_Template(rf, ctx) { if (rf & 1) {
153
154
  const _r35 = i0.ɵɵgetCurrentView();
@@ -157,7 +158,7 @@ function DynamicFormPanelComponent_div_11_Template(rf, ctx) { if (rf & 1) {
157
158
  } if (rf & 2) {
158
159
  const ctx_r10 = i0.ɵɵnextContext();
159
160
  i0.ɵɵadvance(1);
160
- i0.ɵɵproperty("formControlName", ctx_r10.question.name)("id", ctx_r10.question.name)("monthNavigator", true)("yearNavigator", true)("inputId", ctx_r10.question.name)("minDate", ctx_r10.minDate)("showIcon", true);
161
+ i0.ɵɵproperty("formControlName", ctx_r10.question.name)("id", ctx_r10.question.name)("monthNavigator", true)("yearNavigator", true)("inputId", ctx_r10.question.name)("minDate", ctx_r10.minDate)("readonlyInput", true)("showIcon", true);
161
162
  } }
162
163
  function DynamicFormPanelComponent_div_12_div_3_Template(rf, ctx) { if (rf & 1) {
163
164
  i0.ɵɵelementStart(0, "div", 24);
@@ -570,20 +571,21 @@ function DynamicFormPanelComponent_small_26_Template(rf, ctx) { if (rf & 1) {
570
571
  i0.ɵɵtextInterpolate(ctx_r24.isValid);
571
572
  } }
572
573
  export class DynamicFormPanelComponent {
573
- constructor(service, validationService, util, questionService, navController) {
574
+ constructor(service, validationService, util, questionService, logger, navController) {
574
575
  this.service = service;
575
576
  this.validationService = validationService;
576
577
  this.util = util;
577
578
  this.questionService = questionService;
579
+ this.logger = logger;
578
580
  this.navController = navController;
579
581
  this.dropdownValueBs = new Map();
580
582
  this.filteredBs = new Map();
581
583
  this.returnModel = new ValidationModel();
582
584
  }
583
585
  ngOnInit() {
584
- // console.log('is DynamicFormQuestionComponent ngOnInit called', this.question)
586
+ // this.logger.debug('is DynamicFormQuestionComponent ngOnInit called', this.question)
585
587
  if (this.question.inputType === 'date') {
586
- console.log('Date ', this.question);
588
+ //this.logger.debug('Date ', this.question);
587
589
  if (this.question.max) {
588
590
  this.parseDate(this.question.max, 'max');
589
591
  }
@@ -593,7 +595,7 @@ export class DynamicFormPanelComponent {
593
595
  }
594
596
  }
595
597
  get isValid() {
596
- // console.log('isValid is callled');
598
+ // this.logger.debug('isValid is callled');
597
599
  let message = "";
598
600
  let questionType = this.question.type;
599
601
  if ('html' === questionType || ('button' === questionType && !this.question.validators) || 'simpleLabel' === questionType || 'displaytextaslabel' === questionType) {
@@ -601,25 +603,25 @@ export class DynamicFormPanelComponent {
601
603
  }
602
604
  if (this.question && this.question.name && this.form && this.form.controls[this.question.name].errors?.required
603
605
  && (this.form.controls[this.question.name].dirty || this.form.controls[this.question.name].touched)) {
604
- //console.log('errors?.required',this.question)
606
+ //this.logger.debug('errors?.required',this.question)
605
607
  this.form.controls[this.question.name].markAsDirty();
606
608
  return this.question.requiredErrorText;
607
609
  }
608
610
  // if (this.question && this.question.name && this.form && this.form.controls[this.question.name].errors?.maxlength && (this.form.controls[this.question.name].dirty || this.form.controls[this.question.name].touched)) {
609
- // ///console.log('errors?.maxLength',this.question)
611
+ // ///this.logger.debug('errors?.maxLength',this.question)
610
612
  // this.form.controls[this.question.name].markAsDirty();
611
613
  // return this.question.description;
612
614
  // }
613
615
  if (this.question && this.question.name && this.form && this.form.controls[this.question.name].errors?.pattern
614
616
  && (this.form.controls[this.question.name].dirty || this.form.controls[this.question.name].touched)) {
615
- // console.log('errors?.pattern',this.question)
617
+ // this.logger.debug('errors?.pattern',this.question)
616
618
  let validatorList = this.question.validators;
617
619
  var keepGoing = true;
618
620
  validatorList.forEach(validator => {
619
- // console.log('validator.type ', validator.type)
621
+ // this.logger.debug('validator.type ', validator.type)
620
622
  if (keepGoing) {
621
623
  if (validator.type === 'regex') {
622
- // console.log('validator.text ', validator.text)
624
+ // this.logger.debug('validator.text ', validator.text)
623
625
  message = validator.text;
624
626
  this.form.controls[this.question.name].markAsDirty();
625
627
  }
@@ -638,7 +640,7 @@ export class DynamicFormPanelComponent {
638
640
  validatorList.forEach(validator => {
639
641
  if (keepGoing) {
640
642
  if (validator.type === 'expression') {
641
- // console.log('validator.text ', validator.text)
643
+ // this.logger.debug('validator.text ', validator.text)
642
644
  message = validator.text;
643
645
  this.form.controls[this.question.name].markAsDirty();
644
646
  keepGoing = false;
@@ -657,9 +659,9 @@ export class DynamicFormPanelComponent {
657
659
  let message = "";
658
660
  validatorList.forEach(validator => {
659
661
  if (keepGoing) {
660
- // console.log('validator.type.minlength ', validator.type)
662
+ // this.logger.debug('validator.type.minlength ', validator.type)
661
663
  if (validator.type === 'expression') {
662
- // console.log('validator.text ', validator.text)
664
+ // this.logger.debug('validator.text ', validator.text)
663
665
  message = validator.text;
664
666
  this.form.controls[this.question.name].markAsDirty();
665
667
  keepGoing = false;
@@ -674,14 +676,14 @@ export class DynamicFormPanelComponent {
674
676
  if (this.question && this.question.name && this.form && this.form.controls[this.question.name].errors?.minlength
675
677
  && (this.form.controls[this.question.name].dirty || this.form.controls[this.question.name].touched)) {
676
678
  let validatorList = this.question.validators;
677
- // console.log('MinLength')
679
+ // this.logger.debug('MinLength')
678
680
  var keepGoing = true;
679
681
  let message = "";
680
682
  validatorList.forEach(validator => {
681
683
  if (keepGoing) {
682
- // console.log('validator.type.minlength ', validator.type)
684
+ // this.logger.debug('validator.type.minlength ', validator.type)
683
685
  if (validator.type === 'text') {
684
- // console.log('validator.text ', validator.text)
686
+ // this.logger.debug('validator.text ', validator.text)
685
687
  message = validator.text;
686
688
  this.form.controls[this.question.name].markAsDirty();
687
689
  keepGoing = false;
@@ -700,9 +702,9 @@ export class DynamicFormPanelComponent {
700
702
  let message = "";
701
703
  validatorList.forEach(validator => {
702
704
  if (keepGoing) {
703
- // console.log('validator.type.minlength ', validator.type)
705
+ // this.logger.debug('validator.type.minlength ', validator.type)
704
706
  if (validator.type === 'text') {
705
- // console.log('validator.text ', validator.text)
707
+ // this.logger.debug('validator.text ', validator.text)
706
708
  message = validator.text;
707
709
  this.form.controls[this.question.name].markAsDirty();
708
710
  keepGoing = false;
@@ -725,9 +727,9 @@ export class DynamicFormPanelComponent {
725
727
  var keepGoing = true;
726
728
  validatorList.forEach(validator => {
727
729
  if (keepGoing) {
728
- //console.log('validator.type.minlength ', validator.type)
730
+ //this.logger.debug('validator.type.minlength ', validator.type)
729
731
  if (validator.type === 'customvalidation') {
730
- //console.log('validator.text ', validator.text)
732
+ //this.logger.debug('validator.text ', validator.text)
731
733
  message = validator.text;
732
734
  this.form.controls[this.question.name].markAsDirty();
733
735
  keepGoing = false;
@@ -743,19 +745,19 @@ export class DynamicFormPanelComponent {
743
745
  }
744
746
  }
745
747
  setMinDate(dateValue, question) {
746
- console.log('setMinDate called', question.min);
747
- console.log('question.min ', this.form.controls[question.min].value);
748
+ this.logger.debug('setMinDate called', question.min);
749
+ this.logger.debug('question.min ', this.form.controls[question.min].value);
748
750
  let startDateValue = new Date(this.form.controls[question.min].value);
749
751
  //this.minDate = new Date(startDateValue);
750
752
  //this.form.controls[question.name].setValue(null);
751
753
  this.minDate = new Date();
752
- console.log('startDateValue', startDateValue);
754
+ this.logger.debug('startDateValue', startDateValue);
753
755
  this.minDate.setMonth(startDateValue.getMonth());
754
756
  this.minDate.setFullYear(Number(startDateValue.getFullYear()));
755
757
  this.minDate.setDate(Number(startDateValue.getDate()) + 1);
756
758
  }
757
759
  parseDate(strDate, type) {
758
- console.log('is parseDate called', strDate + ' type', type); //05-10-2021
760
+ this.logger.debug('is parseDate called', strDate + ' type', type); //05-10-2021
759
761
  if (strDate && type === 'max') {
760
762
  var splitArray = strDate.split('-');
761
763
  //let date: Date = new Date();
@@ -763,7 +765,7 @@ export class DynamicFormPanelComponent {
763
765
  this.maxDate.setMonth(Number(splitArray[0]) - 1);
764
766
  this.maxDate.setFullYear(Number(splitArray[2]));
765
767
  this.maxDate.setDate(Number(splitArray[1]));
766
- console.log('date', this.maxDate);
768
+ this.logger.debug('date', this.maxDate);
767
769
  return this.maxDate;
768
770
  }
769
771
  if (strDate && type === 'min') {
@@ -773,7 +775,7 @@ export class DynamicFormPanelComponent {
773
775
  this.minDate.setMonth(Number(splitArray[0]) - 1);
774
776
  this.minDate.setFullYear(Number(splitArray[2]));
775
777
  this.minDate.setDate(Number(splitArray[1]));
776
- console.log('date', this.minDate);
778
+ this.logger.debug('date', this.minDate);
777
779
  return this.minDate;
778
780
  }
779
781
  }
@@ -796,17 +798,17 @@ export class DynamicFormPanelComponent {
796
798
  let operand2 = splitArray[1];
797
799
  operand1 = operand1.replace('{', '').replace('}', ''); //claimantPriorPay102 diffmailaddress315
798
800
  operand2 = operand2.replace('{', '').replace('}', ''); //null
799
- // console.log('operand1',operand1,'operand2',operand2,' this.form',this.form.controls['city315']);
801
+ // this.logger.debug('operand1',operand1,'operand2',operand2,' this.form',this.form.controls['city315']);
800
802
  if (this.form.controls['operand1']) {
801
803
  var valueOfCnrtrlToCheck = this.form.controls[operand1].value;
802
- //console.log('valueOfCnrtrlToCheck', valueOfCnrtrlToCheck);
804
+ //this.logger.debug('valueOfCnrtrlToCheck', valueOfCnrtrlToCheck);
803
805
  if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck) {
804
806
  return true;
805
807
  }
806
808
  if (operand2 === 'null' && !isDoesNotEqual && !valueOfCnrtrlToCheck) {
807
809
  return true;
808
810
  }
809
- console.log('this.form.controls[operand1]', this.form.controls[operand1]);
811
+ this.logger.debug('this.form.controls[operand1]', this.form.controls[operand1]);
810
812
  if (this.form.controls[operand1]) {
811
813
  this.form.controls[operand1].setValue(null);
812
814
  }
@@ -831,12 +833,12 @@ export class DynamicFormPanelComponent {
831
833
  this.dropdownValueBs.set(parentControl, bs);
832
834
  }
833
835
  parentControl.valueChanges.subscribe(value => {
834
- // console.log('parentControl', parentControl);
835
- // console.log('value', value);
836
+ // this.logger.debug('parentControl', parentControl);
837
+ // this.logger.debug('value', value);
836
838
  let currentBs = this.dropdownValueBs.get(parentControl);
837
839
  if (value) {
838
840
  if (serviceCallType === 'GET') {
839
- // console.log('Inside GET');
841
+ // this.logger.debug('Inside GET');
840
842
  this.validationService
841
843
  .get(`${serviceName}${value}/${serviceUpdateParam}`)
842
844
  .subscribe(res => {
@@ -875,14 +877,14 @@ export class DynamicFormPanelComponent {
875
877
  let serviceName = element.serviceName; ///security-service/validateSSN/
876
878
  let serviceUpdateParam = element.serviceUpdateParam;
877
879
  let allValuePresent = true;
878
- // console.log('serviceCallParam',serviceCallParam);
880
+ // this.logger.debug('serviceCallParam',serviceCallParam);
879
881
  if (serviceCallParam) {
880
882
  var splitted = serviceCallParam.split(",");
881
883
  let valueArr = [];
882
884
  let paramArr = [];
883
885
  for (let i = 0; i < splitted.length; i++) {
884
886
  //use i instead of 0 dob320
885
- // console.log('dob320',this.form.controls['dob320'].value);
887
+ // this.logger.debug('dob320',this.form.controls['dob320'].value);
886
888
  if (this.form.controls[splitted[i]].value) {
887
889
  paramArr.push(splitted[i]);
888
890
  valueArr.push(this.form.controls[splitted[i]].value);
@@ -891,14 +893,14 @@ export class DynamicFormPanelComponent {
891
893
  allValuePresent = false;
892
894
  }
893
895
  }
894
- // console.log('valueArr12', valueArr, 'paramArr11 ', paramArr, ' element', element);
896
+ // this.logger.debug('valueArr12', valueArr, 'paramArr11 ', paramArr, ' element', element);
895
897
  var model = {};
896
898
  model.paramName = paramArr;
897
899
  model.paramValue = valueArr;
898
900
  // return this.post(`questionnaire/screen-questionnaire`, questionnaireData);
899
901
  if (allValuePresent) {
900
902
  if (serviceCallType === 'POST') {
901
- // console.log('Inside GET');
903
+ // this.logger.debug('Inside GET');
902
904
  this.validationService
903
905
  .post(`${serviceName}`, model)
904
906
  .subscribe(res => {
@@ -911,7 +913,7 @@ export class DynamicFormPanelComponent {
911
913
  this.popUpYesActionLabel = this.returnModel.popUpYesButtonLabel;
912
914
  this.popUpNoActionLabel = this.returnModel.popUpNoButtonLabel;
913
915
  }
914
- console.log('this.returnModel ', this.returnModel);
916
+ this.logger.debug('this.returnModel ', this.returnModel);
915
917
  }, err => {
916
918
  this.util.hideLoader();
917
919
  this.util.errorHandler(err);
@@ -921,7 +923,7 @@ export class DynamicFormPanelComponent {
921
923
  }
922
924
  }
923
925
  accept() {
924
- //console.log('accept called123', this.returnModel.identifier)
926
+ //this.logger.debug('accept called123', this.returnModel.identifier)
925
927
  let modelArr = this.returnModel.identifier;
926
928
  let paramArray = [];
927
929
  for (var val of modelArr) {
@@ -931,11 +933,11 @@ export class DynamicFormPanelComponent {
931
933
  this.navController.navigateRoot([this.returnModel.yesAction], { queryParams: params });
932
934
  }
933
935
  reject() {
934
- //console.log('Reject called')
936
+ //this.logger.debug('Reject called')
935
937
  this.navController.navigateRoot(this.returnModel.noAction);
936
938
  }
937
939
  filterValue(event, element) {
938
- // console.log('filterValue called', event, ' element', element);
940
+ // this.logger.debug('filterValue called', event, ' element', element);
939
941
  if (!element.serviceName) {
940
942
  let bs = new BehaviorSubject([]);
941
943
  let query = event.query;
@@ -956,7 +958,7 @@ export class DynamicFormPanelComponent {
956
958
  let filtered = [];
957
959
  let existingChoices = this.filteredBs.get(element.name).value;
958
960
  let bs = new BehaviorSubject([]);
959
- //console.log('Inside IF---', bs);
961
+ //this.logger.debug('Inside IF---', bs);
960
962
  for (let i = 0; i < existingChoices.length; i++) {
961
963
  let choice = existingChoices[i];
962
964
  if (choice.text.toLowerCase().indexOf(query.toLowerCase()) == 0) {
@@ -976,9 +978,9 @@ export class DynamicFormPanelComponent {
976
978
  if (parentControl.value) {
977
979
  parentControlVal = parentControl.value['value']; //CA
978
980
  }
979
- //console.log('parentControlVal', parentControlVal);
981
+ //this.logger.debug('parentControlVal', parentControlVal);
980
982
  parentControl.valueChanges.subscribe(value => {
981
- //console.log('parentControlVal value changed');
983
+ //this.logger.debug('parentControlVal value changed');
982
984
  let childControl = this.form.controls[serviceUpdateParam];
983
985
  this.filteredBs = new Map();
984
986
  childControl.setValue(null);
@@ -1014,15 +1016,15 @@ export class DynamicFormPanelComponent {
1014
1016
  }
1015
1017
  }
1016
1018
  clickOption(event) {
1017
- console.log('clickOption called');
1019
+ this.logger.debug('clickOption called');
1018
1020
  }
1019
1021
  onSelect(event, cntrlName) {
1020
- console.log('onSelect--', event.value, cntrlName);
1022
+ this.logger.debug('onSelect--', event.value, cntrlName);
1021
1023
  }
1022
- static { this.ɵfac = function DynamicFormPanelComponent_Factory(t) { return new (t || DynamicFormPanelComponent)(i0.ɵɵdirectiveInject(i1.QuestionService), i0.ɵɵdirectiveInject(i2.ValidationService), i0.ɵɵdirectiveInject(i3.UtilService), i0.ɵɵdirectiveInject(i1.QuestionService), i0.ɵɵdirectiveInject(i4.NavController)); }; }
1023
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DynamicFormPanelComponent, selectors: [["panel-question"]], inputs: { question: "question", form: "form", forScreenQuestionnaire: "forScreenQuestionnaire" }, decls: 27, vars: 26, consts: [[3, "formGroup"], ["appendTo", "body", 3, "header", "visible", "position", "modal", "style", "baseZIndex", "draggable", "resizable", "visibleChange", 4, "ngIf"], ["class", "form-label", 4, "ngIf"], [4, "ngIf"], ["class", "heading", 3, "innerHTML", 4, "ngIf"], [3, "innerHTML", 4, "ngIf"], ["class", "container", "style", "padding: 0px;", 4, "ngIf"], ["class", "p-error", 4, "ngIf"], ["appendTo", "body", 3, "header", "visible", "position", "modal", "baseZIndex", "draggable", "resizable", "visibleChange"], ["pTemplate", "footer"], ["shape", "round", "size", "small", "type", "submit", "fill", "outline", 3, "click"], ["shape", "round", "size", "small", "type", "submit", "fill", "solid", 3, "click"], [1, "form-label"], [3, "form", 4, "ngIf"], [3, "form"], [1, "heading", 3, "innerHTML"], [3, "innerHTML"], ["yearRange", "1901:2050", "dateFormat", "mm-dd-yy", "inputId", "navigators", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "showIcon", "minDate", "maxDate"], ["dateFormat", "mm-dd-yy", "yearRange", "1901:2050", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "inputId", "showIcon"], ["dateFormat", "mm-dd-yy", "yearRange", "1901:2050", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "inputId", "maxDate", "showIcon"], ["dateFormat", "mm-dd-yy", "yearRange", "1901:2050", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "inputId", "minDate", "showIcon", "onShow"], [1, "container", 2, "display", "flex"], [3, "id", "formControlName", "toggleMask", "maxLength"], ["style", "flex-grow: 1;", "style", "padding-left: 8px", 4, "ngIf"], [2, "padding-left", "8px"], [3, "overlayText"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength", "blur", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size", "maxLength"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "maxLength"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength", "blur"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "maxLength"], ["type", "text", "pInputText", "", 3, "id", "formControlName"], ["mask", "999 999-9999", "placeholder", "Optional", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999 999-9999", "placeholder", "999 999-9999", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999 999-9999", "placeholder", "Optional", 3, "id", "formControlName"], ["mask", "999 999-9999", "placeholder", "999 999-9999", 3, "id", "formControlName"], ["mask", "999-99-9999", "placeholder", "999-99-9999", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999-99-9999", "placeholder", "Optional", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999-99-9999", "placeholder", "999-99-9999", 3, "id", "formControlName"], ["mask", "999-99-9999", "placeholder", "Optional", 3, "id", "formControlName"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength"], ["optionLabel", "text", "optionValue", "value", 3, "options", "formControlName", "multiple"], ["appendTo", "body", "dataKey", "value", "field", "text", "minLength", "1", "forceSelection", "true", "type", "text", 3, "formControlName", "suggestions", "dropdown", "size", "completeMethod", "onSelect"], ["pTemplate", "item"], ["appendTo", "body", "dataKey", "value", "field", "text", "minLength", "3", "forceSelection", "true", "type", "text", 3, "formControlName", "suggestions", "dropdown", "completeMethod", "onSelect"], [3, "allowedFileType", "formControlName", "maxSizeInMB", "multiple", "noOfFilesToUpload"], [1, "container", 2, "padding", "0px"], ["optionLabel", "text", "optionValue", "value", 3, "options", "formControlName"], ["type", "hidden", 3, "formControlName"], ["style", "flex-grow: 1;", "style", "padding-left: 2px", 4, "ngIf"], [2, "padding-left", "2px"], [1, "p-error"]], template: function DynamicFormPanelComponent_Template(rf, ctx) { if (rf & 1) {
1024
+ static { this.ɵfac = function DynamicFormPanelComponent_Factory(t) { return new (t || DynamicFormPanelComponent)(i0.ɵɵdirectiveInject(i1.QuestionService), i0.ɵɵdirectiveInject(i2.ValidationService), i0.ɵɵdirectiveInject(i3.UtilService), i0.ɵɵdirectiveInject(i1.QuestionService), i0.ɵɵdirectiveInject(i4.LoggerService), i0.ɵɵdirectiveInject(i5.NavController)); }; }
1025
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DynamicFormPanelComponent, selectors: [["panel-question"]], inputs: { question: "question", form: "form", forScreenQuestionnaire: "forScreenQuestionnaire" }, decls: 27, vars: 26, consts: [[3, "formGroup"], ["appendTo", "body", 3, "header", "visible", "position", "modal", "style", "baseZIndex", "draggable", "resizable", "visibleChange", 4, "ngIf"], ["class", "form-label", 4, "ngIf"], [4, "ngIf"], ["class", "heading", 3, "innerHTML", 4, "ngIf"], [3, "innerHTML", 4, "ngIf"], ["class", "container", "style", "padding: 0px;", 4, "ngIf"], ["class", "p-error", 4, "ngIf"], ["appendTo", "body", 3, "header", "visible", "position", "modal", "baseZIndex", "draggable", "resizable", "visibleChange"], ["pTemplate", "footer"], ["shape", "round", "size", "small", "type", "submit", "fill", "outline", 3, "click"], ["shape", "round", "size", "small", "type", "submit", "fill", "solid", 3, "click"], [1, "form-label"], [3, "form", 4, "ngIf"], [3, "form"], [1, "heading", 3, "innerHTML"], [3, "innerHTML"], ["yearRange", "1901:2050", "dateFormat", "mm-dd-yy", "inputId", "navigators", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "readonlyInput", "showIcon", "minDate", "maxDate"], ["dateFormat", "mm-dd-yy", "yearRange", "1901:2050", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "inputId", "readonlyInput", "showIcon"], ["dateFormat", "mm-dd-yy", "yearRange", "1901:2050", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "inputId", "maxDate", "readonlyInput", "showIcon"], ["dateFormat", "mm-dd-yy", "yearRange", "1901:2050", "dataType", "string", "appendTo", "body", 3, "formControlName", "id", "monthNavigator", "yearNavigator", "inputId", "minDate", "readonlyInput", "showIcon", "onShow"], [1, "container", 2, "display", "flex"], [3, "id", "formControlName", "toggleMask", "maxLength"], ["style", "flex-grow: 1;", "style", "padding-left: 8px", 4, "ngIf"], [2, "padding-left", "8px"], [3, "overlayText"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength", "blur", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", 4, "ngIf"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size", "maxLength"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "size"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName", "maxLength"], ["type", "text", "pInputText", "", "placeholder", "Optional", 3, "id", "formControlName"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength", "blur"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "maxLength"], ["type", "text", "pInputText", "", 3, "id", "formControlName"], ["mask", "999 999-9999", "placeholder", "Optional", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999 999-9999", "placeholder", "999 999-9999", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999 999-9999", "placeholder", "Optional", 3, "id", "formControlName"], ["mask", "999 999-9999", "placeholder", "999 999-9999", 3, "id", "formControlName"], ["mask", "999-99-9999", "placeholder", "999-99-9999", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999-99-9999", "placeholder", "Optional", 3, "id", "formControlName", 4, "ngIf"], ["mask", "999-99-9999", "placeholder", "999-99-9999", 3, "id", "formControlName"], ["mask", "999-99-9999", "placeholder", "Optional", 3, "id", "formControlName"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength", 4, "ngIf"], ["type", "text", "pInputText", "", 3, "id", "formControlName", "size", "maxLength"], ["optionLabel", "text", "optionValue", "value", 3, "options", "formControlName", "multiple"], ["appendTo", "body", "dataKey", "value", "field", "text", "minLength", "1", "forceSelection", "true", "type", "text", 3, "formControlName", "suggestions", "dropdown", "size", "completeMethod", "onSelect"], ["pTemplate", "item"], ["appendTo", "body", "dataKey", "value", "field", "text", "minLength", "3", "forceSelection", "true", "type", "text", 3, "formControlName", "suggestions", "dropdown", "completeMethod", "onSelect"], [3, "allowedFileType", "formControlName", "maxSizeInMB", "multiple", "noOfFilesToUpload"], [1, "container", 2, "padding", "0px"], ["optionLabel", "text", "optionValue", "value", 3, "options", "formControlName"], ["type", "hidden", 3, "formControlName"], ["style", "flex-grow: 1;", "style", "padding-left: 2px", 4, "ngIf"], [2, "padding-left", "2px"], [1, "p-error"]], template: function DynamicFormPanelComponent_Template(rf, ctx) { if (rf & 1) {
1024
1026
  i0.ɵɵelementStart(0, "div", 0);
1025
- i0.ɵɵtemplate(1, DynamicFormPanelComponent_p_dialog_1_Template, 4, 11, "p-dialog", 1)(2, DynamicFormPanelComponent_div_2_Template, 2, 1, "div", 2)(3, DynamicFormPanelComponent_div_3_Template, 2, 1, "div", 2)(4, DynamicFormPanelComponent_div_4_Template, 2, 1, "div", 2)(5, DynamicFormPanelComponent_div_5_Template, 3, 2, "div", 3)(6, DynamicFormPanelComponent_div_6_Template, 1, 1, "div", 4)(7, DynamicFormPanelComponent_div_7_Template, 1, 1, "div", 5)(8, DynamicFormPanelComponent_div_8_Template, 2, 7, "div", 3)(9, DynamicFormPanelComponent_div_9_Template, 2, 6, "div", 3)(10, DynamicFormPanelComponent_div_10_Template, 2, 7, "div", 3)(11, DynamicFormPanelComponent_div_11_Template, 2, 7, "div", 3)(12, DynamicFormPanelComponent_div_12_Template, 4, 5, "div", 3)(13, DynamicFormPanelComponent_div_13_Template, 4, 5, "div", 3)(14, DynamicFormPanelComponent_div_14_Template, 11, 9, "div", 3)(15, DynamicFormPanelComponent_div_15_Template, 7, 5, "div", 3)(16, DynamicFormPanelComponent_div_16_Template, 5, 3, "div", 3)(17, DynamicFormPanelComponent_div_17_Template, 5, 3, "div", 3)(18, DynamicFormPanelComponent_div_18_Template, 7, 5, "div", 3)(19, DynamicFormPanelComponent_div_19_Template, 2, 3, "div", 3)(20, DynamicFormPanelComponent_div_20_Template, 5, 6, "div", 3)(21, DynamicFormPanelComponent_div_21_Template, 4, 5, "div", 3)(22, DynamicFormPanelComponent_div_22_Template, 2, 5, "div", 3)(23, DynamicFormPanelComponent_div_23_Template, 4, 3, "div", 6)(24, DynamicFormPanelComponent_div_24_Template, 6, 3, "div", 6);
1027
+ i0.ɵɵtemplate(1, DynamicFormPanelComponent_p_dialog_1_Template, 4, 11, "p-dialog", 1)(2, DynamicFormPanelComponent_div_2_Template, 2, 1, "div", 2)(3, DynamicFormPanelComponent_div_3_Template, 2, 1, "div", 2)(4, DynamicFormPanelComponent_div_4_Template, 2, 1, "div", 2)(5, DynamicFormPanelComponent_div_5_Template, 3, 2, "div", 3)(6, DynamicFormPanelComponent_div_6_Template, 1, 1, "div", 4)(7, DynamicFormPanelComponent_div_7_Template, 1, 1, "div", 5)(8, DynamicFormPanelComponent_div_8_Template, 2, 8, "div", 3)(9, DynamicFormPanelComponent_div_9_Template, 2, 7, "div", 3)(10, DynamicFormPanelComponent_div_10_Template, 2, 8, "div", 3)(11, DynamicFormPanelComponent_div_11_Template, 2, 8, "div", 3)(12, DynamicFormPanelComponent_div_12_Template, 4, 5, "div", 3)(13, DynamicFormPanelComponent_div_13_Template, 4, 5, "div", 3)(14, DynamicFormPanelComponent_div_14_Template, 11, 9, "div", 3)(15, DynamicFormPanelComponent_div_15_Template, 7, 5, "div", 3)(16, DynamicFormPanelComponent_div_16_Template, 5, 3, "div", 3)(17, DynamicFormPanelComponent_div_17_Template, 5, 3, "div", 3)(18, DynamicFormPanelComponent_div_18_Template, 7, 5, "div", 3)(19, DynamicFormPanelComponent_div_19_Template, 2, 3, "div", 3)(20, DynamicFormPanelComponent_div_20_Template, 5, 6, "div", 3)(21, DynamicFormPanelComponent_div_21_Template, 4, 5, "div", 3)(22, DynamicFormPanelComponent_div_22_Template, 2, 5, "div", 3)(23, DynamicFormPanelComponent_div_23_Template, 4, 3, "div", 6)(24, DynamicFormPanelComponent_div_24_Template, 6, 3, "div", 6);
1026
1028
  i0.ɵɵelementStart(25, "div");
1027
1029
  i0.ɵɵtemplate(26, DynamicFormPanelComponent_small_26_Template, 2, 1, "small", 7);
1028
1030
  i0.ɵɵelementEnd()();
@@ -1078,17 +1080,17 @@ export class DynamicFormPanelComponent {
1078
1080
  i0.ɵɵproperty("ngIf", ctx.question.type && ctx.question.type === "displaytextaslabel");
1079
1081
  i0.ɵɵadvance(2);
1080
1082
  i0.ɵɵproperty("ngIf", ctx.isValid != "");
1081
- } }, dependencies: [i4.IonButton, i5.NgIf, i6.PrimeTemplate, i7.DefaultValueAccessor, i7.NgControlStatus, i7.NgControlStatusGroup, i7.FormGroupDirective, i7.FormControlName, i8.AutoComplete, i9.Dialog, i10.Password, i11.InputText, i12.InputMask, i13.Calendar, i14.SelectButton, i15.FileUploaderComponent, i16.OverlayInfoComponent, i17.MoneyExpectComponent, i5.AsyncPipe], styles: [".form-label{display:inline-block;margin-bottom:6px;margin-top:20px}\n"], encapsulation: 2 }); }
1083
+ } }, dependencies: [i5.IonButton, i6.NgIf, i7.PrimeTemplate, i8.DefaultValueAccessor, i8.NgControlStatus, i8.NgControlStatusGroup, i8.FormGroupDirective, i8.FormControlName, i9.AutoComplete, i10.Dialog, i11.Password, i12.InputText, i13.InputMask, i14.Calendar, i15.SelectButton, i16.FileUploaderComponent, i17.OverlayInfoComponent, i18.MoneyExpectComponent, i6.AsyncPipe], styles: [".form-label{display:inline-block;margin-bottom:6px;margin-top:20px}\n"], encapsulation: 2 }); }
1082
1084
  }
1083
1085
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DynamicFormPanelComponent, [{
1084
1086
  type: Component,
1085
- args: [{ selector: 'panel-question', encapsulation: ViewEncapsulation.None, template: "<div [formGroup]=\"form\">\r\n\r\n\r\n <p-dialog [header]=\"popUpHeader\" *ngIf=\"displayPosition\" [(visible)]=\"displayPosition\" [position]=\"position\" [modal]=\"true\" [style]=\"{width: '80vw'}\" [baseZIndex]=\"5000\"\r\n [draggable]=\"false\" [resizable]=\"false\" appendTo=\"body\">\r\n \r\n <p>{{popUpText}}\r\n </p>\r\n <ng-template pTemplate=\"footer\">\r\n <ion-button shape=\"round\" \r\n size=\"small\" type=\"submit\"\r\n fill=\"outline\" (click)=\"reject()\"> \r\n {{popUpNoActionLabel}}\r\n </ion-button>\r\n\r\n <ion-button shape=\"round\" \r\n size=\"small\" type=\"submit\"\r\n fill=\"solid\" (click)=\"accept()\" >\r\n {{popUpYesActionLabel}}\r\n </ion-button>\r\n \r\n </ng-template>\r\n </p-dialog> \r\n\r\n\r\n <div *ngIf=\"!forScreenQuestionnaire\" class=\"form-label\">\r\n <label [attr.for]=\"question.name\" *ngIf=\"question.indent===1 && question.type!='html'\">\r\n {{question.title}}</label>\r\n </div>\r\n <div\r\n *ngIf=\"forScreenQuestionnaire && question.indent===1 && question.type!='html' && question.type!='simpleLabel' && question.customTag!='component'\"\r\n class=\"form-label\">\r\n {{question.title}}\r\n \r\n </div>\r\n\r\n <div\r\n *ngIf=\"question.indent!=1 && question.type!='html' && question.customTag && !question.customTag.includes('fmtnumbertext')\"\r\n class=\"form-label\">\r\n {{question.title}}\r\n \r\n </div>\r\n\r\n\r\n <div *ngIf=\"forScreenQuestionnaire && question.customTag && question.customTag==='component' && question.indent===1 && question.type!='html' \r\n && !question.description\">\r\n <money-expect *ngIf=\"question.componentName==='money-expect'\"></money-expect>\r\n<!-- <app-search-employer *ngIf=\"question.componentName==='app-search-employer'\" (onEmpty)=\"resetEmployer($event)\" (onFound)=\"setEmployer($event)\" [formControlName]=\"question.name\"></app-search-employer> -->\r\n<app-regular-employer-date *ngIf=\"question.componentName==='app-regular-emp-date'\" [form]=\"form\"></app-regular-employer-date>\r\n\r\n</div> \r\n\r\n <div *ngIf=\"question.type==='html'\" [innerHTML]=\"question.html\" class=\"heading\">\r\n </div>\r\n <div *ngIf=\"question.type==='simpleLabel'\" [innerHTML]=\"question.html\">\r\n </div>\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && question.max && question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n yearRange=\"1901:2050\" [showIcon]=\"true\" [minDate]=\"minDate\" [maxDate]=\"maxDate\"\r\n dateFormat=\"mm-dd-yy\" inputId=\"navigators\" dataType=\"string\" appendTo=\"body\" \r\n >\r\n </p-calendar>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && !question.max && !question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n [inputId]=\"question.name\" [showIcon]=\"true\" dateFormat=\"mm-dd-yy\" yearRange=\"1901:2050\"\r\n dataType=\"string\" appendTo=\"body\"></p-calendar>\r\n </div>\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && question.max && !question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n [inputId]=\"question.name\" [maxDate]=\"maxDate\" [showIcon]=\"true\" dateFormat=\"mm-dd-yy\"\r\n yearRange=\"1901:2050\" dataType=\"string\" appendTo=\"body\"></p-calendar>\r\n </div>\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && !question.max && question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n [inputId]=\"question.name\" [minDate]=\"minDate\" [showIcon]=\"true\" dateFormat=\"mm-dd-yy\"\r\n yearRange=\"1901:2050\" dataType=\"string\" appendTo=\"body\" (onShow)=\"setMinDate($event,question)\"></p-calendar>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('password') && !question.name.includes('confpwd')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-password [id]=\"question.name\" [formControlName]=\"question.name\" [toggleMask]=\"true\"\r\n [maxLength]=\"question.maxLength\"></p-password>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"question.customTag && question.customTag.includes('password') && question.name.includes('confpwd')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-password [id]=\"question.name\" [formControlName]=\"question.name\" [toggleMask]=\"true\"\r\n [maxLength]=\"question.maxLength\"></p-password>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"!question.customTag && question.type && (question.type!='radiogroup' && question.type!='displaytextaslabel')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" [maxLength]=\"question.maxLength\" />\r\n \r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" />\r\n \r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" [maxLength]=\"question.maxLength\" (blur)=\"validate(question)\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\" />\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.customTag && question.type && question.customTag.includes('Optional')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" [maxLength]=\"question.maxLength\" />\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" />\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('phone')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-inputMask mask=\"999 999-9999\" [id]=\"question.name\" [formControlName]=\"question.name\" placeholder=\"Optional\"\r\n *ngIf=\"question.inputType && question.inputType==='text' && !question.isRequired\"></p-inputMask>\r\n \r\n <p-inputMask mask=\"999 999-9999\" [id]=\"question.name\" [formControlName]=\"question.name\" placeholder=\"999 999-9999\"\r\n *ngIf=\"question.inputType && question.inputType==='text' && question.isRequired\"></p-inputMask>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('ssn')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-inputMask mask=\"999-99-9999\" [id]=\"question.name\" *ngIf=\"question.isRequired\" [formControlName]=\"question.name\"\r\n placeholder=\"999-99-9999\">\r\n </p-inputMask>\r\n \r\n <p-inputMask mask=\"999-99-9999\" [id]=\"question.name\" *ngIf=\"!question.isRequired\"\r\n [formControlName]=\"question.name\" placeholder=\"Optional\">\r\n </p-inputMask>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && !question.customTag.includes('phone') \r\n && !question.customTag.includes('password') && !question.customTag.includes('ssn')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\" />\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- && visibleIf(question.visibleIf) -->\r\n <div *ngIf=\"question.type && question.type==='singleselectcheckbox'\">\r\n <!-- <div [ngStyle]=\"setStyle(question.indent)\"> -->\r\n <p-selectButton [options]=\"question.choices\" [formControlName]=\"question.name\" [multiple]=false\r\n optionLabel=\"text\" optionValue=\"value\" ></p-selectButton>\r\n <!-- </div> -->\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.type && question.type==='dropdown' && question.size\"> \r\n <!-- <div class=\"flex-child\"> \r\n <p-dropdown [id]=\"question.name\" *ngIf=\"question.choices.length>3\" \r\n [formControlName]=\"question.name\" placeholder=\" \" [options]=\" getDependentDropdownData(question)| async\"\r\n optionLabel=\"text\" optionValue=\"value\" [style]=\"{'width':'200px','height':'35px'}\" [filter]=\"true\" filterBy=\"text\"\r\n >\r\n </p-dropdown>\r\n\r\n \r\n <p-dropdown [id]=\"question.name\" *ngIf=\"question.choices.length<=3\" editable=\"true\" filter=\"true\" filterBy=\"text\"\r\n [formControlName]=\"question.name\" placeholder=\" \" [options]=\" getDependentDropdownData(question)| async\"\r\n optionLabel=\"text\" optionValue=\"value\" [style]=\"{'width':'200px','height':'35px'}\">\r\n </p-dropdown>\r\n </div> -->\r\n\r\n <!-- <p-autoComplete [formControlName]=\"question.name\" [suggestions]=\"getDependentDropdownData(question)| async\" appendTo=\"body\"\r\n (completeMethod)=\"filterValue($event,question.choices,question.name)\" field=\"text\" [dropdown]=\"true\" \r\n minLength = 3 forceSelection=\"true\" [show]=\"getDependentDropdownData(question)| async\"\r\n > -->\r\n <div > \r\n \r\n <p-autoComplete [formControlName]=\"question.name\" appendTo=\"body\" [suggestions]=\"filteredBs.get(question.name)| async\"\r\n (completeMethod)=\"filterValue($event,question)\" dataKey =\"value\" field=\"text\" [dropdown]=\"true\" [size]=\"question.size\"\r\n minLength = 1 forceSelection=\"true\" type=\"text\" (onSelect)=\"onSelect($event,question.name)\"> \r\n\r\n <ng-template let-value pTemplate=\"item\">\r\n <div>\r\n <div>{{value.text}}</div>\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n</div>\r\n\r\n <!-- <div *ngIf=\"question.description\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div> -->\r\n </div>\r\n \r\n <div *ngIf=\"question.type && question.type==='dropdown' && !question.size\">\r\n <p-autoComplete [formControlName]=\"question.name\" appendTo=\"body\"\r\n [suggestions]=\"filteredBs.get(question.name)| async\" (completeMethod)=\"filterValue($event,question)\"\r\n dataKey=\"value\" field=\"text\" [dropdown]=\"true\" minLength=3 forceSelection=\"true\" type=\"text\" (onSelect)=\"onSelect($event,question.name)\">\r\n <ng-template let-value pTemplate=\"item\">\r\n <div>\r\n <div>{{value.text}}</div>\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('fileupload')\">\r\n <app-file-uploader [allowedFileType]=\"question.allowedFileType\" [formControlName]=\"question.name\"\r\n [maxSizeInMB]=\"question.sizeInMB\" [multiple]=\"question.multiple\" [noOfFilesToUpload]=\"question.noOFFiles\" ></app-file-uploader>\r\n </div>\r\n\r\n\r\n <div class=\"container\" style=\"padding: 0px;\" *ngIf=\"question.type && question.type==='radiogroup'\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-selectButton [options]=\"question.choices\" [formControlName]=\"question.name\" optionLabel=\"text\"\r\n optionValue=\"value\"></p-selectButton>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"container\" style=\"padding: 0px;\" *ngIf=\"question.type && question.type==='displaytextaslabel'\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <label>{{form.controls[question.name].value}}</label>\r\n <input type=\"hidden\" [formControlName]=\"question.name\"/>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 2px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div>\r\n <small class=\"p-error\" *ngIf=\"isValid!=''\">{{isValid}}</small>\r\n </div>\r\n</div>", styles: [".form-label{display:inline-block;margin-bottom:6px;margin-top:20px}\n"] }]
1086
- }], () => [{ type: i1.QuestionService }, { type: i2.ValidationService }, { type: i3.UtilService }, { type: i1.QuestionService }, { type: i4.NavController }], { question: [{
1087
+ args: [{ selector: 'panel-question', encapsulation: ViewEncapsulation.None, template: "<div [formGroup]=\"form\">\r\n\r\n\r\n <p-dialog [header]=\"popUpHeader\" *ngIf=\"displayPosition\" [(visible)]=\"displayPosition\" [position]=\"position\" [modal]=\"true\" [style]=\"{width: '80vw'}\" [baseZIndex]=\"5000\"\r\n [draggable]=\"false\" [resizable]=\"false\" appendTo=\"body\">\r\n \r\n <p>{{popUpText}}\r\n </p>\r\n <ng-template pTemplate=\"footer\">\r\n <ion-button shape=\"round\" \r\n size=\"small\" type=\"submit\"\r\n fill=\"outline\" (click)=\"reject()\"> \r\n {{popUpNoActionLabel}}\r\n </ion-button>\r\n\r\n <ion-button shape=\"round\" \r\n size=\"small\" type=\"submit\"\r\n fill=\"solid\" (click)=\"accept()\" >\r\n {{popUpYesActionLabel}}\r\n </ion-button>\r\n \r\n </ng-template>\r\n </p-dialog> \r\n\r\n\r\n <div *ngIf=\"!forScreenQuestionnaire\" class=\"form-label\">\r\n <label [attr.for]=\"question.name\" *ngIf=\"question.indent===1 && question.type!='html'\">\r\n {{question.title}}</label>\r\n </div>\r\n <div\r\n *ngIf=\"forScreenQuestionnaire && question.indent===1 && question.type!='html' && question.type!='simpleLabel' && question.customTag!='component'\"\r\n class=\"form-label\">\r\n {{question.title}}\r\n \r\n </div>\r\n\r\n <div\r\n *ngIf=\"question.indent!=1 && question.type!='html' && question.customTag && !question.customTag.includes('fmtnumbertext')\"\r\n class=\"form-label\">\r\n {{question.title}}\r\n \r\n </div>\r\n\r\n\r\n <div *ngIf=\"forScreenQuestionnaire && question.customTag && question.customTag==='component' && question.indent===1 && question.type!='html' \r\n && !question.description\">\r\n <money-expect *ngIf=\"question.componentName==='money-expect'\"></money-expect>\r\n<!-- <app-search-employer *ngIf=\"question.componentName==='app-search-employer'\" (onEmpty)=\"resetEmployer($event)\" (onFound)=\"setEmployer($event)\" [formControlName]=\"question.name\"></app-search-employer> -->\r\n<app-regular-employer-date *ngIf=\"question.componentName==='app-regular-emp-date'\" [form]=\"form\"></app-regular-employer-date>\r\n\r\n</div> \r\n\r\n <div *ngIf=\"question.type==='html'\" [innerHTML]=\"question.html\" class=\"heading\">\r\n </div>\r\n <div *ngIf=\"question.type==='simpleLabel'\" [innerHTML]=\"question.html\">\r\n </div>\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && question.max && question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n [readonlyInput]=\"true\" yearRange=\"1901:2050\" [showIcon]=\"true\" [minDate]=\"minDate\" [maxDate]=\"maxDate\"\r\n dateFormat=\"mm-dd-yy\" inputId=\"navigators\" dataType=\"string\" appendTo=\"body\" \r\n >\r\n </p-calendar>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && !question.max && !question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n [inputId]=\"question.name\" [readonlyInput]=\"true\" [showIcon]=\"true\" dateFormat=\"mm-dd-yy\" yearRange=\"1901:2050\"\r\n dataType=\"string\" appendTo=\"body\"></p-calendar>\r\n </div>\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && question.max && !question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n [inputId]=\"question.name\" [maxDate]=\"maxDate\" [readonlyInput]=\"true\" [showIcon]=\"true\" dateFormat=\"mm-dd-yy\"\r\n yearRange=\"1901:2050\" dataType=\"string\" appendTo=\"body\"></p-calendar>\r\n </div>\r\n\r\n <div *ngIf=\"question.inputType && question.inputType==='date' && !question.max && question.min\">\r\n <p-calendar [formControlName]=\"question.name\" [id]=\"question.name\" [monthNavigator]=\"true\" [yearNavigator]=\"true\"\r\n [inputId]=\"question.name\" [minDate]=\"minDate\" [readonlyInput]=\"true\" [showIcon]=\"true\" dateFormat=\"mm-dd-yy\"\r\n yearRange=\"1901:2050\" dataType=\"string\" appendTo=\"body\" (onShow)=\"setMinDate($event,question)\"></p-calendar>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('password') && !question.name.includes('confpwd')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-password [id]=\"question.name\" [formControlName]=\"question.name\" [toggleMask]=\"true\"\r\n [maxLength]=\"question.maxLength\"></p-password>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"question.customTag && question.customTag.includes('password') && question.name.includes('confpwd')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-password [id]=\"question.name\" [formControlName]=\"question.name\" [toggleMask]=\"true\"\r\n [maxLength]=\"question.maxLength\"></p-password>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"!question.customTag && question.type && (question.type!='radiogroup' && question.type!='displaytextaslabel')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" [maxLength]=\"question.maxLength\" />\r\n \r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" />\r\n \r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" [maxLength]=\"question.maxLength\" (blur)=\"validate(question)\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\" />\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.customTag && question.type && question.customTag.includes('Optional')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" [maxLength]=\"question.maxLength\" />\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && !question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n placeholder=\"Optional\" />\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('phone')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-inputMask mask=\"999 999-9999\" [id]=\"question.name\" [formControlName]=\"question.name\" placeholder=\"Optional\"\r\n *ngIf=\"question.inputType && question.inputType==='text' && !question.isRequired\"></p-inputMask>\r\n \r\n <p-inputMask mask=\"999 999-9999\" [id]=\"question.name\" [formControlName]=\"question.name\" placeholder=\"999 999-9999\"\r\n *ngIf=\"question.inputType && question.inputType==='text' && question.isRequired\"></p-inputMask>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('ssn')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-inputMask mask=\"999-99-9999\" [id]=\"question.name\" *ngIf=\"question.isRequired\" [formControlName]=\"question.name\"\r\n placeholder=\"999-99-9999\">\r\n </p-inputMask>\r\n \r\n <p-inputMask mask=\"999-99-9999\" [id]=\"question.name\" *ngIf=\"!question.isRequired\"\r\n [formControlName]=\"question.name\" placeholder=\"Optional\">\r\n </p-inputMask>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"question.customTag && !question.customTag.includes('phone') \r\n && !question.customTag.includes('password') && !question.customTag.includes('ssn')\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && question.size && !question.maxLength\" [formControlName]=\"question.name\"\r\n [size]=\"question.size\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && question.maxLength\" [formControlName]=\"question.name\"\r\n [maxLength]=\"question.maxLength\" />\r\n \r\n <input type=\"text\" [id]=\"question.name\" pInputText *ngIf=\"question.inputType && question.inputType==='text' \r\n && question.isRequired && !question.size && !question.maxLength\" [formControlName]=\"question.name\" />\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- && visibleIf(question.visibleIf) -->\r\n <div *ngIf=\"question.type && question.type==='singleselectcheckbox'\">\r\n <!-- <div [ngStyle]=\"setStyle(question.indent)\"> -->\r\n <p-selectButton [options]=\"question.choices\" [formControlName]=\"question.name\" [multiple]=false\r\n optionLabel=\"text\" optionValue=\"value\" ></p-selectButton>\r\n <!-- </div> -->\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.type && question.type==='dropdown' && question.size\"> \r\n <!-- <div class=\"flex-child\"> \r\n <p-dropdown [id]=\"question.name\" *ngIf=\"question.choices.length>3\" \r\n [formControlName]=\"question.name\" placeholder=\" \" [options]=\" getDependentDropdownData(question)| async\"\r\n optionLabel=\"text\" optionValue=\"value\" [style]=\"{'width':'200px','height':'35px'}\" [filter]=\"true\" filterBy=\"text\"\r\n >\r\n </p-dropdown>\r\n\r\n \r\n <p-dropdown [id]=\"question.name\" *ngIf=\"question.choices.length<=3\" editable=\"true\" filter=\"true\" filterBy=\"text\"\r\n [formControlName]=\"question.name\" placeholder=\" \" [options]=\" getDependentDropdownData(question)| async\"\r\n optionLabel=\"text\" optionValue=\"value\" [style]=\"{'width':'200px','height':'35px'}\">\r\n </p-dropdown>\r\n </div> -->\r\n\r\n <!-- <p-autoComplete [formControlName]=\"question.name\" [suggestions]=\"getDependentDropdownData(question)| async\" appendTo=\"body\"\r\n (completeMethod)=\"filterValue($event,question.choices,question.name)\" field=\"text\" [dropdown]=\"true\" \r\n minLength = 3 forceSelection=\"true\" [show]=\"getDependentDropdownData(question)| async\"\r\n > -->\r\n <div > \r\n \r\n <p-autoComplete [formControlName]=\"question.name\" appendTo=\"body\" [suggestions]=\"filteredBs.get(question.name)| async\"\r\n (completeMethod)=\"filterValue($event,question)\" dataKey =\"value\" field=\"text\" [dropdown]=\"true\" [size]=\"question.size\"\r\n minLength = 1 forceSelection=\"true\" type=\"text\" (onSelect)=\"onSelect($event,question.name)\"> \r\n\r\n <ng-template let-value pTemplate=\"item\">\r\n <div>\r\n <div>{{value.text}}</div>\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n</div>\r\n\r\n <!-- <div *ngIf=\"question.description\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div> -->\r\n </div>\r\n \r\n <div *ngIf=\"question.type && question.type==='dropdown' && !question.size\">\r\n <p-autoComplete [formControlName]=\"question.name\" appendTo=\"body\"\r\n [suggestions]=\"filteredBs.get(question.name)| async\" (completeMethod)=\"filterValue($event,question)\"\r\n dataKey=\"value\" field=\"text\" [dropdown]=\"true\" minLength=3 forceSelection=\"true\" type=\"text\" (onSelect)=\"onSelect($event,question.name)\">\r\n <ng-template let-value pTemplate=\"item\">\r\n <div>\r\n <div>{{value.text}}</div>\r\n </div>\r\n </ng-template>\r\n </p-autoComplete>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"question.customTag && question.customTag.includes('fileupload')\">\r\n <app-file-uploader [allowedFileType]=\"question.allowedFileType\" [formControlName]=\"question.name\"\r\n [maxSizeInMB]=\"question.sizeInMB\" [multiple]=\"question.multiple\" [noOfFilesToUpload]=\"question.noOFFiles\" ></app-file-uploader>\r\n </div>\r\n\r\n\r\n <div class=\"container\" style=\"padding: 0px;\" *ngIf=\"question.type && question.type==='radiogroup'\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <p-selectButton [options]=\"question.choices\" [formControlName]=\"question.name\" optionLabel=\"text\"\r\n optionValue=\"value\"></p-selectButton>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 8px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"container\" style=\"padding: 0px;\" *ngIf=\"question.type && question.type==='displaytextaslabel'\">\r\n <div class=\"container\" style=\"display: flex;\">\r\n <label>{{form.controls[question.name].value}}</label>\r\n <input type=\"hidden\" [formControlName]=\"question.name\"/>\r\n <div style=\"flex-grow: 1;\" *ngIf=\"question.description\" style=\"padding-left: 2px\">\r\n <app-overlay-info [overlayText]=\"question.description\"></app-overlay-info>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div>\r\n <small class=\"p-error\" *ngIf=\"isValid!=''\">{{isValid}}</small>\r\n </div>\r\n</div>", styles: [".form-label{display:inline-block;margin-bottom:6px;margin-top:20px}\n"] }]
1088
+ }], () => [{ type: i1.QuestionService }, { type: i2.ValidationService }, { type: i3.UtilService }, { type: i1.QuestionService }, { type: i4.LoggerService }, { type: i5.NavController }], { question: [{
1087
1089
  type: Input
1088
1090
  }], form: [{
1089
1091
  type: Input
1090
1092
  }], forScreenQuestionnaire: [{
1091
1093
  type: Input
1092
1094
  }] }); })();
1093
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DynamicFormPanelComponent, { className: "DynamicFormPanelComponent", filePath: "lib\\components\\questionnaire\\dynamic-form-panel.component.ts", lineNumber: 23 }); })();
1094
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL2R5bmFtaWMtZm9ybS1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9keW5hbWljLWZvcm0tcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ0NuRSxzQ0FFa0M7SUFBbkIsZ01BQVMsZUFBQSxnQkFBUSxDQUFBLElBQUM7SUFDNUIsWUFDTDtJQUFBLGlCQUFhO0lBRWIsc0NBRWlDO0lBQXBCLGdNQUFTLGVBQUEsZ0JBQVEsQ0FBQSxJQUFDO0lBQzFCLFlBQ0w7SUFBQSxpQkFBYTs7O0lBUFIsZUFDTDtJQURLLDJEQUNMO0lBS0ssZUFDTDtJQURLLDREQUNMOzs7OztJQWhCUixtQ0FDd0Q7SUFERSx5UEFBNkI7SUFHdkYseUJBQUc7SUFBQSxZQUNDO0lBQUEsaUJBQUk7SUFDSixxR0FhZ0I7SUFDcEIsaUJBQVc7OztJQW5Ca0gsMENBQXlCO0lBQTVJLDJDQUFzQixtQ0FBQSw2QkFBQSxlQUFBLG9CQUFBLG9CQUFBLG9CQUFBO0lBRzdCLGVBQ0M7SUFERCxnREFDQzs7O0lBbUJFLDZCQUF1RjtJQUNyRixZQUFrQjtJQUFBLGlCQUFROzs7SUFEckIsNENBQTBCO0lBQy9CLGVBQWtCO0lBQWxCLHNEQUFrQjs7O0lBRjFCLCtCQUF3RDtJQUNsRCxvRkFDNEI7SUFDbEMsaUJBQU07OztJQUZtQyxlQUFrRDtJQUFsRCxxRkFBa0Q7OztJQUczRiwrQkFFcUI7SUFDZixZQUVOO0lBQUEsaUJBQU07OztJQUZBLGVBRU47SUFGTSxzREFFTjs7O0lBRUEsK0JBRXFCO0lBQ2YsWUFFTjtJQUFBLGlCQUFNOzs7SUFGQSxlQUVOO0lBRk0sc0RBRU47OztJQUtFLCtCQUE2RTs7O0lBRWpGLGdEQUE4SDs7O0lBQTFDLG1DQUFhOzs7SUFKOUYsMkJBQzBCO0lBQ3pCLGtHQUE2RSxnSEFBQTtJQUlqRixpQkFBTTs7O0lBSmEsZUFBNkM7SUFBN0MsdUVBQTZDO0lBRXBDLGVBQXFEO0lBQXJELCtFQUFxRDs7O0lBSS9FLDBCQUNNOzs7SUFEOEIsbUVBQTJCOzs7SUFFL0QsMEJBQ007OztJQURxQyxtRUFBMkI7OztJQUd0RSwyQkFBK0Y7SUFDN0YsaUNBSWE7SUFDZixpQkFBTTs7O0lBTFEsZUFBaUM7SUFBakMsc0RBQWlDLDRCQUFBLHdCQUFBLHVCQUFBLGtCQUFBLDJCQUFBLDJCQUFBOzs7SUFRL0MsMkJBQWlHO0lBQy9GLGlDQUVpRDtJQUNuRCxpQkFBTTs7O0lBSFEsZUFBaUM7SUFBakMsc0RBQWlDLDRCQUFBLHdCQUFBLHVCQUFBLGlDQUFBLGtCQUFBOzs7SUFLL0MsMkJBQWdHO0lBQzlGLGlDQUV1RTtJQUN6RSxpQkFBTTs7O0lBSFEsZUFBaUM7SUFBakMsc0RBQWlDLDRCQUFBLHdCQUFBLHVCQUFBLGlDQUFBLDJCQUFBLGtCQUFBOzs7O0lBSy9DLDJCQUFnRyxxQkFBQTtJQUdwQyxxTEFBVSxlQUFBLDRDQUEyQixDQUFBLElBQUM7SUFBQyxpQkFBYSxFQUFBOzs7SUFGbEcsZUFBaUM7SUFBakMsdURBQWlDLDZCQUFBLHdCQUFBLHVCQUFBLGtDQUFBLDRCQUFBLGtCQUFBOzs7SUFTdkMsK0JBQWtGO0lBQ2hGLHVDQUEwRTtJQUU1RSxpQkFBTTs7O0lBRmMsZUFBb0M7SUFBcEMsMERBQW9DOzs7SUFMaEUsMkJBQWlILGNBQUE7SUFFM0csaUNBQ2dEO0lBQzlDLGtGQUdNO0lBQ1IsaUJBQU0sRUFBQTs7O0lBTk0sZUFBb0I7SUFBcEIsMENBQW9CLDBDQUFBLG9CQUFBLHlDQUFBO0lBRUYsZUFBMEI7SUFBMUIsbURBQTBCOzs7SUFXdEQsK0JBQWtGO0lBQ2hGLHVDQUEwRTtJQUM1RSxpQkFBTTs7O0lBRGMsZUFBb0M7SUFBcEMsMERBQW9DOzs7SUFMaEUsMkJBQWdILGNBQUE7SUFFMUcsaUNBQ2dEO0lBQzlDLGtGQUVNO0lBQ1IsaUJBQU0sRUFBQTs7O0lBTE0sZUFBb0I7SUFBcEIsMENBQW9CLDBDQUFBLG9CQUFBLHlDQUFBO0lBRUYsZUFBMEI7SUFBMUIsbURBQTBCOzs7SUFReEQsNEJBRW1GOzs7SUFGaEUsMENBQW9CLDBDQUFBLCtCQUFBLHlDQUFBOzs7SUFLdkMsNEJBRWtEOzs7SUFGL0IsMENBQW9CLDBDQUFBLCtCQUFBOzs7SUFJdkMsNEJBRTREOzs7SUFGekMsMENBQW9CLDBDQUFBLHlDQUFBOzs7SUFJdkMsNEJBRTJCOzs7SUFGUiwwQ0FBb0IsMENBQUE7Ozs7SUFLdkMsaUNBRXdGO0lBQTlCLCtLQUFRLGVBQUEsa0NBQWtCLENBQUEsSUFBQztJQUZyRixpQkFFd0Y7OztJQUZyRSwwQ0FBb0IsMENBQUEsK0JBQUEseUNBQUE7OztJQUl2Qyw0QkFFMkI7OztJQUZSLDBDQUFvQiwwQ0FBQSwrQkFBQTs7O0lBSXZDLDRCQUVxQzs7O0lBRmxCLDBDQUFvQiwwQ0FBQSx5Q0FBQTs7O0lBSXZDLDRCQUN1Rzs7O0lBRHBGLDBDQUFvQiwwQ0FBQTs7O0lBRXJDLCtCQUFrRjtJQUNoRix1Q0FBMEU7SUFDNUUsaUJBQU07OztJQURjLGVBQW9DO0lBQXBDLDBEQUFvQzs7O0lBbkNoRSwyQkFBMEgsY0FBQTtJQUVwSCxzRkFFbUYseUVBQUEseUVBQUEseUVBQUEseUVBQUEseUVBQUEseUVBQUEseUVBQUEsdUVBQUE7SUFpQ25GLGlCQUFNLEVBQUE7OztJQW5DOEMsZUFDUTtJQURSLGlMQUNRO0lBSVIsZUFDWTtJQURaLGtMQUNZO0lBR1osZUFDZTtJQURmLGtMQUNlO0lBR2YsZUFDbUI7SUFEbkIsbUxBQ21CO0lBSW5CLGVBQ1U7SUFEVixnTEFDVTtJQUdWLGVBQ1c7SUFEWCxpTEFDVztJQUdYLGVBQ1c7SUFEWCxpTEFDVztJQUdYLGVBQ1k7SUFEWixrTEFDWTtJQUNsQyxlQUEwQjtJQUExQixtREFBMEI7OztJQVMxRCw0QkFFbUY7OztJQUZoRSwwQ0FBb0IsMENBQUEsK0JBQUEseUNBQUE7OztJQUd2Qyw0QkFFa0Q7OztJQUYvQiwwQ0FBb0IsMENBQUEsK0JBQUE7OztJQUl2Qyw0QkFFNEQ7OztJQUZ6QywwQ0FBb0IsMENBQUEseUNBQUE7OztJQUl2Qyw0QkFFMkI7OztJQUZSLDBDQUFvQiwwQ0FBQTs7O0lBR3ZDLCtCQUFrRjtJQUNoRix1Q0FBMEU7SUFDNUUsaUJBQU07OztJQURjLGVBQW9DO0lBQXBDLDBEQUFvQzs7O0lBakI1RCwyQkFBNkYsY0FBQTtJQUV6RixzRkFFbUYseUVBQUEseUVBQUEseUVBQUEscUVBQUE7SUFlckYsaUJBQU0sRUFBQTs7O0lBakJnRCxlQUNjO0lBRGQsaUxBQ2M7SUFFZCxlQUNjO0lBRGQsa0xBQ2M7SUFHZCxlQUNpQjtJQURqQixrTEFDaUI7SUFHakIsZUFDcUI7SUFEckIsbUxBQ3FCO0lBRTdDLGVBQTBCO0lBQTFCLG1EQUEwQjs7O0lBUXRELGtDQUNrRzs7O0lBRGpFLDBDQUFvQiwwQ0FBQTs7O0lBR3JELGtDQUNpRzs7O0lBRGhFLDBDQUFvQiwwQ0FBQTs7O0lBRXJELCtCQUFrRjtJQUNoRix1Q0FBMEU7SUFDNUUsaUJBQU07OztJQURjLGVBQW9DO0lBQXBDLDBEQUFvQzs7O0lBUjVELDJCQUF3RSxjQUFBO0lBRXBFLGtHQUNrRyxxRkFBQSxxRUFBQTtJQU9wRyxpQkFBTSxFQUFBOzs7SUFQRCxlQUErRTtJQUEvRSwwSEFBK0U7SUFHL0UsZUFBOEU7SUFBOUUseUhBQThFO0lBQ3JELGVBQTBCO0lBQTFCLG1EQUEwQjs7O0lBUXBELGtDQUVjOzs7SUFGa0IsMENBQW9CLDBDQUFBOzs7SUFJcEQsa0NBRWM7OztJQUZrQiwwQ0FBb0IsMENBQUE7OztJQUdwRCwrQkFBa0Y7SUFDaEYsdUNBQTBFO0lBQzVFLGlCQUFNOzs7SUFEYyxlQUFvQztJQUFwQywwREFBb0M7OztJQVY5RCwyQkFBc0UsY0FBQTtJQUVoRSxrR0FFYyxxRkFBQSxxRUFBQTtJQVFoQixpQkFBTSxFQUFBOzs7SUFWa0QsZUFBeUI7SUFBekIsa0RBQXlCO0lBSXpCLGVBQTBCO0lBQTFCLG1EQUEwQjtJQUdwRCxlQUEwQjtJQUExQixtREFBMEI7OztJQVN0RCw0QkFFNEQ7OztJQUZ6QywwQ0FBb0IsMENBQUEsK0JBQUEseUNBQUE7OztJQUl2Qyw0QkFFMkI7OztJQUZSLDBDQUFvQiwwQ0FBQSwrQkFBQTs7O0lBSXZDLDRCQUVxQzs7O0lBRmxCLDBDQUFvQiwwQ0FBQSx5Q0FBQTs7O0lBSXZDLDRCQUNpRzs7O0lBRDlFLDBDQUFvQiwwQ0FBQTs7O0lBRTNDLCtCQUFrRjtJQUNoRix1Q0FBMEU7SUFDNUUsaUJBQU07OztJQURjLGVBQW9DO0lBQXBDLDBEQUFvQzs7O0lBbEIxRCwyQkFDdUYsY0FBQTtJQUVqRixzRkFFNEQseUVBQUEseUVBQUEseUVBQUEscUVBQUE7SUFlbEUsaUJBQU0sRUFBQTs7O0lBakJvRCxlQUNJO0lBREosZ0xBQ0k7SUFHSixlQUNLO0lBREwsaUxBQ0s7SUFHTCxlQUNLO0lBREwsaUxBQ0s7SUFHTCxlQUNNO0lBRE4sa0xBQ007SUFDbEMsZUFBMEI7SUFBMUIsbURBQTBCOzs7SUFNeEQsMkJBQXVFO0lBRW5FLHFDQUMyRDtJQUUvRCxpQkFBTTs7O0lBSGMsZUFBNEI7SUFBNUIsa0RBQTRCLDBDQUFBLG1CQUFBOzs7SUFnQzFDLDJCQUFLLFVBQUE7SUFDRSxZQUFjO0lBQUEsaUJBQU0sRUFBQTs7O0lBQXBCLGVBQWM7SUFBZCxvQ0FBYzs7OztJQTNCekIsMkJBQTRFLFVBQUEseUJBQUE7SUFzQjNFLHlNQUFrQixlQUFBLDZDQUE0QixDQUFBLElBQUMsZ0xBQ2EsZUFBQSwrQ0FBOEIsQ0FBQSxJQUQzQzs7SUFHOUMsa0dBSWM7SUFDaEIsaUJBQWlCLEVBQUEsRUFBQTs7O0lBVEMsZUFBaUM7SUFBakMsdURBQWlDLG9GQUFBLGtCQUFBLCtCQUFBOzs7SUFzQnpDLDJCQUFLLFVBQUE7SUFDRSxZQUFjO0lBQUEsaUJBQU0sRUFBQTs7O0lBQXBCLGVBQWM7SUFBZCxvQ0FBYzs7OztJQU4vQiwyQkFBMkUseUJBQUE7SUFFZCx5TUFBa0IsZUFBQSw2Q0FBNEIsQ0FBQSxJQUFDLGdMQUNLLGVBQUEsK0NBQThCLENBQUEsSUFEbkM7O0lBRXBHLGtHQUljO0lBQ2hCLGlCQUFpQixFQUFBOzs7SUFSRCxlQUFpQztJQUFqQyx1REFBaUMsb0ZBQUEsa0JBQUE7OztJQVl2RCwyQkFBNkU7SUFDM0Usd0NBQytIO0lBQ2pJLGlCQUFNOzs7SUFGZSxlQUE0QztJQUE1QyxrRUFBNEMsMENBQUEsMENBQUEsdUNBQUEsaURBQUE7OztJQVN6RCwrQkFBa0Y7SUFDaEYsdUNBQTBFO0lBQzVFLGlCQUFNOzs7SUFEYyxlQUFvQztJQUFwQywwREFBb0M7OztJQUxoRSwrQkFBbUcsY0FBQTtJQUU3RixxQ0FDdUM7SUFDckMsa0ZBRU07SUFDUixpQkFBTSxFQUFBOzs7SUFMVSxlQUE0QjtJQUE1QixrREFBNEIsMENBQUE7SUFFZCxlQUEwQjtJQUExQixtREFBMEI7OztJQVUxRCwrQkFBa0Y7SUFDaEYsdUNBQTBFO0lBQzVFLGlCQUFNOzs7SUFEYyxlQUFvQztJQUFwQywwREFBb0M7OztJQUw1RCwrQkFBMkcsY0FBQSxZQUFBO0lBRTVGLFlBQXNDO0lBQUEsaUJBQVE7SUFDckQsNEJBQXlEO0lBQzdELGtGQUVNO0lBQ1IsaUJBQU0sRUFBQTs7O0lBTE8sZUFBc0M7SUFBdEMsd0VBQXNDO0lBQ3ZCLGVBQWlDO0lBQWpDLHVEQUFpQztJQUMvQixlQUEwQjtJQUExQixtREFBMEI7OztJQVExRCxpQ0FBMkM7SUFBQSxZQUFXO0lBQUEsaUJBQVE7OztJQUFuQixlQUFXO0lBQVgscUNBQVc7O0FENVIxRCxNQUFNLE9BQU8seUJBQXlCO0lBZ0JwQyxZQUFtQixPQUF3QixFQUFTLGlCQUFvQyxFQUMvRSxJQUFpQixFQUFTLGVBQWdDLEVBQzFELGFBQTRCO1FBRmxCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQVMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUMvRSxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQVMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzFELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBTnJDLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXFELENBQUM7UUFDL0UsZUFBVSxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO1FBQzlELGdCQUFXLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUlLLENBQUM7SUFFeEMsUUFBUTtRQUNOLGtGQUFrRjtRQUdsRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTthQUN6QztZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7YUFDekM7U0FDRjtJQUNILENBQUM7SUFDSCxJQUFJLE9BQU87UUFDVCxxQ0FBcUM7UUFDckMsSUFBSSxPQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksWUFBWSxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzlDLElBQUksTUFBTSxLQUFLLFlBQVksSUFBSSxDQUFDLFFBQVEsS0FBSyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLGFBQWEsS0FBSyxZQUFZLElBQUksb0JBQW9CLEtBQUssWUFBWSxFQUFFO1lBQ2xLLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRO2VBQzFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNyRywrQ0FBK0M7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7U0FDeEM7UUFDRCwwTkFBME47UUFDMU4sc0RBQXNEO1FBQ3RELDBEQUEwRDtRQUMxRCxzQ0FBc0M7UUFDdEMsSUFBSTtRQUVKLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU87ZUFDekcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JHLCtDQUErQztZQUMvQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUM3QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFFckIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDaEMsaURBQWlEO2dCQUNqRCxJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO3dCQUM5QixpREFBaUQ7d0JBQ2pELE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUN0RDt5QkFBTTt3QkFDTCxPQUFPLEdBQUcsRUFBRSxDQUFDO3FCQUNkO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLE9BQU8sQ0FBQztTQUVoQjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLGVBQWU7ZUFDakgsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JHLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzdDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLE9BQU8sR0FBVyxFQUFFLENBQUM7WUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTt3QkFDbkMsa0RBQWtEO3dCQUNsRCxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDckQsU0FBUyxHQUFHLEtBQUssQ0FBQztxQkFDbkI7eUJBQ0k7d0JBQ0gsT0FBTyxHQUFHLEVBQUUsQ0FBQztxQkFDZDtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUI7ZUFDckgsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JHLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzdDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLE9BQU8sR0FBVyxFQUFFLENBQUM7WUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsNkRBQTZEO29CQUM3RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO3dCQUNuQyxrREFBa0Q7d0JBQ2xELE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNyRCxTQUFTLEdBQUcsS0FBSyxDQUFDO3FCQUNuQjt5QkFDSTt3QkFDSCxPQUFPLEdBQUcsRUFBRSxDQUFDO3FCQUNkO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFNBQVM7ZUFDM0csQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JHLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzlDLDJCQUEyQjtZQUMxQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxPQUFPLEdBQVcsRUFBRSxDQUFDO1lBQ3pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksU0FBUyxFQUFFO29CQUNiLDJEQUEyRDtvQkFDM0QsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTt3QkFDN0IsaURBQWlEO3dCQUNqRCxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDckQsU0FBUyxHQUFHLEtBQUssQ0FBQztxQkFDbkI7eUJBQ0k7d0JBQ0gsT0FBTyxHQUFHLEVBQUUsQ0FBQztxQkFDZDtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxPQUFPLENBQUM7U0FFaEI7UUFJRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTO2VBQzNHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNyRyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUM3QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxPQUFPLEdBQVcsRUFBRSxDQUFDO1lBQ3pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksU0FBUyxFQUFFO29CQUNiLDJEQUEyRDtvQkFDM0QsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTt3QkFDN0IsaURBQWlEO3dCQUNqRCxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDckQsU0FBUyxHQUFHLEtBQUssQ0FBQztxQkFDbkI7eUJBQ0k7d0JBQ0gsT0FBTyxHQUFHLEVBQUUsQ0FBQztxQkFDZDtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxPQUFPLENBQUM7U0FFaEI7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVO2VBQzVHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNyRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JELE9BQU8sVUFBVSxDQUFDO1NBRW5CO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUztlQUMzRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckcsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDN0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksU0FBUyxFQUFFO29CQUNiLDBEQUEwRDtvQkFDMUQsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO3dCQUN6QyxnREFBZ0Q7d0JBQ2hELE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNyRCxTQUFTLEdBQUcsS0FBSyxDQUFDO3FCQUNuQjt5QkFDSTt3QkFDSCxPQUFPLEdBQUcsRUFBRSxDQUFDO3FCQUNkO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFFRixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyRCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFSCxVQUFVLENBQUMsU0FBYyxFQUFDLFFBQXNCO1FBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLGNBQWMsR0FBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsMENBQTBDO1FBQzFDLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBQyxjQUFjLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVDLFNBQVMsQ0FBQyxPQUFlLEVBQUUsSUFBWTtRQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUEsQ0FBQyxZQUFZO1FBQ3hFLElBQUksT0FBTyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDN0IsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDbEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxPQUFPLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtZQUM3QixJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUgsU0FBUyxDQUFDLE1BQWM7UUFFdEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLFVBQW9CLENBQUM7UUFDekIsSUFBSSxjQUF1QixDQUFDO1FBQzVCLElBQUksS0FBSyxHQUFXLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsY0FBYyxHQUFHLEtBQUssQ0FBQztTQUN4QjthQUFNO1lBQ0wsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUNELElBQUksUUFBUSxHQUFXLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLFFBQVEsR0FBVyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7UUFDL0YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQzdELG1HQUFtRztRQUNuRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2xDLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzlELDREQUE0RDtZQUM1RCxJQUFJLFFBQVEsS0FBSyxNQUFNLElBQUksY0FBYyxJQUFJLG9CQUFvQixFQUFFO2dCQUNqRSxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsSUFBSSxRQUFRLEtBQUssTUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ25FLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDeEUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdDO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCx3QkFBd0IsQ0FBQyxPQUFZO1FBQ25DLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUN2QixJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxFQUFFO2dCQUNsQyxPQUFPO2FBQ1I7WUFDRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQXVCLENBQUM7WUFDdkYsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM5QyxJQUFJLFdBQVcsR0FBVyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlDLElBQUksa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ3BELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pELElBQUksRUFBRSxFQUFFO2dCQUNOLE9BQU8sRUFBRSxDQUFDO2FBQ1g7aUJBQU07Z0JBQ0wsSUFBSSxFQUFFLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM3QztZQUNELGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQyxnREFBZ0Q7Z0JBQ2hELGtDQUFrQztnQkFDbEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hELElBQUksS0FBSyxFQUFFO29CQUNULElBQUksZUFBZSxLQUFLLEtBQUssRUFBRTt3QkFDN0IsNkJBQTZCO3dCQUM3QixJQUFJLENBQUMsaUJBQWlCOzZCQUNuQixHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsS0FBSyxJQUFJLGtCQUFrQixFQUFFLENBQUM7NkJBQ25ELFNBQVMsQ0FDUixHQUFHLENBQUMsRUFBRTs0QkFDSixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0NBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs2QkFDaEM7aUNBQU07Z0NBQ0wsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs2QkFDdEI7d0JBQ0gsQ0FBQyxDQUNGLENBQUM7cUJBQ0w7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sRUFBRSxDQUFDO1NBQ1g7YUFBTTtZQUNMLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQXVCLENBQUM7WUFDekUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDUCxJQUFJLEVBQUUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMzQztZQUNELE9BQU8sRUFBRSxDQUFDO1NBQ1g7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQVk7UUFHbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDeEIsT0FBTztTQUNSO1FBRUQsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUdELElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsbUJBQW1CO1FBQ3BFLElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBRSxPQUFPO1FBQ3ZELElBQUksV0FBVyxHQUFXLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDL0UsSUFBSSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7UUFDcEQsSUFBSSxlQUFlLEdBQVMsSUFBSSxDQUFDO1FBQ3BDLHFEQUFxRDtRQUNsRCxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLElBQUksUUFBUSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsR0FBYSxFQUFFLENBQUM7WUFDNUIsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO1lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4QywyQkFBMkI7Z0JBQzVCLDREQUE0RDtnQkFDM0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7b0JBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7aUJBQ3JEO3FCQUFJO29CQUNILGVBQWUsR0FBQyxLQUFLLENBQUM7aUJBQ3ZCO2FBQ0Y7WUFDRixxRkFBcUY7WUFFcEYsSUFBSSxLQUFLLEdBQW9CLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUMzQixLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUM1Qiw2RUFBNkU7WUFDN0UsSUFBRyxlQUFlLEVBQUM7Z0JBQ25CLElBQUksZUFBZSxLQUFLLE1BQU0sRUFBRTtvQkFDOUIsNkJBQTZCO29CQUM3QixJQUFJLENBQUMsaUJBQWlCO3lCQUNuQixJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUM7eUJBQzdCLFNBQVMsQ0FDUixHQUFHLENBQUMsRUFBRTt3QkFDSixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQzt3QkFDdkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsS0FBSyxPQUFPLEVBQUU7NEJBRTFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs0QkFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQzs0QkFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQzs0QkFDNUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUM7NEJBQ2hFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO3lCQUUvRDt3QkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtvQkFDcEQsQ0FBQyxFQUVELEdBQUcsQ0FBQyxFQUFFO3dCQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUU5QixDQUFDLENBQ0YsQ0FBQztpQkFDTDthQUNGO1NBQ0E7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLDhEQUE4RDtRQUM5RCxJQUFJLFFBQVEsR0FBb0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDNUQsSUFBSSxVQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzlCLEtBQUssSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFO1lBQ3hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUMzQztRQUNELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUV4RixDQUFDO0lBRUQsTUFBTTtRQUNKLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFLRCxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQVk7UUFDL0Isa0VBQWtFO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxDQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDeEIsSUFBSSxRQUFRLEdBQVUsRUFBRSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3ZCO2FBQ0Y7WUFDRCxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEMsT0FBTztTQUNSO2FBQU07WUFFTCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4RCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUN4QixJQUFJLFFBQVEsR0FBVSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQzlELElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxDQUFlLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxrQ0FBa0M7Z0JBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMvQyxJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUMvRCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUN2QjtpQkFDRjtnQkFDRCxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxPQUFPO2FBQ1I7aUJBQ0k7Z0JBR0gsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUF1QixDQUFDO2dCQUN2RixJQUFJLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO2dCQUM5QyxJQUFJLFdBQVcsR0FBVyxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUM5QyxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDcEQsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBRTVCLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRTtvQkFDdkIsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUk7aUJBQ3ZEO2dCQUdELG9EQUFvRDtnQkFFcEQsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzNDLGdEQUFnRDtvQkFDaEQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQXVCLENBQUM7b0JBQ2hGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXlDLENBQUM7b0JBQ25FLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLElBQUksZUFBZSxLQUFLLEtBQUssRUFBRTt3QkFDN0IsSUFBSSxDQUFDLGlCQUFpQjs2QkFDbkIsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLGdCQUFnQixJQUFJLGtCQUFrQixFQUFFLENBQUM7NkJBQzlELFNBQVMsQ0FDUixHQUFHLENBQUMsRUFBRTs0QkFDSixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0NBQ2YsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQ0FDeEIsSUFBSSxRQUFRLEdBQVUsRUFBRSxDQUFDO2dDQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLGVBQWUsQ0FBZSxFQUFFLENBQUMsQ0FBQztnQ0FFL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0NBQzlDLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDL0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7d0NBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUNBQ3ZCO2lDQUNGO2dDQUNELEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0NBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7NkJBQ3ZDO2lDQUFNO2dDQUNMLElBQUksUUFBUSxHQUFVLEVBQUUsQ0FBQztnQ0FDekIsSUFBSSxFQUFFLEdBQUcsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7Z0NBQy9DLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0NBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7NkJBQ3ZDO3dCQUNILENBQUMsQ0FDRixDQUFDO3FCQUNMO2lCQUNGO2FBQ0Y7U0FDRjtJQUVILENBQUM7SUFDRCxXQUFXLENBQUMsS0FBSztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQUssRUFBQyxTQUFnQjtRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7MEZBOWZVLHlCQUF5QjtvRUFBekIseUJBQXlCO1lDdEJ0Qyw4QkFBd0I7WUFHdEIscUZBbUJXLDZEQUFBLDZEQUFBLDZEQUFBLDZEQUFBLDZEQUFBLDZEQUFBLDZEQUFBLDZEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLGdFQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBLCtEQUFBO1lBMlJYLDRCQUFLO1lBQ0gsZ0ZBQThEO1lBQ2hFLGlCQUFNLEVBQUE7O1lBblRILG9DQUFrQjtZQUdhLGVBQXFCO1lBQXJCLDBDQUFxQjtZQXNCakQsZUFBNkI7WUFBN0Isa0RBQTZCO1lBS2hDLGVBQStJO1lBQS9JLDRMQUErSTtZQU8vSSxlQUF3SDtZQUF4SCw2SkFBd0g7WUFPbkgsZUFDZ0I7WUFEaEIsOE1BQ2dCO1lBT2xCLGVBQTRCO1lBQTVCLG1EQUE0QjtZQUU1QixlQUFtQztZQUFuQywwREFBbUM7WUFHbkMsZUFBdUY7WUFBdkYsMEhBQXVGO1lBU3ZGLGVBQXlGO1lBQXpGLDRIQUF5RjtZQU16RixlQUF3RjtZQUF4RiwySEFBd0Y7WUFNeEYsZUFBd0Y7WUFBeEYsMkhBQXdGO1lBTXhGLGVBQXlHO1lBQXpHLHNJQUF5RztZQVd6RyxlQUF3RztZQUF4RyxxSUFBd0c7WUFVeEcsZUFBa0g7WUFBbEgsdUpBQWtIO1lBeUNsSCxlQUFxRjtZQUFyRixpSEFBcUY7WUFzQnJGLGVBQWdFO1lBQWhFLHlGQUFnRTtZQWFoRSxlQUE4RDtZQUE5RCx1RkFBOEQ7WUFlOUQsZUFDOEU7WUFEOUUscUxBQzhFO1lBc0I1RSxlQUE2RDtZQUE3RCx3RkFBNkQ7WUFRM0QsZUFBa0U7WUFBbEUsaUdBQWtFO1lBc0NwRSxlQUFtRTtZQUFuRSxrR0FBbUU7WUFhbkUsZUFBcUU7WUFBckUsOEZBQXFFO1lBTTdCLGVBQW1EO1lBQW5ELDhFQUFtRDtZQVVuRCxlQUEyRDtZQUEzRCxzRkFBMkQ7WUFZakYsZUFBaUI7WUFBakIsd0NBQWlCOzs7aUZENVJoQyx5QkFBeUI7Y0FSckMsU0FBUzsyQkFDRSxnQkFBZ0IsaUJBR1gsaUJBQWlCLENBQUMsSUFBSTtvS0FLNUIsUUFBUTtrQkFBaEIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUNHLHNCQUFzQjtrQkFBOUIsS0FBSzs7a0ZBSEsseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVsZW1lbnRzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9FbGVtZW50c01vZGVsJztcclxuaW1wb3J0IHsgS2V5VmFsdWVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0tleVZhbHVlTW9kZWwnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9WYWxpZGF0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUvdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlsL3V0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uU2VydmljZSB9IGZyb20gJy4vcXVlc3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICcuL1NlbGVjdEl0ZW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYW5lbC1xdWVzdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybS1wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzIDogWycuL2R5bmFtaWMtZm9ybS1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtUGFuZWxDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBFbGVtZW50c01vZGVsO1xyXG4gIEBJbnB1dCgpIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgZm9yU2NyZWVuUXVlc3Rpb25uYWlyZTogYm9vbGVhbjtcclxuICBtaW5EYXRlOiBEYXRlO1xyXG4gIG1heERhdGU6IERhdGU7XHJcbiAgZGlzcGxheVBvc2l0aW9uOiBib29sZWFuO1xyXG4gIHBvc2l0aW9uOiBzdHJpbmc7XHJcbiAgcG9wVXBIZWFkZXI6IHN0cmluZztcclxuICBwb3BVcFRleHQ6IHN0cmluZztcclxuICBwb3BVcFllc0FjdGlvbkxhYmVsOiBzdHJpbmc7XHJcbiAgcG9wVXBOb0FjdGlvbkxhYmVsOiBzdHJpbmc7XHJcbiAgZHJvcGRvd25WYWx1ZUJzID0gbmV3IE1hcDxVbnR5cGVkRm9ybUNvbnRyb2wsIEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+PigpO1xyXG4gIGZpbHRlcmVkQnMgPSBuZXcgTWFwPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdEl0ZW1bXT4+KCk7XHJcbiAgcmV0dXJuTW9kZWwgPSBuZXcgVmFsaWRhdGlvbk1vZGVsKCk7XHJcbiBcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc2VydmljZTogUXVlc3Rpb25TZXJ2aWNlLCBwdWJsaWMgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWw6IFV0aWxTZXJ2aWNlLCBwdWJsaWMgcXVlc3Rpb25TZXJ2aWNlOiBRdWVzdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcikgeyB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgIC8vICAgY29uc29sZS5sb2coJ2lzIER5bmFtaWNGb3JtUXVlc3Rpb25Db21wb25lbnQgbmdPbkluaXQgY2FsbGVkJywgdGhpcy5xdWVzdGlvbilcclxuICBcclxuICBcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaW5wdXRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgY29uc29sZS5sb2coJ0RhdGUgJywgdGhpcy5xdWVzdGlvbik7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24ubWF4KSB7XHJcbiAgICAgICAgICB0aGlzLnBhcnNlRGF0ZSh0aGlzLnF1ZXN0aW9uLm1heCwgJ21heCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLm1pbikge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZURhdGUodGhpcy5xdWVzdGlvbi5taW4sICdtaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIGdldCBpc1ZhbGlkKCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2lzVmFsaWQgaXMgY2FsbGxlZCcpO1xyXG4gICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgcXVlc3Rpb25UeXBlOiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLnR5cGU7XHJcbiAgICBpZiAoJ2h0bWwnID09PSBxdWVzdGlvblR5cGUgfHwgKCdidXR0b24nID09PSBxdWVzdGlvblR5cGUgJiYgIXRoaXMucXVlc3Rpb24udmFsaWRhdG9ycykgfHwgJ3NpbXBsZUxhYmVsJyA9PT0gcXVlc3Rpb25UeXBlIHx8ICdkaXNwbGF5dGV4dGFzbGFiZWwnID09PSBxdWVzdGlvblR5cGUpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLm5hbWUgJiYgdGhpcy5mb3JtICYmIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmVycm9ycz8ucmVxdWlyZWRcclxuICAgICAgJiYgKHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmRpcnR5IHx8IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLnRvdWNoZWQpKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ2Vycm9ycz8ucmVxdWlyZWQnLHRoaXMucXVlc3Rpb24pXHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkRXJyb3JUZXh0O1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/Lm1heGxlbmd0aCAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgIC8vICAgLy8vY29uc29sZS5sb2coJ2Vycm9ycz8ubWF4TGVuZ3RoJyx0aGlzLnF1ZXN0aW9uKVxyXG4gICAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5xdWVzdGlvbi5kZXNjcmlwdGlvbjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLm5hbWUgJiYgdGhpcy5mb3JtICYmIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmVycm9ycz8ucGF0dGVyblxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ2Vycm9ycz8ucGF0dGVybicsdGhpcy5xdWVzdGlvbilcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRvci50eXBlICcsIHZhbGlkYXRvci50eXBlKVxyXG4gICAgICAgIGlmIChrZWVwR29pbmcpIHtcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3JlZ2V4Jykge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdG9yLnRleHQgJywgdmFsaWRhdG9yLnRleHQpXHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSB2YWxpZGF0b3IudGV4dDtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0ubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/LmRhdGVDb21wYXJpc2lvblxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgaWYgKGtlZXBHb2luZykge1xyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCd2YWxpZGF0b3IudGV4dCAnLCB2YWxpZGF0b3IudGV4dClcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRvci50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uICYmIHRoaXMucXVlc3Rpb24ubmFtZSAmJiB0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZXJyb3JzPy5wYXNzd29yZENvbXBhcmlzaW9uXHJcbiAgICAgICYmICh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5kaXJ0eSB8fCB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS50b3VjaGVkKSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IHRoaXMucXVlc3Rpb24udmFsaWRhdG9ycztcclxuICAgICAgdmFyIGtlZXBHb2luZyA9IHRydWU7XHJcbiAgICAgIGxldCBtZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICBpZiAoa2VlcEdvaW5nKSB7XHJcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b3IudHlwZS5taW5sZW5ndGggJywgdmFsaWRhdG9yLnR5cGUpXHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgICAgICAvLyAgY29uc29sZS5sb2coJ3ZhbGlkYXRvci50ZXh0ICcsIHZhbGlkYXRvci50ZXh0KVxyXG4gICAgICAgICAgICBtZXNzYWdlID0gdmFsaWRhdG9yLnRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIGtlZXBHb2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/Lm1pbmxlbmd0aFxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgLy8gY29uc29sZS5sb2coJ01pbkxlbmd0aCcpXHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgaWYgKGtlZXBHb2luZykge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRvci50eXBlLm1pbmxlbmd0aCAnLCB2YWxpZGF0b3IudHlwZSlcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3RleHQnKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0b3IudGV4dCAnLCB2YWxpZGF0b3IudGV4dClcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRvci50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gIFxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/Lm1heGxlbmd0aFxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgaWYgKGtlZXBHb2luZykge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRvci50eXBlLm1pbmxlbmd0aCAnLCB2YWxpZGF0b3IudHlwZSlcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3RleHQnKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0b3IudGV4dCAnLCB2YWxpZGF0b3IudGV4dClcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRvci50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG5cclxuICAgIH1cclxuICBcclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uICYmIHRoaXMucXVlc3Rpb24ubmFtZSAmJiB0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZXJyb3JzPy5yZXF1aXJlZElmXHJcbiAgICAgICYmICh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5kaXJ0eSB8fCB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS50b3VjaGVkKSkge1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICByZXR1cm4gXCJSZXF1aXJlZFwiO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLm5hbWUgJiYgdGhpcy5mb3JtICYmIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmVycm9ycz8ubm90RXF1YWxzXHJcbiAgICAgICYmICh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5kaXJ0eSB8fCB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS50b3VjaGVkKSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IHRoaXMucXVlc3Rpb24udmFsaWRhdG9ycztcclxuICAgICAgdmFyIGtlZXBHb2luZyA9IHRydWU7XHJcbiAgICAgIHZhbGlkYXRvckxpc3QuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgIGlmIChrZWVwR29pbmcpIHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ3ZhbGlkYXRvci50eXBlLm1pbmxlbmd0aCAnLCB2YWxpZGF0b3IudHlwZSlcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2N1c3RvbXZhbGlkYXRpb24nKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3ZhbGlkYXRvci50ZXh0ICcsIHZhbGlkYXRvci50ZXh0KVxyXG4gICAgICAgICAgICBtZXNzYWdlID0gdmFsaWRhdG9yLnRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIGtlZXBHb2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5zZXRNaW5EYXRlKGRhdGVWYWx1ZTpEYXRlLHF1ZXN0aW9uOkVsZW1lbnRzTW9kZWwpe1xyXG4gIGNvbnNvbGUubG9nKCdzZXRNaW5EYXRlIGNhbGxlZCcsIHF1ZXN0aW9uLm1pbik7XHJcbiAgY29uc29sZS5sb2coJ3F1ZXN0aW9uLm1pbiAnLHRoaXMuZm9ybS5jb250cm9sc1txdWVzdGlvbi5taW5dLnZhbHVlKTtcclxuICBsZXQgc3RhcnREYXRlVmFsdWU6RGF0ZT1uZXcgRGF0ZSh0aGlzLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubWluXS52YWx1ZSk7XHJcbiAgIC8vdGhpcy5taW5EYXRlID0gbmV3IERhdGUoc3RhcnREYXRlVmFsdWUpO1xyXG4gICAvL3RoaXMuZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXS5zZXRWYWx1ZShudWxsKTtcclxuICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoKTtcclxuICAgY29uc29sZS5sb2coJ3N0YXJ0RGF0ZVZhbHVlJyxzdGFydERhdGVWYWx1ZSk7XHJcbiAgIHRoaXMubWluRGF0ZS5zZXRNb250aChzdGFydERhdGVWYWx1ZS5nZXRNb250aCgpKTtcclxuICAgdGhpcy5taW5EYXRlLnNldEZ1bGxZZWFyKE51bWJlcihzdGFydERhdGVWYWx1ZS5nZXRGdWxsWWVhcigpKSk7XHJcbiAgIHRoaXMubWluRGF0ZS5zZXREYXRlKE51bWJlcihzdGFydERhdGVWYWx1ZS5nZXREYXRlKCkpICsgMSk7XHJcbn1cclxuXHJcbiAgcGFyc2VEYXRlKHN0ckRhdGU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdpcyBwYXJzZURhdGUgY2FsbGVkJywgc3RyRGF0ZSArICcgdHlwZScsIHR5cGUpIC8vMDUtMTAtMjAyMVxyXG4gICAgICBpZiAoc3RyRGF0ZSAmJiB0eXBlID09PSAnbWF4Jykge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5ID0gc3RyRGF0ZS5zcGxpdCgnLScpO1xyXG4gICAgICAgIC8vbGV0IGRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5tYXhEYXRlLnNldE1vbnRoKE51bWJlcihzcGxpdEFycmF5WzBdKSAtIDEpO1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZS5zZXRGdWxsWWVhcihOdW1iZXIoc3BsaXRBcnJheVsyXSkpO1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZS5zZXREYXRlKE51bWJlcihzcGxpdEFycmF5WzFdKSk7XHJcbiAgICAgICAgIGNvbnNvbGUubG9nKCdkYXRlJywgdGhpcy5tYXhEYXRlKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1heERhdGU7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKHN0ckRhdGUgJiYgdHlwZSA9PT0gJ21pbicpIHtcclxuICAgICAgICB2YXIgc3BsaXRBcnJheSA9IHN0ckRhdGUuc3BsaXQoJy0nKTtcclxuICAgICAgICAvL2xldCBkYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMubWluRGF0ZS5zZXRNb250aChOdW1iZXIoc3BsaXRBcnJheVswXSkgLSAxKTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUuc2V0RnVsbFllYXIoTnVtYmVyKHNwbGl0QXJyYXlbMl0pKTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUuc2V0RGF0ZShOdW1iZXIoc3BsaXRBcnJheVsxXSkpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2RhdGUnLCB0aGlzLm1pbkRhdGUpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWluRGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB2aXNpYmxlSWYoc3RyRXhwOiBzdHJpbmcpIHtcclxuXHJcbiAgICBpZiAoIXN0ckV4cCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgIGxldCBpc0RvZXNOb3RFcXVhbDogYm9vbGVhbjtcclxuICAgIGxldCBpbmRleDogbnVtYmVyID0gc3RyRXhwLmluZGV4T2YoJyE9Jyk7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJz09Jyk7XHJcbiAgICAgIGlzRG9lc05vdEVxdWFsID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCchPScpO1xyXG4gICAgICBpc0RvZXNOb3RFcXVhbCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTsgLy9jbGFpbWFudFByaW9yUGF5MTAyIGRpZmZtYWlsYWRkcmVzczMxNVxyXG4gICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7IC8vbnVsbFxyXG4gICAgLy8gY29uc29sZS5sb2coJ29wZXJhbmQxJyxvcGVyYW5kMSwnb3BlcmFuZDInLG9wZXJhbmQyLCcgdGhpcy5mb3JtJyx0aGlzLmZvcm0uY29udHJvbHNbJ2NpdHkzMTUnXSk7XHJcbiAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzWydvcGVyYW5kMSddKSB7XHJcbiAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IHRoaXMuZm9ybS5jb250cm9sc1tvcGVyYW5kMV0udmFsdWU7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ3ZhbHVlT2ZDbnJ0cmxUb0NoZWNrJywgdmFsdWVPZkNucnRybFRvQ2hlY2spO1xyXG4gICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAhdmFsdWVPZkNucnRybFRvQ2hlY2spIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5mb3JtLmNvbnRyb2xzW29wZXJhbmQxXScsdGhpcy5mb3JtLmNvbnRyb2xzW29wZXJhbmQxXSlcclxuICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1tvcGVyYW5kMV0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbb3BlcmFuZDFdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldERlcGVuZGVudERyb3Bkb3duRGF0YShlbGVtZW50OiBhbnkpIHtcclxuICAgIGlmIChlbGVtZW50LnNlcnZpY2VOYW1lKSB7XHJcbiAgICAgIGlmIChlbGVtZW50LnNlcnZpY2VUeXBlICE9ICdGRVRDSCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBhcmVudENvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbZWxlbWVudC5zZXJ2aWNlQ2FsbFBhcmFtXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIGxldCBzZXJ2aWNlQ2FsbFR5cGUgPSBlbGVtZW50LnNlcnZpY2VDYWxsVHlwZTtcclxuICAgICAgbGV0IHNlcnZpY2VOYW1lOiBzdHJpbmcgPSBlbGVtZW50LnNlcnZpY2VOYW1lO1xyXG4gICAgICBsZXQgc2VydmljZVVwZGF0ZVBhcmFtID0gZWxlbWVudC5zZXJ2aWNlVXBkYXRlUGFyYW07XHJcbiAgICAgIGxldCBicyA9IHRoaXMuZHJvcGRvd25WYWx1ZUJzLmdldChwYXJlbnRDb250cm9sKTtcclxuICAgICAgaWYgKGJzKSB7XHJcbiAgICAgICAgcmV0dXJuIGJzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBicyA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlQnMuc2V0KHBhcmVudENvbnRyb2wsIGJzKTtcclxuICAgICAgfVxyXG4gICAgICBwYXJlbnRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIC8vICBjb25zb2xlLmxvZygncGFyZW50Q29udHJvbCcsIHBhcmVudENvbnRyb2wpO1xyXG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKCd2YWx1ZScsIHZhbHVlKTtcclxuICAgICAgICBsZXQgY3VycmVudEJzID0gdGhpcy5kcm9wZG93blZhbHVlQnMuZ2V0KHBhcmVudENvbnRyb2wpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHNlcnZpY2VDYWxsVHlwZSA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSBHRVQnKTtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXQoYCR7c2VydmljZU5hbWV9JHt2YWx1ZX0vJHtzZXJ2aWNlVXBkYXRlUGFyYW19YClcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJzLm5leHQocmVzWydjaG9pY2VzJ10pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGVwZW5kZW50RmMgPSB0aGlzLmZvcm0uY29udHJvbHNbZWxlbWVudC5uYW1lXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIGxldCBicyA9IHRoaXMuZHJvcGRvd25WYWx1ZUJzLmdldChkZXBlbmRlbnRGYyk7XHJcbiAgICAgIGlmICghYnMpIHtcclxuICAgICAgICBsZXQgYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGVsZW1lbnQuY2hvaWNlcyk7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlQnMuc2V0KGRlcGVuZGVudEZjLCBicyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoZWxlbWVudDogYW55KSB7XHJcblxyXG4gICBcclxuICAgIGlmICghZWxlbWVudC5zZXJ2aWNlTmFtZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAgXHJcbiAgICBsZXQgc2VydmljZVR5cGUgPSBlbGVtZW50LnNlcnZpY2VUeXBlO1xyXG4gICAgaWYgKGVsZW1lbnQuc2VydmljZVR5cGUgPT09ICdGRVRDSCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgc2VydmljZUNhbGxQYXJhbSA9IGVsZW1lbnQuc2VydmljZUNhbGxQYXJhbTsgLy9zc24zMjAsbHN0bmFtZTMyMFxyXG4gICAgbGV0IHNlcnZpY2VDYWxsVHlwZSA9IGVsZW1lbnQuc2VydmljZUNhbGxUeXBlOyAgLy9cIkdFVFwiXHJcbiAgICBsZXQgc2VydmljZU5hbWU6IHN0cmluZyA9IGVsZW1lbnQuc2VydmljZU5hbWU7IC8vL3NlY3VyaXR5LXNlcnZpY2UvdmFsaWRhdGVTU04vXHJcbiAgICBsZXQgc2VydmljZVVwZGF0ZVBhcmFtID0gZWxlbWVudC5zZXJ2aWNlVXBkYXRlUGFyYW07XHJcbiAgICBsZXQgYWxsVmFsdWVQcmVzZW50OkJvb2xlYW49dHJ1ZTtcclxuIC8vICBjb25zb2xlLmxvZygnc2VydmljZUNhbGxQYXJhbScsc2VydmljZUNhbGxQYXJhbSk7XHJcbiAgICBpZiAoc2VydmljZUNhbGxQYXJhbSkge1xyXG4gICAgICB2YXIgc3BsaXR0ZWQgPSBzZXJ2aWNlQ2FsbFBhcmFtLnNwbGl0KFwiLFwiKTtcclxuICAgICAgbGV0IHZhbHVlQXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBsZXQgcGFyYW1BcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXR0ZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvL3VzZSBpIGluc3RlYWQgb2YgMCBkb2IzMjBcclxuICAgICAgIC8vIGNvbnNvbGUubG9nKCdkb2IzMjAnLHRoaXMuZm9ybS5jb250cm9sc1snZG9iMzIwJ10udmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHNbc3BsaXR0ZWRbaV1dLnZhbHVlKSB7XHJcbiAgICAgICAgICBwYXJhbUFyci5wdXNoKHNwbGl0dGVkW2ldKTtcclxuICAgICAgICAgIHZhbHVlQXJyLnB1c2godGhpcy5mb3JtLmNvbnRyb2xzW3NwbGl0dGVkW2ldXS52YWx1ZSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGFsbFZhbHVlUHJlc2VudD1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAvLyBjb25zb2xlLmxvZygndmFsdWVBcnIxMicsIHZhbHVlQXJyLCAncGFyYW1BcnIxMSAnLCBwYXJhbUFyciwgJyBlbGVtZW50JywgZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgbW9kZWw6IFZhbGlkYXRpb25Nb2RlbCA9IHt9O1xyXG4gICAgICBtb2RlbC5wYXJhbU5hbWUgPSBwYXJhbUFycjtcclxuICAgICAgbW9kZWwucGFyYW1WYWx1ZSA9IHZhbHVlQXJyO1xyXG4gICAgICAvLyByZXR1cm4gdGhpcy5wb3N0KGBxdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlYCwgcXVlc3Rpb25uYWlyZURhdGEpO1xyXG4gICAgICBpZihhbGxWYWx1ZVByZXNlbnQpe1xyXG4gICAgICBpZiAoc2VydmljZUNhbGxUeXBlID09PSAnUE9TVCcpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIEdFVCcpO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2VcclxuICAgICAgICAgIC5wb3N0KGAke3NlcnZpY2VOYW1lfWAsIG1vZGVsKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnJldHVybk1vZGVsID0gcmVzO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJldHVybk1vZGVsLnJldHVyblR5cGUgJiYgdGhpcy5yZXR1cm5Nb2RlbC5yZXR1cm5UeXBlID09PSAnUE9QVVAnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5UG9zaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9ICd0b3AnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BVcEhlYWRlciA9IHRoaXMucmV0dXJuTW9kZWwucG9wVXBIZWFkZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcFVwVGV4dCA9IHRoaXMucmV0dXJuTW9kZWwucG9wVXBUZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BVcFllc0FjdGlvbkxhYmVsID0gdGhpcy5yZXR1cm5Nb2RlbC5wb3BVcFllc0J1dHRvbkxhYmVsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BVcE5vQWN0aW9uTGFiZWwgPSB0aGlzLnJldHVybk1vZGVsLnBvcFVwTm9CdXR0b25MYWJlbDtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnJldHVybk1vZGVsICcsIHRoaXMucmV0dXJuTW9kZWwpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy51dGlsLmVycm9ySGFuZGxlcihlcnIpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWNjZXB0KCkge1xyXG4gICAgLy9jb25zb2xlLmxvZygnYWNjZXB0IGNhbGxlZDEyMycsIHRoaXMucmV0dXJuTW9kZWwuaWRlbnRpZmllcilcclxuICAgIGxldCBtb2RlbEFycjogS2V5VmFsdWVNb2RlbFtdID0gdGhpcy5yZXR1cm5Nb2RlbC5pZGVudGlmaWVyO1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IFBhcmFtc1tdID0gW107XHJcbiAgICBmb3IgKHZhciB2YWwgb2YgbW9kZWxBcnIpIHtcclxuICAgICAgcGFyYW1BcnJheS5wdXNoKHsgW3ZhbC5rZXldOiB2YWwudmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJhbXMgPSBwYXJhbUFycmF5LnJlZHVjZSgoYXJyT2JqLCBpdGVtKSA9PiBPYmplY3QuYXNzaWduKGFyck9iaiwgaXRlbSwge30pKTtcclxuICAgIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoW3RoaXMucmV0dXJuTW9kZWwueWVzQWN0aW9uXSwgeyBxdWVyeVBhcmFtczogcGFyYW1zIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcmVqZWN0KCkge1xyXG4gICAgLy9jb25zb2xlLmxvZygnUmVqZWN0IGNhbGxlZCcpXHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KHRoaXMucmV0dXJuTW9kZWwubm9BY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgXHJcblxyXG5cclxuICBmaWx0ZXJWYWx1ZShldmVudCwgZWxlbWVudDogYW55KSB7XHJcbiAgLy8gIGNvbnNvbGUubG9nKCdmaWx0ZXJWYWx1ZSBjYWxsZWQnLCBldmVudCwgJyBlbGVtZW50JywgZWxlbWVudCk7XHJcbiAgICBpZiAoIWVsZW1lbnQuc2VydmljZU5hbWUpIHtcclxuICAgICAgbGV0IGJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+KFtdKTtcclxuICAgICAgbGV0IHF1ZXJ5ID0gZXZlbnQucXVlcnk7XHJcbiAgICAgIGxldCBmaWx0ZXJlZDogYW55W10gPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2hvaWNlID0gZWxlbWVudC5jaG9pY2VzW2ldO1xyXG4gICAgICAgIGlmIChjaG9pY2UudGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9Mb3dlckNhc2UoKSkgPT0gMCkge1xyXG4gICAgICAgICAgZmlsdGVyZWQucHVzaChjaG9pY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicy5uZXh0KGZpbHRlcmVkKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZEJzLnNldChlbGVtZW50Lm5hbWUsIGJzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICBcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRCcyAmJiB0aGlzLmZpbHRlcmVkQnMuZ2V0KGVsZW1lbnQubmFtZSkpIHtcclxuICAgICAgICBsZXQgcXVlcnkgPSBldmVudC5xdWVyeTtcclxuICAgICAgICBsZXQgZmlsdGVyZWQ6IGFueVtdID0gW107XHJcbiAgICAgICAgbGV0IGV4aXN0aW5nQ2hvaWNlcyA9IHRoaXMuZmlsdGVyZWRCcy5nZXQoZWxlbWVudC5uYW1lKS52YWx1ZTtcclxuICAgICAgICBsZXQgYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdEl0ZW1bXT4oW10pO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSBJRi0tLScsIGJzKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGNob2ljZSA9IGV4aXN0aW5nQ2hvaWNlc1tpXTtcclxuICAgICAgICAgIGlmIChjaG9pY2UudGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9Mb3dlckNhc2UoKSkgPT0gMCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKGNob2ljZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJzLm5leHQoZmlsdGVyZWQpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRCcy5zZXQoZWxlbWVudC5uYW1lLCBicyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG5cclxuXHJcbiAgICAgICAgbGV0IHBhcmVudENvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbZWxlbWVudC5zZXJ2aWNlQ2FsbFBhcmFtXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgbGV0IHNlcnZpY2VDYWxsVHlwZSA9IGVsZW1lbnQuc2VydmljZUNhbGxUeXBlO1xyXG4gICAgICAgIGxldCBzZXJ2aWNlTmFtZTogc3RyaW5nID0gZWxlbWVudC5zZXJ2aWNlTmFtZTtcclxuICAgICAgICBsZXQgc2VydmljZVVwZGF0ZVBhcmFtID0gZWxlbWVudC5zZXJ2aWNlVXBkYXRlUGFyYW07XHJcbiAgICAgICAgbGV0IHBhcmVudENvbnRyb2xWYWwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Q29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgcGFyZW50Q29udHJvbFZhbCA9IHBhcmVudENvbnRyb2wudmFsdWVbJ3ZhbHVlJ107ICAvL0NBXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygncGFyZW50Q29udHJvbFZhbCcsIHBhcmVudENvbnRyb2xWYWwpO1xyXG5cclxuICAgICAgICBwYXJlbnRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygncGFyZW50Q29udHJvbFZhbCB2YWx1ZSBjaGFuZ2VkJyk7XHJcbiAgICAgICAgICBsZXQgY2hpbGRDb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3NlcnZpY2VVcGRhdGVQYXJhbV0gYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEJzID0gbmV3IE1hcDxzdHJpbmcsIEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+PigpO1xyXG4gICAgICAgICAgY2hpbGRDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Q29udHJvbFZhbCkge1xyXG4gICAgICAgICAgaWYgKHNlcnZpY2VDYWxsVHlwZSA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXQoYCR7c2VydmljZU5hbWV9JHtwYXJlbnRDb250cm9sVmFsfS8ke3NlcnZpY2VVcGRhdGVQYXJhbX1gKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcXVlcnkgPSBldmVudC5xdWVyeTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWQ6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+KFtdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNbJ2Nob2ljZXMnXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGNob2ljZSA9IHJlc1snY2hvaWNlcyddW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNob2ljZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihxdWVyeS50b0xvd2VyQ2FzZSgpKSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnB1c2goY2hvaWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnMubmV4dChmaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEJzLnNldChlbGVtZW50Lm5hbWUsIGJzKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWQ6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+KFtdKTtcclxuICAgICAgICAgICAgICAgICAgICBicy5uZXh0KGZpbHRlcmVkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkQnMuc2V0KGVsZW1lbnQubmFtZSwgYnMpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGNsaWNrT3B0aW9uKGV2ZW50KXtcclxuICAgIGNvbnNvbGUubG9nKCdjbGlja09wdGlvbiBjYWxsZWQnKVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoZXZlbnQsY250cmxOYW1lOnN0cmluZyl7XHJcbiAgICBjb25zb2xlLmxvZygnb25TZWxlY3QtLScsZXZlbnQudmFsdWUsIGNudHJsTmFtZSk7XHJcbiAgfVxyXG59IiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuXHJcblxyXG4gIDxwLWRpYWxvZyBbaGVhZGVyXT1cInBvcFVwSGVhZGVyXCIgKm5nSWY9XCJkaXNwbGF5UG9zaXRpb25cIiAgWyh2aXNpYmxlKV09XCJkaXNwbGF5UG9zaXRpb25cIiBbcG9zaXRpb25dPVwicG9zaXRpb25cIiBbbW9kYWxdPVwidHJ1ZVwiIFtzdHlsZV09XCJ7d2lkdGg6ICc4MHZ3J31cIiBbYmFzZVpJbmRleF09XCI1MDAwXCJcclxuICBbZHJhZ2dhYmxlXT1cImZhbHNlXCIgW3Jlc2l6YWJsZV09XCJmYWxzZVwiIGFwcGVuZFRvPVwiYm9keVwiPlxyXG4gIFxyXG4gIDxwPnt7cG9wVXBUZXh0fX1cclxuICAgICAgPC9wPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgXHJcbiAgICAgICAgICBzaXplPVwic21hbGxcIiB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCIgKGNsaWNrKT1cInJlamVjdCgpXCI+IFxyXG4gICAgICAgICAgICAgICB7e3BvcFVwTm9BY3Rpb25MYWJlbH19XHJcbiAgICAgICAgICA8L2lvbi1idXR0b24+XHJcblxyXG4gICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIFxyXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCIgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICBmaWxsPVwic29saWRcIiAoY2xpY2spPVwiYWNjZXB0KClcIiA+XHJcbiAgICAgICAgICAgICAgIHt7cG9wVXBZZXNBY3Rpb25MYWJlbH19XHJcbiAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIFxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWRpYWxvZz4gXHJcblxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiIWZvclNjcmVlblF1ZXN0aW9ubmFpcmVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICA8bGFiZWwgW2F0dHIuZm9yXT1cInF1ZXN0aW9uLm5hbWVcIiAqbmdJZj1cInF1ZXN0aW9uLmluZGVudD09PTEgJiYgcXVlc3Rpb24udHlwZSE9J2h0bWwnXCI+XHJcbiAgICAgICAgICB7e3F1ZXN0aW9uLnRpdGxlfX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiZm9yU2NyZWVuUXVlc3Rpb25uYWlyZSAmJiBxdWVzdGlvbi5pbmRlbnQ9PT0xICYmIHF1ZXN0aW9uLnR5cGUhPSdodG1sJyAmJiBxdWVzdGlvbi50eXBlIT0nc2ltcGxlTGFiZWwnICYmIHF1ZXN0aW9uLmN1c3RvbVRhZyE9J2NvbXBvbmVudCdcIlxyXG4gICAgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAge3txdWVzdGlvbi50aXRsZX19XHJcbiAgICAgIFxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInF1ZXN0aW9uLmluZGVudCE9MSAmJiBxdWVzdGlvbi50eXBlIT0naHRtbCcgJiYgcXVlc3Rpb24uY3VzdG9tVGFnICYmICFxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ2ZtdG51bWJlcnRleHQnKVwiXHJcbiAgICBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICB7e3F1ZXN0aW9uLnRpdGxlfX1cclxuICAgICAgXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICAgPGRpdiAgKm5nSWY9XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlICYmIHF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi5jdXN0b21UYWc9PT0nY29tcG9uZW50JyAmJiBxdWVzdGlvbi5pbmRlbnQ9PT0xICYmIHF1ZXN0aW9uLnR5cGUhPSdodG1sJyBcclxuICAgJiYgIXF1ZXN0aW9uLmRlc2NyaXB0aW9uXCI+XHJcbiAgICA8bW9uZXktZXhwZWN0ICpuZ0lmPVwicXVlc3Rpb24uY29tcG9uZW50TmFtZT09PSdtb25leS1leHBlY3QnXCI+PC9tb25leS1leHBlY3Q+XHJcbjwhLS0gPGFwcC1zZWFyY2gtZW1wbG95ZXIgKm5nSWY9XCJxdWVzdGlvbi5jb21wb25lbnROYW1lPT09J2FwcC1zZWFyY2gtZW1wbG95ZXInXCIgKG9uRW1wdHkpPVwicmVzZXRFbXBsb3llcigkZXZlbnQpXCIgKG9uRm91bmQpPVwic2V0RW1wbG95ZXIoJGV2ZW50KVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiPjwvYXBwLXNlYXJjaC1lbXBsb3llcj4gLS0+XHJcbjxhcHAtcmVndWxhci1lbXBsb3llci1kYXRlICpuZ0lmPVwicXVlc3Rpb24uY29tcG9uZW50TmFtZT09PSdhcHAtcmVndWxhci1lbXAtZGF0ZSdcIiAgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXJlZ3VsYXItZW1wbG95ZXItZGF0ZT5cclxuXHJcbjwvZGl2PiBcclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PT0naHRtbCdcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLmh0bWxcIiBjbGFzcz1cImhlYWRpbmdcIj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09PSdzaW1wbGVMYWJlbCdcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLmh0bWxcIj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0nZGF0ZScgJiYgcXVlc3Rpb24ubWF4ICYmIHF1ZXN0aW9uLm1pblwiPlxyXG4gICAgPHAtY2FsZW5kYXIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBbbW9udGhOYXZpZ2F0b3JdPVwidHJ1ZVwiIFt5ZWFyTmF2aWdhdG9yXT1cInRydWVcIlxyXG4gICAgICB5ZWFyUmFuZ2U9XCIxOTAxOjIwNTBcIiBbc2hvd0ljb25dPVwidHJ1ZVwiIFttaW5EYXRlXT1cIm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICAgICAgZGF0ZUZvcm1hdD1cIm1tLWRkLXl5XCIgaW5wdXRJZD1cIm5hdmlnYXRvcnNcIiBkYXRhVHlwZT1cInN0cmluZ1wiIGFwcGVuZFRvPVwiYm9keVwiIFxyXG4gICAgICAgPlxyXG4gICAgPC9wLWNhbGVuZGFyPlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0nZGF0ZScgJiYgIXF1ZXN0aW9uLm1heCAmJiAhcXVlc3Rpb24ubWluXCI+XHJcbiAgICA8cC1jYWxlbmRhciBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIFttb250aE5hdmlnYXRvcl09XCJ0cnVlXCIgW3llYXJOYXZpZ2F0b3JdPVwidHJ1ZVwiXHJcbiAgICAgIFtpbnB1dElkXT1cInF1ZXN0aW9uLm5hbWVcIiBbc2hvd0ljb25dPVwidHJ1ZVwiIGRhdGVGb3JtYXQ9XCJtbS1kZC15eVwiIHllYXJSYW5nZT1cIjE5MDE6MjA1MFwiXHJcbiAgICAgIGRhdGFUeXBlPVwic3RyaW5nXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLWNhbGVuZGFyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSdkYXRlJyAmJiBxdWVzdGlvbi5tYXggJiYgIXF1ZXN0aW9uLm1pblwiPlxyXG4gICAgPHAtY2FsZW5kYXIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBbbW9udGhOYXZpZ2F0b3JdPVwidHJ1ZVwiIFt5ZWFyTmF2aWdhdG9yXT1cInRydWVcIlxyXG4gICAgICBbaW5wdXRJZF09XCJxdWVzdGlvbi5uYW1lXCIgW21heERhdGVdPVwibWF4RGF0ZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgZGF0ZUZvcm1hdD1cIm1tLWRkLXl5XCJcclxuICAgICAgeWVhclJhbmdlPVwiMTkwMToyMDUwXCIgZGF0YVR5cGU9XCJzdHJpbmdcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtY2FsZW5kYXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J2RhdGUnICYmICFxdWVzdGlvbi5tYXggJiYgcXVlc3Rpb24ubWluXCI+XHJcbiAgICA8cC1jYWxlbmRhciBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIFttb250aE5hdmlnYXRvcl09XCJ0cnVlXCIgW3llYXJOYXZpZ2F0b3JdPVwidHJ1ZVwiXHJcbiAgICAgIFtpbnB1dElkXT1cInF1ZXN0aW9uLm5hbWVcIiBbbWluRGF0ZV09XCJtaW5EYXRlXCIgW3Nob3dJY29uXT1cInRydWVcIiBkYXRlRm9ybWF0PVwibW0tZGQteXlcIlxyXG4gICAgICB5ZWFyUmFuZ2U9XCIxOTAxOjIwNTBcIiBkYXRhVHlwZT1cInN0cmluZ1wiIGFwcGVuZFRvPVwiYm9keVwiIChvblNob3cpPVwic2V0TWluRGF0ZSgkZXZlbnQscXVlc3Rpb24pXCI+PC9wLWNhbGVuZGFyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uY3VzdG9tVGFnICYmIHF1ZXN0aW9uLmN1c3RvbVRhZy5pbmNsdWRlcygncGFzc3dvcmQnKSAmJiAhcXVlc3Rpb24ubmFtZS5pbmNsdWRlcygnY29uZnB3ZCcpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgIDxwLXBhc3N3b3JkIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW3RvZ2dsZU1hc2tdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiPjwvcC1wYXNzd29yZD5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgKm5nSWY9XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHhcIj5cclxuICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCI+PC9hcHAtb3ZlcmxheS1pbmZvPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ3Bhc3N3b3JkJykgJiYgcXVlc3Rpb24ubmFtZS5pbmNsdWRlcygnY29uZnB3ZCcpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgIDxwLXBhc3N3b3JkIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW3RvZ2dsZU1hc2tdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiPjwvcC1wYXNzd29yZD5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgKm5nSWY9XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHhcIj5cclxuICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCI+PC9hcHAtb3ZlcmxheS1pbmZvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiAqbmdJZj1cIiFxdWVzdGlvbi5jdXN0b21UYWcgJiYgcXVlc3Rpb24udHlwZSAmJiAocXVlc3Rpb24udHlwZSE9J3JhZGlvZ3JvdXAnICYmIHF1ZXN0aW9uLnR5cGUhPSdkaXNwbGF5dGV4dGFzbGFiZWwnKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgJiYgIXF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgcXVlc3Rpb24uc2l6ZSAmJiBxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJPcHRpb25hbFwiIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIiBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiIC8+XHJcbiAgXHJcbiAgXHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICAgICAgICYmICFxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCIgW3NpemVdPVwicXVlc3Rpb24uc2l6ZVwiIC8+XHJcbiAgXHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICAgICAgICAgICYmICFxdWVzdGlvbi5pc1JlcXVpcmVkICYmICFxdWVzdGlvbi5zaXplICYmIHF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCIgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAgICAgICAmJiAhcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiAhcXVlc3Rpb24uc2l6ZSAmJiAhcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWxcIiAvPlxyXG4gIFxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICAgIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIiBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiIChibHVyKT1cInZhbGlkYXRlKHF1ZXN0aW9uKVwiIC8+XHJcbiAgXHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICAgICAgICYmIHF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgcXVlc3Rpb24uc2l6ZSAmJiAhcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICAgIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmICFxdWVzdGlvbi5zaXplICYmIHF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiIC8+XHJcbiAgXHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICAgICAgICYmIHF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgIXF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIC8+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4XCI+XHJcbiAgICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi50eXBlICAmJiBxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ09wdGlvbmFsJylcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAgJiYgIXF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgcXVlc3Rpb24uc2l6ZSAmJiBxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWxcIiBbc2l6ZV09XCJxdWVzdGlvbi5zaXplXCIgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAvPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgICAgJiYgIXF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgcXVlc3Rpb24uc2l6ZSAmJiAhcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCIgW3NpemVdPVwicXVlc3Rpb24uc2l6ZVwiIC8+XHJcbiAgXHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAgICAmJiAhcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiAhcXVlc3Rpb24uc2l6ZSAmJiBxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWxcIiBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiIC8+XHJcbiAgXHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAgICAgICAmJiAhcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiAhcXVlc3Rpb24uc2l6ZSAmJiAhcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCIgLz5cclxuICAgICAgPGRpdiBzdHlsZT1cImZsZXgtZ3JvdzogMTtcIiAqbmdJZj1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweFwiPlxyXG4gICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ3Bob25lJylcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XHJcbiAgICAgIDxwLWlucHV0TWFzayBtYXNrPVwiOTk5IDk5OS05OTk5XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCJcclxuICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgJiYgIXF1ZXN0aW9uLmlzUmVxdWlyZWRcIj48L3AtaW5wdXRNYXNrPlxyXG4gIFxyXG4gICAgICA8cC1pbnB1dE1hc2sgbWFzaz1cIjk5OSA5OTktOTk5OVwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgcGxhY2Vob2xkZXI9XCI5OTkgOTk5LTk5OTlcIlxyXG4gICAgICAgICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkXCI+PC9wLWlucHV0TWFzaz5cclxuICAgICAgPGRpdiBzdHlsZT1cImZsZXgtZ3JvdzogMTtcIiAqbmdJZj1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweFwiPlxyXG4gICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ3NzbicpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgIDxwLWlucHV0TWFzayBtYXNrPVwiOTk5LTk5LTk5OTlcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiICpuZ0lmPVwicXVlc3Rpb24uaXNSZXF1aXJlZFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIjk5OS05OS05OTk5XCI+XHJcbiAgICAgICAgPC9wLWlucHV0TWFzaz5cclxuICBcclxuICAgICAgICA8cC1pbnB1dE1hc2sgbWFzaz1cIjk5OS05OS05OTk5XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiAqbmdJZj1cIiFxdWVzdGlvbi5pc1JlcXVpcmVkXCJcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWxcIj5cclxuICAgICAgICA8L3AtaW5wdXRNYXNrPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgKm5nSWY9XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHhcIj5cclxuICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5jdXN0b21UYWcgJiYgIXF1ZXN0aW9uLmN1c3RvbVRhZy5pbmNsdWRlcygncGhvbmUnKSBcclxuICAgICYmICFxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ3Bhc3N3b3JkJykgICYmICFxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ3NzbicpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICAgIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIiBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiIC8+XHJcbiAgXHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICYmIHF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgcXVlc3Rpb24uc2l6ZSAmJiAhcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICAgIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmICFxdWVzdGlvbi5zaXplICYmIHF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBbbWF4TGVuZ3RoXT1cInF1ZXN0aW9uLm1heExlbmd0aFwiIC8+XHJcbiAgXHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICYmIHF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgIXF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIC8+XHJcbiAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4XCI+XHJcbiAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gJiYgdmlzaWJsZUlmKHF1ZXN0aW9uLnZpc2libGVJZikgLS0+XHJcbiAgPGRpdiAgICpuZ0lmPVwicXVlc3Rpb24udHlwZSAmJiBxdWVzdGlvbi50eXBlPT09J3NpbmdsZXNlbGVjdGNoZWNrYm94J1wiPlxyXG4gICAgPCEtLSA8ZGl2IFtuZ1N0eWxlXT1cInNldFN0eWxlKHF1ZXN0aW9uLmluZGVudClcIj4gLS0+XHJcbiAgICAgIDxwLXNlbGVjdEJ1dHRvbiBbb3B0aW9uc109XCJxdWVzdGlvbi5jaG9pY2VzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW211bHRpcGxlXT1mYWxzZVxyXG4gICAgICAgIG9wdGlvbkxhYmVsPVwidGV4dFwiIG9wdGlvblZhbHVlPVwidmFsdWVcIiA+PC9wLXNlbGVjdEJ1dHRvbj5cclxuICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8ZGl2ICAgKm5nSWY9XCJxdWVzdGlvbi50eXBlICYmIHF1ZXN0aW9uLnR5cGU9PT0nZHJvcGRvd24nICYmIHF1ZXN0aW9uLnNpemVcIj4gXHJcbiAgICAgIDwhLS0gPGRpdiAgY2xhc3M9XCJmbGV4LWNoaWxkXCI+IFxyXG4gICAgICAgIDxwLWRyb3Bkb3duIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgKm5nSWY9XCJxdWVzdGlvbi5jaG9pY2VzLmxlbmd0aD4zXCIgXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgICAgXCIgW29wdGlvbnNdPVwiIGdldERlcGVuZGVudERyb3Bkb3duRGF0YShxdWVzdGlvbil8IGFzeW5jXCJcclxuICAgICAgICBvcHRpb25MYWJlbD1cInRleHRcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgW3N0eWxlXT1cInsnd2lkdGgnOicyMDBweCcsJ2hlaWdodCc6JzM1cHgnfVwiIFtmaWx0ZXJdPVwidHJ1ZVwiIGZpbHRlckJ5PVwidGV4dFwiXHJcbiAgICAgICA+XHJcbiAgICAgIDwvcC1kcm9wZG93bj5cclxuXHJcbiAgICBcclxuICAgICAgPHAtZHJvcGRvd24gW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiAqbmdJZj1cInF1ZXN0aW9uLmNob2ljZXMubGVuZ3RoPD0zXCIgZWRpdGFibGU9XCJ0cnVlXCIgZmlsdGVyPVwidHJ1ZVwiIGZpbHRlckJ5PVwidGV4dFwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgcGxhY2Vob2xkZXI9XCIgICAgXCIgW29wdGlvbnNdPVwiIGdldERlcGVuZGVudERyb3Bkb3duRGF0YShxdWVzdGlvbil8IGFzeW5jXCJcclxuICAgICAgICBvcHRpb25MYWJlbD1cInRleHRcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgW3N0eWxlXT1cInsnd2lkdGgnOicyMDBweCcsJ2hlaWdodCc6JzM1cHgnfVwiPlxyXG4gICAgICA8L3AtZHJvcGRvd24+XHJcbiAgICAgIDwvZGl2PiAgLS0+XHJcblxyXG4gICAgICA8IS0tIDxwLWF1dG9Db21wbGV0ZSBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBbc3VnZ2VzdGlvbnNdPVwiZ2V0RGVwZW5kZW50RHJvcGRvd25EYXRhKHF1ZXN0aW9uKXwgYXN5bmNcIiBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAoY29tcGxldGVNZXRob2QpPVwiZmlsdGVyVmFsdWUoJGV2ZW50LHF1ZXN0aW9uLmNob2ljZXMscXVlc3Rpb24ubmFtZSlcIiBmaWVsZD1cInRleHRcIiBbZHJvcGRvd25dPVwidHJ1ZVwiIFxyXG4gICAgICBtaW5MZW5ndGggPSAzIGZvcmNlU2VsZWN0aW9uPVwidHJ1ZVwiIFtzaG93XT1cImdldERlcGVuZGVudERyb3Bkb3duRGF0YShxdWVzdGlvbil8IGFzeW5jXCJcclxuICAgICA+ICAtLT5cclxuICAgICA8ZGl2ID4gXHJcbiAgICAgICBcclxuICAgICAgPHAtYXV0b0NvbXBsZXRlIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIGFwcGVuZFRvPVwiYm9keVwiIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZEJzLmdldChxdWVzdGlvbi5uYW1lKXwgYXN5bmNcIlxyXG4gICAgIChjb21wbGV0ZU1ldGhvZCk9XCJmaWx0ZXJWYWx1ZSgkZXZlbnQscXVlc3Rpb24pXCIgZGF0YUtleSA9XCJ2YWx1ZVwiIGZpZWxkPVwidGV4dFwiIFtkcm9wZG93bl09XCJ0cnVlXCIgW3NpemVdPVwicXVlc3Rpb24uc2l6ZVwiXHJcbiAgICAgbWluTGVuZ3RoID0gMSBmb3JjZVNlbGVjdGlvbj1cInRydWVcIiB0eXBlPVwidGV4dFwiIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQscXVlc3Rpb24ubmFtZSlcIj4gXHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgbGV0LXZhbHVlIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPGRpdj57e3ZhbHVlLnRleHR9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLWF1dG9Db21wbGV0ZT5cclxuPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgIFxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGUgJiYgcXVlc3Rpb24udHlwZT09PSdkcm9wZG93bicgJiYgIXF1ZXN0aW9uLnNpemVcIj5cclxuICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRCcy5nZXQocXVlc3Rpb24ubmFtZSl8IGFzeW5jXCIgKGNvbXBsZXRlTWV0aG9kKT1cImZpbHRlclZhbHVlKCRldmVudCxxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICBkYXRhS2V5PVwidmFsdWVcIiBmaWVsZD1cInRleHRcIiBbZHJvcGRvd25dPVwidHJ1ZVwiIG1pbkxlbmd0aD0zIGZvcmNlU2VsZWN0aW9uPVwidHJ1ZVwiIHR5cGU9XCJ0ZXh0XCIgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudCxxdWVzdGlvbi5uYW1lKVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LXZhbHVlIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj57e3ZhbHVlLnRleHR9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uY3VzdG9tVGFnICYmIHF1ZXN0aW9uLmN1c3RvbVRhZy5pbmNsdWRlcygnZmlsZXVwbG9hZCcpXCI+XHJcbiAgICAgIDxhcHAtZmlsZS11cGxvYWRlciBbYWxsb3dlZEZpbGVUeXBlXT1cInF1ZXN0aW9uLmFsbG93ZWRGaWxlVHlwZVwiICBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICBbbWF4U2l6ZUluTUJdPVwicXVlc3Rpb24uc2l6ZUluTUJcIiBbbXVsdGlwbGVdPVwicXVlc3Rpb24ubXVsdGlwbGVcIiBbbm9PZkZpbGVzVG9VcGxvYWRdPVwicXVlc3Rpb24ubm9PRkZpbGVzXCIgPjwvYXBwLWZpbGUtdXBsb2FkZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwicGFkZGluZzogMHB4O1wiICpuZ0lmPVwicXVlc3Rpb24udHlwZSAmJiBxdWVzdGlvbi50eXBlPT09J3JhZGlvZ3JvdXAnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XHJcbiAgICAgICAgICA8cC1zZWxlY3RCdXR0b24gW29wdGlvbnNdPVwicXVlc3Rpb24uY2hvaWNlc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIG9wdGlvbkxhYmVsPVwidGV4dFwiXHJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIj48L3Atc2VsZWN0QnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4XCI+XHJcbiAgICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCI+PC9hcHAtb3ZlcmxheS1pbmZvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwicGFkZGluZzogMHB4O1wiICpuZ0lmPVwicXVlc3Rpb24udHlwZSAmJiBxdWVzdGlvbi50eXBlPT09J2Rpc3BsYXl0ZXh0YXNsYWJlbCdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgPGxhYmVsPnt7Zm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXS52YWx1ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIvPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgKm5nSWY9XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHhcIj5cclxuICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXY+XHJcbiAgICA8c21hbGwgY2xhc3M9XCJwLWVycm9yXCIgKm5nSWY9XCJpc1ZhbGlkIT0nJ1wiPnt7aXNWYWxpZH19PC9zbWFsbD5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
1095
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DynamicFormPanelComponent, { className: "DynamicFormPanelComponent", filePath: "lib\\components\\questionnaire\\dynamic-form-panel.component.ts", lineNumber: 24 }); })();
1096
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL2R5bmFtaWMtZm9ybS1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9keW5hbWljLWZvcm0tcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNDbkUsc0NBRWtDO0lBQW5CLGdNQUFTLGVBQUEsZ0JBQVEsQ0FBQSxJQUFDO0lBQzVCLFlBQ0w7SUFBQSxpQkFBYTtJQUViLHNDQUVpQztJQUFwQixnTUFBUyxlQUFBLGdCQUFRLENBQUEsSUFBQztJQUMxQixZQUNMO0lBQUEsaUJBQWE7OztJQVBSLGVBQ0w7SUFESywyREFDTDtJQUtLLGVBQ0w7SUFESyw0REFDTDs7Ozs7SUFoQlIsbUNBQ3dEO0lBREUseVBBQTZCO0lBR3ZGLHlCQUFHO0lBQUEsWUFDQztJQUFBLGlCQUFJO0lBQ0oscUdBYWdCO0lBQ3BCLGlCQUFXOzs7SUFuQmtILDBDQUF5QjtJQUE1SSwyQ0FBc0IsbUNBQUEsNkJBQUEsZUFBQSxvQkFBQSxvQkFBQSxvQkFBQTtJQUc3QixlQUNDO0lBREQsZ0RBQ0M7OztJQW1CRSw2QkFBdUY7SUFDckYsWUFBa0I7SUFBQSxpQkFBUTs7O0lBRHJCLDRDQUEw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LGVBQTZEO1lBQTdELHdGQUE2RDtZQVEzRCxlQUFrRTtZQUFsRSxpR0FBa0U7WUFzQ3BFLGVBQW1FO1lBQW5FLGtHQUFtRTtZQWFuRSxlQUFxRTtZQUFyRSw4RkFBcUU7WUFNN0IsZUFBbUQ7WUFBbkQsOEVBQW1EO1lBVW5ELGVBQTJEO1lBQTNELHNGQUEyRDtZQVlqRixlQUFpQjtZQUFqQix3Q0FBaUI7OztpRkQzUmhDLHlCQUF5QjtjQVJyQyxTQUFTOzJCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJO2dNQUs1QixRQUFRO2tCQUFoQixLQUFLO1lBQ0csSUFBSTtrQkFBWixLQUFLO1lBQ0csc0JBQXNCO2tCQUE5QixLQUFLOztrRkFISyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRWxlbWVudHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0VsZW1lbnRzTW9kZWwnO1xyXG5pbXBvcnQgeyBLZXlWYWx1ZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvS2V5VmFsdWVNb2RlbCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL1ZhbGlkYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUvdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlsL3V0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uU2VydmljZSB9IGZyb20gJy4vcXVlc3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICcuL1NlbGVjdEl0ZW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYW5lbC1xdWVzdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybS1wYW5lbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzIDogWycuL2R5bmFtaWMtZm9ybS1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtUGFuZWxDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBFbGVtZW50c01vZGVsO1xyXG4gIEBJbnB1dCgpIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgZm9yU2NyZWVuUXVlc3Rpb25uYWlyZTogYm9vbGVhbjtcclxuICBtaW5EYXRlOiBEYXRlO1xyXG4gIG1heERhdGU6IERhdGU7XHJcbiAgZGlzcGxheVBvc2l0aW9uOiBib29sZWFuO1xyXG4gIHBvc2l0aW9uOiBzdHJpbmc7XHJcbiAgcG9wVXBIZWFkZXI6IHN0cmluZztcclxuICBwb3BVcFRleHQ6IHN0cmluZztcclxuICBwb3BVcFllc0FjdGlvbkxhYmVsOiBzdHJpbmc7XHJcbiAgcG9wVXBOb0FjdGlvbkxhYmVsOiBzdHJpbmc7XHJcbiAgZHJvcGRvd25WYWx1ZUJzID0gbmV3IE1hcDxVbnR5cGVkRm9ybUNvbnRyb2wsIEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+PigpO1xyXG4gIGZpbHRlcmVkQnMgPSBuZXcgTWFwPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdEl0ZW1bXT4+KCk7XHJcbiAgcmV0dXJuTW9kZWwgPSBuZXcgVmFsaWRhdGlvbk1vZGVsKCk7XHJcbiBcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc2VydmljZTogUXVlc3Rpb25TZXJ2aWNlLCBwdWJsaWMgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWw6IFV0aWxTZXJ2aWNlLCBwdWJsaWMgcXVlc3Rpb25TZXJ2aWNlOiBRdWVzdGlvblNlcnZpY2UsIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIpIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAvLyAgIHRoaXMubG9nZ2VyLmRlYnVnKCdpcyBEeW5hbWljRm9ybVF1ZXN0aW9uQ29tcG9uZW50IG5nT25Jbml0IGNhbGxlZCcsIHRoaXMucXVlc3Rpb24pXHJcbiAgXHJcbiAgXHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlucHV0VHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0RhdGUgJywgdGhpcy5xdWVzdGlvbik7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb24ubWF4KSB7XHJcbiAgICAgICAgICB0aGlzLnBhcnNlRGF0ZSh0aGlzLnF1ZXN0aW9uLm1heCwgJ21heCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLm1pbikge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZURhdGUodGhpcy5xdWVzdGlvbi5taW4sICdtaW4nKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIGdldCBpc1ZhbGlkKCkge1xyXG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ2lzVmFsaWQgaXMgY2FsbGxlZCcpO1xyXG4gICAgbGV0IG1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgcXVlc3Rpb25UeXBlOiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLnR5cGU7XHJcbiAgICBpZiAoJ2h0bWwnID09PSBxdWVzdGlvblR5cGUgfHwgKCdidXR0b24nID09PSBxdWVzdGlvblR5cGUgJiYgIXRoaXMucXVlc3Rpb24udmFsaWRhdG9ycykgfHwgJ3NpbXBsZUxhYmVsJyA9PT0gcXVlc3Rpb25UeXBlIHx8ICdkaXNwbGF5dGV4dGFzbGFiZWwnID09PSBxdWVzdGlvblR5cGUpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLm5hbWUgJiYgdGhpcy5mb3JtICYmIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmVycm9ycz8ucmVxdWlyZWRcclxuICAgICAgJiYgKHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmRpcnR5IHx8IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLnRvdWNoZWQpKSB7XHJcbiAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ2Vycm9ycz8ucmVxdWlyZWQnLHRoaXMucXVlc3Rpb24pXHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkRXJyb3JUZXh0O1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/Lm1heGxlbmd0aCAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgIC8vICAgLy8vdGhpcy5sb2dnZXIuZGVidWcoJ2Vycm9ycz8ubWF4TGVuZ3RoJyx0aGlzLnF1ZXN0aW9uKVxyXG4gICAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5xdWVzdGlvbi5kZXNjcmlwdGlvbjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLm5hbWUgJiYgdGhpcy5mb3JtICYmIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmVycm9ycz8ucGF0dGVyblxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ2Vycm9ycz8ucGF0dGVybicsdGhpcy5xdWVzdGlvbilcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbGlkYXRvci50eXBlICcsIHZhbGlkYXRvci50eXBlKVxyXG4gICAgICAgIGlmIChrZWVwR29pbmcpIHtcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3JlZ2V4Jykge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygndmFsaWRhdG9yLnRleHQgJywgdmFsaWRhdG9yLnRleHQpXHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSB2YWxpZGF0b3IudGV4dDtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0ubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/LmRhdGVDb21wYXJpc2lvblxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgaWYgKGtlZXBHb2luZykge1xyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCd2YWxpZGF0b3IudGV4dCAnLCB2YWxpZGF0b3IudGV4dClcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRvci50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uICYmIHRoaXMucXVlc3Rpb24ubmFtZSAmJiB0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZXJyb3JzPy5wYXNzd29yZENvbXBhcmlzaW9uXHJcbiAgICAgICYmICh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5kaXJ0eSB8fCB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS50b3VjaGVkKSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IHRoaXMucXVlc3Rpb24udmFsaWRhdG9ycztcclxuICAgICAgdmFyIGtlZXBHb2luZyA9IHRydWU7XHJcbiAgICAgIGxldCBtZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICBpZiAoa2VlcEdvaW5nKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMubG9nZ2VyLmRlYnVnKCd2YWxpZGF0b3IudHlwZS5taW5sZW5ndGggJywgdmFsaWRhdG9yLnR5cGUpXHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJykge1xyXG4gICAgICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbGlkYXRvci50ZXh0ICcsIHZhbGlkYXRvci50ZXh0KVxyXG4gICAgICAgICAgICBtZXNzYWdlID0gdmFsaWRhdG9yLnRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIGtlZXBHb2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/Lm1pbmxlbmd0aFxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ01pbkxlbmd0aCcpXHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgaWYgKGtlZXBHb2luZykge1xyXG4gICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbGlkYXRvci50eXBlLm1pbmxlbmd0aCAnLCB2YWxpZGF0b3IudHlwZSlcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3RleHQnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCd2YWxpZGF0b3IudGV4dCAnLCB2YWxpZGF0b3IudGV4dClcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRvci50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gIFxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5uYW1lICYmIHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5lcnJvcnM/Lm1heGxlbmd0aFxyXG4gICAgICAmJiAodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZGlydHkgfHwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0udG91Y2hlZCkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRvcnM7XHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgaWYgKGtlZXBHb2luZykge1xyXG4gICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbGlkYXRvci50eXBlLm1pbmxlbmd0aCAnLCB2YWxpZGF0b3IudHlwZSlcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3RleHQnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCd2YWxpZGF0b3IudGV4dCAnLCB2YWxpZGF0b3IudGV4dClcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRvci50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICBrZWVwR29pbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG5cclxuICAgIH1cclxuICBcclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uICYmIHRoaXMucXVlc3Rpb24ubmFtZSAmJiB0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb24ubmFtZV0uZXJyb3JzPy5yZXF1aXJlZElmXHJcbiAgICAgICYmICh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5kaXJ0eSB8fCB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS50b3VjaGVkKSkge1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICByZXR1cm4gXCJSZXF1aXJlZFwiO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbiAmJiB0aGlzLnF1ZXN0aW9uLm5hbWUgJiYgdGhpcy5mb3JtICYmIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLmVycm9ycz8ubm90RXF1YWxzXHJcbiAgICAgICYmICh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5kaXJ0eSB8fCB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS50b3VjaGVkKSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IHRoaXMucXVlc3Rpb24udmFsaWRhdG9ycztcclxuICAgICAgdmFyIGtlZXBHb2luZyA9IHRydWU7XHJcbiAgICAgIHZhbGlkYXRvckxpc3QuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgIGlmIChrZWVwR29pbmcpIHtcclxuICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbGlkYXRvci50eXBlLm1pbmxlbmd0aCAnLCB2YWxpZGF0b3IudHlwZSlcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2N1c3RvbXZhbGlkYXRpb24nKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbGlkYXRvci50ZXh0ICcsIHZhbGlkYXRvci50ZXh0KVxyXG4gICAgICAgICAgICBtZXNzYWdlID0gdmFsaWRhdG9yLnRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLnF1ZXN0aW9uLm5hbWVdLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIGtlZXBHb2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIHZhciBrZWVwR29pbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5xdWVzdGlvbi5uYW1lXS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5zZXRNaW5EYXRlKGRhdGVWYWx1ZTpEYXRlLHF1ZXN0aW9uOkVsZW1lbnRzTW9kZWwpe1xyXG4gIHRoaXMubG9nZ2VyLmRlYnVnKCdzZXRNaW5EYXRlIGNhbGxlZCcsIHF1ZXN0aW9uLm1pbik7XHJcbiAgdGhpcy5sb2dnZXIuZGVidWcoJ3F1ZXN0aW9uLm1pbiAnLHRoaXMuZm9ybS5jb250cm9sc1txdWVzdGlvbi5taW5dLnZhbHVlKTtcclxuICBsZXQgc3RhcnREYXRlVmFsdWU6RGF0ZT1uZXcgRGF0ZSh0aGlzLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubWluXS52YWx1ZSk7XHJcbiAgIC8vdGhpcy5taW5EYXRlID0gbmV3IERhdGUoc3RhcnREYXRlVmFsdWUpO1xyXG4gICAvL3RoaXMuZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXS5zZXRWYWx1ZShudWxsKTtcclxuICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUoKTtcclxuICAgdGhpcy5sb2dnZXIuZGVidWcoJ3N0YXJ0RGF0ZVZhbHVlJyxzdGFydERhdGVWYWx1ZSk7XHJcbiAgIHRoaXMubWluRGF0ZS5zZXRNb250aChzdGFydERhdGVWYWx1ZS5nZXRNb250aCgpKTtcclxuICAgdGhpcy5taW5EYXRlLnNldEZ1bGxZZWFyKE51bWJlcihzdGFydERhdGVWYWx1ZS5nZXRGdWxsWWVhcigpKSk7XHJcbiAgIHRoaXMubWluRGF0ZS5zZXREYXRlKE51bWJlcihzdGFydERhdGVWYWx1ZS5nZXREYXRlKCkpICsgMSk7XHJcbn1cclxuXHJcbiAgcGFyc2VEYXRlKHN0ckRhdGU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdpcyBwYXJzZURhdGUgY2FsbGVkJywgc3RyRGF0ZSArICcgdHlwZScsIHR5cGUpIC8vMDUtMTAtMjAyMVxyXG4gICAgICBpZiAoc3RyRGF0ZSAmJiB0eXBlID09PSAnbWF4Jykge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5ID0gc3RyRGF0ZS5zcGxpdCgnLScpO1xyXG4gICAgICAgIC8vbGV0IGRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5tYXhEYXRlLnNldE1vbnRoKE51bWJlcihzcGxpdEFycmF5WzBdKSAtIDEpO1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZS5zZXRGdWxsWWVhcihOdW1iZXIoc3BsaXRBcnJheVsyXSkpO1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZS5zZXREYXRlKE51bWJlcihzcGxpdEFycmF5WzFdKSk7XHJcbiAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdkYXRlJywgdGhpcy5tYXhEYXRlKVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1heERhdGU7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKHN0ckRhdGUgJiYgdHlwZSA9PT0gJ21pbicpIHtcclxuICAgICAgICB2YXIgc3BsaXRBcnJheSA9IHN0ckRhdGUuc3BsaXQoJy0nKTtcclxuICAgICAgICAvL2xldCBkYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMubWluRGF0ZS5zZXRNb250aChOdW1iZXIoc3BsaXRBcnJheVswXSkgLSAxKTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUuc2V0RnVsbFllYXIoTnVtYmVyKHNwbGl0QXJyYXlbMl0pKTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUuc2V0RGF0ZShOdW1iZXIoc3BsaXRBcnJheVsxXSkpO1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2RhdGUnLCB0aGlzLm1pbkRhdGUpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWluRGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB2aXNpYmxlSWYoc3RyRXhwOiBzdHJpbmcpIHtcclxuXHJcbiAgICBpZiAoIXN0ckV4cCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgIGxldCBpc0RvZXNOb3RFcXVhbDogYm9vbGVhbjtcclxuICAgIGxldCBpbmRleDogbnVtYmVyID0gc3RyRXhwLmluZGV4T2YoJyE9Jyk7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJz09Jyk7XHJcbiAgICAgIGlzRG9lc05vdEVxdWFsID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCchPScpO1xyXG4gICAgICBpc0RvZXNOb3RFcXVhbCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKTsgLy9jbGFpbWFudFByaW9yUGF5MTAyIGRpZmZtYWlsYWRkcmVzczMxNVxyXG4gICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7IC8vbnVsbFxyXG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ29wZXJhbmQxJyxvcGVyYW5kMSwnb3BlcmFuZDInLG9wZXJhbmQyLCcgdGhpcy5mb3JtJyx0aGlzLmZvcm0uY29udHJvbHNbJ2NpdHkzMTUnXSk7XHJcbiAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzWydvcGVyYW5kMSddKSB7XHJcbiAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IHRoaXMuZm9ybS5jb250cm9sc1tvcGVyYW5kMV0udmFsdWU7XHJcbiAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbHVlT2ZDbnJ0cmxUb0NoZWNrJywgdmFsdWVPZkNucnRybFRvQ2hlY2spO1xyXG4gICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAhdmFsdWVPZkNucnRybFRvQ2hlY2spIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygndGhpcy5mb3JtLmNvbnRyb2xzW29wZXJhbmQxXScsdGhpcy5mb3JtLmNvbnRyb2xzW29wZXJhbmQxXSlcclxuICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1tvcGVyYW5kMV0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbb3BlcmFuZDFdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldERlcGVuZGVudERyb3Bkb3duRGF0YShlbGVtZW50OiBhbnkpIHtcclxuICAgIGlmIChlbGVtZW50LnNlcnZpY2VOYW1lKSB7XHJcbiAgICAgIGlmIChlbGVtZW50LnNlcnZpY2VUeXBlICE9ICdGRVRDSCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHBhcmVudENvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbZWxlbWVudC5zZXJ2aWNlQ2FsbFBhcmFtXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIGxldCBzZXJ2aWNlQ2FsbFR5cGUgPSBlbGVtZW50LnNlcnZpY2VDYWxsVHlwZTtcclxuICAgICAgbGV0IHNlcnZpY2VOYW1lOiBzdHJpbmcgPSBlbGVtZW50LnNlcnZpY2VOYW1lO1xyXG4gICAgICBsZXQgc2VydmljZVVwZGF0ZVBhcmFtID0gZWxlbWVudC5zZXJ2aWNlVXBkYXRlUGFyYW07XHJcbiAgICAgIGxldCBicyA9IHRoaXMuZHJvcGRvd25WYWx1ZUJzLmdldChwYXJlbnRDb250cm9sKTtcclxuICAgICAgaWYgKGJzKSB7XHJcbiAgICAgICAgcmV0dXJuIGJzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBicyA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlQnMuc2V0KHBhcmVudENvbnRyb2wsIGJzKTtcclxuICAgICAgfVxyXG4gICAgICBwYXJlbnRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIC8vICB0aGlzLmxvZ2dlci5kZWJ1ZygncGFyZW50Q29udHJvbCcsIHBhcmVudENvbnRyb2wpO1xyXG4gICAgICAgIC8vICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd2YWx1ZScsIHZhbHVlKTtcclxuICAgICAgICBsZXQgY3VycmVudEJzID0gdGhpcy5kcm9wZG93blZhbHVlQnMuZ2V0KHBhcmVudENvbnRyb2wpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgaWYgKHNlcnZpY2VDYWxsVHlwZSA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBHRVQnKTtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXQoYCR7c2VydmljZU5hbWV9JHt2YWx1ZX0vJHtzZXJ2aWNlVXBkYXRlUGFyYW19YClcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJzLm5leHQocmVzWydjaG9pY2VzJ10pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGVwZW5kZW50RmMgPSB0aGlzLmZvcm0uY29udHJvbHNbZWxlbWVudC5uYW1lXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIGxldCBicyA9IHRoaXMuZHJvcGRvd25WYWx1ZUJzLmdldChkZXBlbmRlbnRGYyk7XHJcbiAgICAgIGlmICghYnMpIHtcclxuICAgICAgICBsZXQgYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGVsZW1lbnQuY2hvaWNlcyk7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlQnMuc2V0KGRlcGVuZGVudEZjLCBicyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoZWxlbWVudDogYW55KSB7XHJcblxyXG4gICBcclxuICAgIGlmICghZWxlbWVudC5zZXJ2aWNlTmFtZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAgXHJcbiAgICBsZXQgc2VydmljZVR5cGUgPSBlbGVtZW50LnNlcnZpY2VUeXBlO1xyXG4gICAgaWYgKGVsZW1lbnQuc2VydmljZVR5cGUgPT09ICdGRVRDSCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBsZXQgc2VydmljZUNhbGxQYXJhbSA9IGVsZW1lbnQuc2VydmljZUNhbGxQYXJhbTsgLy9zc24zMjAsbHN0bmFtZTMyMFxyXG4gICAgbGV0IHNlcnZpY2VDYWxsVHlwZSA9IGVsZW1lbnQuc2VydmljZUNhbGxUeXBlOyAgLy9cIkdFVFwiXHJcbiAgICBsZXQgc2VydmljZU5hbWU6IHN0cmluZyA9IGVsZW1lbnQuc2VydmljZU5hbWU7IC8vL3NlY3VyaXR5LXNlcnZpY2UvdmFsaWRhdGVTU04vXHJcbiAgICBsZXQgc2VydmljZVVwZGF0ZVBhcmFtID0gZWxlbWVudC5zZXJ2aWNlVXBkYXRlUGFyYW07XHJcbiAgICBsZXQgYWxsVmFsdWVQcmVzZW50OkJvb2xlYW49dHJ1ZTtcclxuIC8vICB0aGlzLmxvZ2dlci5kZWJ1Zygnc2VydmljZUNhbGxQYXJhbScsc2VydmljZUNhbGxQYXJhbSk7XHJcbiAgICBpZiAoc2VydmljZUNhbGxQYXJhbSkge1xyXG4gICAgICB2YXIgc3BsaXR0ZWQgPSBzZXJ2aWNlQ2FsbFBhcmFtLnNwbGl0KFwiLFwiKTtcclxuICAgICAgbGV0IHZhbHVlQXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBsZXQgcGFyYW1BcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXR0ZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvL3VzZSBpIGluc3RlYWQgb2YgMCBkb2IzMjBcclxuICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdkb2IzMjAnLHRoaXMuZm9ybS5jb250cm9sc1snZG9iMzIwJ10udmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHNbc3BsaXR0ZWRbaV1dLnZhbHVlKSB7XHJcbiAgICAgICAgICBwYXJhbUFyci5wdXNoKHNwbGl0dGVkW2ldKTtcclxuICAgICAgICAgIHZhbHVlQXJyLnB1c2godGhpcy5mb3JtLmNvbnRyb2xzW3NwbGl0dGVkW2ldXS52YWx1ZSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGFsbFZhbHVlUHJlc2VudD1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygndmFsdWVBcnIxMicsIHZhbHVlQXJyLCAncGFyYW1BcnIxMSAnLCBwYXJhbUFyciwgJyBlbGVtZW50JywgZWxlbWVudCk7XHJcblxyXG4gICAgICB2YXIgbW9kZWw6IFZhbGlkYXRpb25Nb2RlbCA9IHt9O1xyXG4gICAgICBtb2RlbC5wYXJhbU5hbWUgPSBwYXJhbUFycjtcclxuICAgICAgbW9kZWwucGFyYW1WYWx1ZSA9IHZhbHVlQXJyO1xyXG4gICAgICAvLyByZXR1cm4gdGhpcy5wb3N0KGBxdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlYCwgcXVlc3Rpb25uYWlyZURhdGEpO1xyXG4gICAgICBpZihhbGxWYWx1ZVByZXNlbnQpe1xyXG4gICAgICBpZiAoc2VydmljZUNhbGxUeXBlID09PSAnUE9TVCcpIHtcclxuICAgICAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIEdFVCcpO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2VcclxuICAgICAgICAgIC5wb3N0KGAke3NlcnZpY2VOYW1lfWAsIG1vZGVsKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnJldHVybk1vZGVsID0gcmVzO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJldHVybk1vZGVsLnJldHVyblR5cGUgJiYgdGhpcy5yZXR1cm5Nb2RlbC5yZXR1cm5UeXBlID09PSAnUE9QVVAnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5UG9zaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9ICd0b3AnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BVcEhlYWRlciA9IHRoaXMucmV0dXJuTW9kZWwucG9wVXBIZWFkZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcFVwVGV4dCA9IHRoaXMucmV0dXJuTW9kZWwucG9wVXBUZXh0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BVcFllc0FjdGlvbkxhYmVsID0gdGhpcy5yZXR1cm5Nb2RlbC5wb3BVcFllc0J1dHRvbkxhYmVsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BVcE5vQWN0aW9uTGFiZWwgPSB0aGlzLnJldHVybk1vZGVsLnBvcFVwTm9CdXR0b25MYWJlbDtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd0aGlzLnJldHVybk1vZGVsICcsIHRoaXMucmV0dXJuTW9kZWwpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy51dGlsLmVycm9ySGFuZGxlcihlcnIpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWNjZXB0KCkge1xyXG4gICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnYWNjZXB0IGNhbGxlZDEyMycsIHRoaXMucmV0dXJuTW9kZWwuaWRlbnRpZmllcilcclxuICAgIGxldCBtb2RlbEFycjogS2V5VmFsdWVNb2RlbFtdID0gdGhpcy5yZXR1cm5Nb2RlbC5pZGVudGlmaWVyO1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IFBhcmFtc1tdID0gW107XHJcbiAgICBmb3IgKHZhciB2YWwgb2YgbW9kZWxBcnIpIHtcclxuICAgICAgcGFyYW1BcnJheS5wdXNoKHsgW3ZhbC5rZXldOiB2YWwudmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJhbXMgPSBwYXJhbUFycmF5LnJlZHVjZSgoYXJyT2JqLCBpdGVtKSA9PiBPYmplY3QuYXNzaWduKGFyck9iaiwgaXRlbSwge30pKTtcclxuICAgIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoW3RoaXMucmV0dXJuTW9kZWwueWVzQWN0aW9uXSwgeyBxdWVyeVBhcmFtczogcGFyYW1zIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgcmVqZWN0KCkge1xyXG4gICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnUmVqZWN0IGNhbGxlZCcpXHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KHRoaXMucmV0dXJuTW9kZWwubm9BY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgXHJcblxyXG5cclxuICBmaWx0ZXJWYWx1ZShldmVudCwgZWxlbWVudDogYW55KSB7XHJcbiAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdmaWx0ZXJWYWx1ZSBjYWxsZWQnLCBldmVudCwgJyBlbGVtZW50JywgZWxlbWVudCk7XHJcbiAgICBpZiAoIWVsZW1lbnQuc2VydmljZU5hbWUpIHtcclxuICAgICAgbGV0IGJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+KFtdKTtcclxuICAgICAgbGV0IHF1ZXJ5ID0gZXZlbnQucXVlcnk7XHJcbiAgICAgIGxldCBmaWx0ZXJlZDogYW55W10gPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2hvaWNlID0gZWxlbWVudC5jaG9pY2VzW2ldO1xyXG4gICAgICAgIGlmIChjaG9pY2UudGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9Mb3dlckNhc2UoKSkgPT0gMCkge1xyXG4gICAgICAgICAgZmlsdGVyZWQucHVzaChjaG9pY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicy5uZXh0KGZpbHRlcmVkKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZEJzLnNldChlbGVtZW50Lm5hbWUsIGJzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICBcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRCcyAmJiB0aGlzLmZpbHRlcmVkQnMuZ2V0KGVsZW1lbnQubmFtZSkpIHtcclxuICAgICAgICBsZXQgcXVlcnkgPSBldmVudC5xdWVyeTtcclxuICAgICAgICBsZXQgZmlsdGVyZWQ6IGFueVtdID0gW107XHJcbiAgICAgICAgbGV0IGV4aXN0aW5nQ2hvaWNlcyA9IHRoaXMuZmlsdGVyZWRCcy5nZXQoZWxlbWVudC5uYW1lKS52YWx1ZTtcclxuICAgICAgICBsZXQgYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdEl0ZW1bXT4oW10pO1xyXG4gICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBJRi0tLScsIGJzKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hvaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGNob2ljZSA9IGV4aXN0aW5nQ2hvaWNlc1tpXTtcclxuICAgICAgICAgIGlmIChjaG9pY2UudGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9Mb3dlckNhc2UoKSkgPT0gMCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKGNob2ljZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJzLm5leHQoZmlsdGVyZWQpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRCcy5zZXQoZWxlbWVudC5uYW1lLCBicyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG5cclxuXHJcbiAgICAgICAgbGV0IHBhcmVudENvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbZWxlbWVudC5zZXJ2aWNlQ2FsbFBhcmFtXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgbGV0IHNlcnZpY2VDYWxsVHlwZSA9IGVsZW1lbnQuc2VydmljZUNhbGxUeXBlO1xyXG4gICAgICAgIGxldCBzZXJ2aWNlTmFtZTogc3RyaW5nID0gZWxlbWVudC5zZXJ2aWNlTmFtZTtcclxuICAgICAgICBsZXQgc2VydmljZVVwZGF0ZVBhcmFtID0gZWxlbWVudC5zZXJ2aWNlVXBkYXRlUGFyYW07XHJcbiAgICAgICAgbGV0IHBhcmVudENvbnRyb2xWYWwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Q29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgcGFyZW50Q29udHJvbFZhbCA9IHBhcmVudENvbnRyb2wudmFsdWVbJ3ZhbHVlJ107ICAvL0NBXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygncGFyZW50Q29udHJvbFZhbCcsIHBhcmVudENvbnRyb2xWYWwpO1xyXG5cclxuICAgICAgICBwYXJlbnRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygncGFyZW50Q29udHJvbFZhbCB2YWx1ZSBjaGFuZ2VkJyk7XHJcbiAgICAgICAgICBsZXQgY2hpbGRDb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3NlcnZpY2VVcGRhdGVQYXJhbV0gYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEJzID0gbmV3IE1hcDxzdHJpbmcsIEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+PigpO1xyXG4gICAgICAgICAgY2hpbGRDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Q29udHJvbFZhbCkge1xyXG4gICAgICAgICAgaWYgKHNlcnZpY2VDYWxsVHlwZSA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAgIC5nZXQoYCR7c2VydmljZU5hbWV9JHtwYXJlbnRDb250cm9sVmFsfS8ke3NlcnZpY2VVcGRhdGVQYXJhbX1gKVxyXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcXVlcnkgPSBldmVudC5xdWVyeTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWQ6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+KFtdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNbJ2Nob2ljZXMnXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGNob2ljZSA9IHJlc1snY2hvaWNlcyddW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNob2ljZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihxdWVyeS50b0xvd2VyQ2FzZSgpKSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnB1c2goY2hvaWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnMubmV4dChmaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEJzLnNldChlbGVtZW50Lm5hbWUsIGJzKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWQ6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RJdGVtW10+KFtdKTtcclxuICAgICAgICAgICAgICAgICAgICBicy5uZXh0KGZpbHRlcmVkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkQnMuc2V0KGVsZW1lbnQubmFtZSwgYnMpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGNsaWNrT3B0aW9uKGV2ZW50KXtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjbGlja09wdGlvbiBjYWxsZWQnKVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoZXZlbnQsY250cmxOYW1lOnN0cmluZyl7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnb25TZWxlY3QtLScsZXZlbnQudmFsdWUsIGNudHJsTmFtZSk7XHJcbiAgfVxyXG59IiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuXHJcblxyXG4gIDxwLWRpYWxvZyBbaGVhZGVyXT1cInBvcFVwSGVhZGVyXCIgKm5nSWY9XCJkaXNwbGF5UG9zaXRpb25cIiAgWyh2aXNpYmxlKV09XCJkaXNwbGF5UG9zaXRpb25cIiBbcG9zaXRpb25dPVwicG9zaXRpb25cIiBbbW9kYWxdPVwidHJ1ZVwiIFtzdHlsZV09XCJ7d2lkdGg6ICc4MHZ3J31cIiBbYmFzZVpJbmRleF09XCI1MDAwXCJcclxuICBbZHJhZ2dhYmxlXT1cImZhbHNlXCIgW3Jlc2l6YWJsZV09XCJmYWxzZVwiIGFwcGVuZFRvPVwiYm9keVwiPlxyXG4gIFxyXG4gIDxwPnt7cG9wVXBUZXh0fX1cclxuICAgICAgPC9wPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgXHJcbiAgICAgICAgICBzaXplPVwic21hbGxcIiB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCIgKGNsaWNrKT1cInJlamVjdCgpXCI+IFxyXG4gICAgICAgICAgICAgICB7e3BvcFVwTm9BY3Rpb25MYWJlbH19XHJcbiAgICAgICAgICA8L2lvbi1idXR0b24+XHJcblxyXG4gICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIFxyXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCIgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICBmaWxsPVwic29saWRcIiAoY2xpY2spPVwiYWNjZXB0KClcIiA+XHJcbiAgICAgICAgICAgICAgIHt7cG9wVXBZZXNBY3Rpb25MYWJlbH19XHJcbiAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgIFxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWRpYWxvZz4gXHJcblxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiIWZvclNjcmVlblF1ZXN0aW9ubmFpcmVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICA8bGFiZWwgW2F0dHIuZm9yXT1cInF1ZXN0aW9uLm5hbWVcIiAqbmdJZj1cInF1ZXN0aW9uLmluZGVudD09PTEgJiYgcXVlc3Rpb24udHlwZSE9J2h0bWwnXCI+XHJcbiAgICAgICAgICB7e3F1ZXN0aW9uLnRpdGxlfX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiZm9yU2NyZWVuUXVlc3Rpb25uYWlyZSAmJiBxdWVzdGlvbi5pbmRlbnQ9PT0xICYmIHF1ZXN0aW9uLnR5cGUhPSdodG1sJyAmJiBxdWVzdGlvbi50eXBlIT0nc2ltcGxlTGFiZWwnICYmIHF1ZXN0aW9uLmN1c3RvbVRhZyE9J2NvbXBvbmVudCdcIlxyXG4gICAgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAge3txdWVzdGlvbi50aXRsZX19XHJcbiAgICAgIFxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInF1ZXN0aW9uLmluZGVudCE9MSAmJiBxdWVzdGlvbi50eXBlIT0naHRtbCcgJiYgcXVlc3Rpb24uY3VzdG9tVGFnICYmICFxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ2ZtdG51bWJlcnRleHQnKVwiXHJcbiAgICBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICB7e3F1ZXN0aW9uLnRpdGxlfX1cclxuICAgICAgXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICAgPGRpdiAgKm5nSWY9XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlICYmIHF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi5jdXN0b21UYWc9PT0nY29tcG9uZW50JyAmJiBxdWVzdGlvbi5pbmRlbnQ9PT0xICYmIHF1ZXN0aW9uLnR5cGUhPSdodG1sJyBcclxuICAgJiYgIXF1ZXN0aW9uLmRlc2NyaXB0aW9uXCI+XHJcbiAgICA8bW9uZXktZXhwZWN0ICpuZ0lmPVwicXVlc3Rpb24uY29tcG9uZW50TmFtZT09PSdtb25leS1leHBlY3QnXCI+PC9tb25leS1leHBlY3Q+XHJcbjwhLS0gPGFwcC1zZWFyY2gtZW1wbG95ZXIgKm5nSWY9XCJxdWVzdGlvbi5jb21wb25lbnROYW1lPT09J2FwcC1zZWFyY2gtZW1wbG95ZXInXCIgKG9uRW1wdHkpPVwicmVzZXRFbXBsb3llcigkZXZlbnQpXCIgKG9uRm91bmQpPVwic2V0RW1wbG95ZXIoJGV2ZW50KVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiPjwvYXBwLXNlYXJjaC1lbXBsb3llcj4gLS0+XHJcbjxhcHAtcmVndWxhci1lbXBsb3llci1kYXRlICpuZ0lmPVwicXVlc3Rpb24uY29tcG9uZW50TmFtZT09PSdhcHAtcmVndWxhci1lbXAtZGF0ZSdcIiAgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXJlZ3VsYXItZW1wbG95ZXItZGF0ZT5cclxuXHJcbjwvZGl2PiBcclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PT0naHRtbCdcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLmh0bWxcIiBjbGFzcz1cImhlYWRpbmdcIj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09PSdzaW1wbGVMYWJlbCdcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLmh0bWxcIj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0nZGF0ZScgJiYgcXVlc3Rpb24ubWF4ICYmIHF1ZXN0aW9uLm1pblwiPlxyXG4gICAgPHAtY2FsZW5kYXIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBbbW9udGhOYXZpZ2F0b3JdPVwidHJ1ZVwiIFt5ZWFyTmF2aWdhdG9yXT1cInRydWVcIlxyXG4gICAgICBbcmVhZG9ubHlJbnB1dF09XCJ0cnVlXCIgeWVhclJhbmdlPVwiMTkwMToyMDUwXCIgW3Nob3dJY29uXT1cInRydWVcIiBbbWluRGF0ZV09XCJtaW5EYXRlXCIgW21heERhdGVdPVwibWF4RGF0ZVwiXHJcbiAgICAgIGRhdGVGb3JtYXQ9XCJtbS1kZC15eVwiIGlucHV0SWQ9XCJuYXZpZ2F0b3JzXCIgZGF0YVR5cGU9XCJzdHJpbmdcIiBhcHBlbmRUbz1cImJvZHlcIiBcclxuICAgICAgID5cclxuICAgIDwvcC1jYWxlbmRhcj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J2RhdGUnICYmICFxdWVzdGlvbi5tYXggJiYgIXF1ZXN0aW9uLm1pblwiPlxyXG4gICAgPHAtY2FsZW5kYXIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBbbW9udGhOYXZpZ2F0b3JdPVwidHJ1ZVwiIFt5ZWFyTmF2aWdhdG9yXT1cInRydWVcIlxyXG4gICAgICBbaW5wdXRJZF09XCJxdWVzdGlvbi5uYW1lXCIgW3JlYWRvbmx5SW5wdXRdPVwidHJ1ZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgZGF0ZUZvcm1hdD1cIm1tLWRkLXl5XCIgeWVhclJhbmdlPVwiMTkwMToyMDUwXCJcclxuICAgICAgZGF0YVR5cGU9XCJzdHJpbmdcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtY2FsZW5kYXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J2RhdGUnICYmIHF1ZXN0aW9uLm1heCAmJiAhcXVlc3Rpb24ubWluXCI+XHJcbiAgICA8cC1jYWxlbmRhciBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIFttb250aE5hdmlnYXRvcl09XCJ0cnVlXCIgW3llYXJOYXZpZ2F0b3JdPVwidHJ1ZVwiXHJcbiAgICAgIFtpbnB1dElkXT1cInF1ZXN0aW9uLm5hbWVcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgW3JlYWRvbmx5SW5wdXRdPVwidHJ1ZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgZGF0ZUZvcm1hdD1cIm1tLWRkLXl5XCJcclxuICAgICAgeWVhclJhbmdlPVwiMTkwMToyMDUwXCIgZGF0YVR5cGU9XCJzdHJpbmdcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtY2FsZW5kYXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J2RhdGUnICYmICFxdWVzdGlvbi5tYXggJiYgcXVlc3Rpb24ubWluXCI+XHJcbiAgICA8cC1jYWxlbmRhciBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIFttb250aE5hdmlnYXRvcl09XCJ0cnVlXCIgW3llYXJOYXZpZ2F0b3JdPVwidHJ1ZVwiXHJcbiAgICAgIFtpbnB1dElkXT1cInF1ZXN0aW9uLm5hbWVcIiBbbWluRGF0ZV09XCJtaW5EYXRlXCIgW3JlYWRvbmx5SW5wdXRdPVwidHJ1ZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgZGF0ZUZvcm1hdD1cIm1tLWRkLXl5XCJcclxuICAgICAgeWVhclJhbmdlPVwiMTkwMToyMDUwXCIgZGF0YVR5cGU9XCJzdHJpbmdcIiBhcHBlbmRUbz1cImJvZHlcIiAob25TaG93KT1cInNldE1pbkRhdGUoJGV2ZW50LHF1ZXN0aW9uKVwiPjwvcC1jYWxlbmRhcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ3Bhc3N3b3JkJykgJiYgIXF1ZXN0aW9uLm5hbWUuaW5jbHVkZXMoJ2NvbmZwd2QnKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICA8cC1wYXNzd29yZCBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIFt0b2dnbGVNYXNrXT1cInRydWVcIlxyXG4gICAgICAgICAgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIj48L3AtcGFzc3dvcmQ+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4XCI+XHJcbiAgICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5jdXN0b21UYWcgJiYgcXVlc3Rpb24uY3VzdG9tVGFnLmluY2x1ZGVzKCdwYXNzd29yZCcpICYmIHF1ZXN0aW9uLm5hbWUuaW5jbHVkZXMoJ2NvbmZwd2QnKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICA8cC1wYXNzd29yZCBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIFt0b2dnbGVNYXNrXT1cInRydWVcIlxyXG4gICAgICAgICAgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIj48L3AtcGFzc3dvcmQ+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4XCI+XHJcbiAgICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb24uY3VzdG9tVGFnICYmIHF1ZXN0aW9uLnR5cGUgJiYgKHF1ZXN0aW9uLnR5cGUhPSdyYWRpb2dyb3VwJyAmJiBxdWVzdGlvbi50eXBlIT0nZGlzcGxheXRleHRhc2xhYmVsJylcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICAgICYmICFxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiT3B0aW9uYWxcIiBbc2l6ZV09XCJxdWVzdGlvbi5zaXplXCIgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAvPlxyXG4gIFxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAmJiAhcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiBxdWVzdGlvbi5zaXplICYmICFxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJPcHRpb25hbFwiIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAgICAmJiAhcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiAhcXVlc3Rpb24uc2l6ZSAmJiBxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJPcHRpb25hbFwiIFttYXhMZW5ndGhdPVwicXVlc3Rpb24ubWF4TGVuZ3RoXCIgLz5cclxuICBcclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgICAgICAgICAgJiYgIXF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgIXF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCIgLz5cclxuICBcclxuICBcclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgICAgJiYgcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiBxdWVzdGlvbi5zaXplICYmIHF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBbc2l6ZV09XCJxdWVzdGlvbi5zaXplXCIgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAoYmx1cik9XCJ2YWxpZGF0ZShxdWVzdGlvbilcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBbc2l6ZV09XCJxdWVzdGlvbi5zaXplXCIgLz5cclxuICBcclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgICAgJiYgcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiAhcXVlc3Rpb24uc2l6ZSAmJiBxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgICAgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAgICAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmICFxdWVzdGlvbi5zaXplICYmICFxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiAvPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXgtZ3JvdzogMTtcIiAqbmdJZj1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweFwiPlxyXG4gICAgICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5jdXN0b21UYWcgJiYgcXVlc3Rpb24udHlwZSAgJiYgcXVlc3Rpb24uY3VzdG9tVGFnLmluY2x1ZGVzKCdPcHRpb25hbCcpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgICAgICYmICFxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCIgW3NpemVdPVwicXVlc3Rpb24uc2l6ZVwiIFttYXhMZW5ndGhdPVwicXVlc3Rpb24ubWF4TGVuZ3RoXCIgLz5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiBwSW5wdXRUZXh0ICpuZ0lmPVwicXVlc3Rpb24uaW5wdXRUeXBlICYmIHF1ZXN0aW9uLmlucHV0VHlwZT09PSd0ZXh0JyBcclxuICAgICAgICAgICYmICFxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJPcHRpb25hbFwiIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIiAvPlxyXG4gIFxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgICAgICAgJiYgIXF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgIXF1ZXN0aW9uLnNpemUgJiYgcXVlc3Rpb24ubWF4TGVuZ3RoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCIgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAvPlxyXG4gIFxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgICAgICAgICAgICAgJiYgIXF1ZXN0aW9uLmlzUmVxdWlyZWQgJiYgIXF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJPcHRpb25hbFwiIC8+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgKm5nSWY9XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHhcIj5cclxuICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5jdXN0b21UYWcgJiYgcXVlc3Rpb24uY3VzdG9tVGFnLmluY2x1ZGVzKCdwaG9uZScpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICA8cC1pbnB1dE1hc2sgbWFzaz1cIjk5OSA5OTktOTk5OVwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgcGxhY2Vob2xkZXI9XCJPcHRpb25hbFwiXHJcbiAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnICYmICFxdWVzdGlvbi5pc1JlcXVpcmVkXCI+PC9wLWlucHV0TWFzaz5cclxuICBcclxuICAgICAgPHAtaW5wdXRNYXNrIG1hc2s9XCI5OTkgOTk5LTk5OTlcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIHBsYWNlaG9sZGVyPVwiOTk5IDk5OS05OTk5XCJcclxuICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgJiYgcXVlc3Rpb24uaXNSZXF1aXJlZFwiPjwvcC1pbnB1dE1hc2s+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgKm5nSWY9XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHhcIj5cclxuICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5jdXN0b21UYWcgJiYgcXVlc3Rpb24uY3VzdG9tVGFnLmluY2x1ZGVzKCdzc24nKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICA8cC1pbnB1dE1hc2sgbWFzaz1cIjk5OS05OS05OTk5XCIgW2lkXT1cInF1ZXN0aW9uLm5hbWVcIiAqbmdJZj1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCI5OTktOTktOTk5OVwiPlxyXG4gICAgICAgIDwvcC1pbnB1dE1hc2s+XHJcbiAgXHJcbiAgICAgICAgPHAtaW5wdXRNYXNrIG1hc2s9XCI5OTktOTktOTk5OVwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgKm5nSWY9XCIhcXVlc3Rpb24uaXNSZXF1aXJlZFwiXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsXCI+XHJcbiAgICAgICAgPC9wLWlucHV0TWFzaz5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4XCI+XHJcbiAgICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uY3VzdG9tVGFnICYmICFxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ3Bob25lJykgXHJcbiAgICAmJiAhcXVlc3Rpb24uY3VzdG9tVGFnLmluY2x1ZGVzKCdwYXNzd29yZCcpICAmJiAhcXVlc3Rpb24uY3VzdG9tVGFnLmluY2x1ZGVzKCdzc24nKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgJiYgcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiBxdWVzdGlvbi5zaXplICYmIHF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBbc2l6ZV09XCJxdWVzdGlvbi5zaXplXCIgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmIHF1ZXN0aW9uLnNpemUgJiYgIXF1ZXN0aW9uLm1heExlbmd0aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiXHJcbiAgICAgICAgICBbc2l6ZV09XCJxdWVzdGlvbi5zaXplXCIgLz5cclxuICBcclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWRdPVwicXVlc3Rpb24ubmFtZVwiIHBJbnB1dFRleHQgKm5nSWY9XCJxdWVzdGlvbi5pbnB1dFR5cGUgJiYgcXVlc3Rpb24uaW5wdXRUeXBlPT09J3RleHQnIFxyXG4gICAgJiYgcXVlc3Rpb24uaXNSZXF1aXJlZCAmJiAhcXVlc3Rpb24uc2l6ZSAmJiBxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIlxyXG4gICAgICAgICAgW21heExlbmd0aF09XCJxdWVzdGlvbi5tYXhMZW5ndGhcIiAvPlxyXG4gIFxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgcElucHV0VGV4dCAqbmdJZj1cInF1ZXN0aW9uLmlucHV0VHlwZSAmJiBxdWVzdGlvbi5pbnB1dFR5cGU9PT0ndGV4dCcgXHJcbiAgICAmJiBxdWVzdGlvbi5pc1JlcXVpcmVkICYmICFxdWVzdGlvbi5zaXplICYmICFxdWVzdGlvbi5tYXhMZW5ndGhcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiAvPlxyXG4gICAgPGRpdiBzdHlsZT1cImZsZXgtZ3JvdzogMTtcIiAqbmdJZj1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweFwiPlxyXG4gICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tICYmIHZpc2libGVJZihxdWVzdGlvbi52aXNpYmxlSWYpIC0tPlxyXG4gIDxkaXYgICAqbmdJZj1cInF1ZXN0aW9uLnR5cGUgJiYgcXVlc3Rpb24udHlwZT09PSdzaW5nbGVzZWxlY3RjaGVja2JveCdcIj5cclxuICAgIDwhLS0gPGRpdiBbbmdTdHlsZV09XCJzZXRTdHlsZShxdWVzdGlvbi5pbmRlbnQpXCI+IC0tPlxyXG4gICAgICA8cC1zZWxlY3RCdXR0b24gW29wdGlvbnNdPVwicXVlc3Rpb24uY2hvaWNlc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIFttdWx0aXBsZV09ZmFsc2VcclxuICAgICAgICBvcHRpb25MYWJlbD1cInRleHRcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgPjwvcC1zZWxlY3RCdXR0b24+XHJcbiAgICA8IS0tIDwvZGl2PiAtLT5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiAgICpuZ0lmPVwicXVlc3Rpb24udHlwZSAmJiBxdWVzdGlvbi50eXBlPT09J2Ryb3Bkb3duJyAmJiBxdWVzdGlvbi5zaXplXCI+IFxyXG4gICAgICA8IS0tIDxkaXYgIGNsYXNzPVwiZmxleC1jaGlsZFwiPiBcclxuICAgICAgICA8cC1kcm9wZG93biBbaWRdPVwicXVlc3Rpb24ubmFtZVwiICpuZ0lmPVwicXVlc3Rpb24uY2hvaWNlcy5sZW5ndGg+M1wiIFxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIHBsYWNlaG9sZGVyPVwiICAgIFwiIFtvcHRpb25zXT1cIiBnZXREZXBlbmRlbnREcm9wZG93bkRhdGEocXVlc3Rpb24pfCBhc3luY1wiXHJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJ0ZXh0XCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFtzdHlsZV09XCJ7J3dpZHRoJzonMjAwcHgnLCdoZWlnaHQnOiczNXB4J31cIiBbZmlsdGVyXT1cInRydWVcIiBmaWx0ZXJCeT1cInRleHRcIlxyXG4gICAgICAgPlxyXG4gICAgICA8L3AtZHJvcGRvd24+XHJcblxyXG4gICAgXHJcbiAgICAgIDxwLWRyb3Bkb3duIFtpZF09XCJxdWVzdGlvbi5uYW1lXCIgKm5nSWY9XCJxdWVzdGlvbi5jaG9pY2VzLmxlbmd0aDw9M1wiIGVkaXRhYmxlPVwidHJ1ZVwiIGZpbHRlcj1cInRydWVcIiBmaWx0ZXJCeT1cInRleHRcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiIHBsYWNlaG9sZGVyPVwiICAgIFwiIFtvcHRpb25zXT1cIiBnZXREZXBlbmRlbnREcm9wZG93bkRhdGEocXVlc3Rpb24pfCBhc3luY1wiXHJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJ0ZXh0XCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFtzdHlsZV09XCJ7J3dpZHRoJzonMjAwcHgnLCdoZWlnaHQnOiczNXB4J31cIj5cclxuICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICA8L2Rpdj4gIC0tPlxyXG5cclxuICAgICAgPCEtLSA8cC1hdXRvQ29tcGxldGUgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgW3N1Z2dlc3Rpb25zXT1cImdldERlcGVuZGVudERyb3Bkb3duRGF0YShxdWVzdGlvbil8IGFzeW5jXCIgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImZpbHRlclZhbHVlKCRldmVudCxxdWVzdGlvbi5jaG9pY2VzLHF1ZXN0aW9uLm5hbWUpXCIgZmllbGQ9XCJ0ZXh0XCIgW2Ryb3Bkb3duXT1cInRydWVcIiBcclxuICAgICAgbWluTGVuZ3RoID0gMyBmb3JjZVNlbGVjdGlvbj1cInRydWVcIiBbc2hvd109XCJnZXREZXBlbmRlbnREcm9wZG93bkRhdGEocXVlc3Rpb24pfCBhc3luY1wiXHJcbiAgICAgPiAgLS0+XHJcbiAgICAgPGRpdiA+IFxyXG4gICAgICAgXHJcbiAgICAgIDxwLWF1dG9Db21wbGV0ZSBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBhcHBlbmRUbz1cImJvZHlcIiBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRCcy5nZXQocXVlc3Rpb24ubmFtZSl8IGFzeW5jXCJcclxuICAgICAoY29tcGxldGVNZXRob2QpPVwiZmlsdGVyVmFsdWUoJGV2ZW50LHF1ZXN0aW9uKVwiIGRhdGFLZXkgPVwidmFsdWVcIiBmaWVsZD1cInRleHRcIiBbZHJvcGRvd25dPVwidHJ1ZVwiIFtzaXplXT1cInF1ZXN0aW9uLnNpemVcIlxyXG4gICAgIG1pbkxlbmd0aCA9IDEgZm9yY2VTZWxlY3Rpb249XCJ0cnVlXCIgdHlwZT1cInRleHRcIiAob25TZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50LHF1ZXN0aW9uLm5hbWUpXCI+IFxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIGxldC12YWx1ZSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxkaXY+e3t2YWx1ZS50ZXh0fX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC1hdXRvQ29tcGxldGU+XHJcbjwvZGl2PlxyXG5cclxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj5cclxuICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICBcclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi50eXBlICYmIHF1ZXN0aW9uLnR5cGU9PT0nZHJvcGRvd24nICYmICFxdWVzdGlvbi5zaXplXCI+XHJcbiAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCIgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImZpbHRlcmVkQnMuZ2V0KHF1ZXN0aW9uLm5hbWUpfCBhc3luY1wiIChjb21wbGV0ZU1ldGhvZCk9XCJmaWx0ZXJWYWx1ZSgkZXZlbnQscXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgZGF0YUtleT1cInZhbHVlXCIgZmllbGQ9XCJ0ZXh0XCIgW2Ryb3Bkb3duXT1cInRydWVcIiBtaW5MZW5ndGg9MyBmb3JjZVNlbGVjdGlvbj1cInRydWVcIiB0eXBlPVwidGV4dFwiIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQscXVlc3Rpb24ubmFtZSlcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC12YWx1ZSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+e3t2YWx1ZS50ZXh0fX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLmN1c3RvbVRhZyAmJiBxdWVzdGlvbi5jdXN0b21UYWcuaW5jbHVkZXMoJ2ZpbGV1cGxvYWQnKVwiPlxyXG4gICAgICA8YXBwLWZpbGUtdXBsb2FkZXIgW2FsbG93ZWRGaWxlVHlwZV09XCJxdWVzdGlvbi5hbGxvd2VkRmlsZVR5cGVcIiAgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5uYW1lXCJcclxuICAgICAgW21heFNpemVJbk1CXT1cInF1ZXN0aW9uLnNpemVJbk1CXCIgW211bHRpcGxlXT1cInF1ZXN0aW9uLm11bHRpcGxlXCIgW25vT2ZGaWxlc1RvVXBsb2FkXT1cInF1ZXN0aW9uLm5vT0ZGaWxlc1wiID48L2FwcC1maWxlLXVwbG9hZGVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cInBhZGRpbmc6IDBweDtcIiAqbmdJZj1cInF1ZXN0aW9uLnR5cGUgJiYgcXVlc3Rpb24udHlwZT09PSdyYWRpb2dyb3VwJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgICAgPHAtc2VsZWN0QnV0dG9uIFtvcHRpb25zXT1cInF1ZXN0aW9uLmNob2ljZXNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLm5hbWVcIiBvcHRpb25MYWJlbD1cInRleHRcIlxyXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCI+PC9wLXNlbGVjdEJ1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXgtZ3JvdzogMTtcIiAqbmdJZj1cInF1ZXN0aW9uLmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweFwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJxdWVzdGlvbi5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cInBhZGRpbmc6IDBweDtcIiAqbmdJZj1cInF1ZXN0aW9uLnR5cGUgJiYgcXVlc3Rpb24udHlwZT09PSdkaXNwbGF5dGV4dGFzbGFiZWwnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbD57e2Zvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0udmFsdWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24ubmFtZVwiLz5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiICpuZ0lmPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4XCI+XHJcbiAgICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicXVlc3Rpb24uZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2PlxyXG4gICAgPHNtYWxsIGNsYXNzPVwicC1lcnJvclwiICpuZ0lmPVwiaXNWYWxpZCE9JydcIj57e2lzVmFsaWR9fTwvc21hbGw+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==