@uiapplib/ngx-ui-web-lib 0.0.1

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 (820) hide show
  1. package/README.md +46 -0
  2. package/esm2022/lib/annimations/app-animations.mjs +37 -0
  3. package/esm2022/lib/components/add-employer/add-employer.component.mjs +3725 -0
  4. package/esm2022/lib/components/add-participant/add-participant.component.mjs +453 -0
  5. package/esm2022/lib/components/add-payment/add-payment.component.mjs +207 -0
  6. package/esm2022/lib/components/add-wage/add-wage.component.mjs +161 -0
  7. package/esm2022/lib/components/address/address.component.mjs +700 -0
  8. package/esm2022/lib/components/address-popup/address-popup.component.mjs +97 -0
  9. package/esm2022/lib/components/address-suggestion/address-suggestion.component.mjs +289 -0
  10. package/esm2022/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.mjs +245 -0
  11. package/esm2022/lib/components/associate-ssn/associate-ssn.component.mjs +203 -0
  12. package/esm2022/lib/components/bank-details/bank-details.component.mjs +276 -0
  13. package/esm2022/lib/components/captcha/captcha.component.mjs +181 -0
  14. package/esm2022/lib/components/card/card.component.mjs +55 -0
  15. package/esm2022/lib/components/claim-info/claim-info.component.mjs +408 -0
  16. package/esm2022/lib/components/contact-us/contact-us.component.mjs +958 -0
  17. package/esm2022/lib/components/content/content.component.mjs +61 -0
  18. package/esm2022/lib/components/correspondence-download/correspondence-download.component.mjs +83 -0
  19. package/esm2022/lib/components/dashboard-card/dashboard-card.component.mjs +251 -0
  20. package/esm2022/lib/components/dependent-grid/dependent-grid.component.mjs +316 -0
  21. package/esm2022/lib/components/disclosure/disclosure.component.mjs +60 -0
  22. package/esm2022/lib/components/dropdown/dropdown.component.mjs +1974 -0
  23. package/esm2022/lib/components/dropdown/dropdown.interface.mjs +2 -0
  24. package/esm2022/lib/components/dua-request-page/dua-request-page.component.mjs +596 -0
  25. package/esm2022/lib/components/dua-request-popup/dua-request-popup.component.mjs +356 -0
  26. package/esm2022/lib/components/email-update/email-update.component.mjs +283 -0
  27. package/esm2022/lib/components/employer-grid/employer-grid.component.mjs +950 -0
  28. package/esm2022/lib/components/employer-info/employer-info.component.mjs +319 -0
  29. package/esm2022/lib/components/employer-pay/employer-pay.component.mjs +238 -0
  30. package/esm2022/lib/components/employer-pay-grid/employer-pay-grid.component.mjs +302 -0
  31. package/esm2022/lib/components/error/error.component.mjs +103 -0
  32. package/esm2022/lib/components/farm-usage/farm-usage.component.mjs +172 -0
  33. package/esm2022/lib/components/fav-menu/fav-menu.component.mjs +163 -0
  34. package/esm2022/lib/components/file-download/file-download.component.mjs +104 -0
  35. package/esm2022/lib/components/file-uploader/file-uploader.component.mjs +444 -0
  36. package/esm2022/lib/components/footer/footer.component.mjs +361 -0
  37. package/esm2022/lib/components/gross-earnings/gross-earnings.component.mjs +201 -0
  38. package/esm2022/lib/components/header/header.component.mjs +801 -0
  39. package/esm2022/lib/components/help/help.component.mjs +49 -0
  40. package/esm2022/lib/components/history-page/history-page.component.mjs +571 -0
  41. package/esm2022/lib/components/idle-detector/idle-detector.component.mjs +65 -0
  42. package/esm2022/lib/components/idme/idme.component.mjs +84 -0
  43. package/esm2022/lib/components/info/info.component.mjs +179 -0
  44. package/esm2022/lib/components/job-search-result-page/job-search-result-page.component.mjs +206 -0
  45. package/esm2022/lib/components/job-title/job-title.component.mjs +157 -0
  46. package/esm2022/lib/components/legal-disclaimar/legal-disclaimar.component.mjs +247 -0
  47. package/esm2022/lib/components/link/link.component.mjs +131 -0
  48. package/esm2022/lib/components/maintenance-detector/maintenance-detector.component.mjs +43 -0
  49. package/esm2022/lib/components/mask/mask.component.mjs +48 -0
  50. package/esm2022/lib/components/menu/menu.component.mjs +420 -0
  51. package/esm2022/lib/components/mfa/mfa.component.mjs +444 -0
  52. package/esm2022/lib/components/mfa-popup/mfa-popup.component.mjs +50 -0
  53. package/esm2022/lib/components/money-expect/money-expect.component.mjs +202 -0
  54. package/esm2022/lib/components/msg/msg.component.mjs +48 -0
  55. package/esm2022/lib/components/news/news.component.mjs +90 -0
  56. package/esm2022/lib/components/offline-add-employer/offline-add-employer.component.mjs +3661 -0
  57. package/esm2022/lib/components/offline-bank-details/offline-bank-details.component.mjs +258 -0
  58. package/esm2022/lib/components/offline-employer-grid/offline-employer-grid.component.mjs +853 -0
  59. package/esm2022/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.mjs +251 -0
  60. package/esm2022/lib/components/overlay-info/overlay-info.component.mjs +213 -0
  61. package/esm2022/lib/components/page/page.component.mjs +136 -0
  62. package/esm2022/lib/components/profile/profile.component.mjs +901 -0
  63. package/esm2022/lib/components/profile-redirect/profile-redirect.component.mjs +140 -0
  64. package/esm2022/lib/components/proof-of-anything/proof-of-anything.component.mjs +261 -0
  65. package/esm2022/lib/components/proof-of-document-upload/proof-of-document-upload.component.mjs +560 -0
  66. package/esm2022/lib/components/questionnaire/AppValidators.mjs +790 -0
  67. package/esm2022/lib/components/questionnaire/FbConstants.mjs +8 -0
  68. package/esm2022/lib/components/questionnaire/SelectItem.mjs +2 -0
  69. package/esm2022/lib/components/questionnaire/account-success/account-success.page.mjs +355 -0
  70. package/esm2022/lib/components/questionnaire/common-success/common-success.page.mjs +732 -0
  71. package/esm2022/lib/components/questionnaire/dynamic-form-panel.component.mjs +1096 -0
  72. package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +2246 -0
  73. package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +1297 -0
  74. package/esm2022/lib/components/questionnaire/form-builder/form-builder.page.mjs +262 -0
  75. package/esm2022/lib/components/questionnaire/input-focus.directive.mjs +44 -0
  76. package/esm2022/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.mjs +342 -0
  77. package/esm2022/lib/components/questionnaire/question-base.mjs +3 -0
  78. package/esm2022/lib/components/questionnaire/question-control.service.mjs +409 -0
  79. package/esm2022/lib/components/questionnaire/question.service.mjs +31 -0
  80. package/esm2022/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.mjs +268 -0
  81. package/esm2022/lib/components/read-more/read-more.component.mjs +72 -0
  82. package/esm2022/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.mjs +950 -0
  83. package/esm2022/lib/components/scrollable-text/scrollable-text.component.mjs +25 -0
  84. package/esm2022/lib/components/search-employer/search-employer.component.mjs +257 -0
  85. package/esm2022/lib/components/select/select.component.mjs +154 -0
  86. package/esm2022/lib/components/sign-ssn/sign-ssn.component.mjs +141 -0
  87. package/esm2022/lib/components/sms/sms.component.mjs +336 -0
  88. package/esm2022/lib/components/ssn/ssn.component.mjs +44 -0
  89. package/esm2022/lib/components/ssn-reverify/ssn-reverify.component.mjs +151 -0
  90. package/esm2022/lib/components/test/test.component.mjs +19 -0
  91. package/esm2022/lib/components/user-login/user-login.component.mjs +398 -0
  92. package/esm2022/lib/components/wage-calculator/wage-calculator.component.mjs +527 -0
  93. package/esm2022/lib/components/wage-grid/wage-grid.component.mjs +274 -0
  94. package/esm2022/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.mjs +147 -0
  95. package/esm2022/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.mjs +167 -0
  96. package/esm2022/lib/components/weekly-cert-employer/weekly-cert-employer.component.mjs +1040 -0
  97. package/esm2022/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.mjs +420 -0
  98. package/esm2022/lib/components/weekly-certification/weekly-certification.component.mjs +828 -0
  99. package/esm2022/lib/components/weekly-confirmation/confirmation.component.mjs +129 -0
  100. package/esm2022/lib/components/weekly-interim-confirmation/interim-confirmation.component.mjs +136 -0
  101. package/esm2022/lib/components/weekly-summary-v2/summary.component-v2.mjs +72 -0
  102. package/esm2022/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.mjs +50 -0
  103. package/esm2022/lib/components/weekly-work-search-counter/work-search-counter.component.mjs +92 -0
  104. package/esm2022/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.mjs +1190 -0
  105. package/esm2022/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.mjs +690 -0
  106. package/esm2022/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.mjs +524 -0
  107. package/esm2022/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.mjs +394 -0
  108. package/esm2022/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.mjs +640 -0
  109. package/esm2022/lib/directives/auto-focus/auto-focus.directive.mjs +31 -0
  110. package/esm2022/lib/directives/caps-lock.directive.mjs +38 -0
  111. package/esm2022/lib/directives/required-roles/required-roles.directive.mjs +30 -0
  112. package/esm2022/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.mjs +33 -0
  113. package/esm2022/lib/enums/AddressValidationResponseEnum.mjs +9 -0
  114. package/esm2022/lib/enums/AddressValidationSourceFunctionEnum.mjs +5 -0
  115. package/esm2022/lib/enums/EmailStatusEnum.mjs +9 -0
  116. package/esm2022/lib/guards/auth.guard.mjs +186 -0
  117. package/esm2022/lib/guards/no-login/no-login.guard.mjs +21 -0
  118. package/esm2022/lib/interceptors/error-interceptor/http-error-interceptor.mjs +155 -0
  119. package/esm2022/lib/interceptors/header-interceptor/http-header.interceptor.mjs +98 -0
  120. package/esm2022/lib/models/ActiveClaimModel.mjs +3 -0
  121. package/esm2022/lib/models/AddressComponentModel.mjs +3 -0
  122. package/esm2022/lib/models/BankDetailsComponentModel.mjs +3 -0
  123. package/esm2022/lib/models/BankDetailsModel.mjs +3 -0
  124. package/esm2022/lib/models/CinRequalificationCriteriaModel.mjs +3 -0
  125. package/esm2022/lib/models/CountyModel.mjs +3 -0
  126. package/esm2022/lib/models/DuaAppDataModel.mjs +3 -0
  127. package/esm2022/lib/models/DuaRequestModel.mjs +3 -0
  128. package/esm2022/lib/models/DuaRetroWeeksComponentModel.mjs +6 -0
  129. package/esm2022/lib/models/EmployerDetailSearchResult.mjs +6 -0
  130. package/esm2022/lib/models/EmployerInfoComponentModel.mjs +4 -0
  131. package/esm2022/lib/models/EmployerPayInfoModel.mjs +6 -0
  132. package/esm2022/lib/models/ErrorModel.mjs +6 -0
  133. package/esm2022/lib/models/FarmUsageComponentModel.mjs +2 -0
  134. package/esm2022/lib/models/FileModel.mjs +2 -0
  135. package/esm2022/lib/models/GrossEarningsModel.mjs +3 -0
  136. package/esm2022/lib/models/HelpConstants.mjs +5 -0
  137. package/esm2022/lib/models/LexisNexisOtpDetailsResponseModel.mjs +3 -0
  138. package/esm2022/lib/models/LibConstants.mjs +171 -0
  139. package/esm2022/lib/models/NewsAndAnnouncementModel.mjs +3 -0
  140. package/esm2022/lib/models/NotificationModel.mjs +6 -0
  141. package/esm2022/lib/models/OtpAuthModel.mjs +3 -0
  142. package/esm2022/lib/models/PaymentComponentModel.mjs +2 -0
  143. package/esm2022/lib/models/ReasonSeparationRequestModel.mjs +3 -0
  144. package/esm2022/lib/models/RequalifyLiftPageModel.mjs +11 -0
  145. package/esm2022/lib/models/RetroWeeksModel.mjs +3 -0
  146. package/esm2022/lib/models/SecurityQuestionAnswerModel.mjs +3 -0
  147. package/esm2022/lib/models/SendOtpRequestModel.mjs +3 -0
  148. package/esm2022/lib/models/SsaVerificationModel.mjs +3 -0
  149. package/esm2022/lib/models/TrendModel.mjs +3 -0
  150. package/esm2022/lib/models/UserDetailsModel.mjs +3 -0
  151. package/esm2022/lib/models/UserModel.mjs +6 -0
  152. package/esm2022/lib/models/VerifyOtpRequestModel.mjs +3 -0
  153. package/esm2022/lib/models/WageCalculatorModel.mjs +3 -0
  154. package/esm2022/lib/models/WageInfoModel.mjs +4 -0
  155. package/esm2022/lib/models/addressValidation/AddressRecommendationModel.mjs +3 -0
  156. package/esm2022/lib/models/addressValidation/AddressValidationRequestComponentModel.mjs +3 -0
  157. package/esm2022/lib/models/addressValidation/AddressValidationResponseComponentModel.mjs +3 -0
  158. package/esm2022/lib/models/addressValidation/AddressValidationReturnComponentModel.mjs +3 -0
  159. package/esm2022/lib/models/case/CaseAttachmentModel.mjs +3 -0
  160. package/esm2022/lib/models/claimant/ClaimantModel.mjs +3 -0
  161. package/esm2022/lib/models/claimant/JobResultsData.mjs +3 -0
  162. package/esm2022/lib/models/claimant/MatchingJobs.mjs +3 -0
  163. package/esm2022/lib/models/claimant/ResetPasswordModel.mjs +3 -0
  164. package/esm2022/lib/models/cmp/CaseCoreModel.mjs +3 -0
  165. package/esm2022/lib/models/cmp/ComplaintCategoryModel.mjs +3 -0
  166. package/esm2022/lib/models/cmp/ComplaintCategoryOutputModel.mjs +5 -0
  167. package/esm2022/lib/models/cmp/ContactUsModel.mjs +3 -0
  168. package/esm2022/lib/models/cmp/EmailTemplateModel.mjs +3 -0
  169. package/esm2022/lib/models/cmp/contactUsInqueryModel.mjs +7 -0
  170. package/esm2022/lib/models/cmp/messageRourceModel.mjs +3 -0
  171. package/esm2022/lib/models/combo-model.mjs +343 -0
  172. package/esm2022/lib/models/dashboard-model.mjs +3 -0
  173. package/esm2022/lib/models/dependent.model.mjs +8 -0
  174. package/esm2022/lib/models/fileupload/DocUploadModel.mjs +7 -0
  175. package/esm2022/lib/models/fileupload/EmployerDataModel.mjs +3 -0
  176. package/esm2022/lib/models/fileupload/FileObject.mjs +3 -0
  177. package/esm2022/lib/models/fileupload/FileObjectArray.mjs +7 -0
  178. package/esm2022/lib/models/questionnaire/AppealParticipantModel.mjs +8 -0
  179. package/esm2022/lib/models/questionnaire/AutocoderModel.mjs +3 -0
  180. package/esm2022/lib/models/questionnaire/ClaimAppEmpRequestModel.mjs +3 -0
  181. package/esm2022/lib/models/questionnaire/ClaimAppEmpResponseModel.mjs +8 -0
  182. package/esm2022/lib/models/questionnaire/ClaimAppEmployerDetailsModel.mjs +7 -0
  183. package/esm2022/lib/models/questionnaire/ClaimOnlyEmployerDataModel.mjs +3 -0
  184. package/esm2022/lib/models/questionnaire/ComboModel.mjs +453 -0
  185. package/esm2022/lib/models/questionnaire/ElementsModel.mjs +8 -0
  186. package/esm2022/lib/models/questionnaire/EmployerDetailSearchResult.mjs +3 -0
  187. package/esm2022/lib/models/questionnaire/EmployerWagesModel.mjs +3 -0
  188. package/esm2022/lib/models/questionnaire/FBConfigModel.mjs +6 -0
  189. package/esm2022/lib/models/questionnaire/KeyValueModel.mjs +3 -0
  190. package/esm2022/lib/models/questionnaire/LegalDiscaimarModel.mjs +3 -0
  191. package/esm2022/lib/models/questionnaire/LoaderModel.mjs +3 -0
  192. package/esm2022/lib/models/questionnaire/PollingStatusModel.mjs +3 -0
  193. package/esm2022/lib/models/questionnaire/QtrYearEmployerWageModel.mjs +3 -0
  194. package/esm2022/lib/models/questionnaire/QuestionnaireQueryModel.mjs +8 -0
  195. package/esm2022/lib/models/questionnaire/QuestionnaireReturnModel.mjs +11 -0
  196. package/esm2022/lib/models/questionnaire/QuestionnaireSaveModel.mjs +3 -0
  197. package/esm2022/lib/models/questionnaire/RequalifyLiftIssuesModel.mjs +3 -0
  198. package/esm2022/lib/models/questionnaire/ScrollableTextModel.mjs +3 -0
  199. package/esm2022/lib/models/questionnaire/ServiceActionResponseModel.mjs +3 -0
  200. package/esm2022/lib/models/questionnaire/StatusModel.mjs +6 -0
  201. package/esm2022/lib/models/questionnaire/SuccessPageElement.mjs +3 -0
  202. package/esm2022/lib/models/questionnaire/UI512AResponseModel.mjs +3 -0
  203. package/esm2022/lib/models/questionnaire/ValidationModel.mjs +3 -0
  204. package/esm2022/lib/models/questionnaire/WbaHelperTextModel.mjs +3 -0
  205. package/esm2022/lib/models/weekly-cert/WorkSearchWaiverModel.mjs +3 -0
  206. package/esm2022/lib/models/weekly-cert/address-detail-model.mjs +2 -0
  207. package/esm2022/lib/models/weekly-cert/admin-leave-details-model.mjs +7 -0
  208. package/esm2022/lib/models/weekly-cert/employer-info-v2-model.mjs +7 -0
  209. package/esm2022/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.mjs +6 -0
  210. package/esm2022/lib/models/weekly-cert/weekly-certification-v2-model.mjs +34 -0
  211. package/esm2022/lib/models/weekly-cert/work-search-record-v2-model.mjs +15 -0
  212. package/esm2022/lib/models/weekly-cert/work-search-v2-model.mjs +11 -0
  213. package/esm2022/lib/ngx-reusa-app-lib.component.mjs +23 -0
  214. package/esm2022/lib/ngx-reusa-app-lib.module.mjs +522 -0
  215. package/esm2022/lib/ngx-reusa-app-lib.service.mjs +14 -0
  216. package/esm2022/lib/pages/BasePage.mjs +79 -0
  217. package/esm2022/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +81 -0
  218. package/esm2022/lib/pages/common/change-password/change-password.page.mjs +489 -0
  219. package/esm2022/lib/pages/common/landing/landing.component.mjs +208 -0
  220. package/esm2022/lib/pages/common/landing2/landing2.component.mjs +244 -0
  221. package/esm2022/lib/pages/common/login/login.component.mjs +527 -0
  222. package/esm2022/lib/pages/common/not-found/not-found.page.mjs +24 -0
  223. package/esm2022/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +306 -0
  224. package/esm2022/lib/pages/common/security-policy/security-policy.page.mjs +61 -0
  225. package/esm2022/lib/pages/common/unauthorized/unauthorized.page.mjs +24 -0
  226. package/esm2022/lib/pages/popovers/language/language.page.mjs +61 -0
  227. package/esm2022/lib/pages/popovers/my-notifications/my-notifications.page.mjs +204 -0
  228. package/esm2022/lib/pages/popovers/my-profile/my-profile.page.mjs +134 -0
  229. package/esm2022/lib/pages/popovers/user-search/user-search.component.mjs +251 -0
  230. package/esm2022/lib/pipes/filter.pipe.mjs +30 -0
  231. package/esm2022/lib/pipes/format-worksearch/format-worksearch.pipe.mjs +101 -0
  232. package/esm2022/lib/pipes/mask/mask.email.pipe.mjs +23 -0
  233. package/esm2022/lib/pipes/proper-case/proper-case.pipe.mjs +27 -0
  234. package/esm2022/lib/pipes/translate/dynamic-translate.pipe.mjs +44 -0
  235. package/esm2022/lib/pipes/trust-html/trust-html.pipe.mjs +20 -0
  236. package/esm2022/lib/services/address-validation-service/address-validation.service.mjs +151 -0
  237. package/esm2022/lib/services/appeal/appeal.service.mjs +37 -0
  238. package/esm2022/lib/services/base-service.mjs +53 -0
  239. package/esm2022/lib/services/birt-service/birt.service.mjs +57 -0
  240. package/esm2022/lib/services/captcha/captcha.service.mjs +46 -0
  241. package/esm2022/lib/services/case-service/case.service.mjs +47 -0
  242. package/esm2022/lib/services/chatbot/chatbot.service.mjs +257 -0
  243. package/esm2022/lib/services/chatbot/script.const.mjs +42 -0
  244. package/esm2022/lib/services/claimant/claimant.service.mjs +31 -0
  245. package/esm2022/lib/services/claimant-context/claimant-context.service.mjs +48 -0
  246. package/esm2022/lib/services/claimant-service/claimant.service.mjs +56 -0
  247. package/esm2022/lib/services/claims/claims.service.mjs +193 -0
  248. package/esm2022/lib/services/cmp-service/cmp.service.mjs +84 -0
  249. package/esm2022/lib/services/dms-service/dms.service.mjs +60 -0
  250. package/esm2022/lib/services/employer/employer-service.mjs +35 -0
  251. package/esm2022/lib/services/event-service/event-service.mjs +44 -0
  252. package/esm2022/lib/services/fpjs/fingerprint.service.mjs +70 -0
  253. package/esm2022/lib/services/google-analytics/google-analytics.service.mjs +29 -0
  254. package/esm2022/lib/services/help/help.service.mjs +63 -0
  255. package/esm2022/lib/services/idle/idle.service.mjs +159 -0
  256. package/esm2022/lib/services/logger/logger.service.mjs +67 -0
  257. package/esm2022/lib/services/login/login.service.mjs +358 -0
  258. package/esm2022/lib/services/maintenance/maintenance.service.mjs +21 -0
  259. package/esm2022/lib/services/notification/notification.service.mjs +113 -0
  260. package/esm2022/lib/services/offline-claims/offline-claims.service.mjs +327 -0
  261. package/esm2022/lib/services/questionnaire/questionnaire.service.mjs +72 -0
  262. package/esm2022/lib/services/questionnaire/validation.service.mjs +62 -0
  263. package/esm2022/lib/services/security-service/security.service.mjs +59 -0
  264. package/esm2022/lib/services/tour/tour.service.mjs +60 -0
  265. package/esm2022/lib/services/util/util.service.mjs +506 -0
  266. package/esm2022/lib/services/weekly-cert/review.service.mjs +101 -0
  267. package/esm2022/lib/services/weekly-cert/weekly-cert-v2.service.mjs +214 -0
  268. package/esm2022/lib/services/weekly-cert/weekly-cert.service.mjs +37 -0
  269. package/esm2022/lib/services/weekly-cert/work-search.service.mjs +58 -0
  270. package/esm2022/lib/validations/AppRegex.mjs +49 -0
  271. package/esm2022/lib/validations/AppValidators.mjs +269 -0
  272. package/esm2022/public-api.mjs +180 -0
  273. package/esm2022/uiapplib-ngx-ui-web-lib.mjs +5 -0
  274. package/fesm2022/uiapplib-ngx-ui-web-lib.mjs +51647 -0
  275. package/fesm2022/uiapplib-ngx-ui-web-lib.mjs.map +1 -0
  276. package/index.d.ts +6 -0
  277. package/lib/annimations/app-animations.d.ts +4 -0
  278. package/lib/annimations/app-animations.d.ts.map +1 -0
  279. package/lib/components/add-employer/add-employer.component.d.ts +318 -0
  280. package/lib/components/add-employer/add-employer.component.d.ts.map +1 -0
  281. package/lib/components/add-participant/add-participant.component.d.ts +55 -0
  282. package/lib/components/add-participant/add-participant.component.d.ts.map +1 -0
  283. package/lib/components/add-payment/add-payment.component.d.ts +39 -0
  284. package/lib/components/add-payment/add-payment.component.d.ts.map +1 -0
  285. package/lib/components/add-wage/add-wage.component.d.ts +30 -0
  286. package/lib/components/add-wage/add-wage.component.d.ts.map +1 -0
  287. package/lib/components/address/address.component.d.ts +108 -0
  288. package/lib/components/address/address.component.d.ts.map +1 -0
  289. package/lib/components/address-popup/address-popup.component.d.ts +16 -0
  290. package/lib/components/address-popup/address-popup.component.d.ts.map +1 -0
  291. package/lib/components/address-suggestion/address-suggestion.component.d.ts +43 -0
  292. package/lib/components/address-suggestion/address-suggestion.component.d.ts.map +1 -0
  293. package/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.d.ts +37 -0
  294. package/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.d.ts.map +1 -0
  295. package/lib/components/associate-ssn/associate-ssn.component.d.ts +33 -0
  296. package/lib/components/associate-ssn/associate-ssn.component.d.ts.map +1 -0
  297. package/lib/components/bank-details/bank-details.component.d.ts +40 -0
  298. package/lib/components/bank-details/bank-details.component.d.ts.map +1 -0
  299. package/lib/components/captcha/captcha.component.d.ts +45 -0
  300. package/lib/components/captcha/captcha.component.d.ts.map +1 -0
  301. package/lib/components/card/card.component.d.ts +12 -0
  302. package/lib/components/card/card.component.d.ts.map +1 -0
  303. package/lib/components/claim-info/claim-info.component.d.ts +49 -0
  304. package/lib/components/claim-info/claim-info.component.d.ts.map +1 -0
  305. package/lib/components/contact-us/contact-us.component.d.ts +106 -0
  306. package/lib/components/contact-us/contact-us.component.d.ts.map +1 -0
  307. package/lib/components/content/content.component.d.ts +14 -0
  308. package/lib/components/content/content.component.d.ts.map +1 -0
  309. package/lib/components/correspondence-download/correspondence-download.component.d.ts +22 -0
  310. package/lib/components/correspondence-download/correspondence-download.component.d.ts.map +1 -0
  311. package/lib/components/dashboard-card/dashboard-card.component.d.ts +26 -0
  312. package/lib/components/dashboard-card/dashboard-card.component.d.ts.map +1 -0
  313. package/lib/components/dependent-grid/dependent-grid.component.d.ts +36 -0
  314. package/lib/components/dependent-grid/dependent-grid.component.d.ts.map +1 -0
  315. package/lib/components/disclosure/disclosure.component.d.ts +13 -0
  316. package/lib/components/disclosure/disclosure.component.d.ts.map +1 -0
  317. package/lib/components/dropdown/dropdown.component.d.ts +582 -0
  318. package/lib/components/dropdown/dropdown.component.d.ts.map +1 -0
  319. package/lib/components/dropdown/dropdown.interface.d.ts +155 -0
  320. package/lib/components/dropdown/dropdown.interface.d.ts.map +1 -0
  321. package/lib/components/dua-request-page/dua-request-page.component.d.ts +74 -0
  322. package/lib/components/dua-request-page/dua-request-page.component.d.ts.map +1 -0
  323. package/lib/components/dua-request-popup/dua-request-popup.component.d.ts +61 -0
  324. package/lib/components/dua-request-popup/dua-request-popup.component.d.ts.map +1 -0
  325. package/lib/components/email-update/email-update.component.d.ts +32 -0
  326. package/lib/components/email-update/email-update.component.d.ts.map +1 -0
  327. package/lib/components/employer-grid/employer-grid.component.d.ts +100 -0
  328. package/lib/components/employer-grid/employer-grid.component.d.ts.map +1 -0
  329. package/lib/components/employer-info/employer-info.component.d.ts +50 -0
  330. package/lib/components/employer-info/employer-info.component.d.ts.map +1 -0
  331. package/lib/components/employer-pay/employer-pay.component.d.ts +51 -0
  332. package/lib/components/employer-pay/employer-pay.component.d.ts.map +1 -0
  333. package/lib/components/employer-pay-grid/employer-pay-grid.component.d.ts +43 -0
  334. package/lib/components/employer-pay-grid/employer-pay-grid.component.d.ts.map +1 -0
  335. package/lib/components/error/error.component.d.ts +19 -0
  336. package/lib/components/error/error.component.d.ts.map +1 -0
  337. package/lib/components/farm-usage/farm-usage.component.d.ts +33 -0
  338. package/lib/components/farm-usage/farm-usage.component.d.ts.map +1 -0
  339. package/lib/components/fav-menu/fav-menu.component.d.ts +22 -0
  340. package/lib/components/fav-menu/fav-menu.component.d.ts.map +1 -0
  341. package/lib/components/file-download/file-download.component.d.ts +23 -0
  342. package/lib/components/file-download/file-download.component.d.ts.map +1 -0
  343. package/lib/components/file-uploader/file-uploader.component.d.ts +52 -0
  344. package/lib/components/file-uploader/file-uploader.component.d.ts.map +1 -0
  345. package/lib/components/footer/footer.component.d.ts +37 -0
  346. package/lib/components/footer/footer.component.d.ts.map +1 -0
  347. package/lib/components/gross-earnings/gross-earnings.component.d.ts +42 -0
  348. package/lib/components/gross-earnings/gross-earnings.component.d.ts.map +1 -0
  349. package/lib/components/header/header.component.d.ts +76 -0
  350. package/lib/components/header/header.component.d.ts.map +1 -0
  351. package/lib/components/help/help.component.d.ts +11 -0
  352. package/lib/components/help/help.component.d.ts.map +1 -0
  353. package/lib/components/history-page/history-page.component.d.ts +80 -0
  354. package/lib/components/history-page/history-page.component.d.ts.map +1 -0
  355. package/lib/components/idle-detector/idle-detector.component.d.ts +16 -0
  356. package/lib/components/idle-detector/idle-detector.component.d.ts.map +1 -0
  357. package/lib/components/idme/idme.component.d.ts +19 -0
  358. package/lib/components/idme/idme.component.d.ts.map +1 -0
  359. package/lib/components/info/info.component.d.ts +23 -0
  360. package/lib/components/info/info.component.d.ts.map +1 -0
  361. package/lib/components/job-search-result-page/job-search-result-page.component.d.ts +22 -0
  362. package/lib/components/job-search-result-page/job-search-result-page.component.d.ts.map +1 -0
  363. package/lib/components/job-title/job-title.component.d.ts +37 -0
  364. package/lib/components/job-title/job-title.component.d.ts.map +1 -0
  365. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts +38 -0
  366. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts.map +1 -0
  367. package/lib/components/link/link.component.d.ts +35 -0
  368. package/lib/components/link/link.component.d.ts.map +1 -0
  369. package/lib/components/maintenance-detector/maintenance-detector.component.d.ts +16 -0
  370. package/lib/components/maintenance-detector/maintenance-detector.component.d.ts.map +1 -0
  371. package/lib/components/mask/mask.component.d.ts +12 -0
  372. package/lib/components/mask/mask.component.d.ts.map +1 -0
  373. package/lib/components/menu/menu.component.d.ts +45 -0
  374. package/lib/components/menu/menu.component.d.ts.map +1 -0
  375. package/lib/components/mfa/mfa.component.d.ts +60 -0
  376. package/lib/components/mfa/mfa.component.d.ts.map +1 -0
  377. package/lib/components/mfa-popup/mfa-popup.component.d.ts +17 -0
  378. package/lib/components/mfa-popup/mfa-popup.component.d.ts.map +1 -0
  379. package/lib/components/money-expect/money-expect.component.d.ts +30 -0
  380. package/lib/components/money-expect/money-expect.component.d.ts.map +1 -0
  381. package/lib/components/msg/msg.component.d.ts +11 -0
  382. package/lib/components/msg/msg.component.d.ts.map +1 -0
  383. package/lib/components/news/news.component.d.ts +15 -0
  384. package/lib/components/news/news.component.d.ts.map +1 -0
  385. package/lib/components/offline-add-employer/offline-add-employer.component.d.ts +311 -0
  386. package/lib/components/offline-add-employer/offline-add-employer.component.d.ts.map +1 -0
  387. package/lib/components/offline-bank-details/offline-bank-details.component.d.ts +33 -0
  388. package/lib/components/offline-bank-details/offline-bank-details.component.d.ts.map +1 -0
  389. package/lib/components/offline-employer-grid/offline-employer-grid.component.d.ts +97 -0
  390. package/lib/components/offline-employer-grid/offline-employer-grid.component.d.ts.map +1 -0
  391. package/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.d.ts +33 -0
  392. package/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.d.ts.map +1 -0
  393. package/lib/components/overlay-info/overlay-info.component.d.ts +35 -0
  394. package/lib/components/overlay-info/overlay-info.component.d.ts.map +1 -0
  395. package/lib/components/page/page.component.d.ts +24 -0
  396. package/lib/components/page/page.component.d.ts.map +1 -0
  397. package/lib/components/profile/profile.component.d.ts +107 -0
  398. package/lib/components/profile/profile.component.d.ts.map +1 -0
  399. package/lib/components/profile-redirect/profile-redirect.component.d.ts +21 -0
  400. package/lib/components/profile-redirect/profile-redirect.component.d.ts.map +1 -0
  401. package/lib/components/proof-of-anything/proof-of-anything.component.d.ts +54 -0
  402. package/lib/components/proof-of-anything/proof-of-anything.component.d.ts.map +1 -0
  403. package/lib/components/proof-of-document-upload/proof-of-document-upload.component.d.ts +74 -0
  404. package/lib/components/proof-of-document-upload/proof-of-document-upload.component.d.ts.map +1 -0
  405. package/lib/components/questionnaire/AppValidators.d.ts +17 -0
  406. package/lib/components/questionnaire/AppValidators.d.ts.map +1 -0
  407. package/lib/components/questionnaire/FbConstants.d.ts +8 -0
  408. package/lib/components/questionnaire/FbConstants.d.ts.map +1 -0
  409. package/lib/components/questionnaire/SelectItem.d.ts +5 -0
  410. package/lib/components/questionnaire/SelectItem.d.ts.map +1 -0
  411. package/lib/components/questionnaire/account-success/account-success.page.d.ts +64 -0
  412. package/lib/components/questionnaire/account-success/account-success.page.d.ts.map +1 -0
  413. package/lib/components/questionnaire/common-success/common-success.page.d.ts +83 -0
  414. package/lib/components/questionnaire/common-success/common-success.page.d.ts.map +1 -0
  415. package/lib/components/questionnaire/dynamic-form-panel.component.d.ts +49 -0
  416. package/lib/components/questionnaire/dynamic-form-panel.component.d.ts.map +1 -0
  417. package/lib/components/questionnaire/dynamic-form-question.component.d.ts +126 -0
  418. package/lib/components/questionnaire/dynamic-form-question.component.d.ts.map +1 -0
  419. package/lib/components/questionnaire/dynamic-form.component.d.ts +137 -0
  420. package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -0
  421. package/lib/components/questionnaire/form-builder/form-builder.page.d.ts +67 -0
  422. package/lib/components/questionnaire/form-builder/form-builder.page.d.ts.map +1 -0
  423. package/lib/components/questionnaire/input-focus.directive.d.ts +12 -0
  424. package/lib/components/questionnaire/input-focus.directive.d.ts.map +1 -0
  425. package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts +45 -0
  426. package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts.map +1 -0
  427. package/lib/components/questionnaire/question-base.d.ts +17 -0
  428. package/lib/components/questionnaire/question-base.d.ts.map +1 -0
  429. package/lib/components/questionnaire/question-control.service.d.ts +21 -0
  430. package/lib/components/questionnaire/question-control.service.d.ts.map +1 -0
  431. package/lib/components/questionnaire/question.service.d.ts +18 -0
  432. package/lib/components/questionnaire/question.service.d.ts.map +1 -0
  433. package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts +77 -0
  434. package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts.map +1 -0
  435. package/lib/components/read-more/read-more.component.d.ts +15 -0
  436. package/lib/components/read-more/read-more.component.d.ts.map +1 -0
  437. package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts +76 -0
  438. package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts.map +1 -0
  439. package/lib/components/scrollable-text/scrollable-text.component.d.ts +11 -0
  440. package/lib/components/scrollable-text/scrollable-text.component.d.ts.map +1 -0
  441. package/lib/components/search-employer/search-employer.component.d.ts +41 -0
  442. package/lib/components/search-employer/search-employer.component.d.ts.map +1 -0
  443. package/lib/components/select/select.component.d.ts +56 -0
  444. package/lib/components/select/select.component.d.ts.map +1 -0
  445. package/lib/components/sign-ssn/sign-ssn.component.d.ts +34 -0
  446. package/lib/components/sign-ssn/sign-ssn.component.d.ts.map +1 -0
  447. package/lib/components/sms/sms.component.d.ts +63 -0
  448. package/lib/components/sms/sms.component.d.ts.map +1 -0
  449. package/lib/components/ssn/ssn.component.d.ts +12 -0
  450. package/lib/components/ssn/ssn.component.d.ts.map +1 -0
  451. package/lib/components/ssn-reverify/ssn-reverify.component.d.ts +23 -0
  452. package/lib/components/ssn-reverify/ssn-reverify.component.d.ts.map +1 -0
  453. package/lib/components/test/test.component.d.ts +9 -0
  454. package/lib/components/test/test.component.d.ts.map +1 -0
  455. package/lib/components/user-login/user-login.component.d.ts +49 -0
  456. package/lib/components/user-login/user-login.component.d.ts.map +1 -0
  457. package/lib/components/wage-calculator/wage-calculator.component.d.ts +44 -0
  458. package/lib/components/wage-calculator/wage-calculator.component.d.ts.map +1 -0
  459. package/lib/components/wage-grid/wage-grid.component.d.ts +43 -0
  460. package/lib/components/wage-grid/wage-grid.component.d.ts.map +1 -0
  461. package/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.d.ts +28 -0
  462. package/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.d.ts.map +1 -0
  463. package/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.d.ts +28 -0
  464. package/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.d.ts.map +1 -0
  465. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts +84 -0
  466. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts.map +1 -0
  467. package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts +53 -0
  468. package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts.map +1 -0
  469. package/lib/components/weekly-certification/weekly-certification.component.d.ts +101 -0
  470. package/lib/components/weekly-certification/weekly-certification.component.d.ts.map +1 -0
  471. package/lib/components/weekly-confirmation/confirmation.component.d.ts +21 -0
  472. package/lib/components/weekly-confirmation/confirmation.component.d.ts.map +1 -0
  473. package/lib/components/weekly-interim-confirmation/interim-confirmation.component.d.ts +34 -0
  474. package/lib/components/weekly-interim-confirmation/interim-confirmation.component.d.ts.map +1 -0
  475. package/lib/components/weekly-summary-v2/summary.component-v2.d.ts +17 -0
  476. package/lib/components/weekly-summary-v2/summary.component-v2.d.ts.map +1 -0
  477. package/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.d.ts +10 -0
  478. package/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.d.ts.map +1 -0
  479. package/lib/components/weekly-work-search-counter/work-search-counter.component.d.ts +17 -0
  480. package/lib/components/weekly-work-search-counter/work-search-counter.component.d.ts.map +1 -0
  481. package/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.d.ts +105 -0
  482. package/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.d.ts.map +1 -0
  483. package/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.d.ts +71 -0
  484. package/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.d.ts.map +1 -0
  485. package/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.d.ts +59 -0
  486. package/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.d.ts.map +1 -0
  487. package/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.d.ts +47 -0
  488. package/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.d.ts.map +1 -0
  489. package/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.d.ts +78 -0
  490. package/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.d.ts.map +1 -0
  491. package/lib/directives/auto-focus/auto-focus.directive.d.ts +13 -0
  492. package/lib/directives/auto-focus/auto-focus.directive.d.ts.map +1 -0
  493. package/lib/directives/caps-lock.directive.d.ts +12 -0
  494. package/lib/directives/caps-lock.directive.d.ts.map +1 -0
  495. package/lib/directives/required-roles/required-roles.directive.d.ts +15 -0
  496. package/lib/directives/required-roles/required-roles.directive.d.ts.map +1 -0
  497. package/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.d.ts +8 -0
  498. package/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.d.ts.map +1 -0
  499. package/lib/enums/AddressValidationResponseEnum.d.ts +8 -0
  500. package/lib/enums/AddressValidationResponseEnum.d.ts.map +1 -0
  501. package/lib/enums/AddressValidationSourceFunctionEnum.d.ts +4 -0
  502. package/lib/enums/AddressValidationSourceFunctionEnum.d.ts.map +1 -0
  503. package/lib/enums/EmailStatusEnum.d.ts +8 -0
  504. package/lib/enums/EmailStatusEnum.d.ts.map +1 -0
  505. package/lib/guards/auth.guard.d.ts +29 -0
  506. package/lib/guards/auth.guard.d.ts.map +1 -0
  507. package/lib/guards/no-login/no-login.guard.d.ts +12 -0
  508. package/lib/guards/no-login/no-login.guard.d.ts.map +1 -0
  509. package/lib/interceptors/error-interceptor/http-error-interceptor.d.ts +23 -0
  510. package/lib/interceptors/error-interceptor/http-error-interceptor.d.ts.map +1 -0
  511. package/lib/interceptors/header-interceptor/http-header.interceptor.d.ts +22 -0
  512. package/lib/interceptors/header-interceptor/http-header.interceptor.d.ts.map +1 -0
  513. package/lib/models/ActiveClaimModel.d.ts +8 -0
  514. package/lib/models/ActiveClaimModel.d.ts.map +1 -0
  515. package/lib/models/AddressComponentModel.d.ts +14 -0
  516. package/lib/models/AddressComponentModel.d.ts.map +1 -0
  517. package/lib/models/BankDetailsComponentModel.d.ts +12 -0
  518. package/lib/models/BankDetailsComponentModel.d.ts.map +1 -0
  519. package/lib/models/BankDetailsModel.d.ts +5 -0
  520. package/lib/models/BankDetailsModel.d.ts.map +1 -0
  521. package/lib/models/CinRequalificationCriteriaModel.d.ts +11 -0
  522. package/lib/models/CinRequalificationCriteriaModel.d.ts.map +1 -0
  523. package/lib/models/CountyModel.d.ts +8 -0
  524. package/lib/models/CountyModel.d.ts.map +1 -0
  525. package/lib/models/DuaAppDataModel.d.ts +5 -0
  526. package/lib/models/DuaAppDataModel.d.ts.map +1 -0
  527. package/lib/models/DuaRequestModel.d.ts +10 -0
  528. package/lib/models/DuaRequestModel.d.ts.map +1 -0
  529. package/lib/models/DuaRetroWeeksComponentModel.d.ts +5 -0
  530. package/lib/models/DuaRetroWeeksComponentModel.d.ts.map +1 -0
  531. package/lib/models/EmployerDetailSearchResult.d.ts +54 -0
  532. package/lib/models/EmployerDetailSearchResult.d.ts.map +1 -0
  533. package/lib/models/EmployerInfoComponentModel.d.ts +9 -0
  534. package/lib/models/EmployerInfoComponentModel.d.ts.map +1 -0
  535. package/lib/models/EmployerPayInfoModel.d.ts +20 -0
  536. package/lib/models/EmployerPayInfoModel.d.ts.map +1 -0
  537. package/lib/models/ErrorModel.d.ts +7 -0
  538. package/lib/models/ErrorModel.d.ts.map +1 -0
  539. package/lib/models/FarmUsageComponentModel.d.ts +10 -0
  540. package/lib/models/FarmUsageComponentModel.d.ts.map +1 -0
  541. package/lib/models/FileModel.d.ts +5 -0
  542. package/lib/models/FileModel.d.ts.map +1 -0
  543. package/lib/models/GrossEarningsModel.d.ts +6 -0
  544. package/lib/models/GrossEarningsModel.d.ts.map +1 -0
  545. package/lib/models/HelpConstants.d.ts +5 -0
  546. package/lib/models/HelpConstants.d.ts.map +1 -0
  547. package/lib/models/LexisNexisOtpDetailsResponseModel.d.ts +7 -0
  548. package/lib/models/LexisNexisOtpDetailsResponseModel.d.ts.map +1 -0
  549. package/lib/models/LibConstants.d.ts +162 -0
  550. package/lib/models/LibConstants.d.ts.map +1 -0
  551. package/lib/models/NewsAndAnnouncementModel.d.ts +6 -0
  552. package/lib/models/NewsAndAnnouncementModel.d.ts.map +1 -0
  553. package/lib/models/NotificationModel.d.ts +11 -0
  554. package/lib/models/NotificationModel.d.ts.map +1 -0
  555. package/lib/models/OtpAuthModel.d.ts +7 -0
  556. package/lib/models/OtpAuthModel.d.ts.map +1 -0
  557. package/lib/models/PaymentComponentModel.d.ts +8 -0
  558. package/lib/models/PaymentComponentModel.d.ts.map +1 -0
  559. package/lib/models/ReasonSeparationRequestModel.d.ts +7 -0
  560. package/lib/models/ReasonSeparationRequestModel.d.ts.map +1 -0
  561. package/lib/models/RequalifyLiftPageModel.d.ts +12 -0
  562. package/lib/models/RequalifyLiftPageModel.d.ts.map +1 -0
  563. package/lib/models/RetroWeeksModel.d.ts +11 -0
  564. package/lib/models/RetroWeeksModel.d.ts.map +1 -0
  565. package/lib/models/SecurityQuestionAnswerModel.d.ts +7 -0
  566. package/lib/models/SecurityQuestionAnswerModel.d.ts.map +1 -0
  567. package/lib/models/SendOtpRequestModel.d.ts +12 -0
  568. package/lib/models/SendOtpRequestModel.d.ts.map +1 -0
  569. package/lib/models/SsaVerificationModel.d.ts +9 -0
  570. package/lib/models/SsaVerificationModel.d.ts.map +1 -0
  571. package/lib/models/TrendModel.d.ts +14 -0
  572. package/lib/models/TrendModel.d.ts.map +1 -0
  573. package/lib/models/UserDetailsModel.d.ts +10 -0
  574. package/lib/models/UserDetailsModel.d.ts.map +1 -0
  575. package/lib/models/UserModel.d.ts +47 -0
  576. package/lib/models/UserModel.d.ts.map +1 -0
  577. package/lib/models/VerifyOtpRequestModel.d.ts +8 -0
  578. package/lib/models/VerifyOtpRequestModel.d.ts.map +1 -0
  579. package/lib/models/WageCalculatorModel.d.ts +15 -0
  580. package/lib/models/WageCalculatorModel.d.ts.map +1 -0
  581. package/lib/models/WageInfoModel.d.ts +9 -0
  582. package/lib/models/WageInfoModel.d.ts.map +1 -0
  583. package/lib/models/addressValidation/AddressRecommendationModel.d.ts +12 -0
  584. package/lib/models/addressValidation/AddressRecommendationModel.d.ts.map +1 -0
  585. package/lib/models/addressValidation/AddressValidationRequestComponentModel.d.ts +11 -0
  586. package/lib/models/addressValidation/AddressValidationRequestComponentModel.d.ts.map +1 -0
  587. package/lib/models/addressValidation/AddressValidationResponseComponentModel.d.ts +6 -0
  588. package/lib/models/addressValidation/AddressValidationResponseComponentModel.d.ts.map +1 -0
  589. package/lib/models/addressValidation/AddressValidationReturnComponentModel.d.ts +16 -0
  590. package/lib/models/addressValidation/AddressValidationReturnComponentModel.d.ts.map +1 -0
  591. package/lib/models/case/CaseAttachmentModel.d.ts +6 -0
  592. package/lib/models/case/CaseAttachmentModel.d.ts.map +1 -0
  593. package/lib/models/claimant/ClaimantModel.d.ts +23 -0
  594. package/lib/models/claimant/ClaimantModel.d.ts.map +1 -0
  595. package/lib/models/claimant/JobResultsData.d.ts +8 -0
  596. package/lib/models/claimant/JobResultsData.d.ts.map +1 -0
  597. package/lib/models/claimant/MatchingJobs.d.ts +13 -0
  598. package/lib/models/claimant/MatchingJobs.d.ts.map +1 -0
  599. package/lib/models/claimant/ResetPasswordModel.d.ts +9 -0
  600. package/lib/models/claimant/ResetPasswordModel.d.ts.map +1 -0
  601. package/lib/models/cmp/CaseCoreModel.d.ts +21 -0
  602. package/lib/models/cmp/CaseCoreModel.d.ts.map +1 -0
  603. package/lib/models/cmp/ComplaintCategoryModel.d.ts +9 -0
  604. package/lib/models/cmp/ComplaintCategoryModel.d.ts.map +1 -0
  605. package/lib/models/cmp/ComplaintCategoryOutputModel.d.ts +6 -0
  606. package/lib/models/cmp/ComplaintCategoryOutputModel.d.ts.map +1 -0
  607. package/lib/models/cmp/ContactUsModel.d.ts +23 -0
  608. package/lib/models/cmp/ContactUsModel.d.ts.map +1 -0
  609. package/lib/models/cmp/EmailTemplateModel.d.ts +7 -0
  610. package/lib/models/cmp/EmailTemplateModel.d.ts.map +1 -0
  611. package/lib/models/cmp/contactUsInqueryModel.d.ts +47 -0
  612. package/lib/models/cmp/contactUsInqueryModel.d.ts.map +1 -0
  613. package/lib/models/cmp/messageRourceModel.d.ts +6 -0
  614. package/lib/models/cmp/messageRourceModel.d.ts.map +1 -0
  615. package/lib/models/combo-model.d.ts +42 -0
  616. package/lib/models/combo-model.d.ts.map +1 -0
  617. package/lib/models/dashboard-model.d.ts +66 -0
  618. package/lib/models/dashboard-model.d.ts.map +1 -0
  619. package/lib/models/dependent.model.d.ts +20 -0
  620. package/lib/models/dependent.model.d.ts.map +1 -0
  621. package/lib/models/fileupload/DocUploadModel.d.ts +22 -0
  622. package/lib/models/fileupload/DocUploadModel.d.ts.map +1 -0
  623. package/lib/models/fileupload/EmployerDataModel.d.ts +6 -0
  624. package/lib/models/fileupload/EmployerDataModel.d.ts.map +1 -0
  625. package/lib/models/fileupload/FileObject.d.ts +8 -0
  626. package/lib/models/fileupload/FileObject.d.ts.map +1 -0
  627. package/lib/models/fileupload/FileObjectArray.d.ts +8 -0
  628. package/lib/models/fileupload/FileObjectArray.d.ts.map +1 -0
  629. package/lib/models/questionnaire/AppealParticipantModel.d.ts +17 -0
  630. package/lib/models/questionnaire/AppealParticipantModel.d.ts.map +1 -0
  631. package/lib/models/questionnaire/AutocoderModel.d.ts +9 -0
  632. package/lib/models/questionnaire/AutocoderModel.d.ts.map +1 -0
  633. package/lib/models/questionnaire/ClaimAppEmpRequestModel.d.ts +9 -0
  634. package/lib/models/questionnaire/ClaimAppEmpRequestModel.d.ts.map +1 -0
  635. package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts +21 -0
  636. package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts.map +1 -0
  637. package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts +167 -0
  638. package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts.map +1 -0
  639. package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts +21 -0
  640. package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts.map +1 -0
  641. package/lib/models/questionnaire/ComboModel.d.ts +110 -0
  642. package/lib/models/questionnaire/ComboModel.d.ts.map +1 -0
  643. package/lib/models/questionnaire/ElementsModel.d.ts +70 -0
  644. package/lib/models/questionnaire/ElementsModel.d.ts.map +1 -0
  645. package/lib/models/questionnaire/EmployerDetailSearchResult.d.ts +18 -0
  646. package/lib/models/questionnaire/EmployerDetailSearchResult.d.ts.map +1 -0
  647. package/lib/models/questionnaire/EmployerWagesModel.d.ts +5 -0
  648. package/lib/models/questionnaire/EmployerWagesModel.d.ts.map +1 -0
  649. package/lib/models/questionnaire/FBConfigModel.d.ts +12 -0
  650. package/lib/models/questionnaire/FBConfigModel.d.ts.map +1 -0
  651. package/lib/models/questionnaire/KeyValueModel.d.ts +11 -0
  652. package/lib/models/questionnaire/KeyValueModel.d.ts.map +1 -0
  653. package/lib/models/questionnaire/LegalDiscaimarModel.d.ts +13 -0
  654. package/lib/models/questionnaire/LegalDiscaimarModel.d.ts.map +1 -0
  655. package/lib/models/questionnaire/LoaderModel.d.ts +5 -0
  656. package/lib/models/questionnaire/LoaderModel.d.ts.map +1 -0
  657. package/lib/models/questionnaire/PollingStatusModel.d.ts +7 -0
  658. package/lib/models/questionnaire/PollingStatusModel.d.ts.map +1 -0
  659. package/lib/models/questionnaire/QtrYearEmployerWageModel.d.ts +9 -0
  660. package/lib/models/questionnaire/QtrYearEmployerWageModel.d.ts.map +1 -0
  661. package/lib/models/questionnaire/QuestionnaireQueryModel.d.ts +24 -0
  662. package/lib/models/questionnaire/QuestionnaireQueryModel.d.ts.map +1 -0
  663. package/lib/models/questionnaire/QuestionnaireReturnModel.d.ts +21 -0
  664. package/lib/models/questionnaire/QuestionnaireReturnModel.d.ts.map +1 -0
  665. package/lib/models/questionnaire/QuestionnaireSaveModel.d.ts +25 -0
  666. package/lib/models/questionnaire/QuestionnaireSaveModel.d.ts.map +1 -0
  667. package/lib/models/questionnaire/RequalifyLiftIssuesModel.d.ts +14 -0
  668. package/lib/models/questionnaire/RequalifyLiftIssuesModel.d.ts.map +1 -0
  669. package/lib/models/questionnaire/ScrollableTextModel.d.ts +4 -0
  670. package/lib/models/questionnaire/ScrollableTextModel.d.ts.map +1 -0
  671. package/lib/models/questionnaire/ServiceActionResponseModel.d.ts +7 -0
  672. package/lib/models/questionnaire/ServiceActionResponseModel.d.ts.map +1 -0
  673. package/lib/models/questionnaire/StatusModel.d.ts +17 -0
  674. package/lib/models/questionnaire/StatusModel.d.ts.map +1 -0
  675. package/lib/models/questionnaire/SuccessPageElement.d.ts +9 -0
  676. package/lib/models/questionnaire/SuccessPageElement.d.ts.map +1 -0
  677. package/lib/models/questionnaire/UI512AResponseModel.d.ts +13 -0
  678. package/lib/models/questionnaire/UI512AResponseModel.d.ts.map +1 -0
  679. package/lib/models/questionnaire/ValidationModel.d.ts +18 -0
  680. package/lib/models/questionnaire/ValidationModel.d.ts.map +1 -0
  681. package/lib/models/questionnaire/WbaHelperTextModel.d.ts +4 -0
  682. package/lib/models/questionnaire/WbaHelperTextModel.d.ts.map +1 -0
  683. package/lib/models/weekly-cert/WorkSearchWaiverModel.d.ts +9 -0
  684. package/lib/models/weekly-cert/WorkSearchWaiverModel.d.ts.map +1 -0
  685. package/lib/models/weekly-cert/address-detail-model.d.ts +14 -0
  686. package/lib/models/weekly-cert/address-detail-model.d.ts.map +1 -0
  687. package/lib/models/weekly-cert/admin-leave-details-model.d.ts +15 -0
  688. package/lib/models/weekly-cert/admin-leave-details-model.d.ts.map +1 -0
  689. package/lib/models/weekly-cert/employer-info-v2-model.d.ts +27 -0
  690. package/lib/models/weekly-cert/employer-info-v2-model.d.ts.map +1 -0
  691. package/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.d.ts +57 -0
  692. package/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.d.ts.map +1 -0
  693. package/lib/models/weekly-cert/weekly-certification-v2-model.d.ts +59 -0
  694. package/lib/models/weekly-cert/weekly-certification-v2-model.d.ts.map +1 -0
  695. package/lib/models/weekly-cert/work-search-record-v2-model.d.ts +66 -0
  696. package/lib/models/weekly-cert/work-search-record-v2-model.d.ts.map +1 -0
  697. package/lib/models/weekly-cert/work-search-v2-model.d.ts +18 -0
  698. package/lib/models/weekly-cert/work-search-v2-model.d.ts.map +1 -0
  699. package/lib/ngx-reusa-app-lib.component.d.ts +9 -0
  700. package/lib/ngx-reusa-app-lib.component.d.ts.map +1 -0
  701. package/lib/ngx-reusa-app-lib.module.d.ts +193 -0
  702. package/lib/ngx-reusa-app-lib.module.d.ts.map +1 -0
  703. package/lib/ngx-reusa-app-lib.service.d.ts +7 -0
  704. package/lib/ngx-reusa-app-lib.service.d.ts.map +1 -0
  705. package/lib/pages/BasePage.d.ts +29 -0
  706. package/lib/pages/BasePage.d.ts.map +1 -0
  707. package/lib/pages/common/accessibility-policy/accessibility-policy.page.d.ts +12 -0
  708. package/lib/pages/common/accessibility-policy/accessibility-policy.page.d.ts.map +1 -0
  709. package/lib/pages/common/change-password/change-password.page.d.ts +44 -0
  710. package/lib/pages/common/change-password/change-password.page.d.ts.map +1 -0
  711. package/lib/pages/common/landing/landing.component.d.ts +25 -0
  712. package/lib/pages/common/landing/landing.component.d.ts.map +1 -0
  713. package/lib/pages/common/landing2/landing2.component.d.ts +31 -0
  714. package/lib/pages/common/landing2/landing2.component.d.ts.map +1 -0
  715. package/lib/pages/common/login/login.component.d.ts +65 -0
  716. package/lib/pages/common/login/login.component.d.ts.map +1 -0
  717. package/lib/pages/common/not-found/not-found.page.d.ts +9 -0
  718. package/lib/pages/common/not-found/not-found.page.d.ts.map +1 -0
  719. package/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.d.ts +12 -0
  720. package/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.d.ts.map +1 -0
  721. package/lib/pages/common/security-policy/security-policy.page.d.ts +12 -0
  722. package/lib/pages/common/security-policy/security-policy.page.d.ts.map +1 -0
  723. package/lib/pages/common/unauthorized/unauthorized.page.d.ts +9 -0
  724. package/lib/pages/common/unauthorized/unauthorized.page.d.ts.map +1 -0
  725. package/lib/pages/popovers/language/language.page.d.ts +17 -0
  726. package/lib/pages/popovers/language/language.page.d.ts.map +1 -0
  727. package/lib/pages/popovers/my-notifications/my-notifications.page.d.ts +22 -0
  728. package/lib/pages/popovers/my-notifications/my-notifications.page.d.ts.map +1 -0
  729. package/lib/pages/popovers/my-profile/my-profile.page.d.ts +21 -0
  730. package/lib/pages/popovers/my-profile/my-profile.page.d.ts.map +1 -0
  731. package/lib/pages/popovers/user-search/user-search.component.d.ts +32 -0
  732. package/lib/pages/popovers/user-search/user-search.component.d.ts.map +1 -0
  733. package/lib/pipes/filter.pipe.d.ts +8 -0
  734. package/lib/pipes/filter.pipe.d.ts.map +1 -0
  735. package/lib/pipes/format-worksearch/format-worksearch.pipe.d.ts +14 -0
  736. package/lib/pipes/format-worksearch/format-worksearch.pipe.d.ts.map +1 -0
  737. package/lib/pipes/mask/mask.email.pipe.d.ts +11 -0
  738. package/lib/pipes/mask/mask.email.pipe.d.ts.map +1 -0
  739. package/lib/pipes/proper-case/proper-case.pipe.d.ts +9 -0
  740. package/lib/pipes/proper-case/proper-case.pipe.d.ts.map +1 -0
  741. package/lib/pipes/translate/dynamic-translate.pipe.d.ts +11 -0
  742. package/lib/pipes/translate/dynamic-translate.pipe.d.ts.map +1 -0
  743. package/lib/pipes/trust-html/trust-html.pipe.d.ts +11 -0
  744. package/lib/pipes/trust-html/trust-html.pipe.d.ts.map +1 -0
  745. package/lib/services/address-validation-service/address-validation.service.d.ts +44 -0
  746. package/lib/services/address-validation-service/address-validation.service.d.ts.map +1 -0
  747. package/lib/services/appeal/appeal.service.d.ts +16 -0
  748. package/lib/services/appeal/appeal.service.d.ts.map +1 -0
  749. package/lib/services/base-service.d.ts +105 -0
  750. package/lib/services/base-service.d.ts.map +1 -0
  751. package/lib/services/birt-service/birt.service.d.ts +17 -0
  752. package/lib/services/birt-service/birt.service.d.ts.map +1 -0
  753. package/lib/services/captcha/captcha.service.d.ts +16 -0
  754. package/lib/services/captcha/captcha.service.d.ts.map +1 -0
  755. package/lib/services/case-service/case.service.d.ts +20 -0
  756. package/lib/services/case-service/case.service.d.ts.map +1 -0
  757. package/lib/services/chatbot/chatbot.service.d.ts +61 -0
  758. package/lib/services/chatbot/chatbot.service.d.ts.map +1 -0
  759. package/lib/services/chatbot/script.const.d.ts +16 -0
  760. package/lib/services/chatbot/script.const.d.ts.map +1 -0
  761. package/lib/services/claimant/claimant.service.d.ts +18 -0
  762. package/lib/services/claimant/claimant.service.d.ts.map +1 -0
  763. package/lib/services/claimant-context/claimant-context.service.d.ts +19 -0
  764. package/lib/services/claimant-context/claimant-context.service.d.ts.map +1 -0
  765. package/lib/services/claimant-service/claimant.service.d.ts +25 -0
  766. package/lib/services/claimant-service/claimant.service.d.ts.map +1 -0
  767. package/lib/services/claims/claims.service.d.ts +76 -0
  768. package/lib/services/claims/claims.service.d.ts.map +1 -0
  769. package/lib/services/cmp-service/cmp.service.d.ts +34 -0
  770. package/lib/services/cmp-service/cmp.service.d.ts.map +1 -0
  771. package/lib/services/dms-service/dms.service.d.ts +24 -0
  772. package/lib/services/dms-service/dms.service.d.ts.map +1 -0
  773. package/lib/services/employer/employer-service.d.ts +16 -0
  774. package/lib/services/employer/employer-service.d.ts.map +1 -0
  775. package/lib/services/event-service/event-service.d.ts +20 -0
  776. package/lib/services/event-service/event-service.d.ts.map +1 -0
  777. package/lib/services/fpjs/fingerprint.service.d.ts +19 -0
  778. package/lib/services/fpjs/fingerprint.service.d.ts.map +1 -0
  779. package/lib/services/google-analytics/google-analytics.service.d.ts +9 -0
  780. package/lib/services/google-analytics/google-analytics.service.d.ts.map +1 -0
  781. package/lib/services/help/help.service.d.ts +26 -0
  782. package/lib/services/help/help.service.d.ts.map +1 -0
  783. package/lib/services/idle/idle.service.d.ts +44 -0
  784. package/lib/services/idle/idle.service.d.ts.map +1 -0
  785. package/lib/services/logger/logger.service.d.ts +32 -0
  786. package/lib/services/logger/logger.service.d.ts.map +1 -0
  787. package/lib/services/login/login.service.d.ts +81 -0
  788. package/lib/services/login/login.service.d.ts.map +1 -0
  789. package/lib/services/maintenance/maintenance.service.d.ts +16 -0
  790. package/lib/services/maintenance/maintenance.service.d.ts.map +1 -0
  791. package/lib/services/notification/notification.service.d.ts +39 -0
  792. package/lib/services/notification/notification.service.d.ts.map +1 -0
  793. package/lib/services/offline-claims/offline-claims.service.d.ts +64 -0
  794. package/lib/services/offline-claims/offline-claims.service.d.ts.map +1 -0
  795. package/lib/services/questionnaire/questionnaire.service.d.ts +37 -0
  796. package/lib/services/questionnaire/questionnaire.service.d.ts.map +1 -0
  797. package/lib/services/questionnaire/validation.service.d.ts +85 -0
  798. package/lib/services/questionnaire/validation.service.d.ts.map +1 -0
  799. package/lib/services/security-service/security.service.d.ts +26 -0
  800. package/lib/services/security-service/security.service.d.ts.map +1 -0
  801. package/lib/services/tour/tour.service.d.ts +25 -0
  802. package/lib/services/tour/tour.service.d.ts.map +1 -0
  803. package/lib/services/util/util.service.d.ts +200 -0
  804. package/lib/services/util/util.service.d.ts.map +1 -0
  805. package/lib/services/weekly-cert/review.service.d.ts +23 -0
  806. package/lib/services/weekly-cert/review.service.d.ts.map +1 -0
  807. package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts +59 -0
  808. package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts.map +1 -0
  809. package/lib/services/weekly-cert/weekly-cert.service.d.ts +17 -0
  810. package/lib/services/weekly-cert/weekly-cert.service.d.ts.map +1 -0
  811. package/lib/services/weekly-cert/work-search.service.d.ts +26 -0
  812. package/lib/services/weekly-cert/work-search.service.d.ts.map +1 -0
  813. package/lib/validations/AppRegex.d.ts +48 -0
  814. package/lib/validations/AppRegex.d.ts.map +1 -0
  815. package/lib/validations/AppValidators.d.ts +78 -0
  816. package/lib/validations/AppValidators.d.ts.map +1 -0
  817. package/package.json +25 -0
  818. package/public-api.d.ts +170 -0
  819. package/public-api.d.ts.map +1 -0
  820. package/uiapplib-ngx-ui-web-lib.d.ts.map +1 -0
