@reusa/ngx-reusa-app-lib 0.0.1320 → 0.0.1322

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 (153) hide show
  1. package/README.md +46 -46
  2. package/esm2022/lib/annimations/app-animations.mjs +1 -1
  3. package/esm2022/lib/components/add-employer/add-employer.component.mjs +755 -763
  4. package/esm2022/lib/components/add-participant/add-participant.component.mjs +24 -29
  5. package/esm2022/lib/components/add-payment/add-payment.component.mjs +31 -45
  6. package/esm2022/lib/components/address/address.component.mjs +46 -97
  7. package/esm2022/lib/components/bank-details/bank-details.component.mjs +75 -139
  8. package/esm2022/lib/components/captcha/captcha.component.mjs +6 -6
  9. package/esm2022/lib/components/card/card.component.mjs +1 -1
  10. package/esm2022/lib/components/contact-us/contact-us.component.mjs +28 -42
  11. package/esm2022/lib/components/content/content.component.mjs +1 -1
  12. package/esm2022/lib/components/email-update/email-update.component.mjs +62 -119
  13. package/esm2022/lib/components/employer-grid/employer-grid.component.mjs +84 -165
  14. package/esm2022/lib/components/error/error.component.mjs +1 -1
  15. package/esm2022/lib/components/file-download/file-download.component.mjs +1 -1
  16. package/esm2022/lib/components/file-uploader/file-uploader.component.mjs +1 -1
  17. package/esm2022/lib/components/footer/footer.component.mjs +11 -23
  18. package/esm2022/lib/components/header/header.component.mjs +109 -163
  19. package/esm2022/lib/components/help/help.component.mjs +1 -1
  20. package/esm2022/lib/components/idle-detector/idle-detector.component.mjs +18 -29
  21. package/esm2022/lib/components/info/info.component.mjs +1 -1
  22. package/esm2022/lib/components/job-search-result-page/job-search-result-page.component.mjs +16 -22
  23. package/esm2022/lib/components/job-title/job-title.component.mjs +16 -20
  24. package/esm2022/lib/components/legal-disclaimar/legal-disclaimar.component.mjs +208 -389
  25. package/esm2022/lib/components/lexis-nexis/lexis-nexis.component.mjs +21 -83
  26. package/esm2022/lib/components/maintenance-detector/maintenance-detector.component.mjs +1 -1
  27. package/esm2022/lib/components/mask/mask.component.mjs +1 -1
  28. package/esm2022/lib/components/menu/menu.component.mjs +25 -63
  29. package/esm2022/lib/components/mfa/mfa.component.mjs +98 -155
  30. package/esm2022/lib/components/mfa2/mfa2.component.mjs +30 -54
  31. package/esm2022/lib/components/money-expect/money-expect.component.mjs +23 -31
  32. package/esm2022/lib/components/msg/msg.component.mjs +1 -1
  33. package/esm2022/lib/components/news/news.component.mjs +1 -1
  34. package/esm2022/lib/components/overlay-info/overlay-info.component.mjs +1 -1
  35. package/esm2022/lib/components/page/page.component.mjs +1 -1
  36. package/esm2022/lib/components/profile/profile.component.mjs +14 -34
  37. package/esm2022/lib/components/profile-redirect/profile-redirect.component.mjs +10 -17
  38. package/esm2022/lib/components/questionnaire/FbConstants.mjs +1 -1
  39. package/esm2022/lib/components/questionnaire/common-success/common-success.page.mjs +27 -80
  40. package/esm2022/lib/components/questionnaire/dynamic-form-panel.component.mjs +8 -29
  41. package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +119 -172
  42. package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +41 -122
  43. package/esm2022/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.mjs +7 -7
  44. package/esm2022/lib/components/questionnaire/question-base.mjs +1 -1
  45. package/esm2022/lib/components/questionnaire/question.service.mjs +1 -1
  46. package/esm2022/lib/components/read-more/read-more.component.mjs +6 -6
  47. package/esm2022/lib/components/search-employer/search-employer.component.mjs +7 -10
  48. package/esm2022/lib/components/security-question/security-question.component.mjs +9 -19
  49. package/esm2022/lib/components/select/select.component.mjs +5 -10
  50. package/esm2022/lib/components/ssn/ssn.component.mjs +1 -1
  51. package/esm2022/lib/components/ssn-reverify/ssn-reverify.component.mjs +52 -72
  52. package/esm2022/lib/components/test/test.component.mjs +1 -1
  53. package/esm2022/lib/components/user-login/user-login.component.mjs +82 -116
  54. package/esm2022/lib/components/weekly-cert-employer/weekly-cert-employer.component.mjs +174 -170
  55. package/esm2022/lib/directives/auto-focus/auto-focus.directive.mjs +1 -1
  56. package/esm2022/lib/directives/caps-lock.directive.mjs +1 -1
  57. package/esm2022/lib/directives/required-roles/required-roles.directive.mjs +1 -1
  58. package/esm2022/lib/enums/EmailStatusEnum.mjs +1 -1
  59. package/esm2022/lib/interceptors/error-interceptor/http-error-interceptor.mjs +1 -1
  60. package/esm2022/lib/models/ErrorModel.mjs +1 -1
  61. package/esm2022/lib/models/FileModel.mjs +1 -1
  62. package/esm2022/lib/models/NotificationModel.mjs +1 -1
  63. package/esm2022/lib/models/OtpAuthModel.mjs +1 -1
  64. package/esm2022/lib/models/TrendModel.mjs +1 -1
  65. package/esm2022/lib/models/UserDetailsModel.mjs +1 -1
  66. package/esm2022/lib/models/UserModel.mjs +1 -1
  67. package/esm2022/lib/models/claimant/ClaimantModel.mjs +1 -1
  68. package/esm2022/lib/models/claimant/JobResultsData.mjs +1 -1
  69. package/esm2022/lib/models/claimant/MatchingJobs.mjs +1 -1
  70. package/esm2022/lib/models/claimant/ResetPasswordModel.mjs +1 -1
  71. package/esm2022/lib/models/questionnaire/ComboModel.mjs +1 -480
  72. package/esm2022/lib/models/questionnaire/KeyValueModel.mjs +1 -1
  73. package/esm2022/lib/ngx-reusa-app-lib.component.mjs +5 -5
  74. package/esm2022/lib/ngx-reusa-app-lib.service.mjs +1 -1
  75. package/esm2022/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +1 -1
  76. package/esm2022/lib/pages/common/change-password/change-password.page.mjs +1 -1
  77. package/esm2022/lib/pages/common/landing2/landing2.component.mjs +1 -1
  78. package/esm2022/lib/pages/common/login/login.component.mjs +2 -7
  79. package/esm2022/lib/pages/common/not-found/not-found.page.mjs +1 -1
  80. package/esm2022/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +1 -1
  81. package/esm2022/lib/pages/common/security-policy/security-policy.page.mjs +1 -1
  82. package/esm2022/lib/pages/common/unauthorized/unauthorized.page.mjs +1 -1
  83. package/esm2022/lib/pages/popovers/language/language.page.mjs +1 -2
  84. package/esm2022/lib/pages/popovers/my-notifications/my-notifications.page.mjs +1 -1
  85. package/esm2022/lib/pages/popovers/my-profile/my-profile.page.mjs +1 -1
  86. package/esm2022/lib/pages/popovers/user-search/user-search.component.mjs +1 -1
  87. package/esm2022/lib/pipes/filter.pipe.mjs +1 -1
  88. package/esm2022/lib/pipes/mask/mask.email.pipe.mjs +1 -1
  89. package/esm2022/lib/pipes/proper-case/proper-case.pipe.mjs +1 -1
  90. package/esm2022/lib/pipes/translate/dynamic-translate.pipe.mjs +2 -2
  91. package/esm2022/lib/pipes/trust-html/trust-html.pipe.mjs +1 -1
  92. package/esm2022/lib/services/base-service.mjs +1 -1
  93. package/esm2022/lib/services/captcha/captcha.service.mjs +1 -1
  94. package/esm2022/lib/services/chatbot/script.const.mjs +1 -1
  95. package/esm2022/lib/services/claimant/claimant.service.mjs +1 -1
  96. package/esm2022/lib/services/dms-service/dms.service.mjs +1 -1
  97. package/esm2022/lib/services/fpjs/fingerprint.service.mjs +1 -1
  98. package/esm2022/lib/services/google-analytics/google-analytics.service.mjs +1 -1
  99. package/esm2022/lib/services/idle/idle.service.mjs +1 -1
  100. package/esm2022/lib/services/maintenance/maintenance.service.mjs +1 -1
  101. package/esm2022/lib/services/notification/notification.service.mjs +1 -1
  102. package/esm2022/lib/services/tour/tour.service.mjs +1 -1
  103. package/esm2022/lib/validations/AppValidators.mjs +43 -6
  104. package/fesm2022/reusa-ngx-reusa-app-lib.mjs +2290 -3782
  105. package/fesm2022/reusa-ngx-reusa-app-lib.mjs.map +1 -1
  106. package/lib/components/add-employer/add-employer.component.d.ts +76 -22
  107. package/lib/components/add-employer/add-employer.component.d.ts.map +1 -1
  108. package/lib/components/add-participant/add-participant.component.d.ts +1 -4
  109. package/lib/components/add-participant/add-participant.component.d.ts.map +1 -1
  110. package/lib/components/add-payment/add-payment.component.d.ts +2 -1
  111. package/lib/components/add-payment/add-payment.component.d.ts.map +1 -1
  112. package/lib/components/address/address.component.d.ts +1 -10
  113. package/lib/components/address/address.component.d.ts.map +1 -1
  114. package/lib/components/bank-details/bank-details.component.d.ts +1 -17
  115. package/lib/components/bank-details/bank-details.component.d.ts.map +1 -1
  116. package/lib/components/contact-us/contact-us.component.d.ts +1 -4
  117. package/lib/components/contact-us/contact-us.component.d.ts.map +1 -1
  118. package/lib/components/email-update/email-update.component.d.ts +1 -6
  119. package/lib/components/email-update/email-update.component.d.ts.map +1 -1
  120. package/lib/components/employer-grid/employer-grid.component.d.ts +24 -6
  121. package/lib/components/employer-grid/employer-grid.component.d.ts.map +1 -1
  122. package/lib/components/footer/footer.component.d.ts.map +1 -1
  123. package/lib/components/header/header.component.d.ts +0 -3
  124. package/lib/components/header/header.component.d.ts.map +1 -1
  125. package/lib/components/job-search-result-page/job-search-result-page.component.d.ts +1 -3
  126. package/lib/components/job-search-result-page/job-search-result-page.component.d.ts.map +1 -1
  127. package/lib/components/job-title/job-title.component.d.ts +1 -3
  128. package/lib/components/job-title/job-title.component.d.ts.map +1 -1
  129. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts +1 -5
  130. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts.map +1 -1
  131. package/lib/components/lexis-nexis/lexis-nexis.component.d.ts.map +1 -1
  132. package/lib/components/menu/menu.component.d.ts +1 -11
  133. package/lib/components/menu/menu.component.d.ts.map +1 -1
  134. package/lib/components/mfa/mfa.component.d.ts +1 -6
  135. package/lib/components/mfa/mfa.component.d.ts.map +1 -1
  136. package/lib/components/profile/profile.component.d.ts.map +1 -1
  137. package/lib/components/questionnaire/common-success/common-success.page.d.ts +0 -1
  138. package/lib/components/questionnaire/common-success/common-success.page.d.ts.map +1 -1
  139. package/lib/components/questionnaire/dynamic-form-question.component.d.ts.map +1 -1
  140. package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -1
  141. package/lib/components/ssn-reverify/ssn-reverify.component.d.ts +1 -5
  142. package/lib/components/ssn-reverify/ssn-reverify.component.d.ts.map +1 -1
  143. package/lib/components/user-login/user-login.component.d.ts +1 -7
  144. package/lib/components/user-login/user-login.component.d.ts.map +1 -1
  145. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts +1 -7
  146. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts.map +1 -1
  147. package/lib/models/questionnaire/ComboModel.d.ts +0 -80
  148. package/lib/models/questionnaire/ComboModel.d.ts.map +1 -1
  149. package/lib/pages/common/login/login.component.d.ts.map +1 -1
  150. package/lib/pages/popovers/language/language.page.d.ts.map +1 -1
  151. package/lib/validations/AppValidators.d.ts +10 -0
  152. package/lib/validations/AppValidators.d.ts.map +1 -1
  153. package/package.json +2 -2
@@ -164,55 +164,34 @@ function DynamicFormComponent_div_2_ion_footer_13_div_1_Template(rf, ctx) { if (
164
164
  const _r38 = i0.ɵɵgetCurrentView();
165
165
  i0.ɵɵelementStart(0, "div", 24)(1, "div", 25)(2, "div", 26)(3, "ion-button", 27);
166
166
  i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_1_Template_ion_button_click_3_listener() { i0.ɵɵrestoreView(_r38); const ctx_r37 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r37.cancelAction()); });
167
- i0.ɵɵtext(4);
168
- i0.ɵɵpipe(5, "translate");
167
+ i0.ɵɵtext(4, " Cancel ");
169
168
  i0.ɵɵelementEnd()();
170
- i0.ɵɵelementStart(6, "div", 28)(7, "ion-button", 29);
171
- i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_1_Template_ion_button_click_7_listener() { i0.ɵɵrestoreView(_r38); const ctx_r39 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r39.complete()); });
172
- i0.ɵɵtext(8);
173
- i0.ɵɵpipe(9, "translate");
169
+ i0.ɵɵelementStart(5, "div", 28)(6, "ion-button", 29);
170
+ i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_1_Template_ion_button_click_6_listener() { i0.ɵɵrestoreView(_r38); const ctx_r39 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r39.complete()); });
171
+ i0.ɵɵtext(7, " Next ");
174
172
  i0.ɵɵelementEnd()()()();
175
- } if (rf & 2) {
176
- i0.ɵɵadvance(4);
177
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 2, "common.cancel"), " ");
178
- i0.ɵɵadvance(4);
179
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 4, "common.next"), " ");
180
173
  } }
181
174
  function DynamicFormComponent_div_2_ion_footer_13_div_2_Template(rf, ctx) { if (rf & 1) {
182
175
  const _r41 = i0.ɵɵgetCurrentView();
183
176
  i0.ɵɵelementStart(0, "div", 24)(1, "div", 25)(2, "div", 26)(3, "ion-button", 27);
184
177
  i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_2_Template_ion_button_click_3_listener() { i0.ɵɵrestoreView(_r41); const ctx_r40 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r40.cancelAction()); });
185
- i0.ɵɵtext(4);
186
- i0.ɵɵpipe(5, "translate");
178
+ i0.ɵɵtext(4, " Cancel ");
187
179
  i0.ɵɵelementEnd()();
188
- i0.ɵɵelementStart(6, "div", 28)(7, "ion-button", 29);
189
- i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_2_Template_ion_button_click_7_listener() { i0.ɵɵrestoreView(_r41); const ctx_r42 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r42.complete()); });
190
- i0.ɵɵtext(8);
191
- i0.ɵɵpipe(9, "translate");
180
+ i0.ɵɵelementStart(5, "div", 28)(6, "ion-button", 29);
181
+ i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_2_Template_ion_button_click_6_listener() { i0.ɵɵrestoreView(_r41); const ctx_r42 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r42.complete()); });
182
+ i0.ɵɵtext(7, " Done ");
192
183
  i0.ɵɵelementEnd()()()();
193
- } if (rf & 2) {
194
- i0.ɵɵadvance(4);
195
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 2, "common.cancel"), " ");
196
- i0.ɵɵadvance(4);
197
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 4, "common.done"), " ");
198
184
  } }
199
185
  function DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template(rf, ctx) { if (rf & 1) {
200
186
  const _r44 = i0.ɵɵgetCurrentView();
201
187
  i0.ɵɵelementStart(0, "ion-grid")(1, "ion-row")(2, "ion-col", 30)(3, "ion-button", 27);
202
188
  i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template_ion_button_click_3_listener() { i0.ɵɵrestoreView(_r44); const ctx_r43 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r43.cancelPopUp()); });
203
- i0.ɵɵtext(4);
204
- i0.ɵɵpipe(5, "translate");
189
+ i0.ɵɵtext(4, " Cancel ");
205
190
  i0.ɵɵelementEnd()();
206
- i0.ɵɵelementStart(6, "ion-col", 31)(7, "ion-button", 29);
207
- i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template_ion_button_click_7_listener() { i0.ɵɵrestoreView(_r44); const ctx_r45 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r45.complete()); });
208
- i0.ɵɵtext(8);
209
- i0.ɵɵpipe(9, "translate");
191
+ i0.ɵɵelementStart(5, "ion-col", 31)(6, "ion-button", 29);
192
+ i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template_ion_button_click_6_listener() { i0.ɵɵrestoreView(_r44); const ctx_r45 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r45.complete()); });
193
+ i0.ɵɵtext(7, " Add ");
210
194
  i0.ɵɵelementEnd()()()();
211
- } if (rf & 2) {
212
- i0.ɵɵadvance(4);
213
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 2, "common.cancel"), " ");
214
- i0.ɵɵadvance(4);
215
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 4, "common.add"), " ");
216
195
  } }
217
196
  function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
218
197
  i0.ɵɵtext(0);
@@ -225,97 +204,62 @@ function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Templat
225
204
  const _r58 = i0.ɵɵgetCurrentView();
226
205
  i0.ɵɵelementStart(0, "div")(1, "button", 37);
227
206
  i0.ɵɵlistener("keyUp.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template_button_keyUp_enter_1_listener() { i0.ɵɵrestoreView(_r58); const ctx_r57 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r57.navCtrl.navigateRoot("claimant-induction")); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r58); const ctx_r59 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r59.navCtrl.navigateRoot("claimant-induction")); });
228
- i0.ɵɵtext(2);
229
- i0.ɵɵpipe(3, "translate");
207
+ i0.ɵɵtext(2, "Back");
230
208
  i0.ɵɵelementEnd();
231
- i0.ɵɵelementStart(4, "button", 38);
232
- i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template_button_keyup_enter_4_listener() { i0.ɵɵrestoreView(_r58); const ctx_r60 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r60.nextPage(ctx_r60.activeIndex)); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r58); const ctx_r61 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r61.nextPage(ctx_r61.activeIndex)); });
233
- i0.ɵɵtext(5);
234
- i0.ɵɵpipe(6, "translate");
209
+ i0.ɵɵelementStart(3, "button", 38);
210
+ i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template_button_keyup_enter_3_listener() { i0.ɵɵrestoreView(_r58); const ctx_r60 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r60.nextPage(ctx_r60.activeIndex)); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r58); const ctx_r61 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r61.nextPage(ctx_r61.activeIndex)); });
211
+ i0.ɵɵtext(4, "Next");
235
212
  i0.ɵɵelementEnd()();
236
- } if (rf & 2) {
237
- i0.ɵɵadvance(2);
238
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "common.back"));
239
- i0.ɵɵadvance(3);
240
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "common.next"));
241
213
  } }
242
214
  function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template(rf, ctx) { if (rf & 1) {
243
215
  const _r63 = i0.ɵɵgetCurrentView();
244
216
  i0.ɵɵelementStart(0, "div")(1, "button", 37);
245
217
  i0.ɵɵlistener("keyUp.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_keyUp_enter_1_listener() { i0.ɵɵrestoreView(_r63); const ctx_r62 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r62.cancelAction()); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r63); const ctx_r64 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r64.cancelAction()); });
246
- i0.ɵɵtext(2);
247
- i0.ɵɵpipe(3, "translate");
218
+ i0.ɵɵtext(2, "Back");
248
219
  i0.ɵɵelementEnd();
249
- i0.ɵɵelementStart(4, "button", 38);
250
- i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_keyup_enter_4_listener() { i0.ɵɵrestoreView(_r63); const ctx_r65 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r65.complete()); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r63); const ctx_r66 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r66.complete()); });
251
- i0.ɵɵtext(5);
252
- i0.ɵɵpipe(6, "translate");
220
+ i0.ɵɵelementStart(3, "button", 38);
221
+ i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_keyup_enter_3_listener() { i0.ɵɵrestoreView(_r63); const ctx_r65 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r65.complete()); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r63); const ctx_r66 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r66.complete()); });
222
+ i0.ɵɵtext(4, "Next");
253
223
  i0.ɵɵelementEnd()();
254
- } if (rf & 2) {
255
- i0.ɵɵadvance(2);
256
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "common.back"));
257
- i0.ɵɵadvance(3);
258
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "common.next"));
259
224
  } }
260
225
  function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template(rf, ctx) { if (rf & 1) {
261
226
  const _r68 = i0.ɵɵgetCurrentView();
262
227
  i0.ɵɵelementStart(0, "div")(1, "button", 39);
263
228
  i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r68); const ctx_r67 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r67.prevPage(ctx_r67.activeIndex)); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r68); const ctx_r69 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r69.prevPage(ctx_r69.activeIndex)); });
264
- i0.ɵɵtext(2);
265
- i0.ɵɵpipe(3, "translate");
229
+ i0.ɵɵtext(2, "Back");
266
230
  i0.ɵɵelementEnd();
267
- i0.ɵɵelementStart(4, "button", 38);
268
- i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_keyup_enter_4_listener() { i0.ɵɵrestoreView(_r68); const ctx_r70 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r70.complete()); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r68); const ctx_r71 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r71.complete()); });
269
- i0.ɵɵtext(5);
270
- i0.ɵɵpipe(6, "translate");
231
+ i0.ɵɵelementStart(3, "button", 38);
232
+ i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_keyup_enter_3_listener() { i0.ɵɵrestoreView(_r68); const ctx_r70 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r70.complete()); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r68); const ctx_r71 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r71.complete()); });
233
+ i0.ɵɵtext(4, "Done");
271
234
  i0.ɵɵelementEnd()();
272
- } if (rf & 2) {
273
- i0.ɵɵadvance(2);
274
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "common.back"));
275
- i0.ɵɵadvance(3);
276
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "common.done"));
277
235
  } }
278
236
  function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template(rf, ctx) { if (rf & 1) {
279
237
  const _r73 = i0.ɵɵgetCurrentView();
280
238
  i0.ɵɵelementStart(0, "div")(1, "button", 40);
281
239
  i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r73); const ctx_r72 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r72.prevPage(ctx_r72.activeIndex)); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r73); const ctx_r74 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r74.prevPage(ctx_r74.activeIndex)); });
282
- i0.ɵɵtext(2);
283
- i0.ɵɵpipe(3, "translate");
240
+ i0.ɵɵtext(2, "Back");
284
241
  i0.ɵɵelementEnd();
285
- i0.ɵɵelementStart(4, "button", 38);
286
- i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_keyup_enter_4_listener() { i0.ɵɵrestoreView(_r73); const ctx_r75 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r75.nextPage(ctx_r75.activeIndex)); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r73); const ctx_r76 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r76.nextPage(ctx_r76.activeIndex)); });
287
- i0.ɵɵtext(5);
288
- i0.ɵɵpipe(6, "translate");
242
+ i0.ɵɵelementStart(3, "button", 38);
243
+ i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_keyup_enter_3_listener() { i0.ɵɵrestoreView(_r73); const ctx_r75 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r75.nextPage(ctx_r75.activeIndex)); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r73); const ctx_r76 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r76.nextPage(ctx_r76.activeIndex)); });
244
+ i0.ɵɵtext(4, "Next");
289
245
  i0.ɵɵelementEnd()();
290
- } if (rf & 2) {
291
- i0.ɵɵadvance(2);
292
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "common.back"));
293
- i0.ɵɵadvance(3);
294
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "common.next"));
295
246
  } }
296
247
  function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template(rf, ctx) { if (rf & 1) {
297
248
  const _r78 = i0.ɵɵgetCurrentView();
298
249
  i0.ɵɵelementStart(0, "div")(1, "button", 40);
299
250
  i0.ɵɵlistener("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r78); const ctx_r77 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r77.cancelAction()); })("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r78); const ctx_r79 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r79.cancelAction()); });
300
- i0.ɵɵtext(2);
301
- i0.ɵɵpipe(3, "translate");
251
+ i0.ɵɵtext(2, "Back");
302
252
  i0.ɵɵelementEnd();
303
- i0.ɵɵelementStart(4, "button", 41);
304
- i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r78); const ctx_r80 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r80.nextPage(ctx_r80.activeIndex)); })("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_keyup_enter_4_listener() { i0.ɵɵrestoreView(_r78); const ctx_r81 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r81.nextPage(ctx_r81.activeIndex)); });
305
- i0.ɵɵtext(5);
306
- i0.ɵɵpipe(6, "translate");
253
+ i0.ɵɵelementStart(3, "button", 41);
254
+ i0.ɵɵlistener("click", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r78); const ctx_r80 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r80.nextPage(ctx_r80.activeIndex)); })("keyup.enter", function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template_button_keyup_enter_3_listener() { i0.ɵɵrestoreView(_r78); const ctx_r81 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r81.nextPage(ctx_r81.activeIndex)); });
255
+ i0.ɵɵtext(4, "Next");
307
256
  i0.ɵɵelementEnd()();
308
- } if (rf & 2) {
309
- i0.ɵɵadvance(2);
310
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "common.back"));
311
- i0.ɵɵadvance(3);
312
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 4, "common.next"));
313
257
  } }
