@mediusinc/mng-commons 3.5.0 → 3.6.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/assets/fonts/poppins-v20-latin-500.woff +0 -0
  2. package/assets/fonts/poppins-v20-latin-500.woff2 +0 -0
  3. package/assets/fonts/poppins-v20-latin-600.woff +0 -0
  4. package/assets/fonts/poppins-v20-latin-600.woff2 +0 -0
  5. package/assets/fonts/poppins-v20-latin-700.woff +0 -0
  6. package/assets/fonts/poppins-v20-latin-700.woff2 +0 -0
  7. package/assets/fonts/poppins-v20-latin-regular.woff +0 -0
  8. package/assets/fonts/poppins-v20-latin-regular.woff2 +0 -0
  9. package/assets/i18n/en.json +6 -2
  10. package/assets/i18n/sl.json +6 -2
  11. package/esm2022/lib/api/models/filter-match-type.model.mjs +3 -1
  12. package/esm2022/lib/api/utils/medius-rest.util.mjs +70 -40
  13. package/esm2022/lib/components/action/action.component.mjs +5 -5
  14. package/esm2022/lib/components/action/editor/action-editor.component.mjs +8 -7
  15. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +96 -23
  16. package/esm2022/lib/components/form/date-range/date-range.component.mjs +14 -5
  17. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +3 -3
  18. package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +2 -2
  19. package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +3 -3
  20. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +17 -3
  21. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +16 -4
  22. package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +2 -2
  23. package/esm2022/lib/components/layout/menu-item.component.mjs +3 -3
  24. package/esm2022/lib/components/layout/topbar.component.mjs +2 -2
  25. package/esm2022/lib/components/layoutV2/breadcrumb.component.mjs +30 -0
  26. package/esm2022/lib/components/layoutV2/footer.component.mjs +19 -0
  27. package/esm2022/lib/components/layoutV2/index.mjs +8 -0
  28. package/esm2022/lib/components/layoutV2/main-layout.component.mjs +89 -0
  29. package/esm2022/lib/components/layoutV2/menu-item.component.mjs +229 -0
  30. package/esm2022/lib/components/layoutV2/menu.component.mjs +31 -0
  31. package/esm2022/lib/components/layoutV2/model/index.mjs +3 -0
  32. package/esm2022/lib/components/layoutV2/model/layout-state.model.mjs +2 -0
  33. package/esm2022/lib/components/layoutV2/model/menu.model.mjs +2 -0
  34. package/esm2022/lib/components/layoutV2/services/index.mjs +3 -0
  35. package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +53 -0
  36. package/esm2022/lib/components/layoutV2/services/menu.service.mjs +122 -0
  37. package/esm2022/lib/components/layoutV2/sidebar.component.mjs +54 -0
  38. package/esm2022/lib/components/layoutV2/topbar-user.component.mjs +40 -0
  39. package/esm2022/lib/components/layoutV2/topbar.component.mjs +75 -0
  40. package/esm2022/lib/components/layoutV2/version.component.mjs +63 -0
  41. package/esm2022/lib/components/pages/error/error.page.component.mjs +3 -3
  42. package/esm2022/lib/components/pages/not-found/not-found.page.component.mjs +3 -3
  43. package/esm2022/lib/components/tableview/index.mjs +2 -1
  44. package/esm2022/lib/components/tableview/table/column-filter/column-filter.component.mjs +3 -6
  45. package/esm2022/lib/components/tableview/table/column-filter-full/column-filter-full.component.mjs +471 -0
  46. package/esm2022/lib/components/tableview/table/column-value/column-value.component.mjs +2 -2
  47. package/esm2022/lib/components/tableview/table/table.component.mjs +24 -16
  48. package/esm2022/lib/components/tableview/tableview.component.mjs +6 -5
  49. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +131 -34
  50. package/esm2022/lib/descriptors/editor/field.descriptor.mjs +25 -13
  51. package/esm2022/lib/descriptors/table/table.descriptor.mjs +10 -1
  52. package/esm2022/lib/descriptors/types/filter.type.mjs +3 -1
  53. package/esm2022/lib/directives/dialog-keydown-handler.directive.mjs +49 -0
  54. package/esm2022/lib/directives/index.mjs +2 -1
  55. package/esm2022/lib/mng-commons.module.mjs +10 -3
  56. package/esm2022/lib/models/common-init-event-enum.model.mjs +11 -0
  57. package/esm2022/lib/models/config.model.mjs +1 -1
  58. package/esm2022/lib/models/index.mjs +3 -1
  59. package/esm2022/lib/models/menu-config.model.mjs +2 -0
  60. package/esm2022/lib/models/menu.model.mjs +1 -1
  61. package/esm2022/lib/router/route-builder.mjs +55 -16
  62. package/esm2022/lib/router/routes-builder.mjs +9 -1
  63. package/esm2022/lib/services/action-executor.service.mjs +3 -4
  64. package/esm2022/lib/services/commons.service.mjs +26 -4
  65. package/esm2022/lib/services/internal/commons-init.service.mjs +28 -3
  66. package/esm2022/lib/utils/coercion.util.mjs +6 -0
  67. package/esm2022/lib/utils/index.mjs +2 -1
  68. package/esm2022/lib/utils/route.util.mjs +25 -1
  69. package/fesm2022/mediusinc-mng-commons.mjs +1897 -308
  70. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  71. package/lib/api/models/filter-match-type.model.d.ts +3 -1
  72. package/lib/components/action/action.component.d.ts +1 -0
  73. package/lib/components/action/editor/action-editor.component.d.ts +2 -1
  74. package/lib/components/form/autocomplete/autocomplete.component.d.ts +26 -4
  75. package/lib/components/form/date-range/date-range.component.d.ts +4 -1
  76. package/lib/components/layoutV2/breadcrumb.component.d.ts +10 -0
  77. package/lib/components/layoutV2/footer.component.d.ts +8 -0
  78. package/lib/components/layoutV2/index.d.ts +7 -0
  79. package/lib/components/layoutV2/main-layout.component.d.ts +23 -0
  80. package/lib/components/layoutV2/menu-item.component.d.ts +38 -0
  81. package/lib/components/layoutV2/menu.component.d.ts +12 -0
  82. package/lib/components/layoutV2/model/index.d.ts +2 -0
  83. package/lib/components/layoutV2/model/layout-state.model.d.ts +11 -0
  84. package/lib/components/layoutV2/model/menu.model.d.ts +4 -0
  85. package/lib/components/layoutV2/services/index.d.ts +2 -0
  86. package/lib/components/layoutV2/services/main-layout.component.service.d.ts +14 -0
  87. package/lib/components/layoutV2/services/menu.service.d.ts +22 -0
  88. package/lib/components/layoutV2/sidebar.component.d.ts +19 -0
  89. package/lib/components/layoutV2/topbar-user.component.d.ts +16 -0
  90. package/lib/components/layoutV2/topbar.component.d.ts +23 -0
  91. package/lib/components/layoutV2/version.component.d.ts +19 -0
  92. package/lib/components/tableview/index.d.ts +1 -0
  93. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +2 -3
  94. package/lib/components/tableview/table/column-filter-full/column-filter-full.component.d.ts +85 -0
  95. package/lib/components/tableview/table/table.component.d.ts +8 -6
  96. package/lib/descriptors/editor/editor.descriptor.d.ts +139 -42
  97. package/lib/descriptors/editor/field.descriptor.d.ts +35 -30
  98. package/lib/descriptors/table/table.descriptor.d.ts +3 -0
  99. package/lib/descriptors/types/filter.type.d.ts +3 -1
  100. package/lib/directives/dialog-keydown-handler.directive.d.ts +12 -0
  101. package/lib/directives/index.d.ts +1 -0
  102. package/lib/mng-commons.module.d.ts +50 -48
  103. package/lib/models/common-init-event-enum.model.d.ts +9 -0
  104. package/lib/models/config.model.d.ts +9 -8
  105. package/lib/models/index.d.ts +2 -0
  106. package/lib/models/menu-config.model.d.ts +15 -0
  107. package/lib/models/menu.model.d.ts +3 -1
  108. package/lib/router/route-builder.d.ts +21 -3
  109. package/lib/router/routes-builder.d.ts +5 -0
  110. package/lib/services/internal/commons-init.service.d.ts +5 -0
  111. package/lib/utils/coercion.util.d.ts +2 -0
  112. package/lib/utils/index.d.ts +1 -0
  113. package/lib/utils/route.util.d.ts +19 -30
  114. package/package.json +2 -2
  115. package/scss/common/layout/_breadcrumb.scss +0 -1
  116. package/scss/mng-commons-dark-v2.scss +9 -0
  117. package/scss/mng-commons-light-v2.scss +9 -0
  118. package/scss/mng-overrides/_theme_autocomplete.scss +10 -12
  119. package/scss/mng-overrides/_theme_fileupload.scss +24 -0
  120. package/scss/mng-overrides/_theme_styles.scss +1 -0
  121. package/scss/v2/layout/_animation.scss +53 -0
  122. package/scss/v2/layout/_breadcrumb.scss +97 -0
  123. package/scss/v2/layout/_config.scss +42 -0
  124. package/scss/v2/layout/_content.scss +3 -0
  125. package/scss/v2/layout/_fonts.scss +32 -0
  126. package/scss/v2/layout/_layout_dark.scss +12 -0
  127. package/scss/v2/layout/_layout_light.scss +12 -0
  128. package/scss/v2/layout/_main.scss +54 -0
  129. package/scss/v2/layout/_profile.scss +10 -0
  130. package/scss/v2/layout/_responsive.scss +131 -0
  131. package/scss/v2/layout/_sidebar_drawer.scss +283 -0
  132. package/scss/v2/layout/_sidebar_horizontal.scss +168 -0
  133. package/scss/v2/layout/_sidebar_reveal.scss +201 -0
  134. package/scss/v2/layout/_sidebar_slim.scss +157 -0
  135. package/scss/v2/layout/_sidebar_slim_plus.scss +167 -0
  136. package/scss/v2/layout/_sidebar_vertical.scss +176 -0
  137. package/scss/v2/layout/_topbar.scss +174 -0
  138. package/scss/v2/layout/_typography.scss +62 -0
  139. package/scss/v2/layout/_utils.scss +33 -0
  140. package/scss/v2/layout/layout.scss +24 -0
  141. package/scss/v2/layout/mng/_mng_layout_footer.scss +33 -0
  142. package/scss/v2/layout/mng/_mng_layout_menu.scss +10 -0
  143. package/scss/v2/layout/mng/_mng_layout_styles.scss +3 -0
  144. package/scss/v2/layout/mng/_mng_layout_topbar.scss +16 -0
  145. package/scss/v2/layout/preloading.scss +84 -0
  146. package/scss/v2/theme/theme-base/_colors.scss +18 -0
  147. package/scss/v2/theme/theme-base/_common.scss +73 -0
  148. package/scss/v2/theme/theme-base/_components.scss +106 -0
  149. package/scss/v2/theme/theme-base/_mixins.scss +203 -0
  150. package/scss/v2/theme/theme-base/components/button/_button.scss +564 -0
  151. package/scss/v2/theme/theme-base/components/button/_speeddial.scss +86 -0
  152. package/scss/v2/theme/theme-base/components/button/_splitbutton.scss +381 -0
  153. package/scss/v2/theme/theme-base/components/data/_carousel.scss +37 -0
  154. package/scss/v2/theme/theme-base/components/data/_datatable.scss +338 -0
  155. package/scss/v2/theme/theme-base/components/data/_dataview.scss +55 -0
  156. package/scss/v2/theme/theme-base/components/data/_filter.scss +138 -0
  157. package/scss/v2/theme/theme-base/components/data/_fullcalendar.scss +329 -0
  158. package/scss/v2/theme/theme-base/components/data/_orderlist.scss +103 -0
  159. package/scss/v2/theme/theme-base/components/data/_organizationchart.scss +50 -0
  160. package/scss/v2/theme/theme-base/components/data/_paginator.scss +92 -0
  161. package/scss/v2/theme/theme-base/components/data/_picklist.scss +103 -0
  162. package/scss/v2/theme/theme-base/components/data/_timeline.scss +38 -0
  163. package/scss/v2/theme/theme-base/components/data/_tree.scss +149 -0
  164. package/scss/v2/theme/theme-base/components/data/_treetable.scss +256 -0
  165. package/scss/v2/theme/theme-base/components/data/_virtualscroller.scss +28 -0
  166. package/scss/v2/theme/theme-base/components/file/_fileupload.scss +58 -0
  167. package/scss/v2/theme/theme-base/components/input/_autocomplete.scss +117 -0
  168. package/scss/v2/theme/theme-base/components/input/_calendar.scss +263 -0
  169. package/scss/v2/theme/theme-base/components/input/_cascadeselect.scss +130 -0
  170. package/scss/v2/theme/theme-base/components/input/_checkbox.scss +90 -0
  171. package/scss/v2/theme/theme-base/components/input/_chips.scss +54 -0
  172. package/scss/v2/theme/theme-base/components/input/_colorpicker.scss +19 -0
  173. package/scss/v2/theme/theme-base/components/input/_dropdown.scss +135 -0
  174. package/scss/v2/theme/theme-base/components/input/_editor.scss +122 -0
  175. package/scss/v2/theme/theme-base/components/input/_inputgroup.scss +75 -0
  176. package/scss/v2/theme/theme-base/components/input/_inputmask.scss +16 -0
  177. package/scss/v2/theme/theme-base/components/input/_inputnumber.scss +28 -0
  178. package/scss/v2/theme/theme-base/components/input/_inputswitch.scss +60 -0
  179. package/scss/v2/theme/theme-base/components/input/_inputtext.scss +99 -0
  180. package/scss/v2/theme/theme-base/components/input/_listbox.scss +82 -0
  181. package/scss/v2/theme/theme-base/components/input/_multiselect.scss +173 -0
  182. package/scss/v2/theme/theme-base/components/input/_password.scss +52 -0
  183. package/scss/v2/theme/theme-base/components/input/_radiobutton.scss +78 -0
  184. package/scss/v2/theme/theme-base/components/input/_rating.scss +55 -0
  185. package/scss/v2/theme/theme-base/components/input/_selectbutton.scss +50 -0
  186. package/scss/v2/theme/theme-base/components/input/_slider.scss +71 -0
  187. package/scss/v2/theme/theme-base/components/input/_togglebutton.scss +48 -0
  188. package/scss/v2/theme/theme-base/components/input/_treeselect.scss +139 -0
  189. package/scss/v2/theme/theme-base/components/menu/_breadcrumb.scss +42 -0
  190. package/scss/v2/theme/theme-base/components/menu/_contextmenu.scss +61 -0
  191. package/scss/v2/theme/theme-base/components/menu/_dock.scss +86 -0
  192. package/scss/v2/theme/theme-base/components/menu/_megamenu.scss +106 -0
  193. package/scss/v2/theme/theme-base/components/menu/_menu.scss +45 -0
  194. package/scss/v2/theme/theme-base/components/menu/_menubar.scss +188 -0
  195. package/scss/v2/theme/theme-base/components/menu/_panelmenu.scss +140 -0
  196. package/scss/v2/theme/theme-base/components/menu/_slidemenu.scss +64 -0
  197. package/scss/v2/theme/theme-base/components/menu/_steps.scss +56 -0
  198. package/scss/v2/theme/theme-base/components/menu/_tabmenu.scss +74 -0
  199. package/scss/v2/theme/theme-base/components/menu/_tieredmenu.scss +65 -0
  200. package/scss/v2/theme/theme-base/components/messages/_inlinemessage.scss +69 -0
  201. package/scss/v2/theme/theme-base/components/messages/_message.scss +107 -0
  202. package/scss/v2/theme/theme-base/components/messages/_toast.scss +100 -0
  203. package/scss/v2/theme/theme-base/components/misc/_avatar.scss +30 -0
  204. package/scss/v2/theme/theme-base/components/misc/_badge.scss +48 -0
  205. package/scss/v2/theme/theme-base/components/misc/_blockui.scss +0 -0
  206. package/scss/v2/theme/theme-base/components/misc/_chip.scss +38 -0
  207. package/scss/v2/theme/theme-base/components/misc/_inplace.scss +17 -0
  208. package/scss/v2/theme/theme-base/components/misc/_progressbar.scss +17 -0
  209. package/scss/v2/theme/theme-base/components/misc/_scrolltop.scss +25 -0
  210. package/scss/v2/theme/theme-base/components/misc/_skeleton.scss +8 -0
  211. package/scss/v2/theme/theme-base/components/misc/_tag.scss +40 -0
  212. package/scss/v2/theme/theme-base/components/misc/_terminal.scss +11 -0
  213. package/scss/v2/theme/theme-base/components/multimedia/_galleria.scss +149 -0
  214. package/scss/v2/theme/theme-base/components/multimedia/_image.scss +49 -0
  215. package/scss/v2/theme/theme-base/components/overlay/_confirmpopup.scss +72 -0
  216. package/scss/v2/theme/theme-base/components/overlay/_dialog.scss +69 -0
  217. package/scss/v2/theme/theme-base/components/overlay/_overlaypanel.scss +64 -0
  218. package/scss/v2/theme/theme-base/components/overlay/_sidebar.scss +27 -0
  219. package/scss/v2/theme/theme-base/components/overlay/_tooltip.scss +33 -0
  220. package/scss/v2/theme/theme-base/components/panel/_accordion.scss +119 -0
  221. package/scss/v2/theme/theme-base/components/panel/_card.scss +30 -0
  222. package/scss/v2/theme/theme-base/components/panel/_divider.scss +31 -0
  223. package/scss/v2/theme/theme-base/components/panel/_fieldset.scss +47 -0
  224. package/scss/v2/theme/theme-base/components/panel/_panel.scss +58 -0
  225. package/scss/v2/theme/theme-base/components/panel/_scrollpanel.scss +6 -0
  226. package/scss/v2/theme/theme-base/components/panel/_splitter.scss +19 -0
  227. package/scss/v2/theme/theme-base/components/panel/_tabview.scss +78 -0
  228. package/scss/v2/theme/theme-base/components/panel/_toolbar.scss +11 -0
  229. package/scss/v2/theme/theme-base/mng/_mng_mixins.scss +69 -0
  230. package/scss/v2/theme/theme-base/mng/_mng_theme_autocomplete.scss +34 -0
  231. package/scss/v2/theme/theme-base/mng/_mng_theme_button.scss +68 -0
  232. package/scss/v2/theme/theme-base/mng/_mng_theme_datatable.scss +146 -0
  233. package/scss/v2/theme/theme-base/mng/_mng_theme_datepicker.scss +21 -0
  234. package/scss/v2/theme/theme-base/mng/_mng_theme_dialog.scss +206 -0
  235. package/scss/v2/theme/theme-base/mng/_mng_theme_dropdown.scss +22 -0
  236. package/scss/v2/theme/theme-base/mng/_mng_theme_fileupload.scss +24 -0
  237. package/scss/v2/theme/theme-base/mng/_mng_theme_forms.scss +66 -0
  238. package/scss/v2/theme/theme-base/mng/_mng_theme_image.scss +27 -0
  239. package/scss/v2/theme/theme-base/mng/_mng_theme_input.scss +31 -0
  240. package/scss/v2/theme/theme-base/mng/_mng_theme_menu.scss +5 -0
  241. package/scss/v2/theme/theme-base/mng/_mng_theme_multiselect.scss +20 -0
  242. package/scss/v2/theme/theme-base/mng/_mng_theme_styles.scss +17 -0
  243. package/scss/v2/theme/theme-base/mng/_mng_theme_tableview.scss +97 -0
  244. package/scss/v2/theme/theme-base/mng/_mng_theme_tabview.scss +11 -0
  245. package/scss/v2/theme/theme-base/mng/_mng_theme_toast.scss +3 -0
  246. package/scss/v2/theme/theme-base/mng/_mng_theme_toolbar.scss +5 -0
  247. package/scss/v2/theme/theme-base/mng/_mng_variables.scss +15 -0
  248. package/scss/v2/theme/theme-dark/_extensions.scss +100 -0
  249. package/scss/v2/theme/theme-dark/_variables.scss +937 -0
  250. package/scss/v2/theme/theme-dark/blue/theme.scss +13 -0
  251. package/scss/v2/theme/theme-light/_extensions.scss +100 -0
  252. package/scss/v2/theme/theme-light/_variables.scss +937 -0
  253. package/scss/v2/theme/theme-light/blue/theme.scss +13 -0