@@ -0,0 +1,790 @@
1
+ export class AppValidators {
2
+ // @dynamic
3
+ static customValidation(element, validation, stateName) {
4
+ let validationName = validation.customValidationName;
5
+ const func = (formGroup) => {
6
+ if (validationName === "basePeriodEmplValidation") {
7
+ let val;
8
+ if (element.name === 'prevwork') {
9
+ val = formGroup.controls[element.name].value;
10
+ if (val) {
11
+ let bpEmpList;
12
+ bpEmpList = val.bpEmpList;
13
+ /*if (formGroup.controls['pastemp'] //&& formGroup.controls['workforemp'].value === 'Y'
14
+ && bpEmpList.length < 1) {
15
+ formGroup.controls[element.name].setErrors({ bpEmplrLengthFlag: true });
16
+ return { bpEmplrLengthFlag: true };
17
+ } else {
18
+ formGroup.controls[element.name].setErrors(null);
19
+ }*/
20
+ for (var bpEmp of bpEmpList) {
21
+ if (bpEmp.bpEmployerFlag === '1' && bpEmp.empDeleted === 'N'
22
+ && (bpEmp.startDate === null && bpEmp.startDateFed === null && bpEmp.startDateMil === null)) {
23
+ formGroup.controls[element.name].setErrors({ bpEmplrFlag: true });
24
+ return { bpEmplrFlag: true };
25
+ }
26
+ else {
27
+ formGroup.controls[element.name].setErrors(null);
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ else if (validationName === "simpleCheckBoxValidation") {
34
+ if (formGroup.controls[element.name]) {
35
+ if (!formGroup.controls[element.name].value) {
36
+ formGroup.controls[element.name].setErrors({ simpleCheckBoxValidationFlag: true });
37
+ }
38
+ else {
39
+ formGroup.controls[element.name].setErrors(null);
40
+ }
41
+ }
42
+ }
43
+ else if (validationName === "cpatchvalidation") {
44
+ if (formGroup.controls[element.name]) {
45
+ if (!formGroup.controls[element.name].value) {
46
+ formGroup.controls[element.name].setErrors({ cpatchvalidationFlag: true });
47
+ }
48
+ else {
49
+ formGroup.controls[element.name].setErrors(null);
50
+ }
51
+ }
52
+ }
53
+ else if (validationName === "uploadvalidation") {
54
+ if (formGroup.controls[element.name]) {
55
+ if (!formGroup.controls[element.name].value || (Array.isArray(formGroup.controls[element.name].value) && !formGroup.controls[element.name].value.length)) {
56
+ formGroup.controls[element.name].setErrors({ uploadvalidationFlag: true });
57
+ }
58
+ else {
59
+ formGroup.controls[element.name].setErrors(null);
60
+ }
61
+ }
62
+ }
63
+ else if (validationName === "addressValidation") {
64
+ let addressCompValue;
65
+ if (formGroup.controls[element.name]) {
66
+ if (element.requiredIf) {
67
+ let expression = element.requiredIf;
68
+ let splitArray = expression.split('==');
69
+ let contolName = splitArray[0].replace('{', '').replace('}', '').trim();
70
+ let value = splitArray[1].replace(/'/g, '').trim();
71
+ if (formGroup.controls[contolName] && formGroup.controls[contolName].value) {
72
+ let valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
73
+ if (value === 'Y' && valueOfCnrtrlToCheck === 'N') {
74
+ const currentErrors = formGroup.controls[element.name].errors;
75
+ if (currentErrors) {
76
+ delete currentErrors['addressValidationFlag'];
77
+ if (Object.keys(currentErrors).length === 0) {
78
+ formGroup.controls[element.name].setErrors(null);
79
+ }
80
+ else {
81
+ formGroup.controls[element.name].setErrors(currentErrors);
82
+ }
83
+ }
84
+ else {
85
+ formGroup.controls[element.name].setErrors(null);
86
+ }
87
+ return;
88
+ }
89
+ }
90
+ }
91
+ addressCompValue = formGroup.controls[element.name].value;
92
+ if (addressCompValue) {
93
+ if (!addressCompValue.city || !addressCompValue.state ||
94
+ !addressCompValue['zip'] || !addressCompValue.country ||
95
+ !addressCompValue['streetAddress']
96
+ || (addressCompValue['neighborStateCheckRequired'] === 'Y' && !addressCompValue['neighbourFlag'])) {
97
+ if (element.name === 'mailAddress') {
98
+ }
99
+ formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
100
+ }
101
+ if (addressCompValue.state && addressCompValue.state.value &&
102
+ ((addressCompValue.state.value === 'MS' && stateName === 'MS') ||
103
+ (addressCompValue.state.value === 'CT' && stateName === 'CT')) &&
104
+ element.countyRequired === true && !addressCompValue['county']) {
105
+ formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
106
+ }
107
+ if (addressCompValue.state && addressCompValue.state.value === 'ME' && stateName === 'ME' &&
108
+ element.countyRequired === true && !addressCompValue['town']) {
109
+ formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
110
+ }
111
+ }
112
+ else {
113
+ if (element.requiredIf) {
114
+ let expression = element.requiredIf;
115
+ let splitArray = expression.split('==');
116
+ let contolName = splitArray[0].replace('{', '').replace('}', '').trim();
117
+ let value = splitArray[1].replace(/'/g, '').trim();
118
+ if (formGroup.controls[contolName] && formGroup.controls[contolName].value) {
119
+ let valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
120
+ if (value === 'Y' && valueOfCnrtrlToCheck === 'N') {
121
+ const currentErrors = formGroup.controls[element.name].errors;
122
+ if (currentErrors) {
123
+ delete currentErrors['addressValidationFlag'];
124
+ if (Object.keys(currentErrors).length === 0) {
125
+ formGroup.controls[element.name].setErrors(null);
126
+ }
127
+ else {
128
+ formGroup.controls[element.name].setErrors(currentErrors);
129
+ }
130
+ }
131
+ else {
132
+ formGroup.controls[element.name].setErrors(null);
133
+ }
134
+ }
135
+ else if (valueOfCnrtrlToCheck === value) {
136
+ formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
137
+ }
138
+ }
139
+ }
140
+ else {
141
+ formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
142
+ }
143
+ }
144
+ }
145
+ }
146
+ else if (validationName === "bankDetailsValidationFlag") {
147
+ let bankDetailsComponentVal;
148
+ if (formGroup.controls[element.name]) {
149
+ bankDetailsComponentVal = formGroup.controls[element.name].value;
150
+ if (element.requiredIf) {
151
+ let expression = element.requiredIf;
152
+ var splitArray = expression.split('==');
153
+ let contolName = splitArray[0];
154
+ let value = splitArray[1];
155
+ contolName = contolName.replace('{', '').replace('}', '').trim();
156
+ value = value.replace('\'', '').replace('\'', '').trim();
157
+ if (formGroup.controls[contolName] && formGroup.controls[contolName].value) {
158
+ var valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
159
+ if (valueOfCnrtrlToCheck === value) {
160
+ if (bankDetailsComponentVal) {
161
+ if (!bankDetailsComponentVal.accountNumber || !bankDetailsComponentVal.accountType
162
+ || !bankDetailsComponentVal.nameOnAccount || !bankDetailsComponentVal.reEnterAccountNumber
163
+ || !bankDetailsComponentVal.routingNumber) {
164
+ formGroup.controls[element.name].setErrors({ bankDetailsValidationFlag: true });
165
+ }
166
+ else {
167
+ formGroup.controls[element.name].setErrors(null);
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
174
+ }
175
+ else if (validationName === "jobTileValidationFlag") {
176
+ if (formGroup.controls[element.name]) {
177
+ if (element.isRequired) {
178
+ if (formGroup.controls[element.name].value === null) {
179
+ formGroup.controls[element.name].setErrors({ jobTitleFlag: true });
180
+ }
181
+ else {
182
+ formGroup.controls[element.name].setErrors(null);
183
+ }
184
+ }
185
+ }
186
+ }
187
+ else if (validationName === "atLeastOne") {
188
+ let currentFormControl = formGroup.controls[element.name];
189
+ if (currentFormControl) {
190
+ if (element.requiredIf) {
191
+ let expression = element.requiredIf;
192
+ let isRequired = false;
193
+ if (expression.includes('&&') && !expression.includes('||')) {
194
+ let expr = expression.split('&&');
195
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
196
+ && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
197
+ }
198
+ if (expression.includes('||') && !expression.includes('&&')) {
199
+ let expr = expression.split('||');
200
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
201
+ || AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
202
+ }
203
+ let fields = validation.expression.split(",");
204
+ let firstFormControl = formGroup.controls[fields[0].trim()];
205
+ let secondFormCOntrol = formGroup.controls[fields[1].trim()];
206
+ if (isRequired) {
207
+ if (this.isNullOrUndefined(currentFormControl.value)
208
+ && this.isNullOrUndefined(firstFormControl.value)
209
+ && this.isNullOrUndefined(secondFormCOntrol.value)) {
210
+ currentFormControl.setErrors({ atLeastOne: true });
211
+ firstFormControl.setErrors({ atLeastOne: true });
212
+ secondFormCOntrol.setErrors({ atLeastOne: true });
213
+ }
214
+ else {
215
+ currentFormControl.setErrors(null);
216
+ firstFormControl.setErrors(null);
217
+ secondFormCOntrol.setErrors(null);
218
+ if (this.isNullOrUndefined(currentFormControl.value)) {
219
+ currentFormControl.setValue(0);
220
+ }
221
+ if (this.isNullOrUndefined(firstFormControl.value)) {
222
+ firstFormControl.setValue(0);
223
+ }
224
+ if (this.isNullOrUndefined(secondFormCOntrol.value)) {
225
+ secondFormCOntrol.setValue(0);
226
+ }
227
+ }
228
+ }
229
+ else {
230
+ if (currentFormControl.value === 0
231
+ && firstFormControl.value === 0
232
+ && secondFormCOntrol.value === 0) {
233
+ currentFormControl.setErrors({ atLeastOne: true });
234
+ firstFormControl.setErrors({ atLeastOne: true });
235
+ secondFormCOntrol.setErrors({ atLeastOne: true });
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ else if (validationName === "isGreaterDate") {
242
+ // Comparison with referenceDate we can add controls like If Block 253 Set Values, appealConsideredLateDate used in QE_FILE_APPEAL for ME
243
+ if (formGroup.controls['appealConsideredLateDate'].value != null && formGroup.controls['currentDate'].value != null) {
244
+ let appealLateDate = formGroup.controls['appealConsideredLateDate'].value;
245
+ let currentDate = formGroup.controls['currentDate'].value;
246
+ if (new Date(currentDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")) >= new Date(appealLateDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))) {
247
+ formGroup.get('lateAppeal').setValue('Y', { onlySelf: true, emitEvent: false });
248
+ }
249
+ }
250
+ }
251
+ else if (validationName === "notEquals") {
252
+ let currentFormControl = formGroup.controls[element.name];
253
+ if (currentFormControl) {
254
+ let fields = validation.expression.split(",");
255
+ fields.forEach(field => {
256
+ let val = currentFormControl.value;
257
+ let otherFieldFormControlName = formGroup.controls[field.trim()];
258
+ let otherFieldValue = otherFieldFormControlName.value;
259
+ if (val && otherFieldValue
260
+ && ((val.value && otherFieldValue.value && val.value === otherFieldValue.value) || val === otherFieldValue)) {
261
+ otherFieldFormControlName.setErrors({ notEquals: true });
262
+ }
263
+ else {
264
+ if (!currentFormControl.errors && val && otherFieldValue
265
+ && ((val.value && otherFieldValue.value && val.value != otherFieldValue.value) || val != otherFieldValue)) {
266
+ let values = this.getOtherFormFieldsValues(fields, formGroup);
267
+ if (values.size == fields.length) {
268
+ otherFieldFormControlName.setErrors(null);
269
+ }
270
+ }
271
+ }
272
+ });
273
+ }
274
+ }
275
+ // Custom Validation for weeklies Page since there are empty strings passed
276
+ // while loading the model to prevent null pointer exception in DUA
277
+ else if (validationName === "wcCommonValidation") {
278
+ let currentFormControl = formGroup.controls[element.name];
279
+ if (currentFormControl) {
280
+ if (element.name === 'workPerformed' || element.name === 'available') {
281
+ if (element.requiredIf) {
282
+ let expression = element.requiredIf;
283
+ let isRequired = false;
284
+ if (expression.includes('&&') && !expression.includes('||')) {
285
+ let expr = expression.split('&&');
286
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
287
+ && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
288
+ }
289
+ else if (expression) {
290
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expression.trim(), formGroup, element, null);
291
+ }
292
+ if (isRequired) {
293
+ if (currentFormControl.value === " ") {
294
+ currentFormControl.setErrors({ wcRequired: true });
295
+ }
296
+ }
297
+ }
298
+ }
299
+ else if (element.name != 'workPerformed' || element.name != 'available') {
300
+ if (currentFormControl.value === " ") {
301
+ currentFormControl.setErrors({ wcRequired: true });
302
+ }
303
+ }
304
+ }
305
+ }
306
+ else if (validationName === "wcEmployerValidation") {
307
+ let empModels = formGroup.controls[element.name]?.value;
308
+ if (empModels) {
309
+ let nonCompletedEmps = empModels.filter(e => !e.isPartTimeEmployerEdited && e.isPartTimeEmployer);
310
+ if (nonCompletedEmps && nonCompletedEmps.length > 0) {
311
+ formGroup.controls[element.name].setErrors({ wcEmployerValidation: true });
312
+ }
313
+ }
314
+ if (element.requiredIf) {
315
+ let expression = element.requiredIf;
316
+ let isRequired = false;
317
+ let isPartialClaimEmployment = false;
318
+ if (expression.includes('&&') && !expression.includes('||')) {
319
+ let expr = expression.split('&&');
320
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
321
+ && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
322
+ }
323
+ if (expression.includes('||') && !expression.includes('&&')) {
324
+ let expr = expression.split('||');
325
+ let target = "hidPartialClaimEmploymentFlag";
326
+ let index = expr.findIndex(e => e.includes(target));
327
+ if (index >= 0) {
328
+ isPartialClaimEmployment = AppValidators.calculateOperandValueForRequiredIf(expr[index].trim(), formGroup, element, null);
329
+ }
330
+ if ((isPartialClaimEmployment == false) || (index < 0)) {
331
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
332
+ || AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
333
+ if (expr.length >= 3) {
334
+ isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[2].trim(), formGroup, element, null);
335
+ }
336
+ if (expr.length >= 4) {
337
+ isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[3].trim(), formGroup, element, null);
338
+ }
339
+ if (expr.length == 5) {
340
+ isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[4].trim(), formGroup, element, null);
341
+ }
342
+ if (expr.length > 5) {
343
+ throw "AppValidators : More than 5 '&&' expressions are not supported.";
344
+ }
345
+ }
346
+ }
347
+ if (isPartialClaimEmployment && !empModels) {
348
+ if (formGroup.controls['hidCsrFirstPass'].value == 'Y') {
349
+ formGroup.controls[element.name].setErrors(null);
350
+ }
351
+ else {
352
+ formGroup.controls[element.name].setErrors({ wcPartialClaimEmployment: true });
353
+ }
354
+ }
355
+ if (isRequired && !empModels) {
356
+ formGroup.controls[element.name].setErrors({ wcEmployerRequired: true });
357
+ }
358
+ }
359
+ }
360
+ else if (validationName === "wcDependentRequired") {
361
+ let dependentModels = formGroup.controls[element.name]?.value;
362
+ if (element.requiredIf) {
363
+ let expression = element.requiredIf;
364
+ let isRequired = false;
365
+ if (expression) {
366
+ let expr = expression;
367
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr, formGroup, element, null);
368
+ }
369
+ if (isRequired && !dependentModels) {
370
+ formGroup.controls[element.name].setErrors({ wcDependentRequired: true });
371
+ }
372
+ }
373
+ }
374
+ else if (validationName === "remunerationPaymentInfoRequired") {
375
+ let paymentComponentModels = formGroup.controls[element.name].value?.payFormElements;
376
+ if (paymentComponentModels != null && paymentComponentModels.length > 0) {
377
+ for (let i = 0; i < paymentComponentModels.length; i++) {
378
+ var model = paymentComponentModels[i];
379
+ if (model.amount && model.date && model.wageType) {
380
+ formGroup.controls[element.name].setErrors(null);
381
+ }
382
+ else {
383
+ formGroup.controls[element.name].setErrors({ remunerationPaymentInfoRequired: true });
384
+ }
385
+ }
386
+ }
387
+ else {
388
+ formGroup.controls[element.name].setErrors({ remunerationPaymentInfoRequired: true });
389
+ }
390
+ }
391
+ else if (validationName === "grossEarningsInfoRequired") {
392
+ let grossEarningsComponentModels = formGroup.controls[element.name].value?.payFormElements;
393
+ if (grossEarningsComponentModels != null && grossEarningsComponentModels.length > 0) {
394
+ for (let i = 0; i < grossEarningsComponentModels.length; i++) {
395
+ var grossEarningModel = grossEarningsComponentModels[i];
396
+ if (grossEarningModel.hoursWorked) {
397
+ formGroup.controls[element.name].setErrors(null);
398
+ }
399
+ else {
400
+ formGroup.controls[element.name].setErrors({ grossEarningsInfoRequired: true });
401
+ }
402
+ }
403
+ }
404
+ else {
405
+ formGroup.controls[element.name].setErrors({ grossEarningsInfoRequired: true });
406
+ }
407
+ }
408
+ else if (validationName === "wcEmployerPaymentInfoRequired") {
409
+ let employerPaymentInfoModels = formGroup.controls[element.name]?.value;
410
+ if (element.requiredIf) {
411
+ let expression = element.requiredIf;
412
+ let isRequired = false;
413
+ if (expression.includes('&&') && !expression.includes('||')) {
414
+ let expr = expression.split('&&');
415
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
416
+ && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
417
+ }
418
+ if (expression.includes('||') && !expression.includes('&&')) {
419
+ let expr = expression.split('||');
420
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
421
+ || AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
422
+ }
423
+ if (isRequired && (!employerPaymentInfoModels || employerPaymentInfoModels.length < 1)) {
424
+ formGroup.controls[element.name].setErrors({ wcEmployerPaymentInfoRequired: true });
425
+ }
426
+ }
427
+ }
428
+ return null;
429
+ };
430
+ return func;
431
+ }
432
+ static getOtherFormFieldsValues(fields, formGroup) {
433
+ let set = new Set();
434
+ fields.forEach(f => {
435
+ let value = formGroup.controls[f]?.value;
436
+ value && typeof (value) == 'object' ? set.add(value.value) : set.add(value);
437
+ });
438
+ return set;
439
+ }
440
+ // @dynamic
441
+ static createValidator(validationService, element) {
442
+ const func = (formGroup) => {
443
+ const control = formGroup.controls[element.name];
444
+ let fieldValue = control.value;
445
+ if (!fieldValue) {
446
+ return;
447
+ }
448
+ let serviceName = element.serviceName;
449
+ let serviceCallType = element.serviceCallType;
450
+ let serviceType = element.serviceType;
451
+ if (serviceCallType === 'GET') {
452
+ validationService
453
+ .get(`${serviceName}${fieldValue}`)
454
+ .subscribe(res => {
455
+ //console.log('res ', res);
456
+ });
457
+ if (serviceType === 'VALIDATE') {
458
+ }
459
+ }
460
+ else {
461
+ if (serviceType === 'VALIDATE') {
462
+ }
463
+ if (serviceType === 'UPDATE') {
464
+ }
465
+ }
466
+ return null;
467
+ };
468
+ return func;
469
+ }
470
+ // @dynamic
471
+ static setRequiredIfValidation(element, sharedData) {
472
+ const func = (formGroup) => {
473
+ //console.log('setRequiredIfValidation --',element);
474
+ // console.log('formGroup --',formGroup);
475
+ let expression = element.requiredIf;
476
+ if (element.customTag && element.customTag === 'Optional') {
477
+ return null;
478
+ }
479
+ let isRequired = false;
480
+ if (expression.includes('&&') && !expression.includes('||')) {
481
+ let expr = expression.split('&&');
482
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, sharedData)
483
+ && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, sharedData);
484
+ if (expr.length >= 3) {
485
+ isRequired = isRequired && AppValidators.calculateOperandValueForRequiredIf(expr[2].trim(), formGroup, element, sharedData);
486
+ }
487
+ if (expr.length >= 4) {
488
+ isRequired = isRequired && AppValidators.calculateOperandValueForRequiredIf(expr[3].trim(), formGroup, element, sharedData);
489
+ }
490
+ if (expr.length == 5) {
491
+ isRequired = isRequired && AppValidators.calculateOperandValueForRequiredIf(expr[4].trim(), formGroup, element, sharedData);
492
+ }
493
+ if (expr.length > 5) {
494
+ throw "AppValidators : More than 5 '&&' expressions are not supported.";
495
+ }
496
+ }
497
+ if (expression.includes('||') && !expression.includes('&&')) {
498
+ let expr = expression.split('||');
499
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, sharedData)
500
+ || AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, sharedData);
501
+ if (expr.length >= 3) {
502
+ isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[2].trim(), formGroup, element, sharedData);
503
+ }
504
+ if (expr.length >= 4) {
505
+ isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[3].trim(), formGroup, element, sharedData);
506
+ }
507
+ if (expr.length == 5) {
508
+ isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[4].trim(), formGroup, element, sharedData);
509
+ }
510
+ if (expr.length > 5) {
511
+ throw "AppValidators : More than 5 '||' expressions are not supported.";
512
+ }
513
+ }
514
+ if (!expression.includes('||') && !expression.includes('&&')) {
515
+ isRequired = AppValidators.calculateOperandValueForRequiredIf(expression.trim(), formGroup, element, sharedData);
516
+ }
517
+ if (isRequired) {
518
+ formGroup.controls[element.name].setErrors({ requiredIf: true });
519
+ return { requiredIf: true };
520
+ }
521
+ else {
522
+ formGroup.controls[element.name]?.setErrors(null);
523
+ return null;
524
+ }
525
+ };
526
+ return func;
527
+ }
528
+ static calculateOperandValueForRequiredIf(expression, formGroup, element, sharedData) {
529
+ var splitArray;
530
+ let isDoesNotEqual;
531
+ let isContains;
532
+ if (expression.includes('==')) {
533
+ splitArray = expression.split('==');
534
+ isDoesNotEqual = false;
535
+ }
536
+ else if (expression.includes('!=')) {
537
+ splitArray = expression.split('!=');
538
+ isDoesNotEqual = true;
539
+ }
540
+ else if (expression.includes('contains')) {
541
+ splitArray = expression.split('contains');
542
+ isContains = true;
543
+ }
544
+ let operand1 = splitArray[0];
545
+ let operand2 = splitArray[1];
546
+ operand1 = operand1.replace('{', '').replace('}', '').trim();
547
+ operand2 = operand2.replace('{', '').replace('}', '').trim();
548
+ const control1 = formGroup.controls[operand1];
549
+ var valueOfActualControl;
550
+ if (formGroup.controls[element.name]) {
551
+ valueOfActualControl = formGroup.controls[element.name].value;
552
+ valueOfActualControl = this.isNullOrUndefined(valueOfActualControl) ? valueOfActualControl : valueOfActualControl + '';
553
+ }
554
+ else {
555
+ sharedData.forEach(data => {
556
+ let strIntoObj = JSON.parse(data);
557
+ if (strIntoObj[element.name]) {
558
+ valueOfActualControl = strIntoObj[element.name];
559
+ }
560
+ });
561
+ }
562
+ var valueOfCnrtrlToCheck;
563
+ if (formGroup.controls[operand1] && !this.isNullOrUndefined(formGroup.controls[operand1].value) && typeof (formGroup.controls[operand1]).value === 'string') {
564
+ valueOfCnrtrlToCheck = formGroup.controls[operand1].value.trim();
565
+ }
566
+ if (formGroup.controls[operand1] && !this.isNullOrUndefined(formGroup.controls[operand1].value) && typeof (formGroup.controls[operand1]).value != 'string') {
567
+ if (formGroup.controls[operand1].value['value']) {
568
+ valueOfCnrtrlToCheck = formGroup.controls[operand1].value['value'].trim();
569
+ }
570
+ else if (formGroup.controls[operand1].value[0]) {
571
+ valueOfCnrtrlToCheck = formGroup.controls[operand1].value;
572
+ }
573
+ }
574
+ if (!valueOfCnrtrlToCheck) {
575
+ return null;
576
+ }
577
+ if (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck)) {
578
+ valueOfCnrtrlToCheck = valueOfCnrtrlToCheck.trim();
579
+ }
580
+ if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck && !valueOfActualControl?.toString().trim()) {
581
+ return true;
582
+ }
583
+ if (operand2 === 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck && valueOfActualControl?.toString().trim()) {
584
+ return true;
585
+ }
586
+ operand2 = operand2.replace(/\'/g, ""); //null
587
+ if (isContains && (valueOfCnrtrlToCheck && Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && this.isNullOrUndefined(formGroup.controls[element?.name]?.value)) {
588
+ return true;
589
+ }
590
+ if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && this.isNullOrUndefined(formGroup.controls[element?.name]?.value)) {
591
+ return true;
592
+ }
593
+ if (operand2 != 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck === operand2 && !valueOfActualControl?.toString().trim() && formGroup.controls[element?.name]) {
594
+ return true;
595
+ }
596
+ if (operand2 != 'null' && isDoesNotEqual && valueOfCnrtrlToCheck != operand2 && !valueOfActualControl?.toString().trim()) {
597
+ return true;
598
+ }
599
+ return false;
600
+ }
601
+ static isNullOrUndefined(value) {
602
+ return value == null || value == undefined;
603
+ }
604
+ // @dynamic
605
+ static setEqualsValidation(element, sharedData) {
606
+ const func = (formGroup) => {
607
+ if (!formGroup.controls[element.name].value) {
608
+ return null;
609
+ }
610
+ };
611
+ return func;
612
+ }
613
+ // @dynamic
614
+ static setPasswordValidation(element, sharedData) {
615
+ const func = (formGroup) => {
616
+ if (!formGroup.controls[element.name].value) {
617
+ return null;
618
+ }
619
+ let expression = null;
620
+ let validatorList = element.validators;
621
+ var splitArray;
622
+ validatorList.forEach(validator => {
623
+ if (validator.type === 'expression') {
624
+ expression = validator.expression;
625
+ }
626
+ });
627
+ let index = expression.indexOf('===');
628
+ let isEqualOperand;
629
+ if (index === -1) {
630
+ splitArray = expression.split('>');
631
+ isEqualOperand = false;
632
+ }
633
+ else {
634
+ splitArray = expression.split('===');
635
+ isEqualOperand = true;
636
+ }
637
+ let operand1 = splitArray[0];
638
+ let operand2 = splitArray[1];
639
+ // console.log('setDateValidation sharedData', sharedData);
640
+ operand1 = operand1.replace('{', '').replace('}', '');
641
+ operand2 = operand2.replace('{', '').replace('}', '');
642
+ //console.log('control.parent', control.parent)
643
+ let control1 = formGroup.controls[operand1];
644
+ let control2 = formGroup.controls[operand2];
645
+ if (control1.value != control2.value) {
646
+ formGroup.controls[element.name].setErrors({ passwordComparision: true });
647
+ return { passwordComparision: true };
648
+ }
649
+ };
650
+ return func;
651
+ }
652
+ // @dynamic
653
+ static setDateValidation(element, sharedData) {
654
+ const func = (formGroup) => {
655
+ if (!formGroup.controls[element.name].value) {
656
+ return null;
657
+ }
658
+ let expression = null;
659
+ let validatorList = element.validators;
660
+ for (let validator of validatorList) {
661
+ if (validator.type === 'expression') {
662
+ expression = validator.expression;
663
+ let operator = '';
664
+ if (expression.includes('>=') || expression.includes('<=')) {
665
+ operator = expression.includes('>=') ? '>=' : '<=';
666
+ }
667
+ else {
668
+ operator = expression.includes('>') ? '>' : '<';
669
+ }
670
+ let splitArray = expression.split(operator).map(str => str.trim());
671
+ let operand1 = splitArray[0];
672
+ let operand2 = splitArray[1];
673
+ operand1 = operand1.replace('{', '').replace('}', '');
674
+ operand2 = operand2.replace('{', '').replace('}', '');
675
+ let control1 = formGroup.controls[operand1];
676
+ let control2 = formGroup.controls[operand2];
677
+ let date1 = null;
678
+ let date2 = null;
679
+ if (control1) {
680
+ date1 = new Date(control1.value);
681
+ }
682
+ else {
683
+ sharedData.forEach((data) => {
684
+ let strIntoObj = JSON.parse(data);
685
+ if (strIntoObj[operand1]) {
686
+ date1 = new Date(strIntoObj[operand1]);
687
+ }
688
+ });
689
+ }
690
+ if (control2) {
691
+ date2 = new Date(control2.value);
692
+ }
693
+ else {
694
+ sharedData.forEach((data) => {
695
+ let strIntoObj = JSON.parse(data);
696
+ if (strIntoObj[operand2]) {
697
+ date2 = new Date(strIntoObj[operand2]);
698
+ }
699
+ });
700
+ }
701
+ if (date1 && date2) {
702
+ if (operator === '>=' && date1 >= date2) {
703
+ return null;
704
+ }
705
+ else if (operator === '<=' && date1 <= date2) {
706
+ return null;
707
+ }
708
+ else if (operator === '>' && date1 > date2) {
709
+ return null;
710
+ }
711
+ else if (operator === '<' && date1 < date2) {
712
+ return null;
713
+ }
714
+ else {
715
+ formGroup.controls[element.name].setErrors({ dateComparision: true });
716
+ return { dateComparision: true };
717
+ }
718
+ }
719
+ }
720
+ }
721
+ return null;
722
+ };
723
+ return func;
724
+ }
725
+ static isEqual(value) {
726
+ const func = (control) => {
727
+ if (value != control.value) {
728
+ return { notEqual: true };
729
+ }
730
+ return null;
731
+ };
732
+ return func;
733
+ }
734
+ static calculateOperandValue(strExp, formGroup) {
735
+ var splitArray;
736
+ let isDoesNotEqual;
737
+ let isContains;
738
+ if (strExp.includes('==')) {
739
+ splitArray = strExp.split('==');
740
+ isDoesNotEqual = false;
741
+ }
742
+ else if (strExp.includes('!=')) {
743
+ splitArray = strExp.split('!=');
744
+ isDoesNotEqual = true;
745
+ }
746
+ else if (strExp.includes('contains')) {
747
+ splitArray = strExp.split('contains');
748
+ isContains = true;
749
+ }
750
+ let operand1 = splitArray[0];
751
+ let operand2 = splitArray[1];
752
+ operand1 = operand1.replace('{', '').replace('}', '').trim(); //claimantPriorPay102
753
+ operand2 = operand2.replace('{', '').replace('}', '').trim(); //null
754
+ var valueOfCnrtrlToCheck;
755
+ //console.log('operand1',operand1);
756
+ if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value === 'string') {
757
+ valueOfCnrtrlToCheck = formGroup.controls[operand1].value.trim();
758
+ }
759
+ if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value != 'string') {
760
+ //console.log('operanformGroup.controls[operand1].value[value]',formGroup.controls[operand1].value[0]);
761
+ if (formGroup.controls[operand1].value['value']) {
762
+ valueOfCnrtrlToCheck = formGroup.controls[operand1].value['value'].trim();
763
+ }
764
+ else if (formGroup.controls[operand1].value[0]) {
765
+ valueOfCnrtrlToCheck = formGroup.controls[operand1].value;
766
+ }
767
+ }
768
+ if (operand2 === 'null' && isDoesNotEqual && valueOfCnrtrlToCheck) {
769
+ return true;
770
+ }
771
+ if (operand2 === 'null' && !isDoesNotEqual && !valueOfCnrtrlToCheck) {
772
+ return true;
773
+ }
774
+ operand2 = operand2.replace('\'', '').replace('\'', '').trim(); //null
775
+ if (isContains && (valueOfCnrtrlToCheck && Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2))) {
776
+ return true;
777
+ }
778
+ if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2))) {
779
+ return true;
780
+ }
781
+ if (operand2 != 'null' && !isDoesNotEqual && (valueOfCnrtrlToCheck && valueOfCnrtrlToCheck === operand2)) {
782
+ return true;
783
+ }
784
+ if (operand2 != 'null' && isDoesNotEqual && (valueOfCnrtrlToCheck && valueOfCnrtrlToCheck.trim() != operand2)) {
785
+ return true;
786
+ }
787
+ return false;
788
+ }
789
+ }
790
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxPQUFPLGFBQWE7SUFJdEIsV0FBVztJQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsVUFBMkIsRUFBRSxTQUFpQjtRQUNoRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxjQUFjLEtBQUssMEJBQTBCLEVBQUU7Z0JBQy9DLElBQUksR0FBNkIsQ0FBQztnQkFDbEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtvQkFDN0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsSUFBSSxTQUF5QyxDQUFDO3dCQUM5QyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUI7Ozs7OzsyQkFNRzt3QkFDSCxLQUFLLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTs0QkFDekIsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLEdBQUc7bUNBQ3JELENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsRUFBRTtnQ0FDN0YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVB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QUFJLFVBQVUsSUFBSSxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUN4SCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxVQUFVLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUN6SCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsb0JBQW9CLElBQUksb0JBQW9CLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDdEcsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxjQUFjLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRTtZQUMzRyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWRkcmVzc0NvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FkZHJlc3NDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IEJhbmtEZXRhaWxzQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQmFua0RldGFpbHNDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcGxveWVyRGV0YWlsc01vZGVsJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgRWxlbWVudHNNb2RlbCwgVmFsaWRhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvRWxlbWVudHNNb2RlbCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVlc3Rpb25uYWlyZS92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbXBsb3llckluZm9Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9FbXBsb3llckRldGFpbFNlYXJjaFJlc3VsdCc7XHJcbmltcG9ydCB7IERlcGVuZGVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RlcGVuZGVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEVtcGxveWVyUGF5SW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0VtcGxveWVyUGF5SW5mb01vZGVsJztcclxuaW1wb3J0IHsgUGF5bWVudENvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1BheW1lbnRDb21wb25lbnRNb2RlbCc7XHJcbmltcG9ydCB7IEF1dG9jb2Rlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQXV0b2NvZGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBHcm9zc0Vhcm5pbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvR3Jvc3NFYXJuaW5nc01vZGVsJztcclxuZXhwb3J0IGNsYXNzIEFwcFZhbGlkYXRvcnMge1xyXG5cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBjdXN0b21WYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgdmFsaWRhdGlvbjogVmFsaWRhdGlvbk1vZGVsLCBzdGF0ZU5hbWU6IHN0cmluZywpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRpb25OYW1lID0gdmFsaWRhdGlvbi5jdXN0b21WYWxpZGF0aW9uTmFtZTtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFzZVBlcmlvZEVtcGxWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWw6IENsYWltQXBwRW1wUmVzcG9uc2VNb2RlbDtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUgPT09ICdwcmV2d29yaycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicEVtcExpc3Q6IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWxbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnBFbXBMaXN0ID0gdmFsLmJwRW1wTGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAoZm9ybUdyb3VwLmNvbnRyb2xzWydwYXN0ZW1wJ10gLy8mJiBmb3JtR3JvdXAuY29udHJvbHNbJ3dvcmtmb3JlbXAnXS52YWx1ZSA9PT0gJ1knXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicEVtcExpc3QubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYnBFbXBsckxlbmd0aEZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBicEVtcGxyTGVuZ3RoRmxhZzogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYnBFbXAgb2YgYnBFbXBMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnBFbXAuYnBFbXBsb3llckZsYWcgPT09ICcxJyAmJiBicEVtcC5lbXBEZWxldGVkID09PSAnTidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYnBFbXAuc3RhcnREYXRlID09PSBudWxsICYmIGJwRW1wLnN0YXJ0RGF0ZUZlZCA9PT0gbnVsbCAmJiBicEVtcC5zdGFydERhdGVNaWwgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYnBFbXBsckZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgYnBFbXBsckZsYWc6IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInNpbXBsZUNoZWNrQm94VmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHNpbXBsZUNoZWNrQm94VmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJjcGF0Y2h2YWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgY3BhdGNodmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ1cGxvYWR2YWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUgfHwgKEFycmF5LmlzQXJyYXkoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpICYmICFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHVwbG9hZHZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYWRkcmVzc1ZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFkZHJlc3NDb21wVmFsdWU6IEFkZHJlc3NDb21wb25lbnRNb2RlbDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250b2xOYW1lOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXS5yZXBsYWNlKC8nL2csICcnKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdZJyAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gJ04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVycm9ycyA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLmVycm9ycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudEVycm9yc1snYWRkcmVzc1ZhbGlkYXRpb25GbGFnJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdXJyZW50RXJyb3JzKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhjdXJyZW50RXJyb3JzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzQ29tcFZhbHVlID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzQ29tcFZhbHVlLmNpdHkgfHwgIWFkZHJlc3NDb21wVmFsdWUuc3RhdGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhZGRyZXNzQ29tcFZhbHVlWyd6aXAnXSB8fCAhYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHJ5IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWRkcmVzc0NvbXBWYWx1ZVsnc3RyZWV0QWRkcmVzcyddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoYWRkcmVzc0NvbXBWYWx1ZVsnbmVpZ2hib3JTdGF0ZUNoZWNrUmVxdWlyZWQnXT09PSdZJyAmJiAhYWRkcmVzc0NvbXBWYWx1ZVsnbmVpZ2hib3VyRmxhZyddKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubmFtZSA9PT0gJ21haWxBZGRyZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZSAmJiBhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdNUycgJiYgc3RhdGVOYW1lID09PSAnTVMnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlID09PSAnQ1QnICYmIHN0YXRlTmFtZSA9PT0gJ0NUJykpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvdW50eVJlcXVpcmVkID09PSB0cnVlICYmICFhZGRyZXNzQ29tcFZhbHVlWydjb3VudHknXSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01FJyAmJiBzdGF0ZU5hbWUgPT09ICdNRScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ3Rvd24nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRvbE5hbWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF0ucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXS5yZXBsYWNlKC8nL2csICcnKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICdZJyAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gJ04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFcnJvcnMgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5lcnJvcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY3VycmVudEVycm9yc1snYWRkcmVzc1ZhbGlkYXRpb25GbGFnJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3VycmVudEVycm9ycykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoY3VycmVudEVycm9ycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImJhbmtEZXRhaWxzVmFsaWRhdGlvbkZsYWdcIikge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBiYW5rRGV0YWlsc0NvbXBvbmVudFZhbDogQmFua0RldGFpbHNDb21wb25lbnRNb2RlbDtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250b2xOYW1lID0gY29udG9sTmFtZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFua0RldGFpbHNDb21wb25lbnRWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5hY2NvdW50TnVtYmVyIHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5hY2NvdW50VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLm5hbWVPbkFjY291bnQgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJlRW50ZXJBY2NvdW50TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhYmFua0RldGFpbHNDb21wb25lbnRWYWwucm91dGluZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiam9iVGlsZVZhbGlkYXRpb25GbGFnXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBqb2JUaXRsZUZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYXRMZWFzdE9uZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGRzOiBzdHJpbmdbXSA9IHZhbGlkYXRpb24uZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkc1swXS50cmltKCldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2Vjb25kRm9ybUNPbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZmllbGRzWzFdLnRyaW0oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc051bGxPclVuZGVmaW5lZChmaXJzdEZvcm1Db250cm9sLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoc2Vjb25kRm9ybUNPbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBhdExlYXN0T25lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZEZvcm1DT250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3JtQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZmlyc3RGb3JtQ29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3JtQ29udHJvbC5zZXRWYWx1ZSgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoc2Vjb25kRm9ybUNPbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZEZvcm1DT250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmaXJzdEZvcm1Db250cm9sLnZhbHVlID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2Vjb25kRm9ybUNPbnRyb2wudmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJpc0dyZWF0ZXJEYXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmlzb24gd2l0aCByZWZlcmVuY2VEYXRlIHdlIGNhbiBhZGQgY29udHJvbHMgbGlrZSBJZiBCbG9jayAyNTMgU2V0IFZhbHVlcywgYXBwZWFsQ29uc2lkZXJlZExhdGVEYXRlIHVzZWQgaW4gUUVfRklMRV9BUFBFQUwgZm9yIE1FXHJcbiAgICAgICAgICAgICAgICBpZihmb3JtR3JvdXAuY29udHJvbHNbJ2FwcGVhbENvbnNpZGVyZWRMYXRlRGF0ZSddLnZhbHVlICE9IG51bGwgJiYgZm9ybUdyb3VwLmNvbnRyb2xzWydjdXJyZW50RGF0ZSddLnZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBwZWFsTGF0ZURhdGUgPSBmb3JtR3JvdXAuY29udHJvbHNbJ2FwcGVhbENvbnNpZGVyZWRMYXRlRGF0ZSddLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudERhdGUgPSBmb3JtR3JvdXAuY29udHJvbHNbJ2N1cnJlbnREYXRlJ10udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5ldyBEYXRlKGN1cnJlbnREYXRlLnJlcGxhY2UoIC8oXFxkezJ9KS0oXFxkezJ9KS0oXFxkezR9KS8sIFwiJDIvJDEvJDNcIikpID49IG5ldyBEYXRlKGFwcGVhbExhdGVEYXRlLnJlcGxhY2UoIC8oXFxkezJ9KS0oXFxkezJ9KS0oXFxkezR9KS8sIFwiJDIvJDEvJDNcIikpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdsYXRlQXBwZWFsJykuc2V0VmFsdWUoJ1knLCB7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJub3RFcXVhbHNcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHM6IHN0cmluZ1tdID0gdmFsaWRhdGlvbi5leHByZXNzaW9uLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSBjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUgPSBmb3JtR3JvdXAuY29udHJvbHNbZmllbGQudHJpbSgpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG90aGVyRmllbGRWYWx1ZSA9IG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgJiYgb3RoZXJGaWVsZFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHZhbC52YWx1ZSAmJiBvdGhlckZpZWxkVmFsdWUudmFsdWUgJiYgdmFsLnZhbHVlID09PSBvdGhlckZpZWxkVmFsdWUudmFsdWUpIHx8IHZhbCA9PT0gb3RoZXJGaWVsZFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS5zZXRFcnJvcnMoeyBub3RFcXVhbHM6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGb3JtQ29udHJvbC5lcnJvcnMgJiYgdmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgIT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgIT0gb3RoZXJGaWVsZFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXM6IFNldDxhbnk+ID0gdGhpcy5nZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSA9PSBmaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEN1c3RvbSBWYWxpZGF0aW9uIGZvciB3ZWVrbGllcyBQYWdlIHNpbmNlIHRoZXJlIGFyZSBlbXB0eSBzdHJpbmdzIHBhc3NlZFxyXG4gICAgICAgICAgICAvLyB3aGlsZSBsb2FkaW5nIHRoZSBtb2RlbCB0byBwcmV2ZW50IG51bGwgcG9pbnRlciBleGNlcHRpb24gaW4gRFVBIFxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0NvbW1vblZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQubmFtZT09PSd3b3JrUGVyZm9ybWVkJyB8fCBlbGVtZW50Lm5hbWU9PT0nYXZhaWxhYmxlJyl7ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5yZXF1aXJlZElmKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihleHByZXNzaW9uKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb24udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUgPT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyB3Y1JlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihlbGVtZW50Lm5hbWUhPSd3b3JrUGVyZm9ybWVkJyB8fCBlbGVtZW50Lm5hbWUgIT0nYXZhaWxhYmxlJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wudmFsdWUgPT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldEVycm9ycyh7IHdjUmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIndjRW1wbG95ZXJWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbXBNb2RlbHM6IEVtcGxveWVySW5mb01vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW1wTW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vbkNvbXBsZXRlZEVtcHMgPSBlbXBNb2RlbHMuZmlsdGVyKGUgPT4gIWUuaXNQYXJ0VGltZUVtcGxveWVyRWRpdGVkICYmIGUuaXNQYXJ0VGltZUVtcGxveWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9uQ29tcGxldGVkRW1wcyAmJiBub25Db21wbGV0ZWRFbXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgd2NFbXBsb3llclZhbGlkYXRpb246IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gXCJoaWRQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50RmxhZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBleHByLmZpbmRJbmRleChlID0+IGUuaW5jbHVkZXModGFyZ2V0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BhcnRpYWxDbGFpbUVtcGxveW1lbnQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcltpbmRleF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ID09IGZhbHNlKSB8fCAoaW5kZXggPCAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PSA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJyYmJyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ICYmICFlbXBNb2RlbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1snaGlkQ3NyRmlyc3RQYXNzJ10udmFsdWUgPT0gJ1knKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y1BhcnRpYWxDbGFpbUVtcGxveW1lbnQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhZW1wTW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJSZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0RlcGVuZGVudFJlcXVpcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXBlbmRlbnRNb2RlbHM6IERlcGVuZGVudE1vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nID0gZXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhZGVwZW5kZW50TW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRGVwZW5kZW50UmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwicmVtdW5lcmF0aW9uUGF5bWVudEluZm9SZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGF5bWVudENvbXBvbmVudE1vZGVsczogUGF5bWVudENvbXBvbmVudE1vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZT8ucGF5Rm9ybUVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBheW1lbnRDb21wb25lbnRNb2RlbHMgIT0gbnVsbCAmJiBwYXltZW50Q29tcG9uZW50TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBheW1lbnRDb21wb25lbnRNb2RlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gcGF5bWVudENvbXBvbmVudE1vZGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsLmFtb3VudCAmJiBtb2RlbC5kYXRlICYmIG1vZGVsLndhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyByZW11bmVyYXRpb25QYXltZW50SW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHJlbXVuZXJhdGlvblBheW1lbnRJbmZvUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJncm9zc0Vhcm5pbmdzSW5mb1JlcXVpcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBncm9zc0Vhcm5pbmdzQ29tcG9uZW50TW9kZWxzOiBHcm9zc0Vhcm5pbmdzTW9kZWxbXSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlPy5wYXlGb3JtRWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVscyAhPSBudWxsICYmIGdyb3NzRWFybmluZ3NDb21wb25lbnRNb2RlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3Jvc3NFYXJuaW5nTW9kZWwgPSBncm9zc0Vhcm5pbmdzQ29tcG9uZW50TW9kZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3Jvc3NFYXJuaW5nTW9kZWwuaG91cnNXb3JrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGdyb3NzRWFybmluZ3NJbmZvUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgZ3Jvc3NFYXJuaW5nc0luZm9SZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIndjRW1wbG95ZXJQYXltZW50SW5mb1JlcXVpcmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbXBsb3llclBheW1lbnRJbmZvTW9kZWxzOiBFbXBsb3llclBheUluZm9Nb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlcXVpcmVkICYmICghZW1wbG95ZXJQYXltZW50SW5mb01vZGVscyB8fCBlbXBsb3llclBheW1lbnRJbmZvTW9kZWxzLmxlbmd0aCA8IDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJQYXltZW50SW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzOiBzdHJpbmdbXSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogU2V0PGFueT4ge1xyXG4gICAgICAgIGxldCBzZXQ6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xyXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGZvcm1Hcm91cC5jb250cm9sc1tmXT8udmFsdWU7XHJcbiAgICAgICAgICAgIHZhbHVlICYmIHR5cGVvZiAodmFsdWUpID09ICdvYmplY3QnID8gc2V0LmFkZCh2YWx1ZS52YWx1ZSkgOiBzZXQuYWRkKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc2V0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIGNyZWF0ZVZhbGlkYXRvcih2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsIGVsZW1lbnQ6IGFueSk6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghZmllbGRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlTmFtZTogc3RyaW5nID0gZWxlbWVudC5zZXJ2aWNlTmFtZTtcclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VDYWxsVHlwZSA9IGVsZW1lbnQuc2VydmljZUNhbGxUeXBlO1xyXG4gICAgICAgICAgICBsZXQgc2VydmljZVR5cGUgPSBlbGVtZW50LnNlcnZpY2VUeXBlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlcnZpY2VDYWxsVHlwZSA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldChgJHtzZXJ2aWNlTmFtZX0ke2ZpZWxkVmFsdWV9YClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygncmVzICcsIHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1VQREFURScpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UmVxdWlyZWRJZlZhbGlkYXRpb24oZWxlbWVudDogRWxlbWVudHNNb2RlbCwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3NldFJlcXVpcmVkSWZWYWxpZGF0aW9uIC0tJyxlbGVtZW50KTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Zvcm1Hcm91cCAtLScsZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmN1c3RvbVRhZyAmJiBlbGVtZW50LmN1c3RvbVRhZyA9PT0gJ09wdGlvbmFsJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCcmJicpO1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PSA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJyYmJyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJ3x8Jyk7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PSA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJ3x8JyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKSB7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb24udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgcmVxdWlyZWRJZjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlcXVpcmVkSWY6IHRydWUgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdPy5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwcmVzc2lvbjogc3RyaW5nLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGVsZW1lbnQ6IEVsZW1lbnRzTW9kZWwsIHNoYXJlZERhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgIGxldCBpc0RvZXNOb3RFcXVhbDogYm9vbGVhbjtcclxuICAgICAgICBsZXQgaXNDb250YWluczogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJz09JykpIHtcclxuICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCchPScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCchPScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCdjb250YWlucycpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG5cclxuICAgICAgICBjb25zdCBjb250cm9sMSA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV07XHJcbiAgICAgICAgdmFyIHZhbHVlT2ZBY3R1YWxDb250cm9sO1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQWN0dWFsQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICB2YWx1ZU9mQWN0dWFsQ29udHJvbCA9IHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodmFsdWVPZkFjdHVhbENvbnRyb2wpID8gdmFsdWVPZkFjdHVhbENvbnRyb2wgOiB2YWx1ZU9mQWN0dWFsQ29udHJvbCArICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqOiBbXSA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSBzdHJJbnRvT2JqW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG5cclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSAmJiAhdGhpcy5pc051bGxPclVuZGVmaW5lZChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlKSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSkgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddLnRyaW0oKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykpIHtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSB2YWx1ZU9mQ25ydHJsVG9DaGVjay50cmltKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiBpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhdmFsdWVPZkFjdHVhbENvbnRyb2w/LnRvU3RyaW5nKCkudHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZBY3R1YWxDb250cm9sPy50b1N0cmluZygpLnRyaW0oKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgvXFwnL2csIFwiXCIpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkgJiYgdGhpcy5pc051bGxPclVuZGVmaW5lZChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudD8ubmFtZV0/LnZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0NvbnRhaW5zICYmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSAmJiB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyICE9ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbD8udG9TdHJpbmcoKS50cmltKCkgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQ/Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgIT0gb3BlcmFuZDIgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sPy50b1N0cmluZygpLnRyaW0oKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldEVxdWFsc1ZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UGFzc3dvcmRWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHZhbGlkYXRvci5leHByZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBleHByZXNzaW9uLmluZGV4T2YoJz09PScpO1xyXG4gICAgICAgICAgICBsZXQgaXNFcXVhbE9wZXJhbmQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc+Jyk7XHJcbiAgICAgICAgICAgICAgICBpc0VxdWFsT3BlcmFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09PScpO1xyXG4gICAgICAgICAgICAgICAgaXNFcXVhbE9wZXJhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdzZXREYXRlVmFsaWRhdGlvbiBzaGFyZWREYXRhJywgc2hhcmVkRGF0YSk7XHJcblxyXG5cclxuICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb250cm9sLnBhcmVudCcsIGNvbnRyb2wucGFyZW50KVxyXG4gICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbDEudmFsdWUgIT0gY29udHJvbDIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHBhc3N3b3JkQ29tcGFyaXNpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYXNzd29yZENvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldERhdGVWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdmFsaWRhdG9yLmV4cHJlc3Npb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpIHx8IGV4cHJlc3Npb24uaW5jbHVkZXMoJzw9JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpID8gJz49JyA6ICc8PSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+JykgPyAnPicgOiAnPCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheTogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KG9wZXJhdG9yKS5tYXAoc3RyID0+IHN0ci50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sMiA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMjogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShjb250cm9sMS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJJbnRvT2JqW29wZXJhbmQxXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoc3RySW50b09ialtvcGVyYW5kMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoY29udHJvbDIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtvcGVyYW5kMl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKHN0ckludG9PYmpbb3BlcmFuZDJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZTEgJiYgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnPj0nICYmIGRhdGUxID49IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzw9JyAmJiBkYXRlMSA8PSBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc+JyAmJiBkYXRlMSA+IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzwnICYmIGRhdGUxIDwgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRXF1YWwodmFsdWUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5vdEVxdWFsOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWUoc3RyRXhwOiBzdHJpbmcsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcbiAgICAgICAgaWYgKHN0ckV4cC5pbmNsdWRlcygnPT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RyRXhwLmluY2x1ZGVzKCchPScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJyE9Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0ckV4cC5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7IC8vY2xhaW1hbnRQcmlvclBheTEwMlxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTsgLy9udWxsXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ29wZXJhbmQxJyxvcGVyYW5kMSk7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcGVyYW5mb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlW3ZhbHVlXScsZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSk7XHJcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgIXZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKSAhPSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG59Il19