314
258
  function DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_Template(rf, ctx) { if (rf & 1) {
315
259
  i0.ɵɵelementStart(0, "mat-step", 35)(1, "div");
316
260
  i0.ɵɵtemplate(2, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_ng_template_2_Template, 1, 1, "ng-template", 36);
317
261
  i0.ɵɵelementEnd();
318
- i0.ɵɵtemplate(3, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template, 7, 6, "div", 2)(4, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template, 7, 6, "div", 2)(5, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template, 7, 6, "div", 2)(6, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template, 7, 6, "div", 2)(7, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template, 7, 6, "div", 2);
262
+ i0.ɵɵtemplate(3, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_3_Template, 5, 0, "div", 2)(4, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_4_Template, 5, 0, "div", 2)(5, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_5_Template, 5, 0, "div", 2)(6, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_6_Template, 5, 0, "div", 2)(7, DynamicFormComponent_div_2_ion_footer_13_div_4_mat_step_3_div_7_Template, 5, 0, "div", 2);
319
263
  i0.ɵɵelementEnd();
320
264
  } if (rf & 2) {
321
265
  const i_r49 = ctx.index;
@@ -347,7 +291,7 @@ function DynamicFormComponent_div_2_ion_footer_13_div_4_Template(rf, ctx) { if (
347
291
  } }
348
292
  function DynamicFormComponent_div_2_ion_footer_13_Template(rf, ctx) { if (rf & 1) {
349
293
  i0.ɵɵelementStart(0, "ion-footer", 22);
350
- i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ion_footer_13_div_1_Template, 10, 6, "div", 23)(2, DynamicFormComponent_div_2_ion_footer_13_div_2_Template, 10, 6, "div", 23)(3, DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template, 10, 6, "ion-grid", 2)(4, DynamicFormComponent_div_2_ion_footer_13_div_4_Template, 4, 2, "div", 2);
294
+ i0.ɵɵtemplate(1, DynamicFormComponent_div_2_ion_footer_13_div_1_Template, 8, 0, "div", 23)(2, DynamicFormComponent_div_2_ion_footer_13_div_2_Template, 8, 0, "div", 23)(3, DynamicFormComponent_div_2_ion_footer_13_ion_grid_3_Template, 8, 0, "ion-grid", 2)(4, DynamicFormComponent_div_2_ion_footer_13_div_4_Template, 4, 2, "div", 2);
351
295
  i0.ɵɵelementEnd();
352
296
  } if (rf & 2) {
353
297
  const ctx_r8 = i0.ɵɵnextContext(2);
@@ -892,18 +836,8 @@ export class DynamicFormComponent extends BasePage {
892
836
  nextPage(index) {
893
837
  this.logger.debug("next page called ---- ");
894
838
  let formGroup = this.formGroupArray[index];
895
- let alienDocExpiryError = false;
896
- if (formGroup.value.alienDocType != null && formGroup.value.alienDocType.value != "I-94"
897
- && formGroup.value.alienDocExpDate == null) {
898
- alienDocExpiryError = true;
899
- }
900
- if (formGroup.invalid || alienDocExpiryError) {
839
+ if (formGroup.invalid) {
901
840
  this.logger.debug('Inside if', formGroup);
902
- if (alienDocExpiryError) {
903
- formGroup.get('alienDocExpDate').markAsTouched();
904
- formGroup.get('alienDocExpDate').markAsDirty();
905
- formGroup.get('alienDocExpDate').setErrors({ required: true });
906
- }
907
841
  formGroup.markAllAsTouched();
908
842
  Object.values(formGroup.controls).forEach(control => {
909
843
  control.markAsDirty();
@@ -1355,12 +1289,7 @@ export class DynamicFormComponent extends BasePage {
1355
1289
  }
1356
1290
  else if (!res?.lnenabled && res?.message == null) {
1357
1291
  if (this.nextButtonPage) {
1358
- if (localStorage.getItem("language") === "es") {
1359
- this.util.success('Su cuenta se ha creado correctamente. ¡Inicie sesión!');
1360
- }
1361
- else {
1362
- this.util.success('Your account have been successfully created. Please login!');
1363
- }
1292
+ this.util.success('Your account have been successfully created. Please login!');
1364
1293
  setTimeout(() => this.navCtrl.navigateRoot('/login'), 2000);
1365
1294
  // this.navCtrl.navigateRoot(
1366
1295
  // `/${this.nextButtonPage}?identifier=${res['uuid']}`
@@ -1385,12 +1314,7 @@ export class DynamicFormComponent extends BasePage {
1385
1314
  // this.util.showError('Your USPS identity proofing is pending. Please complete it before you login to the portal!');
1386
1315
  // setTimeout(() => this.navCtrl.navigateRoot('/login'), 2000);
1387
1316
  // }
1388
- if (localStorage.getItem("language") === "es") {
1389
- this.util.success('¡Complete su verificación de identidad de USPS antes de iniciar sesión en el portal!');
1390
- }
1391
- else {
1392
- this.util.success('Please complete your USPS Identity Verification before you login to the portal!');
1393
- }
1317
+ this.util.showError('Please complete your USPS Identity Verification before you login to the portal!');
1394
1318
  setTimeout(() => this.navCtrl.navigateRoot('/login'), 2000);
1395
1319
  }
1396
1320
  }, error: (error) => {
@@ -1403,12 +1327,7 @@ export class DynamicFormComponent extends BasePage {
1403
1327
  // this.util.showError('Your USPS identity proofing is pending. Please complete it before you login to the portal!');
1404
1328
  // setTimeout(() => this.navCtrl.navigateRoot('/login'), 2000);
1405
1329
  // }
1406
- if (localStorage.getItem("language") === "es") {
1407
- this.util.success('¡Complete su verificación de identidad de USPS antes de iniciar sesión en el portal!');
1408
- }
1409
- else {
1410
- this.util.success('Please complete your USPS Identity Verification before you login to the portal!');
1411
- }
1330
+ this.util.showError('Please complete your USPS Identity Verification before you login to the portal!');
1412
1331
  setTimeout(() => this.navCtrl.navigateRoot('/login'), 2000);
1413
1332
  },
1414
1333
  });
@@ -1668,7 +1587,7 @@ export class DynamicFormComponent extends BasePage {
1668
1587
  i0.ɵɵproperty("ngIf", ctx.isLexisNexisPopupEnabled);
1669
1588
  i0.ɵɵadvance(1);
1670
1589
  i0.ɵɵproperty("ngIf", ctx.showMfa);
1671
- } }, dependencies: [i3.IonButton, i3.IonCol, i3.IonFooter, i3.IonGrid, i3.IonRow, i3.IonSpinner, i14.NgClass, i14.NgForOf, i14.NgIf, i15.ɵNgNoValidate, i15.NgControlStatusGroup, i15.FormGroupDirective, i16.MatStep, i16.MatStepLabel, i16.MatStepper, i16.MatStepperNext, i16.MatStepperPrevious, i17.MatButton, i18.BlockUI, i19.MfaComponent, i20.DynamicFormQuestionComponent, i21.InputFocus, i22.LexisNexisComponent, i6.TranslatePipe, i23.DynamicTranslatePipe, i24.TrustHtmlPipe], styles: ["[_nghost-%COMP%] .flex-container.ng-star-inserted{display:inline-flex!important}[_nghost-%COMP%] .p-fluid .p-buttonset{display:initial!important}[_nghost-%COMP%] form{margin-left:5px}[_nghost-%COMP%] .p-fluid .p-calendar{display:inline-flex!important;width:60%!important}[_nghost-%COMP%] .p-fluid .p-calendar .p-inputtext{width:100%!important}[_nghost-%COMP%] .p-fluid .p-autocomplete{display:inline-flex!important}.pageTitle[_ngcontent-%COMP%]{font-weight:600;position:absolute;right:48%}.share-row[_ngcontent-%COMP%]{display:inline-block;margin-right:10px}.share-row[_ngcontent-%COMP%] > money-expect[_ngcontent-%COMP%]{float:right}@media (max-width: 280px){[_nghost-%COMP%] span.start{font-size:18px;top:46px;position:relative}[_nghost-%COMP%] .mat-stepper-horizontal-line{display:none}[_nghost-%COMP%] .mat-horizontal-stepper-header{padding:0 28px!important}[_nghost-%COMP%] .mat-horizontal-stepper-header-container{left:46px!important}[_nghost-%COMP%] .mat-step-label{display:none!important}}@media (max-width: 576px){[_nghost-%COMP%] span.p-steps-title.ng-star-inserted{display:none!important}[_nghost-%COMP%] .p-steps.p-steps-item.p-menuitem-link.p-steps-title{display:none!important}[_nghost-%COMP%] .backinc{position:absolute;left:25px}[_nghost-%COMP%] .mat-step-label{display:none!important}[_nghost-%COMP%] .mat-step-label.mat-step-label-active{display:none!important;position:absolute;bottom:0;right:0}}@media (max-width: 576px) and (min-width: 576px){.pageTitle[_ngcontent-%COMP%]{display:none!important}.backinc[_ngcontent-%COMP%]{position:absolute;left:125px}}@media (max-width: 415px){[_nghost-%COMP%] .mat-horizontal-stepper-header-container{width:60%!important;left:46px!important}[_nghost-%COMP%] .reverse{left:5px!important}[_nghost-%COMP%] .forward{right:5px!important}}[_nghost-%COMP%] .mat-stepper-horizontal, [_nghost-%COMP%] .mat-stepper-vertical{height:70px}[_nghost-%COMP%] .mat-horizontal-stepper-header{padding:0 40px}[_nghost-%COMP%] .mat-step-label{min-width:120px;bottom:5px}[_nghost-%COMP%] .mat-step-header .mat-step-label.mat-step-label-active{bottom:5px}[_nghost-%COMP%] .mat-step-header:hover:hover{background-color:#fff!important}[_nghost-%COMP%] .mat-horizontal-stepper-header{pointer-events:none!important}[_nghost-%COMP%] .mat-step-header .mat-step-icon{background-color:#bdcad2;color:#bdcad2}[_nghost-%COMP%] .mat-step-header .mat-step-icon-selected{color:#fff;background-color:var(--ion-color-primary)}[_nghost-%COMP%] .mat-step-header .mat-step-label.mat-step-label-selected{color:var(--ion-color-primary)}[_nghost-%COMP%] mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:var(--ion-color-primary)!important;font-weight:700}[_nghost-%COMP%] .mat-step-header .mat-step-icon-selected mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:#fff!important;font-weight:700}[_nghost-%COMP%] button{background-color:var(--ion-color-primary);color:#fff}[_nghost-%COMP%] .reverse{background-color:#fff;border:1px solid var(--ion-color-primary);border-radius:30px;color:var(--ion-color-primary)!important;position:absolute;bottom:15px;left:40px;cursor:pointer}[_nghost-%COMP%] .mat-horizontal-stepper-header-container{width:50%;position:sticky;left:100px}[_nghost-%COMP%] .forward{position:absolute;right:40px;bottom:15px;border-radius:30px;cursor:pointer}[_nghost-%COMP%] .reset{position:absolute;right:50px;bottom:40px;border-radius:30px}[_nghost-%COMP%] .placeholder{visibility:hidden}[_nghost-%COMP%] .ui-state-complete .ui-steps-number{background-color:green!important}[_nghost-%COMP%] .p-steps .p-steps-item.p-highlight .p-steps-number{background-color:var(--ion-color-primary)!important;background-size:20px;color:var(--ion-color-primary)!important}[_nghost-%COMP%] .p-steps .p-steps-item .p-menuitem-link .p-steps-number{color:var(--ion-color-grey);background-size:15px;font-size:.857rem;min-width:1.714rem;height:1.714rem;line-height:1.714rem}[_nghost-%COMP%] div.p-formgrid.p-grid.ng-star-inserted{flex-wrap:wrap!important}[_nghost-%COMP%] .p-steps .p-steps-item.p-menuitem-link .p-steps-number{background-color:var(--ion-color-primary-shade)}[_nghost-%COMP%] ion-footer{bottom:0}[_nghost-%COMP%] .second{right:45%}[_nghost-%COMP%] .mat-button.mat-primary[disabled], [_nghost-%COMP%] .mat-button.mat-accent[disabled], [_nghost-%COMP%] .mat-button.mat-warn[disabled], [_nghost-%COMP%] .mat-button[disabled][disabled], [_nghost-%COMP%] .mat-icon-button.mat-primary[disabled], [_nghost-%COMP%] .mat-icon-button.mat-accent[disabled], [_nghost-%COMP%] .mat-icon-button.mat-warn[disabled], [_nghost-%COMP%] .mat-icon-button[disabled][disabled], [_nghost-%COMP%] .mat-stroked-button.mat-primary[disabled], [_nghost-%COMP%] .mat-stroked-button.mat-accent[disabled], [_nghost-%COMP%] .mat-stroked-button.mat-warn[disabled], [_nghost-%COMP%] .mat-stroked-button[disabled][disabled]{border:1px solid lightgray}[_nghost-%COMP%] h1, [_nghost-%COMP%] h2, [_nghost-%COMP%] h3, [_nghost-%COMP%] h4, [_nghost-%COMP%] h5, [_nghost-%COMP%] h6{margin-top:0!important;margin-bottom:0!important}.footer-fixed[_ngcontent-%COMP%]{position:fixed!important}.footer-sticky[_ngcontent-%COMP%]{position:sticky}@media (max-width: 768px){.footer-fixed[_ngcontent-%COMP%]{position:sticky}}.fb-heading[_ngcontent-%COMP%]{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:36px}.fb-heading-followup[_ngcontent-%COMP%]{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:24px}.qe-form[_ngcontent-%COMP%]{margin-bottom:96px}.qe-form-multiple[_ngcontent-%COMP%]{margin-bottom:8px}.fb-heading[_ngcontent-%COMP%]:focus{outline-color:#4478aa}[_nghost-%COMP%] .mat-step-header[aria-selected=false] .mat-step-icon-state-number{background-color:var(--ion-color-primary);color:#fff}[_nghost-%COMP%] .mat-step-header[aria-selected=true] .mat-step-icon-state-edit, [_nghost-%COMP%] .mat-step-header[aria-selected=true] .mat-step-icon-state-done{background-color:#0b58a3;color:#fff}"] }); }
1590
+ } }, dependencies: [i3.IonButton, i3.IonCol, i3.IonFooter, i3.IonGrid, i3.IonRow, i3.IonSpinner, i14.NgClass, i14.NgForOf, i14.NgIf, i15.ɵNgNoValidate, i15.NgControlStatusGroup, i15.FormGroupDirective, i16.MatStep, i16.MatStepLabel, i16.MatStepper, i16.MatStepperNext, i16.MatStepperPrevious, i17.MatButton, i18.BlockUI, i19.MfaComponent, i20.DynamicFormQuestionComponent, i21.InputFocus, i22.LexisNexisComponent, i23.DynamicTranslatePipe, i24.TrustHtmlPipe], styles: ["[_nghost-%COMP%] .flex-container.ng-star-inserted{display:inline-flex!important}[_nghost-%COMP%] .p-fluid .p-buttonset{display:initial!important}[_nghost-%COMP%] form{margin-left:5px}[_nghost-%COMP%] .p-fluid .p-calendar{display:inline-flex!important;width:60%!important}[_nghost-%COMP%] .p-fluid .p-calendar .p-inputtext{width:100%!important}[_nghost-%COMP%] .p-fluid .p-autocomplete{display:inline-flex!important}.pageTitle[_ngcontent-%COMP%]{font-weight:600;position:absolute;right:48%}.share-row[_ngcontent-%COMP%]{display:inline-block;margin-right:10px}.share-row[_ngcontent-%COMP%] > money-expect[_ngcontent-%COMP%]{float:right}@media (max-width: 280px){[_nghost-%COMP%] span.start{font-size:18px;top:46px;position:relative}[_nghost-%COMP%] .mat-stepper-horizontal-line{display:none}[_nghost-%COMP%] .mat-horizontal-stepper-header{padding:0 28px!important}[_nghost-%COMP%] .mat-horizontal-stepper-header-container{left:46px!important}[_nghost-%COMP%] .mat-step-label{display:none!important}}@media (max-width: 576px){[_nghost-%COMP%] span.p-steps-title.ng-star-inserted{display:none!important}[_nghost-%COMP%] .p-steps.p-steps-item.p-menuitem-link.p-steps-title{display:none!important}[_nghost-%COMP%] .backinc{position:absolute;left:25px}[_nghost-%COMP%] .mat-step-label{display:none!important}[_nghost-%COMP%] .mat-step-label.mat-step-label-active{display:none!important;position:absolute;bottom:0;right:0}}@media (max-width: 576px) and (min-width: 576px){.pageTitle[_ngcontent-%COMP%]{display:none!important}.backinc[_ngcontent-%COMP%]{position:absolute;left:125px}}@media (max-width: 415px){[_nghost-%COMP%] .mat-horizontal-stepper-header-container{width:60%!important;left:46px!important}[_nghost-%COMP%] .reverse{left:5px!important}[_nghost-%COMP%] .forward{right:5px!important}}[_nghost-%COMP%] .mat-stepper-horizontal, [_nghost-%COMP%] .mat-stepper-vertical{height:70px}[_nghost-%COMP%] .mat-horizontal-stepper-header{padding:0 40px}[_nghost-%COMP%] .mat-step-label{min-width:120px;bottom:5px}[_nghost-%COMP%] .mat-step-header .mat-step-label.mat-step-label-active{bottom:5px}[_nghost-%COMP%] .mat-step-header:hover:hover{background-color:#fff!important}[_nghost-%COMP%] .mat-horizontal-stepper-header{pointer-events:none!important}[_nghost-%COMP%] .mat-step-header .mat-step-icon{background-color:#bdcad2;color:#bdcad2}[_nghost-%COMP%] .mat-step-header .mat-step-icon-selected{color:#fff;background-color:var(--ion-color-primary)}[_nghost-%COMP%] .mat-step-header .mat-step-label.mat-step-label-selected{color:var(--ion-color-primary)}[_nghost-%COMP%] mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:var(--ion-color-primary)!important;font-weight:700}[_nghost-%COMP%] .mat-step-header .mat-step-icon-selected mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:#fff!important;font-weight:700}[_nghost-%COMP%] button{background-color:var(--ion-color-primary);color:#fff}[_nghost-%COMP%] .reverse{background-color:#fff;border:1px solid var(--ion-color-primary);border-radius:30px;color:var(--ion-color-primary)!important;position:absolute;bottom:15px;left:40px;cursor:pointer}[_nghost-%COMP%] .mat-horizontal-stepper-header-container{width:50%;position:sticky;left:100px}[_nghost-%COMP%] .forward{position:absolute;right:40px;bottom:15px;border-radius:30px;cursor:pointer}[_nghost-%COMP%] .reset{position:absolute;right:50px;bottom:40px;border-radius:30px}[_nghost-%COMP%] .placeholder{visibility:hidden}[_nghost-%COMP%] .ui-state-complete .ui-steps-number{background-color:green!important}[_nghost-%COMP%] .p-steps .p-steps-item.p-highlight .p-steps-number{background-color:var(--ion-color-primary)!important;background-size:20px;color:var(--ion-color-primary)!important}[_nghost-%COMP%] .p-steps .p-steps-item .p-menuitem-link .p-steps-number{color:var(--ion-color-grey);background-size:15px;font-size:.857rem;min-width:1.714rem;height:1.714rem;line-height:1.714rem}[_nghost-%COMP%] div.p-formgrid.p-grid.ng-star-inserted{flex-wrap:wrap!important}[_nghost-%COMP%] .p-steps .p-steps-item.p-menuitem-link .p-steps-number{background-color:var(--ion-color-primary-shade)}[_nghost-%COMP%] ion-footer{bottom:0}[_nghost-%COMP%] .second{right:45%}[_nghost-%COMP%] .mat-button.mat-primary[disabled], [_nghost-%COMP%] .mat-button.mat-accent[disabled], [_nghost-%COMP%] .mat-button.mat-warn[disabled], [_nghost-%COMP%] .mat-button[disabled][disabled], [_nghost-%COMP%] .mat-icon-button.mat-primary[disabled], [_nghost-%COMP%] .mat-icon-button.mat-accent[disabled], [_nghost-%COMP%] .mat-icon-button.mat-warn[disabled], [_nghost-%COMP%] .mat-icon-button[disabled][disabled], [_nghost-%COMP%] .mat-stroked-button.mat-primary[disabled], [_nghost-%COMP%] .mat-stroked-button.mat-accent[disabled], [_nghost-%COMP%] .mat-stroked-button.mat-warn[disabled], [_nghost-%COMP%] .mat-stroked-button[disabled][disabled]{border:1px solid lightgray}[_nghost-%COMP%] h1, [_nghost-%COMP%] h2, [_nghost-%COMP%] h3, [_nghost-%COMP%] h4, [_nghost-%COMP%] h5, [_nghost-%COMP%] h6{margin-top:0!important;margin-bottom:0!important}.footer-fixed[_ngcontent-%COMP%]{position:fixed!important}.footer-sticky[_ngcontent-%COMP%]{position:sticky}@media (max-width: 768px){.footer-fixed[_ngcontent-%COMP%]{position:sticky}}.fb-heading[_ngcontent-%COMP%]{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:36px}.fb-heading-followup[_ngcontent-%COMP%]{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:24px}.qe-form[_ngcontent-%COMP%]{margin-bottom:96px}.qe-form-multiple[_ngcontent-%COMP%]{margin-bottom:8px}.fb-heading[_ngcontent-%COMP%]:focus{outline-color:#4478aa}[_nghost-%COMP%] .mat-step-header[aria-selected=false] .mat-step-icon-state-number{background-color:var(--ion-color-primary);color:#fff}[_nghost-%COMP%] .mat-step-header[aria-selected=true] .mat-step-icon-state-edit, [_nghost-%COMP%] .mat-step-header[aria-selected=true] .mat-step-icon-state-done{background-color:#0b58a3;color:#fff}"] }); }
1672
1591
  }
1673
1592
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DynamicFormComponent, [{
1674
1593
  type: Component,
@@ -1678,7 +1597,7 @@ export class DynamicFormComponent extends BasePage {
1678
1597
  showError: true,
1679
1598
  displayDefaultIndicatorType: false
1680
1599
  }
1681
- }], template: "<p-blockUI [blocked]=\"blockUi\">\r\n <ion-spinner name=\"crescent\"></ion-spinner>\r\n</p-blockUI>\r\n<div *ngIf=\"questions && questions[0] && !showMfa\" #formMainDiv>\r\n <form focusInvalidInput [formGroup]=\"formGroupArray[activeIndex]\" [ngClass]=\"multiMode ? 'qe-form-multiple' : 'qe-form'\" (ngSubmit)=\"onSubmit()\" #questionnaireForm=\"ngForm\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"questions[0].pages[activeIndex].name\">\r\n <ion-col size=\"12\" [sizeXs]=\"sizeXs\" [sizeSm]=\"sizeSm\" [sizeMd]=\"sizeMd\" [sizeLg]=\"sizeLg\" [sizeXl]=\"sizeXl\"\r\n [offsetXs]=\"offsetXs\" [offsetSm]=\"offsetSm\" [offsetMd]=\"offsetMd\" [offsetLg]=\"offsetLg\" [offsetXl]=\"offsetXl\">\r\n <div class=\"p-formgrid\">\r\n <div tabindex=\"0\" [innerHtml]=\"(questionNumber ? questionNumber + ' ' : '') + questions[0].pages[activeIndex].name | dynamicTranslate:dynamicParam | trustHtml\" [ngClass]=\"multiMode ? 'fb-heading-followup' : 'fb-heading'\" role=\"heading\" aria-level=\"1\">\r\n </div>\r\n </div>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row>\r\n <ion-col style=\"padding-left: 0px;\" class=\"ion-padding-end\" size=\"12\" [sizeXs]=\"sizeXs\" [sizeSm]=\"sizeSm\"\r\n [sizeMd]=\"sizeMd\" [sizeLg]=\"sizeLg\" [sizeXl]=\"sizeXl\" [offsetXs]=\"offsetXs\" [offsetSm]=\"offsetSm\"\r\n [offsetMd]=\"offsetMd\" [offsetLg]=\"offsetLg\" [offsetXl]=\"offsetXl\">\r\n <div class=\"p-formgrid\" style=\"padding-left: 8px;\">\r\n <ng-container *ngFor=\"let element of questions[0].pages[activeIndex].elements; let i = index\">\r\n <ng-container *ngIf=\"element.type==='panel'\">\r\n\r\n <ion-row *ngIf=\"visibleIf(element.visibleIf,'',formGroupArray[activeIndex],element)\">\r\n <!-- <ion-col style=\"padding-left: 0px;\"> -->\r\n <div style=\"padding-left: 0px;\" class=\"heading\" role=\"heading\" aria-level=\"1\">\r\n {{element.title}}\r\n </div>\r\n <!-- </ion-col> -->\r\n </ion-row>\r\n <ion-row>\r\n <ng-container *ngFor=\"let panelElement of element.elements\">\r\n <div class=\"share-row\" *ngIf=\"panelElement.colElement==='COL1' && visibleIf(panelElement.visibleIf,panelElement.name,formGroupArray[activeIndex],panelElement)\">\r\n\r\n <app-question [potentialIssueId]=\"potentialIssueId\" [question]=\"panelElement\" [form]=\"formGroupArray[activeIndex]\"\r\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\" (onDynamicParamUpdate)=\"updateDynamicParam($event)\" [dynamicParam]=\"dynamicParam\">\r\n </app-question>\r\n </div>\r\n\r\n \r\n <!-- <ion-col size=\"1\" *ngIf=\"panelElement.description\" style=\"padding-top: 28px\">\r\n <app-overlay-info [overlayText]=\"panelElement.description\"></app-overlay-info>\r\n </ion-col> -->\r\n </ng-container>\r\n </ion-row>\r\n <!-- </ion-col>\r\n </ion-row> -->\r\n\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"element.type!='panel' && element.type!='hidden' && visibleIf(element.visibleIf,element.name,formGroupArray[activeIndex],element)\">\r\n <ion-row>\r\n <ion-col [sizeLg]=\"element.sizeLG>0?element.sizeLG:''\" [sizeSm]=\"element.sizeSM\"\r\n [sizeXs]=\"element.sizeXS\" [sizeXl]=\"element.sizeXL>0 ?element.sizeXL:''\"\r\n [sizeMd]=\"element.sizeMD>0 ?element.sizeMD:''\" style=\"padding-left: 0px;\">\r\n <!-- <div class=\"field\"> -->\r\n <app-question [potentialIssueId]=\"potentialIssueId\" [question]=\"element\" [form]=\"formGroupArray[activeIndex]\"\r\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\" [dynamicParam]=\"dynamicParam\" \r\n (onDynamicParamUpdate)=\"updateDynamicParam($event)\" >\r\n </app-question>\r\n <!-- </div> -->\r\n </ion-col>\r\n <!-- <ion-col size=\"1\" *ngIf=\"element.description\" style=\"padding-top: 35px\">\r\n <app-overlay-info [overlayText]=\"element.description\"></app-overlay-info>\r\n </ion-col> -->\r\n </ion-row>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ion-col>\r\n <ion-col class=\"ion-padding-start\" size=\"12\" sizeSm=\"12\" sizeXs=\"12\" [sizeMd]=\"pageType==='POPUP'?6:12\"\r\n [sizeLg]=\"pageType==='POPUP'?6:10\" [sizeXl]=\"pageType==='POPUP'?5:10\" style=\"padding-left: 0px;\"\r\n [offsetXl]=\"pageType==='POPUP'?0:1\" [offsetLg]=\"pageType==='POPUP'?0:1\">\r\n <div class=\"p-formgrid\" style=\"padding-left: 8px;\">\r\n <ng-container *ngFor=\"let element of questions[0].pages[activeIndex].elements; let i = index\">\r\n <ng-container *ngIf=\" visibleIf(element.visibleIf,'',formGroupArray[activeIndex],element)\">\r\n \r\n <ng-container *ngFor=\"let panelElement of element.elements\">\r\n <div *ngIf=\"panelElement.colElement==='COL2' &&\r\n visibleIf(panelElement.visibleIf,panelElement.name,formGroupArray[activeIndex],panelElement)\">\r\n <div>\r\n <panel-app [question]=\"panelElement\" [form]=\"formGroupArray[activeIndex]\"\r\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\">\r\n </panel-app>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n\r\n <ion-footer *ngIf=\"!hideFooter\"\r\n [ngClass]=\"'footer-fixed'\">\r\n <div style=\"text-align: right; background: white; margin-left: -5px;\"\r\n *ngIf=\"hideStep && pageType!='POPUP' && pageType!='SCREEN'\">\r\n <div class=\"grid p-nogutter\" style=\"height: 60px;\">\r\n <div class=\"col-6 ion-text-left\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelAction()\" type=\"submit\">\r\n {{\"common.cancel\" | translate}}\r\n </ion-button>\r\n </div>\r\n <div class=\"col-6 ion-text-right\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\r\n {{\"common.next\" | translate}}\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"text-align: right; background: white; margin-left: -5px;\"\r\n *ngIf=\"hideStep && pageType=='SCREEN' && questions[0].isFirstPageSubmit\">\r\n <div class=\"grid p-nogutter\" style=\"height: 60px;\">\r\n <div class=\"col-6 ion-text-left\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelAction()\" type=\"submit\">\r\n {{\"common.cancel\" | translate}}\r\n </ion-button>\r\n </div>\r\n <div class=\"col-6 ion-text-right\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\r\n {{\"common.done\" | translate}}\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n <ion-grid *ngIf=\"hideStep && pageType==='POPUP'\">\r\n <ion-row>\r\n <ion-col class=\"ion-text-left ion-padding-start\">\r\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelPopUp()\" type=\"submit\">\r\n {{\"common.cancel\" | translate}}\r\n </ion-button>\r\n </ion-col>\r\n <ion-col class=\"ion-text-right ion-padding-end\">\r\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\r\n {{\"common.add\" | translate}}\r\n </ion-button>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n\r\n\r\n\r\n\r\n <div *ngIf=\"!hideStep\">\r\n <mat-horizontal-stepper linear #matHorizontalStepper [selectedIndex]=\"questions[0].stepCounter\"\r\n (selectionChange)=\"stepChanged($event);\" style=\"text-align: -webkit-center;\" aria-busy=\"true\">\r\n <mat-step *ngFor=\"let element of questions[0].pages; let i = index;\" [stepControl]=\"formGroupArray[i]\"\r\n [completed]=\" i < activeIndex \">\r\n\r\n <div>\r\n <ng-template matStepLabel>{{questions[0].pages[i].navigationTitle}}</ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"!questions[0].isFirstPageSubmit && !isLast && isFirst && !isEnableBackButton\">\r\n <button tabindex=\"0\" class=\"reverse\" (keyUp.enter)=\"navCtrl.navigateRoot('claimant-induction')\" (click)=\"navCtrl.navigateRoot('claimant-induction')\" mat-button matStepperPrevious>{{'common.back'| translate}}</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"nextPage(activeIndex)\" (click)=\"nextPage(activeIndex)\">{{'common.next'| translate}}</button>\r\n </div>\r\n\r\n <div *ngIf=\"questions[0].isFirstPageSubmit\">\r\n <button tabindex=\"0\" class=\"reverse\" (keyUp.enter)=\"cancelAction()\" (click)=\"cancelAction()\" mat-button matStepperPrevious>{{'common.back'| translate}}</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"complete()\" (click)=\"complete()\">{{'common.next'| translate}}</button>\r\n </div>\r\n\r\n <div *ngIf=\"!questions[0].isFirstPageSubmit && isLast && !isFirst\">\r\n <button tabindex=\"0\" class=\"reverse\" mat-button matStepperPrevious (keyup.enter)=\"prevPage(activeIndex)\" (click)=\"prevPage(activeIndex)\">{{'common.back'| translate}}</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"complete()\" (click)=\"complete()\">{{'common.done'| translate}}</button>\r\n </div>\r\n\r\n <div *ngIf=\"!questions[0].isFirstPageSubmit && !isLast && !isFirst\">\r\n <button tabindex=\"0\" class=\"reverse\" editable=\"false\" mat-button matStepperPrevious \r\n (keyup.enter)=\"prevPage(activeIndex)\" (click)=\"prevPage(activeIndex)\">{{'common.back'| translate}}</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"nextPage(activeIndex)\" (click)=\"nextPage(activeIndex)\">{{'common.next'| translate}}</button>\r\n </div>\r\n\r\n <div *ngIf=\"isEnableBackButton && !questions[0].isFirstPageSubmit && !isLast && isFirst\">\r\n <button tabindex=\"0\" class=\"reverse\" editable=\"false\" mat-button matStepperPrevious \r\n (keyup.enter)=\"cancelAction()\" (click)=\"cancelAction()\">{{'common.back'| translate}}</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (click)=\"nextPage(activeIndex)\" (keyup.enter)=\"nextPage(activeIndex)\">{{'common.next'| translate}}</button>\r\n </div>\r\n\r\n\r\n </mat-step>\r\n\r\n </mat-horizontal-stepper>\r\n\r\n </div>\r\n\r\n </ion-footer>\r\n </form>\r\n\r\n\r\n\r\n\r\n <!-- <div *ngIf=\"payLoad\" class=\"form-row\">\r\n <strong>Saved the following values</strong><br>{{payLoad}}\r\n </div> -->\r\n\r\n\r\n</div>\r\n\r\n<app-lexis-nexis *ngIf=\"isLexisNexisPopupEnabled\" [display]=\"isLexisNexisPopupEnabled\" [page]=\"flowKey\" [userDetails]=\"userDetails\" (success)=\"onLnSuccess()\" (error)=\"onLNError()\" (usps)=\"triggerUSPS()\"></app-lexis-nexis>\r\n<app-mfa #mfa [user]=\"ls.getUser()\" *ngIf=\"showMfa\" (success)=\"saveScreenQuestionnaire($event)\" [data]=\"mfaData\" [requestCode]=\"true\" \r\n [mfaError]=\"mfaError\" [hideButtons]=\"true\"></app-mfa>", styles: [":host ::ng-deep .flex-container.ng-star-inserted{display:inline-flex!important}:host ::ng-deep .p-fluid .p-buttonset{display:initial!important}:host ::ng-deep form{margin-left:5px}:host ::ng-deep .p-fluid .p-calendar{display:inline-flex!important;width:60%!important}:host ::ng-deep .p-fluid .p-calendar .p-inputtext{width:100%!important}:host ::ng-deep .p-fluid .p-autocomplete{display:inline-flex!important}.pageTitle{font-weight:600;position:absolute;right:48%}.share-row{display:inline-block;margin-right:10px}.share-row>money-expect{float:right}@media (max-width: 280px){:host ::ng-deep span.start{font-size:18px;top:46px;position:relative}:host ::ng-deep .mat-stepper-horizontal-line{display:none}:host ::ng-deep .mat-horizontal-stepper-header{padding:0 28px!important}:host ::ng-deep .mat-horizontal-stepper-header-container{left:46px!important}:host ::ng-deep .mat-step-label{display:none!important}}@media (max-width: 576px){:host ::ng-deep span.p-steps-title.ng-star-inserted{display:none!important}:host ::ng-deep .p-steps.p-steps-item.p-menuitem-link.p-steps-title{display:none!important}:host ::ng-deep .backinc{position:absolute;left:25px}:host ::ng-deep .mat-step-label{display:none!important}:host ::ng-deep .mat-step-label.mat-step-label-active{display:none!important;position:absolute;bottom:0;right:0}}@media (max-width: 576px) and (min-width: 576px){.pageTitle{display:none!important}.backinc{position:absolute;left:125px}}@media (max-width: 415px){:host ::ng-deep .mat-horizontal-stepper-header-container{width:60%!important;left:46px!important}:host ::ng-deep .reverse{left:5px!important}:host ::ng-deep .forward{right:5px!important}}:host ::ng-deep .mat-stepper-horizontal,:host ::ng-deep .mat-stepper-vertical{height:70px}:host ::ng-deep .mat-horizontal-stepper-header{padding:0 40px}:host ::ng-deep .mat-step-label{min-width:120px;bottom:5px}:host ::ng-deep .mat-step-header .mat-step-label.mat-step-label-active{bottom:5px}:host ::ng-deep .mat-step-header:hover:hover{background-color:#fff!important}:host ::ng-deep .mat-horizontal-stepper-header{pointer-events:none!important}:host ::ng-deep .mat-step-header .mat-step-icon{background-color:#bdcad2;color:#bdcad2}:host ::ng-deep .mat-step-header .mat-step-icon-selected{color:#fff;background-color:var(--ion-color-primary)}:host ::ng-deep .mat-step-header .mat-step-label.mat-step-label-selected{color:var(--ion-color-primary)}:host ::ng-deep mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:var(--ion-color-primary)!important;font-weight:700}:host ::ng-deep .mat-step-header .mat-step-icon-selected mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:#fff!important;font-weight:700}:host ::ng-deep button{background-color:var(--ion-color-primary);color:#fff}:host ::ng-deep .reverse{background-color:#fff;border:1px solid var(--ion-color-primary);border-radius:30px;color:var(--ion-color-primary)!important;position:absolute;bottom:15px;left:40px;cursor:pointer}:host ::ng-deep .mat-horizontal-stepper-header-container{width:50%;position:sticky;left:100px}:host ::ng-deep .forward{position:absolute;right:40px;bottom:15px;border-radius:30px;cursor:pointer}:host ::ng-deep .reset{position:absolute;right:50px;bottom:40px;border-radius:30px}:host ::ng-deep .placeholder{visibility:hidden}:host ::ng-deep .ui-state-complete .ui-steps-number{background-color:green!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-number{background-color:var(--ion-color-primary)!important;background-size:20px;color:var(--ion-color-primary)!important}:host ::ng-deep .p-steps .p-steps-item .p-menuitem-link .p-steps-number{color:var(--ion-color-grey);background-size:15px;font-size:.857rem;min-width:1.714rem;height:1.714rem;line-height:1.714rem}:host ::ng-deep div.p-formgrid.p-grid.ng-star-inserted{flex-wrap:wrap!important}:host ::ng-deep .p-steps .p-steps-item.p-menuitem-link .p-steps-number{background-color:var(--ion-color-primary-shade)}:host ::ng-deep ion-footer{bottom:0}:host ::ng-deep .second{right:45%}:host ::ng-deep .mat-button.mat-primary[disabled],:host ::ng-deep .mat-button.mat-accent[disabled],:host ::ng-deep .mat-button.mat-warn[disabled],:host ::ng-deep .mat-button[disabled][disabled],:host ::ng-deep .mat-icon-button.mat-primary[disabled],:host ::ng-deep .mat-icon-button.mat-accent[disabled],:host ::ng-deep .mat-icon-button.mat-warn[disabled],:host ::ng-deep .mat-icon-button[disabled][disabled],:host ::ng-deep .mat-stroked-button.mat-primary[disabled],:host ::ng-deep .mat-stroked-button.mat-accent[disabled],:host ::ng-deep .mat-stroked-button.mat-warn[disabled],:host ::ng-deep .mat-stroked-button[disabled][disabled]{border:1px solid lightgray}:host ::ng-deep h1,:host ::ng-deep h2,:host ::ng-deep h3,:host ::ng-deep h4,:host ::ng-deep h5,:host ::ng-deep h6{margin-top:0!important;margin-bottom:0!important}.footer-fixed{position:fixed!important}.footer-sticky{position:sticky}@media (max-width: 768px){.footer-fixed{position:sticky}}.fb-heading{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:36px}.fb-heading-followup{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:24px}.qe-form{margin-bottom:96px}.qe-form-multiple{margin-bottom:8px}.fb-heading:focus{outline-color:#4478aa}:host ::ng-deep .mat-step-header[aria-selected=false] .mat-step-icon-state-number{background-color:var(--ion-color-primary);color:#fff}:host ::ng-deep .mat-step-header[aria-selected=true] .mat-step-icon-state-edit,:host ::ng-deep .mat-step-header[aria-selected=true] .mat-step-icon-state-done{background-color:#0b58a3;color:#fff}\n"] }]
1600
+ }], template: "<p-blockUI [blocked]=\"blockUi\">\r\n <ion-spinner name=\"crescent\"></ion-spinner>\r\n</p-blockUI>\r\n<div *ngIf=\"questions && questions[0] && !showMfa\" #formMainDiv>\r\n <form focusInvalidInput [formGroup]=\"formGroupArray[activeIndex]\" [ngClass]=\"multiMode ? 'qe-form-multiple' : 'qe-form'\" (ngSubmit)=\"onSubmit()\" #questionnaireForm=\"ngForm\">\r\n <ion-grid>\r\n <ion-row *ngIf=\"questions[0].pages[activeIndex].name\">\r\n <ion-col size=\"12\" [sizeXs]=\"sizeXs\" [sizeSm]=\"sizeSm\" [sizeMd]=\"sizeMd\" [sizeLg]=\"sizeLg\" [sizeXl]=\"sizeXl\"\r\n [offsetXs]=\"offsetXs\" [offsetSm]=\"offsetSm\" [offsetMd]=\"offsetMd\" [offsetLg]=\"offsetLg\" [offsetXl]=\"offsetXl\">\r\n <div class=\"p-formgrid\">\r\n <div tabindex=\"0\" [innerHtml]=\"(questionNumber ? questionNumber + ' ' : '') + questions[0].pages[activeIndex].name | dynamicTranslate:dynamicParam | trustHtml\" [ngClass]=\"multiMode ? 'fb-heading-followup' : 'fb-heading'\" role=\"heading\" aria-level=\"1\">\r\n </div>\r\n </div>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row>\r\n <ion-col style=\"padding-left: 0px;\" class=\"ion-padding-end\" size=\"12\" [sizeXs]=\"sizeXs\" [sizeSm]=\"sizeSm\"\r\n [sizeMd]=\"sizeMd\" [sizeLg]=\"sizeLg\" [sizeXl]=\"sizeXl\" [offsetXs]=\"offsetXs\" [offsetSm]=\"offsetSm\"\r\n [offsetMd]=\"offsetMd\" [offsetLg]=\"offsetLg\" [offsetXl]=\"offsetXl\">\r\n <div class=\"p-formgrid\" style=\"padding-left: 8px;\">\r\n <ng-container *ngFor=\"let element of questions[0].pages[activeIndex].elements; let i = index\">\r\n <ng-container *ngIf=\"element.type==='panel'\">\r\n\r\n <ion-row *ngIf=\"visibleIf(element.visibleIf,'',formGroupArray[activeIndex],element)\">\r\n <!-- <ion-col style=\"padding-left: 0px;\"> -->\r\n <div style=\"padding-left: 0px;\" class=\"heading\" role=\"heading\" aria-level=\"1\">\r\n {{element.title}}\r\n </div>\r\n <!-- </ion-col> -->\r\n </ion-row>\r\n <ion-row>\r\n <ng-container *ngFor=\"let panelElement of element.elements\">\r\n <div class=\"share-row\" *ngIf=\"panelElement.colElement==='COL1' && visibleIf(panelElement.visibleIf,panelElement.name,formGroupArray[activeIndex],panelElement)\">\r\n\r\n <app-question [potentialIssueId]=\"potentialIssueId\" [question]=\"panelElement\" [form]=\"formGroupArray[activeIndex]\"\r\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\" (onDynamicParamUpdate)=\"updateDynamicParam($event)\" [dynamicParam]=\"dynamicParam\">\r\n </app-question>\r\n </div>\r\n\r\n \r\n <!-- <ion-col size=\"1\" *ngIf=\"panelElement.description\" style=\"padding-top: 28px\">\r\n <app-overlay-info [overlayText]=\"panelElement.description\"></app-overlay-info>\r\n </ion-col> -->\r\n </ng-container>\r\n </ion-row>\r\n <!-- </ion-col>\r\n </ion-row> -->\r\n\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"element.type!='panel' && element.type!='hidden' && visibleIf(element.visibleIf,element.name,formGroupArray[activeIndex],element)\">\r\n <ion-row>\r\n <ion-col [sizeLg]=\"element.sizeLG>0?element.sizeLG:''\" [sizeSm]=\"element.sizeSM\"\r\n [sizeXs]=\"element.sizeXS\" [sizeXl]=\"element.sizeXL>0 ?element.sizeXL:''\"\r\n [sizeMd]=\"element.sizeMD>0 ?element.sizeMD:''\" style=\"padding-left: 0px;\">\r\n <!-- <div class=\"field\"> -->\r\n <app-question [potentialIssueId]=\"potentialIssueId\" [question]=\"element\" [form]=\"formGroupArray[activeIndex]\"\r\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\" [dynamicParam]=\"dynamicParam\" \r\n (onDynamicParamUpdate)=\"updateDynamicParam($event)\" >\r\n </app-question>\r\n <!-- </div> -->\r\n </ion-col>\r\n <!-- <ion-col size=\"1\" *ngIf=\"element.description\" style=\"padding-top: 35px\">\r\n <app-overlay-info [overlayText]=\"element.description\"></app-overlay-info>\r\n </ion-col> -->\r\n </ion-row>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ion-col>\r\n <ion-col class=\"ion-padding-start\" size=\"12\" sizeSm=\"12\" sizeXs=\"12\" [sizeMd]=\"pageType==='POPUP'?6:12\"\r\n [sizeLg]=\"pageType==='POPUP'?6:10\" [sizeXl]=\"pageType==='POPUP'?5:10\" style=\"padding-left: 0px;\"\r\n [offsetXl]=\"pageType==='POPUP'?0:1\" [offsetLg]=\"pageType==='POPUP'?0:1\">\r\n <div class=\"p-formgrid\" style=\"padding-left: 8px;\">\r\n <ng-container *ngFor=\"let element of questions[0].pages[activeIndex].elements; let i = index\">\r\n <ng-container *ngIf=\" visibleIf(element.visibleIf,'',formGroupArray[activeIndex],element)\">\r\n \r\n <ng-container *ngFor=\"let panelElement of element.elements\">\r\n <div *ngIf=\"panelElement.colElement==='COL2' &&\r\n visibleIf(panelElement.visibleIf,panelElement.name,formGroupArray[activeIndex],panelElement)\">\r\n <div>\r\n <panel-app [question]=\"panelElement\" [form]=\"formGroupArray[activeIndex]\"\r\n [forScreenQuestionnaire]=\"forScreenQuestionnaire\">\r\n </panel-app>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n\r\n <ion-footer *ngIf=\"!hideFooter\"\r\n [ngClass]=\"'footer-fixed'\">\r\n <div style=\"text-align: right; background: white; margin-left: -5px;\"\r\n *ngIf=\"hideStep && pageType!='POPUP' && pageType!='SCREEN'\">\r\n <div class=\"grid p-nogutter\" style=\"height: 60px;\">\r\n <div class=\"col-6 ion-text-left\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelAction()\" type=\"submit\">\r\n Cancel\r\n </ion-button>\r\n </div>\r\n <div class=\"col-6 ion-text-right\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\r\n Next\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"text-align: right; background: white; margin-left: -5px;\"\r\n *ngIf=\"hideStep && pageType=='SCREEN' && questions[0].isFirstPageSubmit\">\r\n <div class=\"grid p-nogutter\" style=\"height: 60px;\">\r\n <div class=\"col-6 ion-text-left\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelAction()\" type=\"submit\">\r\n Cancel\r\n </ion-button>\r\n </div>\r\n <div class=\"col-6 ion-text-right\" style=\"padding: 8px;\">\r\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\r\n Done\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n <ion-grid *ngIf=\"hideStep && pageType==='POPUP'\">\r\n <ion-row>\r\n <ion-col class=\"ion-text-left ion-padding-start\">\r\n <ion-button shape=\"round\" fill=\"outline\" class=\"button\" (click)=\"cancelPopUp()\" type=\"submit\">\r\n Cancel\r\n </ion-button>\r\n </ion-col>\r\n <ion-col class=\"ion-text-right ion-padding-end\">\r\n <ion-button shape=\"round\" (click)=\"complete()\" fill=\"solid\" type=\"submit\">\r\n Add\r\n </ion-button>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n\r\n\r\n\r\n\r\n <div *ngIf=\"!hideStep\">\r\n <mat-horizontal-stepper linear #matHorizontalStepper [selectedIndex]=\"questions[0].stepCounter\"\r\n (selectionChange)=\"stepChanged($event);\" style=\"text-align: -webkit-center;\" aria-busy=\"true\">\r\n <mat-step *ngFor=\"let element of questions[0].pages; let i = index;\" [stepControl]=\"formGroupArray[i]\"\r\n [completed]=\" i < activeIndex \">\r\n\r\n <div>\r\n <ng-template matStepLabel>{{questions[0].pages[i].navigationTitle}}</ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"!questions[0].isFirstPageSubmit && !isLast && isFirst && !isEnableBackButton\">\r\n <button tabindex=\"0\" class=\"reverse\" (keyUp.enter)=\"navCtrl.navigateRoot('claimant-induction')\" (click)=\"navCtrl.navigateRoot('claimant-induction')\" mat-button matStepperPrevious>Back</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"nextPage(activeIndex)\" (click)=\"nextPage(activeIndex)\">Next</button>\r\n </div>\r\n\r\n <div *ngIf=\"questions[0].isFirstPageSubmit\">\r\n <button tabindex=\"0\" class=\"reverse\" (keyUp.enter)=\"cancelAction()\" (click)=\"cancelAction()\" mat-button matStepperPrevious>Back</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"complete()\" (click)=\"complete()\">Next</button>\r\n </div>\r\n\r\n <div *ngIf=\"!questions[0].isFirstPageSubmit && isLast && !isFirst\">\r\n <button tabindex=\"0\" class=\"reverse\" mat-button matStepperPrevious (keyup.enter)=\"prevPage(activeIndex)\" (click)=\"prevPage(activeIndex)\">Back</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"complete()\" (click)=\"complete()\">Done</button>\r\n </div>\r\n\r\n <div *ngIf=\"!questions[0].isFirstPageSubmit && !isLast && !isFirst\">\r\n <button tabindex=\"0\" class=\"reverse\" editable=\"false\" mat-button matStepperPrevious \r\n (keyup.enter)=\"prevPage(activeIndex)\" (click)=\"prevPage(activeIndex)\">Back</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (keyup.enter)=\"nextPage(activeIndex)\" (click)=\"nextPage(activeIndex)\">Next</button>\r\n </div>\r\n\r\n <div *ngIf=\"isEnableBackButton && !questions[0].isFirstPageSubmit && !isLast && isFirst\">\r\n <button tabindex=\"0\" class=\"reverse\" editable=\"false\" mat-button matStepperPrevious \r\n (keyup.enter)=\"cancelAction()\" (click)=\"cancelAction()\">Back</button>\r\n <button tabindex=\"0\" class=\"forward\" mat-button matStepperNext (click)=\"nextPage(activeIndex)\" (keyup.enter)=\"nextPage(activeIndex)\">Next</button>\r\n </div>\r\n\r\n\r\n </mat-step>\r\n\r\n </mat-horizontal-stepper>\r\n\r\n </div>\r\n\r\n </ion-footer>\r\n </form>\r\n\r\n\r\n\r\n\r\n <!-- <div *ngIf=\"payLoad\" class=\"form-row\">\r\n <strong>Saved the following values</strong><br>{{payLoad}}\r\n </div> -->\r\n\r\n\r\n</div>\r\n\r\n<app-lexis-nexis *ngIf=\"isLexisNexisPopupEnabled\" [display]=\"isLexisNexisPopupEnabled\" [page]=\"flowKey\" [userDetails]=\"userDetails\" (success)=\"onLnSuccess()\" (error)=\"onLNError()\" (usps)=\"triggerUSPS()\"></app-lexis-nexis>\r\n<app-mfa #mfa [user]=\"ls.getUser()\" *ngIf=\"showMfa\" (success)=\"saveScreenQuestionnaire($event)\" [data]=\"mfaData\" [requestCode]=\"true\" \r\n [mfaError]=\"mfaError\" [hideButtons]=\"true\"></app-mfa>", styles: [":host ::ng-deep .flex-container.ng-star-inserted{display:inline-flex!important}:host ::ng-deep .p-fluid .p-buttonset{display:initial!important}:host ::ng-deep form{margin-left:5px}:host ::ng-deep .p-fluid .p-calendar{display:inline-flex!important;width:60%!important}:host ::ng-deep .p-fluid .p-calendar .p-inputtext{width:100%!important}:host ::ng-deep .p-fluid .p-autocomplete{display:inline-flex!important}.pageTitle{font-weight:600;position:absolute;right:48%}.share-row{display:inline-block;margin-right:10px}.share-row>money-expect{float:right}@media (max-width: 280px){:host ::ng-deep span.start{font-size:18px;top:46px;position:relative}:host ::ng-deep .mat-stepper-horizontal-line{display:none}:host ::ng-deep .mat-horizontal-stepper-header{padding:0 28px!important}:host ::ng-deep .mat-horizontal-stepper-header-container{left:46px!important}:host ::ng-deep .mat-step-label{display:none!important}}@media (max-width: 576px){:host ::ng-deep span.p-steps-title.ng-star-inserted{display:none!important}:host ::ng-deep .p-steps.p-steps-item.p-menuitem-link.p-steps-title{display:none!important}:host ::ng-deep .backinc{position:absolute;left:25px}:host ::ng-deep .mat-step-label{display:none!important}:host ::ng-deep .mat-step-label.mat-step-label-active{display:none!important;position:absolute;bottom:0;right:0}}@media (max-width: 576px) and (min-width: 576px){.pageTitle{display:none!important}.backinc{position:absolute;left:125px}}@media (max-width: 415px){:host ::ng-deep .mat-horizontal-stepper-header-container{width:60%!important;left:46px!important}:host ::ng-deep .reverse{left:5px!important}:host ::ng-deep .forward{right:5px!important}}:host ::ng-deep .mat-stepper-horizontal,:host ::ng-deep .mat-stepper-vertical{height:70px}:host ::ng-deep .mat-horizontal-stepper-header{padding:0 40px}:host ::ng-deep .mat-step-label{min-width:120px;bottom:5px}:host ::ng-deep .mat-step-header .mat-step-label.mat-step-label-active{bottom:5px}:host ::ng-deep .mat-step-header:hover:hover{background-color:#fff!important}:host ::ng-deep .mat-horizontal-stepper-header{pointer-events:none!important}:host ::ng-deep .mat-step-header .mat-step-icon{background-color:#bdcad2;color:#bdcad2}:host ::ng-deep .mat-step-header .mat-step-icon-selected{color:#fff;background-color:var(--ion-color-primary)}:host ::ng-deep .mat-step-header .mat-step-label.mat-step-label-selected{color:var(--ion-color-primary)}:host ::ng-deep mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:var(--ion-color-primary)!important;font-weight:700}:host ::ng-deep .mat-step-header .mat-step-icon-selected mat-icon.mat-icon.notranslate.material-icons.mat-icon-no-color.ng-star-inserted{color:#fff!important;font-weight:700}:host ::ng-deep button{background-color:var(--ion-color-primary);color:#fff}:host ::ng-deep .reverse{background-color:#fff;border:1px solid var(--ion-color-primary);border-radius:30px;color:var(--ion-color-primary)!important;position:absolute;bottom:15px;left:40px;cursor:pointer}:host ::ng-deep .mat-horizontal-stepper-header-container{width:50%;position:sticky;left:100px}:host ::ng-deep .forward{position:absolute;right:40px;bottom:15px;border-radius:30px;cursor:pointer}:host ::ng-deep .reset{position:absolute;right:50px;bottom:40px;border-radius:30px}:host ::ng-deep .placeholder{visibility:hidden}:host ::ng-deep .ui-state-complete .ui-steps-number{background-color:green!important}:host ::ng-deep .p-steps .p-steps-item.p-highlight .p-steps-number{background-color:var(--ion-color-primary)!important;background-size:20px;color:var(--ion-color-primary)!important}:host ::ng-deep .p-steps .p-steps-item .p-menuitem-link .p-steps-number{color:var(--ion-color-grey);background-size:15px;font-size:.857rem;min-width:1.714rem;height:1.714rem;line-height:1.714rem}:host ::ng-deep div.p-formgrid.p-grid.ng-star-inserted{flex-wrap:wrap!important}:host ::ng-deep .p-steps .p-steps-item.p-menuitem-link .p-steps-number{background-color:var(--ion-color-primary-shade)}:host ::ng-deep ion-footer{bottom:0}:host ::ng-deep .second{right:45%}:host ::ng-deep .mat-button.mat-primary[disabled],:host ::ng-deep .mat-button.mat-accent[disabled],:host ::ng-deep .mat-button.mat-warn[disabled],:host ::ng-deep .mat-button[disabled][disabled],:host ::ng-deep .mat-icon-button.mat-primary[disabled],:host ::ng-deep .mat-icon-button.mat-accent[disabled],:host ::ng-deep .mat-icon-button.mat-warn[disabled],:host ::ng-deep .mat-icon-button[disabled][disabled],:host ::ng-deep .mat-stroked-button.mat-primary[disabled],:host ::ng-deep .mat-stroked-button.mat-accent[disabled],:host ::ng-deep .mat-stroked-button.mat-warn[disabled],:host ::ng-deep .mat-stroked-button[disabled][disabled]{border:1px solid lightgray}:host ::ng-deep h1,:host ::ng-deep h2,:host ::ng-deep h3,:host ::ng-deep h4,:host ::ng-deep h5,:host ::ng-deep h6{margin-top:0!important;margin-bottom:0!important}.footer-fixed{position:fixed!important}.footer-sticky{position:sticky}@media (max-width: 768px){.footer-fixed{position:sticky}}.fb-heading{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:36px}.fb-heading-followup{font-family:var(--app-font-light);color:var(--ion-color-medium-gray);font-size:24px}.qe-form{margin-bottom:96px}.qe-form-multiple{margin-bottom:8px}.fb-heading:focus{outline-color:#4478aa}:host ::ng-deep .mat-step-header[aria-selected=false] .mat-step-icon-state-number{background-color:var(--ion-color-primary);color:#fff}:host ::ng-deep .mat-step-header[aria-selected=true] .mat-step-icon-state-edit,:host ::ng-deep .mat-step-header[aria-selected=true] .mat-step-icon-state-done{background-color:#0b58a3;color:#fff}\n"] }]
1682
1601
  }], () => [{ type: i1.QuestionService }, { type: i2.QuestionnaireService }, { type: i3.NavController }, { type: i4.QuestionControlService }, { type: i5.UtilService }, { type: i6.TranslateService }, { type: i7.LoggerService }, { type: i8.ValidationService }, { type: i0.ElementRef }, { type: i9.ActivatedRoute }, { type: i10.Storage }, { type: i11.LoginService }, { type: i12.CaptchaService }, { type: i13.LexisNexisService }, { type: i9.Router }], { mfa: [{
1683
1602
  type: ViewChild,
1684
1603
  args: ['mfa']
@@ -1754,4 +1673,4 @@ export class DynamicFormComponent extends BasePage {
1754
1673
  type: Output
1755
1674
  }] }); })();