@@ -230,9 +230,31 @@ export class MngCommonsService {
230
230
  // ripple
231
231
  this.primengConfig.ripple = true;
232
232
  this.primengConfig.filterMatchModeOptions = {
233
- text: [FilterMatchModeEnum.Contains, FilterMatchModeEnum.Equals, FilterMatchModeEnum.NotEquals, FilterMatchModeEnum.StartsWith, FilterMatchModeEnum.EndsWith],
234
- numeric: [FilterMatchModeEnum.Equals, FilterMatchModeEnum.NotEquals, FilterMatchModeEnum.LessThan, FilterMatchModeEnum.GreaterThan],
235
- date: [FilterMatchModeEnum.DateIs, FilterMatchModeEnum.DateBefore, FilterMatchModeEnum.DateAfter, FilterMatchModeEnum.Between]
233
+ text: [
234
+ FilterMatchModeEnum.Contains,
235
+ FilterMatchModeEnum.Equals,
236
+ FilterMatchModeEnum.NotEquals,
237
+ FilterMatchModeEnum.StartsWith,
238
+ FilterMatchModeEnum.EndsWith,
239
+ FilterMatchModeEnum.Exists,
240
+ FilterMatchModeEnum.DoesNotExist
241
+ ],
242
+ numeric: [
243
+ FilterMatchModeEnum.Equals,
244
+ FilterMatchModeEnum.NotEquals,
245
+ FilterMatchModeEnum.LessThan,
246
+ FilterMatchModeEnum.GreaterThan,
247
+ FilterMatchModeEnum.Exists,
248
+ FilterMatchModeEnum.DoesNotExist
249
+ ],
250
+ date: [
251
+ FilterMatchModeEnum.DateIs,
252
+ FilterMatchModeEnum.DateBefore,
253
+ FilterMatchModeEnum.DateAfter,
254
+ FilterMatchModeEnum.Between,
255
+ FilterMatchModeEnum.Exists,
256
+ FilterMatchModeEnum.DoesNotExist
257
+ ]
236
258
  };
237
259
  // translate
238
260
  this.translate.langs = this.appLanguages;
@@ -469,4 +491,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
469
491
  providedIn: 'root'
470
492
  }]
471
493
  }] });
472
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hELE9BQU8sRUFBeUIsYUFBYSxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTlFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUUsYUFBYSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBZ0Isb0JBQW9CLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFLdEUsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlJLFdBQVc7UUFDTSxXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUQsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsaUJBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsaUJBQVksR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM1QyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBSy9ELE9BQU87UUFDQyxjQUFTLEdBQThDLFNBQVMsQ0FBQztRQUNqRSxxQkFBZ0IsR0FBdUQsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNHLGVBQVUsR0FBbUIsU0FBUyxDQUFDO1FBQ3ZDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QiwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQzlDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFMUMsY0FBYztRQUNHLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFxQjtZQUM3RSxJQUFJLEVBQUUsWUFBWTtZQUNsQixVQUFVLEVBQUUsR0FBRztTQUNsQixDQUFDLENBQUM7UUFDYyx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFJN0UsU0FBUztRQUNELGlCQUFZLEdBQXFCLE9BQU8sQ0FBQztRQUl6QyxnQkFBVyxHQUErQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxlQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUMvQixxQkFBZ0IsR0FBMkIsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRTFGLFdBQVc7UUFDSCxvQkFBZSxHQUFHLElBQUksYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQztRQUN0RCx3QkFBbUIsR0FBRyxJQUFJLGFBQWEsQ0FBZ0IsQ0FBQyxDQUFDLENBQUM7S0EyZXJFO0lBemVHLGNBQWM7SUFFZCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxVQUFVLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLFdBQVcsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFFBQVEsSUFBSSwrQkFBK0IsQ0FBQztJQUM3SixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFFBQVEsSUFBSSwrQkFBK0IsQ0FBQztJQUMzSixDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxpQkFBaUI7WUFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtZQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsWUFBWSxJQUFJLHVDQUF1QyxDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFlBQVksSUFBSSx1Q0FBdUMsQ0FBQztJQUMvSyxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsRUFBRTtZQUNyRCxPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFXLFdBQVcsQ0FBQyxRQUF1QjtRQUMxQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDaEM7SUFDTCxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxZQUFZO1FBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwRCxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsRUFBRTtZQUMvRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUMvQixPQUFPLFdBQVcsQ0FBQztTQUN0QjtRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDO1FBQ25DLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBVyxzQkFBc0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFO1lBQy9ELE9BQU8sUUFBUSxDQUFDO1NBQ25CO1FBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsZUFBZSxDQUFDLFlBQTJCO1FBQ2xELElBQUksWUFBWSxLQUFLLElBQUksRUFBRTtZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMvQztJQUNMLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCx3R0FBd0c7SUFDeEcsSUFBVyxtQkFBbUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZTtJQUVmLElBQVcsZ0JBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDekIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDekIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsU0FBb0M7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxpQkFBaUI7SUFFakIsSUFBVyxrQkFBa0I7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZTtJQUVmLElBQVcsSUFBSTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxJQUFJLENBQUMsSUFBdUI7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsS0FBb0I7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBVyxxQkFBcUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxjQUFjLElBQUksS0FBSyxDQUFDO0lBQzlELENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDO1FBQzVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxJQUFJLEtBQUssQ0FBQztRQUV0RSxTQUFTO1FBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxXQUFXLElBQUksT0FBTyxDQUFDO1FBRW5FLFNBQVM7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRztZQUN4QyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1lBQzdKLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUNuSSxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7U0FDakksQ0FBQztRQUVGLFlBQVk7UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXRDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFNUYsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDN0MsSUFBSTtRQUNELG1HQUFtRztRQUNuRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLENBQ2xEO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNQLElBQUksQ0FBQywrQkFBK0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM5RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBZ0I7UUFDaEIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUNoRixjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDM0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsdUJBQXVCO1NBQzdFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxlQUFlO0lBRWYsbUJBQW1CLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQscUJBQXFCO0lBQ2Qsa0JBQWtCLENBQUMsSUFBaUI7UUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUM1RDthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbkcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUMzSTthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUMxRjthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztTQUNsRTthQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNsQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FB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QVEsQ0FBQyxJQUFJLENBQUM7UUFDekQsT0FBTyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLFlBQVksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO1NBQzFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQXFCLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFFL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxlQUFlLENBQUMsV0FBb0I7UUFDeEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXZCLElBQUksV0FBVyxFQUFFO1lBQ2IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXJELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDOzhHQXJoQlEsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGZCxNQUFNOzsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUaXRsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RmlsdGVyU2VydmljZSwgUHJpbWVOR0NvbmZpZ30gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01lZGl1c1Jlc3RVdGlsLCBPYmplY3RTZXJpYWxpemVyfSBmcm9tICcuLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtGaWx0ZXJNYXRjaE1vZGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge0lVc2VyLCBNbmdNZW51SXRlbX0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQnJlYWRjcnVtYk1lbnVJdGVtLCBNbmdSb3V0ZXJEYXRhfSBmcm9tICcuLi9yb3V0ZXIvbW9kZWxzJztcbmltcG9ydCB7TW5nTG9nZ2VyU2VydmljZX0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge01OR19CUk9XU0VSX1NUT1JBR0VfSVQsIE1OR19NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW5nQ29tbW9uc1NlcnZpY2Uge1xuICAgIC8vIGludGVybmFsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdNbmdDb21tb25zU2VydmljZScpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmltZW5nQ29uZmlnID0gaW5qZWN0KFByaW1lTkdDb25maWcpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclNlcnZpY2UgPSBpbmplY3QoRmlsdGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVDb25maWcgPSBpbmplY3QoTU5HX01PRFVMRV9DT05GSUdfSVQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gaW5qZWN0KE1OR19CUk9XU0VSX1NUT1JBR0VfSVQpO1xuXG4gICAgcHJpdmF0ZSByb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVMYW5nQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLy8gbWVudVxuICAgIHByaXZhdGUgX21lbnVNb2RlOiAnc3RhdGljJyB8ICdzaWRlYmFyJyB8ICdzbGltJyB8ICdvdmVybGF5JyA9ICdzaWRlYmFyJztcbiAgICBwcml2YXRlIF9tZW51TW9kZVN1YmplY3Q6IFN1YmplY3Q8J3N0YXRpYycgfCAnc2lkZWJhcicgfCAnc2xpbScgfCAnb3ZlcmxheSc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9tZW51TW9kZSk7XG4gICAgcHJpdmF0ZSBfbWVudUl0ZW1zPzogTW5nTWVudUl0ZW1bXSA9IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF9tZW51UGluRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVTaWRlYmFyU2xpbSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVBY3RpdmVLZXlTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgX21lbnVSZXNldFN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLy8gYnJlYWRjcnVtYnNcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJIb21lU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TW5nTWVudUl0ZW0gfCBudWxsPih7XG4gICAgICAgIGljb246ICdwaSBwaS1ob21lJyxcbiAgICAgICAgcm91dGVyTGluazogJy8nXG4gICAgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1ic1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1uZ01lbnVJdGVtW10+KFtdKTtcbiAgICBwcml2YXRlIGJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyB2aXN1YWxcbiAgICBwcml2YXRlIF9jb2xvclNjaGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgICAvLyB1c2VyXG4gICAgcHJpdmF0ZSBfdXNlcj86IElVc2VyO1xuICAgIHByaXZhdGUgdXNlclN1YmplY3Q6IFN1YmplY3Q8SVVzZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgcHJpdmF0ZSBfdXNlclJvbGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSB1c2VyUm9sZXNTdWJqZWN0OiBTdWJqZWN0PEFycmF5PHN0cmluZz4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmc+PihbXSk7XG5cbiAgICAvLyBsYW5ndWFnZVxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSBkYXRhTGFuZ3VhZ2VTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oMSk7XG5cbiAgICAvLyBBUFAgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCBhcHBOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubmFtZSA/PyAnYXBwLm5hbWUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwT3duZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5vd25lciA/PyAnYXBwLm93bmVyJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExvZ29MaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoTGlnaHQgPyB0aGlzLm1vZHVsZUNvbmZpZy5hcHAubG9nb1BhdGhMaWdodCA6IHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLnBuZyc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMb2dvRGFyaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvUGF0aERhcmsgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvUGF0aCA/PyAnYXNzZXRzL2xheW91dC9pbWFnZXMvbG9nby5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29OYW1lUGF0aExpZ2h0XG4gICAgICAgICAgICA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhMaWdodFxuICAgICAgICAgICAgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvTmFtZVBhdGggPz8gJ2Fzc2V0cy9sYXlvdXQvaW1hZ2VzL2xvZ28tYXBwbmFtZS5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVEYXJrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhEYXJrIDogdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLWFwcG5hbWUucG5nJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/Lmxhbmd1YWdlcyA/PyBbJ2VuJ107XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMYW5ndWFnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbHNMYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZycpO1xuICAgICAgICBpZiAobHNMYW5nICYmIHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBsc0xhbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbHNMYW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXBwTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdsYW5nJyk7XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlU3ViamVjdC5uZXh0KGxhbmd1YWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcHBMYW5ndWFnZXMuc29tZShsID0+IGwgPT09IGxhbmd1YWdlKSkge1xuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbGFuZycsIGxhbmd1YWdlKTtcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTdWJqZWN0Lm5leHQobGFuZ3VhZ2UpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmd1YWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTGFuZ3VhZ2UkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdExhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJMYW5nID0gdGhpcy50cmFuc2xhdGUuZ2V0QnJvd3NlckxhbmcoKTtcbiAgICAgICAgaWYgKGJyb3dzZXJMYW5nICYmIHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBicm93c2VyTGFuZykpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwTGFuZ3VhZ2UgPSBicm93c2VyTGFuZztcbiAgICAgICAgICAgIHJldHVybiBicm93c2VyTGFuZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2UgPSB0aGlzLmFwcExhbmd1YWdlcz8ubGVuZ3RoID4gMCA/IHRoaXMuYXBwTGFuZ3VhZ2VzWzBdIDogJ2VuJztcbiAgICAgICAgdGhpcy5hcHBMYW5ndWFnZSA9IGRlZmF1bHRMYW5ndWFnZTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JJbml0TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwTGFuZ3VhZ2UgfHwgdGhpcy5pbml0TGFuZ3VhZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcERhdGFMYW5ndWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5kYXRhTGFuZ3VhZ2VzID8/IFsnZW4nXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcERhdGFMYW5ndWFnZURlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcERhdGFMYW5ndWFnZXNbMF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBEYXRhTGFuZ3VhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGRhdGFMYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YUxhbmcnKTtcbiAgICAgICAgaWYgKGRhdGFMYW5nICYmIHRoaXMuYXBwRGF0YUxhbmd1YWdlcy5zb21lKGRsID0+IGRsID09PSBkYXRhTGFuZykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhTGFuZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGF0YUxhbmd1YWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXBwRGF0YUxhbmd1YWdlKGRhdGFMYW5ndWFnZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBpZiAoZGF0YUxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdkYXRhTGFuZycpO1xuICAgICAgICAgICAgdGhpcy5kYXRhTGFuZ3VhZ2VTdWJqZWN0Lm5leHQoZGF0YUxhbmd1YWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcHBEYXRhTGFuZ3VhZ2VzLnNvbWUoZGwgPT4gZGwgPT09IGRhdGFMYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RhdGFMYW5nJywgZGF0YUxhbmd1YWdlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlU3ViamVjdC5uZXh0KGRhdGFMYW5ndWFnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcERhdGFMYW5ndWFnZSQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFMYW5ndWFnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBhc3N1bWUsIHRoYXQgZGVmYXVsdCBkYXRhIGxhbmd1YWdlIGlzIHRoZSBmaXJzdCBvbmUgZnJvbSB0aGUgYXJyYXkgb2YgYWxsIGF2YWlsYWJsZSBkYXRhIGxhbmd1YWdlc1xuICAgIHB1YmxpYyBnZXQgZGVmYXVsdERhdGFMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwRGF0YUxhbmd1YWdlc1swXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcFZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy52ZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIE1FTlUgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU3RhdGljKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGUgPT09ICdzdGF0aWMnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc1N0YXRpYyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZVN1YmplY3QucGlwZShtYXAoZSA9PiBlID09PSAnc3RhdGljJykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc092ZXJsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZSA9PT0gJ292ZXJsYXknO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc092ZXJsYXkkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGVTdWJqZWN0LnBpcGUobWFwKGUgPT4gZSA9PT0gJ292ZXJsYXknKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU2xpbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlID09PSAnc2xpbSc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU2xpbSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZVN1YmplY3QucGlwZShtYXAoZSA9PiBlID09PSAnc2xpbScpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTaWRlYmFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGUgPT09ICdzaWRlYmFyJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTaWRlYmFyJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlU3ViamVjdC5waXBlKG1hcChlID0+IGUgPT09ICdzaWRlYmFyJykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudUFjdGl2ZUtleSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVBY3RpdmVLZXlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudVJlc2V0JCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudVJlc2V0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG1lbnVJdGVtcyhtZW51SXRlbXM6IE1uZ01lbnVJdGVtW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fbWVudUl0ZW1zID0gbWVudUl0ZW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudVBpbkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51UGluRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVTaWRlYmFyU2xpbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVTaWRlYmFyU2xpbTtcbiAgICB9XG5cbiAgICAvLyBCUkVBRENSVU1CIHNlY3Rpb25cbiAgICBwdWJsaWMgZ2V0IGJyZWFkY3J1bWJIb21lJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJlYWRjcnVtYkhvbWVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnJlYWRjcnVtYnMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5icmVhZGNydW1ic1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gVklTVUFMIHNlY3Rpb25cblxuICAgIHB1YmxpYyBnZXQgY29sb3JTY2hlbWVJc0xpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JTY2hlbWUgPT09ICdsaWdodCc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2xvclNjaGVtZUlzRGFyaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yU2NoZW1lID09PSAnZGFyayc7XG4gICAgfVxuXG4gICAgLy8gVVNFUiBzZWN0aW9uXG5cbiAgICBwdWJsaWMgZ2V0IHVzZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdXNlcih1c2VyOiBJVXNlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl91c2VyID0gdXNlcjtcbiAgICAgICAgdGhpcy51c2VyU3ViamVjdC5uZXh0KHVzZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlciQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlclJvbGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclJvbGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdXNlclJvbGVzKHJvbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuX3VzZXJSb2xlcyA9IHJvbGVzO1xuICAgICAgICB0aGlzLnVzZXJSb2xlc1N1YmplY3QubmV4dChyb2xlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1c2VyUm9sZXMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyUm9sZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIEFDVElPTlMgc2VjdGlvblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uc0RlYnVnSW5zdGFuY2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWcuYWN0aW9ucz8uZGVidWdJbnN0YW5jZXMgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9tZW51TW9kZSA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5tb2RlID8/ICdzaWRlYmFyJztcbiAgICAgICAgdGhpcy5fbWVudU1vZGVTdWJqZWN0Lm5leHQodGhpcy5fbWVudU1vZGUpO1xuICAgICAgICB0aGlzLl9tZW51SXRlbXMgPSB0aGlzLm1vZHVsZUNvbmZpZz8ubWVudT8ubWVudUl0ZW1zO1xuICAgICAgICB0aGlzLl9tZW51UGluRW5hYmxlZCA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5waW5FbmFibGVkID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9tZW51U2lkZWJhclNsaW0gPSB0aGlzLm1vZHVsZUNvbmZpZz8ubWVudT8uc2lkZWJhclNsaW0gPz8gZmFsc2U7XG5cbiAgICAgICAgLy8gdmlzdWFsXG4gICAgICAgIHRoaXMuX2NvbG9yU2NoZW1lID0gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8uY29sb3JTY2hlbWUgPz8gJ2xpZ2h0JztcblxuICAgICAgICAvLyByaXBwbGVcbiAgICAgICAgdGhpcy5wcmltZW5nQ29uZmlnLnJpcHBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJpbWVuZ0NvbmZpZy5maWx0ZXJNYXRjaE1vZGVPcHRpb25zID0ge1xuICAgICAgICAgICAgdGV4dDogW0ZpbHRlck1hdGNoTW9kZUVudW0uQ29udGFpbnMsIEZpbHRlck1hdGNoTW9kZUVudW0uRXF1YWxzLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLk5vdEVxdWFscywgRmlsdGVyTWF0Y2hNb2RlRW51bS5TdGFydHNXaXRoLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLkVuZHNXaXRoXSxcbiAgICAgICAgICAgIG51bWVyaWM6IFtGaWx0ZXJNYXRjaE1vZGVFbnVtLkVxdWFscywgRmlsdGVyTWF0Y2hNb2RlRW51bS5Ob3RFcXVhbHMsIEZpbHRlck1hdGNoTW9kZUVudW0uTGVzc1RoYW4sIEZpbHRlck1hdGNoTW9kZUVudW0uR3JlYXRlclRoYW5dLFxuICAgICAgICAgICAgZGF0ZTogW0ZpbHRlck1hdGNoTW9kZUVudW0uRGF0ZUlzLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLkRhdGVCZWZvcmUsIEZpbHRlck1hdGNoTW9kZUVudW0uRGF0ZUFmdGVyLCBGaWx0ZXJNYXRjaE1vZGVFbnVtLkJldHdlZW5dXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdHJhbnNsYXRlXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmxhbmdzID0gdGhpcy5hcHBMYW5ndWFnZXM7XG4gICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLmdldE9ySW5pdExhbmd1YWdlKCk7XG5cbiAgICAgICAgdGhpcy5sYW5ndWFnZVN1YmplY3QubmV4dChsYW5nKTtcbiAgICAgICAgdGhpcy5kYXRhTGFuZ3VhZ2VTdWJqZWN0Lm5leHQodGhpcy5hcHBEYXRhTGFuZ3VhZ2UpO1xuXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KCdtbmdQcmltZScpLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnByaW1lbmdDb25maWcuc2V0VHJhbnNsYXRpb24odmFsdWUpKTtcblxuICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciB0aGUgTmF2aWdhdGlvbkVuZCBldmVudHMgYXMgdGhlIGJyZWFkY3J1bWIgaXMgdXBkYXRlZCBvbmx5IHdoZW4gdGhlIHJvdXRlIHJlYWNoZXMgaXRzIGVuZFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdlVGl0bGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZUxhbmdDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlTGFuZ0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1icygpO1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdlVGl0bGUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc2VyaWFsaXphdGlvblxuICAgICAgICBPYmplY3RTZXJpYWxpemVyLmdldCgpLmNvbmZpZ3VyZSh7Li4uKHRoaXMubW9kdWxlQ29uZmlnPy5zZXJpYWxpemF0aW9uID8/IHt9KX0pO1xuICAgICAgICBNZWRpdXNSZXN0VXRpbC5nZXQoKS5jb25maWd1cmUoe1xuICAgICAgICAgICAgLi4uKHRoaXMubW9kdWxlQ29uZmlnPy5zZXJpYWxpemF0aW9uID8/IHt9KSxcbiAgICAgICAgICAgIGRhdGVPbmx5RGlzYWJsZWQ6IHRoaXMubW9kdWxlQ29uZmlnLnNlcmlhbGl6YXRpb24/LmZpbHRlcnNEYXRlT25seURpc2FibGVkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdSZXNldCcpO1xuICAgIH1cblxuICAgIC8vIE1FTlUgYWN0aW9uc1xuXG4gICAgbWVudUNoYW5nZUFjdGl2ZUtleShrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tZW51QWN0aXZlS2V5U3ViamVjdC5uZXh0KGtleSk7XG4gICAgfVxuXG4gICAgbWVudVJlc2V0KCkge1xuICAgICAgICB0aGlzLl9tZW51UmVzZXRTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gQlJFQURDUlVNQiBhY3Rpb25zXG4gICAgcHVibGljIGZpbmRCcmVhZGNydW1iSXRlbShpdGVtOiBNbmdNZW51SXRlbSk6IE1uZ01lbnVJdGVtIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5icmVhZGNydW1ic1N1YmplY3QudmFsdWU7XG4gICAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkuaWQgJiYgaS5pZCA9PT0gaXRlbS5pZCkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlckxpbmtTdHIgPSBBcnJheS5pc0FycmF5KGl0ZW0ucm91dGVyTGluaykgPyBpdGVtLnJvdXRlckxpbmsuam9pbignLycpIDogaXRlbS5yb3V0ZXJMaW5rO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLnJvdXRlckxpbmsgJiYgKEFycmF5LmlzQXJyYXkoaS5yb3V0ZXJMaW5rKSA/IGkucm91dGVyTGluay5qb2luKCcvJykgOiBpLnJvdXRlckxpbmspID09PSByb3V0ZXJMaW5rU3RyKSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucG9zaXRpb25JbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLnBvc2l0aW9uSW5kZXggJiYgaS5wb3NpdGlvbkluZGV4ID09PSBpLnBvc2l0aW9uSW5kZXgpID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbmQoaSA9PiBpLmxhYmVsICYmIGkubGFiZWwgPT09IGkubGFiZWwpID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkuaWNvbiAmJiBpLmljb24gPT09IGkuaWNvbikgPz8gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQnJlYWRjcnVtYkl0ZW0oaXRlbTogTW5nTWVudUl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5icmVhZGNydW1ic1N1YmplY3QudmFsdWVdO1xuICAgICAgICBsZXQgcG9zSWR4ID0gLTE7XG4gICAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLmlkICYmIGkuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyTGlua1N0ciA9IEFycmF5LmlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluay5qb2luKCcvJykgOiBpdGVtLnJvdXRlckxpbms7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLnJvdXRlckxpbmsgJiYgKEFycmF5LmlzQXJyYXkoaS5yb3V0ZXJMaW5rKSA/IGkucm91dGVyTGluay5qb2luKCcvJykgOiBpLnJvdXRlckxpbmspID09PSByb3V0ZXJMaW5rU3RyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnBvc2l0aW9uSW5kZXgpIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkucG9zaXRpb25JbmRleCAmJiBpLnBvc2l0aW9uSW5kZXggPT09IGkucG9zaXRpb25JbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5sYWJlbCAmJiBpLmxhYmVsID09PSBpLmxhYmVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkuaWNvbiAmJiBpLmljb24gPT09IGkuaWNvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zSWR4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbXNbcG9zSWR4XSA9IHtcbiAgICAgICAgICAgIC4uLml0ZW1zW3Bvc0lkeF0sXG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdXBkYXRlZDogdHJ1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYnJlYWRjcnVtYnNTdWJqZWN0Lm5leHQoaXRlbXMpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnJlYWRjcnVtYnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJyZWFkY3J1bWJIb21lVHJhbnNsYXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lVHJhbnNsYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm9vdFJvdXRlID0gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdDtcblxuICAgICAgICBjb25zdCBob21lQnJlYWRjcnVtYiA9IHRoaXMuZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb290Um91dGUpO1xuICAgICAgICBpZiAoaG9tZUJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgIGlmIChob21lQnJlYWRjcnVtYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0ZS5nZXQoaG9tZUJyZWFkY3J1bWIubGFiZWwpLnN1YnNjcmliZShpMThuID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaG9tZUJyZWFkY3J1bWIubGFiZWwgPSBpMThuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lU3ViamVjdC5uZXh0KGhvbWVCcmVhZGNydW1iKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVN1YmplY3QubmV4dChob21lQnJlYWRjcnVtYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBicmVhZGNydW1iczogTW5nTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYnMocm9vdFJvdXRlLCBbXSwgYnJlYWRjcnVtYnMpO1xuXG4gICAgICAgIGJyZWFkY3J1bWJzLmZvckVhY2goKGIsIGlkeCkgPT4ge1xuICAgICAgICAgICAgYi5wb3NpdGlvbkluZGV4ID0gaWR4O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpMThuS2V5czogQXJyYXk8c3RyaW5nPiA9IGJyZWFkY3J1bWJzLmZpbHRlcihiID0+IHR5cGVvZiBiLmxhYmVsID09PSAnc3RyaW5nJykubWFwKGIgPT4gYi5sYWJlbCEpO1xuICAgICAgICBpZiAoaTE4bktleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1RyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlLmdldChpMThuS2V5cykuc3Vic2NyaWJlKGkxOG4gPT4ge1xuICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgYnJlYWRjcnVtYiBoaWVyYXJjaHlcbiAgICAgICAgICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKGIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYi5sYWJlbCAmJiBpMThuW2IubGFiZWxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiLmxhYmVsID0gaTE4bltiLmxhYmVsXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV3IGJyZWFkY3J1bWJzXG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1N1YmplY3QubmV4dChicmVhZGNydW1icyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNTdWJqZWN0Lm5leHQoYnJlYWRjcnVtYnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUhvbWVCcmVhZGNydW1iKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCk6IE1uZ01lbnVJdGVtIHwgbnVsbCB7XG4gICAgICAgIGlmICghcm91dGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gcm91dGUuZGF0YSBhcyBNbmdSb3V0ZXJEYXRhO1xuICAgICAgICBjb25zdCBicmVhZGNydW1iUm91dGVEYXRhID0gcm91dGVEYXRhPy5icmVhZGNydW1iO1xuICAgICAgICBpZiAoYnJlYWRjcnVtYlJvdXRlRGF0YSAmJiB0eXBlb2YgYnJlYWRjcnVtYlJvdXRlRGF0YSA9PT0gJ29iamVjdCcgJiYgJ2lzSG9tZScgaW4gYnJlYWRjcnVtYlJvdXRlRGF0YSkge1xuICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWJSb3V0ZURhdGEuaXNIb21lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuY3JlYXRlQnJlYWRjcnVtYignLycsIGJyZWFkY3J1bWJSb3V0ZURhdGEsIHRydWUpO1xuICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyZWFkY3J1bWIuaWNvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYi5pY29uID0gJ3BpIHBpLWhvbWUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYnJlYWRjcnVtYjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlSG9tZUJyZWFkY3J1bWIocm91dGUuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUJyZWFkY3J1bWJzKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCwgcGFyZW50VXJsU2VnbWVudHM6IHN0cmluZ1tdLCBicmVhZGNydW1iczogTW5nTWVudUl0ZW1bXSkge1xuICAgICAgICBpZiAoIXJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIGFzIE1uZ1JvdXRlckRhdGE7XG4gICAgICAgIGNvbnN0IHJvdXRlVXJsU2VnbWVudHMgPSBwYXJlbnRVcmxTZWdtZW50cy5jb25jYXQocm91dGUudXJsLm1hcCh1cmwgPT4gdXJsLnBhdGgpKTtcbiAgICAgICAgY29uc3Qgcm91dGVVcmwgPSBgLyR7cm91dGVVcmxTZWdtZW50cy5qb2luKCcvJyl9YDtcbiAgICAgICAgaWYgKHJvdXRlRGF0YT8uYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYlJvdXRlRGF0YSA9IHJvdXRlRGF0YS5icmVhZGNydW1iO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShicmVhZGNydW1iUm91dGVEYXRhKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYnJlYWRjcnVtYlJvdXRlRGF0YUl0ZW0gb2YgYnJlYWRjcnVtYlJvdXRlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKHJvdXRlVXJsLCBicmVhZGNydW1iUm91dGVEYXRhSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVhZGNydW1iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKGJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWRjcnVtYlJvdXRlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2goLi4uYnJlYWRjcnVtYlJvdXRlRGF0YShyb3V0ZVVybCwgcm91dGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHRoaXMuY3JlYXRlQnJlYWRjcnVtYihyb3V0ZVVybCwgYnJlYWRjcnVtYlJvdXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaChicmVhZGNydW1iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUJyZWFkY3J1bWJzKHJvdXRlLmZpcnN0Q2hpbGQsIHJvdXRlVXJsU2VnbWVudHMsIGJyZWFkY3J1bWJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJyZWFkY3J1bWIocm91dGVVcmw6IHN0cmluZywgcm91dGVCcmVhZGNydW1iOiBzdHJpbmcgfCBNbmdCcmVhZGNydW1iTWVudUl0ZW0sIGluY2x1ZGVIb21lID0gZmFsc2UpOiBNbmdNZW51SXRlbSB8IG51bGwge1xuICAgICAgICBjb25zdCBleGlzdGluZ0JyZWFkY3J1bWIgPSB0aGlzLmZpbmRCcmVhZGNydW1iSXRlbSh7cm91dGVyTGluazogcm91dGVVcmx9KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nQnJlYWRjcnVtYj8udXBkYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nQnJlYWRjcnVtYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdXRlQnJlYWRjcnVtYiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1cGRhdGVkIGV4aXN0aW5nIGJyZWFkY3J1bWJcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IHJvdXRlVXJsLFxuICAgICAgICAgICAgICAgIGxhYmVsOiByb3V0ZUJyZWFkY3J1bWIsXG4gICAgICAgICAgICAgICAgcm91dGVyTGluazogcm91dGVVcmxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWluY2x1ZGVIb21lICYmIHR5cGVvZiByb3V0ZUJyZWFkY3J1bWIuaXNIb21lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8vIGhvbWUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZFxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZUJyZWFkY3J1bWIucm91dGVyTGluayA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByb3V0ZUJyZWFkY3J1bWIucm91dGVyTGluayA9IHJvdXRlVXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm91dGVCcmVhZGNydW1iLmlkID0gcm91dGVVcmw7XG4gICAgICAgICAgICByZXR1cm4gcm91dGVCcmVhZGNydW1iO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVElUTEUgc2VjdGlvblxuXG4gICAgcHVibGljIHNldFBhZ2VUaXRsZSh0aXRsZT86IHN0cmluZykge1xuICAgICAgICBsZXQgY3VycmVudFJvdXRlID0gdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdDtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnRSb3V0ZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICBjdXJyZW50Um91dGUgPSBjdXJyZW50Um91dGUuZmlyc3RDaGlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IGN1cnJlbnRSb3V0ZS5kYXRhIGFzIE1uZ1JvdXRlckRhdGE7XG4gICAgICAgIGNvbnN0IHBhZ2VUaXRsZSA9IHRpdGxlID8/IHJvdXRlRGF0YS5wYWdlVGl0bGU7XG5cbiAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5mb3JtYXRQYWdlVGl0bGUocGFnZVRpdGxlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRQYWdlVGl0bGUodGl0bGVQcmVmaXg/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGl0bGVQaWVjZXMgPSBbXTtcblxuICAgICAgICBpZiAodGl0bGVQcmVmaXgpIHtcbiAgICAgICAgICAgIHRpdGxlUGllY2VzLnB1c2godGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aXRsZVByZWZpeCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGl0bGVQaWVjZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhcHAubmFtZScpKTtcblxuICAgICAgICByZXR1cm4gdGl0bGVQaWVjZXMuam9pbignIC0gJyk7XG4gICAgfVxufVxuIl19
494
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jb21tb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hELE9BQU8sRUFBeUIsYUFBYSxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTlFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUUsYUFBYSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBZ0Isb0JBQW9CLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFLdEUsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlJLFdBQVc7UUFDTSxXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUQsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FB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QUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUM1RDthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbkcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUMzSTthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUMxRjthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtB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Q0FBQzthQUN6QztZQUNELGVBQWUsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO1lBQzlCLE9BQU8sZUFBZSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtJQUVULFlBQVksQ0FBQyxLQUFjO1FBQzlCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDekQsT0FBTyxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQzVCLFlBQVksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO1NBQzFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQXFCLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFFL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxlQUFlLENBQUMsV0FBb0I7UUFDeEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXZCLElBQUksV0FBVyxFQUFFO1lBQ2IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXJELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDOzhHQTNpQlEsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGZCxNQUFNOzsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUaXRsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RmlsdGVyU2VydmljZSwgUHJpbWVOR0NvbmZpZ30gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01lZGl1c1Jlc3RVdGlsLCBPYmplY3RTZXJpYWxpemVyfSBmcm9tICcuLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtGaWx0ZXJNYXRjaE1vZGVFbnVtfSBmcm9tICcuLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge0lVc2VyLCBNbmdNZW51SXRlbX0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQnJlYWRjcnVtYk1lbnVJdGVtLCBNbmdSb3V0ZXJEYXRhfSBmcm9tICcuLi9yb3V0ZXIvbW9kZWxzJztcbmltcG9ydCB7TW5nTG9nZ2VyU2VydmljZX0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge01OR19CUk9XU0VSX1NUT1JBR0VfSVQsIE1OR19NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW5nQ29tbW9uc1NlcnZpY2Uge1xuICAgIC8vIGludGVybmFsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdNbmdDb21tb25zU2VydmljZScpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmltZW5nQ29uZmlnID0gaW5qZWN0KFByaW1lTkdDb25maWcpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclNlcnZpY2UgPSBpbmplY3QoRmlsdGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVDb25maWcgPSBpbmplY3QoTU5HX01PRFVMRV9DT05GSUdfSVQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gaW5qZWN0KE1OR19CUk9XU0VSX1NUT1JBR0VfSVQpO1xuXG4gICAgcHJpdmF0ZSByb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVMYW5nQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLy8gbWVudVxuICAgIHByaXZhdGUgX21lbnVNb2RlOiAnc3RhdGljJyB8ICdzaWRlYmFyJyB8ICdzbGltJyB8ICdvdmVybGF5JyA9ICdzaWRlYmFyJztcbiAgICBwcml2YXRlIF9tZW51TW9kZVN1YmplY3Q6IFN1YmplY3Q8J3N0YXRpYycgfCAnc2lkZWJhcicgfCAnc2xpbScgfCAnb3ZlcmxheSc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLl9tZW51TW9kZSk7XG4gICAgcHJpdmF0ZSBfbWVudUl0ZW1zPzogTW5nTWVudUl0ZW1bXSA9IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIF9tZW51UGluRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVTaWRlYmFyU2xpbSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21lbnVBY3RpdmVLZXlTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgX21lbnVSZXNldFN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLy8gYnJlYWRjcnVtYnNcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJIb21lU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TW5nTWVudUl0ZW0gfCBudWxsPih7XG4gICAgICAgIGljb246ICdwaSBwaS1ob21lJyxcbiAgICAgICAgcm91dGVyTGluazogJy8nXG4gICAgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBicmVhZGNydW1ic1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1uZ01lbnVJdGVtW10+KFtdKTtcbiAgICBwcml2YXRlIGJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyB2aXN1YWxcbiAgICBwcml2YXRlIF9jb2xvclNjaGVtZTogJ2xpZ2h0JyB8ICdkYXJrJyA9ICdsaWdodCc7XG5cbiAgICAvLyB1c2VyXG4gICAgcHJpdmF0ZSBfdXNlcj86IElVc2VyO1xuICAgIHByaXZhdGUgdXNlclN1YmplY3Q6IFN1YmplY3Q8SVVzZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gICAgcHJpdmF0ZSBfdXNlclJvbGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSB1c2VyUm9sZXNTdWJqZWN0OiBTdWJqZWN0PEFycmF5PHN0cmluZz4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmc+PihbXSk7XG5cbiAgICAvLyBsYW5ndWFnZVxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oMSk7XG4gICAgcHJpdmF0ZSBkYXRhTGFuZ3VhZ2VTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nIHwgbnVsbD4oMSk7XG5cbiAgICAvLyBBUFAgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCBhcHBOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubmFtZSA/PyAnYXBwLm5hbWUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwT3duZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5vd25lciA/PyAnYXBwLm93bmVyJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExvZ29MaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoTGlnaHQgPyB0aGlzLm1vZHVsZUNvbmZpZy5hcHAubG9nb1BhdGhMaWdodCA6IHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLnBuZyc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMb2dvRGFyaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29QYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvUGF0aERhcmsgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvUGF0aCA/PyAnYXNzZXRzL2xheW91dC9pbWFnZXMvbG9nby5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/LmxvZ29OYW1lUGF0aExpZ2h0XG4gICAgICAgICAgICA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhMaWdodFxuICAgICAgICAgICAgOiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5sb2dvTmFtZVBhdGggPz8gJ2Fzc2V0cy9sYXlvdXQvaW1hZ2VzL2xvZ28tYXBwbmFtZS5wbmcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTG9nb05hbWVEYXJrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoRGFyayA/IHRoaXMubW9kdWxlQ29uZmlnLmFwcC5sb2dvTmFtZVBhdGhEYXJrIDogdGhpcy5tb2R1bGVDb25maWc/LmFwcD8ubG9nb05hbWVQYXRoID8/ICdhc3NldHMvbGF5b3V0L2ltYWdlcy9sb2dvLWFwcG5hbWUucG5nJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcExhbmd1YWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ29uZmlnPy5hcHA/Lmxhbmd1YWdlcyA/PyBbJ2VuJ107XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBMYW5ndWFnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbHNMYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZycpO1xuICAgICAgICBpZiAobHNMYW5nICYmIHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBsc0xhbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbHNMYW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXBwTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgaWYgKGxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdsYW5nJyk7XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlU3ViamVjdC5uZXh0KGxhbmd1YWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcHBMYW5ndWFnZXMuc29tZShsID0+IGwgPT09IGxhbmd1YWdlKSkge1xuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbGFuZycsIGxhbmd1YWdlKTtcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTdWJqZWN0Lm5leHQobGFuZ3VhZ2UpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmd1YWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwTGFuZ3VhZ2UkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdExhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJMYW5nID0gdGhpcy50cmFuc2xhdGUuZ2V0QnJvd3NlckxhbmcoKTtcbiAgICAgICAgaWYgKGJyb3dzZXJMYW5nICYmIHRoaXMuYXBwTGFuZ3VhZ2VzLnNvbWUobCA9PiBsID09PSBicm93c2VyTGFuZykpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwTGFuZ3VhZ2UgPSBicm93c2VyTGFuZztcbiAgICAgICAgICAgIHJldHVybiBicm93c2VyTGFuZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2UgPSB0aGlzLmFwcExhbmd1YWdlcz8ubGVuZ3RoID4gMCA/IHRoaXMuYXBwTGFuZ3VhZ2VzWzBdIDogJ2VuJztcbiAgICAgICAgdGhpcy5hcHBMYW5ndWFnZSA9IGRlZmF1bHRMYW5ndWFnZTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JJbml0TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwTGFuZ3VhZ2UgfHwgdGhpcy5pbml0TGFuZ3VhZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcERhdGFMYW5ndWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy5kYXRhTGFuZ3VhZ2VzID8/IFsnZW4nXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcERhdGFMYW5ndWFnZURlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcERhdGFMYW5ndWFnZXNbMF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhcHBEYXRhTGFuZ3VhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGRhdGFMYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YUxhbmcnKTtcbiAgICAgICAgaWYgKGRhdGFMYW5nICYmIHRoaXMuYXBwRGF0YUxhbmd1YWdlcy5zb21lKGRsID0+IGRsID09PSBkYXRhTGFuZykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhTGFuZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGF0YUxhbmd1YWdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYXBwRGF0YUxhbmd1YWdlKGRhdGFMYW5ndWFnZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBpZiAoZGF0YUxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdkYXRhTGFuZycpO1xuICAgICAgICAgICAgdGhpcy5kYXRhTGFuZ3VhZ2VTdWJqZWN0Lm5leHQoZGF0YUxhbmd1YWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcHBEYXRhTGFuZ3VhZ2VzLnNvbWUoZGwgPT4gZGwgPT09IGRhdGFMYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RhdGFMYW5nJywgZGF0YUxhbmd1YWdlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlU3ViamVjdC5uZXh0KGRhdGFMYW5ndWFnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcERhdGFMYW5ndWFnZSQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFMYW5ndWFnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBhc3N1bWUsIHRoYXQgZGVmYXVsdCBkYXRhIGxhbmd1YWdlIGlzIHRoZSBmaXJzdCBvbmUgZnJvbSB0aGUgYXJyYXkgb2YgYWxsIGF2YWlsYWJsZSBkYXRhIGxhbmd1YWdlc1xuICAgIHB1YmxpYyBnZXQgZGVmYXVsdERhdGFMYW5ndWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwRGF0YUxhbmd1YWdlc1swXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcFZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNvbmZpZz8uYXBwPy52ZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIE1FTlUgc2VjdGlvblxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU3RhdGljKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGUgPT09ICdzdGF0aWMnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc1N0YXRpYyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZVN1YmplY3QucGlwZShtYXAoZSA9PiBlID09PSAnc3RhdGljJykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc092ZXJsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZSA9PT0gJ292ZXJsYXknO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudU1vZGVJc092ZXJsYXkkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGVTdWJqZWN0LnBpcGUobWFwKGUgPT4gZSA9PT0gJ292ZXJsYXknKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU2xpbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlID09PSAnc2xpbSc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtZW51TW9kZUlzU2xpbSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51TW9kZVN1YmplY3QucGlwZShtYXAoZSA9PiBlID09PSAnc2xpbScpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTaWRlYmFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudU1vZGUgPT09ICdzaWRlYmFyJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVNb2RlSXNTaWRlYmFyJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVNb2RlU3ViamVjdC5waXBlKG1hcChlID0+IGUgPT09ICdzaWRlYmFyJykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudUFjdGl2ZUtleSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVBY3RpdmVLZXlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudVJlc2V0JCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWVudVJlc2V0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG1lbnVJdGVtcyhtZW51SXRlbXM6IE1uZ01lbnVJdGVtW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fbWVudUl0ZW1zID0gbWVudUl0ZW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVudVBpbkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51UGluRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1lbnVTaWRlYmFyU2xpbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVTaWRlYmFyU2xpbTtcbiAgICB9XG5cbiAgICAvLyBCUkVBRENSVU1CIHNlY3Rpb25cbiAgICBwdWJsaWMgZ2V0IGJyZWFkY3J1bWJIb21lJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJlYWRjcnVtYkhvbWVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnJlYWRjcnVtYnMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5icmVhZGNydW1ic1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gVklTVUFMIHNlY3Rpb25cblxuICAgIHB1YmxpYyBnZXQgY29sb3JTY2hlbWVJc0xpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sb3JTY2hlbWUgPT09ICdsaWdodCc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2xvclNjaGVtZUlzRGFyaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yU2NoZW1lID09PSAnZGFyayc7XG4gICAgfVxuXG4gICAgLy8gVVNFUiBzZWN0aW9uXG5cbiAgICBwdWJsaWMgZ2V0IHVzZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdXNlcih1c2VyOiBJVXNlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl91c2VyID0gdXNlcjtcbiAgICAgICAgdGhpcy51c2VyU3ViamVjdC5uZXh0KHVzZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlciQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXNlclJvbGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclJvbGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdXNlclJvbGVzKHJvbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuX3VzZXJSb2xlcyA9IHJvbGVzO1xuICAgICAgICB0aGlzLnVzZXJSb2xlc1N1YmplY3QubmV4dChyb2xlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1c2VyUm9sZXMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyUm9sZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIEFDVElPTlMgc2VjdGlvblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uc0RlYnVnSW5zdGFuY2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVDb25maWcuYWN0aW9ucz8uZGVidWdJbnN0YW5jZXMgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9tZW51TW9kZSA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5tb2RlID8/ICdzaWRlYmFyJztcbiAgICAgICAgdGhpcy5fbWVudU1vZGVTdWJqZWN0Lm5leHQodGhpcy5fbWVudU1vZGUpO1xuICAgICAgICB0aGlzLl9tZW51SXRlbXMgPSB0aGlzLm1vZHVsZUNvbmZpZz8ubWVudT8ubWVudUl0ZW1zO1xuICAgICAgICB0aGlzLl9tZW51UGluRW5hYmxlZCA9IHRoaXMubW9kdWxlQ29uZmlnPy5tZW51Py5waW5FbmFibGVkID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9tZW51U2lkZWJhclNsaW0gPSB0aGlzLm1vZHVsZUNvbmZpZz8ubWVudT8uc2lkZWJhclNsaW0gPz8gZmFsc2U7XG5cbiAgICAgICAgLy8gdmlzdWFsXG4gICAgICAgIHRoaXMuX2NvbG9yU2NoZW1lID0gdGhpcy5tb2R1bGVDb25maWc/LmFwcD8uY29sb3JTY2hlbWUgPz8gJ2xpZ2h0JztcblxuICAgICAgICAvLyByaXBwbGVcbiAgICAgICAgdGhpcy5wcmltZW5nQ29uZmlnLnJpcHBsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJpbWVuZ0NvbmZpZy5maWx0ZXJNYXRjaE1vZGVPcHRpb25zID0ge1xuICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIEZpbHRlck1hdGNoTW9kZUVudW0uQ29udGFpbnMsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5FcXVhbHMsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5Ob3RFcXVhbHMsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5TdGFydHNXaXRoLFxuICAgICAgICAgICAgICAgIEZpbHRlck1hdGNoTW9kZUVudW0uRW5kc1dpdGgsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5FeGlzdHMsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5Eb2VzTm90RXhpc3RcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBudW1lcmljOiBbXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5FcXVhbHMsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5Ob3RFcXVhbHMsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5MZXNzVGhhbixcbiAgICAgICAgICAgICAgICBGaWx0ZXJNYXRjaE1vZGVFbnVtLkdyZWF0ZXJUaGFuLFxuICAgICAgICAgICAgICAgIEZpbHRlck1hdGNoTW9kZUVudW0uRXhpc3RzLFxuICAgICAgICAgICAgICAgIEZpbHRlck1hdGNoTW9kZUVudW0uRG9lc05vdEV4aXN0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGF0ZTogW1xuICAgICAgICAgICAgICAgIEZpbHRlck1hdGNoTW9kZUVudW0uRGF0ZUlzLFxuICAgICAgICAgICAgICAgIEZpbHRlck1hdGNoTW9kZUVudW0uRGF0ZUJlZm9yZSxcbiAgICAgICAgICAgICAgICBGaWx0ZXJNYXRjaE1vZGVFbnVtLkRhdGVBZnRlcixcbiAgICAgICAgICAgICAgICBGaWx0ZXJNYXRjaE1vZGVFbnVtLkJldHdlZW4sXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5FeGlzdHMsXG4gICAgICAgICAgICAgICAgRmlsdGVyTWF0Y2hNb2RlRW51bS5Eb2VzTm90RXhpc3RcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyB0cmFuc2xhdGVcbiAgICAgICAgdGhpcy50cmFuc2xhdGUubGFuZ3MgPSB0aGlzLmFwcExhbmd1YWdlcztcbiAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMuZ2V0T3JJbml0TGFuZ3VhZ2UoKTtcblxuICAgICAgICB0aGlzLmxhbmd1YWdlU3ViamVjdC5uZXh0KGxhbmcpO1xuICAgICAgICB0aGlzLmRhdGFMYW5ndWFnZVN1YmplY3QubmV4dCh0aGlzLmFwcERhdGFMYW5ndWFnZSk7XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ21uZ1ByaW1lJykuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMucHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih2YWx1ZSkpO1xuXG4gICAgICAgIHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIHRoZSBOYXZpZ2F0aW9uRW5kIGV2ZW50cyBhcyB0aGUgYnJlYWRjcnVtYiBpcyB1cGRhdGVkIG9ubHkgd2hlbiB0aGUgcm91dGUgcmVhY2hlcyBpdHMgZW5kXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2VUaXRsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlTGFuZ0NoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVMYW5nQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2VUaXRsZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXJpYWxpemF0aW9uXG4gICAgICAgIE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuY29uZmlndXJlKHsuLi4odGhpcy5tb2R1bGVDb25maWc/LnNlcmlhbGl6YXRpb24gPz8ge30pfSk7XG4gICAgICAgIE1lZGl1c1Jlc3RVdGlsLmdldCgpLmNvbmZpZ3VyZSh7XG4gICAgICAgICAgICAuLi4odGhpcy5tb2R1bGVDb25maWc/LnNlcmlhbGl6YXRpb24gPz8ge30pLFxuICAgICAgICAgICAgZGF0ZU9ubHlEaXNhYmxlZDogdGhpcy5tb2R1bGVDb25maWcuc2VyaWFsaXphdGlvbj8uZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1Jlc2V0Jyk7XG4gICAgfVxuXG4gICAgLy8gTUVOVSBhY3Rpb25zXG5cbiAgICBtZW51Q2hhbmdlQWN0aXZlS2V5KGtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lbnVBY3RpdmVLZXlTdWJqZWN0Lm5leHQoa2V5KTtcbiAgICB9XG5cbiAgICBtZW51UmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX21lbnVSZXNldFN1YmplY3QubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICAvLyBCUkVBRENSVU1CIGFjdGlvbnNcbiAgICBwdWJsaWMgZmluZEJyZWFkY3J1bWJJdGVtKGl0ZW06IE1uZ01lbnVJdGVtKTogTW5nTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmJyZWFkY3J1bWJzU3ViamVjdC52YWx1ZTtcbiAgICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5pZCAmJiBpLmlkID09PSBpdGVtLmlkKSA/PyBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyTGlua1N0ciA9IEFycmF5LmlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluay5qb2luKCcvJykgOiBpdGVtLnJvdXRlckxpbms7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkucm91dGVyTGluayAmJiAoQXJyYXkuaXNBcnJheShpLnJvdXRlckxpbmspID8gaS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGkucm91dGVyTGluaykgPT09IHJvdXRlckxpbmtTdHIpID8/IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5wb3NpdGlvbkluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkucG9zaXRpb25JbmRleCAmJiBpLnBvc2l0aW9uSW5kZXggPT09IGkucG9zaXRpb25JbmRleCkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZChpID0+IGkubGFiZWwgJiYgaS5sYWJlbCA9PT0gaS5sYWJlbCkgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKGkgPT4gaS5pY29uICYmIGkuaWNvbiA9PT0gaS5pY29uKSA/PyBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVCcmVhZGNydW1iSXRlbShpdGVtOiBNbmdNZW51SXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmJyZWFkY3J1bWJzU3ViamVjdC52YWx1ZV07XG4gICAgICAgIGxldCBwb3NJZHggPSAtMTtcbiAgICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkuaWQgJiYgaS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXJMaW5rU3RyID0gQXJyYXkuaXNBcnJheShpdGVtLnJvdXRlckxpbmspID8gaXRlbS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGl0ZW0ucm91dGVyTGluaztcbiAgICAgICAgICAgIHBvc0lkeCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkucm91dGVyTGluayAmJiAoQXJyYXkuaXNBcnJheShpLnJvdXRlckxpbmspID8gaS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGkucm91dGVyTGluaykgPT09IHJvdXRlckxpbmtTdHIpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucG9zaXRpb25JbmRleCkge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5wb3NpdGlvbkluZGV4ICYmIGkucG9zaXRpb25JbmRleCA9PT0gaS5wb3NpdGlvbkluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICBwb3NJZHggPSBpdGVtcy5maW5kSW5kZXgoaSA9PiBpLmxhYmVsICYmIGkubGFiZWwgPT09IGkubGFiZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICAgICAgcG9zSWR4ID0gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5pY29uICYmIGkuaWNvbiA9PT0gaS5pY29uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NJZHggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtc1twb3NJZHhdID0ge1xuICAgICAgICAgICAgLi4uaXRlbXNbcG9zSWR4XSxcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB1cGRhdGVkOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5icmVhZGNydW1ic1N1YmplY3QubmV4dChpdGVtcyk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCcmVhZGNydW1icygpIHtcbiAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYnNUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVUcmFuc2xhdGVTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb290Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuXG4gICAgICAgIGNvbnN0IGhvbWVCcmVhZGNydW1iID0gdGhpcy5nZW5lcmF0ZUhvbWVCcmVhZGNydW1iKHJvb3RSb3V0ZSk7XG4gICAgICAgIGlmIChob21lQnJlYWRjcnVtYikge1xuICAgICAgICAgICAgaWYgKGhvbWVCcmVhZGNydW1iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iSG9tZVRyYW5zbGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlLmdldChob21lQnJlYWRjcnVtYi5sYWJlbCkuc3Vic2NyaWJlKGkxOG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBob21lQnJlYWRjcnVtYi5sYWJlbCA9IGkxOG47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkhvbWVTdWJqZWN0Lm5leHQoaG9tZUJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJIb21lU3ViamVjdC5uZXh0KGhvbWVCcmVhZGNydW1iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzOiBNbmdNZW51SXRlbVtdID0gW107XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVCcmVhZGNydW1icyhyb290Um91dGUsIFtdLCBicmVhZGNydW1icyk7XG5cbiAgICAgICAgYnJlYWRjcnVtYnMuZm9yRWFjaCgoYiwgaWR4KSA9PiB7XG4gICAgICAgICAgICBiLnBvc2l0aW9uSW5kZXggPSBpZHg7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGkxOG5LZXlzOiBBcnJheTxzdHJpbmc+ID0gYnJlYWRjcnVtYnMuZmlsdGVyKGIgPT4gdHlwZW9mIGIubGFiZWwgPT09ICdzdHJpbmcnKS5tYXAoYiA9PiBiLmxhYmVsISk7XG4gICAgICAgIGlmIChpMThuS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzVHJhbnNsYXRlU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGUuZ2V0KGkxOG5LZXlzKS5zdWJzY3JpYmUoaTE4biA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBicmVhZGNydW1iIGhpZXJhcmNoeVxuICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLmZvckVhY2goYiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiLmxhYmVsICYmIGkxOG5bYi5sYWJlbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGIubGFiZWwgPSBpMThuW2IubGFiZWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXcgYnJlYWRjcnVtYnNcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzU3ViamVjdC5uZXh0KGJyZWFkY3J1bWJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1N1YmplY3QubmV4dChicmVhZGNydW1icyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlSG9tZUJyZWFkY3J1bWIocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsKTogTW5nTWVudUl0ZW0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFyb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSByb3V0ZS5kYXRhIGFzIE1uZ1JvdXRlckRhdGE7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJSb3V0ZURhdGEgPSByb3V0ZURhdGE/LmJyZWFkY3J1bWI7XG4gICAgICAgIGlmIChicmVhZGNydW1iUm91dGVEYXRhICYmIHR5cGVvZiBicmVhZGNydW1iUm91dGVEYXRhID09PSAnb2JqZWN0JyAmJiAnaXNIb21lJyBpbiBicmVhZGNydW1iUm91dGVEYXRhKSB7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYlJvdXRlRGF0YS5pc0hvbWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKCcvJywgYnJlYWRjcnVtYlJvdXRlRGF0YSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJlYWRjcnVtYi5pY29uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1iLmljb24gPSAncGkgcGktaG9tZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBicmVhZGNydW1iO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVIb21lQnJlYWRjcnVtYihyb3V0ZS5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlQnJlYWRjcnVtYnMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsLCBwYXJlbnRVcmxTZWdtZW50czogc3RyaW5nW10sIGJyZWFkY3J1bWJzOiBNbmdNZW51SXRlbVtdKSB7XG4gICAgICAgIGlmICghcm91dGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHJvdXRlLmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgY29uc3Qgcm91dGVVcmxTZWdtZW50cyA9IHBhcmVudFVybFNlZ21lbnRzLmNvbmNhdChyb3V0ZS51cmwubWFwKHVybCA9PiB1cmwucGF0aCkpO1xuICAgICAgICBjb25zdCByb3V0ZVVybCA9IGAvJHtyb3V0ZVVybFNlZ21lbnRzLmpvaW4oJy8nKX1gO1xuICAgICAgICBpZiAocm91dGVEYXRhPy5icmVhZGNydW1iKSB7XG4gICAgICAgICAgICBjb25zdCBicmVhZGNydW1iUm91dGVEYXRhID0gcm91dGVEYXRhLmJyZWFkY3J1bWI7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWJSb3V0ZURhdGEpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBicmVhZGNydW1iUm91dGVEYXRhSXRlbSBvZiBicmVhZGNydW1iUm91dGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB0aGlzLmNyZWF0ZUJyZWFkY3J1bWIocm91dGVVcmwsIGJyZWFkY3J1bWJSb3V0ZURhdGFJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2goYnJlYWRjcnVtYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVhZGNydW1iUm91dGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCguLi5icmVhZGNydW1iUm91dGVEYXRhKHJvdXRlVXJsLCByb3V0ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gdGhpcy5jcmVhdGVCcmVhZGNydW1iKHJvdXRlVXJsLCBicmVhZGNydW1iUm91dGVEYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKGJyZWFkY3J1bWIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdlbmVyYXRlQnJlYWRjcnVtYnMocm91dGUuZmlyc3RDaGlsZCwgcm91dGVVcmxTZWdtZW50cywgYnJlYWRjcnVtYnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQnJlYWRjcnVtYihyb3V0ZVVybDogc3RyaW5nLCByb3V0ZUJyZWFkY3J1bWI6IHN0cmluZyB8IE1uZ0JyZWFkY3J1bWJNZW51SXRlbSwgaW5jbHVkZUhvbWUgPSBmYWxzZSk6IE1uZ01lbnVJdGVtIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQnJlYWRjcnVtYiA9IHRoaXMuZmluZEJyZWFkY3J1bWJJdGVtKHtyb3V0ZXJMaW5rOiByb3V0ZVVybH0pO1xuICAgICAgICBpZiAoZXhpc3RpbmdCcmVhZGNydW1iPy51cGRhdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCcmVhZGNydW1iO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91dGVCcmVhZGNydW1iID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHVwZGF0ZWQgZXhpc3RpbmcgYnJlYWRjcnVtYlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogcm91dGVVcmwsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHJvdXRlQnJlYWRjcnVtYixcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiByb3V0ZVVybFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaW5jbHVkZUhvbWUgJiYgdHlwZW9mIHJvdXRlQnJlYWRjcnVtYi5pc0hvbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgLy8gaG9tZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlQnJlYWRjcnVtYi5yb3V0ZXJMaW5rID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJvdXRlQnJlYWRjcnVtYi5yb3V0ZXJMaW5rID0gcm91dGVVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3V0ZUJyZWFkY3J1bWIuaWQgPSByb3V0ZVVybDtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZUJyZWFkY3J1bWI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUSVRMRSBzZWN0aW9uXG5cbiAgICBwdWJsaWMgc2V0UGFnZVRpdGxlKHRpdGxlPzogc3RyaW5nKSB7XG4gICAgICAgIGxldCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290O1xuICAgICAgICB3aGlsZSAoY3VycmVudFJvdXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSb3V0ZSA9IGN1cnJlbnRSb3V0ZS5maXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gY3VycmVudFJvdXRlLmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgY29uc3QgcGFnZVRpdGxlID0gdGl0bGUgPz8gcm91dGVEYXRhLnBhZ2VUaXRsZTtcblxuICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aGlzLmZvcm1hdFBhZ2VUaXRsZShwYWdlVGl0bGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdFBhZ2VUaXRsZSh0aXRsZVByZWZpeD86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aXRsZVBpZWNlcyA9IFtdO1xuXG4gICAgICAgIGlmICh0aXRsZVByZWZpeCkge1xuICAgICAgICAgICAgdGl0bGVQaWVjZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRpdGxlUHJlZml4KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aXRsZVBpZWNlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FwcC5uYW1lJykpO1xuXG4gICAgICAgIHJldHVybiB0aXRsZVBpZWNlcy5qb2luKCcgLSAnKTtcbiAgICB9XG59XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import { Injectable, inject } from '@angular/core';
3
- import { combineLatest, mergeMap, of } from 'rxjs';
4
- import { map } from 'rxjs/operators';
3
+ import { ReplaySubject, Subject, combineLatest, mergeMap, of, take, throwError } from 'rxjs';
4
+ import { catchError, map } from 'rxjs/operators';
5
5
  import { MngCommonsService, MngConfigurationService, MngLoggerService, MngRouterService } from '../';