1756
1675
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DynamicFormComponent, { className: "DynamicFormComponent", filePath: "lib\\components\\questionnaire\\dynamic-form.component.ts", lineNumber: 50 }); })();
1757
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL2R5bmFtaWMtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQW9CLFVBQVUsRUFBb0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJaEQsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBSXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTVDLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUM1QmhELCtCQUFzRCxrQkFBQSxjQUFBO0lBSWhELDBCQUNNOzs7SUFDUixpQkFBTSxFQUFBLEVBQUE7OztJQUxXLGVB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QUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNLLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFKO1NBQ0Y7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElB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Q0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckwsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hLLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9LLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzlKO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNqTCxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUosS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0ssR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUo7U0FDRjtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFH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QUFJO2tCQUFaLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csWUFBWTtrQkFBcEIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLGNBQWM7a0JBQXRCLEtBQUs7WUFFRyxNQUFNO2tCQUFkLEtBQUs7WUFDRyxNQUFNO2tCQUFkLEtBQUs7WUFDRyxNQUFNO2tCQUFkLEtBQUs7WUFDRyxNQUFNO2tCQUFkLEtBQUs7WUFDRyxNQUFNO2tCQUFkLEtBQUs7WUFFRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQStCRixPQUFPO2tCQURWLE1BQU07O2tGQTdFSSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBRdWVzdGlvbkJhc2UgfSBmcm9tICcuL3F1ZXN0aW9uLWJhc2UnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbkNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9xdWVzdGlvbi1jb250cm9sLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBWYWxpZGF0b3JzIH0gZnJvbSAnLi9BcHBWYWxpZGF0b3JzJztcclxuXHJcbmltcG9ydCB7IFF1ZXN0aW9uU2VydmljZSB9IGZyb20gJy4vcXVlc3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbmltcG9ydCB7IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCwgU1RFUFBFUl9HTE9CQUxfT1BUSU9OUyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVlc3Rpb25uYWlyZS92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUvcXVlc3Rpb25uYWlyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlU2F2ZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvUXVlc3Rpb25uYWlyZVNhdmVNb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXRpbC91dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVBhZ2UgfSBmcm9tICcuLi8uLi9wYWdlcy9CYXNlUGFnZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVRdWVyeU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvUXVlc3Rpb25uYWlyZVF1ZXJ5TW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgRmJDb25zdGFudHMgfSBmcm9tICcuL0ZiQ29uc3RhbnRzJztcclxuaW1wb3J0IHsgRWxlbWVudHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0VsZW1lbnRzTW9kZWwnO1xyXG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9FcnJvck1vZGVsJztcclxuaW1wb3J0IHsgTWZhQ29tcG9uZW50IH0gZnJvbSAnLi4vbWZhL21mYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2FkZXJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0xvYWRlck1vZGVsJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENhcHRjaGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FwdGNoYS9jYXB0Y2hhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBMZXhpc05leGlzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xleGlzLW5leGlzL2xleGlzLm5leGlzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMZXhpc05leGlzQWNjb3VudENyZWF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvTGV4aXNOZXhpc0FjY291bnRDcmVhdGlvbk1vZGVsJztcclxuaW1wb3J0IHsgTGV4aXNOZXhpc0VuYWJsZWRSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0xleGlzTmV4aXNFbmFibGVkUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEFwcFJlZ2V4IH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbnMvQXBwUmVnZXgnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1keW5hbWljLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcclxuICBwcm92aWRlcnM6IFtRdWVzdGlvbkNvbnRyb2xTZXJ2aWNlLCB7XHJcbiAgICBwcm92aWRlOiBTVEVQUEVSX0dMT0JBTF9PUFRJT05TLFxyXG4gICAgdXNlVmFsdWU6IHtcclxuICAgICAgc2hvd0Vycm9yOiB0cnVlLFxyXG4gICAgICBkaXNwbGF5RGVmYXVsdEluZGljYXRvclR5cGU6IGZhbHNlXHJcbiAgICB9XHJcbiAgfV0sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlUGFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBcclxuICBAVmlld0NoaWxkKCdtZmEnKSBtZmE6IE1mYUNvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgncXVlc3Rpb25uYWlyZUZvcm0nLCB7c3RhdGljIDogZmFsc2V9KSBcclxuICBwdWJsaWMgcXVlc3Rpb25uYWlyZUZvcm06IE5nRm9ybTtcclxuICBwdWJsaWMgcG90ZW50aWFsSXNzdWVJZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBibG9ja1VpID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dNZmEgPSBmYWxzZTtcclxuICBASW5wdXQoKSBxdWVzdGlvbnM6IFF1ZXN0aW9uQmFzZTxzdHJpbmc+W10gPSBbXTtcclxuICBASW5wdXQoKSBmb3JTY3JlZW5RdWVzdGlvbm5haXJlOiBRdWVzdGlvbkJhc2U8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgaXNFbmFibGVCYWNrQnV0dG9uOkJvb2xlYW47XHJcbiAgQElucHV0KCkgYmFja0J1dHRvblBhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBuZXh0QnV0dG9uUGFnZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBhZ2VUeXBlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaGlkZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZTogYm9vbGVhbiA9IGZhbHNlOyAvL3doZW4gbXVsdGlwbGUgZm9ybXMgYXJlIGRpc3BsYXllZCBvbmUgYmVsb3cgdGhlIGFub3RoZXJcclxuICBASW5wdXQoKSBsb2FkZXJTZXJ2aWNlOnN0cmluZztcclxuICBwdWJsaWMgbG9hZGVyTW9kZWwgOiBMb2FkZXJNb2RlbDtcclxuICAvKipcclxuICAgKiB3aGVuIGF1dG9TYXZlIGlzIGZhbHNlLCBjb21wb25lbnQgd2lsbCBvbmx5IGVtaXQgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGJ1aWxlciBkYXRhIHdoaWNoIG5lZWRzIHRvIGJlIHNhdmVkIGJ5IHRoZSBjYWxsaW5nIGNvbXBvbmVudFxyXG4gICAqIG9ubHkgYXBwbGljYWJsZSB3aGVuIHBhZ2VUeXBlIGlzIG5vdCBQT1BVUCBhbmQgSlNPTlxyXG4gICoqL1xyXG4gIEBJbnB1dCgpIGF1dG9TYXZlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBtZmFSZXF1aXJlZCA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgbW9kZWxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZCgnbWF0SG9yaXpvbnRhbFN0ZXBwZXInKSBzdGVwcGVyOiBNYXRTdGVwcGVyO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuICBASW5wdXQoKSByZWFkT25seUZpZWxkczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgZm9ybVJlYWRPbmx5OiBCb29sZWFuO1xyXG4gIEBJbnB1dCgpIHF1ZXJ5TW9kZWw6IFF1ZXN0aW9ubmFpcmVRdWVyeU1vZGVsO1xyXG4gIEBJbnB1dCgpIGR5bmFtaWNQYXJhbSA6IGFueTtcclxuICBASW5wdXQoKSBmb3JtRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uTnVtYmVyOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBzaXplWHMgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZVNtIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNpemVNZCA6IG51bWJlcjtcclxuICBASW5wdXQoKSBzaXplTGcgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZVhsIDogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBvZmZzZXRYcyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRTbSA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRNZCA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRMZyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRYbCA6IG51bWJlcjtcclxuXHJcbiAgLy8gZm9ybTogRm9ybUdyb3VwO1xyXG4gIGZvcm1Hcm91cEFycmF5OiBVbnR5cGVkRm9ybUdyb3VwW10gPSBbXTtcclxuICBwYXlMb2FkID0gJyc7XHJcbiAgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuICBpc0ZpcnN0OiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0xhc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoaWRlU3RlcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlkZW50aWZpZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgYWN0aXZlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgZXJyb3JPY2N1cmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWZhRGF0YSA6IGFueTtcclxuICBtZmFFcnJvciA6IEVycm9yTW9kZWw7XHJcbiAgc3NuRm9yQ1NSIDogc3RyaW5nO1xyXG4gIHBheW1lbnREZXRhaWxDaGFuZ2VIYXNFcnJvciA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMZXhpc05leGlzUG9wdXBFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5wdXREYXRhIDogUXVlc3Rpb25uYWlyZVNhdmVNb2RlbDtcclxuICByZXNwb25zZVV1aWQgOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHVzZXJEZXRhaWxzIDogTGV4aXNOZXhpc0FjY291bnRDcmVhdGlvbk1vZGVsO1xyXG4gIGZvcm1SYXdEYXRhIDogYW55O1xyXG4gIGZsb3dLZXkgOiBudW1iZXI7XHJcblxyXG4gICBCYW5rRGV0YWlsc0ludmFsaWRFcnJvcjogc3RyaW5nPVwiXCI7XHJcbiAgIHJvdXRpbmdOdW1iZXJmbGFnIDogYm9vbGVhbiA9IHRydWU7XHJcbiAgIGFjY291bnROdW1iZXJmbGc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICByZUVudGVyQWNjb3VudE51bWJlcmZsYWc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIEBPdXRwdXQoKVxyXG4gIGdldCBpbnZhbGlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwQXJyYXkubWFwKHggPT4geC5pbnZhbGlkKS5yZWR1Y2UoKGEsYikgPT4gYSAmJiBiKTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IocHVibGljIHFlczogUXVlc3Rpb25TZXJ2aWNlLCBwdWJsaWMgcXVlc3Rpb25uYWlyZVNlcnZpY2U6IFF1ZXN0aW9ubmFpcmVTZXJ2aWNlLCBwdWJsaWMgbmF2Q3RybDogTmF2Q29udHJvbGxlcixcclxuICAgIHByaXZhdGUgcWNzOiBRdWVzdGlvbkNvbnRyb2xTZXJ2aWNlLCBwdWJsaWMgdXRpbDogVXRpbFNlcnZpY2UscHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSwgcHVibGljIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSwgcHVibGljIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHB1YmxpYyBzdG9yYWdlIDogU3RvcmFnZSwgcHVibGljIGxzIDogTG9naW5TZXJ2aWNlLCBwdWJsaWMgY2FwdGNoYSA6IENhcHRjaGFTZXJ2aWNlLCBwdWJsaWMgbG46IExleGlzTmV4aXNTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5zdG9yYWdlLmNyZWF0ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIlN0b3JhZ2UgREIgY3JlYXRlZCBzdWNjZXNzZnVsbHkuXCIpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qVGhpcyB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBASW5wdXQgJ2Zvcm1EYXRhJyB2YWx1ZSBpcyBjaGFuZ2VkIGZvciB0aGlzIGNvbnRyb2wqLyAgIFxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmKGNoYW5nZXMuZm9ybURhdGE/LmN1cnJlbnRWYWx1ZSl7XHJcbiAgICAgIGlmKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlKXtcclxuICAgICAgICB0aGlzLnNldEZvcm1WYWx1ZXMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihjaGFuZ2VzLnJlYWRPbmx5RmllbGRzPy5jdXJyZW50VmFsdWUpe1xyXG4gICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgY2hhbmdlcy5yZWFkT25seUZpZWxkcy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZihjaGFuZ2VzLnJlYWRPbmx5RmllbGRzPy5wcmV2aW91c1ZhbHVlICYmIGNoYW5nZXMucmVhZE9ubHlGaWVsZHMuY3VycmVudFZhbHVlID09IG51bGwpe1xyXG4gICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgY2hhbmdlcy5yZWFkT25seUZpZWxkcy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKS5lbmFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZvcm1WYWx1ZXMoZGF0YSl7XHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKVxyXG4gICAgICAgICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlndXJhdGlvbihrZXkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVG9TZXQgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZihxdWVzdGlvbil7XHJcbiAgICAgICAgICAgICAgICAgIC8qKiBGb3IgZHJvcGRvd24gZm9ybSBjb250cm9sLCBleHBlY3RpbmcgdG8gZ2V0IGRhdGEgaW4gZm9ybSB7dmFsdWUgOiBcInNvbWVWYWx1ZVwiLCB0ZXh0OiBudWxsfS5cclxuICAgICAgICAgICAgICAgICAgICogQmFzZWQgb24gdGhlIHZhbHVlIGF0dHJpYnV0ZSwgb3B0aW9uIHdpbGwgYmUgc2V0IG9uIGZvcm0gY29udHJvbCBhZnRlciByZWFkaW5nIGl0IGZyb20gY2hvaWNlc1xyXG4gICAgICAgICAgICAgICAgICAgKiBhcnJheS5cclxuICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgaWYodmFsdWVUb1NldCl7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBjaG9pY2UgPSBxdWVzdGlvbi5jaG9pY2VzLmZpbHRlcihvID0+IG8udmFsdWUgPT0gKHZhbHVlVG9TZXQ/LnZhbHVlID8gdmFsdWVUb1NldC52YWx1ZSA6IHZhbHVlVG9TZXQpKVswXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUluRm9ybUNvbnRyb2woa2V5LCBjaG9pY2UpO1xyXG4gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlSW5Gb3JtQ29udHJvbChrZXksIHZhbHVlVG9TZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVJbkZvcm1Db250cm9sKG5hbWUsIHZhbHVlKXtcclxuICAgIGlmKHRoaXMuZm9ybUdyb3VwQXJyYXkgJiYgdGhpcy5mb3JtR3JvdXBBcnJheS5sZW5ndGggPiAwKXtcclxuICAgICAgbGV0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5jb250cm9sc1tuYW1lXTtcclxuICAgICAgaWYoY29udHJvbCl7XHJcbiAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlKTtcclxuICAgICAgfSBlbHNlIGlmKG5hbWUgPT0gJ2RlcGVuZGVudFRhYmxlJyl7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gZm9ybSBjb250cm9sIHByZXNlbnQgZGVwZW5kZW50VGFibGUgJywgbmFtZSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZvcm0gY29udHJvbCBwcmVzZW50IHdpdGggbmFtZSAnLCBuYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTm8gZm9ybSBncm91cCBwcmVzZW50IHNvIHNraXBwaW5nIHZhbHVlIGFzc2lnbm1lbnQgZnJvbSBkYXRhLlwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIFRvIGdldCB0aGUgZHJvcGRvd24gZWxlbWVudCBzbyB0aGF0IHZhbHVlIGZyb20gdGhlIGNob2ljZXMgY2FuIGJlIHJlYWQgYW5kIHNldCBpbnRvIHRoZSBmb3JtIGNvbnRyb2wqL1xyXG4gIGdldEZvcm1Db250cm9sQ29uZmlndXJhdGlvbihuYW1lKXtcclxuICAgIGxldCBmaWx0ZXJlZFZhbHVlcyA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW3RoaXMuYWN0aXZlSW5kZXhdLmVsZW1lbnRzLmZpbHRlcihxID0+IHEubmFtZSA9PSBuYW1lICYmIHEudHlwZSA9PSAnZHJvcGRvd24nKTtcclxuICAgIGlmKGZpbHRlcmVkVmFsdWVzICYmIGZpbHRlcmVkVmFsdWVzLmxlbmd0aCA+IDApe1xyXG4gICAgICByZXR1cm4gZmlsdGVyZWRWYWx1ZXNbMF07XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBMb2FkZXJNb2RlbCgpIHtcclxuICBcclxuICAgIGlmICh0aGlzLmxvYWRlclNlcnZpY2UpIHtcclxuICAgICAgbGV0IHNlcnZpY2VVcmxzOiBzdHJpbmdbXSA9IHRoaXMubG9hZGVyU2VydmljZS5zcGxpdCgnLCcpO1xyXG4gICAgICBsZXQgc2VydmljZVVybCA9IHNlcnZpY2VVcmxzW3RoaXMuYWN0aXZlSW5kZXhdO1xyXG4gICAgICBpZihzZXJ2aWNlVXJsLnRyaW0oKSAhPSAnbnVsbCcpe1xyXG4gICAgICB0aGlzLmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgIGxldCBzZXJ2aWNlVXJsVmFsdWUgPSBzZXJ2aWNlVXJsLnRyaW0oKTtcclxuICAgICAgaWYodGhpcy5scy5pc0NzcigpKXtcclxuICAgICAgICBzZXJ2aWNlVXJsVmFsdWUgPSBzZXJ2aWNlVXJsVmFsdWU7ICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmxzLmlzQ3NyKCkgPyB7IHBhcmFtczogbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3NzbicsIHRoaXMuc3NuRm9yQ1NSKSB9IDoge307XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2VcclxuICAgICAgICAuZ2V0PExvYWRlck1vZGVsPihgJHtzZXJ2aWNlVXJsVmFsdWV9YCwgb3B0aW9ucylcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXJNb2RlbCA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJsb2FkZXIgbW9kZWwgID0gXCIgKyB0aGlzLmxvYWRlck1vZGVsKTsgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmxvYWRlck1vZGVsICYmIHRoaXMubG9hZGVyTW9kZWwuZGlzYWJsZUNvbnRyb2xOYW1lcyl7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkT25seUZpZWxkcyA9IHRoaXMubG9hZGVyTW9kZWwuZGlzYWJsZUNvbnRyb2xOYW1lcztcclxuICAgICAgICAgICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgdGhpcy5yZWFkT25seUZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5xY3MuZ2V0RGF0YSh0aGlzLmFjdGl2ZUluZGV4KSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gSlNPTi5wYXJzZSh0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpKTtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdLnBhdGNoVmFsdWUodGhpcy5mb3JtRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5sb2FkZXJNb2RlbCAmJiB0aGlzLmxvYWRlck1vZGVsLmRhdGEpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSB0aGlzLmxvYWRlck1vZGVsLmRhdGE7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmVycm9ySGFuZGxlcihlcnIpO1xyXG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgICAgICAgIH0pXHJcbiAgICB9IFxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZih0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpICE9IG51bGwpe1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0gSlNPTi5wYXJzZSh0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpKTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XS5wYXRjaFZhbHVlKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5kYXRhKXtcclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgfSBlbHNlIGlmKHRoaXMuZm9ybURhdGEpe1xyXG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5mb3JtRGF0YSk7XHJcbiAgICB9ICBcclxuICB9IFxyXG59XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luaXQgbWV0aG9kIGNhbGxlZCBmcm9tIGR5bmFtaWMgZm9ybScsIHRoaXMucXVlc3Rpb25zKVxyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJyBiYWNrQnV0dG9uUGFnZSAnLCB0aGlzLmJhY2tCdXR0b25QYWdlLCAnIG5leHRCdXR0b25QYWdlJywgdGhpcy5uZXh0QnV0dG9uUGFnZSk7XHJcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25zKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5oaWRlU3RlcCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRmlyc3QgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGV0IHN0cktleSA9IFtdO1xyXG4gICAgbGV0IHBhcmFtTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBzdHJLZXkgPSBbXSA9IHBhcmFtcy5rZXlzO1xyXG4gICAgICB0aGlzLmlkZW50aWZpZXIgPSBwYXJhbXMuZ2V0KCdpZGVudGlmaWVyJyk7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyS2V5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3N0cmluZ0tleSAnLCBzdHJLZXlbaV0sIHBhcmFtcy5nZXQoc3RyS2V5W2ldKSk7XHJcbiAgICAgICAgcGFyYW1NYXAuc2V0KHN0cktleVtpXSwgcGFyYW1zLmdldChzdHJLZXlbaV0pKTtcclxuICAgICAgfVxyXG4gICAgICBpZihwYXJhbU1hcC5nZXQoXCJrZXlcIikgIT0gbnVsbCl7XHJcbiAgICAgICAgdGhpcy5zc25Gb3JDU1IgPSBhdG9iKHBhcmFtTWFwLmdldChcImtleVwiKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICk7XHJcbiAgICBcclxuICAgIGxldCBjb3VudGVyID0gdGhpcy5xdWVzdGlvbnNbMF0uc3RlcENvdW50ZXI7XHJcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gY291bnRlciA/IGNvdW50ZXIgOiAwIDtcclxuICAgIC8vdGhpcy5zdGVwcGVyXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiQmxvY2sgc3RhdGVtZW50IGV4ZWN1dGlvbiBuby5cIiwgdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoKTtcclxuICAgICAgZm9ybUdyb3VwID0gdGhpcy5xY3MudG9Gb3JtR3JvdXAodGhpcy5xdWVzdGlvbnMsIGksIHBhcmFtTWFwKTtcclxuICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uKGksIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICB0aGlzLnNldFZhbHVlU3Vic2NyaXB0aW9uKGksIGZvcm1Hcm91cCk7XHJcbiAgICAgIHRoaXMuc2V0UmVhZE9ubHkoaSwgZm9ybUdyb3VwKTtcclxuICAgICAgdmFyIHBhZ2VzOiBhbnkgPSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1tpXTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3BhZ2VzJywgcGFnZXMpXHJcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG4gICAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcclxuICAgICAgICBwYWdlcy5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50IDogRWxlbWVudHNNb2RlbCkgPT4ge1xyXG5cclxuICAgICAgICAgIGxldCBjb250cmxUeXBlOiBzdHJpbmcgPSBlbGVtZW50LnR5cGU7XHJcbiAgICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xyXG4gICAgICAgICAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgSWYnLGVsZW1lbnQpXHJcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudHMuZm9yRWFjaChwYW5lbEVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChwYW5lbEVsZW1lbnQucmVxdWlyZWRJZiAmJiAoKHBhbmVsRWxlbWVudC50eXBlICE9ICdidXR0b24nICYmIHBhbmVsRWxlbWVudC50eXBlICE9ICdzaW1wbGVMYWJlbCcmJiBwYW5lbEVsZW1lbnQudHlwZSAhPSAnbGFiZWwnKSB8fCBwYW5lbEVsZW1lbnQuY29tcG9uZW50TmFtZSA9PSAnYXBwLWxpbmsnIHx8IHBhbmVsRWxlbWVudC5jb21wb25lbnROYW1lID09ICdhcHAtc2lnbi1zc24nKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXRSZXF1aXJlZElmVmFsaWRhdGlvbihwYW5lbEVsZW1lbnQsIHRoaXMucWNzLmdldEFsbERhdGEoKSkpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHBhbmVsRWxlbWVudC52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IHBhbmVsRWxlbWVudC52YWxpZGF0b3JzO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZyhcInBhbmVsIHZhbGlkYXRpb24uMTExXCIscGFuZWxFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvckxpc3QuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJyAmJiBwYW5lbEVsZW1lbnQuaW5wdXRUeXBlICYmIHBhbmVsRWxlbWVudC5pbnB1dFR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgZXhwcmVzc2lvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXREYXRlVmFsaWRhdGlvbihwYW5lbEVsZW1lbnQsIHRoaXMucWNzLmdldEFsbERhdGEoKSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nICYmIHBhbmVsRWxlbWVudC5pbnB1dFR5cGUgJiYgcGFuZWxFbGVtZW50LmlucHV0VHlwZSA9PT0gJ3RleHQnXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcGFuZWxFbGVtZW50LmN1c3RvbVRhZyAmJiAocGFuZWxFbGVtZW50LmN1c3RvbVRhZyA9PT0gJ3Bhc3N3b3JkJyB8fCAgcGFuZWxFbGVtZW50LmN1c3RvbVRhZyA9PT0gJ2VtYWlsJyB8fCAgcGFuZWxFbGVtZW50LmN1c3RvbVRhZyA9PT0gJ3NzbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldFBhc3N3b3JkVmFsaWRhdGlvbihwYW5lbEVsZW1lbnQsIHRoaXMucWNzLmdldEFsbERhdGEoKSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2N1c3RvbXZhbGlkYXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5jdXN0b21WYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdmFsaWRhdG9yLCB0aGlzLnV0aWwuZ2V0U3RhdGUoKSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgZWxzZScsZWxlbWVudClcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZiAmJiAoKGVsZW1lbnQudHlwZSAhPSAnYnV0dG9uJyAmJiBlbGVtZW50LnR5cGUgIT0gJ3NpbXBsZUxhYmVsJyAmJiBlbGVtZW50LnR5cGUgIT0gJ2xhYmVsJykgfHwgZWxlbWVudC5jb21wb25lbnROYW1lID09ICdhcHAtbGluaycgfHwgZWxlbWVudC5jb21wb25lbnROYW1lID09ICdhcHAtc2lnbi1zc24nKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0UmVxdWlyZWRJZlZhbGlkYXRpb24oZWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JMaXN0ID0gZWxlbWVudC52YWxpZGF0b3JzO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRvckxpc3QuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicgJiYgZWxlbWVudC5pbnB1dFR5cGUgJiYgZWxlbWVudC5pbnB1dFR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGV4cHJlc3Npb24nKVxyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldERhdGVWYWxpZGF0aW9uKGVsZW1lbnQsIHRoaXMucWNzLmdldEFsbERhdGEoKSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnY3VzdG9tdmFsaWRhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5jdXN0b21WYWxpZGF0aW9uKGVsZW1lbnQsIHZhbGlkYXRvciwgdGhpcy51dGlsLmdldFN0YXRlKCkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zZXJ2aWNlVHlwZSAmJiBlbGVtZW50LnNlcnZpY2VUeXBlID09PSAnVkFMSURBVEUnKSB7XHJcbiAgICAgICAgICAgICAgLy92YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLmNyZWF0ZVZhbGlkYXRvcih0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLGVsZW1lbnQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9ybUdyb3VwLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5LnB1c2goZm9ybUdyb3VwKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJwYWdlcy5xZURhdGFcIiwgcGFnZXMucWVEYXRhKTtcclxuICAgICAgaWYocGFnZXMucWVEYXRhKXtcclxuICAgICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShwYWdlcy5xZURhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwic2V0IHZhbHVlcyBhcyBwZXIgbG9hZGVyIHNlcnZpY2UgPSBcIiwgdGhpcy5mb3JtRGF0YSk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1EYXRhICYmIHRoaXMuZm9ybURhdGEpIHtcclxuICAgICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5mb3JtRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZm9ybVJlYWRPbmx5KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVtpXS5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucmVhZE9ubHlGaWVsZHMgJiYgdGhpcy5yZWFkT25seUZpZWxkcykge1xyXG4gICAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiB0aGlzLnJlYWRPbmx5RmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVtpXS5nZXQoY250cmxOYW1lKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W2ldLmdldChjbnRybE5hbWUpLmRpc2FibGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldHVwTG9hZGVyTW9kZWwoKTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMucGFnZVR5cGUgPT09ICdQT1BVUCcpIHtcclxuICAgICAgbGV0IG1vZGVsID0gbmV3IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwoKTtcclxuICAgICAgbW9kZWwgPSB0aGlzLmRhdGE7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbMF0ucGF0Y2hWYWx1ZShtb2RlbCk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd0aGlzLmZvcm1Hcm91cEFycmF5IGFmdGVyIElGJywgdGhpcy5mb3JtR3JvdXBBcnJheSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFnZVR5cGUgPT09ICdKc29uJyAmJiB0aGlzLmZvcm1EYXRhKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbMF0ucGF0Y2hWYWx1ZSh0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybVJlYWRPbmx5KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5kaXNhYmxlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChsZXQgY250cmxOYW1lIG9mIHRoaXMucmVhZE9ubHlGaWVsZHMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5WzBdLmdldChjbnRybE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbMF0uZ2V0KGNudHJsTmFtZSkuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50UWUgPSB0aGlzLnFlcy5zZWFyY2hCcy5nZXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5wb3RlbnRpYWxJc3N1ZUlkID0gY3VycmVudFFlPy5wb3RlbnRpYWxJc3N1ZUlkO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWVTdWJzY3JpcHRpb24ocGFnZUluZGV4OiBudW1iZXIsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgdmFyIHBhZ2VzOiBhbnkgPSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1twYWdlSW5kZXhdO1xyXG4gICAgaWYgKHBhZ2VzLmVsZW1lbnRzKSB7XHJcbiAgICAgIHBhZ2VzLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgbGV0IGNvbnRybFR5cGU6IHN0cmluZyA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICBpZiAoZWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mKSB7XHJcbiAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mXVxyXG4gICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbHVlKHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdwYW5lbCcpIHtcclxuICAgICAgICAgIC8vICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIHBhbmVsQ29udHJsVHlwZScsICBlbGVtZW50LmVsZW1lbnRzKVxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKHBhbmVsRWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYW5lbEVsZW1lbnQuc3Vic2NyaWJlVmFsdWVPZikge1xyXG4gICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1twYW5lbEVsZW1lbnQuc3Vic2NyaWJlVmFsdWVPZl0udmFsdWVDaGFuZ2VzLlxyXG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlKChjaGFuZ2UpID0+IGZvcm1Hcm91cC5jb250cm9sc1twYW5lbEVsZW1lbnQubmFtZV0uc2V0VmFsdWUoY2hhbmdlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocGFnZUluZGV4OiBudW1iZXIsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgdmFyIHBhZ2VzOiBhbnkgPSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1twYWdlSW5kZXhdO1xyXG4gICAgaWYgKHBhZ2VzLmVsZW1lbnRzKSB7XHJcbiAgICAgIHBhZ2VzLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgbGV0IGNvbnRybFR5cGU6IHN0cmluZyA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICBpZiAoZWxlbWVudC5yZWFkb25seSkge1xyXG4gICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdwYW5lbCcpIHtcclxuICAgICAgICAgIC8vICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIHBhbmVsQ29udHJsVHlwZScsICBlbGVtZW50LmVsZW1lbnRzKVxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKHBhbmVsRWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW3BhbmVsRWxlbWVudC5uYW1lXS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdGlvbihwYWdlSW5kZXg6IG51bWJlciwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICB2YXIgcGFnZXM6IGFueSA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW3BhZ2VJbmRleF07XHJcbiAgICAvL3RoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmZvckVhY2gocGFnZXMgPT4ge1xyXG4gICAgaWYgKHBhZ2VzLmVsZW1lbnRzKSB7XHJcbiAgICAgIHBhZ2VzLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgbGV0IGNvbnRybFR5cGU6IHN0cmluZyA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ2VsZW1lbnQgPT0gJyxlbGVtZW50KTtcclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3RleHQnIHx8IGNvbnRybFR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbChlbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ2NvbW1lbnQnKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JDb21tZW50Q29udHJvbChlbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yRHJvcERvd25Db250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAncmFkaW9ncm91cCcgfHwgY29udHJsVHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvclJhZGlvQ29udHJvbChlbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBjb250cmxUeXBlID09PSAnc2luZ2xlc2VsZWN0Y2hlY2tib3gnIHx8IGNvbnRybFR5cGUgPT09ICdzaW1wbGVjaGVja2JveCcgfHwgY29udHJsVHlwZSA9PT0gJ211bHRpY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1Zygnc2luZ2xlc2VsZWN0Y2hlY2tib3ggY2FsbGVkJyxlbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckNoZWNrQm94Q29udHJvbChlbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdwYW5lbCcpIHtcclxuICAgICAgICAgIC8vICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIHBhbmVsQ29udHJsVHlwZScsICBlbGVtZW50LmVsZW1lbnRzKVxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKHBhbmVsRWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwYW5lbENvbnRybFR5cGU6IHN0cmluZyA9IHBhbmVsRWxlbWVudC50eXBlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhbmVsQ29udHJsVHlwZSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgcGFuZWxFbGVtZW50KVxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckRyb3BEb3duQ29udHJvbChwYW5lbEVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhbmVsQ29udHJsVHlwZSA9PT0gJ3RleHQnIHx8IHBhbmVsQ29udHJsVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygncGFuZWxDb250cmxUeXBlJywgIHBhbmVsQ29udHJsVHlwZSwncGFuZWxFbGVtZW50JyxwYW5lbEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYW5lbENvbnRybFR5cGUgPT09ICdyYWRpb2dyb3VwJyB8fCBwYW5lbENvbnRybFR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yUmFkaW9Db250cm9sKHBhbmVsRWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHBhbmVsQ29udHJsVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwYW5lbENvbnRybFR5cGUgPT09ICdzaW5nbGVzZWxlY3RjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JDaGVja0JveENvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICAvL30pO1xyXG4gIH1cclxuXHJcblxyXG4gIHNldFZhbGlkYXRpb25Gb3JDaGVja0JveENvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvclJhZGlvQ29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIC8vVmFsaWRhdGlvbiBuZWVkIHRvIGJlIGNoZWNrXHJcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ3NldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2wnLCBlbGVtZW50Lm5hbWUpXHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgfVxyXG4gICAgLy90aGlzLmxvZ2dlci5kZWJ1ZyhlbGVtZW50Lm5hbWUsJ2Zvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdJyxmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvckNvbW1lbnRDb250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG4gICAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVkICYmICFlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3NldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbCcsZWxlbWVudCk7XHJcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG4gICAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVkICYmICFlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1Zygnc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sIGlzUmVxdWlyZWQgJyxlbGVtZW50KTtcclxuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxlbWVudC52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJyAmJiBlbGVtZW50LmlucHV0VHlwZSAmJiBlbGVtZW50LmlucHV0VHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcclxuICAgICAgICAgICAgLy8gdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXREYXRlVmFsaWRhdGlvbih2YWxpZGF0b3IuZXhwcmVzc2lvbiwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpLCB7IGRhdGVDb21wYXJpc2lvbjogdHJ1ZSB9KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdyZWdleCcpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHZhbGlkYXRvci5yZWdleCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAndGV4dCcgJiYgdmFsaWRhdG9yLm1pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWxpZGF0b3IubWluTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICd0ZXh0JyAmJiB2YWxpZGF0b3IubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHZhbGlkYXRvci5tYXhMZW5ndGgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ251bWVyaWMnKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMubWF4KHZhbGlkYXRvci5tYXhWYWx1ZSkpO1xyXG4gICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH1cclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dFBhZ2UoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJuZXh0IHBhZ2UgY2FsbGVkIC0tLS0gXCIpXHJcbiAgICBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXBBcnJheVtpbmRleF07XHJcbiAgICBsZXQgYWxpZW5Eb2NFeHBpcnlFcnJvciA9IGZhbHNlO1xyXG4gICAgaWYoZm9ybUdyb3VwLnZhbHVlLmFsaWVuRG9jVHlwZSAhPSBudWxsICYmIGZvcm1Hcm91cC52YWx1ZS5hbGllbkRvY1R5cGUudmFsdWUgIT0gXCJJLTk0XCIgXHJcbiAgICAgICYmIGZvcm1Hcm91cC52YWx1ZS5hbGllbkRvY0V4cERhdGUgPT0gbnVsbCl7XHJcbiAgICAgICAgYWxpZW5Eb2NFeHBpcnlFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZvcm1Hcm91cC5pbnZhbGlkIHx8IGFsaWVuRG9jRXhwaXJ5RXJyb3IpIHtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBpZicsIGZvcm1Hcm91cCk7XHJcbiAgICAgIGlmKGFsaWVuRG9jRXhwaXJ5RXJyb3Ipe1xyXG4gICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaWVuRG9jRXhwRGF0ZScpLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICBmb3JtR3JvdXAuZ2V0KCdhbGllbkRvY0V4cERhdGUnKS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaWVuRG9jRXhwRGF0ZScpLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnFjcy5zZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgsIEpTT04uc3RyaW5naWZ5KGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKSk7XHJcbiAgICAvL0xvZ2ljIHRvIHNhdmUgc3RhcnRcclxuICAgIGxldCBzdHJJbnRvT2JqO1xyXG4gICAgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgIHN0ckludG9PYmogPSAoZGF0YSk7XHJcbiAgICAgIHRoaXMucGF5TG9hZCA9ICh0aGlzLnBheUxvYWQgKyBzdHJJbnRvT2JqKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBzYXZlRGF0YSA9IHt9IGFzIFF1ZXN0aW9ubmFpcmVTYXZlTW9kZWw7XHJcbiAgICBsZXQgY3VycmVudFFlID0gdGhpcy5xZXMuc2VhcmNoQnMuZ2V0VmFsdWUoKTtcclxuICAgIGxldCBlbXBsb3llZURhdGEgPSB0aGlzLnFlcy5lbXBsb3llZUJzLmdldFZhbHVlKCk7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZW1wbG95ZWVEYXRhICcsIGVtcGxveWVlRGF0YSk7XHJcbiAgICBpZiAodGhpcy5mb3JTY3JlZW5RdWVzdGlvbm5haXJlKSB7XHJcbiAgICAgIGxldCBkYXRhQXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBkYXRhQXJyLnB1c2goZGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzYXZlRGF0YS5zY3JlZW5RdWVzdGlvbm5haXJlRGF0YSA9IGRhdGFBcnI7XHJcbiAgICAgIHNhdmVEYXRhLnVzZXJUeXBlID0gY3VycmVudFFlLnVzZXJUeXBlO1xyXG4gICAgICBzYXZlRGF0YS5mbG93RnJvbSA9IGN1cnJlbnRRZS5mbG93RnJvbTtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkcyA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWRzO1xyXG4gICAgICBzYXZlRGF0YS5lbXBNb2RlbCA9IGVtcGxveWVlRGF0YTtcclxuICAgICAgc2F2ZURhdGEudXVpZCA9IHRoaXMuaWRlbnRpZmllcjsvL2N1cnJlbnRRZS51dWlkO1xyXG4gICAgICBzYXZlRGF0YS5mbG93S2V5ID0gY3VycmVudFFlLmZsb3dLZXk7XHJcbiAgICAgIHNhdmVEYXRhLmFjdGl2ZVBhZ2VJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXg7XHJcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZCA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWQ7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdzYXZlIERhdGEgJywgc2F2ZURhdGEpXHJcbiAgICAgIHRoaXMudXRpbC5zaG93TG9hZGVyKCk7XHJcbiAgICAgIHNjcm9sbFRvKDAsMCk7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2VcclxuICAgICAgICAuc2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoc2F2ZURhdGEpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhyZXMpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwicmVzIHV1aWQgPT09PSBcIiAsIHJlc1tGYkNvbnN0YW50cy51dWlkXSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS51dWlkLm5leHQocmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnV1aWQsIHJlc1tGYkNvbnN0YW50cy51dWlkXSk7XHJcbiAgICAgICAgICAgICAgaWYocmVzWydyZWRpcmVjdFRvRW5kJ10gPT09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS5zdWNjZXNzRWxlbWVudC5uZXh0KHJlc1tGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnRdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2Uud2FpdEZvclByb2Nlc3NpbmcubmV4dChyZXNbRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmddKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2UucGFnZVRvT3Blbi5uZXh0KHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnQsIHJlc1tGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnRdKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmcsIHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy5wYWdlVG9PcGVuLCByZXNbRmJDb25zdGFudHMucGFnZVRvT3Blbl0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3Jlc1sndXVpZCddfWApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQcmV2QW5kTmV4dEJ1dHRvbigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSByZXNbJ3V1aWQnXTsgICBcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIEJhc2VQYWdlLnByaW1lTkdGaXhlcygpOyAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH0sIDMwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yT2NjdXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5lcnJvckhhbmRsZXIoZXJyKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgcHJldlBhZ2UoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4IC0gMTtcclxuICAgIHNjcm9sbFRvKDAsMCk7XHJcbiAgICB0aGlzLnNldFByZXZBbmROZXh0QnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICB2aXNpYmxlSWYoc3RyRXhwOiBzdHJpbmcsIGVsZW1lbnROYW1lOiBzdHJpbmcsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCwgZWxlbWVudDogYW55KSB7XHJcblxyXG5cclxuICAgIGlmICghc3RyRXhwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgbGV0IGlzVmlzaWJsZSA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmKHN0ckV4cC5pbmNsdWRlcygnJiYnKSl7XHJcbiAgICAgIGxldCBleHByIDogc3RyaW5nW10gPSBzdHJFeHAuc3BsaXQoJyYmJyk7XHJcbiAgICAgIGlzVmlzaWJsZSA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXApICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXApO1xyXG5cclxuICAgICAgaWYoZXhwci5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMl0udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPj0gNCl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPT0gNSl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPiA1KXtcclxuICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICcmJicgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZihzdHJFeHAuaW5jbHVkZXMoJ3x8Jykpe1xyXG4gICAgICBsZXQgZXhwciA6IHN0cmluZ1tdID0gc3RyRXhwLnNwbGl0KCd8fCcpO1xyXG4gICAgICBpc1Zpc2libGUgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwKSB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICBpZihleHByLmxlbmd0aCA+PSAzKXtcclxuICAgICAgICBpc1Zpc2libGUgPSBpc1Zpc2libGUgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgfVxyXG4gICAgICBpZihleHByLmxlbmd0aCA+PSA0KXtcclxuICAgICAgICBpc1Zpc2libGUgPSBpc1Zpc2libGUgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclszXS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgfVxyXG4gICAgICBpZihleHByLmxlbmd0aCA9PSA1KXtcclxuICAgICAgICBpc1Zpc2libGUgPSBpc1Zpc2libGUgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwcls0XS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgfVxyXG4gICAgICBpZihleHByLmxlbmd0aCA+IDUpe1xyXG4gICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJ3x8JyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKCFzdHJFeHAuaW5jbHVkZXMoJ3x8JykgJiYgIXN0ckV4cC5pbmNsdWRlcygnJiYnKSl7XHJcbiAgICAgIGlzVmlzaWJsZSA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKHN0ckV4cC50cmltKCksIGZvcm1Hcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoaXNWaXNpYmxlKXtcclxuICAgICAgcmV0dXJuIGlzVmlzaWJsZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGVsZW1lbnROYW1lICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50TmFtZV0gJiYgIWVsZW1lbnQuc3Vic2NyaWJlVmFsdWVPZikge1xyXG4gICAgICBpZih0aGlzLmZvcm1EYXRhICYmICF0aGlzLmZvcm1EYXRhW2VsZW1lbnROYW1lXSl7XHJcbiAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnROYW1lXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldERpcnR5SXRlbXMoKXtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cEFycmF5Lm1hcCh5PT5PYmplY3QuZW50cmllcyh5LmNvbnRyb2xzKS5maWx0ZXIodmFsdWUgPT4gIXZhbHVlWzFdLnByaXN0aW5lKS5tYXAoeCA9PiB4WzBdKSkucmVkdWNlKCh4LHkpPT54LmNvbmNhdCh5KSk7XHJcbiAgfVxyXG5cclxuICBnZXREaXJ0eUl0ZW1zV2l0aFZhbHVlcygpOiBBcnJheTx7IGNvbnRyb2xOYW1lOiBzdHJpbmcsIGNvbnRyb2xWYWx1ZTogYW55IH0+ICB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBBcnJheVxyXG4gICAgICAubWFwKHkgPT5cclxuICAgICAgICBPYmplY3QuZW50cmllcyh5LmNvbnRyb2xzKSAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggZm9ybSBjb250cm9sIGluIHRoZSBmb3JtIGdyb3VwXHJcbiAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+ICF2YWx1ZVsxXS5wcmlzdGluZSkgIC8vIEZpbHRlciBmb3IgZGlydHkgY29udHJvbHNcclxuICAgICAgICAgIC5tYXAoeCA9PiAoeyBjb250cm9sTmFtZTogeFswXSwgY29udHJvbFZhbHVlOiB4WzFdLnZhbHVlIH0pKSAgLy8gR2V0IG5hbWUgYW5kIHZhbHVlIG9mIGRpcnR5IGNvbnRyb2xzXHJcbiAgICAgIClcclxuICAgICAgLnJlZHVjZSgoYWNjdW0sIGN1cnIpID0+IGFjY3VtLmNvbmNhdChjdXJyKSwgW10pOyAgLy8gRmxhdHRlbiB0aGUgYXJyYXkgb2YgYXJyYXlzXHJcbiAgfVxyXG4gIFxyXG5cclxuICBjb21wbGV0ZSgpIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjb21wbGV0ZSBtZXRob2QgY2FsbGVkID09PT09PT0nKTtcclxuICAgIGlmKHRoaXMubWZhUmVxdWlyZWQgJiYgdGhpcy5zaG93TWZhICYmIHRoaXMubWZhKXtcclxuICAgICAgdGhpcy5tZmEuc3VibWl0KCk7XHJcbiAgICB9XHJcbiAgICBzY3JvbGxUbygwLDApO1xyXG4gICAgbGV0IGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTdWJtaXQgY2FsbGVkIGZyb20gY29tcGxldGUgbWV0aG9kIGluIGR5bmFtaWMgZm9ybScpXHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZvcm1Hcm91cEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbaV07XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgaWYnLCBmb3JtR3JvdXApO1xyXG4gICAgICBpZiAoZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGlmJywgZm9ybUdyb3VwKTtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnZhbGlkIEZvcm0gQ29udHJvbHMnLCBPYmplY3QudmFsdWVzKGZvcm1Hcm91cC5jb250cm9scykuZmlsdGVyKGMgPT4gYy5pbnZhbGlkKSk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlRm9ybS5vblN1Ym1pdCh1bmRlZmluZWQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdmb3JtR3JvdXAnLCBmb3JtR3JvdXApO1xyXG5cclxuICAgIC8vIGZvciByZWdpc3RlciBjbGFpbWFudCBwYWdlXHJcbiAgICBjb25zdCBwYXNzd29yZCA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnBhc3N3b3JkID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnBhc3N3b3JkKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSA/IChmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS5maXJzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgbGFzdE5hbWUgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSAmJiBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSA/IChmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCB1c2VySWQgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSAmJiBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS51c2VybmFtZSA/IChmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS51c2VybmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7ICAgXHJcbiAgIFxyXG4gICAgaWYocGFzc3dvcmQgPT09IFwiXCIgJiYgZmlyc3ROYW1lID09PSBcIlwiICYmIGxhc3ROYW1lID09PSBcIlwiICYmIHVzZXJJZCA9PT0gXCJcIil7IFxyXG4gICAgICAgICAgIC8vIFBHTFAtMTc1MCAgaW4gY29ycmVjdCBSb3V0aW5nIE5VbWJlclxyXG4gICAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLnBheW1ldGhvZD09dW5kZWZpbmVkICAmJiBmb3JtR3JvdXAuY29udHJvbHMucGF5TWV0aG9kPT11bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgMVwiKVxyXG4gICAgICAgIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgICAgLy8gY29uc29sZS5sb2coXCIgdHJpZ2dlcmVkIDJcIilcclxuICAgICAgICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyICBcclxuICAgICAgIH0gZWxzZSBpZigoZm9ybUdyb3VwLmNvbnRyb2xzLnBheW1ldGhvZCE9dW5kZWZpbmVkICYmIGZvcm1Hcm91cC5jb250cm9scy5wYXltZXRob2QudmFsdWU9PT0nQycpICB8fChmb3JtR3JvdXAuY29udHJvbHMucGF5TWV0aG9kIT11bmRlZmluZWQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnBheU1ldGhvZC52YWx1ZT09PSdDJykgKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgMlwiKSAgIFxyXG4gICAgICAgIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgNCBcIikgICBcclxuICAgICAgfWVsc2V7ICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyICAgIFxyXG4gICAgICAgICBjb25zdCByb3V0aW5nTnVtYmVyID0gZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50ICYmIGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5yb3V0aW5nTnVtYmVyID8gKGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5yb3V0aW5nTnVtYmVyKTogZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLnJvdXRpbmdOdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLnJvdXRpbmdOdW1iZXIpIDpcIlwiO1xyXG4gICAgICAgIGNvbnN0IGFjY291bnROdW1iZXIgPSBmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQgJiZmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUuYWNjb3VudE51bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUuYWNjb3VudE51bWJlcik6Zm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLmFjY291bnROdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLmFjY291bnROdW1iZXIpIDpcIlwiO1xyXG4gICAgICAgIGNvbnN0IHJlRW50ZXJBY2NvdW50TnVtYmVyID0gZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50ICYmIGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5yZUVudGVyQWNjb3VudE51bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUucmVFbnRlckFjY291bnROdW1iZXIpOiBmb3JtR3JvdXAuY29udHJvbHMuYmFua0FjY291bnQudmFsdWUucmVFbnRlckFjY291bnROdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLnJlRW50ZXJBY2NvdW50TnVtYmVyKTpcIlwiO1xyXG4gICAgICAgICAgaWYodGhpcy5pc0JhbmtEZXRhaWxzVmFsaWQocm91dGluZ051bWJlciwgYWNjb3VudE51bWJlciwgcmVFbnRlckFjY291bnROdW1iZXIpKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDMgXCIpIFxyXG4gICAgICAgICAgICAgIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgICAgICAgIC8vICAgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDYgXCIpIFxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0gICBcclxuICAgLy8gICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgN1wiKVxyXG4gICAgLy8gIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgIC8vIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCA4XCIpXHJcbiAgICB9IGVsc2V7XHJcbiAgICAgIGlmKHBhc3N3b3JkICE9PSBcIlwiICYmIHRoaXMuaXNQYXNzd29yZFZhbGlkKGZpcnN0TmFtZSwgbGFzdE5hbWUsIHVzZXJJZCwgcGFzc3dvcmQpKVxyXG4gICAgICB7IGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCA0XCIpXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZVNhdmVRdWVzdGlvbm5haXJlKGZvcm1Hcm91cCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZXtcclxuICAgICAgICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyICBcclxuICAgICAgICBjb25zdCBwYXNzd29yZEludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgIFwiW1RoZSBwYXNzd29yZCBjb250YWlucyBlaXRoZXIvb3IgdXNlciBuYW1lLCBmaXJzdCBuYW1lIG9yIGxhc3QgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBwYXNzd29yZCByZXF1aXJlbWVudFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgIH1cclxuIFxyXG4gICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KHBhc3N3b3JkSW52YWxpZEVycm9yKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBsZXRlU2F2ZVF1ZXN0aW9ubmFpcmUoZm9ybUdyb3VwKXtcclxuICAgIHRoaXMuZm9ybVJhd0RhdGEgPSBmb3JtR3JvdXA7XHJcbiAgICB0aGlzLnFjcy5zZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgsIEpTT04uc3RyaW5naWZ5KGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKSk7XHJcbiAgICBsZXQgc3RySW50b09iajtcclxuICAgIHRoaXMucGF5TG9hZCA9ICcnO1xyXG4gICAgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgIHN0ckludG9PYmogPSAoZGF0YSk7XHJcbiAgICAgIHRoaXMucGF5TG9hZCA9ICh0aGlzLnBheUxvYWQgKyBzdHJJbnRvT2JqKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBzYXZlRGF0YSA9IHt9IGFzIFF1ZXN0aW9ubmFpcmVTYXZlTW9kZWw7XHJcbiAgICBsZXQgY3VycmVudFFlID0gdGhpcy5hdXRvU2F2ZSA/IHRoaXMucWVzLnNlYXJjaEJzLmdldFZhbHVlKCkgOiB0aGlzLnF1ZXJ5TW9kZWw7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnZVR5cGUgPT09ICdQT1BVUCcgfHwgdGhpcy5wYWdlVHlwZSA9PT0gJ0pzb24nKSB7XHJcbiAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKTtcclxuICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmZvclNjcmVlblF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgc2F2ZURhdGEuZGF0YSA9IHRoaXMucGF5TG9hZC8vSlNPTi5zdHJpbmdpZnkodGhpcy5wYXlMb2FkKTtcclxuICAgICAgc2F2ZURhdGEucG90ZW50aWFsSXNzdWVJZCA9IGN1cnJlbnRRZS5wb3RlbnRpYWxJc3N1ZUlkO1xyXG4gICAgICBzYXZlRGF0YS5mbG93QWJsZUFuZEF2YWlsYWJsZSA9IGN1cnJlbnRRZS5mbG93QWJsZUFuZEF2YWlsYWJsZTtcclxuICAgICAgc2F2ZURhdGEudXNlclR5cGUgPSBjdXJyZW50UWUudXNlclR5cGU7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xyXG4gICAgICBzYXZlRGF0YS5mbG93V0NBYmxlQW5kQXZhaWxhYmxlID0gY3VycmVudFFlLmZsb3dXQ0FibGVBbmRBdmFpbGFibGU7XHJcbiAgICAgIHNhdmVEYXRhLmNsYWltQXBwbGljYXRpb25JZCA9IGN1cnJlbnRRZS5jbGFpbUFwcGxpY2F0aW9uSWQ7XHJcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZHMgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkcztcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZDtcclxuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcclxuICAgICAgaWYoIXRoaXMuYXV0b1NhdmUpe1xyXG4gICAgICAgIHNhdmVEYXRhLmF1dG9TYXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoc2F2ZURhdGEpO1xyXG4gICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnB1dERhdGEgPSBzYXZlRGF0YTtcclxuICAgICAgdGhpcy5ibG9ja0Zvcm1VaSgpXHJcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2VcclxuICAgICAgICAuc2F2ZVF1ZXN0aW9ubmFpcmUoc2F2ZURhdGEpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgICB0aGlzLnFlcy5zZWFyY2hNb2RlbC5zcGxpY2UodGhpcy5xZXMuc2VhcmNoTW9kZWwuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5wb3RlbnRpYWxJc3N1ZUlkID09IGN1cnJlbnRRZS5wb3RlbnRpYWxJc3N1ZUlkKSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW1haW5pbmcgZWxlbWVudHMnLCB0aGlzLnFlcy5zZWFyY2hNb2RlbCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnFlcy5zZWFyY2hNb2RlbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xZXMuc2VhcmNoQnMubmV4dCh0aGlzLnFlcy5zZWFyY2hNb2RlbFswXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ05vIEVsZW1lbnQgUHJlc2VudCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KHJlcyk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgICAgICAgICAgdGhpcy5jYXB0Y2hhLnJlc2V0Q2FwdGNoYSgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGF0YUFycjogc3RyaW5nW10gPSBbXTtcclxuICAgICAgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgZGF0YUFyci5wdXNoKGRhdGEpO1xyXG4gICAgICB9KTtcclxuICAgICAgc2F2ZURhdGEuc2NyZWVuUXVlc3Rpb25uYWlyZURhdGEgPSBkYXRhQXJyO1xyXG4gICAgICBzYXZlRGF0YS51c2VyVHlwZSA9IGN1cnJlbnRRZS51c2VyVHlwZTtcclxuICAgICAgc2F2ZURhdGEuZmxvd0Zyb20gPSBjdXJyZW50UWUuZmxvd0Zyb207XHJcbiAgICAgIHNhdmVEYXRhLmlzU2NyZWVuUXVlc3Rpb25uYWlyZSA9IHRydWU7XHJcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZHMgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkcztcclxuICAgICAgc2F2ZURhdGEudXVpZCA9IHRoaXMuaWRlbnRpZmllcjsvL2N1cnJlbnRRZS51dWlkO1xyXG4gICAgICBzYXZlRGF0YS5mbG93S2V5ID0gY3VycmVudFFlLmZsb3dLZXk7XHJcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZCA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWQ7XHJcbiAgICAgIHNhdmVEYXRhLmFjdGl2ZVBhZ2VJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXg7XHJcblxyXG4gICAgICBpZighdGhpcy5hdXRvU2F2ZSl7XHJcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoc2F2ZURhdGEpO1xyXG4gICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5tZmFSZXF1aXJlZCl7XHJcbiAgICAgICAgdGhpcy5zaG93TWZhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1mYURhdGEgPSBzYXZlRGF0YTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShzYXZlRGF0YSk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIHBheW1lbnREZXRhaWxzQ2hhbmdlRXJyb3IoKXtcclxuICAgIHJldHVybiB0aGlzLnBheW1lbnREZXRhaWxDaGFuZ2VIYXNFcnJvcjtcclxuICB9XHJcbiAgICAvLyBQR0xQLTE3NTAgIGluIGNvcnJlY3QgUm91dGluZyBOVW1iZXJcclxuICBpc0JhbmtEZXRhaWxzVmFsaWQocm91dGluZ051bWJlciwgYWNjb3VudE51bWJlciwgcmVFbnRlckFjY291bnROdW1iZXIpXHJcbiAgeyBcclxuICAgIFxyXG4gICAgdGhpcy5hY2NvdW50TnVtYmVyZmxnPXRydWU7XHJcbiAgICB0aGlzLnJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZz10cnVlO1xyXG4gICAgdGhpcy5yb3V0aW5nTnVtYmVyZmxhZz10cnVlO1xyXG4gICAgY29uc3Qgcm91dGluZ051bWJlclJlZ2V4ID0gQXBwUmVnZXguUk9VVElOR19OVU1CRVJfUkVHRVg7XHJcbiAgICBjb25zdCBhY2NvdW50TnVtYmVyUmVnZXggPSBBcHBSZWdleC5BQ0NPVU5UX05VTUJFUl9SRUdFWF9NSU47XHJcbiAgICAgICAgICAgICAgaWYoIXJvdXRpbmdOdW1iZXJSZWdleC50ZXN0KHJvdXRpbmdOdW1iZXIpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGluZ051bWJlcmZsYWc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSAgICAgIFxyXG4gICAgICAgICAgICAgIGlmKCFhY2NvdW50TnVtYmVyUmVnZXgudGVzdChhY2NvdW50TnVtYmVyKSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY291bnROdW1iZXJmbGc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICBpZighYWNjb3VudE51bWJlclJlZ2V4LnRlc3QocmVFbnRlckFjY291bnROdW1iZXIpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnPWZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZighdGhpcy5yb3V0aW5nTnVtYmVyZmxhZyAmJiAhdGhpcy5hY2NvdW50TnVtYmVyZmxnICYmICF0aGlzLnJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZyl7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IEJhbmtEZXRhaWxzSW52YWxpZEVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICBcIltUaGUgcm91dGluZ051bWJlcixhY2NvdW50TnVtYmVyIGFuZCByZUVudGVyQWNjb3VudE51bWJlciBmaWVsZCB2YWx1ZXMgZG8gbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoQmFua0RldGFpbHNJbnZhbGlkRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmKCF0aGlzLnJvdXRpbmdOdW1iZXJmbGFnICl7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IEJhbmtEZXRhaWxzSW52YWxpZEVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICBcIltUaGUgcm91dGluZ051bWJlciBmaWVsZCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgZm9ybWF0IFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5hY2NvdW50TnVtYmVyZmxnICYmICF0aGlzLnJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZyl7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IEJhbmtEZXRhaWxzSW52YWxpZEVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICBcIltUaGUgYWNjb3VudE51bWJlciBhbmQgcmVFbnRlckFjY291bnROdW1iZXIgZmllbGQgdmFsdWVzIGRvIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgZm9ybWF0IFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoQmFua0RldGFpbHNJbnZhbGlkRXJyb3IpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5hY2NvdW50TnVtYmVyZmxnKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IEJhbmtEZXRhaWxzSW52YWxpZEVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgXCJbVGhlIGFjY291bnROdW1iZXIgZmllbGQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KEJhbmtEZXRhaWxzSW52YWxpZEVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5yZUVudGVyQWNjb3VudE51bWJlcmZsYWcpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IEJhbmtEZXRhaWxzSW52YWxpZEVycm9yID0ge1xyXG4gICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgIFwiW1RoZSByZUVudGVyQWNjb3VudE51bWJlciBmaWVsZCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgZm9ybWF0IFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoQmFua0RldGFpbHNJbnZhbGlkRXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfWVsc2UgIGlmKHRoaXMuYWNjb3VudE51bWJlcmZsZyAmJiB0aGlzLnJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZyl7XHJcbiAgICAgICAgICAgICAgICAgIGlmKGFjY291bnROdW1iZXIhPT1yZUVudGVyQWNjb3VudE51bWJlcil7ICBcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhbmtEZXRhaWxzSW52YWxpZEVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJbVmFsdWVzIGluIGFjY291bnROdW1iZXIgYW5kIHJlRW50ZXJBY2NvdW50TnVtYmVyIGZpZWxkcyBkbyBub3QgbWF0Y2ggXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoQmFua0RldGFpbHNJbnZhbGlkRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9ZWxzZVxyXG4gICAgICAgICAgICAgICAgICB7ICBcclxuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICB9ZWxzZVxyXG4gICAgICAgICAgICAgIHsgIFxyXG4gICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgICAgfSAgICAgXHJcblxyXG4gIH1cclxuXHJcbiAgaXNQYXNzd29yZFZhbGlkKGZpcnN0TmFtZSwgbGFzdE5hbWUsIHVzZXJJZCwgcGFzc3dvcmQpe1xyXG4gICAgY29uc3QgZXNjYXBlUmVnRXhwID0gKHN0ciA6IFN0cmluZykgPT4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcbiAgICBjb25zdCBmaXJzdE5hbWVSZWdleCA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKGZpcnN0TmFtZSksICdpJyk7XHJcbiAgICBjb25zdCBsYXN0TmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAobGFzdE5hbWUpLCAnaScpO1xyXG4gICAgY29uc3QgdXNlcklkUmVnZXggPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cCh1c2VySWQpLCAnaScpO1xyXG4gICAgaWYoZmlyc3ROYW1lUmVnZXgudGVzdChwYXNzd29yZCkgfHwgbGFzdE5hbWVSZWdleC50ZXN0KHBhc3N3b3JkKSB8fCB1c2VySWRSZWdleC50ZXN0KHBhc3N3b3JkKSl7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoZGF0YSl7XHJcbiAgICB0aGlzLmJsb2NrRm9ybVVpKClcclxuICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2VcclxuICAgICAgICAuc2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoZGF0YSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2Uuc3VjY2Vzc0VsZW1lbnQubmV4dChyZXNbRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50XSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS51dWlkLm5leHQocmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLndhaXRGb3JQcm9jZXNzaW5nLm5leHQocmVzW0ZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nXSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS53YWl0Q2hlY2tTZXJ2aWNlVXJpLm5leHQocmVzW0ZiQ29uc3RhbnRzLndhaXRDaGVja1NlcnZpY2VVcmldKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnBhZ2VUb09wZW4ubmV4dChyZXNbRmJDb25zdGFudHMucGFnZVRvT3Blbl0pO1xyXG5cclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudCwgcmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmcsIHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMud2FpdENoZWNrU2VydmljZVVyaSwgcmVzW0ZiQ29uc3RhbnRzLndhaXRDaGVja1NlcnZpY2VVcmldKTtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnBhZ2VUb09wZW4sIHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy51dWlkLCByZXNbRmJDb25zdGFudHMudXVpZF0pO1xyXG4gICAgICAgICAgICAgIC8qT25seSBlbmFibGUgbHhueCBpbiBzaWduLXVwIGZsb3cgZm9yIHF1ZXN0aW9ubmFpcmUgZm9ybS1idWlsZGVyKi9cclxuICAgICAgICAgICAgICBpZihkYXRhPy5xdWVzdGlvbm5haXJlSWRzPy5bMF0gPT09IDM0NSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dLZXkgPSAzNDU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVXVpZCA9IHJlc1sndXVpZCddO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNzbiA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24pLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sbi5pc0xleGlzTmV4aXNJZFByb29maW5nRW5hYmxlZChzc24pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChyZXMgOiBMZXhpc05leGlzRW5hYmxlZFJlc3BvbnNlTW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvKklmIGxleGlzLW5leGlzIGlkIHByb29maW5nIGlzIGVuYWJsZWQgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzPy5sbmVuYWJsZWQgJiYgcmVzPy5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGV4aXNOZXhpc0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzPy5sbmVuYWJsZWQgJiYgcmVzPy5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHRCdXR0b25QYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgPT09IFwiZXNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3UgY3VlbnRhIHNlIGhhIGNyZWFkbyBjb3JyZWN0YW1lbnRlLiDCoUluaWNpZSBzZXNpw7NuISdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdXIgYWNjb3VudCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIFBsZWFzZSBsb2dpbiEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3Jlc1sndXVpZCddfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXM/LmxuZW5hYmxlZCA9PSBmYWxzZSAmJiByZXM/Lm1lc3NhZ2UgPT0gJ1NTTi1NQVNLRUQnKXtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VVNQU0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJVU1BTKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VVNQU0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZihlcnJvci5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdGQUlMIC0gVVNQUyBQcm9vZmluZycpKXtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgLypJZiBVU1BTIHByb29maW5nIGlzIGFscmVhZHkgdHJpZ2dlcmVkIGJ5IENTUiBhbmQgdXNlciB3YXMgbm90IGFibGUgdG8gdmVyaWZ5IGl0IDogc28gaW4gRkFJTCBzdGF0dXMgKi9cclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy50cmlnZ2VyVVNQUygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChlcnJvci5lcnJvci5tc2dbMF0uaW5jbHVkZXMoJ0lOSVRJQVRFRCAtIFVTUFMgUHJvb2ZpbmcnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAvKklmIFVTUFMgcHJvb2ZpbmcgaXMgYWxyZWFkeSB0cmlnZ2VyZWQgYnkgQ1NSIGFuZCBpdCBpcyBpbiBJTklUSUFURUQgc3RhdHVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy51dGlsLnNob3dFcnJvcignWW91ciBVU1BTIGlkZW50aXR5IHByb29maW5nIGlzIHBlbmRpbmcuIFBsZWFzZSBjb21wbGV0ZSBpdCBiZWZvcmUgeW91IGxvZ2luIHRvIHRoZSBwb3J0YWwhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KCcvbG9naW4nKSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnwqFDb21wbGV0ZSBzdSB2ZXJpZmljYWNpw7NuIGRlIGlkZW50aWRhZCBkZSBVU1BTIGFudGVzIGRlIGluaWNpYXIgc2VzacOzbiBlbiBlbCBwb3J0YWwhJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb21wbGV0ZSB5b3VyIFVTUFMgSWRlbnRpdHkgVmVyaWZpY2F0aW9uIGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0sIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVU1BTQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZihlcnJvci5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdGQUlMIC0gVVNQUyBQcm9vZmluZycpKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIC8qSWYgVVNQUyBwcm9vZmluZyBpcyBhbHJlYWR5IHRyaWdnZXJlZCBieSBDU1IgYW5kIHVzZXIgd2FzIG5vdCBhYmxlIHRvIHZlcmlmeSBpdCA6IHNvIGluIEZBSUwgc3RhdHVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnRyaWdnZXJVU1BTKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChlcnJvci5lcnJvci5tc2dbMF0uaW5jbHVkZXMoJ0lOSVRJQVRFRCAtIFVTUFMgUHJvb2ZpbmcnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgLypJZiBVU1BTIHByb29maW5nIGlzIGFscmVhZHkgdHJpZ2dlcmVkIGJ5IENTUiBhbmQgaXQgaXMgaW4gSU5JVElBVEVEIHN0YXR1cyAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnV0aWwuc2hvd0Vycm9yKCdZb3VyIFVTUFMgaWRlbnRpdHkgcHJvb2ZpbmcgaXMgcGVuZGluZy4gUGxlYXNlIGNvbXBsZXRlIGl0IGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KCcvbG9naW4nKSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfSBcclxuICAgICAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICfCoUNvbXBsZXRlIHN1IHZlcmlmaWNhY2nDs24gZGUgaWRlbnRpZGFkIGRlIFVTUFMgYW50ZXMgZGUgaW5pY2lhciBzZXNpw7NuIGVuIGVsIHBvcnRhbCEnXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb21wbGV0ZSB5b3VyIFVTUFMgSWRlbnRpdHkgVmVyaWZpY2F0aW9uIGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5leHRCdXR0b25QYWdlKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3Jlc1sndXVpZCddfWApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIShkYXRhPy5xdWVzdGlvbm5haXJlSWRzPy5bMF0gPT09IDM0NSkpe1xyXG4gICAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd01mYSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYoZXJyLm1zZ1swXS5pbmNsdWRlcygnVGhlcmUgaXMgbm8gYWN0aXZlIGNsYWltIHRvIHVwZGF0ZSBwYXltZW50IEluZm9ybWF0aW9uJykpe1xyXG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudERldGFpbENoYW5nZUhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRXJyb3Igb2NjdXJlZCcsIGVycik7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubWZhUmVxdWlyZWQpe1xyXG4gICAgICAgICAgICAgIHRoaXMubWZhRXJyb3IgPSBlcnI7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwdGNoYS5yZXNldENhcHRjaGEoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0TGV4aXNOZXhpc0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCl7XHJcbiAgICBjb25zdCBmaXJzdE5hbWUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGxhc3ROYW1lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubGFzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgbGV0IHN0cmVldDEgPSBcIlwiO1xyXG4gICAgbGV0IGNpdHkgPSBcIlwiO1xyXG4gICAgbGV0IHN0YXRlID0gXCJcIjtcclxuICAgIGxldCB6aXAgPSBcIlwiO1xyXG4gICAgaWYodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgIT0gbnVsbCl7XHJcbiAgICAgIGlmKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgPT09IFwiWVwiKXtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBjaXR5ID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5KS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBzdGF0ZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RhdGUudmFsdWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnppcCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuemlwKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RyZWV0QWRkcmVzcyA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0cmVldEFkZHJlc3MpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIGNpdHkgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuY2l0eSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgc3RhdGUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdGF0ZS52YWx1ZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXAgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXApLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkb2IgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRvYiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZG9iKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGVtYWlsID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5lbWFpbCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZW1haWwpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgcGhvbmUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnBob25lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5waG9uZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBzc24gPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuXHJcbiAgICBpZiAoIXdpbmRvd1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignU2Vzc2lvbiBJRCBub3QgZm91bmQgaW4gd2luZG93IG9iamVjdC4nKTtcclxuICAgICAgcmV0dXJuOyAvLyBoYW5kbGUgYWNjb3JkaW5nbHlcclxuICAgIH1cclxuXHJcbiAgICBpZih3aW5kb3dbJ3Nlc3Npb25JZCddICE9IG51bGwpe1xyXG4gICAgICB0aGlzLnVzZXJEZXRhaWxzID0ge1xyXG4gICAgICAgIHNlc3Npb25faWQ6IHdpbmRvd1snc2Vzc2lvbklkJ10gPyB3aW5kb3dbJ3Nlc3Npb25JZCddIDogbnVsbCxcclxuICAgICAgICBpbnB1dF9pcF9hZGRyZXNzOiBudWxsLCAvLyBzZW5kIG51bGxcclxuICAgICAgICBhY2NvdW50X2ZpcnN0X25hbWU6IGZpcnN0TmFtZSxcclxuICAgICAgICBhY2NvdW50X2xhc3RfbmFtZTogbGFzdE5hbWUsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0cmVldDE6IHN0cmVldDEsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX2NpdHk6IGNpdHksXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0YXRlOiBzdGF0ZSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3NfemlwOiB6aXAsXHJcbiAgICAgICAgYWNjb3VudF9kYXRlX29mX2JpcnRoOiBkb2IsIC8vXCJZWVlZTU1ERFwiXHJcbiAgICAgICAgYWNjb3VudF9lbWFpbDogZW1haWwsXHJcbiAgICAgICAgYWNjb3VudF90ZWxlcGhvbmU6IHBob25lLFxyXG4gICAgICAgIG5hdGlvbmFsX2lkX251bWJlcjogc3NuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0xleGlzTmV4aXNQb3B1cEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VVNQU0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCl7XHJcbiAgICBjb25zdCBmaXJzdE5hbWUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGxhc3ROYW1lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubGFzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgbGV0IHN0cmVldDEgPSBcIlwiO1xyXG4gICAgbGV0IGNpdHkgPSBcIlwiO1xyXG4gICAgbGV0IHN0YXRlID0gXCJcIjtcclxuICAgIGxldCB6aXAgPSBcIlwiO1xyXG4gICAgaWYodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgIT0gbnVsbCl7XHJcbiAgICAgIGlmKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgPT09IFwiWVwiKXtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBjaXR5ID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5KS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBzdGF0ZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RhdGUudmFsdWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnppcCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuemlwKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RyZWV0QWRkcmVzcyA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0cmVldEFkZHJlc3MpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIGNpdHkgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuY2l0eSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgc3RhdGUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdGF0ZS52YWx1ZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXAgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXApLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkb2IgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRvYiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZG9iKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGVtYWlsID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5lbWFpbCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZW1haWwpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgcGhvbmUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnBob25lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5waG9uZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBzc24gPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuXHJcbiAgICBpZiAoIXdpbmRvd1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignU2Vzc2lvbiBJRCBub3QgZm91bmQgaW4gd2luZG93IG9iamVjdC4nKTtcclxuICAgICAgcmV0dXJuOyAvLyBoYW5kbGUgYWNjb3JkaW5nbHlcclxuICAgIH1cclxuXHJcbiAgICBpZih3aW5kb3dbJ3Nlc3Npb25JZCddICE9IG51bGwpe1xyXG4gICAgICB0aGlzLnVzZXJEZXRhaWxzID0ge1xyXG4gICAgICAgIHNlc3Npb25faWQ6IHdpbmRvd1snc2Vzc2lvbklkJ10gPyB3aW5kb3dbJ3Nlc3Npb25JZCddIDogbnVsbCxcclxuICAgICAgICBpbnB1dF9pcF9hZGRyZXNzOiBudWxsLCAvLyBzZW5kIG51bGxcclxuICAgICAgICBhY2NvdW50X2ZpcnN0X25hbWU6IGZpcnN0TmFtZSxcclxuICAgICAgICBhY2NvdW50X2xhc3RfbmFtZTogbGFzdE5hbWUsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0cmVldDE6IHN0cmVldDEsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX2NpdHk6IGNpdHksXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0YXRlOiBzdGF0ZSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3NfemlwOiB6aXAsXHJcbiAgICAgICAgYWNjb3VudF9kYXRlX29mX2JpcnRoOiBkb2IsIC8vXCJZWVlZTU1ERFwiXHJcbiAgICAgICAgYWNjb3VudF9lbWFpbDogZW1haWwsXHJcbiAgICAgICAgYWNjb3VudF90ZWxlcGhvbmU6IHBob25lLFxyXG4gICAgICAgIG5hdGlvbmFsX2lkX251bWJlcjogc3NuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTG5TdWNjZXNzKCl7XHJcbiAgICB0aGlzLmlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgIGlmKHRoaXMubmV4dEJ1dHRvblBhZ2UpIHtcclxuICAgICAgLy90aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgLy8gICdZb3VyIGFjY291bnQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIFBsZWFzZSBsb2dpbiEnXHJcbiAgICAgIC8vKTtcclxuICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3RoaXMucmVzcG9uc2VVdWlkfWApO1xyXG4gICAgfSBcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdCh0aGlzLmlucHV0RGF0YSk7XHJcbiAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkxORXJyb3IoKXtcclxuICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgICBjb25zb2xlLmxvZyhcIlBsZWFzZSBjb250YWN0IEtET0whXCIpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlclVTUFMoKXtcclxuICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgIGNvbnNvbGUubG9nKFwidXNwcyBpcyB0cmlnZ2VyZWRcIilcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VyRGV0YWlscycsIEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRldGFpbHMpKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvdXNwcy1yZWRpcmVjdCcsIFwiXCJdKSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2QW5kTmV4dEJ1dHRvbigpIHtcclxuICAgIGxldCBjb21wYXJlVmFsdWU6IG51bWJlciA9IDA7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHtcclxuICAgICAgY29tcGFyZVZhbHVlID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IDEgJiYgdGhpcy5pc1ByZXZpb3VzUGFnZUFQbGFjZWhvbGRlcih0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1swXSkpIHtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmlzRmlyc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTGFzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuaXNMYXN0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPCB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuaXNMYXN0ID0gZmFsc2U7XHJcbiAgICB9ICAgXHJcbiAgICB0aGlzLnNldHVwTG9hZGVyTW9kZWwoKTtcclxuICB9XHJcblxyXG4gIGlzUHJldmlvdXNQYWdlQVBsYWNlaG9sZGVyKHBhZ2UgOiBhbnkpe1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJpc1BsYWNlSG9sZGVyID0gXCIgKyBwYWdlW1wiaXNQbGFjZUhvbGRlclwiXSk7XHJcbiAgICBsZXQgcGxhY2VIb2xkZXI6IGJvb2xlYW4gPSAgcGFnZVtcImlzUGxhY2VIb2xkZXJcIl07XHJcbiAgICByZXR1cm4gcGxhY2VIb2xkZXIudmFsdWVPZigpO1xyXG4gIH1cclxuXHJcbiAgc3RlcENoYW5nZWQoZXZlbnQ6IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzbHlTZWxlY3RlZEluZGV4ID4gZXZlbnQuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICBldmVudC5wcmV2aW91c2x5U2VsZWN0ZWRTdGVwLmludGVyYWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbmNlbEFjdGlvbigpIHtcclxuICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QodGhpcy5iYWNrQnV0dG9uUGFnZSk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxQb3BVcCgpIHtcclxuICAgIGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdO1xyXG4gICAgdGhpcy5tb2RlbENhbmNlbC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjYW5jZWxQb3BVcCBjYWxsZWQnLCBmb3JtR3JvdXApXHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKHF1ZXVlOiBGaWxlW10pIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdxdWV1ZTExMSAnLCBxdWV1ZSk7XHJcbiAgICAvL3F1ZXVlWzBdLnNpemVcclxuICB9XHJcblxyXG4gIGJsb2NrRm9ybVVpKCl7XHJcbiAgICB0aGlzLmJsb2NrVWkgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdW5ibG9ja0Zvcm1VaSgpe1xyXG4gICAgdGhpcy5ibG9ja1VpID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG91bGRGaXRDb250ZW50KGVsZW1lbnRzIDogRWxlbWVudHNNb2RlbFtdKXtcclxuICAgIGxldCBzaG91bGRGaXRDb250ZW50IDogYm9vbGVhbiA9IHRydWU7IFxyXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYoZWxlbWVudC5jdXN0b21UYWcgPT0gJ2NvbXBvbmVudCcpe1xyXG4gICAgICAgIHNob3VsZEZpdENvbnRlbnQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHNob3VsZEZpdENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEeW5hbWljUGFyYW0oZXZlbnQpe1xyXG4gICAgaWYoQXJyYXkuaXNBcnJheShldmVudCkpe1xyXG4gICAgICB0aGlzLmR5bmFtaWNQYXJhbSA9IFsuLi5ldmVudF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmR5bmFtaWNQYXJhbSA9IE9iamVjdC5hc3NpZ24oe30gLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpe1xyXG4gICAgdGhpcy51dGlsLmZvY3VzT25TdWJtaXQodGhpcy5lbCk7XHJcbiAgfVxyXG59XHJcbiIsIjxwLWJsb2NrVUkgW2Jsb2NrZWRdPVwiYmxvY2tVaVwiPlxyXG4gIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxyXG48L3AtYmxvY2tVST5cclxuPGRpdiAqbmdJZj1cInF1ZXN0aW9ucyAmJiBxdWVzdGlvbnNbMF0gJiYgIXNob3dNZmFcIiAjZm9ybU1haW5EaXY+XHJcbiAgPGZvcm0gZm9jdXNJbnZhbGlkSW5wdXQgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIiBbbmdDbGFzc109XCJtdWx0aU1vZGUgPyAncWUtZm9ybS1tdWx0aXBsZScgOiAncWUtZm9ybSdcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiICNxdWVzdGlvbm5haXJlRm9ybT1cIm5nRm9ybVwiPlxyXG4gICAgPGlvbi1ncmlkPlxyXG4gICAgICA8aW9uLXJvdyAqbmdJZj1cInF1ZXN0aW9uc1swXS5wYWdlc1thY3RpdmVJbmRleF0ubmFtZVwiPlxyXG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIFtzaXplWHNdPVwic2l6ZVhzXCIgW3NpemVTbV09XCJzaXplU21cIiBbc2l6ZU1kXT1cInNpemVNZFwiIFtzaXplTGddPVwic2l6ZUxnXCIgW3NpemVYbF09XCJzaXplWGxcIlxyXG4gICAgICAgICAgW29mZnNldFhzXT1cIm9mZnNldFhzXCIgW29mZnNldFNtXT1cIm9mZnNldFNtXCIgW29mZnNldE1kXT1cIm9mZnNldE1kXCIgW29mZnNldExnXT1cIm9mZnNldExnXCIgW29mZnNldFhsXT1cIm9mZnNldFhsXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mb3JtZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIFtpbm5lckh0bWxdPVwiKHF1ZXN0aW9uTnVtYmVyID8gcXVlc3Rpb25OdW1iZXIgKyAnICcgOiAnJykgKyBxdWVzdGlvbnNbMF0ucGFnZXNbYWN0aXZlSW5kZXhdLm5hbWUgfCBkeW5hbWljVHJhbnNsYXRlOmR5bmFtaWNQYXJhbSB8IHRydXN0SHRtbFwiIFtuZ0NsYXNzXT1cIm11bHRpTW9kZSA/ICdmYi1oZWFkaW5nLWZvbGxvd3VwJyA6ICdmYi1oZWFkaW5nJ1wiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1sZXZlbD1cIjFcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgPGlvbi1jb2wgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIiBjbGFzcz1cImlvbi1wYWRkaW5nLWVuZFwiIHNpemU9XCIxMlwiIFtzaXplWHNdPVwic2l6ZVhzXCIgW3NpemVTbV09XCJzaXplU21cIlxyXG4gICAgICAgICAgW3NpemVNZF09XCJzaXplTWRcIiBbc2l6ZUxnXT1cInNpemVMZ1wiIFtzaXplWGxdPVwic2l6ZVhsXCIgW29mZnNldFhzXT1cIm9mZnNldFhzXCIgW29mZnNldFNtXT1cIm9mZnNldFNtXCJcclxuICAgICAgICAgIFtvZmZzZXRNZF09XCJvZmZzZXRNZFwiIFtvZmZzZXRMZ109XCJvZmZzZXRMZ1wiIFtvZmZzZXRYbF09XCJvZmZzZXRYbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtZm9ybWdyaWRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4O1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHF1ZXN0aW9uc1swXS5wYWdlc1thY3RpdmVJbmRleF0uZWxlbWVudHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWxlbWVudC50eXBlPT09J3BhbmVsJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93ICpuZ0lmPVwidmlzaWJsZUlmKGVsZW1lbnQudmlzaWJsZUlmLCcnLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxlbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxpb24tY29sIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCIgY2xhc3M9XCJoZWFkaW5nXCIgcm9sZT1cImhlYWRpbmdcIiBhcmlhLWxldmVsPVwiMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ZWxlbWVudC50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDwvaW9uLWNvbD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWxFbGVtZW50IG9mIGVsZW1lbnQuZWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhcmUtcm93XCIgKm5nSWY9XCJwYW5lbEVsZW1lbnQuY29sRWxlbWVudD09PSdDT0wxJyAmJiB2aXNpYmxlSWYocGFuZWxFbGVtZW50LnZpc2libGVJZixwYW5lbEVsZW1lbnQubmFtZSxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0scGFuZWxFbGVtZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcXVlc3Rpb24gW3BvdGVudGlhbElzc3VlSWRdPVwicG90ZW50aWFsSXNzdWVJZFwiIFtxdWVzdGlvbl09XCJwYW5lbEVsZW1lbnRcIiBbZm9ybV09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9yU2NyZWVuUXVlc3Rpb25uYWlyZV09XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlXCIgKG9uRHluYW1pY1BhcmFtVXBkYXRlKT1cInVwZGF0ZUR5bmFtaWNQYXJhbSgkZXZlbnQpXCIgW2R5bmFtaWNQYXJhbV09XCJkeW5hbWljUGFyYW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXF1ZXN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW9uLWNvbCBzaXplPVwiMVwiICpuZ0lmPVwicGFuZWxFbGVtZW50LmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMjhweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cInBhbmVsRWxlbWVudC5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+IC0tPlxyXG5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImVsZW1lbnQudHlwZSE9J3BhbmVsJyAmJiBlbGVtZW50LnR5cGUhPSdoaWRkZW4nICYmIHZpc2libGVJZihlbGVtZW50LnZpc2libGVJZixlbGVtZW50Lm5hbWUsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVMZ109XCJlbGVtZW50LnNpemVMRz4wP2VsZW1lbnQuc2l6ZUxHOicnXCIgW3NpemVTbV09XCJlbGVtZW50LnNpemVTTVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVYc109XCJlbGVtZW50LnNpemVYU1wiIFtzaXplWGxdPVwiZWxlbWVudC5zaXplWEw+MCA/ZWxlbWVudC5zaXplWEw6JydcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaXplTWRdPVwiZWxlbWVudC5zaXplTUQ+MCA/ZWxlbWVudC5zaXplTUQ6JydcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZpZWxkXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcXVlc3Rpb24gW3BvdGVudGlhbElzc3VlSWRdPVwicG90ZW50aWFsSXNzdWVJZFwiIFtxdWVzdGlvbl09XCJlbGVtZW50XCIgW2Zvcm1dPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JTY3JlZW5RdWVzdGlvbm5haXJlXT1cImZvclNjcmVlblF1ZXN0aW9ubmFpcmVcIiBbZHluYW1pY1BhcmFtXT1cImR5bmFtaWNQYXJhbVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgKG9uRHluYW1pY1BhcmFtVXBkYXRlKT1cInVwZGF0ZUR5bmFtaWNQYXJhbSgkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLXF1ZXN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1jb2wgc2l6ZT1cIjFcIiAqbmdJZj1cImVsZW1lbnQuZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctdG9wOiAzNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwiZWxlbWVudC5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1wYWRkaW5nLXN0YXJ0XCIgc2l6ZT1cIjEyXCIgc2l6ZVNtPVwiMTJcIiBzaXplWHM9XCIxMlwiIFtzaXplTWRdPVwicGFnZVR5cGU9PT0nUE9QVVAnPzY6MTJcIlxyXG4gICAgICAgICAgW3NpemVMZ109XCJwYWdlVHlwZT09PSdQT1BVUCc/NjoxMFwiIFtzaXplWGxdPVwicGFnZVR5cGU9PT0nUE9QVVAnPzU6MTBcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiXHJcbiAgICAgICAgICBbb2Zmc2V0WGxdPVwicGFnZVR5cGU9PT0nUE9QVVAnPzA6MVwiIFtvZmZzZXRMZ109XCJwYWdlVHlwZT09PSdQT1BVUCc/MDoxXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mb3JtZ3JpZFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgcXVlc3Rpb25zWzBdLnBhZ2VzW2FjdGl2ZUluZGV4XS5lbGVtZW50czsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIgdmlzaWJsZUlmKGVsZW1lbnQudmlzaWJsZUlmLCcnLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxlbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWxFbGVtZW50IG9mIGVsZW1lbnQuZWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFuZWxFbGVtZW50LmNvbEVsZW1lbnQ9PT0nQ09MMicgJiZcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlSWYocGFuZWxFbGVtZW50LnZpc2libGVJZixwYW5lbEVsZW1lbnQubmFtZSxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0scGFuZWxFbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhbmVsLWFwcCBbcXVlc3Rpb25dPVwicGFuZWxFbGVtZW50XCIgW2Zvcm1dPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yU2NyZWVuUXVlc3Rpb25uYWlyZV09XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFuZWwtYXBwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG4gICAgPC9pb24tZ3JpZD5cclxuXHJcbiAgICA8aW9uLWZvb3RlciAqbmdJZj1cIiFoaWRlRm9vdGVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIidmb290ZXItZml4ZWQnXCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDsgYmFja2dyb3VuZDogd2hpdGU7IG1hcmdpbi1sZWZ0OiAtNXB4O1wiXHJcbiAgICAgICAgKm5nSWY9XCJoaWRlU3RlcCAmJiBwYWdlVHlwZSE9J1BPUFVQJyAmJiBwYWdlVHlwZSE9J1NDUkVFTidcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBwLW5vZ3V0dGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDYwcHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgZmlsbD1cIm91dGxpbmVcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxBY3Rpb24oKVwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICB7e1wiY29tbW9uLmNhbmNlbFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJjb21wbGV0ZSgpXCIgZmlsbD1cInNvbGlkXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIHt7XCJjb21tb24ubmV4dFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IGJhY2tncm91bmQ6IHdoaXRlOyBtYXJnaW4tbGVmdDogLTVweDtcIlxyXG4gICAgICAgICpuZ0lmPVwiaGlkZVN0ZXAgJiYgcGFnZVR5cGU9PSdTQ1JFRU4nICYmIHF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIHAtbm9ndXR0ZXJcIiBzdHlsZT1cImhlaWdodDogNjBweDtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBpb24tdGV4dC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiBmaWxsPVwib3V0bGluZVwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbEFjdGlvbigpXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIHt7XCJjb21tb24uY2FuY2VsXCIgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBpb24tdGV4dC1yaWdodFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cImNvbXBsZXRlKClcIiBmaWxsPVwic29saWRcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAge3tcImNvbW1vbi5kb25lXCIgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpb24tZ3JpZCAqbmdJZj1cImhpZGVTdGVwICYmIHBhZ2VUeXBlPT09J1BPUFVQJ1wiPlxyXG4gICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1sZWZ0IGlvbi1wYWRkaW5nLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiBmaWxsPVwib3V0bGluZVwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbFBvcFVwKClcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAge3tcImNvbW1vbi5jYW5jZWxcIiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHQgaW9uLXBhZGRpbmctZW5kXCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiIGZpbGw9XCJzb2xpZFwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICB7e1wiY29tbW9uLmFkZFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgPC9pb24tZ3JpZD5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhaGlkZVN0ZXBcIj5cclxuICAgICAgICA8bWF0LWhvcml6b250YWwtc3RlcHBlciBsaW5lYXIgI21hdEhvcml6b250YWxTdGVwcGVyIFtzZWxlY3RlZEluZGV4XT1cInF1ZXN0aW9uc1swXS5zdGVwQ291bnRlclwiXHJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInN0ZXBDaGFuZ2VkKCRldmVudCk7XCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiAtd2Via2l0LWNlbnRlcjtcIiBhcmlhLWJ1c3k9XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8bWF0LXN0ZXAgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgIHF1ZXN0aW9uc1swXS5wYWdlczsgIGxldCBpID0gaW5kZXg7XCIgW3N0ZXBDb250cm9sXT1cImZvcm1Hcm91cEFycmF5W2ldXCJcclxuICAgICAgICAgICAgW2NvbXBsZXRlZF09XCIgIGkgPCBhY3RpdmVJbmRleCBcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD57e3F1ZXN0aW9uc1swXS5wYWdlc1tpXS5uYXZpZ2F0aW9uVGl0bGV9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXQgJiYgIWlzTGFzdCAmJiBpc0ZpcnN0ICYmICFpc0VuYWJsZUJhY2tCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmV2ZXJzZVwiIChrZXlVcC5lbnRlcik9XCJuYXZDdHJsLm5hdmlnYXRlUm9vdCgnY2xhaW1hbnQtaW5kdWN0aW9uJylcIiAoY2xpY2spPVwibmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJ2NsYWltYW50LWluZHVjdGlvbicpXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+e3snY29tbW9uLmJhY2snfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoa2V5dXAuZW50ZXIpPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCIgKGNsaWNrKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiPnt7J2NvbW1vbi5uZXh0J3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiAoa2V5VXAuZW50ZXIpPVwiY2FuY2VsQWN0aW9uKClcIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz57eydjb21tb24uYmFjayd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChrZXl1cC5lbnRlcik9XCJjb21wbGV0ZSgpXCIgKGNsaWNrKT1cImNvbXBsZXRlKClcIj57eydjb21tb24ubmV4dCd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXQgJiYgaXNMYXN0ICYmICFpc0ZpcnN0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyAoa2V5dXAuZW50ZXIpPVwicHJldlBhZ2UoYWN0aXZlSW5kZXgpXCIgKGNsaWNrKT1cInByZXZQYWdlKGFjdGl2ZUluZGV4KVwiPnt7J2NvbW1vbi5iYWNrJ3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGtleXVwLmVudGVyKT1cImNvbXBsZXRlKClcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiPnt7J2NvbW1vbi5kb25lJ3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiAhaXNMYXN0ICYmICFpc0ZpcnN0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiBlZGl0YWJsZT1cImZhbHNlXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXMgXHJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInByZXZQYWdlKGFjdGl2ZUluZGV4KVwiIChjbGljayk9XCJwcmV2UGFnZShhY3RpdmVJbmRleClcIj57eydjb21tb24uYmFjayd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChrZXl1cC5lbnRlcik9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIiAoY2xpY2spPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCI+e3snY29tbW9uLm5leHQnfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VuYWJsZUJhY2tCdXR0b24gJiYgIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiAhaXNMYXN0ICYmIGlzRmlyc3RcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmV2ZXJzZVwiIGVkaXRhYmxlPVwiZmFsc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyBcclxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiY2FuY2VsQWN0aW9uKClcIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIj57eydjb21tb24uYmFjayd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChjbGljayk9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIiAoa2V5dXAuZW50ZXIpPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCI+e3snY29tbW9uLm5leHQnfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgPC9tYXQtc3RlcD5cclxuXHJcbiAgICAgICAgPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9pb24tZm9vdGVyPlxyXG4gIDwvZm9ybT5cclxuXHJcblxyXG5cclxuXHJcbiAgPCEtLSA8ZGl2ICpuZ0lmPVwicGF5TG9hZFwiIGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgPHN0cm9uZz5TYXZlZCB0aGUgZm9sbG93aW5nIHZhbHVlczwvc3Ryb25nPjxicj57e3BheUxvYWR9fVxyXG4gICAgPC9kaXY+ICAtLT5cclxuXHJcblxyXG48L2Rpdj5cclxuXHJcbjxhcHAtbGV4aXMtbmV4aXMgKm5nSWY9XCJpc0xleGlzTmV4aXNQb3B1cEVuYWJsZWRcIiBbZGlzcGxheV09XCJpc0xleGlzTmV4aXNQb3B1cEVuYWJsZWRcIiBbcGFnZV09XCJmbG93S2V5XCIgW3VzZXJEZXRhaWxzXT1cInVzZXJEZXRhaWxzXCIgKHN1Y2Nlc3MpPVwib25MblN1Y2Nlc3MoKVwiIChlcnJvcik9XCJvbkxORXJyb3IoKVwiICh1c3BzKT1cInRyaWdnZXJVU1BTKClcIj48L2FwcC1sZXhpcy1uZXhpcz5cclxuPGFwcC1tZmEgI21mYSBbdXNlcl09XCJscy5nZXRVc2VyKClcIiAqbmdJZj1cInNob3dNZmFcIiAoc3VjY2Vzcyk9XCJzYXZlU2NyZWVuUXVlc3Rpb25uYWlyZSgkZXZlbnQpXCIgW2RhdGFdPVwibWZhRGF0YVwiIFtyZXF1ZXN0Q29kZV09XCJ0cnVlXCIgXHJcbiAgICAgICAgIFttZmFFcnJvcl09XCJtZmFFcnJvclwiIFtoaWRlQnV0dG9uc109XCJ0cnVlXCI+PC9hcHAtbWZhPiJdfQ==
1676
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL2R5bmFtaWMtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQW9CLFVBQVUsRUFBb0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJaEQsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBSXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTVDLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUM1QmhELCtCQUFzRCxrQkFBQSxjQUFBO0lBSWhELDBCQUNNOzs7SUFDUixpQkFBTSxFQUFBLEVBQUE7OztJQUxXLGVB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V0FBVyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDO2dCQUNsUixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztnQkFDL1EsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsb0JB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LFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFDO1lBQzFGLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxlQUFlLEtBQUssR0FBRyxFQUFDO2dCQUN4RCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckwsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hLLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9LLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzlKO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNqTCxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUosS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0ssR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUo7U0FDRjtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pKLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pKLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRTNJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxxQkFBcUI7U0FDOUI7UUFFRCxJQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLEVBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRztnQkFDakIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM1RCxnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixrQkFBa0IsRUFBRSxTQUFTO2dCQUM3QixpQkFBaUIsRUFBRSxRQUFRO2dCQUMzQix1QkFBdUIsRUFBRSxPQUFPO2dCQUNoQyxvQkFBb0IsRUFBRSxJQUFJO2dCQUMxQixxQkFBcUIsRUFBRSxLQUFLO2dCQUM1QixtQkFBbUIsRUFBRSxHQUFHO2dCQUN4QixxQkFBcUIsRUFBRSxHQUFHO2dCQUMxQixhQUFhLEVBQUUsS0FBSztnQkFDcEIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsa0JBQWtCLEVBQUUsR0FBRzthQUN4QixDQUFBO1lBQ0QsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRCxpQ0FBaUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUosSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUM7WUFDMUYsSUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLGVBQWUsS0FBSyxHQUFHLEVBQUM7Z0JBQ3hELE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyTCxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEssS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDL0ssR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDOUo7aUJBQU07Z0JBQ0wsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pMLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1SixLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMxSjtTQUNGO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0ksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakosTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFB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QWhCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBK0JGLE9BQU87a0JBRFYsTUFBTTs7a0ZBN0VJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBWYWxpZGF0b3JGbiwgRm9ybUNvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uQmFzZSB9IGZyb20gJy4vcXVlc3Rpb24tYmFzZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL3F1ZXN0aW9uLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFZhbGlkYXRvcnMgfSBmcm9tICcuL0FwcFZhbGlkYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUXVlc3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9xdWVzdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuaW1wb3J0IHsgU3RlcHBlclNlbGVjdGlvbkV2ZW50LCBTVEVQUEVSX0dMT0JBTF9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVzdGlvbm5haXJlL3ZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDbGFpbUFwcEVtcGxveWVyRGV0YWlsc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCc7XHJcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVTYXZlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9RdWVzdGlvbm5haXJlU2F2ZU1vZGVsJztcclxuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlsL3V0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2dnZXIvbG9nZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlUGFnZSB9IGZyb20gJy4uLy4uL3BhZ2VzL0Jhc2VQYWdlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZVF1ZXJ5TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9RdWVzdGlvbm5haXJlUXVlcnlNb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBGYkNvbnN0YW50cyB9IGZyb20gJy4vRmJDb25zdGFudHMnO1xyXG5pbXBvcnQgeyBFbGVtZW50c01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvRWxlbWVudHNNb2RlbCc7XHJcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvZ2luL2xvZ2luLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFcnJvck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0Vycm9yTW9kZWwnO1xyXG5pbXBvcnQgeyBNZmFDb21wb25lbnQgfSBmcm9tICcuLi9tZmEvbWZhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvYWRlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvTG9hZGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ2FwdGNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXB0Y2hhL2NhcHRjaGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IExleGlzTmV4aXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGV4aXMtbmV4aXMvbGV4aXMubmV4aXMuc2VydmljZSc7XHJcbmltcG9ydCB7IExleGlzTmV4aXNBY2NvdW50Q3JlYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9MZXhpc05leGlzQWNjb3VudENyZWF0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBMZXhpc05leGlzRW5hYmxlZFJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvTGV4aXNOZXhpc0VuYWJsZWRSZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgQXBwUmVnZXggfSBmcm9tICcuLi8uLi92YWxpZGF0aW9ucy9BcHBSZWdleCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWR5bmFtaWMtZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxyXG4gIHByb3ZpZGVyczogW1F1ZXN0aW9uQ29udHJvbFNlcnZpY2UsIHtcclxuICAgIHByb3ZpZGU6IFNURVBQRVJfR0xPQkFMX09QVElPTlMsXHJcbiAgICB1c2VWYWx1ZToge1xyXG4gICAgICBzaG93RXJyb3I6IHRydWUsXHJcbiAgICAgIGRpc3BsYXlEZWZhdWx0SW5kaWNhdG9yVHlwZTogZmFsc2VcclxuICAgIH1cclxuICB9XSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybUNvbXBvbmVudCBleHRlbmRzIEJhc2VQYWdlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIFxyXG4gIEBWaWV3Q2hpbGQoJ21mYScpIG1mYTogTWZhQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKCdxdWVzdGlvbm5haXJlRm9ybScsIHtzdGF0aWMgOiBmYWxzZX0pIFxyXG4gIHB1YmxpYyBxdWVzdGlvbm5haXJlRm9ybTogTmdGb3JtO1xyXG4gIHB1YmxpYyBwb3RlbnRpYWxJc3N1ZUlkOiBudW1iZXI7XHJcbiAgcHVibGljIGJsb2NrVWkgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd01mYSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogUXVlc3Rpb25CYXNlPHN0cmluZz5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGZvclNjcmVlblF1ZXN0aW9ubmFpcmU6IFF1ZXN0aW9uQmFzZTxib29sZWFuPjtcclxuICBASW5wdXQoKSBpc0VuYWJsZUJhY2tCdXR0b246Qm9vbGVhbjtcclxuICBASW5wdXQoKSBiYWNrQnV0dG9uUGFnZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5leHRCdXR0b25QYWdlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFnZVR5cGU6IHN0cmluZztcclxuICBASW5wdXQoKSBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbXVsdGlNb2RlOiBib29sZWFuID0gZmFsc2U7IC8vd2hlbiBtdWx0aXBsZSBmb3JtcyBhcmUgZGlzcGxheWVkIG9uZSBiZWxvdyB0aGUgYW5vdGhlclxyXG4gIEBJbnB1dCgpIGxvYWRlclNlcnZpY2U6c3RyaW5nO1xyXG4gIHB1YmxpYyBsb2FkZXJNb2RlbCA6IExvYWRlck1vZGVsO1xyXG4gIC8qKlxyXG4gICAqIHdoZW4gYXV0b1NhdmUgaXMgZmFsc2UsIGNvbXBvbmVudCB3aWxsIG9ubHkgZW1pdCB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gYnVpbGVyIGRhdGEgd2hpY2ggbmVlZHMgdG8gYmUgc2F2ZWQgYnkgdGhlIGNhbGxpbmcgY29tcG9uZW50XHJcbiAgICogb25seSBhcHBsaWNhYmxlIHdoZW4gcGFnZVR5cGUgaXMgbm90IFBPUFVQIGFuZCBKU09OXHJcbiAgKiovXHJcbiAgQElucHV0KCkgYXV0b1NhdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIG1mYVJlcXVpcmVkIDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBtb2RlbENhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKCdtYXRIb3Jpem9udGFsU3RlcHBlcicpIHN0ZXBwZXI6IE1hdFN0ZXBwZXI7XHJcbiAgQElucHV0KCkgZGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHJlYWRPbmx5RmllbGRzOiBzdHJpbmdbXTtcclxuICBASW5wdXQoKSBmb3JtUmVhZE9ubHk6IEJvb2xlYW47XHJcbiAgQElucHV0KCkgcXVlcnlNb2RlbDogUXVlc3Rpb25uYWlyZVF1ZXJ5TW9kZWw7XHJcbiAgQElucHV0KCkgZHluYW1pY1BhcmFtIDogYW55O1xyXG4gIEBJbnB1dCgpIGZvcm1EYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25OdW1iZXI6IG51bWJlciA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHNpemVYcyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBzaXplU20gOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZU1kIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNpemVMZyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBzaXplWGwgOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpIG9mZnNldFhzIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG9mZnNldFNtIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG9mZnNldE1kIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG9mZnNldExnIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG9mZnNldFhsIDogbnVtYmVyO1xyXG5cclxuICAvLyBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgZm9ybUdyb3VwQXJyYXk6IFVudHlwZWRGb3JtR3JvdXBbXSA9IFtdO1xyXG4gIHBheUxvYWQgPSAnJztcclxuICBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG4gIGlzRmlyc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzTGFzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpZGVTdGVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaWRlbnRpZmllcjogc3RyaW5nID0gXCJcIjtcclxuICBhY3RpdmVJbmRleDogbnVtYmVyID0gMDtcclxuICBlcnJvck9jY3VyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtZmFEYXRhIDogYW55O1xyXG4gIG1mYUVycm9yIDogRXJyb3JNb2RlbDtcclxuICBzc25Gb3JDU1IgOiBzdHJpbmc7XHJcbiAgcGF5bWVudERldGFpbENoYW5nZUhhc0Vycm9yIDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc0xleGlzTmV4aXNQb3B1cEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbnB1dERhdGEgOiBRdWVzdGlvbm5haXJlU2F2ZU1vZGVsO1xyXG4gIHJlc3BvbnNlVXVpZCA6IHN0cmluZyA9IFwiXCI7XHJcbiAgdXNlckRldGFpbHMgOiBMZXhpc05leGlzQWNjb3VudENyZWF0aW9uTW9kZWw7XHJcbiAgZm9ybVJhd0RhdGEgOiBhbnk7XHJcbiAgZmxvd0tleSA6IG51bWJlcjtcclxuXHJcbiAgIEJhbmtEZXRhaWxzSW52YWxpZEVycm9yOiBzdHJpbmc9XCJcIjtcclxuICAgcm91dGluZ051bWJlcmZsYWcgOiBib29sZWFuID0gdHJ1ZTtcclxuICAgYWNjb3VudE51bWJlcmZsZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgIHJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgXHJcbiAgQE91dHB1dCgpXHJcbiAgZ2V0IGludmFsaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBBcnJheS5tYXAoeCA9PiB4LmludmFsaWQpLnJlZHVjZSgoYSxiKSA9PiBhICYmIGIpO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcWVzOiBRdWVzdGlvblNlcnZpY2UsIHB1YmxpYyBxdWVzdGlvbm5haXJlU2VydmljZTogUXVlc3Rpb25uYWlyZVNlcnZpY2UsIHB1YmxpYyBuYXZDdHJsOiBOYXZDb250cm9sbGVyLFxyXG4gICAgcHJpdmF0ZSBxY3M6IFF1ZXN0aW9uQ29udHJvbFNlcnZpY2UsIHB1YmxpYyB1dGlsOiBVdGlsU2VydmljZSxwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLCBwdWJsaWMgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIHN0b3JhZ2UgOiBTdG9yYWdlLCBwdWJsaWMgbHMgOiBMb2dpblNlcnZpY2UsIHB1YmxpYyBjYXB0Y2hhIDogQ2FwdGNoYVNlcnZpY2UsIHB1YmxpYyBsbjogTGV4aXNOZXhpc1NlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnN0b3JhZ2UuY3JlYXRlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiU3RvcmFnZSBEQiBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5cIik7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLypUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIEBJbnB1dCAnZm9ybURhdGEnIHZhbHVlIGlzIGNoYW5nZWQgZm9yIHRoaXMgY29udHJvbCovICAgXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYoY2hhbmdlcy5mb3JtRGF0YT8uY3VycmVudFZhbHVlKXtcclxuICAgICAgaWYoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUpe1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyhjaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGNoYW5nZXMucmVhZE9ubHlGaWVsZHM/LmN1cnJlbnRWYWx1ZSl7XHJcbiAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmKGNoYW5nZXMucmVhZE9ubHlGaWVsZHM/LnByZXZpb3VzVmFsdWUgJiYgY2hhbmdlcy5yZWFkT25seUZpZWxkcy5jdXJyZW50VmFsdWUgPT0gbnVsbCl7XHJcbiAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybVZhbHVlcyhkYXRhKXtcclxuICAgIE9iamVjdC5rZXlzKGRhdGEpXHJcbiAgICAgICAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWd1cmF0aW9uKGtleSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUb1NldCA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmKHF1ZXN0aW9uKXtcclxuICAgICAgICAgICAgICAgICAgLyoqIEZvciBkcm9wZG93biBmb3JtIGNvbnRyb2wsIGV4cGVjdGluZyB0byBnZXQgZGF0YSBpbiBmb3JtIHt2YWx1ZSA6IFwic29tZVZhbHVlXCIsIHRleHQ6IG51bGx9LlxyXG4gICAgICAgICAgICAgICAgICAgKiBCYXNlZCBvbiB0aGUgdmFsdWUgYXR0cmlidXRlLCBvcHRpb24gd2lsbCBiZSBzZXQgb24gZm9ybSBjb250cm9sIGFmdGVyIHJlYWRpbmcgaXQgZnJvbSBjaG9pY2VzXHJcbiAgICAgICAgICAgICAgICAgICAqIGFycmF5LlxyXG4gICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICBpZih2YWx1ZVRvU2V0KXtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNob2ljZSA9IHF1ZXN0aW9uLmNob2ljZXMuZmlsdGVyKG8gPT4gby52YWx1ZSA9PSAodmFsdWVUb1NldD8udmFsdWUgPyB2YWx1ZVRvU2V0LnZhbHVlIDogdmFsdWVUb1NldCkpWzBdO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlSW5Gb3JtQ29udHJvbChrZXksIGNob2ljZSk7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVJbkZvcm1Db250cm9sKGtleSwgdmFsdWVUb1NldCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZUluRm9ybUNvbnRyb2wobmFtZSwgdmFsdWUpe1xyXG4gICAgaWYodGhpcy5mb3JtR3JvdXBBcnJheSAmJiB0aGlzLmZvcm1Hcm91cEFycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmNvbnRyb2xzW25hbWVdO1xyXG4gICAgICBpZihjb250cm9sKXtcclxuICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYobmFtZSA9PSAnZGVwZW5kZW50VGFibGUnKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBmb3JtIGNvbnRyb2wgcHJlc2VudCBkZXBlbmRlbnRUYWJsZSAnLCBuYW1lKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gZm9ybSBjb250cm9sIHByZXNlbnQgd2l0aCBuYW1lICcsIG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJObyBmb3JtIGdyb3VwIHByZXNlbnQgc28gc2tpcHBpbmcgdmFsdWUgYXNzaWdubWVudCBmcm9tIGRhdGEuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogVG8gZ2V0IHRoZSBkcm9wZG93biBlbGVtZW50IHNvIHRoYXQgdmFsdWUgZnJvbSB0aGUgY2hvaWNlcyBjYW4gYmUgcmVhZCBhbmQgc2V0IGludG8gdGhlIGZvcm0gY29udHJvbCovXHJcbiAgZ2V0Rm9ybUNvbnRyb2xDb25maWd1cmF0aW9uKG5hbWUpe1xyXG4gICAgbGV0IGZpbHRlcmVkVmFsdWVzID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbdGhpcy5hY3RpdmVJbmRleF0uZWxlbWVudHMuZmlsdGVyKHEgPT4gcS5uYW1lID09IG5hbWUgJiYgcS50eXBlID09ICdkcm9wZG93bicpO1xyXG4gICAgaWYoZmlsdGVyZWRWYWx1ZXMgJiYgZmlsdGVyZWRWYWx1ZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZFZhbHVlc1swXTtcclxuICAgIH1lbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXR1cExvYWRlck1vZGVsKCkge1xyXG4gIFxyXG4gICAgaWYgKHRoaXMubG9hZGVyU2VydmljZSkge1xyXG4gICAgICBsZXQgc2VydmljZVVybHM6IHN0cmluZ1tdID0gdGhpcy5sb2FkZXJTZXJ2aWNlLnNwbGl0KCcsJyk7XHJcbiAgICAgIGxldCBzZXJ2aWNlVXJsID0gc2VydmljZVVybHNbdGhpcy5hY3RpdmVJbmRleF07XHJcbiAgICAgIGlmKHNlcnZpY2VVcmwudHJpbSgpICE9ICdudWxsJyl7XHJcbiAgICAgIHRoaXMuYmxvY2tGb3JtVWkoKTtcclxuICAgICAgbGV0IHNlcnZpY2VVcmxWYWx1ZSA9IHNlcnZpY2VVcmwudHJpbSgpO1xyXG4gICAgICBpZih0aGlzLmxzLmlzQ3NyKCkpe1xyXG4gICAgICAgIHNlcnZpY2VVcmxWYWx1ZSA9IHNlcnZpY2VVcmxWYWx1ZTsgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMubHMuaXNDc3IoKSA/IHsgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnc3NuJywgdGhpcy5zc25Gb3JDU1IpIH0gOiB7fTtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgIC5nZXQ8TG9hZGVyTW9kZWw+KGAke3NlcnZpY2VVcmxWYWx1ZX1gLCBvcHRpb25zKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlck1vZGVsID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcImxvYWRlciBtb2RlbCAgPSBcIiArIHRoaXMubG9hZGVyTW9kZWwpOyAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubG9hZGVyTW9kZWwgJiYgdGhpcy5sb2FkZXJNb2RlbC5kaXNhYmxlQ29udHJvbE5hbWVzKXtcclxuICAgICAgICAgICAgICB0aGlzLnJlYWRPbmx5RmllbGRzID0gdGhpcy5sb2FkZXJNb2RlbC5kaXNhYmxlQ29udHJvbE5hbWVzO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiB0aGlzLnJlYWRPbmx5RmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBKU09OLnBhcnNlKHRoaXMucWNzLmdldERhdGEodGhpcy5hY3RpdmVJbmRleCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0ucGF0Y2hWYWx1ZSh0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmxvYWRlck1vZGVsICYmIHRoaXMubG9hZGVyTW9kZWwuZGF0YSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHRoaXMubG9hZGVyTW9kZWwuZGF0YTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5mb3JtRGF0YSk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuaGlkZUxvYWRlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuZXJyb3JIYW5kbGVyKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgfSlcclxuICAgIH0gXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmKHRoaXMucWNzLmdldERhdGEodGhpcy5hY3RpdmVJbmRleCkgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBKU09OLnBhcnNlKHRoaXMucWNzLmdldERhdGEodGhpcy5hY3RpdmVJbmRleCkpO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdLnBhdGNoVmFsdWUodGhpcy5mb3JtRGF0YSk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmRhdGEpe1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5mb3JtRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYodGhpcy5mb3JtRGF0YSl7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLmZvcm1EYXRhKTtcclxuICAgIH0gIFxyXG4gIH0gXHJcbn1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5pdCBtZXRob2QgY2FsbGVkIGZyb20gZHluYW1pYyBmb3JtJywgdGhpcy5xdWVzdGlvbnMpXHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnIGJhY2tCdXR0b25QYWdlICcsIHRoaXMuYmFja0J1dHRvblBhZ2UsICcgbmV4dEJ1dHRvblBhZ2UnLCB0aGlzLm5leHRCdXR0b25QYWdlKTtcclxuICAgIGlmICghdGhpcy5xdWVzdGlvbnMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmhpZGVTdGVwID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGaXJzdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyS2V5ID0gW107XHJcbiAgICBsZXQgcGFyYW1NYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHN0cktleSA9IFtdID0gcGFyYW1zLmtleXM7XHJcbiAgICAgIHRoaXMuaWRlbnRpZmllciA9IHBhcmFtcy5nZXQoJ2lkZW50aWZpZXInKTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJLZXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnc3RyaW5nS2V5ICcsIHN0cktleVtpXSwgcGFyYW1zLmdldChzdHJLZXlbaV0pKTtcclxuICAgICAgICBwYXJhbU1hcC5zZXQoc3RyS2V5W2ldLCBwYXJhbXMuZ2V0KHN0cktleVtpXSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHBhcmFtTWFwLmdldChcImtleVwiKSAhPSBudWxsKXtcclxuICAgICAgICB0aGlzLnNzbkZvckNTUiA9IGF0b2IocGFyYW1NYXAuZ2V0KFwia2V5XCIpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKTtcclxuICAgIFxyXG4gICAgbGV0IGNvdW50ZXIgPSB0aGlzLnF1ZXN0aW9uc1swXS5zdGVwQ291bnRlcjtcclxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBjb3VudGVyID8gY291bnRlciA6IDAgO1xyXG4gICAgLy90aGlzLnN0ZXBwZXJcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJCbG9jayBzdGF0ZW1lbnQgZXhlY3V0aW9uIG5vLlwiLCB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGgpO1xyXG4gICAgICBmb3JtR3JvdXAgPSB0aGlzLnFjcy50b0Zvcm1Hcm91cCh0aGlzLnF1ZXN0aW9ucywgaSwgcGFyYW1NYXApO1xyXG4gICAgICB0aGlzLnNldFZhbGlkYXRpb24oaSwgZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWVTdWJzY3JpcHRpb24oaSwgZm9ybUdyb3VwKTtcclxuICAgICAgdGhpcy5zZXRSZWFkT25seShpLCBmb3JtR3JvdXApO1xyXG4gICAgICB2YXIgcGFnZXM6IGFueSA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW2ldO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygncGFnZXMnLCBwYWdlcylcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIGlmIChwYWdlcy5lbGVtZW50cykge1xyXG4gICAgICAgIHBhZ2VzLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQgOiBFbGVtZW50c01vZGVsKSA9PiB7XHJcblxyXG4gICAgICAgICAgbGV0IGNvbnRybFR5cGU6IHN0cmluZyA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICAgIGlmIChjb250cmxUeXBlID09PSAncGFuZWwnKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBJZicsZWxlbWVudClcclxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKHBhbmVsRWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHBhbmVsRWxlbWVudC5yZXF1aXJlZElmICYmICgocGFuZWxFbGVtZW50LnR5cGUgIT0gJ2J1dHRvbicgJiYgcGFuZWxFbGVtZW50LnR5cGUgIT0gJ3NpbXBsZUxhYmVsJyYmIHBhbmVsRWxlbWVudC50eXBlICE9ICdsYWJlbCcpIHx8IHBhbmVsRWxlbWVudC5jb21wb25lbnROYW1lID09ICdhcHAtbGluaycgfHwgcGFuZWxFbGVtZW50LmNvbXBvbmVudE5hbWUgPT0gJ2FwcC1zaWduLXNzbicpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocGFuZWxFbGVtZW50LnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JMaXN0ID0gcGFuZWxFbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKFwicGFuZWwgdmFsaWRhdGlvbi4xMTFcIixwYW5lbEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nICYmIHBhbmVsRWxlbWVudC5pbnB1dFR5cGUgJiYgcGFuZWxFbGVtZW50LmlucHV0VHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldERhdGVWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicgJiYgcGFuZWxFbGVtZW50LmlucHV0VHlwZSAmJiBwYW5lbEVsZW1lbnQuaW5wdXRUeXBlID09PSAndGV4dCdcclxuICAgICAgICAgICAgICAgICAgICAmJiBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnICYmIChwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAncGFzc3dvcmQnIHx8ICBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAnZW1haWwnIHx8ICBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAnc3NuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGV4cHJlc3Npb24nKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0UGFzc3dvcmRWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnY3VzdG9tdmFsaWRhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLmN1c3RvbVZhbGlkYXRpb24ocGFuZWxFbGVtZW50LCB2YWxpZGF0b3IsIHRoaXMudXRpbC5nZXRTdGF0ZSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBlbHNlJyxlbGVtZW50KVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmICYmICgoZWxlbWVudC50eXBlICE9ICdidXR0b24nICYmIGVsZW1lbnQudHlwZSAhPSAnc2ltcGxlTGFiZWwnICYmIGVsZW1lbnQudHlwZSAhPSAnbGFiZWwnKSB8fCBlbGVtZW50LmNvbXBvbmVudE5hbWUgPT0gJ2FwcC1saW5rJyB8fCBlbGVtZW50LmNvbXBvbmVudE5hbWUgPT0gJ2FwcC1zaWduLXNzbicpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXRSZXF1aXJlZElmVmFsaWRhdGlvbihlbGVtZW50LCB0aGlzLnFjcy5nZXRBbGxEYXRhKCkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJyAmJiBlbGVtZW50LmlucHV0VHlwZSAmJiBlbGVtZW50LmlucHV0VHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgZXhwcmVzc2lvbicpXHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0RGF0ZVZhbGlkYXRpb24oZWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdjdXN0b212YWxpZGF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLmN1c3RvbVZhbGlkYXRpb24oZWxlbWVudCwgdmFsaWRhdG9yLCB0aGlzLnV0aWwuZ2V0U3RhdGUoKSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNlcnZpY2VUeXBlICYmIGVsZW1lbnQuc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuICAgICAgICAgICAgICAvL3ZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuY3JlYXRlVmFsaWRhdG9yKHRoaXMudmFsaWRhdGlvblNlcnZpY2UsZWxlbWVudCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb3JtR3JvdXAuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXkucHVzaChmb3JtR3JvdXApO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcInBhZ2VzLnFlRGF0YVwiLCBwYWdlcy5xZURhdGEpO1xyXG4gICAgICBpZihwYWdlcy5xZURhdGEpe1xyXG4gICAgICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKHBhZ2VzLnFlRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJzZXQgdmFsdWVzIGFzIHBlciBsb2FkZXIgc2VydmljZSA9IFwiLCB0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybURhdGEgJiYgdGhpcy5mb3JtRGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5mb3JtUmVhZE9ubHkpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W2ldLmRpc2FibGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5yZWFkT25seUZpZWxkcyAmJiB0aGlzLnJlYWRPbmx5RmllbGRzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgY250cmxOYW1lIG9mIHRoaXMucmVhZE9ubHlGaWVsZHMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5W2ldLmdldChjbnRybE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbaV0uZ2V0KGNudHJsTmFtZSkuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0dXBMb2FkZXJNb2RlbCgpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wYWdlVHlwZSA9PT0gJ1BPUFVQJykge1xyXG4gICAgICBsZXQgbW9kZWwgPSBuZXcgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCgpO1xyXG4gICAgICBtb2RlbCA9IHRoaXMuZGF0YTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5wYXRjaFZhbHVlKG1vZGVsKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3RoaXMuZm9ybUdyb3VwQXJyYXkgYWZ0ZXIgSUYnLCB0aGlzLmZvcm1Hcm91cEFycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYWdlVHlwZSA9PT0gJ0pzb24nICYmIHRoaXMuZm9ybURhdGEpIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5wYXRjaFZhbHVlKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgICBpZiAodGhpcy5mb3JtUmVhZE9ubHkpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5WzBdLmRpc2FibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgdGhpcy5yZWFkT25seUZpZWxkcykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbMF0uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5nZXQoY250cmxOYW1lKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGN1cnJlbnRRZSA9IHRoaXMucWVzLnNlYXJjaEJzLmdldFZhbHVlKCk7XHJcbiAgICB0aGlzLnBvdGVudGlhbElzc3VlSWQgPSBjdXJyZW50UWU/LnBvdGVudGlhbElzc3VlSWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZVN1YnNjcmlwdGlvbihwYWdlSW5kZXg6IG51bWJlciwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICB2YXIgcGFnZXM6IGFueSA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW3BhZ2VJbmRleF07XHJcbiAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcclxuICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xyXG4gICAgICAgIGlmIChlbGVtZW50LnN1YnNjcmliZVZhbHVlT2YpIHtcclxuICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50LnN1YnNjcmliZVZhbHVlT2ZdXHJcbiAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsdWUodmFsdWUpKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgIGVsZW1lbnQuZWxlbWVudHMpXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKHBhbmVsRWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mKSB7XHJcbiAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW3BhbmVsRWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mXS52YWx1ZUNoYW5nZXMuXHJcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmUoKGNoYW5nZSkgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW3BhbmVsRWxlbWVudC5uYW1lXS5zZXRWYWx1ZShjaGFuZ2UpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seShwYWdlSW5kZXg6IG51bWJlciwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICB2YXIgcGFnZXM6IGFueSA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW3BhZ2VJbmRleF07XHJcbiAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcclxuICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xyXG4gICAgICAgIGlmIChlbGVtZW50LnJlYWRvbmx5KSB7XHJcbiAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5kaXNhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgIGVsZW1lbnQuZWxlbWVudHMpXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVhZG9ubHkpIHtcclxuICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcGFuZWxFbGVtZW50Lm5hbWVdLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0aW9uKHBhZ2VJbmRleDogbnVtYmVyLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIHZhciBwYWdlczogYW55ID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbcGFnZUluZGV4XTtcclxuICAgIC8vdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMuZm9yRWFjaChwYWdlcyA9PiB7XHJcbiAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcclxuICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xyXG4gICAgICAgIC8vICB0aGlzLmxvZ2dlci5kZWJ1ZygnZWxlbWVudCA9PSAnLGVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAndGV4dCcgfHwgY29udHJsVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAnY29tbWVudCcpIHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckNvbW1lbnRDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2woZWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdyYWRpb2dyb3VwJyB8fCBjb250cmxUeXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yUmFkaW9Db250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAnY2hlY2tib3gnIHx8IGNvbnRybFR5cGUgPT09ICdzaW5nbGVzZWxlY3RjaGVja2JveCcgfHwgY29udHJsVHlwZSA9PT0gJ3NpbXBsZWNoZWNrYm94JyB8fCBjb250cmxUeXBlID09PSAnbXVsdGljaGVja2JveCcpIHtcclxuICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzaW5nbGVzZWxlY3RjaGVja2JveCBjYWxsZWQnLGVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yQ2hlY2tCb3hDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgIGVsZW1lbnQuZWxlbWVudHMpXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgbGV0IHBhbmVsQ29udHJsVHlwZTogc3RyaW5nID0gcGFuZWxFbGVtZW50LnR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBwYW5lbENvbnRybFR5cGUnLCBwYW5lbEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yRHJvcERvd25Db250cm9sKHBhbmVsRWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAndGV4dCcgfHwgcGFuZWxDb250cmxUeXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdwYW5lbENvbnRybFR5cGUnLCAgcGFuZWxDb250cmxUeXBlLCdwYW5lbEVsZW1lbnQnLHBhbmVsRWxlbWVudClcclxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbChwYW5lbEVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhbmVsQ29udHJsVHlwZSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IHBhbmVsQ29udHJsVHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JSYWRpb0NvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAnY2hlY2tib3gnIHx8IHBhbmVsQ29udHJsVHlwZSA9PT0gJ3NpbmdsZXNlbGVjdGNoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckNoZWNrQm94Q29udHJvbChwYW5lbEVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIC8vfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvckNoZWNrQm94Q29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0aW9uRm9yUmFkaW9Db250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvckRyb3BEb3duQ29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuICAgICAgLy9WYWxpZGF0aW9uIG5lZWQgdG8gYmUgY2hlY2tcclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1Zygnc2V0VmFsaWRhdGlvbkZvckRyb3BEb3duQ29udHJvbCcsIGVsZW1lbnQubmFtZSlcclxuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICB9XHJcbiAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKGVsZW1lbnQubmFtZSwnZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0nLGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKTtcclxuICB9XHJcblxyXG5cclxuICBzZXRWYWxpZGF0aW9uRm9yQ29tbWVudENvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1Zygnc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sJyxlbGVtZW50KTtcclxuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2wgaXNSZXF1aXJlZCAnLGVsZW1lbnQpO1xyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50LnZhbGlkYXRvcnMpIHtcclxuICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IGVsZW1lbnQudmFsaWRhdG9ycztcclxuICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nICYmIGVsZW1lbnQuaW5wdXRUeXBlICYmIGVsZW1lbnQuaW5wdXRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGV4cHJlc3Npb24nKVxyXG4gICAgICAgICAgICAvLyB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldERhdGVWYWxpZGF0aW9uKHZhbGlkYXRvci5leHByZXNzaW9uLCB0aGlzLnFjcy5nZXRBbGxEYXRhKCksIHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3JlZ2V4Jykge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odmFsaWRhdG9yLnJlZ2V4KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICd0ZXh0JyAmJiB2YWxpZGF0b3IubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbGlkYXRvci5taW5MZW5ndGgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3RleHQnICYmIHZhbGlkYXRvci5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodmFsaWRhdG9yLm1heExlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5tYXgodmFsaWRhdG9yLm1heFZhbHVlKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfVxyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0UGFnZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIm5leHQgcGFnZSBjYWxsZWQgLS0tLSBcIilcclxuICAgIGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W2luZGV4XTtcclxuICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGlmJywgZm9ybUdyb3VwKTtcclxuICAgICAgZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgT2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucWNzLnNldERhdGEodGhpcy5hY3RpdmVJbmRleCwgSlNPTi5zdHJpbmdpZnkoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpKTtcclxuICAgIC8vTG9naWMgdG8gc2F2ZSBzdGFydFxyXG4gICAgbGV0IHN0ckludG9PYmo7XHJcbiAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgc3RySW50b09iaiA9IChkYXRhKTtcclxuICAgICAgdGhpcy5wYXlMb2FkID0gKHRoaXMucGF5TG9hZCArIHN0ckludG9PYmopO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHNhdmVEYXRhID0ge30gYXMgUXVlc3Rpb25uYWlyZVNhdmVNb2RlbDtcclxuICAgIGxldCBjdXJyZW50UWUgPSB0aGlzLnFlcy5zZWFyY2hCcy5nZXRWYWx1ZSgpO1xyXG4gICAgbGV0IGVtcGxveWVlRGF0YSA9IHRoaXMucWVzLmVtcGxveWVlQnMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdlbXBsb3llZURhdGEgJywgZW1wbG95ZWVEYXRhKTtcclxuICAgIGlmICh0aGlzLmZvclNjcmVlblF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgbGV0IGRhdGFBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIHRoaXMucWNzLmdldEFsbERhdGEoKS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGRhdGFBcnIucHVzaChkYXRhKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHNhdmVEYXRhLnNjcmVlblF1ZXN0aW9ubmFpcmVEYXRhID0gZGF0YUFycjtcclxuICAgICAgc2F2ZURhdGEudXNlclR5cGUgPSBjdXJyZW50UWUudXNlclR5cGU7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xyXG4gICAgICBzYXZlRGF0YS5xdWVzdGlvbm5haXJlSWRzID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZHM7XHJcbiAgICAgIHNhdmVEYXRhLmVtcE1vZGVsID0gZW1wbG95ZWVEYXRhO1xyXG4gICAgICBzYXZlRGF0YS51dWlkID0gdGhpcy5pZGVudGlmaWVyOy8vY3VycmVudFFlLnV1aWQ7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dLZXkgPSBjdXJyZW50UWUuZmxvd0tleTtcclxuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZDtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3NhdmUgRGF0YSAnLCBzYXZlRGF0YSlcclxuICAgICAgdGhpcy51dGlsLnNob3dMb2FkZXIoKTtcclxuICAgICAgc2Nyb2xsVG8oMCwwKTtcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZVxyXG4gICAgICAgIC5zYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShzYXZlRGF0YSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHJlcyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXMgdXVpZCA9PT09IFwiICwgcmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnV1aWQubmV4dChyZXNbRmJDb25zdGFudHMudXVpZF0pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMudXVpZCwgcmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICBpZihyZXNbJ3JlZGlyZWN0VG9FbmQnXSA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnN1Y2Nlc3NFbGVtZW50Lm5leHQocmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS53YWl0Rm9yUHJvY2Vzc2luZy5uZXh0KHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS5wYWdlVG9PcGVuLm5leHQocmVzW0ZiQ29uc3RhbnRzLnBhZ2VUb09wZW5dKTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudCwgcmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZywgcmVzW0ZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nXSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnBhZ2VUb09wZW4sIHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByZXZBbmROZXh0QnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHJlc1sndXVpZCddOyAgIFxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFzZVBhZ2UucHJpbWVOR0ZpeGVzKCk7ICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSwgMzAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JPY2N1cmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmVycm9ySGFuZGxlcihlcnIpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBwcmV2UGFnZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXggLSAxO1xyXG4gICAgc2Nyb2xsVG8oMCwwKTtcclxuICAgIHRoaXMuc2V0UHJldkFuZE5leHRCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIHZpc2libGVJZihzdHJFeHA6IHN0cmluZywgZWxlbWVudE5hbWU6IHN0cmluZywgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBlbGVtZW50OiBhbnkpIHtcclxuXHJcblxyXG4gICAgaWYgKCFzdHJFeHApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgaXNWaXNpYmxlIDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYoc3RyRXhwLmluY2x1ZGVzKCcmJicpKXtcclxuICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IHN0ckV4cC5zcGxpdCgnJiYnKTtcclxuICAgICAgaXNWaXNpYmxlID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCkgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICBpZihleHByLmxlbmd0aCA+PSAzKXtcclxuICAgICAgICBpc1Zpc2libGUgPSBpc1Zpc2libGUgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgfVxyXG4gICAgICBpZihleHByLmxlbmd0aCA+PSA0KXtcclxuICAgICAgICBpc1Zpc2libGUgPSBpc1Zpc2libGUgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclszXS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgfVxyXG4gICAgICBpZihleHByLmxlbmd0aCA9PSA1KXtcclxuICAgICAgICBpc1Zpc2libGUgPSBpc1Zpc2libGUgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwcls0XS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgfVxyXG4gICAgICBpZihleHByLmxlbmd0aCA+IDUpe1xyXG4gICAgICAgICAgdGhyb3cgXCJBcHBWYWxpZGF0b3JzIDogTW9yZSB0aGFuIDUgJyYmJyBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKHN0ckV4cC5pbmNsdWRlcygnfHwnKSl7XHJcbiAgICAgIGxldCBleHByIDogc3RyaW5nW10gPSBzdHJFeHAuc3BsaXQoJ3x8Jyk7XHJcbiAgICAgIGlzVmlzaWJsZSA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXApIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID49IDMpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID49IDQpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzNdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID09IDUpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID4gNSl7XHJcbiAgICAgICAgICB0aHJvdyBcIkFwcFZhbGlkYXRvcnMgOiBNb3JlIHRoYW4gNSAnfHwnIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkLlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXN0ckV4cC5pbmNsdWRlcygnfHwnKSAmJiAhc3RyRXhwLmluY2x1ZGVzKCcmJicpKXtcclxuICAgICAgaXNWaXNpYmxlID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoc3RyRXhwLnRyaW0oKSwgZm9ybUdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihpc1Zpc2libGUpe1xyXG4gICAgICByZXR1cm4gaXNWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoZWxlbWVudE5hbWUgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnROYW1lXSAmJiAhZWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mKSB7XHJcbiAgICAgIGlmKHRoaXMuZm9ybURhdGEgJiYgIXRoaXMuZm9ybURhdGFbZWxlbWVudE5hbWVdKXtcclxuICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudE5hbWVdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlydHlJdGVtcygpe1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwQXJyYXkubWFwKHk9Pk9iamVjdC5lbnRyaWVzKHkuY29udHJvbHMpLmZpbHRlcih2YWx1ZSA9PiAhdmFsdWVbMV0ucHJpc3RpbmUpLm1hcCh4ID0+IHhbMF0pKS5yZWR1Y2UoKHgseSk9PnguY29uY2F0KHkpKTtcclxuICB9XHJcblxyXG4gIGdldERpcnR5SXRlbXNXaXRoVmFsdWVzKCk6IEFycmF5PHsgY29udHJvbE5hbWU6IHN0cmluZywgY29udHJvbFZhbHVlOiBhbnkgfT4gIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cEFycmF5XHJcbiAgICAgIC5tYXAoeSA9PlxyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHkuY29udHJvbHMpICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBmb3JtIGNvbnRyb2wgaW4gdGhlIGZvcm0gZ3JvdXBcclxuICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gIXZhbHVlWzFdLnByaXN0aW5lKSAgLy8gRmlsdGVyIGZvciBkaXJ0eSBjb250cm9sc1xyXG4gICAgICAgICAgLm1hcCh4ID0+ICh7IGNvbnRyb2xOYW1lOiB4WzBdLCBjb250cm9sVmFsdWU6IHhbMV0udmFsdWUgfSkpICAvLyBHZXQgbmFtZSBhbmQgdmFsdWUgb2YgZGlydHkgY29udHJvbHNcclxuICAgICAgKVxyXG4gICAgICAucmVkdWNlKChhY2N1bSwgY3VycikgPT4gYWNjdW0uY29uY2F0KGN1cnIpLCBbXSk7ICAvLyBGbGF0dGVuIHRoZSBhcnJheSBvZiBhcnJheXNcclxuICB9XHJcbiAgXHJcblxyXG4gIGNvbXBsZXRlKCkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ2NvbXBsZXRlIG1ldGhvZCBjYWxsZWQgPT09PT09PScpO1xyXG4gICAgaWYodGhpcy5tZmFSZXF1aXJlZCAmJiB0aGlzLnNob3dNZmEgJiYgdGhpcy5tZmEpe1xyXG4gICAgICB0aGlzLm1mYS5zdWJtaXQoKTtcclxuICAgIH1cclxuICAgIHNjcm9sbFRvKDAsMCk7XHJcbiAgICBsZXQgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1N1Ym1pdCBjYWxsZWQgZnJvbSBjb21wbGV0ZSBtZXRob2QgaW4gZHluYW1pYyBmb3JtJylcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZm9ybUdyb3VwQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXBBcnJheVtpXTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBpZicsIGZvcm1Hcm91cCk7XHJcbiAgICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgaWYnLCBmb3JtR3JvdXApO1xyXG4gICAgICAgIGZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0ludmFsaWQgRm9ybSBDb250cm9scycsIE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5maWx0ZXIoYyA9PiBjLmludmFsaWQpKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVGb3JtLm9uU3VibWl0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdO1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ2Zvcm1Hcm91cCcsIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgLy8gZm9yIHJlZ2lzdGVyIGNsYWltYW50IHBhZ2VcclxuICAgIGNvbnN0IHBhc3N3b3JkID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgJiYgZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkucGFzc3dvcmQgPyAoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkucGFzc3dvcmQpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgZmlyc3ROYW1lID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgJiYgZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBsYXN0TmFtZSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IHVzZXJJZCA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnVzZXJuYW1lID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnVzZXJuYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjsgICBcclxuICAgXHJcbiAgICBpZihwYXNzd29yZCA9PT0gXCJcIiAmJiBmaXJzdE5hbWUgPT09IFwiXCIgJiYgbGFzdE5hbWUgPT09IFwiXCIgJiYgdXNlcklkID09PSBcIlwiKXsgXHJcbiAgICAgICAgICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyXHJcbiAgICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMucGF5bWV0aG9kPT11bmRlZmluZWQgICYmIGZvcm1Hcm91cC5jb250cm9scy5wYXlNZXRob2Q9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCAxXCIpXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZVNhdmVRdWVzdGlvbm5haXJlKGZvcm1Hcm91cCk7XHJcbiAgICAgICAvLyBjb25zb2xlLmxvZyhcIiB0cmlnZ2VyZWQgMlwiKVxyXG4gICAgICAgICAvLyBQR0xQLTE3NTAgIGluIGNvcnJlY3QgUm91dGluZyBOVW1iZXIgIFxyXG4gICAgICAgfSBlbHNlIGlmKChmb3JtR3JvdXAuY29udHJvbHMucGF5bWV0aG9kIT11bmRlZmluZWQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnBheW1ldGhvZC52YWx1ZT09PSdDJykgIHx8KGZvcm1Hcm91cC5jb250cm9scy5wYXlNZXRob2QhPXVuZGVmaW5lZCAmJiBmb3JtR3JvdXAuY29udHJvbHMucGF5TWV0aG9kLnZhbHVlPT09J0MnKSApe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCAyXCIpICAgXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZVNhdmVRdWVzdGlvbm5haXJlKGZvcm1Hcm91cCk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCA0IFwiKSAgIFxyXG4gICAgICB9ZWxzZXsgICAgICAgICAgXHJcbiAgICAgICAgICAvLyBQR0xQLTE3NTAgIGluIGNvcnJlY3QgUm91dGluZyBOVW1iZXIgICAgXHJcbiAgICAgICAgIGNvbnN0IHJvdXRpbmdOdW1iZXIgPSBmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50LnZhbHVlLnJvdXRpbmdOdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50LnZhbHVlLnJvdXRpbmdOdW1iZXIpOiBmb3JtR3JvdXAuY29udHJvbHMuYmFua0FjY291bnQudmFsdWUucm91dGluZ051bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuYmFua0FjY291bnQudmFsdWUucm91dGluZ051bWJlcikgOlwiXCI7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudE51bWJlciA9IGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudCAmJmZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5hY2NvdW50TnVtYmVyID8gKGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5hY2NvdW50TnVtYmVyKTpmb3JtR3JvdXAuY29udHJvbHMuYmFua0FjY291bnQudmFsdWUuYWNjb3VudE51bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuYmFua0FjY291bnQudmFsdWUuYWNjb3VudE51bWJlcikgOlwiXCI7XHJcbiAgICAgICAgY29uc3QgcmVFbnRlckFjY291bnROdW1iZXIgPSBmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50LnZhbHVlLnJlRW50ZXJBY2NvdW50TnVtYmVyID8gKGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5yZUVudGVyQWNjb3VudE51bWJlcik6IGZvcm1Hcm91cC5jb250cm9scy5iYW5rQWNjb3VudC52YWx1ZS5yZUVudGVyQWNjb3VudE51bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuYmFua0FjY291bnQudmFsdWUucmVFbnRlckFjY291bnROdW1iZXIpOlwiXCI7XHJcbiAgICAgICAgICBpZih0aGlzLmlzQmFua0RldGFpbHNWYWxpZChyb3V0aW5nTnVtYmVyLCBhY2NvdW50TnVtYmVyLCByZUVudGVyQWNjb3VudE51bWJlcikpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgMyBcIikgXHJcbiAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVNhdmVRdWVzdGlvbm5haXJlKGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgNiBcIikgXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgfSAgIFxyXG4gICAvLyAgIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCA3XCIpXHJcbiAgICAvLyAgdGhpcy5jb21wbGV0ZVNhdmVRdWVzdGlvbm5haXJlKGZvcm1Hcm91cCk7XHJcbiAgICAgLy8gY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDhcIilcclxuICAgIH0gZWxzZXtcclxuICAgICAgaWYocGFzc3dvcmQgIT09IFwiXCIgJiYgdGhpcy5pc1Bhc3N3b3JkVmFsaWQoZmlyc3ROYW1lLCBsYXN0TmFtZSwgdXNlcklkLCBwYXNzd29yZCkpXHJcbiAgICAgIHsgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDRcIilcclxuICAgICAgICB0aGlzLmNvbXBsZXRlU2F2ZVF1ZXN0aW9ubmFpcmUoZm9ybUdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNle1xyXG4gICAgICAgICAvLyBQR0xQLTE3NTAgIGluIGNvcnJlY3QgUm91dGluZyBOVW1iZXIgIFxyXG4gICAgICAgIGNvbnN0IHBhc3N3b3JkSW52YWxpZEVycm9yID0ge1xyXG4gICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgXCJbVGhlIHBhc3N3b3JkIGNvbnRhaW5zIGVpdGhlci9vciB1c2VyIG5hbWUsIGZpcnN0IG5hbWUgb3IgbGFzdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIHBhc3N3b3JkIHJlcXVpcmVtZW50XFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgfVxyXG4gXHJcbiAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQocGFzc3dvcmRJbnZhbGlkRXJyb3IpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApe1xyXG4gICAgdGhpcy5mb3JtUmF3RGF0YSA9IGZvcm1Hcm91cDtcclxuICAgIHRoaXMucWNzLnNldERhdGEodGhpcy5hY3RpdmVJbmRleCwgSlNPTi5zdHJpbmdpZnkoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpKTtcclxuICAgIGxldCBzdHJJbnRvT2JqO1xyXG4gICAgdGhpcy5wYXlMb2FkID0gJyc7XHJcbiAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgc3RySW50b09iaiA9IChkYXRhKTtcclxuICAgICAgdGhpcy5wYXlMb2FkID0gKHRoaXMucGF5TG9hZCArIHN0ckludG9PYmopO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHNhdmVEYXRhID0ge30gYXMgUXVlc3Rpb25uYWlyZVNhdmVNb2RlbDtcclxuICAgIGxldCBjdXJyZW50UWUgPSB0aGlzLmF1dG9TYXZlID8gdGhpcy5xZXMuc2VhcmNoQnMuZ2V0VmFsdWUoKSA6IHRoaXMucXVlcnlNb2RlbDtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdlVHlwZSA9PT0gJ1BPUFVQJyB8fCB0aGlzLnBhZ2VUeXBlID09PSAnSnNvbicpIHtcclxuICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpO1xyXG4gICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZm9yU2NyZWVuUXVlc3Rpb25uYWlyZSkge1xyXG4gICAgICBzYXZlRGF0YS5kYXRhID0gdGhpcy5wYXlMb2FkLy9KU09OLnN0cmluZ2lmeSh0aGlzLnBheUxvYWQpO1xyXG4gICAgICBzYXZlRGF0YS5wb3RlbnRpYWxJc3N1ZUlkID0gY3VycmVudFFlLnBvdGVudGlhbElzc3VlSWQ7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dBYmxlQW5kQXZhaWxhYmxlID0gY3VycmVudFFlLmZsb3dBYmxlQW5kQXZhaWxhYmxlO1xyXG4gICAgICBzYXZlRGF0YS51c2VyVHlwZSA9IGN1cnJlbnRRZS51c2VyVHlwZTtcclxuICAgICAgc2F2ZURhdGEuZmxvd0Zyb20gPSBjdXJyZW50UWUuZmxvd0Zyb207XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dXQ0FibGVBbmRBdmFpbGFibGUgPSBjdXJyZW50UWUuZmxvd1dDQWJsZUFuZEF2YWlsYWJsZTtcclxuICAgICAgc2F2ZURhdGEuY2xhaW1BcHBsaWNhdGlvbklkID0gY3VycmVudFFlLmNsYWltQXBwbGljYXRpb25JZDtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkcyA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWRzO1xyXG4gICAgICBzYXZlRGF0YS5xdWVzdGlvbm5haXJlSWQgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkO1xyXG4gICAgICBzYXZlRGF0YS5hY3RpdmVQYWdlSW5kZXggPSB0aGlzLmFjdGl2ZUluZGV4O1xyXG4gICAgICBpZighdGhpcy5hdXRvU2F2ZSl7XHJcbiAgICAgICAgc2F2ZURhdGEuYXV0b1NhdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChzYXZlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucHV0RGF0YSA9IHNhdmVEYXRhO1xyXG4gICAgICB0aGlzLmJsb2NrRm9ybVVpKClcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZVxyXG4gICAgICAgIC5zYXZlUXVlc3Rpb25uYWlyZShzYXZlRGF0YSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgIHRoaXMucWVzLnNlYXJjaE1vZGVsLnNwbGljZSh0aGlzLnFlcy5zZWFyY2hNb2RlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnBvdGVudGlhbElzc3VlSWQgPT0gY3VycmVudFFlLnBvdGVudGlhbElzc3VlSWQpLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3JlbWFpbmluZyBlbGVtZW50cycsIHRoaXMucWVzLnNlYXJjaE1vZGVsKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucWVzLnNlYXJjaE1vZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnFlcy5zZWFyY2hCcy5uZXh0KHRoaXMucWVzLnNlYXJjaE1vZGVsWzBdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTm8gRWxlbWVudCBQcmVzZW50Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQocmVzKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgICB0aGlzLmNhcHRjaGEucmVzZXRDYXB0Y2hhKCk7XHJcbiAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkYXRhQXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBkYXRhQXJyLnB1c2goZGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzYXZlRGF0YS5zY3JlZW5RdWVzdGlvbm5haXJlRGF0YSA9IGRhdGFBcnI7XHJcbiAgICAgIHNhdmVEYXRhLnVzZXJUeXBlID0gY3VycmVudFFlLnVzZXJUeXBlO1xyXG4gICAgICBzYXZlRGF0YS5mbG93RnJvbSA9IGN1cnJlbnRRZS5mbG93RnJvbTtcclxuICAgICAgc2F2ZURhdGEuaXNTY3JlZW5RdWVzdGlvbm5haXJlID0gdHJ1ZTtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkcyA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWRzO1xyXG4gICAgICBzYXZlRGF0YS51dWlkID0gdGhpcy5pZGVudGlmaWVyOy8vY3VycmVudFFlLnV1aWQ7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dLZXkgPSBjdXJyZW50UWUuZmxvd0tleTtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZDtcclxuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcclxuXHJcbiAgICAgIGlmKCF0aGlzLmF1dG9TYXZlKXtcclxuICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChzYXZlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLm1mYVJlcXVpcmVkKXtcclxuICAgICAgICB0aGlzLnNob3dNZmEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWZhRGF0YSA9IHNhdmVEYXRhO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNhdmVTY3JlZW5RdWVzdGlvbm5haXJlKHNhdmVEYXRhKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgcGF5bWVudERldGFpbHNDaGFuZ2VFcnJvcigpe1xyXG4gICAgcmV0dXJuIHRoaXMucGF5bWVudERldGFpbENoYW5nZUhhc0Vycm9yO1xyXG4gIH1cclxuICAgIC8vIFBHTFAtMTc1MCAgaW4gY29ycmVjdCBSb3V0aW5nIE5VbWJlclxyXG4gIGlzQmFua0RldGFpbHNWYWxpZChyb3V0aW5nTnVtYmVyLCBhY2NvdW50TnVtYmVyLCByZUVudGVyQWNjb3VudE51bWJlcilcclxuICB7IFxyXG4gICAgXHJcbiAgICB0aGlzLmFjY291bnROdW1iZXJmbGc9dHJ1ZTtcclxuICAgIHRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnPXRydWU7XHJcbiAgICB0aGlzLnJvdXRpbmdOdW1iZXJmbGFnPXRydWU7XHJcbiAgICBjb25zdCByb3V0aW5nTnVtYmVyUmVnZXggPSBBcHBSZWdleC5ST1VUSU5HX05VTUJFUl9SRUdFWDtcclxuICAgIGNvbnN0IGFjY291bnROdW1iZXJSZWdleCA9IEFwcFJlZ2V4LkFDQ09VTlRfTlVNQkVSX1JFR0VYX01JTjtcclxuICAgICAgICAgICAgICBpZighcm91dGluZ051bWJlclJlZ2V4LnRlc3Qocm91dGluZ051bWJlcikpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0aW5nTnVtYmVyZmxhZz1mYWxzZTtcclxuICAgICAgICAgICAgICB9ICAgICAgXHJcbiAgICAgICAgICAgICAgaWYoIWFjY291bnROdW1iZXJSZWdleC50ZXN0KGFjY291bnROdW1iZXIpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudE51bWJlcmZsZz1mYWxzZTtcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIGlmKCFhY2NvdW50TnVtYmVyUmVnZXgudGVzdChyZUVudGVyQWNjb3VudE51bWJlcikpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZUVudGVyQWNjb3VudE51bWJlcmZsYWc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKCF0aGlzLnJvdXRpbmdOdW1iZXJmbGFnICYmICF0aGlzLmFjY291bnROdW1iZXJmbGcgJiYgIXRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgIFwiW1RoZSByb3V0aW5nTnVtYmVyLGFjY291bnROdW1iZXIgYW5kIHJlRW50ZXJBY2NvdW50TnVtYmVyIGZpZWxkIHZhbHVlcyBkbyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYoIXRoaXMucm91dGluZ051bWJlcmZsYWcgKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgIFwiW1RoZSByb3V0aW5nTnVtYmVyIGZpZWxkIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KEJhbmtEZXRhaWxzSW52YWxpZEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmFjY291bnROdW1iZXJmbGcgJiYgIXRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgIFwiW1RoZSBhY2NvdW50TnVtYmVyIGFuZCByZUVudGVyQWNjb3VudE51bWJlciBmaWVsZCB2YWx1ZXMgZG8gbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmFjY291bnROdW1iZXJmbGcpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICBcIltUaGUgYWNjb3VudE51bWJlciBmaWVsZCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgZm9ybWF0IFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoQmFua0RldGFpbHNJbnZhbGlkRXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLnJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZyl7XHJcbiAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgXCJbVGhlIHJlRW50ZXJBY2NvdW50TnVtYmVyIGZpZWxkIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9ZWxzZSAgaWYodGhpcy5hY2NvdW50TnVtYmVyZmxnICYmIHRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnKXtcclxuICAgICAgICAgICAgICAgICAgaWYoYWNjb3VudE51bWJlciE9PXJlRW50ZXJBY2NvdW50TnVtYmVyKXsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIltWYWx1ZXMgaW4gYWNjb3VudE51bWJlciBhbmQgcmVFbnRlckFjY291bnROdW1iZXIgZmllbGRzIGRvIG5vdCBtYXRjaCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1lbHNlXHJcbiAgICAgICAgICAgICAgICAgIHsgIFxyXG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIH1lbHNlXHJcbiAgICAgICAgICAgICAgeyAgXHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICB9ICAgICBcclxuXHJcbiAgfVxyXG5cclxuICBpc1Bhc3N3b3JkVmFsaWQoZmlyc3ROYW1lLCBsYXN0TmFtZSwgdXNlcklkLCBwYXNzd29yZCl7XHJcbiAgICBjb25zdCBlc2NhcGVSZWdFeHAgPSAoc3RyIDogU3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcclxuICAgIGNvbnN0IGZpcnN0TmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoZmlyc3ROYW1lKSwgJ2knKTtcclxuICAgIGNvbnN0IGxhc3ROYW1lUmVnZXggPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChsYXN0TmFtZSksICdpJyk7XHJcbiAgICBjb25zdCB1c2VySWRSZWdleCA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHVzZXJJZCksICdpJyk7XHJcbiAgICBpZihmaXJzdE5hbWVSZWdleC50ZXN0KHBhc3N3b3JkKSB8fCBsYXN0TmFtZVJlZ2V4LnRlc3QocGFzc3dvcmQpIHx8IHVzZXJJZFJlZ2V4LnRlc3QocGFzc3dvcmQpKXtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShkYXRhKXtcclxuICAgIHRoaXMuYmxvY2tGb3JtVWkoKVxyXG4gICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZVxyXG4gICAgICAgIC5zYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShkYXRhKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS5zdWNjZXNzRWxlbWVudC5uZXh0KHJlc1tGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnV1aWQubmV4dChyZXNbRmJDb25zdGFudHMudXVpZF0pO1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2Uud2FpdEZvclByb2Nlc3NpbmcubmV4dChyZXNbRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmddKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLndhaXRDaGVja1NlcnZpY2VVcmkubmV4dChyZXNbRmJDb25zdGFudHMud2FpdENoZWNrU2VydmljZVVyaV0pO1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2UucGFnZVRvT3Blbi5uZXh0KHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcblxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50LCByZXNbRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50XSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZywgcmVzW0ZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nXSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy53YWl0Q2hlY2tTZXJ2aWNlVXJpLCByZXNbRmJDb25zdGFudHMud2FpdENoZWNrU2VydmljZVVyaV0pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMucGFnZVRvT3BlbiwgcmVzW0ZiQ29uc3RhbnRzLnBhZ2VUb09wZW5dKTtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnV1aWQsIHJlc1tGYkNvbnN0YW50cy51dWlkXSk7XHJcbiAgICAgICAgICAgICAgLypPbmx5IGVuYWJsZSBseG54IGluIHNpZ24tdXAgZmxvdyBmb3IgcXVlc3Rpb25uYWlyZSBmb3JtLWJ1aWxkZXIqL1xyXG4gICAgICAgICAgICAgIGlmKGRhdGE/LnF1ZXN0aW9ubmFpcmVJZHM/LlswXSA9PT0gMzQ1KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd0tleSA9IDM0NTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VVdWlkID0gcmVzWyd1dWlkJ107XHJcbiAgICAgICAgICAgICAgICBsZXQgc3NuID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24gPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbikudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxuLmlzTGV4aXNOZXhpc0lkUHJvb2ZpbmdFbmFibGVkKHNzbikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKHJlcyA6IExleGlzTmV4aXNFbmFibGVkUmVzcG9uc2VNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qSWYgbGV4aXMtbmV4aXMgaWQgcHJvb2ZpbmcgaXMgZW5hYmxlZCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXM/LmxuZW5hYmxlZCAmJiByZXM/Lm1lc3NhZ2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZXhpc05leGlzQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMZXhpc05leGlzUG9wdXBFbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXM/LmxuZW5hYmxlZCAmJiByZXM/Lm1lc3NhZ2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmV4dEJ1dHRvblBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdXIgYWNjb3VudCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIFBsZWFzZSBsb2dpbiEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2xvZ2luJyksIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcz8ubG5lbmFibGVkID09IGZhbHNlICYmIHJlcz8ubWVzc2FnZSA9PSAnU1NOLU1BU0tFRCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVU1BTQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclVTUFMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVU1BTQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZBSUwgLSBVU1BTIFByb29maW5nJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAvKklmIFVTUFMgcHJvb2ZpbmcgaXMgYWxyZWFkeSB0cmlnZ2VyZWQgYnkgQ1NSIGFuZCB1c2VyIHdhcyBub3QgYWJsZSB0byB2ZXJpZnkgaXQgOiBzbyBpbiBGQUlMIHN0YXR1cyAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnRyaWdnZXJVU1BTKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGVycm9yLmVycm9yLm1zZ1swXS5pbmNsdWRlcygnSU5JVElBVEVEIC0gVVNQUyBQcm9vZmluZycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIC8qSWYgVVNQUyBwcm9vZmluZyBpcyBhbHJlYWR5IHRyaWdnZXJlZCBieSBDU1IgYW5kIGl0IGlzIGluIElOSVRJQVRFRCBzdGF0dXMgKi9cclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnV0aWwuc2hvd0Vycm9yKCdZb3VyIFVTUFMgaWRlbnRpdHkgcHJvb2ZpbmcgaXMgcGVuZGluZy4gUGxlYXNlIGNvbXBsZXRlIGl0IGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5zaG93RXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdQbGVhc2UgY29tcGxldGUgeW91ciBVU1BTIElkZW50aXR5IFZlcmlmaWNhdGlvbiBiZWZvcmUgeW91IGxvZ2luIHRvIHRoZSBwb3J0YWwhJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2xvZ2luJyksIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSwgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFVTUFNBY2NvdW50Q3JlYXRpb25Vc2VyRGV0YWlscygpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZBSUwgLSBVU1BTIFByb29maW5nJykpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgLypJZiBVU1BTIHByb29maW5nIGlzIGFscmVhZHkgdHJpZ2dlcmVkIGJ5IENTUiBhbmQgdXNlciB3YXMgbm90IGFibGUgdG8gdmVyaWZ5IGl0IDogc28gaW4gRkFJTCBzdGF0dXMgKi9cclxuICAgICAgICAgICAgICAgICAgICAvLyAgIHRoaXMudHJpZ2dlclVTUFMoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGVycm9yLmVycm9yLm1zZ1swXS5pbmNsdWRlcygnSU5JVElBVEVEIC0gVVNQUyBQcm9vZmluZycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAvKklmIFVTUFMgcHJvb2ZpbmcgaXMgYWxyZWFkeSB0cmlnZ2VyZWQgYnkgQ1NSIGFuZCBpdCBpcyBpbiBJTklUSUFURUQgc3RhdHVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMudXRpbC5zaG93RXJyb3IoJ1lvdXIgVVNQUyBpZGVudGl0eSBwcm9vZmluZyBpcyBwZW5kaW5nLiBQbGVhc2UgY29tcGxldGUgaXQgYmVmb3JlIHlvdSBsb2dpbiB0byB0aGUgcG9ydGFsIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB9IFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5zaG93RXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIGNvbXBsZXRlIHlvdXIgVVNQUyBJZGVudGl0eSBWZXJpZmljYXRpb24gYmVmb3JlIHlvdSBsb2dpbiB0byB0aGUgcG9ydGFsISdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2xvZ2luJyksIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubmV4dEJ1dHRvblBhZ2Upe1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighKGRhdGE/LnF1ZXN0aW9ubmFpcmVJZHM/LlswXSA9PT0gMzQ1KSl7XHJcbiAgICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZihlcnIubXNnWzBdLmluY2x1ZGVzKCdUaGVyZSBpcyBubyBhY3RpdmUgY2xhaW0gdG8gdXBkYXRlIHBheW1lbnQgSW5mb3JtYXRpb24nKSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50RGV0YWlsQ2hhbmdlSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFcnJvciBvY2N1cmVkJywgZXJyKTtcclxuICAgICAgICAgICAgaWYodGhpcy5tZmFSZXF1aXJlZCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZmFFcnJvciA9IGVycjtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgICAgICAgICAgdGhpcy5jYXB0Y2hhLnJlc2V0Q2FwdGNoYSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRMZXhpc05leGlzQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKXtcclxuICAgIGNvbnN0IGZpcnN0TmFtZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5maXJzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgbGFzdE5hbWUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBsZXQgc3RyZWV0MSA9IFwiXCI7XHJcbiAgICBsZXQgY2l0eSA9IFwiXCI7XHJcbiAgICBsZXQgc3RhdGUgPSBcIlwiO1xyXG4gICAgbGV0IHppcCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRpZmZtYWlsYWRkcmVzcyAhPSBudWxsKXtcclxuICAgICAgaWYodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRpZmZtYWlsYWRkcmVzcyA9PT0gXCJZXCIpe1xyXG4gICAgICAgIHN0cmVldDEgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0cmVldEFkZHJlc3MgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0cmVldEFkZHJlc3MpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIGNpdHkgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLmNpdHkgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLmNpdHkpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHN0YXRlID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdGF0ZS52YWx1ZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RhdGUudmFsdWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHppcCA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuemlwID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy56aXApLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0cmVldDEgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdHJlZXRBZGRyZXNzID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RyZWV0QWRkcmVzcykudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgY2l0eSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLmNpdHkgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5jaXR5KS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBzdGF0ZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0YXRlLnZhbHVlID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RhdGUudmFsdWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHppcCA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnppcCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnppcCkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGRvYiA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZG9iID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kb2IpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgZW1haWwgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmVtYWlsID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5lbWFpbCkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBwaG9uZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucGhvbmUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnBob25lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IHNzbiA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24pLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG5cclxuICAgIGlmICghd2luZG93WydzZXNzaW9uSWQnXSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdTZXNzaW9uIElEIG5vdCBmb3VuZCBpbiB3aW5kb3cgb2JqZWN0LicpO1xyXG4gICAgICByZXR1cm47IC8vIGhhbmRsZSBhY2NvcmRpbmdseVxyXG4gICAgfVxyXG5cclxuICAgIGlmKHdpbmRvd1snc2Vzc2lvbklkJ10gIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMudXNlckRldGFpbHMgPSB7XHJcbiAgICAgICAgc2Vzc2lvbl9pZDogd2luZG93WydzZXNzaW9uSWQnXSA/IHdpbmRvd1snc2Vzc2lvbklkJ10gOiBudWxsLFxyXG4gICAgICAgIGlucHV0X2lwX2FkZHJlc3M6IG51bGwsIC8vIHNlbmQgbnVsbFxyXG4gICAgICAgIGFjY291bnRfZmlyc3RfbmFtZTogZmlyc3ROYW1lLFxyXG4gICAgICAgIGFjY291bnRfbGFzdF9uYW1lOiBsYXN0TmFtZSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3Nfc3RyZWV0MTogc3RyZWV0MSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3NfY2l0eTogY2l0eSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3Nfc3RhdGU6IHN0YXRlLFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc196aXA6IHppcCxcclxuICAgICAgICBhY2NvdW50X2RhdGVfb2ZfYmlydGg6IGRvYiwgLy9cIllZWVlNTUREXCJcclxuICAgICAgICBhY2NvdW50X2VtYWlsOiBlbWFpbCxcclxuICAgICAgICBhY2NvdW50X3RlbGVwaG9uZTogcGhvbmUsXHJcbiAgICAgICAgbmF0aW9uYWxfaWRfbnVtYmVyOiBzc25cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRVU1BTQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKXtcclxuICAgIGNvbnN0IGZpcnN0TmFtZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5maXJzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgbGFzdE5hbWUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBsZXQgc3RyZWV0MSA9IFwiXCI7XHJcbiAgICBsZXQgY2l0eSA9IFwiXCI7XHJcbiAgICBsZXQgc3RhdGUgPSBcIlwiO1xyXG4gICAgbGV0IHppcCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRpZmZtYWlsYWRkcmVzcyAhPSBudWxsKXtcclxuICAgICAgaWYodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRpZmZtYWlsYWRkcmVzcyA9PT0gXCJZXCIpe1xyXG4gICAgICAgIHN0cmVldDEgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0cmVldEFkZHJlc3MgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0cmVldEFkZHJlc3MpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIGNpdHkgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLmNpdHkgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLmNpdHkpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHN0YXRlID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdGF0ZS52YWx1ZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RhdGUudmFsdWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHppcCA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuemlwID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy56aXApLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0cmVldDEgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdHJlZXRBZGRyZXNzID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RyZWV0QWRkcmVzcykudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgY2l0eSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLmNpdHkgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5jaXR5KS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBzdGF0ZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0YXRlLnZhbHVlID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RhdGUudmFsdWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHppcCA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnppcCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnppcCkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGRvYiA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZG9iID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kb2IpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgZW1haWwgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmVtYWlsID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5lbWFpbCkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBwaG9uZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucGhvbmUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnBob25lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IHNzbiA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24pLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG5cclxuICAgIGlmICghd2luZG93WydzZXNzaW9uSWQnXSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdTZXNzaW9uIElEIG5vdCBmb3VuZCBpbiB3aW5kb3cgb2JqZWN0LicpO1xyXG4gICAgICByZXR1cm47IC8vIGhhbmRsZSBhY2NvcmRpbmdseVxyXG4gICAgfVxyXG5cclxuICAgIGlmKHdpbmRvd1snc2Vzc2lvbklkJ10gIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMudXNlckRldGFpbHMgPSB7XHJcbiAgICAgICAgc2Vzc2lvbl9pZDogd2luZG93WydzZXNzaW9uSWQnXSA/IHdpbmRvd1snc2Vzc2lvbklkJ10gOiBudWxsLFxyXG4gICAgICAgIGlucHV0X2lwX2FkZHJlc3M6IG51bGwsIC8vIHNlbmQgbnVsbFxyXG4gICAgICAgIGFjY291bnRfZmlyc3RfbmFtZTogZmlyc3ROYW1lLFxyXG4gICAgICAgIGFjY291bnRfbGFzdF9uYW1lOiBsYXN0TmFtZSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3Nfc3RyZWV0MTogc3RyZWV0MSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3NfY2l0eTogY2l0eSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3Nfc3RhdGU6IHN0YXRlLFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc196aXA6IHppcCxcclxuICAgICAgICBhY2NvdW50X2RhdGVfb2ZfYmlydGg6IGRvYiwgLy9cIllZWVlNTUREXCJcclxuICAgICAgICBhY2NvdW50X2VtYWlsOiBlbWFpbCxcclxuICAgICAgICBhY2NvdW50X3RlbGVwaG9uZTogcGhvbmUsXHJcbiAgICAgICAgbmF0aW9uYWxfaWRfbnVtYmVyOiBzc25cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25MblN1Y2Nlc3MoKXtcclxuICAgIHRoaXMuaXNMZXhpc05leGlzUG9wdXBFbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWwuaGlkZUxvYWRlcigpO1xyXG4gICAgaWYodGhpcy5uZXh0QnV0dG9uUGFnZSkge1xyXG4gICAgICAvL3RoaXMudXRpbC5zdWNjZXNzKFxyXG4gICAgICAvLyAgJ1lvdXIgYWNjb3VudCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gUGxlYXNlIGxvZ2luISdcclxuICAgICAgLy8pO1xyXG4gICAgICAvL3NldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2xvZ2luJyksIDIwMDApO1xyXG4gICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7dGhpcy5yZXNwb25zZVV1aWR9YCk7XHJcbiAgICB9IFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KHRoaXMuaW5wdXREYXRhKTtcclxuICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICB0aGlzLnNob3dNZmEgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uTE5FcnJvcigpe1xyXG4gICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICB0aGlzLnNob3dNZmEgPSBmYWxzZTtcclxuICAgIGNvbnNvbGUubG9nKFwiUGxlYXNlIGNvbnRhY3QgS0RPTCFcIik7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyVVNQUygpe1xyXG4gICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICB0aGlzLnNob3dNZmEgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMZXhpc05leGlzUG9wdXBFbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWwuaGlkZUxvYWRlcigpO1xyXG4gICAgY29uc29sZS5sb2coXCJ1c3BzIGlzIHRyaWdnZXJlZFwiKVxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzZXJEZXRhaWxzJywgSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGV0YWlscykpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy91c3BzLXJlZGlyZWN0JywgXCJcIl0pLCAxMDAwKTtcclxuICB9XHJcblxyXG4gIHNldFByZXZBbmROZXh0QnV0dG9uKCkge1xyXG4gICAgbGV0IGNvbXBhcmVWYWx1ZTogbnVtYmVyID0gMDtcclxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID4gMCkge1xyXG4gICAgICBjb21wYXJlVmFsdWUgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLmlzRmlyc3QgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gMSAmJiB0aGlzLmlzUHJldmlvdXNQYWdlQVBsYWNlaG9sZGVyKHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzWzBdKSkge1xyXG4gICAgICB0aGlzLmlzRmlyc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTGFzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaXNGaXJzdCA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNMYXN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgdGhpcy5pc0xhc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzRmlyc3QgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA8IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcclxuICAgIH0gICBcclxuICAgIHRoaXMuc2V0dXBMb2FkZXJNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgaXNQcmV2aW91c1BhZ2VBUGxhY2Vob2xkZXIocGFnZSA6IGFueSl7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcImlzUGxhY2VIb2xkZXIgPSBcIiArIHBhZ2VbXCJpc1BsYWNlSG9sZGVyXCJdKTtcclxuICAgIGxldCBwbGFjZUhvbGRlcjogYm9vbGVhbiA9ICBwYWdlW1wiaXNQbGFjZUhvbGRlclwiXTtcclxuICAgIHJldHVybiBwbGFjZUhvbGRlci52YWx1ZU9mKCk7XHJcbiAgfVxyXG5cclxuICBzdGVwQ2hhbmdlZChldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQucHJldmlvdXNseVNlbGVjdGVkSW5kZXggPiBldmVudC5zZWxlY3RlZEluZGV4KSB7XHJcbiAgICAgIGV2ZW50LnByZXZpb3VzbHlTZWxlY3RlZFN0ZXAuaW50ZXJhY3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsQWN0aW9uKCkge1xyXG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCh0aGlzLmJhY2tCdXR0b25QYWdlKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbFBvcFVwKCkge1xyXG4gICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF07XHJcbiAgICB0aGlzLm1vZGVsQ2FuY2VsLmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ2NhbmNlbFBvcFVwIGNhbGxlZCcsIGZvcm1Hcm91cClcclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGUocXVldWU6IEZpbGVbXSkge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ3F1ZXVlMTExICcsIHF1ZXVlKTtcclxuICAgIC8vcXVldWVbMF0uc2l6ZVxyXG4gIH1cclxuXHJcbiAgYmxvY2tGb3JtVWkoKXtcclxuICAgIHRoaXMuYmxvY2tVaSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICB1bmJsb2NrRm9ybVVpKCl7XHJcbiAgICB0aGlzLmJsb2NrVWkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNob3VsZEZpdENvbnRlbnQoZWxlbWVudHMgOiBFbGVtZW50c01vZGVsW10pe1xyXG4gICAgbGV0IHNob3VsZEZpdENvbnRlbnQgOiBib29sZWFuID0gdHJ1ZTsgXHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBpZihlbGVtZW50LmN1c3RvbVRhZyA9PSAnY29tcG9uZW50Jyl7XHJcbiAgICAgICAgc2hvdWxkRml0Q29udGVudCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc2hvdWxkRml0Q29udGVudDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR5bmFtaWNQYXJhbShldmVudCl7XHJcbiAgICBpZihBcnJheS5pc0FycmF5KGV2ZW50KSl7XHJcbiAgICAgIHRoaXMuZHluYW1pY1BhcmFtID0gWy4uLmV2ZW50XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY1BhcmFtID0gT2JqZWN0LmFzc2lnbih7fSAsIGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCl7XHJcbiAgICB0aGlzLnV0aWwuZm9jdXNPblN1Ym1pdCh0aGlzLmVsKTtcclxuICB9XHJcbn1cclxuIiwiPHAtYmxvY2tVSSBbYmxvY2tlZF09XCJibG9ja1VpXCI+XHJcbiAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiPjwvaW9uLXNwaW5uZXI+XHJcbjwvcC1ibG9ja1VJPlxyXG48ZGl2ICpuZ0lmPVwicXVlc3Rpb25zICYmIHF1ZXN0aW9uc1swXSAmJiAhc2hvd01mYVwiICNmb3JtTWFpbkRpdj5cclxuICA8Zm9ybSBmb2N1c0ludmFsaWRJbnB1dCBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XVwiIFtuZ0NsYXNzXT1cIm11bHRpTW9kZSA/ICdxZS1mb3JtLW11bHRpcGxlJyA6ICdxZS1mb3JtJ1wiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCIgI3F1ZXN0aW9ubmFpcmVGb3JtPVwibmdGb3JtXCI+XHJcbiAgICA8aW9uLWdyaWQ+XHJcbiAgICAgIDxpb24tcm93ICpuZ0lmPVwicXVlc3Rpb25zWzBdLnBhZ2VzW2FjdGl2ZUluZGV4XS5uYW1lXCI+XHJcbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgW3NpemVYc109XCJzaXplWHNcIiBbc2l6ZVNtXT1cInNpemVTbVwiIFtzaXplTWRdPVwic2l6ZU1kXCIgW3NpemVMZ109XCJzaXplTGdcIiBbc2l6ZVhsXT1cInNpemVYbFwiXHJcbiAgICAgICAgICBbb2Zmc2V0WHNdPVwib2Zmc2V0WHNcIiBbb2Zmc2V0U21dPVwib2Zmc2V0U21cIiBbb2Zmc2V0TWRdPVwib2Zmc2V0TWRcIiBbb2Zmc2V0TGddPVwib2Zmc2V0TGdcIiBbb2Zmc2V0WGxdPVwib2Zmc2V0WGxcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZvcm1ncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgW2lubmVySHRtbF09XCIocXVlc3Rpb25OdW1iZXIgPyBxdWVzdGlvbk51bWJlciArICcgJyA6ICcnKSArIHF1ZXN0aW9uc1swXS5wYWdlc1thY3RpdmVJbmRleF0ubmFtZSB8IGR5bmFtaWNUcmFuc2xhdGU6ZHluYW1pY1BhcmFtIHwgdHJ1c3RIdG1sXCIgW25nQ2xhc3NdPVwibXVsdGlNb2RlID8gJ2ZiLWhlYWRpbmctZm9sbG93dXAnIDogJ2ZiLWhlYWRpbmcnXCIgcm9sZT1cImhlYWRpbmdcIiBhcmlhLWxldmVsPVwiMVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG4gICAgICA8aW9uLXJvdz5cclxuICAgICAgICA8aW9uLWNvbCBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiIGNsYXNzPVwiaW9uLXBhZGRpbmctZW5kXCIgc2l6ZT1cIjEyXCIgW3NpemVYc109XCJzaXplWHNcIiBbc2l6ZVNtXT1cInNpemVTbVwiXHJcbiAgICAgICAgICBbc2l6ZU1kXT1cInNpemVNZFwiIFtzaXplTGddPVwic2l6ZUxnXCIgW3NpemVYbF09XCJzaXplWGxcIiBbb2Zmc2V0WHNdPVwib2Zmc2V0WHNcIiBbb2Zmc2V0U21dPVwib2Zmc2V0U21cIlxyXG4gICAgICAgICAgW29mZnNldE1kXT1cIm9mZnNldE1kXCIgW29mZnNldExnXT1cIm9mZnNldExnXCIgW29mZnNldFhsXT1cIm9mZnNldFhsXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mb3JtZ3JpZFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgcXVlc3Rpb25zWzBdLnBhZ2VzW2FjdGl2ZUluZGV4XS5lbGVtZW50czsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbGVtZW50LnR5cGU9PT0ncGFuZWwnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGlvbi1yb3cgKm5nSWY9XCJ2aXNpYmxlSWYoZWxlbWVudC52aXNpYmxlSWYsJycsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1jb2wgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIiBjbGFzcz1cImhlYWRpbmdcIiByb2xlPVwiaGVhZGluZ1wiIGFyaWEtbGV2ZWw9XCIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tlbGVtZW50LnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPC9pb24tY29sPiAtLT5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYW5lbEVsZW1lbnQgb2YgZWxlbWVudC5lbGVtZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGFyZS1yb3dcIiAqbmdJZj1cInBhbmVsRWxlbWVudC5jb2xFbGVtZW50PT09J0NPTDEnICYmIHZpc2libGVJZihwYW5lbEVsZW1lbnQudmlzaWJsZUlmLHBhbmVsRWxlbWVudC5uYW1lLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxwYW5lbEVsZW1lbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC1xdWVzdGlvbiBbcG90ZW50aWFsSXNzdWVJZF09XCJwb3RlbnRpYWxJc3N1ZUlkXCIgW3F1ZXN0aW9uXT1cInBhbmVsRWxlbWVudFwiIFtmb3JtXT1cImZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JTY3JlZW5RdWVzdGlvbm5haXJlXT1cImZvclNjcmVlblF1ZXN0aW9ubmFpcmVcIiAob25EeW5hbWljUGFyYW1VcGRhdGUpPVwidXBkYXRlRHluYW1pY1BhcmFtKCRldmVudClcIiBbZHluYW1pY1BhcmFtXT1cImR5bmFtaWNQYXJhbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcXVlc3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxpb24tY29sIHNpemU9XCIxXCIgKm5nSWY9XCJwYW5lbEVsZW1lbnQuZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctdG9wOiAyOHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwicGFuZWxFbGVtZW50LmRlc2NyaXB0aW9uXCI+PC9hcHAtb3ZlcmxheS1pbmZvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz4gLS0+XHJcblxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZWxlbWVudC50eXBlIT0ncGFuZWwnICYmIGVsZW1lbnQudHlwZSE9J2hpZGRlbicgJiYgdmlzaWJsZUlmKGVsZW1lbnQudmlzaWJsZUlmLGVsZW1lbnQubmFtZSxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0sZWxlbWVudClcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZUxnXT1cImVsZW1lbnQuc2l6ZUxHPjA/ZWxlbWVudC5zaXplTEc6JydcIiBbc2l6ZVNtXT1cImVsZW1lbnQuc2l6ZVNNXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2l6ZVhzXT1cImVsZW1lbnQuc2l6ZVhTXCIgW3NpemVYbF09XCJlbGVtZW50LnNpemVYTD4wID9lbGVtZW50LnNpemVYTDonJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVNZF09XCJlbGVtZW50LnNpemVNRD4wID9lbGVtZW50LnNpemVNRDonJ1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmllbGRcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1xdWVzdGlvbiBbcG90ZW50aWFsSXNzdWVJZF09XCJwb3RlbnRpYWxJc3N1ZUlkXCIgW3F1ZXN0aW9uXT1cImVsZW1lbnRcIiBbZm9ybV09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2ZvclNjcmVlblF1ZXN0aW9ubmFpcmVdPVwiZm9yU2NyZWVuUXVlc3Rpb25uYWlyZVwiIFtkeW5hbWljUGFyYW1dPVwiZHluYW1pY1BhcmFtXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAob25EeW5hbWljUGFyYW1VcGRhdGUpPVwidXBkYXRlRHluYW1pY1BhcmFtKCRldmVudClcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtcXVlc3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8aW9uLWNvbCBzaXplPVwiMVwiICpuZ0lmPVwiZWxlbWVudC5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy10b3A6IDM1cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJlbGVtZW50LmRlc2NyaXB0aW9uXCI+PC9hcHAtb3ZlcmxheS1pbmZvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXBhZGRpbmctc3RhcnRcIiBzaXplPVwiMTJcIiBzaXplU209XCIxMlwiIHNpemVYcz1cIjEyXCIgW3NpemVNZF09XCJwYWdlVHlwZT09PSdQT1BVUCc/NjoxMlwiXHJcbiAgICAgICAgICBbc2l6ZUxnXT1cInBhZ2VUeXBlPT09J1BPUFVQJz82OjEwXCIgW3NpemVYbF09XCJwYWdlVHlwZT09PSdQT1BVUCc/NToxMFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCJcclxuICAgICAgICAgIFtvZmZzZXRYbF09XCJwYWdlVHlwZT09PSdQT1BVUCc/MDoxXCIgW29mZnNldExnXT1cInBhZ2VUeXBlPT09J1BPUFVQJz8wOjFcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZvcm1ncmlkXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweDtcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBxdWVzdGlvbnNbMF0ucGFnZXNbYWN0aXZlSW5kZXhdLmVsZW1lbnRzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiB2aXNpYmxlSWYoZWxlbWVudC52aXNpYmxlSWYsJycsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYW5lbEVsZW1lbnQgb2YgZWxlbWVudC5lbGVtZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYW5lbEVsZW1lbnQuY29sRWxlbWVudD09PSdDT0wyJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVJZihwYW5lbEVsZW1lbnQudmlzaWJsZUlmLHBhbmVsRWxlbWVudC5uYW1lLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxwYW5lbEVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGFuZWwtYXBwIFtxdWVzdGlvbl09XCJwYW5lbEVsZW1lbnRcIiBbZm9ybV09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JTY3JlZW5RdWVzdGlvbm5haXJlXT1cImZvclNjcmVlblF1ZXN0aW9ubmFpcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wYW5lbC1hcHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICA8L2lvbi1yb3c+XHJcbiAgICA8L2lvbi1ncmlkPlxyXG5cclxuICAgIDxpb24tZm9vdGVyICpuZ0lmPVwiIWhpZGVGb290ZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiJ2Zvb3Rlci1maXhlZCdcIj5cclxuICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0OyBiYWNrZ3JvdW5kOiB3aGl0ZTsgbWFyZ2luLWxlZnQ6IC01cHg7XCJcclxuICAgICAgICAqbmdJZj1cImhpZGVTdGVwICYmIHBhZ2VUeXBlIT0nUE9QVVAnICYmIHBhZ2VUeXBlIT0nU0NSRUVOJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIHAtbm9ndXR0ZXJcIiBzdHlsZT1cImhlaWdodDogNjBweDtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBpb24tdGV4dC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiBmaWxsPVwib3V0bGluZVwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbEFjdGlvbigpXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBpb24tdGV4dC1yaWdodFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cImNvbXBsZXRlKClcIiBmaWxsPVwic29saWRcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAgTmV4dFxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDsgYmFja2dyb3VuZDogd2hpdGU7IG1hcmdpbi1sZWZ0OiAtNXB4O1wiXHJcbiAgICAgICAgKm5nSWY9XCJoaWRlU3RlcCAmJiBwYWdlVHlwZT09J1NDUkVFTicgJiYgcXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgcC1ub2d1dHRlclwiIHN0eWxlPVwiaGVpZ2h0OiA2MHB4O1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGlvbi10ZXh0LWxlZnRcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIGZpbGw9XCJvdXRsaW5lXCIgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGlvbi10ZXh0LXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiIGZpbGw9XCJzb2xpZFwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICBEb25lXHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGlvbi1ncmlkICpuZ0lmPVwiaGlkZVN0ZXAgJiYgcGFnZVR5cGU9PT0nUE9QVVAnXCI+XHJcbiAgICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWxlZnQgaW9uLXBhZGRpbmctc3RhcnRcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIGZpbGw9XCJvdXRsaW5lXCIgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsUG9wVXAoKVwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1yaWdodCBpb24tcGFkZGluZy1lbmRcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJjb21wbGV0ZSgpXCIgZmlsbD1cInNvbGlkXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIEFkZFxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICA8L2lvbi1ncmlkPlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFoaWRlU3RlcFwiPlxyXG4gICAgICAgIDxtYXQtaG9yaXpvbnRhbC1zdGVwcGVyIGxpbmVhciAjbWF0SG9yaXpvbnRhbFN0ZXBwZXIgW3NlbGVjdGVkSW5kZXhdPVwicXVlc3Rpb25zWzBdLnN0ZXBDb3VudGVyXCJcclxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic3RlcENoYW5nZWQoJGV2ZW50KTtcIiBzdHlsZT1cInRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyO1wiIGFyaWEtYnVzeT1cInRydWVcIj5cclxuICAgICAgICAgIDxtYXQtc3RlcCAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiAgcXVlc3Rpb25zWzBdLnBhZ2VzOyAgbGV0IGkgPSBpbmRleDtcIiBbc3RlcENvbnRyb2xdPVwiZm9ybUdyb3VwQXJyYXlbaV1cIlxyXG4gICAgICAgICAgICBbY29tcGxldGVkXT1cIiAgaSA8IGFjdGl2ZUluZGV4IFwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPnt7cXVlc3Rpb25zWzBdLnBhZ2VzW2ldLm5hdmlnYXRpb25UaXRsZX19PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiAhaXNMYXN0ICYmIGlzRmlyc3QgJiYgIWlzRW5hYmxlQmFja0J1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyZXZlcnNlXCIgKGtleVVwLmVudGVyKT1cIm5hdkN0cmwubmF2aWdhdGVSb290KCdjbGFpbWFudC1pbmR1Y3Rpb24nKVwiIChjbGljayk9XCJuYXZDdHJsLm5hdmlnYXRlUm9vdCgnY2xhaW1hbnQtaW5kdWN0aW9uJylcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5CYWNrPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChrZXl1cC5lbnRlcik9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIiAoY2xpY2spPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCI+TmV4dDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmV2ZXJzZVwiIChrZXlVcC5lbnRlcik9XCJjYW5jZWxBY3Rpb24oKVwiIChjbGljayk9XCJjYW5jZWxBY3Rpb24oKVwiIG1hdC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGtleXVwLmVudGVyKT1cImNvbXBsZXRlKClcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiPk5leHQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiBpc0xhc3QgJiYgIWlzRmlyc3RcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmV2ZXJzZVwiIG1hdC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzIChrZXl1cC5lbnRlcik9XCJwcmV2UGFnZShhY3RpdmVJbmRleClcIiAoY2xpY2spPVwicHJldlBhZ2UoYWN0aXZlSW5kZXgpXCI+QmFjazwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoa2V5dXAuZW50ZXIpPVwiY29tcGxldGUoKVwiIChjbGljayk9XCJjb21wbGV0ZSgpXCI+RG9uZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0ICYmICFpc0xhc3QgJiYgIWlzRmlyc3RcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmV2ZXJzZVwiIGVkaXRhYmxlPVwiZmFsc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyBcclxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwicHJldlBhZ2UoYWN0aXZlSW5kZXgpXCIgKGNsaWNrKT1cInByZXZQYWdlKGFjdGl2ZUluZGV4KVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGtleXVwLmVudGVyKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiIChjbGljayk9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRW5hYmxlQmFja0J1dHRvbiAmJiAhcXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0ICYmICFpc0xhc3QgJiYgaXNGaXJzdFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyZXZlcnNlXCIgZWRpdGFibGU9XCJmYWxzZVwiIG1hdC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzIFxyXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJjYW5jZWxBY3Rpb24oKVwiIChjbGljayk9XCJjYW5jZWxBY3Rpb24oKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGNsaWNrKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiIChrZXl1cC5lbnRlcik9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICA8L21hdC1zdGVwPlxyXG5cclxuICAgICAgICA8L21hdC1ob3Jpem9udGFsLXN0ZXBwZXI+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2lvbi1mb290ZXI+XHJcbiAgPC9mb3JtPlxyXG5cclxuXHJcblxyXG5cclxuICA8IS0tIDxkaXYgKm5nSWY9XCJwYXlMb2FkXCIgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICA8c3Ryb25nPlNhdmVkIHRoZSBmb2xsb3dpbmcgdmFsdWVzPC9zdHJvbmc+PGJyPnt7cGF5TG9hZH19XHJcbiAgICA8L2Rpdj4gIC0tPlxyXG5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGFwcC1sZXhpcy1uZXhpcyAqbmdJZj1cImlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZFwiIFtkaXNwbGF5XT1cImlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZFwiIFtwYWdlXT1cImZsb3dLZXlcIiBbdXNlckRldGFpbHNdPVwidXNlckRldGFpbHNcIiAoc3VjY2Vzcyk9XCJvbkxuU3VjY2VzcygpXCIgKGVycm9yKT1cIm9uTE5FcnJvcigpXCIgKHVzcHMpPVwidHJpZ2dlclVTUFMoKVwiPjwvYXBwLWxleGlzLW5leGlzPlxyXG48YXBwLW1mYSAjbWZhIFt1c2VyXT1cImxzLmdldFVzZXIoKVwiICpuZ0lmPVwic2hvd01mYVwiIChzdWNjZXNzKT1cInNhdmVTY3JlZW5RdWVzdGlvbm5haXJlKCRldmVudClcIiBbZGF0YV09XCJtZmFEYXRhXCIgW3JlcXVlc3RDb2RlXT1cInRydWVcIiBcclxuICAgICAgICAgW21mYUVycm9yXT1cIm1mYUVycm9yXCIgW2hpZGVCdXR0b25zXT1cInRydWVcIj48L2FwcC1tZmE+Il19