6
+ import { MngCommonsInitEventEnum } from '../../models';
6
7
  import { MNG_COMMONS_INITIALIZER_IT, MNG_LOG_PUBLISHERS, MNG_MODULE_CONFIG_IT } from '../tokens';
7
8
  import * as i0 from "@angular/core";
8
9
  export class MngCommonsInitService {
@@ -16,6 +17,14 @@ export class MngCommonsInitService {
16
17
  this.moduleConfig = inject(MNG_MODULE_CONFIG_IT, { optional: true });
17
18
  this.commonsInitializers = inject(MNG_COMMONS_INITIALIZER_IT, { optional: true });
18
19
  this.isInitialized = false;
20
+ this.isInitializedSubject = new ReplaySubject();
21
+ this.commonsInitServiceEvents = new Subject();
22
+ }
23
+ get events$() {
24
+ return this.commonsInitServiceEvents.asObservable();
25
+ }
26
+ get isInitialized$() {
27
+ return this.isInitializedSubject.asObservable().pipe(take(1));
19
28
  }
20
29
  initialize() {
21
30
  if (this.isInitialized) {
@@ -25,13 +34,16 @@ export class MngCommonsInitService {
25
34
  MngLoggerService.configure({ timestampFormat: this.moduleConfig?.log?.timestampFormat });
26
35
  const ctxLogger = this.logger.create('MngCommonsInitService');
27
36
  ctxLogger.debug('Commons initialization is starting');
37
+ this.commonsInitServiceEvents.next(MngCommonsInitEventEnum.CommonsInitStart);
28
38
  // init router
29
39
  this.mngRouter.initialize();
30
40
  // init configurations with settings from module config
31
41
  this.config.init(this.httpClient, this.logger);
32
42
  this.config.addModuleConfigSource(this.moduleConfig ?? undefined);
43
+ this.commonsInitServiceEvents.next(MngCommonsInitEventEnum.ConfigSourceModuleLoaded);
33
44
  if (this.moduleConfig?.configuration?.projectEnvironment) {
34
45
  this.config.addEnvironmentSource(this.moduleConfig.configuration.projectEnvironment);
46
+ this.commonsInitServiceEvents.next(MngCommonsInitEventEnum.ConfigSourceProjectEnvLoaded);
35
47
  }
36
48
  // init configurations with settings from module config for json source
37
49
  if (!(this.moduleConfig?.configuration?.skipJsonSourceInit ?? false)) {
@@ -46,8 +58,12 @@ export class MngCommonsInitService {
46
58
  else {
47
59
  this.config.addJsonSource({ url: jsonSource, enableEnvProd: jsonSourceEnableEnvProd });
48
60
  }
61
+ this.commonsInitServiceEvents.next(MngCommonsInitEventEnum.ConfigSourceJsonAdded);
49
62
  }
50
63
  return this.config.loadJsonConfigurations().pipe(mergeMap(() => {
64
+ if (!(this.moduleConfig?.configuration?.skipJsonSourceInit ?? false)) {
65
+ this.commonsInitServiceEvents.next(MngCommonsInitEventEnum.ConfigSourceJsonLoaded);
66
+ }
51
67
  // init logger
52
68
  MngLoggerService.init(this.config, this.logPublishers ?? []);
53
69
  if (this.commonsInitializers) {
@@ -59,7 +75,16 @@ export class MngCommonsInitService {
59
75
  }
60
76
  }), map(() => {
61
77
  ctxLogger.debug('Commons initialization is finished');
78
+ this.commonsInitServiceEvents.next(MngCommonsInitEventEnum.CommonsInitEnd);
79
+ this.commonsInitServiceEvents.complete();
80
+ this.isInitializedSubject.next(true);
62
81
  return this.mngCommons.reset();
82
+ }), catchError(err => {
83
+ ctxLogger.warn('Commons initialization failed with error', err);
84
+ this.commonsInitServiceEvents.next(MngCommonsInitEventEnum.CommonsInitError);
85
+ this.commonsInitServiceEvents.complete();
86
+ this.isInitializedSubject.next(false);
87
+ return throwError(() => err);
63
88
  }));
64
89
  }
65
90
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: MngCommonsInitService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -71,4 +96,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
71
96
  providedIn: 'root'
72
97
  }]
73
98
  }] });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ludGVybmFsL2NvbW1vbnMtaW5pdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQWEsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLEtBQUssQ0FBQztBQUNuRyxPQUFPLEVBQUMsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBSy9GLE1BQU0sT0FBTyxxQkFBcUI7SUFIbEM7UUFJcUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUM3RCxXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDekMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzlELHdCQUFtQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRXBGLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0tBc0RqQztJQXBEVSxVQUFVO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQztRQUV2RixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzlELFNBQVMsQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUV0RCxjQUFjO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU1Qix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUU7WUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ3hGO1FBRUQsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2xFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsdUJBQXVCLElBQUksS0FBSyxDQUFDO1lBQ25HLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUMsYUFBYSxFQUFFLHVCQUF1QixFQUFDLENBQUMsQ0FBQzthQUN2RTtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2xDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xIO2lCQUFNO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUMsQ0FBQyxDQUFDO2FBQ3hGO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQzVDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDVixjQUFjO1lBQ2QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUU3RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUM5RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3hGO2lCQUFNO2dCQUNILE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUN0RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OEdBL0RRLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRmxCLE1BQU07OzJGQUVULHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0YWJsZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBtZXJnZU1hcCwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtNbmdDb21tb25zU2VydmljZSwgTW5nQ29uZmlndXJhdGlvblNlcnZpY2UsIE1uZ0xvZ2dlclNlcnZpY2UsIE1uZ1JvdXRlclNlcnZpY2V9IGZyb20gJy4uLyc7XG5pbXBvcnQge01OR19DT01NT05TX0lOSVRJQUxJWkVSX0lULCBNTkdfTE9HX1BVQkxJU0hFUlMsIE1OR19NT0RVTEVfQ09ORklHX0lUfSBmcm9tICcuLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0NvbW1vbnNJbml0U2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KE1uZ0xvZ2dlclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nUHVibGlzaGVycyA9IGluamVjdChNTkdfTE9HX1BVQkxJU0hFUlMsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KE1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1uZ0NvbW1vbnMgPSBpbmplY3QoTW5nQ29tbW9uc1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbW5nUm91dGVyID0gaW5qZWN0KE1uZ1JvdXRlclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlQ29uZmlnID0gaW5qZWN0KE1OR19NT0RVTEVfQ09ORklHX0lULCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNJbml0aWFsaXplcnMgPSBpbmplY3QoTU5HX0NPTU1PTlNfSU5JVElBTElaRVJfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLmNvbmZpZ3VyZSh7dGltZXN0YW1wRm9ybWF0OiB0aGlzLm1vZHVsZUNvbmZpZz8ubG9nPy50aW1lc3RhbXBGb3JtYXR9KTtcblxuICAgICAgICBjb25zdCBjdHhMb2dnZXIgPSB0aGlzLmxvZ2dlci5jcmVhdGUoJ01uZ0NvbW1vbnNJbml0U2VydmljZScpO1xuICAgICAgICBjdHhMb2dnZXIuZGVidWcoJ0NvbW1vbnMgaW5pdGlhbGl6YXRpb24gaXMgc3RhcnRpbmcnKTtcblxuICAgICAgICAvLyBpbml0IHJvdXRlclxuICAgICAgICB0aGlzLm1uZ1JvdXRlci5pbml0aWFsaXplKCk7XG5cbiAgICAgICAgLy8gaW5pdCBjb25maWd1cmF0aW9ucyB3aXRoIHNldHRpbmdzIGZyb20gbW9kdWxlIGNvbmZpZ1xuICAgICAgICB0aGlzLmNvbmZpZy5pbml0KHRoaXMuaHR0cENsaWVudCwgdGhpcy5sb2dnZXIpO1xuICAgICAgICB0aGlzLmNvbmZpZy5hZGRNb2R1bGVDb25maWdTb3VyY2UodGhpcy5tb2R1bGVDb25maWcgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5wcm9qZWN0RW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZEVudmlyb25tZW50U291cmNlKHRoaXMubW9kdWxlQ29uZmlnLmNvbmZpZ3VyYXRpb24ucHJvamVjdEVudmlyb25tZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluaXQgY29uZmlndXJhdGlvbnMgd2l0aCBzZXR0aW5ncyBmcm9tIG1vZHVsZSBjb25maWcgZm9yIGpzb24gc291cmNlXG4gICAgICAgIGlmICghKHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5za2lwSnNvblNvdXJjZUluaXQgPz8gZmFsc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uU291cmNlRW5hYmxlRW52UHJvZCA9IHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5qc29uU291cmNlRW5hYmxlRW52UHJvZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25Tb3VyY2UgPSB0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uanNvblNvdXJjZTtcbiAgICAgICAgICAgIGlmICghanNvblNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZEpzb25Tb3VyY2Uoe2VuYWJsZUVudlByb2Q6IGpzb25Tb3VyY2VFbmFibGVFbnZQcm9kfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoanNvblNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICBqc29uU291cmNlLmZvckVhY2goc291cmNlID0+IHRoaXMuY29uZmlnLmFkZEpzb25Tb3VyY2Uoe3VybDogc291cmNlLCBlbmFibGVFbnZQcm9kOiBqc29uU291cmNlRW5hYmxlRW52UHJvZH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYWRkSnNvblNvdXJjZSh7dXJsOiBqc29uU291cmNlLCBlbmFibGVFbnZQcm9kOiBqc29uU291cmNlRW5hYmxlRW52UHJvZH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmxvYWRKc29uQ29uZmlndXJhdGlvbnMoKS5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGluaXQgbG9nZ2VyXG4gICAgICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5pbml0KHRoaXMuY29uZmlnLCB0aGlzLmxvZ1B1Ymxpc2hlcnMgPz8gW10pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uc0luaXRpYWxpemVycykge1xuICAgICAgICAgICAgICAgICAgICBjdHhMb2dnZXIuZGVidWcoJ1Byb2plY3QgaW5pdGlhbGl6ZXJzIGFyZSBiZWluZyBpbml0aWFsaXplZCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh0aGlzLmNvbW1vbnNJbml0aWFsaXplcnMubWFwKGNpID0+IGNpKCkpKS5waXBlKG1hcChyZXMgPT4gcmVzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHhMb2dnZXIuZGVidWcoJ0NvbW1vbnMgaW5pdGlhbGl6YXRpb24gaXMgZmluaXNoZWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tbmdDb21tb25zLnJlc2V0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy1pbml0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ludGVybmFsL2NvbW1vbnMtaW5pdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQWEsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sS0FBSyxDQUFDO0FBQ25HLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNyRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBSy9GLE1BQU0sT0FBTyxxQkFBcUI7SUFIbEM7UUFJcUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUM3RCxXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDekMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxNQUFNLENBQUMs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QUFFO1lBQ0wsU0FBUyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOzhHQTNGUSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZsQixNQUFNOzsyRkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWVyZ2VNYXAsIG9mLCB0YWtlLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW5nQ29tbW9uc1NlcnZpY2UsIE1uZ0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBNbmdMb2dnZXJTZXJ2aWNlLCBNbmdSb3V0ZXJTZXJ2aWNlfSBmcm9tICcuLi8nO1xuaW1wb3J0IHtNbmdDb21tb25zSW5pdEV2ZW50RW51bX0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TU5HX0NPTU1PTlNfSU5JVElBTElaRVJfSVQsIE1OR19MT0dfUFVCTElTSEVSUywgTU5HX01PRFVMRV9DT05GSUdfSVR9IGZyb20gJy4uL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW5nQ29tbW9uc0luaXRTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dQdWJsaXNoZXJzID0gaW5qZWN0KE1OR19MT0dfUFVCTElTSEVSUywge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoTW5nQ29uZmlndXJhdGlvblNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbW5nQ29tbW9ucyA9IGluamVjdChNbmdDb21tb25zU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtbmdSb3V0ZXIgPSBpbmplY3QoTW5nUm91dGVyU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVDb25maWcgPSBpbmplY3QoTU5HX01PRFVMRV9DT05GSUdfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9uc0luaXRpYWxpemVycyA9IGluamVjdChNTkdfQ09NTU9OU19JTklUSUFMSVpFUl9JVCwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgaXNJbml0aWFsaXplZFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzID0gbmV3IFN1YmplY3Q8TW5nQ29tbW9uc0luaXRFdmVudEVudW0+KCk7XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZW50cyQoKTogT2JzZXJ2YWJsZTxNbmdDb21tb25zSW5pdEV2ZW50RW51bT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbml0aWFsaXplZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlKDEpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLmNvbmZpZ3VyZSh7dGltZXN0YW1wRm9ybWF0OiB0aGlzLm1vZHVsZUNvbmZpZz8ubG9nPy50aW1lc3RhbXBGb3JtYXR9KTtcblxuICAgICAgICBjb25zdCBjdHhMb2dnZXIgPSB0aGlzLmxvZ2dlci5jcmVhdGUoJ01uZ0NvbW1vbnNJbml0U2VydmljZScpO1xuICAgICAgICBjdHhMb2dnZXIuZGVidWcoJ0NvbW1vbnMgaW5pdGlhbGl6YXRpb24gaXMgc3RhcnRpbmcnKTtcbiAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChNbmdDb21tb25zSW5pdEV2ZW50RW51bS5Db21tb25zSW5pdFN0YXJ0KTtcblxuICAgICAgICAvLyBpbml0IHJvdXRlclxuICAgICAgICB0aGlzLm1uZ1JvdXRlci5pbml0aWFsaXplKCk7XG5cbiAgICAgICAgLy8gaW5pdCBjb25maWd1cmF0aW9ucyB3aXRoIHNldHRpbmdzIGZyb20gbW9kdWxlIGNvbmZpZ1xuICAgICAgICB0aGlzLmNvbmZpZy5pbml0KHRoaXMuaHR0cENsaWVudCwgdGhpcy5sb2dnZXIpO1xuICAgICAgICB0aGlzLmNvbmZpZy5hZGRNb2R1bGVDb25maWdTb3VyY2UodGhpcy5tb2R1bGVDb25maWcgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChNbmdDb21tb25zSW5pdEV2ZW50RW51bS5Db25maWdTb3VyY2VNb2R1bGVMb2FkZWQpO1xuICAgICAgICBpZiAodGhpcy5tb2R1bGVDb25maWc/LmNvbmZpZ3VyYXRpb24/LnByb2plY3RFbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWcuYWRkRW52aXJvbm1lbnRTb3VyY2UodGhpcy5tb2R1bGVDb25maWcuY29uZmlndXJhdGlvbi5wcm9qZWN0RW52aXJvbm1lbnQpO1xuICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChNbmdDb21tb25zSW5pdEV2ZW50RW51bS5Db25maWdTb3VyY2VQcm9qZWN0RW52TG9hZGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluaXQgY29uZmlndXJhdGlvbnMgd2l0aCBzZXR0aW5ncyBmcm9tIG1vZHVsZSBjb25maWcgZm9yIGpzb24gc291cmNlXG4gICAgICAgIGlmICghKHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5za2lwSnNvblNvdXJjZUluaXQgPz8gZmFsc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uU291cmNlRW5hYmxlRW52UHJvZCA9IHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5qc29uU291cmNlRW5hYmxlRW52UHJvZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25Tb3VyY2UgPSB0aGlzLm1vZHVsZUNvbmZpZz8uY29uZmlndXJhdGlvbj8uanNvblNvdXJjZTtcbiAgICAgICAgICAgIGlmICghanNvblNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmFkZEpzb25Tb3VyY2Uoe2VuYWJsZUVudlByb2Q6IGpzb25Tb3VyY2VFbmFibGVFbnZQcm9kfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoanNvblNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICBqc29uU291cmNlLmZvckVhY2goc291cmNlID0+IHRoaXMuY29uZmlnLmFkZEpzb25Tb3VyY2Uoe3VybDogc291cmNlLCBlbmFibGVFbnZQcm9kOiBqc29uU291cmNlRW5hYmxlRW52UHJvZH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYWRkSnNvblNvdXJjZSh7dXJsOiBqc29uU291cmNlLCBlbmFibGVFbnZQcm9kOiBqc29uU291cmNlRW5hYmxlRW52UHJvZH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChNbmdDb21tb25zSW5pdEV2ZW50RW51bS5Db25maWdTb3VyY2VKc29uQWRkZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmxvYWRKc29uQ29uZmlndXJhdGlvbnMoKS5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghKHRoaXMubW9kdWxlQ29uZmlnPy5jb25maWd1cmF0aW9uPy5za2lwSnNvblNvdXJjZUluaXQgPz8gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uc0luaXRTZXJ2aWNlRXZlbnRzLm5leHQoTW5nQ29tbW9uc0luaXRFdmVudEVudW0uQ29uZmlnU291cmNlSnNvbkxvYWRlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGluaXQgbG9nZ2VyXG4gICAgICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5pbml0KHRoaXMuY29uZmlnLCB0aGlzLmxvZ1B1Ymxpc2hlcnMgPz8gW10pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uc0luaXRpYWxpemVycykge1xuICAgICAgICAgICAgICAgICAgICBjdHhMb2dnZXIuZGVidWcoJ1Byb2plY3QgaW5pdGlhbGl6ZXJzIGFyZSBiZWluZyBpbml0aWFsaXplZCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdCh0aGlzLmNvbW1vbnNJbml0aWFsaXplcnMubWFwKGNpID0+IGNpKCkpKS5waXBlKG1hcChyZXMgPT4gcmVzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHhMb2dnZXIuZGVidWcoJ0NvbW1vbnMgaW5pdGlhbGl6YXRpb24gaXMgZmluaXNoZWQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5uZXh0KE1uZ0NvbW1vbnNJbml0RXZlbnRFbnVtLkNvbW1vbnNJbml0RW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tbmdDb21tb25zLnJlc2V0KCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjdHhMb2dnZXIud2FybignQ29tbW9ucyBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zSW5pdFNlcnZpY2VFdmVudHMubmV4dChNbmdDb21tb25zSW5pdEV2ZW50RW51bS5Db21tb25zSW5pdEVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNJbml0U2VydmljZUV2ZW50cy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { booleanAttribute } from '@angular/core';
2
+ import { isObservable, of } from 'rxjs';
3
+ export function booleanObsAttribute(value) {
4
+ return isObservable(value) ? value : of(booleanAttribute(value));
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNpb24udXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvY29lcmNpb24udXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0MsT0FBTyxFQUFhLFlBQVksRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWM7SUFDOUMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Jvb2xlYW5BdHRyaWJ1dGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIGlzT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbk9ic0F0dHJpYnV0ZSh2YWx1ZTogdW5rbm93bik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBpc09ic2VydmFibGUodmFsdWUpID8gKHZhbHVlIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pIDogb2YoYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSkpO1xufVxuIl19
@@ -11,4 +11,5 @@ export * from './type.util';
11
11
  export * from './export.util';
12
12
  export * from './file.util';
13
13
  export * from './error.util';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24tZGF0YS1wcm92aWRlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZWRpdG9yLWZvcm1seS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vaTE4bi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IudXRpbCc7XG4iXX0=
14
+ export * from './coercion.util';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FjdGlvbi1kYXRhLXByb3ZpZGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lZGl0b3ItZm9ybWx5LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lbnVtLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9pMThuLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbm90aWZpY2F0aW9uLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmplY3QudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZXhwb3J0LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY29lcmNpb24udXRpbCc7XG4iXX0=
@@ -21,6 +21,30 @@ export class RouteUtil {
21
21
  return basePath;
22
22
  }
23
23
  }
24
+ static doesUrlMatchRouterLink(link, url) {
25
+ if (typeof url === 'string' && url.startsWith('/')) {
26
+ url = url.substring(1);
27
+ }
28
+ else if (Array.isArray(url) && url.length > 0 && url[0].startsWith('/')) {
29
+ url[0] = url[0].substring(1);
30
+ }
31
+ const routeSegments = Array.isArray(link) ? link : link.split('/');
32
+ const urlSegments = Array.isArray(url) ? url : url.split('#')[0].split('?')[0].split('/');
33
+ if (routeSegments.length > 0 && urlSegments.length > 0) {
34
+ for (let i = 0; i < routeSegments.length; i++) {
35
+ if (i < urlSegments.length) {
36
+ if (routeSegments[i] !== urlSegments[i]) {
37
+ return false;
38
+ }
39
+ }
40
+ else {
41
+ break;
42
+ }
43
+ }
44
+ return true;
45
+ }
46
+ return false;
47
+ }
24
48
  static adjustMenuLazyChildrenRouterLinks(rootMenuItem, lazyChildren) {
25
49
  return lazyChildren.map(i => {
26
50
  const childMenuItem = { ...i };
@@ -34,4 +58,4 @@ export class RouteUtil {
34
58
  });
35
59
  }
36
60
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvcm91dGUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFM0MsTUFBTSxPQUFPLFNBQVM7SUFDWCxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBbUI7UUFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQXVCLEVBQUUsSUFBbUI7UUFDM0UsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQyxtQ0FBbUM7Z0JBQ25DLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBQyxDQUFDLENBQUM7YUFDNUU7aUJBQU07Z0JBQ0gsT0FBTyxTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDcEU7U0FDSjthQUFNO1lBQ0gsT0FBTyxRQUFRLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLGlDQUFpQyxDQUFDLFlBQXNCLEVBQUUsWUFBNkI7UUFDakcsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sYUFBYSxHQUFHLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQztZQUM3QixJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLGFBQWEsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUNyRCxZQUFZLENBQUMsVUFBVSxFQUN2QixPQUFPLGFBQWEsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDdkcsQ0FBQzthQUNMO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDcEMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuRztZQUNELE9BQU8sYUFBYSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge01uZ0ludGVybmFsRXJyb3J9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZVV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlRW1wdHlQYXRoU2VnbWVudHMocGF0aDogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZFBhdGggPSBwYXRoLmZpbHRlcihwcyA9PiB0eXBlb2YgcHMgPT09ICdzdHJpbmcnICYmIHBzLmxlbmd0aCA+IDApO1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRQYXRoLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZFBhdGggOiBbJyddO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXBwZW5kUGF0aFRvQmFzZVBhdGgoYmFzZVBhdGg6IEFycmF5PHN0cmluZz4sIHBhdGg6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhdGhbMF0uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhbMF0uc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG11bHRpIHVwcGVyIGZvbGRlclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnLCB7bmFtZTogJ1JvdXRlVXRpbHNFcnJvcid9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJvdXRlVXRpbC5yZW1vdmVFbXB0eVBhdGhTZWdtZW50cyhbLi4uYmFzZVBhdGgsIC4uLnBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRqdXN0TWVudUxhenlDaGlsZHJlblJvdXRlckxpbmtzKHJvb3RNZW51SXRlbTogTWVudUl0ZW0sIGxhenlDaGlsZHJlbjogQXJyYXk8TWVudUl0ZW0+KSB7XG4gICAgICAgIHJldHVybiBsYXp5Q2hpbGRyZW4ubWFwKGkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRNZW51SXRlbSA9IHsuLi5pfTtcbiAgICAgICAgICAgIGlmIChjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgICAgICBjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmsgPSBSb3V0ZVV0aWwuYXBwZW5kUGF0aFRvQmFzZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIHJvb3RNZW51SXRlbS5yb3V0ZXJMaW5rLFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rID09PSAnc3RyaW5nJyA/IFtjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmtdIDogY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkTWVudUl0ZW0uaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRNZW51SXRlbS5pdGVtcyA9IHRoaXMuYWRqdXN0TWVudUxhenlDaGlsZHJlblJvdXRlckxpbmtzKHJvb3RNZW51SXRlbSwgY2hpbGRNZW51SXRlbS5pdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRNZW51SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvcm91dGUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQWMsTUFBTSxXQUFXLENBQUM7QUFFeEQsTUFBTSxPQUFPLFNBQVM7SUFDWCxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBbUI7UUFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQXVCLEVBQUUsSUFBbUI7UUFDM0UsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQyxtQ0FBbUM7Z0JBQ25DLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBQyxDQUFDLENBQUM7YUFDNUU7aUJBQU07Z0JBQ0gsT0FBTyxTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDcEU7U0FDSjthQUFNO1lBQ0gsT0FBTyxRQUFRLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQTRCLEVBQUUsR0FBMkI7UUFDMUYsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoRCxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFGLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUU7b0JBQ3hCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDckMsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO2lCQUNKO3FCQUFNO29CQUNILE1BQU07aUJBQ1Q7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sTUFBTSxDQUFDLGlDQUFpQyxDQUFDLFlBQXNCLEVBQUUsWUFBZ0M7UUFDcEcsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sYUFBYSxHQUFHLEVBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQztZQUM3QixJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLGFBQWEsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUNyRCxZQUFZLENBQUMsVUFBVSxFQUN2QixPQUFPLGFBQWEsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDdkcsQ0FBQzthQUNMO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDcEMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNuRztZQUNELE9BQU8sYUFBYSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge01uZ0ludGVybmFsRXJyb3IsIE1uZ01lbnVJdGVtfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgUm91dGVVdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZUVtcHR5UGF0aFNlZ21lbnRzKHBhdGg6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRQYXRoID0gcGF0aC5maWx0ZXIocHMgPT4gdHlwZW9mIHBzID09PSAnc3RyaW5nJyAmJiBwcy5sZW5ndGggPiAwKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkUGF0aC5sZW5ndGggPiAwID8gZmlsdGVyZWRQYXRoIDogWycnXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFwcGVuZFBhdGhUb0Jhc2VQYXRoKGJhc2VQYXRoOiBBcnJheTxzdHJpbmc+LCBwYXRoOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChwYXRoWzBdLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRoWzBdLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBtdWx0aSB1cHBlciBmb2xkZXJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTW5nSW50ZXJuYWxFcnJvcignTm90IGltcGxlbWVudGVkJywge25hbWU6ICdSb3V0ZVV0aWxzRXJyb3InfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBSb3V0ZVV0aWwucmVtb3ZlRW1wdHlQYXRoU2VnbWVudHMoWy4uLmJhc2VQYXRoLCAuLi5wYXRoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGRvZXNVcmxNYXRjaFJvdXRlckxpbmsobGluazogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgdXJsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiB1cmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSAmJiB1cmwubGVuZ3RoID4gMCAmJiB1cmxbMF0uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICB1cmxbMF0gPSB1cmxbMF0uc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVTZWdtZW50cyA9IEFycmF5LmlzQXJyYXkobGluaykgPyBsaW5rIDogbGluay5zcGxpdCgnLycpO1xuICAgICAgICBjb25zdCB1cmxTZWdtZW50cyA9IEFycmF5LmlzQXJyYXkodXJsKSA/IHVybCA6IHVybC5zcGxpdCgnIycpWzBdLnNwbGl0KCc/JylbMF0uc3BsaXQoJy8nKTtcblxuICAgICAgICBpZiAocm91dGVTZWdtZW50cy5sZW5ndGggPiAwICYmIHVybFNlZ21lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIDwgdXJsU2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZVNlZ21lbnRzW2ldICE9PSB1cmxTZWdtZW50c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRqdXN0TWVudUxhenlDaGlsZHJlblJvdXRlckxpbmtzKHJvb3RNZW51SXRlbTogTWVudUl0ZW0sIGxhenlDaGlsZHJlbjogQXJyYXk8TW5nTWVudUl0ZW0+KSB7XG4gICAgICAgIHJldHVybiBsYXp5Q2hpbGRyZW4ubWFwKGkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRNZW51SXRlbSA9IHsuLi5pfTtcbiAgICAgICAgICAgIGlmIChjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmspIHtcbiAgICAgICAgICAgICAgICBjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmsgPSBSb3V0ZVV0aWwuYXBwZW5kUGF0aFRvQmFzZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIHJvb3RNZW51SXRlbS5yb3V0ZXJMaW5rLFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rID09PSAnc3RyaW5nJyA/IFtjaGlsZE1lbnVJdGVtLnJvdXRlckxpbmtdIDogY2hpbGRNZW51SXRlbS5yb3V0ZXJMaW5rXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkTWVudUl0ZW0uaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRNZW51SXRlbS5pdGVtcyA9IHRoaXMuYWRqdXN0TWVudUxhenlDaGlsZHJlblJvdXRlckxpbmtzKHJvb3RNZW51SXRlbSwgY2hpbGRNZW51SXRlbS5pdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRNZW51SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19