@pepperi-addons/ngx-lib 0.4.2-scroll.7 → 0.5.0-ng15.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 (508) hide show
  1. package/address/address.component.d.ts +1 -1
  2. package/attachment/attachment.component.d.ts +2 -1
  3. package/bread-crumbs/bread-crumbs.component.d.ts +1 -1
  4. package/bread-crumbs/bread-crumbs.model.d.ts +1 -1
  5. package/button/button.component.d.ts +1 -1
  6. package/carousel/carousel-item.directive.d.ts +1 -1
  7. package/carousel/carousel.component.d.ts +1 -1
  8. package/checkbox/checkbox.component.d.ts +2 -1
  9. package/chips/chips.component.d.ts +4 -5
  10. package/chips/chips.component.theme.scss +15 -5
  11. package/chips/chips.model.d.ts +2 -2
  12. package/chips/chips.service.d.ts +0 -3
  13. package/color/color-picker.component.d.ts +1 -1
  14. package/color/color-picker.component.theme.scss +2 -1
  15. package/color/color.component.d.ts +1 -1
  16. package/color/color.model.d.ts +1 -1
  17. package/core/clipboard/clipboard.directive.d.ts +1 -1
  18. package/core/common/directives/auto-width.directive.d.ts +1 -1
  19. package/core/common/directives/base-destroyer.directive.d.ts +10 -0
  20. package/core/common/directives/button-blur.directive.d.ts +1 -1
  21. package/core/common/directives/button-loader.directive.d.ts +1 -1
  22. package/core/common/directives/data-qa.directive.d.ts +1 -1
  23. package/core/common/directives/div-loader.directive.d.ts +1 -1
  24. package/core/common/directives/menu-blur.directive.d.ts +1 -1
  25. package/core/common/directives/prevent-multi-click.directive.d.ts +1 -1
  26. package/core/common/directives/print.directive.d.ts +1 -1
  27. package/core/common/directives/public-api.d.ts +1 -0
  28. package/core/common/pipes/common-pipes.d.ts +2 -2
  29. package/core/common/services/addon.service.d.ts +6 -4
  30. package/core/common/services/file.service.d.ts +1 -1
  31. package/core/common/services/utilities.service.d.ts +4 -4
  32. package/core/customization/customization.model.d.ts +15 -12
  33. package/core/customization/customization.service.d.ts +4 -0
  34. package/core/layout/layout.service.d.ts +1 -1
  35. package/core/layout/rtl.directive.d.ts +2 -2
  36. package/core/portal/attach.directive.d.ts +1 -1
  37. package/core/portal/target.directive.d.ts +1 -1
  38. package/date/date.component.d.ts +4 -2
  39. package/dialog/default-dialog.component.d.ts +1 -1
  40. package/dialog/dialog.component.d.ts +1 -1
  41. package/dialog/dialog.model.d.ts +2 -2
  42. package/draggable-items/draggable-item/draggable-item.component.d.ts +16 -2
  43. package/draggable-items/draggable-items.component.d.ts +4 -7
  44. package/draggable-items/draggable-items.model.d.ts +2 -2
  45. package/draggable-items/draggable-items.module.d.ts +4 -3
  46. package/esm2020/address/address.component.mjs +16 -16
  47. package/esm2020/address/address.module.mjs +5 -5
  48. package/esm2020/attachment/attachment.component.mjs +58 -49
  49. package/esm2020/attachment/attachment.module.mjs +5 -5
  50. package/esm2020/bread-crumbs/bread-crumbs.component.mjs +15 -15
  51. package/esm2020/bread-crumbs/bread-crumbs.module.mjs +5 -5
  52. package/esm2020/button/button.component.mjs +23 -23
  53. package/esm2020/button/button.module.mjs +5 -5
  54. package/esm2020/carousel/carousel-item.directive.mjs +9 -9
  55. package/esm2020/carousel/carousel.component.mjs +52 -52
  56. package/esm2020/carousel/carousel.module.mjs +5 -5
  57. package/esm2020/checkbox/checkbox.component.mjs +40 -31
  58. package/esm2020/checkbox/checkbox.module.mjs +5 -5
  59. package/esm2020/chips/chips.component.mjs +26 -28
  60. package/esm2020/chips/chips.module.mjs +5 -5
  61. package/esm2020/chips/chips.service.mjs +5 -14
  62. package/esm2020/color/color-picker.component.mjs +5 -5
  63. package/esm2020/color/color.component.mjs +4 -4
  64. package/esm2020/color/color.module.mjs +5 -5
  65. package/esm2020/core/clipboard/clipboard.directive.mjs +4 -4
  66. package/esm2020/core/clipboard/clipboard.service.mjs +4 -4
  67. package/esm2020/core/common/directives/auto-width.directive.mjs +4 -4
  68. package/esm2020/core/common/directives/base-destroyer.directive.mjs +22 -0
  69. package/esm2020/core/common/directives/button-blur.directive.mjs +4 -4
  70. package/esm2020/core/common/directives/button-loader.directive.mjs +10 -10
  71. package/esm2020/core/common/directives/data-qa.directive.mjs +4 -4
  72. package/esm2020/core/common/directives/div-loader.directive.mjs +4 -4
  73. package/esm2020/core/common/directives/menu-blur.directive.mjs +4 -4
  74. package/esm2020/core/common/directives/prevent-multi-click.directive.mjs +4 -4
  75. package/esm2020/core/common/directives/print.directive.mjs +4 -4
  76. package/esm2020/core/common/directives/public-api.mjs +2 -1
  77. package/esm2020/core/common/pipes/common-pipes.mjs +35 -35
  78. package/esm2020/core/common/pipes/date-ago.pipe.mjs +4 -4
  79. package/esm2020/core/common/services/addon.service.mjs +36 -12
  80. package/esm2020/core/common/services/color.service.mjs +4 -4
  81. package/esm2020/core/common/services/cookie.service.mjs +4 -4
  82. package/esm2020/core/common/services/data-convertor.service.mjs +6 -6
  83. package/esm2020/core/common/services/file.service.mjs +4 -4
  84. package/esm2020/core/common/services/jwt-helper.service.mjs +4 -4
  85. package/esm2020/core/common/services/session.service.mjs +4 -4
  86. package/esm2020/core/common/services/translate.service.mjs +4 -4
  87. package/esm2020/core/common/services/utilities.service.mjs +10 -10
  88. package/esm2020/core/common/services/validator.service.mjs +4 -4
  89. package/esm2020/core/common/services/window-scrolling.service.mjs +4 -4
  90. package/esm2020/core/customization/customization.model.mjs +40 -11
  91. package/esm2020/core/customization/customization.service.mjs +22 -4
  92. package/esm2020/core/http/interceptors/error.interceptor.mjs +4 -4
  93. package/esm2020/core/http/interceptors/loader.interceptor.mjs +4 -4
  94. package/esm2020/core/http/interceptors/profiler.interceptor.mjs +4 -4
  95. package/esm2020/core/http/services/http.service.mjs +4 -4
  96. package/esm2020/core/http/services/loader.service.mjs +9 -9
  97. package/esm2020/core/layout/layout.service.mjs +12 -12
  98. package/esm2020/core/layout/rtl.directive.mjs +7 -7
  99. package/esm2020/core/portal/attach.directive.mjs +4 -4
  100. package/esm2020/core/portal/portal.service.mjs +4 -4
  101. package/esm2020/core/portal/target.directive.mjs +4 -4
  102. package/esm2020/core/scroll-to/scroll-to.service.mjs +4 -4
  103. package/esm2020/date/date.component.mjs +81 -59
  104. package/esm2020/date/date.model.mjs +7 -7
  105. package/esm2020/date/date.module.mjs +5 -5
  106. package/esm2020/dialog/default-dialog.component.mjs +4 -4
  107. package/esm2020/dialog/dialog.component.mjs +4 -4
  108. package/esm2020/dialog/dialog.module.mjs +5 -5
  109. package/esm2020/dialog/dialog.service.mjs +4 -4
  110. package/esm2020/draggable-items/draggable-item/draggable-item.component.mjs +46 -6
  111. package/esm2020/draggable-items/draggable-items.component.mjs +21 -29
  112. package/esm2020/draggable-items/draggable-items.module.mjs +9 -5
  113. package/esm2020/field-title/field-title.component.mjs +8 -5
  114. package/esm2020/field-title/field-title.module.mjs +5 -5
  115. package/esm2020/files-uploader/files-uploader.component.mjs +12 -12
  116. package/esm2020/files-uploader/files-uploader.module.mjs +5 -5
  117. package/esm2020/form/field-generator.component.mjs +5 -5
  118. package/esm2020/form/form.component.mjs +29 -27
  119. package/esm2020/form/form.module.mjs +5 -5
  120. package/esm2020/form/indicators.component.mjs +4 -4
  121. package/esm2020/form/internal-button.component.mjs +17 -17
  122. package/esm2020/form/internal-carusel.component.mjs +18 -18
  123. package/esm2020/form/internal-carusel.service.mjs +4 -4
  124. package/esm2020/form/internal-field-generator.component.mjs +5 -5
  125. package/esm2020/form/internal-form.component.mjs +29 -27
  126. package/esm2020/form/internal-list.component.mjs +7 -7
  127. package/esm2020/form/internal-menu.component.mjs +4 -4
  128. package/esm2020/form/internal-page.component.mjs +4 -4
  129. package/esm2020/form/internal-page.service.mjs +4 -4
  130. package/esm2020/group-buttons/group-buttons.component.mjs +5 -5
  131. package/esm2020/group-buttons/group-buttons.module.mjs +5 -5
  132. package/esm2020/icon/icon-registry.service.mjs +4 -4
  133. package/esm2020/icon/icon.component.mjs +11 -11
  134. package/esm2020/icon/icon.module.mjs +5 -5
  135. package/esm2020/icon/icon.service.mjs +4 -4
  136. package/esm2020/image/image.component.mjs +52 -43
  137. package/esm2020/image/image.module.mjs +5 -5
  138. package/esm2020/image/image.service.mjs +4 -4
  139. package/esm2020/images-filmstrip/images-filmstrip.component.mjs +26 -25
  140. package/esm2020/images-filmstrip/images-filmstrip.module.mjs +5 -5
  141. package/esm2020/link/link.component.mjs +59 -50
  142. package/esm2020/link/link.module.mjs +5 -5
  143. package/esm2020/link/link.pipes.mjs +4 -4
  144. package/esm2020/list/list-actions.component.mjs +6 -6
  145. package/esm2020/list/list-carousel.component.mjs +20 -20
  146. package/esm2020/list/list-chooser.component.mjs +6 -6
  147. package/esm2020/list/list-pager.component.mjs +12 -12
  148. package/esm2020/list/list-sorting.component.mjs +6 -6
  149. package/esm2020/list/list-total.component.mjs +9 -6
  150. package/esm2020/list/list-views.component.mjs +6 -6
  151. package/esm2020/list/list.component.mjs +135 -83
  152. package/esm2020/list/list.module.mjs +5 -5
  153. package/esm2020/list/list.pipes.mjs +7 -7
  154. package/esm2020/list/virtual-scroller.mjs +58 -58
  155. package/esm2020/menu/menu-item.component.mjs +5 -5
  156. package/esm2020/menu/menu.component.mjs +11 -11
  157. package/esm2020/menu/menu.module.mjs +5 -5
  158. package/esm2020/ngx-lib.module.mjs +5 -5
  159. package/esm2020/page-layout/page-layout.component.mjs +4 -4
  160. package/esm2020/page-layout/page-layout.module.mjs +5 -5
  161. package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +4 -4
  162. package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +4 -4
  163. package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +17 -17
  164. package/esm2020/profile-data-views-list/profile-data-views-list.module.mjs +5 -5
  165. package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +4 -4
  166. package/esm2020/quantity-selector/quantity-selector.component.mjs +102 -89
  167. package/esm2020/quantity-selector/quantity-selector.module.mjs +5 -5
  168. package/esm2020/quantity-selector/quantity-selector.pipes.mjs +4 -4
  169. package/esm2020/query-builder/common/services/output-query.service.mjs +4 -4
  170. package/esm2020/query-builder/common/services/query-structure.service.mjs +14 -5
  171. package/esm2020/query-builder/common/services/type-convertor.service.mjs +10 -10
  172. package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +24 -22
  173. package/esm2020/query-builder/query-builder-section/query-builder-section.component.mjs +4 -4
  174. package/esm2020/query-builder/query-builder.component.mjs +19 -19
  175. package/esm2020/query-builder/query-builder.module.mjs +5 -5
  176. package/esm2020/query-builder/query-builder.service.mjs +4 -4
  177. package/esm2020/remote-loader/addon-block-loader.component.mjs +45 -35
  178. package/esm2020/remote-loader/addon-block-loader.service.mjs +8 -5
  179. package/esm2020/remote-loader/remote-loader-element.component.mjs +81 -26
  180. package/esm2020/remote-loader/remote-loader.component.mjs +13 -13
  181. package/esm2020/remote-loader/remote-loader.model.mjs +1 -1
  182. package/esm2020/remote-loader/remote-loader.module.mjs +5 -5
  183. package/esm2020/remote-loader/remote-loader.service.mjs +38 -15
  184. package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +47 -38
  185. package/esm2020/rich-html-textarea/rich-html-textarea.module.mjs +5 -5
  186. package/esm2020/search/search.component.mjs +35 -35
  187. package/esm2020/search/search.module.mjs +5 -5
  188. package/esm2020/select/select.component.mjs +89 -45
  189. package/esm2020/select/select.module.mjs +5 -5
  190. package/esm2020/select-panel/select-panel.component.mjs +26 -26
  191. package/esm2020/select-panel/select-panel.module.mjs +5 -5
  192. package/esm2020/separator/separator.component.mjs +16 -16
  193. package/esm2020/separator/separator.module.mjs +5 -5
  194. package/esm2020/side-bar/side-bar.component.mjs +29 -15
  195. package/esm2020/side-bar/side-bar.module.mjs +5 -5
  196. package/esm2020/signature/signature-dialog.component.mjs +4 -4
  197. package/esm2020/signature/signature.component.mjs +40 -31
  198. package/esm2020/signature/signature.module.mjs +5 -5
  199. package/esm2020/size-detector/size-detector.component.mjs +15 -13
  200. package/esm2020/size-detector/size-detector.module.mjs +5 -5
  201. package/esm2020/skeleton-loader/skeleton-loader.component.mjs +5 -5
  202. package/esm2020/skeleton-loader/skeleton-loader.module.mjs +5 -5
  203. package/esm2020/slider/slider.component.mjs +21 -21
  204. package/esm2020/slider/slider.module.mjs +5 -5
  205. package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +4 -4
  206. package/esm2020/smart-filters/common/filter-actions.component.mjs +4 -4
  207. package/esm2020/smart-filters/common/model/base-filter-component.mjs +28 -34
  208. package/esm2020/smart-filters/common/model/field.mjs +7 -7
  209. package/esm2020/smart-filters/common/model/operator.mjs +6 -4
  210. package/esm2020/smart-filters/date-filter/date-filter.component.mjs +4 -4
  211. package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +5 -5
  212. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +4 -4
  213. package/esm2020/smart-filters/smart-filters.component.mjs +19 -19
  214. package/esm2020/smart-filters/smart-filters.module.mjs +5 -5
  215. package/esm2020/smart-filters/text-filter/text-filter.component.mjs +29 -9
  216. package/esm2020/snack-bar/default-snack-bar.component.mjs +4 -4
  217. package/esm2020/snack-bar/snack-bar.component.mjs +4 -4
  218. package/esm2020/snack-bar/snack-bar.module.mjs +5 -5
  219. package/esm2020/snack-bar/snack-bar.service.mjs +4 -4
  220. package/esm2020/textarea/textarea.component.mjs +40 -31
  221. package/esm2020/textarea/textarea.module.mjs +5 -5
  222. package/esm2020/textbox/textbox-validation.directive.mjs +5 -5
  223. package/esm2020/textbox/textbox.component.mjs +152 -116
  224. package/esm2020/textbox/textbox.module.mjs +5 -5
  225. package/esm2020/textbox-icon/textbox-icon.component.mjs +4 -4
  226. package/esm2020/textbox-icon/textbox-icon.module.mjs +5 -5
  227. package/esm2020/top-bar/top-bar.component.mjs +5 -5
  228. package/esm2020/top-bar/top-bar.module.mjs +5 -5
  229. package/fesm2015/pepperi-addons-ngx-lib-address.mjs +19 -19
  230. package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  231. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +61 -52
  232. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  233. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs +18 -18
  234. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +1 -1
  235. package/fesm2015/pepperi-addons-ngx-lib-button.mjs +26 -26
  236. package/fesm2015/pepperi-addons-ngx-lib-button.mjs.map +1 -1
  237. package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs +63 -63
  238. package/fesm2015/pepperi-addons-ngx-lib-carousel.mjs.map +1 -1
  239. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +43 -34
  240. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
  241. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +33 -44
  242. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  243. package/fesm2015/pepperi-addons-ngx-lib-color.mjs +11 -11
  244. package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  245. package/fesm2015/pepperi-addons-ngx-lib-date.mjs +91 -68
  246. package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  247. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +13 -13
  248. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  249. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +75 -40
  250. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  251. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +11 -8
  252. package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
  253. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +15 -15
  254. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  255. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +122 -118
  256. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  257. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs +8 -8
  258. package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
  259. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +20 -20
  260. package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  261. package/fesm2015/pepperi-addons-ngx-lib-image.mjs +58 -49
  262. package/fesm2015/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  263. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +29 -28
  264. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  265. package/fesm2015/pepperi-addons-ngx-lib-link.mjs +65 -56
  266. package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  267. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +261 -204
  268. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  269. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +18 -18
  270. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  271. package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs +7 -7
  272. package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs.map +1 -1
  273. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +26 -26
  274. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  275. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +110 -97
  276. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  277. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +75 -65
  278. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  279. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +197 -108
  280. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  281. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +50 -41
  282. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  283. package/fesm2015/pepperi-addons-ngx-lib-search.mjs +38 -38
  284. package/fesm2015/pepperi-addons-ngx-lib-search.mjs.map +1 -1
  285. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +29 -29
  286. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  287. package/fesm2015/pepperi-addons-ngx-lib-select.mjs +92 -48
  288. package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  289. package/fesm2015/pepperi-addons-ngx-lib-separator.mjs +19 -19
  290. package/fesm2015/pepperi-addons-ngx-lib-separator.mjs.map +1 -1
  291. package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs +32 -18
  292. package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs.map +1 -1
  293. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +46 -37
  294. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  295. package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs +18 -16
  296. package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs.map +1 -1
  297. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs +8 -8
  298. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -1
  299. package/fesm2015/pepperi-addons-ngx-lib-slider.mjs +24 -24
  300. package/fesm2015/pepperi-addons-ngx-lib-slider.mjs.map +1 -1
  301. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +105 -89
  302. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  303. package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs +13 -13
  304. package/fesm2015/pepperi-addons-ngx-lib-snack-bar.mjs.map +1 -1
  305. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +43 -34
  306. package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  307. package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs +7 -7
  308. package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs.map +1 -1
  309. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +161 -124
  310. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  311. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +8 -8
  312. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  313. package/fesm2015/pepperi-addons-ngx-lib.mjs +282 -190
  314. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  315. package/fesm2020/pepperi-addons-ngx-lib-address.mjs +19 -19
  316. package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  317. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +61 -52
  318. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  319. package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs +18 -18
  320. package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +1 -1
  321. package/fesm2020/pepperi-addons-ngx-lib-button.mjs +26 -26
  322. package/fesm2020/pepperi-addons-ngx-lib-button.mjs.map +1 -1
  323. package/fesm2020/pepperi-addons-ngx-lib-carousel.mjs +63 -63
  324. package/fesm2020/pepperi-addons-ngx-lib-carousel.mjs.map +1 -1
  325. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs +43 -34
  326. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
  327. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +33 -44
  328. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  329. package/fesm2020/pepperi-addons-ngx-lib-color.mjs +11 -11
  330. package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  331. package/fesm2020/pepperi-addons-ngx-lib-date.mjs +90 -68
  332. package/fesm2020/pepperi-addons-ngx-lib-date.mjs.map +1 -1
  333. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +13 -13
  334. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  335. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +74 -39
  336. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  337. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +11 -8
  338. package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
  339. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs +15 -15
  340. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  341. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +122 -118
  342. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  343. package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs +8 -8
  344. package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
  345. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +20 -20
  346. package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
  347. package/fesm2020/pepperi-addons-ngx-lib-image.mjs +58 -49
  348. package/fesm2020/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  349. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +29 -28
  350. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  351. package/fesm2020/pepperi-addons-ngx-lib-link.mjs +65 -56
  352. package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  353. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +259 -204
  354. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  355. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +18 -18
  356. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  357. package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs +7 -7
  358. package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs.map +1 -1
  359. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +26 -26
  360. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  361. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +110 -97
  362. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  363. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +75 -65
  364. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  365. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +184 -93
  366. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  367. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +50 -41
  368. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  369. package/fesm2020/pepperi-addons-ngx-lib-search.mjs +38 -38
  370. package/fesm2020/pepperi-addons-ngx-lib-search.mjs.map +1 -1
  371. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +29 -29
  372. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  373. package/fesm2020/pepperi-addons-ngx-lib-select.mjs +92 -48
  374. package/fesm2020/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  375. package/fesm2020/pepperi-addons-ngx-lib-separator.mjs +19 -19
  376. package/fesm2020/pepperi-addons-ngx-lib-separator.mjs.map +1 -1
  377. package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs +32 -18
  378. package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs.map +1 -1
  379. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +46 -37
  380. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  381. package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs +18 -16
  382. package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs.map +1 -1
  383. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs +8 -8
  384. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -1
  385. package/fesm2020/pepperi-addons-ngx-lib-slider.mjs +24 -24
  386. package/fesm2020/pepperi-addons-ngx-lib-slider.mjs.map +1 -1
  387. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +105 -89
  388. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  389. package/fesm2020/pepperi-addons-ngx-lib-snack-bar.mjs +13 -13
  390. package/fesm2020/pepperi-addons-ngx-lib-snack-bar.mjs.map +1 -1
  391. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +43 -34
  392. package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
  393. package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs +7 -7
  394. package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs.map +1 -1
  395. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +160 -124
  396. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  397. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +8 -8
  398. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  399. package/fesm2020/pepperi-addons-ngx-lib.mjs +281 -190
  400. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  401. package/field-title/field-title.component.d.ts +2 -1
  402. package/files-uploader/files-uploader.component.d.ts +1 -1
  403. package/form/field-generator.component.d.ts +1 -1
  404. package/form/form.component.d.ts +1 -1
  405. package/form/indicators.component.d.ts +1 -1
  406. package/form/internal-button.component.d.ts +1 -1
  407. package/form/internal-carusel.component.d.ts +1 -1
  408. package/form/internal-field-generator.component.d.ts +1 -1
  409. package/form/internal-form.component.d.ts +1 -1
  410. package/form/internal-list.component.d.ts +2 -2
  411. package/form/internal-menu.component.d.ts +1 -1
  412. package/form/internal-page.component.d.ts +1 -1
  413. package/group-buttons/group-buttons.component.d.ts +2 -2
  414. package/icon/icon-generated.model.d.ts +2 -2
  415. package/icon/icon.component.d.ts +1 -1
  416. package/image/image.component.d.ts +2 -1
  417. package/image/image.component.theme.scss +4 -2
  418. package/images-filmstrip/images-filmstrip.component.d.ts +1 -1
  419. package/link/link.component.d.ts +2 -1
  420. package/list/list-actions.component.d.ts +1 -1
  421. package/list/list-carousel.component.d.ts +2 -2
  422. package/list/list-chooser.component.d.ts +1 -1
  423. package/list/list-pager.component.d.ts +1 -1
  424. package/list/list-sorting.component.d.ts +1 -1
  425. package/list/list-total.component.d.ts +2 -1
  426. package/list/list-views.component.d.ts +2 -2
  427. package/list/list.component.d.ts +8 -5
  428. package/list/list.model.d.ts +6 -6
  429. package/list/virtual-scroller.d.ts +2 -2
  430. package/menu/menu-item.component.d.ts +1 -1
  431. package/menu/menu.component.d.ts +1 -1
  432. package/menu/menu.model.d.ts +3 -3
  433. package/package.json +1 -1
  434. package/page-layout/page-layout.component.d.ts +1 -1
  435. package/profile-data-views-list/profile-data-view/profile-data-view.component.d.ts +1 -1
  436. package/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.d.ts +1 -1
  437. package/profile-data-views-list/profile-data-views-list.component.d.ts +1 -1
  438. package/quantity-selector/quantity-selector-validation.directive.d.ts +1 -1
  439. package/quantity-selector/quantity-selector.component.d.ts +8 -9
  440. package/quantity-selector/quantity-selector.component.theme.scss +12 -6
  441. package/query-builder/common/model/operator.d.ts +1 -1
  442. package/query-builder/query-builder-item/query-builder-item.component.d.ts +4 -2
  443. package/query-builder/query-builder-section/query-builder-section.component.d.ts +1 -1
  444. package/query-builder/query-builder.component.d.ts +1 -1
  445. package/remote-loader/addon-block-loader.component.d.ts +4 -2
  446. package/remote-loader/remote-loader-element.component.d.ts +9 -2
  447. package/remote-loader/remote-loader.component.d.ts +1 -1
  448. package/remote-loader/remote-loader.model.d.ts +3 -2
  449. package/remote-loader/remote-loader.service.d.ts +2 -0
  450. package/rich-html-textarea/rich-html-textarea.component.d.ts +2 -1
  451. package/rich-html-textarea/rich-html-textarea.component.theme.scss +6 -3
  452. package/search/search.component.d.ts +1 -1
  453. package/search/search.model.d.ts +4 -4
  454. package/select/select.component.d.ts +9 -1
  455. package/select/select.component.theme.scss +22 -11
  456. package/select-panel/select-panel.component.d.ts +1 -1
  457. package/select-panel/select-panel.component.theme.scss +0 -2
  458. package/separator/separator.component.d.ts +1 -1
  459. package/side-bar/side-bar.component.d.ts +4 -1
  460. package/side-bar/side-bar.model.d.ts +1 -1
  461. package/signature/signature-dialog.component.d.ts +1 -1
  462. package/signature/signature.component.d.ts +2 -1
  463. package/size-detector/size-detector.component.d.ts +1 -1
  464. package/skeleton-loader/skeleton-loader.component.d.ts +2 -2
  465. package/slider/slider.component.d.ts +1 -1
  466. package/slider/slider.component.theme.scss +15 -5
  467. package/smart-filters/boolean-filter/boolean-filter.component.d.ts +3 -1
  468. package/smart-filters/common/filter-actions.component.d.ts +1 -1
  469. package/smart-filters/common/model/base-filter-component.d.ts +3 -5
  470. package/smart-filters/common/model/operator.d.ts +2 -0
  471. package/smart-filters/common/model/type.d.ts +4 -4
  472. package/smart-filters/date-filter/date-filter.component.d.ts +3 -1
  473. package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +3 -1
  474. package/smart-filters/number-filter/number-filter.component.d.ts +3 -1
  475. package/smart-filters/smart-filters.component.d.ts +1 -1
  476. package/smart-filters/text-filter/text-filter.component.d.ts +4 -1
  477. package/snack-bar/default-snack-bar.component.d.ts +1 -1
  478. package/snack-bar/snack-bar.component.d.ts +1 -1
  479. package/src/assets/i18n/ar.ngx-lib.json +180 -0
  480. package/src/assets/i18n/de.ngx-lib.json +104 -5
  481. package/src/assets/i18n/en.ngx-lib.json +4 -3
  482. package/src/assets/i18n/es.ngx-lib.json +113 -11
  483. package/src/assets/i18n/fr.ngx-lib.json +105 -4
  484. package/src/assets/i18n/he.ngx-lib.json +105 -4
  485. package/src/assets/i18n/it.ngx-lib.json +114 -13
  486. package/src/assets/i18n/ja.ngx-lib.json +105 -4
  487. package/src/assets/i18n/pl.ngx-lib.json +105 -4
  488. package/src/assets/i18n/pt.ngx-lib.json +105 -4
  489. package/src/assets/i18n/sr.ngx-lib.json +180 -0
  490. package/src/assets/i18n/zh.ngx-lib.json +105 -2
  491. package/src/core/style/abstracts/mixins.scss +88 -30
  492. package/src/core/style/abstracts/variables.scss +9 -0
  493. package/src/core/style/base/Spacing.stories.mdx +22 -22
  494. package/src/core/style/base/base.scss +215 -115
  495. package/src/core/style/components/button.scss +41 -19
  496. package/src/core/style/components/checkbox.scss +132 -128
  497. package/src/core/style/components/file.scss +13 -9
  498. package/src/core/style/components/general.scss +149 -65
  499. package/src/core/style/components/radio-button.scss +50 -23
  500. package/src/core/style/components/textarea.scss +69 -30
  501. package/textarea/textarea.component.d.ts +2 -1
  502. package/textbox/textbox-validation.directive.d.ts +1 -1
  503. package/textbox/textbox.component.d.ts +2 -1
  504. package/textbox-icon/textbox-icon.component.d.ts +1 -1
  505. package/theming-offline.scss +2 -1
  506. package/theming.scss +2 -1
  507. package/top-bar/top-bar.component.d.ts +1 -1
  508. package/top-bar/top-bar.model.d.ts +1 -1
@@ -6,6 +6,9 @@ import * as i2 from "@angular/common";
6
6
  import * as i3 from "./internal-form.component";
7
7
  import * as i4 from "@ngx-translate/core";
8
8
  export class PepInternalListComponent {
9
+ get items() {
10
+ return this._items;
11
+ }
9
12
  constructor(element, layoutService, cd, renderer) {
10
13
  this.element = element;
11
14
  this.layoutService = layoutService;
@@ -58,9 +61,6 @@ export class PepInternalListComponent {
58
61
  this.deviceHasMouse = deviceHasMouse;
59
62
  });
60
63
  }
61
- get items() {
62
- return this._items;
63
- }
64
64
  ngOnInit() {
65
65
  this.containerWidth = 0;
66
66
  }
@@ -465,9 +465,9 @@ export class PepInternalListComponent {
465
465
  return this.items.find((item) => item.UID.toString() === uid);
466
466
  }
467
467
  }
468
- PepInternalListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepInternalListComponent, deps: [{ token: i0.ElementRef }, { token: i1.PepLayoutService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
469
- PepInternalListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepInternalListComponent, selector: "pep-internal-list", inputs: { noDataFoundMsg: "noDataFoundMsg", hideAllSelectionInMulti: "hideAllSelectionInMulti", top: "top", objectId: "objectId", parentId: "parentId", searchCode: "searchCode", supportResizing: "supportResizing", parentScroll: "parentScroll", disabled: "disabled", disableEvents: "disableEvents", disableSelectionItems: "disableSelectionItems", totalsRow: "totalsRow" }, outputs: { fieldClick: "fieldClick", valueChange: "valueChange" }, host: { listeners: { "window:resize": "winResize($event)" } }, viewQueries: [{ propertyName: "noVirtualScrollCont", first: true, predicate: ["noVirtualScrollCont"], descendants: true }, { propertyName: "tableHeader", first: true, predicate: ["tableHeader"], descendants: true }, { propertyName: "selectAllCB", first: true, predicate: ["selectAllCB"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalRows == 0\">\n <div class=\"pep-border-bottom\">\n <p class=\"title-xl no-data\">\n {{ (noDataFoundMsg ? noDataFoundMsg : 'LIST.NO_DATA_FOUND') | translate}}\n </p>\n </div>\n <div class=\"no-data-suggestions\">\n <p class=\"suggestions-title title-lg\">\n {{ 'LIST.NO_DATA_FOUND_SUGGESTIONS_TITLE' | translate}}\n </p>\n <ul class=\"suggestions-list body-lg\" [innerHtml]=\"'LIST.NO_DATA_FOUND_SUGGESTIONS_LIST' | translate\"></ul>\n </div>\n</ng-container>\n<ng-container *ngIf=\"totalRows > 0\">\n <div *ngIf=\"isTable\" #tableHeader class=\"table-header\" (mouseup)=\"onListResizeEnd($event)\"\n (mouseenter)=\"onListHeaderMouseEnter($event)\" (mouseleave)=\"onListHeaderMouseLeave($event)\"\n (mousemove)=\"onListResize($event)\">\n\n <div class=\"table-header-padding-top\"></div>\n <fieldset class=\"table-header-fieldset\">\n <fieldset>\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"header-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\" [ngClass]=\"{\n 'is-resizing': field.ApiName === pressedColumn,\n 'is-first': j === 0,\n 'is-last': j === uiControl?.ControlFields?.length - 1\n }\">\n <label *ngIf=\"field.Title != ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip text-align-{{ field.Layout.XAlignment }}\"\n title=\"{{ field.Title }}\">\n {{ field.Title }}\n </label>\n <label *ngIf=\"field.Title == ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip\">&nbsp;</label>\n\n <div *ngIf=\"supportResizing\" class=\"resize-box pull-right flip\"\n (mousedown)=\"onListResizeStart($event, field.ApiName)\">\n <div class=\"splitter\"></div>\n </div>\n </div>\n </fieldset>\n </fieldset>\n </div>\n\n <div #noVirtualScrollCont [ngClass]=\"{ 'table-body': isTable, 'cards-body': !isTable }\">\n <ng-container *ngTemplateOutlet=\"listData\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"listTotals\"></ng-container>\n</ng-container>\n\n<ng-template #listData>\n <ng-container *ngFor=\"let item of scrollItems; let i = index; let isFirst = first; trackBy: trackByFunc\">\n <ng-container *ngIf=\"isTable\">\n <div class=\"table-row\" (mouseenter)=\"onTableRowMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onTableRowMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId\n }\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <fieldset class=\"table-row-fieldset\" [ngStyle]=\"{ 'background-color': item?.BackgroundColor }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\"objectId\" [parentId]=\"parentId\"\n [searchCode]=\"searchCode\" [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'table'\"\n [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </fieldset>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!isTable\">\n <div [class]=\"itemClass\" (mouseenter)=\"onCardMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onCardMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId,\n 'card-view': viewType === 'cards',\n 'line-view': viewType === 'lines'\n }\" class=\"pull-left flip\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\" objectId\" [parentId]=\"parentId\" [searchCode]=\"searchCode\"\n [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'card'\" [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #listTotals>\n <div *ngIf=\"totalsRow?.length > 0 && totalsRow.length <= uiControl?.ControlFields.length\" class=\"table-total\">\n <fieldset class=\"table-header-fieldset\">\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"total-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\">\n <label class=\"total-label body-sm text-align-{{ field.Layout.XAlignment }}\">\n {{ totalsRow[j] }}\n </label>\n </div>\n </fieldset>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:grid}.no-data{margin:var(--pep-spacing-2xl, 2rem) 0}.no-data-suggestions .suggestions-title{margin:var(--pep-spacing-lg, 1rem) 0 var(--pep-spacing-sm, .5rem)}.no-data-suggestions .suggestions-list{margin:0;padding:0;padding-inline-start:var(--pep-spacing-2xl, 2rem)}.table-header{top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.PepInternalFormComponent, selector: "pep-internal-form", inputs: ["isInternal", "isReport", "layout", "lockEvents", "canEditObject", "data", "lockFields", "isActive", "layoutType", "objectId", "parentId", "searchCode", "showTitle", "firstFieldAsLink", "checkForChanges"], outputs: ["valueChange", "formValidationChange", "fieldClick"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
470
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepInternalListComponent, decorators: [{
468
+ PepInternalListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PepInternalListComponent, deps: [{ token: i0.ElementRef }, { token: i1.PepLayoutService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
469
+ PepInternalListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PepInternalListComponent, selector: "pep-internal-list", inputs: { noDataFoundMsg: "noDataFoundMsg", hideAllSelectionInMulti: "hideAllSelectionInMulti", top: "top", objectId: "objectId", parentId: "parentId", searchCode: "searchCode", supportResizing: "supportResizing", parentScroll: "parentScroll", disabled: "disabled", disableEvents: "disableEvents", disableSelectionItems: "disableSelectionItems", totalsRow: "totalsRow" }, outputs: { fieldClick: "fieldClick", valueChange: "valueChange" }, host: { listeners: { "window:resize": "winResize($event)" } }, viewQueries: [{ propertyName: "noVirtualScrollCont", first: true, predicate: ["noVirtualScrollCont"], descendants: true }, { propertyName: "tableHeader", first: true, predicate: ["tableHeader"], descendants: true }, { propertyName: "selectAllCB", first: true, predicate: ["selectAllCB"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalRows == 0\">\n <div class=\"pep-border-bottom\">\n <p class=\"title-xl no-data\">\n {{ (noDataFoundMsg ? noDataFoundMsg : 'LIST.NO_DATA_FOUND') | translate}}\n </p>\n </div>\n <div class=\"no-data-suggestions\">\n <p class=\"suggestions-title title-lg\">\n {{ 'LIST.NO_DATA_FOUND_SUGGESTIONS_TITLE' | translate}}\n </p>\n <ul class=\"suggestions-list body-lg\" [innerHtml]=\"'LIST.NO_DATA_FOUND_SUGGESTIONS_LIST' | translate\"></ul>\n </div>\n</ng-container>\n<ng-container *ngIf=\"totalRows > 0\">\n <div *ngIf=\"isTable\" #tableHeader class=\"table-header\" (mouseup)=\"onListResizeEnd($event)\"\n (mouseenter)=\"onListHeaderMouseEnter($event)\" (mouseleave)=\"onListHeaderMouseLeave($event)\"\n (mousemove)=\"onListResize($event)\">\n\n <div class=\"table-header-padding-top\"></div>\n <fieldset class=\"table-header-fieldset\">\n <fieldset>\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"header-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\" [ngClass]=\"{\n 'is-resizing': field.ApiName === pressedColumn,\n 'is-first': j === 0,\n 'is-last': j === uiControl?.ControlFields?.length - 1\n }\">\n <label *ngIf=\"field.Title != ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip text-align-{{ field.Layout.XAlignment }}\"\n title=\"{{ field.Title }}\">\n {{ field.Title }}\n </label>\n <label *ngIf=\"field.Title == ''\" id=\"{{ field.ApiName }}\"\n class=\"header-label body-sm pull-left flip\">&nbsp;</label>\n\n <div *ngIf=\"supportResizing\" class=\"resize-box pull-right flip\"\n (mousedown)=\"onListResizeStart($event, field.ApiName)\">\n <div class=\"splitter\"></div>\n </div>\n </div>\n </fieldset>\n </fieldset>\n </div>\n\n <div #noVirtualScrollCont [ngClass]=\"{ 'table-body': isTable, 'cards-body': !isTable }\">\n <ng-container *ngTemplateOutlet=\"listData\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"listTotals\"></ng-container>\n</ng-container>\n\n<ng-template #listData>\n <ng-container *ngFor=\"let item of scrollItems; let i = index; let isFirst = first; trackBy: trackByFunc\">\n <ng-container *ngIf=\"isTable\">\n <div class=\"table-row\" (mouseenter)=\"onTableRowMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onTableRowMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId\n }\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <fieldset class=\"table-row-fieldset\" [ngStyle]=\"{ 'background-color': item?.BackgroundColor }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\"objectId\" [parentId]=\"parentId\"\n [searchCode]=\"searchCode\" [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'table'\"\n [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </fieldset>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!isTable\">\n <div [class]=\"itemClass\" (mouseenter)=\"onCardMouseEnter($event, item?.UID, item?.Type)\"\n (mouseleave)=\"onCardMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n selected: getIsItemSelected(item?.UID, item?.Type),\n highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId,\n 'card-view': viewType === 'cards',\n 'line-view': viewType === 'lines'\n }\" class=\"pull-left flip\"\n [ngStyle]=\"{ height: calculatedObjectHeight, visibility: showItems || item ? 'visible' : 'hidden' }\">\n <!-- [canEditObject]=\"!disabled && item?.IsEditable\" -->\n <pep-internal-form [checkForChanges]=\"checkForChanges\" [layout]=\"uiControl\" [data]=\"item\"\n [canEditObject]=\"!disabled\" [objectId]=\" objectId\" [parentId]=\"parentId\" [searchCode]=\"searchCode\"\n [lockEvents]=\"disableSelectionItems\" [layoutType]=\"'card'\" [isActive]=\"\n (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n (click)=\"itemClicked($event, item)\">\n </pep-internal-form>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #listTotals>\n <div *ngIf=\"totalsRow?.length > 0 && totalsRow.length <= uiControl?.ControlFields.length\" class=\"table-total\">\n <fieldset class=\"table-header-fieldset\">\n <div *ngFor=\"let field of uiControl?.ControlFields; let j = index\" class=\"total-column pull-left flip\"\n [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\">\n <label class=\"total-label body-sm text-align-{{ field.Layout.XAlignment }}\">\n {{ totalsRow[j] }}\n </label>\n </div>\n </fieldset>\n </div>\n</ng-template>", styles: [":host{height:inherit;display:grid}.no-data{margin:var(--pep-spacing-2xl, 2rem) 0}.no-data-suggestions .suggestions-title{margin:var(--pep-spacing-lg, 1rem) 0 var(--pep-spacing-sm, .5rem)}.no-data-suggestions .suggestions-list{margin:0;padding:0;padding-inline-start:var(--pep-spacing-2xl, 2rem)}.table-header{top:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.PepInternalFormComponent, selector: "pep-internal-form", inputs: ["isInternal", "isReport", "layout", "lockEvents", "canEditObject", "data", "lockFields", "isActive", "layoutType", "objectId", "parentId", "searchCode", "showTitle", "firstFieldAsLink", "checkForChanges"], outputs: ["valueChange", "formValidationChange", "fieldClick"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
470
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PepInternalListComponent, decorators: [{
471
471
  type: Component,
472
472
  args: [{ selector: 'pep-internal-list', host: {
473
473
  '(window:resize)': 'winResize($event)',
@@ -510,4 +510,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
510
510
  type: ViewChild,
511
511
  args: ['selectAllCB']
512
512
  }] } });
513
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFNBQVMsR0FLWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBSUgsVUFBVSxHQUViLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQWdCakMsTUFBTSxPQUFPLHdCQUF3QjtJQXFFakMsWUFDWSxPQUFtQixFQUNuQixhQUErQixFQUMvQixFQUFxQixFQUNyQixRQUFtQjtRQUhuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBeEV0QixtQkFBYyxHQUFHLGlCQUFpQixDQUFDO1FBQ25DLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVoQyxRQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDVCxhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNmLGVBQVUsR0FBRyxHQUFHLENBQUM7UUFDMUIsa0NBQWtDO1FBQ3pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQXFCLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXhCLFlBQVk7UUFDWixnR0FB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QkFBQyxhQUFhO2dCQUNFLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT25Jbml0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgIFVJQ29udHJvbCxcbiAgICBVSUNvbnRyb2xGaWVsZCxcbiAgICBGSUVMRF9UWVBFLFxuICAgIE9iamVjdHNEYXRhUm93LFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQge1xuICAgIElQZXBGb3JtRmllbGRDbGlja0V2ZW50LFxuICAgIElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50LFxufSBmcm9tICcuL2Zvcm0ubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0Vmlld1R5cGUgPSAnY2FyZHMnIHwgJ2xpbmVzJyB8ICd0YWJsZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWludGVybmFsLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnRlcm5hbC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbnRlcm5hbC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKHdpbmRvdzpyZXNpemUpJzogJ3dpblJlc2l6ZSgkZXZlbnQpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBQZXBJbnRlcm5hbExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBub0RhdGFGb3VuZE1zZyA9ICdJdGVtcyBub3QgZm91bmQnO1xuICAgIEBJbnB1dCgpIGhpZGVBbGxTZWxlY3Rpb25Jbk11bHRpID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSB0b3AgPSAtMTtcbiAgICBASW5wdXQoKSBvYmplY3RJZCA9ICcwJztcbiAgICBASW5wdXQoKSBwYXJlbnRJZCA9ICcwJztcbiAgICBASW5wdXQoKSBzZWFyY2hDb2RlID0gJzAnO1xuICAgIC8vIEBJbnB1dCgpIHNob3dUb3BCb3JkZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzdXBwb3J0UmVzaXppbmcgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHBhcmVudFNjcm9sbDogRWxlbWVudCB8IFdpbmRvdyA9IG51bGw7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlRXZlbnRzID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZVNlbGVjdGlvbkl0ZW1zID0gZmFsc2U7XG4gICAgQElucHV0KCkgdG90YWxzUm93ID0gW107XG5cbiAgICAvLyBAT3V0cHV0KClcbiAgICAvLyBpdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwTGlzdEl0ZW1DbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcExpc3RJdGVtQ2xpY2tFdmVudD4oKTtcbiAgICBAT3V0cHV0KClcbiAgICBmaWVsZENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZENsaWNrRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnbm9WaXJ0dWFsU2Nyb2xsQ29udCcpIG5vVmlydHVhbFNjcm9sbENvbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgndGFibGVIZWFkZXInKSB0YWJsZUhlYWRlcjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzZWxlY3RBbGxDQicpIHNlbGVjdEFsbENCOiBhbnk7XG5cbiAgICBwdWJsaWMgdWlDb250cm9sOiBVSUNvbnRyb2wgPSBudWxsO1xuICAgIHB1YmxpYyB0b3RhbFJvd3MgPSAtMTtcbiAgICBpdGVtQ2xhc3M6IHN0cmluZztcbiAgICBpc1RhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBoYXNDb2x1bW5XaWR0aE9mVHlwZVBlcmNlbnRhZ2UgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBfaXRlbXM6IEFycmF5PE9iamVjdHNEYXRhUm93PiA9IG51bGw7XG4gICAgZ2V0IGl0ZW1zKCk6IEFycmF5PE9iamVjdHNEYXRhUm93PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG5cbiAgICAvLyBpc0NhcmRWaWV3ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpdGVtc0NvdW50ZXIgPSAwO1xuICAgIHNob3dJdGVtcyA9IHRydWU7XG4gICAgdmlld1R5cGU6IFBlcExpc3RWaWV3VHlwZTtcbiAgICBzY3JvbGxJdGVtczogQXJyYXk8T2JqZWN0c0RhdGFSb3c+O1xuXG4gICAgcHVibGljIFNFUEFSQVRPUiA9ICcsJztcblxuICAgIG5hdGl2ZVdpbmRvdzogYW55ID0gbnVsbDtcblxuICAgIHNlbGVjdGVkSXRlbUlkID0gJyc7XG4gICAgaG92ZXJlZEl0ZW1JZCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBsb2NrRXZlbnRzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjb250YWluZXJXaWR0aCA9IDA7XG5cbiAgICBkZXZpY2VIYXNNb3VzZSA9IGZhbHNlO1xuXG4gICAgLy8gaGVhZGVySXNJbkZvY3VzID0gZmFsc2U7XG5cbiAgICAvLyBGb3IgcmVzaXplXG4gICAgcHJlc3NlZENvbHVtbiA9ICcnO1xuICAgIHN0YXJ0WCA9IDA7XG4gICAgc3RhcnRXaWR0aCA9IDA7XG4gICAgdGFibGVTdGFydFdpZHRoID0gMDtcblxuICAgIGlzVXNlclNlbGVjdGVkID0gZmFsc2U7XG4gICAgY2hlY2tGb3JDaGFuZ2VzOiBhbnkgPSBudWxsO1xuICAgIHVzZVZpcnR1YWxTY3JvbGwgPSB0cnVlO1xuICAgIGNhbGN1bGF0ZWRPYmplY3RIZWlnaHQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgICAgICB0aGlzLm5hdGl2ZVdpbmRvdyA9IHdpbmRvdztcbiAgICAgICAgdGhpcy5kZXZpY2VIYXNNb3VzZSA9IHRoaXMubGF5b3V0U2VydmljZS5nZXREZXZpY2VIYXNNb3VzZSgpO1xuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2Uub25Nb3VzZU92ZXIkLnN1YnNjcmliZSgoZGV2aWNlSGFzTW91c2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlSGFzTW91c2UgPSBkZXZpY2VIYXNNb3VzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSAwO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyV2lkdGggPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250YWluZXJXaWR0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh0aGlzLnZhbHVlQ2hhbmdlKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnZhbHVlQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHRoaXMuaXRlbUNsaWNrKSB7XG4gICAgICAgIC8vICAgICB0aGlzLml0ZW1DbGljay51bnN1YnNjcmliZSgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmICh0aGlzLmZpZWxkQ2xpY2spIHtcbiAgICAgICAgLy8gICAgIHRoaXMuZmllbGRDbGljay51bnN1YnNjcmliZSgpO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgc2V0Q29udGFpbmVyV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hlY2tCb3hXaWR0aCA9IDA7XG5cbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gNDA7IC8vIHRoZSB0YWJsZSByb3cgaGVpZ2h0ICgyLjVyZW0gKiAxNmZvbnQtc2l6ZSkuXG4gICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlIGNvbnRhaW5lci1mbHVpZCBjbGFzcyBwYWRkaW5nIGxlZnQgKyByaWdodCArIGJvcmRlclxuICAgICAgICBjb25zdCBjb250YWluZXJGbHVpZFNwYWNpbmcgPVxuICAgICAgICAgICAgcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQsIDEwKSArIHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdodCwgMTApO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudENvbnRhaW5lciA9XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQgPiAwXG4gICAgICAgICAgICAgICAgPyB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGlmIHZlcnRpY2FsIHNjcm9sbCBzaG91bGQgYXBwZWFyLCBpZiBzbyBzZXQgdGhlIHNjcm9sbCB3aWR0aC4gKHRoaXMudG90YWxSb3dzICsgMSkgKyAxIGlzIGZvciB0aGUgaGVhZGVyIHJvdy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsV2lkdGggPVxuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLmNsaWVudEhlaWdodCA8IHJvd0hlaWdodCAqICh0aGlzLnRvdGFsUm93cyArIDEpXG4gICAgICAgICAgICAgICAgPyAxOFxuICAgICAgICAgICAgICAgIDogMDsgLy8gMTggaXMgdGhlIGRlZmF1bHQgc2Nyb2xsIHdpZHRoLlxuXG4gICAgICAgIC8vIFRoZSBzZWxlY3Rpb25DaGVja0JveFdpZHRoIHdpZHRoICsgY29udGFpbmVyRmx1aWRTcGFjaW5nICsgc2Nyb2xsV2lkdGguXG4gICAgICAgIGNvbnN0IHJvd0hlYWRlcldpZHRoVG9TdWIgPVxuICAgICAgICAgICAgY29udGFpbmVyRmx1aWRTcGFjaW5nICsgc2VsZWN0aW9uQ2hlY2tCb3hXaWR0aCArIHNjcm9sbFdpZHRoO1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gcGFyZW50Q29udGFpbmVyLm9mZnNldFdpZHRoIC0gcm93SGVhZGVyV2lkdGhUb1N1YjtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhbkl0ZW1zKCk7XG4gICAgICAgIHRoaXMudWlDb250cm9sID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUl0ZW1zKGlzVmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dJdGVtcyA9IGlzVmlzaWJsZTtcbiAgICAgICAgdGhpcy5sb2NrRXZlbnRzID0gIWlzVmlzaWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNjcm9sbEl0ZW1zKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBsb2FkSW5DaHVua3MgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICBnZXRVbmlxSXRlbUlkKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZSA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1JZCArIHRoaXMuU0VQQVJBVE9SICsgaXRlbVR5cGU7XG4gICAgfVxuXG4gICAgc2V0TGF5b3V0KCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnRvdGFsUm93cyA9PT0gMCB8fFxuICAgICAgICAgICAgIXRoaXMudWlDb250cm9sIHx8XG4gICAgICAgICAgICAhdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcyB8fFxuICAgICAgICAgICAgdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmZvckVhY2goKGNmKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2YuQ29sdW1uV2lkdGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjZi5Db2x1bW5XaWR0aCA9IDEwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RhYmxlICYmXG4gICAgICAgICAgICAgICAgKGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbWFnZSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuSW5kaWNhdG9ycyB8fCA/Pz9cbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLlNpZ25hdHVyZSB8fFxuICAgICAgICAgICAgICAgICAgICBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVySW50ZWdlclF1YW50aXR5U2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlclJlYWxRdWFudGl0eVNlbGVjdG9yIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyRm9yTWF0cml4IHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsRm9yTWF0cml4IHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5QYWNrYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkFwaU5hbWUgPT09ICdVbml0c1F1YW50aXR5JyB8fFxuICAgICAgICAgICAgICAgICAgICBjZi5BcGlOYW1lID09PSAnUXVhbnRpdHlTZWxlY3RvcicpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjZi5MYXlvdXQuWEFsaWdubWVudCA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5jZFsnZGVzdHJveWVkJ10pIHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSBjb2x1bW5zIHdpZHRoLlxuICAgICAgICBpZiAodGhpcy5jb250YWluZXJXaWR0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGNDb2x1bW5zV2lkdGgoKTtcbiAgICAgICAgdGhpcy5jaGVja0ZvckNoYW5nZXMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGNDb2x1bW5zV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpeGVkTXVsdGlwbGUgPSAzLjc4OyAvLyBmb3IgY29udmVydGluZyBlbSB0byBwaXhlbC5cbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkNoZWNrQm94V2lkdGggPSAwO1xuXG4gICAgICAgIC8vIElzIHRhYmxlIEFORCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uIG9mIHdpZHRoIHR5cGUgb2YgcGVyY2VudGFnZS5cbiAgICAgICAgaWYgKHRoaXMuaXNUYWJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudWlDb250cm9sICYmIHRoaXMudWlDb250cm9sLkNvbnRyb2xGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudWlDb250cm9sLkNvbnRyb2xGaWVsZHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNmKSA9PiBjZi5Db2x1bW5XaWR0aFR5cGUgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgKS5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgY29sdW1ucyBzaXplIGlzIGZpeGVkIGFuZCB0aGUgdG90YWwgaXMgc21hbGwgdGhlbiB0aGUgY29udGFpbmVyIGNoYW5nZSBpdCB0byBwZXJjZW50YWdlLlxuICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbEZpeGVkQ29sc1dpZHRoID0gdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5tYXAoXG4gICAgICAgICAgICAgICAgKGNmKSA9PiBjZi5Db2x1bW5XaWR0aCAqIGZpeGVkTXVsdGlwbGVcbiAgICAgICAgICAgICkucmVkdWNlKChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQpO1xuXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiB0b3RhbEZpeGVkQ29sc1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDb2x1bW5XaWR0aE9mVHlwZVBlcmNlbnRhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRvdGFsQ2FsY0NvbHNXaWR0aCA9IDA7XG5cbiAgICAgICAgLy8gQ2FsYyBieSBwZXJjZW50YWdlXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSkge1xuICAgICAgICAgICAgY29uc3QgdG90YWxDb2xzV2lkdGg6IG51bWJlciA9IHRoaXMudWlDb250cm9sLkNvbnRyb2xGaWVsZHMubWFwKFxuICAgICAgICAgICAgICAgIChjZikgPT4gY2YuQ29sdW1uV2lkdGhcbiAgICAgICAgICAgICkucmVkdWNlKChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdWlDb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkID0gdGhpcy51aUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgLkNvbnRyb2xGaWVsZHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGNDb2x1bW5XaWR0aFBlcmNlbnRhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAoMTAwIC8gdG90YWxDb2xzV2lkdGgpICogdWlDb250cm9sRmllbGQuQ29sdW1uV2lkdGg7XG5cbiAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggPSBNYXRoLmZsb29yKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5jb250YWluZXJXaWR0aCAqIGNhbGNDb2x1bW5XaWR0aFBlcmNlbnRhZ2UpIC8gMTAwXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FsYygxMDAlIC0gJyArIHRvdGFsQ2FsY0NvbHNXaWR0aCArICdweCknOyAvLyBGb3IgMTAwJVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQ2FsY0NvbHNXaWR0aCArPSB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgJ2luaGVyaXQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCA9IHRoaXMudWlDb250cm9sXG4gICAgICAgICAgICAgICAgICAgIC5Db250cm9sRmllbGRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Rml4ZWRXaWR0aCA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLkNvbHVtbldpZHRoICogZml4ZWRNdWx0aXBsZVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpeGVkV2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpeGVkV2lkdGggLSA0ICsgJ3B4JzsgLy8gLTQgZm9yIHRoZSByb3cgcGFkZGluZy5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rml4ZWRXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG90YWxDYWxjQ29sc1dpZHRoICs9IGN1cnJlbnRGaXhlZFdpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgdG90YWxDYWxjQ29sc1dpZHRoICsgc2VsZWN0aW9uQ2hlY2tCb3hXaWR0aCArICdweCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRSZXNpemVEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0WCA9IDA7XG4gICAgICAgIHRoaXMuc3RhcnRXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMudGFibGVTdGFydFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy5wcmVzc2VkQ29sdW1uID0gJyc7XG4gICAgfVxuXG4gICAgb25MaXN0UmVzaXplU3RhcnQoZXZlbnQsIGNvbHVtbktleSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXNzZWRDb2x1bW4gPSBjb2x1bW5LZXk7XG4gICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQueDtcbiAgICAgICAgdGhpcy5zdGFydFdpZHRoID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5oZWFkZXItY29sdW1uJykub2Zmc2V0V2lkdGg7XG4gICAgICAgIC8vIFNldCB0aGUgdGFibGVTdGFydFdpZHRoIHRvIHRoZSBjb250YWluZXIgb2Zmc2V0V2lkdGhcbiAgICAgICAgdGhpcy50YWJsZVN0YXJ0V2lkdGggPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDsgLy8gdGhpcy5ub1ZpcnR1YWxTY3JvbGxDb250Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfVxuXG4gICAgb25MaXN0UmVzaXplKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnByZXNzZWRDb2x1bW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGhUb0FkZCA9IHRoaXMubGF5b3V0U2VydmljZS5pc1J0bCgpXG4gICAgICAgICAgICAgICAgPyB0aGlzLnN0YXJ0WCAtIGV2ZW50LnhcbiAgICAgICAgICAgICAgICA6IGV2ZW50LnggLSB0aGlzLnN0YXJ0WDtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGFuZCB0aGUgY29udGFpbmVyIG9mIHRoZSB3aG9sZSBjb2x1bW5zLlxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRXaWR0aCArIHdpZHRoVG9BZGQgPj0gNDggfHwgd2lkdGhUb0FkZCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWxDYWxjQ29sc1dpZHRoID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlDb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkID0gdGhpcy51aUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgIC5Db250cm9sRmllbGRzW2luZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGMgdGhlIGxhc3QgY29sdW1uIG9ubHkgaW4gcGVyY2VudGFnZSB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPSB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FsYygxMDAlIC0gJyArIHRvdGFsQ2FsY0NvbHNXaWR0aCArICdweCknOyAvLyBGb3IgMTAwJVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWlDb250cm9sRmllbGQuQXBpTmFtZSA9PT0gdGhpcy5wcmVzc2VkQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0V2lkdGggKyB3aWR0aFRvQWRkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoIC0gNCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVpQ29udHJvbEZpZWxkLkFwaU5hbWUgPT09IHRoaXMucHJlc3NlZENvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0V2lkdGggKyB3aWR0aFRvQWRkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPSB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0b3RhbENhbGNDb2xzV2lkdGggKz0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RhcnRXaWR0aCArIHdpZHRoVG9BZGQgKyAncHgnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNoYW5nZXMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhcmVudChlbCwgcGFyZW50U2VsZWN0b3IpOiBhbnkge1xuICAgICAgICAvLyBJZiBubyBwYXJlbnRTZWxlY3RvciBkZWZpbmVkIHdpbGwgYnViYmxlIHVwIGFsbCB0aGUgd2F5IHRvICpkb2N1bWVudCpcbiAgICAgICAgaWYgKHBhcmVudFNlbGVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yID0gZG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gW107XG4gICAgICAgIGxldCBwID0gZWwucGFyZW50Tm9kZTtcblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICBwICYmXG4gICAgICAgICAgICBwLmNsYXNzTmFtZSAhPT0gJycgJiZcbiAgICAgICAgICAgIHAuY2xhc3NOYW1lLmluZGV4T2YocGFyZW50U2VsZWN0b3IpID09PSAtMSAmJlxuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgIT09IGRvY3VtZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgbyA9IHA7XG4gICAgICAgICAgICBwID0gby5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwLmNsYXNzTmFtZS5pbmRleE9mKHBhcmVudFNlbGVjdG9yKSA+IC0xKSB7XG4gICAgICAgICAgICBwYXJlbnQucHVzaChwKTsgLy8gUHVzaCB0aGF0IHBhcmVudFNlbGVjdG9yIHlvdSB3YW50ZWQgdG8gc3RvcCBhdFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgb25MaXN0UmVzaXplRW5kKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnByZXNzZWRDb2x1bW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGV2ZW50ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYXJlbnQoZXZlbnQuc3JjRWxlbWVudCwgJ3Jlc2l6ZS1ib3gnKS5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXNpemVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXNpemVEYXRhKCk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkxpc3RIZWFkZXJNb3VzZUVudGVyKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMuaGVhZGVySXNJbkZvY3VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkxpc3RIZWFkZXJNb3VzZUxlYXZlKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMuaGVhZGVySXNJbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25MaXN0UmVzaXplRW5kKGV2ZW50KTtcbiAgICAgICAgdGhpcy5pbml0UmVzaXplRGF0YSgpO1xuICAgIH1cblxuICAgIG9uTGlzdENoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVFdmVudHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBvdGhlciBldmVudHMgZG8gbm90aGluZy5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGV2ZW50LnN0YXJ0ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmVuZCA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZWRPYmplY3RIZWlnaHQgPSBldmVudC5jYWxjdWxhdGVkQ2hpbGRIZWlnaHQgKyAncHgnO1xuXG4gICAgICAgIGlmICghdGhpcy5sb2NrRXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUl0ZW1zKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsSXRlbXMoZXZlbnQuc3RhcnQsIGV2ZW50LmVuZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVJdGVtcyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhcmVudENvbnRhaW5lcigpOiBFbGVtZW50IHwgV2luZG93IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50U2Nyb2xsID8gdGhpcy5wYXJlbnRTY3JvbGwgOiB3aW5kb3c7XG4gICAgfVxuXG4gICAgb25WYWx1ZUNoYW5nZWQodmFsdWVDaGFuZ2U6IElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVDaGFuZ2UpO1xuICAgIH1cblxuICAgIG9uQ3VzdG9taXplRmllbGRDbGljayhcbiAgICAgICAgY3VzdG9taXplRmllbGRDbGlja2VkRGF0YTogSVBlcEZvcm1GaWVsZENsaWNrRXZlbnRcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmllbGRDbGljay5lbWl0KGN1c3RvbWl6ZUZpZWxkQ2xpY2tlZERhdGEpO1xuICAgIH1cblxuICAgIGdldElzRGlzYWJsZWQoaXRlbTogT2JqZWN0c0RhdGFSb3cpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVNlbGVjdGlvbkl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IElzTm90U2VsZWN0YWJsZUZvckFjdGlvbnMgPVxuICAgICAgICAgICAgICAgIGl0ZW0gJiYgIWl0ZW0uSXNTZWxlY3RhYmxlRm9yQWN0aW9ucztcbiAgICAgICAgICAgIHJldHVybiBJc05vdFNlbGVjdGFibGVGb3JBY3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SXNJdGVtU2VsZWN0ZWQoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlID0gJycpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGlzU2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB1bmlxSXRlbUlkID0gdGhpcy5nZXRVbmlxSXRlbUlkKGl0ZW1JZCwgaXRlbVR5cGUpO1xuICAgICAgICBpc1NlbGVjdGVkID0gdW5pcUl0ZW1JZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW1JZDtcblxuICAgICAgICByZXR1cm4gaXNTZWxlY3RlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEl0ZW1DbGlja2VkKFxuICAgICAgICBpdGVtSWQsXG4gICAgICAgIGlzU2VsZWN0YWJsZUZvckFjdGlvbnM6IGJvb2xlYW4sXG4gICAgICAgIGl0ZW1UeXBlOiBzdHJpbmcsXG4gICAgICAgIGlzQ2hlY2tlZDogYm9vbGVhblxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCB1bmlxSXRlbUlkID0gdGhpcy5nZXRVbmlxSXRlbUlkKGl0ZW1JZCwgaXRlbVR5cGUpO1xuXG4gICAgICAgIC8vIHNlbGVjdCB0aGUgc2VsZWN0ZWQgaXRlbS5cbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgLy8gU2V0IHNlbGV0ZWQgaXRlbVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9IHVuaXFJdGVtSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1JZCA9PT0gdW5pcUl0ZW1JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGl0ZW1DbGlja2VkKGU6IGFueSwgaXRlbTogT2JqZWN0c0RhdGFSb3cpOiB2b2lkIHtcbiAgICAgICAgLy8gU2V0IHNlbGV0ZWQgaXRlbVxuICAgICAgICBjb25zdCBpdGVtSWQgPSBpdGVtLlVJRC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGl0ZW0uVHlwZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgaXNDaGVja2VkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5Jc1NlbGVjdGFibGVGb3JBY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkID0gdGhpcy5nZXRVbmlxSXRlbUlkKGl0ZW1JZCwgaXRlbVR5cGUpO1xuICAgICAgICAgICAgaXNDaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SXRlbUNsaWNrZWQoXG4gICAgICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgICAgIGl0ZW0uSXNTZWxlY3RhYmxlRm9yQWN0aW9ucyxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLml0ZW1DbGljay5lbWl0KHsgc291cmNlOiBpdGVtLCB2aWV3VHlwZTogdGhpcy52aWV3VHlwZSB9KTtcbiAgICB9XG5cbiAgICBvblRhYmxlUm93TW91c2VFbnRlcihldmVudDogYW55LCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGV2aWNlSGFzTW91c2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFJdGVtSWQgPSB0aGlzLmdldFVuaXFJdGVtSWQoaXRlbUlkLCBpdGVtVHlwZSk7XG4gICAgICAgIHRoaXMuaG92ZXJlZEl0ZW1JZCA9IHVuaXFJdGVtSWQ7XG4gICAgfVxuXG4gICAgb25UYWJsZVJvd01vdXNlTGVhdmUoZXZlbnQ6IGFueSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbUlkID0gJyc7XG4gICAgfVxuXG4gICAgb25DYXJkTW91c2VFbnRlcihldmVudDogYW55LCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGV2aWNlSGFzTW91c2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFJdGVtSWQgPSB0aGlzLmdldFVuaXFJdGVtSWQoaXRlbUlkLCBpdGVtVHlwZSk7XG4gICAgICAgIHRoaXMuaG92ZXJlZEl0ZW1JZCA9IHVuaXFJdGVtSWQ7XG4gICAgfVxuXG4gICAgb25DYXJkTW91c2VMZWF2ZShldmVudDogYW55LCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtSWQgPSAnJztcbiAgICB9XG5cbiAgICAvLyBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgcmVzaXplICsgYW5pbWF0aW9uIGVuZFxuICAgIHdpblJlc2l6ZShlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSAwO1xuICAgICAgICB0aGlzLnNldExheW91dCgpO1xuICAgIH1cblxuICAgIHRyYWNrQnlGdW5jKGluZGV4OiBudW1iZXIsIGl0ZW06IE9iamVjdHNEYXRhUm93KTogYW55IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbS5VSUQgPyBpdGVtLlVJRCA6IGluZGV4O1xuICAgIH1cblxuICAgIGNsZWFuSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbXNDb3VudGVyID0gMDtcbiAgICAgICAgdGhpcy5faXRlbXMgPVxuICAgICAgICAgICAgdGhpcy50b3RhbFJvd3MgPiAwID8gQXJyYXk8T2JqZWN0c0RhdGFSb3c+KHRoaXMudG90YWxSb3dzKSA6IFtdO1xuICAgICAgICB0aGlzLnNjcm9sbEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlZE9iamVjdEhlaWdodCA9ICcnO1xuICAgIH1cblxuICAgIGdldFVJQ29udHJvbCgpOiBVSUNvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy51aUNvbnRyb2w7XG4gICAgfVxuXG4gICAgaW5pdExpc3REYXRhKFxuICAgICAgICB1aUNvbnRyb2w6IFVJQ29udHJvbCxcbiAgICAgICAgdG90YWxSb3dzOiBudW1iZXIsXG4gICAgICAgIGl0ZW1zOiBPYmplY3RzRGF0YVJvd1tdLFxuICAgICAgICB2aWV3VHlwZTogUGVwTGlzdFZpZXdUeXBlID0gJ3RhYmxlJyxcbiAgICAgICAgaXRlbUNsYXNzID0gJydcbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3VHlwZSA9IHZpZXdUeXBlO1xuICAgICAgICB0aGlzLmlzVGFibGUgPSB2aWV3VHlwZSA9PT0gJ3RhYmxlJztcbiAgICAgICAgLy8gdGhpcy5pc0NhcmRWaWV3ID0gdmlld1R5cGUgPT09ICdjYXJkcyc7XG4gICAgICAgIHRoaXMudWlDb250cm9sID0gdWlDb250cm9sO1xuICAgICAgICB0aGlzLml0ZW1DbGFzcyA9IGl0ZW1DbGFzcztcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9ICcnO1xuICAgICAgICB0aGlzLnRvdGFsUm93cyA9IHRvdGFsUm93cztcblxuICAgICAgICAvLyBmaXggYnVnIGZvciB0aGUgc2Nyb2xsVG8gdGhhdCBkb2Vzbid0IHdvcmsgb24gZWRnZSBkaXYgLCBub3Qgd2luZG93XG4gICAgICAgIC8vIGNvbnN0IHNjcm9sbGluZ0VsZW1lbnQgPSB0aGlzLmdldFBhcmVudENvbnRhaW5lcigpO1xuICAgICAgICAvLyBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvKDAsIDApO1xuXG4gICAgICAgIHRoaXMuY2xlYW5JdGVtcygpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlSXRlbXMoaXRlbXMpO1xuXG4gICAgICAgIHRoaXMuc2V0TGF5b3V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJdGVtcyhpdGVtczogT2JqZWN0c0RhdGFSb3dbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcm9sbEl0ZW1zID0gdGhpcy5faXRlbXMgPSBpdGVtcztcbiAgICAgICAgdGhpcy5pdGVtc0NvdW50ZXIgPSBpdGVtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgdXBkYXRlSXRlbShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgICAvLyBVcGRhdGUgaXRlbXMgbGlzdFxuICAgICAgICBpbmRleCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KChpKSA9PiBpICYmIGkuVUlEID09PSBkYXRhLlVJRCk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNbaW5kZXhdID0gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBzY3JvbGxJdGVtcyBsaXN0XG4gICAgICAgIGluZGV4ID0gdGhpcy5zY3JvbGxJdGVtcy5maW5kSW5kZXgoKGkpID0+IGkgJiYgaS5VSUQgPT09IGRhdGEuVUlEKTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMuc2Nyb2xsSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEl0ZW1zW2luZGV4XSA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SXNJdGVtRWRpdGFibGUodWlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmlsdGVyKCh4KSA9PiB4LlVJRC50b1N0cmluZygpID09PSB1aWQpO1xuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbVswXS5Jc0VkaXRhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0SXRlbURhdGFCeUlEKHVpZDogc3RyaW5nKTogT2JqZWN0c0RhdGFSb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLlVJRC50b1N0cmluZygpID09PSB1aWQpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbFJvd3MgPT0gMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJwZXAtYm9yZGVyLWJvdHRvbVwiPlxuICAgICAgICA8cCBjbGFzcz1cInRpdGxlLXhsIG5vLWRhdGFcIj5cbiAgICAgICAgICAgIHt7IChub0RhdGFGb3VuZE1zZyA/IG5vRGF0YUZvdW5kTXNnIDogJ0xJU1QuTk9fREFUQV9GT1VORCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJuby1kYXRhLXN1Z2dlc3Rpb25zXCI+XG4gICAgICAgIDxwIGNsYXNzPVwic3VnZ2VzdGlvbnMtdGl0bGUgdGl0bGUtbGdcIj5cbiAgICAgICAgICAgIHt7ICdMSVNULk5PX0RBVEFfRk9VTkRfU1VHR0VTVElPTlNfVElUTEUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJzdWdnZXN0aW9ucy1saXN0IGJvZHktbGdcIiBbaW5uZXJIdG1sXT1cIidMSVNULk5PX0RBVEFfRk9VTkRfU1VHR0VTVElPTlNfTElTVCcgfCB0cmFuc2xhdGVcIj48L3VsPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidG90YWxSb3dzID4gMFwiPlxuICAgIDxkaXYgKm5nSWY9XCJpc1RhYmxlXCIgI3RhYmxlSGVhZGVyIGNsYXNzPVwidGFibGUtaGVhZGVyXCIgKG1vdXNldXApPVwib25MaXN0UmVzaXplRW5kKCRldmVudClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvbkxpc3RIZWFkZXJNb3VzZUVudGVyKCRldmVudClcIiAobW91c2VsZWF2ZSk9XCJvbkxpc3RIZWFkZXJNb3VzZUxlYXZlKCRldmVudClcIlxuICAgICAgICAobW91c2Vtb3ZlKT1cIm9uTGlzdFJlc2l6ZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlci1wYWRkaW5nLXRvcFwiPjwvZGl2PlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJ0YWJsZS1oZWFkZXItZmllbGRzZXRcIj5cbiAgICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB1aUNvbnRyb2w/LkNvbnRyb2xGaWVsZHM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cImhlYWRlci1jb2x1bW4gcHVsbC1sZWZ0IGZsaXBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBmaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyB9XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1yZXNpemluZyc6IGZpZWxkLkFwaU5hbWUgPT09IHByZXNzZWRDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWZpcnN0JzogaiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtbGFzdCc6IGogPT09IHVpQ29udHJvbD8uQ29udHJvbEZpZWxkcz8ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJmaWVsZC5UaXRsZSAhPSAnJ1wiIGlkPVwie3sgZmllbGQuQXBpTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1sYWJlbCBib2R5LXNtIHB1bGwtbGVmdCBmbGlwIHRleHQtYWxpZ24te3sgZmllbGQuTGF5b3V0LlhBbGlnbm1lbnQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBmaWVsZC5UaXRsZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZmllbGQuVGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiZmllbGQuVGl0bGUgPT0gJydcIiBpZD1cInt7IGZpZWxkLkFwaU5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItbGFiZWwgYm9keS1zbSBwdWxsLWxlZnQgZmxpcFwiPiZuYnNwOzwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN1cHBvcnRSZXNpemluZ1wiIGNsYXNzPVwicmVzaXplLWJveCBwdWxsLXJpZ2h0IGZsaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbkxpc3RSZXNpemVTdGFydCgkZXZlbnQsIGZpZWxkLkFwaU5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BsaXR0ZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAjbm9WaXJ0dWFsU2Nyb2xsQ29udCBbbmdDbGFzc109XCJ7ICd0YWJsZS1ib2R5JzogaXNUYWJsZSwgJ2NhcmRzLWJvZHknOiAhaXNUYWJsZSB9XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0RGF0YVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0VG90YWxzXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNsaXN0RGF0YT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNjcm9sbEl0ZW1zOyBsZXQgaSA9IGluZGV4OyBsZXQgaXNGaXJzdCA9IGZpcnN0OyB0cmFja0J5OiB0cmFja0J5RnVuY1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUYWJsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiIChtb3VzZWVudGVyKT1cIm9uVGFibGVSb3dNb3VzZUVudGVyKCRldmVudCwgaXRlbT8uVUlELCBpdGVtPy5UeXBlKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25UYWJsZVJvd01vdXNlTGVhdmUoJGV2ZW50LCBpdGVtPy5VSUQsIGl0ZW0/LlR5cGUpXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGdldElzSXRlbVNlbGVjdGVkKGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogaXRlbT8uVUlEICsgU0VQQVJBVE9SICsgaXRlbT8uVHlwZSA9PT0gc2VsZWN0ZWRJdGVtSWRcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGNhbGN1bGF0ZWRPYmplY3RIZWlnaHQsIHZpc2liaWxpdHk6IHNob3dJdGVtcyB8fCBpdGVtID8gJ3Zpc2libGUnIDogJ2hpZGRlbicgfVwiPlxuICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz1cInRhYmxlLXJvdy1maWVsZHNldFwiIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtY29sb3InOiBpdGVtPy5CYWNrZ3JvdW5kQ29sb3IgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFtjYW5FZGl0T2JqZWN0XT1cIiFkaXNhYmxlZCAmJiBpdGVtPy5Jc0VkaXRhYmxlXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxwZXAtaW50ZXJuYWwtZm9ybSBbY2hlY2tGb3JDaGFuZ2VzXT1cImNoZWNrRm9yQ2hhbmdlc1wiIFtsYXlvdXRdPVwidWlDb250cm9sXCIgW2RhdGFdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FuRWRpdE9iamVjdF09XCIhZGlzYWJsZWRcIiBbb2JqZWN0SWRdPVwib2JqZWN0SWRcIiBbcGFyZW50SWRdPVwicGFyZW50SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaENvZGVdPVwic2VhcmNoQ29kZVwiIFtsb2NrRXZlbnRzXT1cImRpc2FibGVTZWxlY3Rpb25JdGVtc1wiIFtsYXlvdXRUeXBlXT1cIid0YWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbT8uVUlEICsgU0VQQVJBVE9SICsgaXRlbT8uVHlwZSA9PT0gc2VsZWN0ZWRJdGVtSWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uVUlEICsgU0VQQVJBVE9SICsgaXRlbT8uVHlwZSA9PT0gaG92ZXJlZEl0ZW1JZCkgJiYgZGV2aWNlSGFzTW91c2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChmaWVsZENsaWNrKT1cIm9uQ3VzdG9taXplRmllbGRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtQ2xpY2tlZCgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcGVwLWludGVybmFsLWZvcm0+XG4gICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGFibGVcIj5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIml0ZW1DbGFzc1wiIChtb3VzZWVudGVyKT1cIm9uQ2FyZE1vdXNlRW50ZXIoJGV2ZW50LCBpdGVtPy5VSUQsIGl0ZW0/LlR5cGUpXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbkNhcmRNb3VzZUxlYXZlKCRldmVudCwgaXRlbT8uVUlELCBpdGVtPy5UeXBlKVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBnZXRJc0l0ZW1TZWxlY3RlZChpdGVtPy5VSUQsIGl0ZW0/LlR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IHNlbGVjdGVkSXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NhcmQtdmlldyc6IHZpZXdUeXBlID09PSAnY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmUtdmlldyc6IHZpZXdUeXBlID09PSAnbGluZXMnXG4gICAgICAgICAgICAgICAgICAgIH1cIiBjbGFzcz1cInB1bGwtbGVmdCBmbGlwXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogY2FsY3VsYXRlZE9iamVjdEhlaWdodCwgdmlzaWJpbGl0eTogc2hvd0l0ZW1zIHx8IGl0ZW0gPyAndmlzaWJsZScgOiAnaGlkZGVuJyB9XCI+XG4gICAgICAgICAgICAgICAgPCEtLSBbY2FuRWRpdE9iamVjdF09XCIhZGlzYWJsZWQgJiYgaXRlbT8uSXNFZGl0YWJsZVwiIC0tPlxuICAgICAgICAgICAgICAgIDxwZXAtaW50ZXJuYWwtZm9ybSBbY2hlY2tGb3JDaGFuZ2VzXT1cImNoZWNrRm9yQ2hhbmdlc1wiIFtsYXlvdXRdPVwidWlDb250cm9sXCIgW2RhdGFdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtjYW5FZGl0T2JqZWN0XT1cIiFkaXNhYmxlZFwiIFtvYmplY3RJZF09XCIgb2JqZWN0SWRcIiBbcGFyZW50SWRdPVwicGFyZW50SWRcIiBbc2VhcmNoQ29kZV09XCJzZWFyY2hDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2tFdmVudHNdPVwiZGlzYWJsZVNlbGVjdGlvbkl0ZW1zXCIgW2xheW91dFR5cGVdPVwiJ2NhcmQnXCIgW2lzQWN0aXZlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBzZWxlY3RlZEl0ZW1JZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IGhvdmVyZWRJdGVtSWQpICYmIGRldmljZUhhc01vdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChmaWVsZENsaWNrKT1cIm9uQ3VzdG9taXplRmllbGRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIml0ZW1DbGlja2VkKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgICAgICAgICA8L3BlcC1pbnRlcm5hbC1mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaXN0VG90YWxzPlxuICAgIDxkaXYgKm5nSWY9XCJ0b3RhbHNSb3c/Lmxlbmd0aCA+IDAgJiYgdG90YWxzUm93Lmxlbmd0aCA8PSB1aUNvbnRyb2w/LkNvbnRyb2xGaWVsZHMubGVuZ3RoXCIgY2xhc3M9XCJ0YWJsZS10b3RhbFwiPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJ0YWJsZS1oZWFkZXItZmllbGRzZXRcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHVpQ29udHJvbD8uQ29udHJvbEZpZWxkczsgbGV0IGogPSBpbmRleFwiIGNsYXNzPVwidG90YWwtY29sdW1uIHB1bGwtbGVmdCBmbGlwXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBmaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyB9XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidG90YWwtbGFiZWwgYm9keS1zbSB0ZXh0LWFsaWduLXt7IGZpZWxkLkxheW91dC5YQWxpZ25tZW50IH19XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHRvdGFsc1Jvd1tqXSB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
513
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFNBQVMsR0FLWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBSUgsVUFBVSxHQUViLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQWdCakMsTUFBTSxPQUFPLHdCQUF3QjtJQWtDakMsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFpQ0QsWUFDWSxPQUFtQixFQUNuQixhQUErQixFQUMvQixFQUFxQixFQUNyQixRQUFtQjtRQUhuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBeEV0QixtQkFBYyxHQUFHLGlCQUFpQixDQUFDO1FBQ25DLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVoQyxRQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDVCxhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNmLGVBQVUsR0FBRyxHQUFHLENBQUM7UUFDMUIsa0NBQWtDO1FBQ3pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQXFCLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLDBCQUFxQixHQUFH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QUFDLGFBQWE7Z0JBQ0UsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIFBlcExheW91dFNlcnZpY2UsXG4gICAgVUlDb250cm9sLFxuICAgIFVJQ29udHJvbEZpZWxkLFxuICAgIEZJRUxEX1RZUEUsXG4gICAgT2JqZWN0c0RhdGFSb3csXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7XG4gICAgSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQsXG4gICAgSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQsXG59IGZyb20gJy4vZm9ybS5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIFBlcExpc3RWaWV3VHlwZSA9ICdjYXJkcycgfCAnbGluZXMnIHwgJ3RhYmxlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtaW50ZXJuYWwtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ludGVybmFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ludGVybmFsLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcod2luZG93OnJlc2l6ZSknOiAnd2luUmVzaXplKCRldmVudCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcEludGVybmFsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIG5vRGF0YUZvdW5kTXNnID0gJ0l0ZW1zIG5vdCBmb3VuZCc7XG4gICAgQElucHV0KCkgaGlkZUFsbFNlbGVjdGlvbkluTXVsdGkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHRvcCA9IC0xO1xuICAgIEBJbnB1dCgpIG9iamVjdElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHBhcmVudElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHNlYXJjaENvZGUgPSAnMCc7XG4gICAgLy8gQElucHV0KCkgc2hvd1RvcEJvcmRlciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHN1cHBvcnRSZXNpemluZyA9IHRydWU7XG4gICAgQElucHV0KCkgcGFyZW50U2Nyb2xsOiBFbGVtZW50IHwgV2luZG93ID0gbnVsbDtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVFdmVudHMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlU2VsZWN0aW9uSXRlbXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB0b3RhbHNSb3cgPSBbXTtcblxuICAgIC8vIEBPdXRwdXQoKVxuICAgIC8vIGl0ZW1DbGljazogRXZlbnRFbWl0dGVyPElQZXBMaXN0SXRlbUNsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwTGlzdEl0ZW1DbGlja0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKVxuICAgIGZpZWxkQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudD4oKTtcbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdub1ZpcnR1YWxTY3JvbGxDb250Jykgbm9WaXJ0dWFsU2Nyb2xsQ29udDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCd0YWJsZUhlYWRlcicpIHRhYmxlSGVhZGVyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdEFsbENCJykgc2VsZWN0QWxsQ0I6IGFueTtcblxuICAgIHB1YmxpYyB1aUNvbnRyb2w6IFVJQ29udHJvbCA9IG51bGw7XG4gICAgcHVibGljIHRvdGFsUm93cyA9IC0xO1xuICAgIGl0ZW1DbGFzczogc3RyaW5nO1xuICAgIGlzVGFibGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9pdGVtczogQXJyYXk8T2JqZWN0c0RhdGFSb3c+ID0gbnVsbDtcbiAgICBnZXQgaXRlbXMoKTogQXJyYXk8T2JqZWN0c0RhdGFSb3c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cblxuICAgIC8vIGlzQ2FyZFZpZXcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGl0ZW1zQ291bnRlciA9IDA7XG4gICAgc2hvd0l0ZW1zID0gdHJ1ZTtcbiAgICB2aWV3VHlwZTogUGVwTGlzdFZpZXdUeXBlO1xuICAgIHNjcm9sbEl0ZW1zOiBBcnJheTxPYmplY3RzRGF0YVJvdz47XG5cbiAgICBwdWJsaWMgU0VQQVJBVE9SID0gJywnO1xuXG4gICAgbmF0aXZlV2luZG93OiBhbnkgPSBudWxsO1xuXG4gICAgc2VsZWN0ZWRJdGVtSWQgPSAnJztcbiAgICBob3ZlcmVkSXRlbUlkID0gJyc7XG5cbiAgICBwcml2YXRlIGxvY2tFdmVudHMgPSBmYWxzZTtcbiAgICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gMDtcblxuICAgIGRldmljZUhhc01vdXNlID0gZmFsc2U7XG5cbiAgICAvLyBoZWFkZXJJc0luRm9jdXMgPSBmYWxzZTtcblxuICAgIC8vIEZvciByZXNpemVcbiAgICBwcmVzc2VkQ29sdW1uID0gJyc7XG4gICAgc3RhcnRYID0gMDtcbiAgICBzdGFydFdpZHRoID0gMDtcbiAgICB0YWJsZVN0YXJ0V2lkdGggPSAwO1xuXG4gICAgaXNVc2VyU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBjaGVja0ZvckNoYW5nZXM6IGFueSA9IG51bGw7XG4gICAgdXNlVmlydHVhbFNjcm9sbCA9IHRydWU7XG4gICAgY2FsY3VsYXRlZE9iamVjdEhlaWdodDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7XG4gICAgICAgIHRoaXMubmF0aXZlV2luZG93ID0gd2luZG93O1xuICAgICAgICB0aGlzLmRldmljZUhhc01vdXNlID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmdldERldmljZUhhc01vdXNlKCk7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vbk1vdXNlT3ZlciQuc3Vic2NyaWJlKChkZXZpY2VIYXNNb3VzZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXZpY2VIYXNNb3VzZSA9IGRldmljZUhhc01vdXNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IDA7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXJXaWR0aCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMudmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgLy8gICAgIHRoaXMudmFsdWVDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBpZiAodGhpcy5pdGVtQ2xpY2spIHtcbiAgICAgICAgLy8gICAgIHRoaXMuaXRlbUNsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHRoaXMuZmllbGRDbGljaykge1xuICAgICAgICAvLyAgICAgdGhpcy5maWVsZENsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBzZXRDb250YWluZXJXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25DaGVja0JveFdpZHRoID0gMDtcblxuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSA0MDsgLy8gdGhlIHRhYmxlIHJvdyBoZWlnaHQgKDIuNXJlbSAqIDE2Zm9udC1zaXplKS5cbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgY29udGFpbmVyLWZsdWlkIGNsYXNzIHBhZGRpbmcgbGVmdCArIHJpZ2h0ICsgYm9yZGVyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckZsdWlkU3BhY2luZyA9XG4gICAgICAgICAgICBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCwgMTApICsgcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0LCAxMCk7XG5cbiAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID1cbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCA+IDBcbiAgICAgICAgICAgICAgICA/IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICAgIDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgaWYgdmVydGljYWwgc2Nyb2xsIHNob3VsZCBhcHBlYXIsIGlmIHNvIHNldCB0aGUgc2Nyb2xsIHdpZHRoLiAodGhpcy50b3RhbFJvd3MgKyAxKSArIDEgaXMgZm9yIHRoZSBoZWFkZXIgcm93LlxuICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9XG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIuY2xpZW50SGVpZ2h0IDwgcm93SGVpZ2h0ICogKHRoaXMudG90YWxSb3dzICsgMSlcbiAgICAgICAgICAgICAgICA/IDE4XG4gICAgICAgICAgICAgICAgOiAwOyAvLyAxOCBpcyB0aGUgZGVmYXVsdCBzY3JvbGwgd2lkdGguXG5cbiAgICAgICAgLy8gVGhlIHNlbGVjdGlvbkNoZWNrQm94V2lkdGggd2lkdGggKyBjb250YWluZXJGbHVpZFNwYWNpbmcgKyBzY3JvbGxXaWR0aC5cbiAgICAgICAgY29uc3Qgcm93SGVhZGVyV2lkdGhUb1N1YiA9XG4gICAgICAgICAgICBjb250YWluZXJGbHVpZFNwYWNpbmcgKyBzZWxlY3Rpb25DaGVja0JveFdpZHRoICsgc2Nyb2xsV2lkdGg7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBwYXJlbnRDb250YWluZXIub2Zmc2V0V2lkdGggLSByb3dIZWFkZXJXaWR0aFRvU3ViO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFuSXRlbXMoKTtcbiAgICAgICAgdGhpcy51aUNvbnRyb2wgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlSXRlbXMoaXNWaXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0l0ZW1zID0gaXNWaXNpYmxlO1xuICAgICAgICB0aGlzLmxvY2tFdmVudHMgPSAhaXNWaXNpYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsSXRlbXMoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGxvYWRJbkNodW5rcyA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxJdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIH1cblxuICAgIGdldFVuaXFJdGVtSWQoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlID0gJycpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbUlkICsgdGhpcy5TRVBBUkFUT1IgKyBpdGVtVHlwZTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID09PSAwIHx8XG4gICAgICAgICAgICAhdGhpcy51aUNvbnRyb2wgfHxcbiAgICAgICAgICAgICF0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzIHx8XG4gICAgICAgICAgICB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudWlDb250cm9sLkNvbnRyb2xGaWVsZHMuZm9yRWFjaCgoY2YpID0+IHtcbiAgICAgICAgICAgIGlmIChjZi5Db2x1bW5XaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNmLkNvbHVtbldpZHRoID0gMTA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGFibGUgJiZcbiAgICAgICAgICAgICAgICAoY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLkltYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbmRpY2F0b3JzIHx8ID8/P1xuICAgICAgICAgICAgICAgICAgICBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuU2lnbmF0dXJlIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBjZi5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbFF1YW50aXR5U2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlckludGVnZXJGb3JNYXRyaXggfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlclJlYWxGb3JNYXRyaXggfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLlBhY2thZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgY2YuQXBpTmFtZSA9PT0gJ1VuaXRzUXVhbnRpdHknIHx8XG4gICAgICAgICAgICAgICAgICAgIGNmLkFwaU5hbWUgPT09ICdRdWFudGl0eVNlbGVjdG9yJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNmLkxheW91dC5YQWxpZ25tZW50ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNkWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIGNvbHVtbnMgd2lkdGguXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcldpZHRoIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGFpbmVyV2lkdGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY0NvbHVtbnNXaWR0aCgpO1xuICAgICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY0NvbHVtbnNXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZml4ZWRNdWx0aXBsZSA9IDMuNzg7IC8vIGZvciBjb252ZXJ0aW5nIGVtIHRvIHBpeGVsLlxuICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hlY2tCb3hXaWR0aCA9IDA7XG5cbiAgICAgICAgLy8gSXMgdGFibGUgQU5EIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gb2Ygd2lkdGggdHlwZSBvZiBwZXJjZW50YWdlLlxuICAgICAgICBpZiAodGhpcy5pc1RhYmxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51aUNvbnRyb2wgJiYgdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2YpID0+IGNmLkNvbHVtbldpZHRoVHlwZSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICApLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBjb2x1bW5zIHNpemUgaXMgZml4ZWQgYW5kIHRoZSB0b3RhbCBpcyBzbWFsbCB0aGVuIHRoZSBjb250YWluZXIgY2hhbmdlIGl0IHRvIHBlcmNlbnRhZ2UuXG4gICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW5XaWR0aE9mVHlwZVBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsRml4ZWRDb2xzV2lkdGggPSB0aGlzLnVpQ29udHJvbC5Db250cm9sRmllbGRzLm1hcChcbiAgICAgICAgICAgICAgICAoY2YpID0+IGNmLkNvbHVtbldpZHRoICogZml4ZWRNdWx0aXBsZVxuICAgICAgICAgICAgKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCk7XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IHRvdGFsRml4ZWRDb2xzV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NvbHVtbldpZHRoT2ZUeXBlUGVyY2VudGFnZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdG90YWxDYWxjQ29sc1dpZHRoID0gMDtcblxuICAgICAgICAvLyBDYWxjIGJ5IHBlcmNlbnRhZ2VcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sdW1uV2lkdGhPZlR5cGVQZXJjZW50YWdlKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbENvbHNXaWR0aDogbnVtYmVyID0gdGhpcy51aUNvbnRyb2wuQ29udHJvbEZpZWxkcy5tYXAoXG4gICAgICAgICAgICAgICAgKGNmKSA9PiBjZi5Db2x1bW5XaWR0aFxuICAgICAgICAgICAgKS5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1aUNvbnRyb2xGaWVsZDogVUlDb250cm9sRmllbGQgPSB0aGlzLnVpQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAuQ29udHJvbEZpZWxkc1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsY0NvbHVtbldpZHRoUGVyY2VudGFnZSA9XG4gICAgICAgICAgICAgICAgICAgICgxMDAgLyB0b3RhbENvbHNXaWR0aCkgKiB1aUNvbnRyb2xGaWVsZC5Db2x1bW5XaWR0aDtcblxuICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbnRhaW5lcldpZHRoICogY2FsY0NvbHVtbldpZHRoUGVyY2VudGFnZSkgLyAxMDBcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICdjYWxjKDEwMCUgLSAnICsgdG90YWxDYWxjQ29sc1dpZHRoICsgJ3B4KSc7IC8vIEZvciAxMDAlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY1RpdGxlQ29sdW1uV2lkdGhTdHJpbmcgPSB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDYWxjQ29sc1dpZHRoICs9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAnaW5oZXJpdCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdWlDb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkID0gdGhpcy51aUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgLkNvbnRyb2xGaWVsZHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaXhlZFdpZHRoID0gTWF0aC5mbG9vcihcbiAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuQ29sdW1uV2lkdGggKiBmaXhlZE11bHRpcGxlXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rml4ZWRXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rml4ZWRXaWR0aCAtIDQgKyAncHgnOyAvLyAtNCBmb3IgdGhlIHJvdyBwYWRkaW5nLlxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID0gdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXhlZFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0b3RhbENhbGNDb2xzV2lkdGggKz0gY3VycmVudEZpeGVkV2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICB0b3RhbENhbGNDb2xzV2lkdGggKyBzZWxlY3Rpb25DaGVja0JveFdpZHRoICsgJ3B4J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFJlc2l6ZURhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhcnRYID0gMDtcbiAgICAgICAgdGhpcy5zdGFydFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy50YWJsZVN0YXJ0V2lkdGggPSAwO1xuICAgICAgICB0aGlzLnByZXNzZWRDb2x1bW4gPSAnJztcbiAgICB9XG5cbiAgICBvbkxpc3RSZXNpemVTdGFydChldmVudCwgY29sdW1uS2V5KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJlc3NlZENvbHVtbiA9IGNvbHVtbktleTtcbiAgICAgICAgdGhpcy5zdGFydFggPSBldmVudC54O1xuICAgICAgICB0aGlzLnN0YXJ0V2lkdGggPSBldmVudC50YXJnZXQuY2xvc2VzdCgnLmhlYWRlci1jb2x1bW4nKS5vZmZzZXRXaWR0aDtcbiAgICAgICAgLy8gU2V0IHRoZSB0YWJsZVN0YXJ0V2lkdGggdG8gdGhlIGNvbnRhaW5lciBvZmZzZXRXaWR0aFxuICAgICAgICB0aGlzLnRhYmxlU3RhcnRXaWR0aCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoOyAvLyB0aGlzLm5vVmlydHVhbFNjcm9sbENvbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICB9XG5cbiAgICBvbkxpc3RSZXNpemUoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucHJlc3NlZENvbHVtbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aFRvQWRkID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzUnRsKClcbiAgICAgICAgICAgICAgICA/IHRoaXMuc3RhcnRYIC0gZXZlbnQueFxuICAgICAgICAgICAgICAgIDogZXZlbnQueCAtIHRoaXMuc3RhcnRYO1xuXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gYW5kIHRoZSBjb250YWluZXIgb2YgdGhlIHdob2xlIGNvbHVtbnMuXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydFdpZHRoICsgd2lkdGhUb0FkZCA+PSA0OCB8fCB3aWR0aFRvQWRkID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMudWlDb250cm9sLkNvbnRyb2xGaWVsZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxldCB0b3RhbENhbGNDb2xzV2lkdGggPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1aUNvbnRyb2xGaWVsZDogVUlDb250cm9sRmllbGQgPSB0aGlzLnVpQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgLkNvbnRyb2xGaWVsZHNbaW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsYyB0aGUgbGFzdCBjb2x1bW4gb25seSBpbiBwZXJjZW50YWdlIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNDb2x1bW5XaWR0aE9mVHlwZVBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYWxjKDEwMCUgLSAnICsgdG90YWxDYWxjQ29sc1dpZHRoICsgJ3B4KSc7IC8vIEZvciAxMDAlXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1aUNvbnRyb2xGaWVsZC5BcGlOYW1lID09PSB0aGlzLnByZXNzZWRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaWR0aCArIHdpZHRoVG9BZGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggLSA0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodWlDb250cm9sRmllbGQuQXBpTmFtZSA9PT0gdGhpcy5wcmVzc2VkQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRXaWR0aCArIHdpZHRoVG9BZGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xGaWVsZC5jYWxjVGl0bGVDb2x1bW5XaWR0aFN0cmluZyA9IHVpQ29udHJvbEZpZWxkLmNhbGNDb2x1bW5XaWR0aFN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sRmllbGQuY2FsY0NvbHVtbldpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQ2FsY0NvbHNXaWR0aCArPSB1aUNvbnRyb2xGaWVsZC5jYWxjQ29sdW1uV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdGFydFdpZHRoICsgd2lkdGhUb0FkZCArICdweCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNoZWNrRm9yQ2hhbmdlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFyZW50KGVsLCBwYXJlbnRTZWxlY3Rvcik6IGFueSB7XG4gICAgICAgIC8vIElmIG5vIHBhcmVudFNlbGVjdG9yIGRlZmluZWQgd2lsbCBidWJibGUgdXAgYWxsIHRoZSB3YXkgdG8gKmRvY3VtZW50KlxuICAgICAgICBpZiAocGFyZW50U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBbXTtcbiAgICAgICAgbGV0IHAgPSBlbC5wYXJlbnROb2RlO1xuXG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHAgJiZcbiAgICAgICAgICAgIHAuY2xhc3NOYW1lICE9PSAnJyAmJlxuICAgICAgICAgICAgcC5jbGFzc05hbWUuaW5kZXhPZihwYXJlbnRTZWxlY3RvcikgPT09IC0xICYmXG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciAhPT0gZG9jdW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBvID0gcDtcbiAgICAgICAgICAgIHAgPSBvLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHAuY2xhc3NOYW1lLmluZGV4T2YocGFyZW50U2VsZWN0b3IpID4gLTEpIHtcbiAgICAgICAgICAgIHBhcmVudC5wdXNoKHApOyAvLyBQdXNoIHRoYXQgcGFyZW50U2VsZWN0b3IgeW91IHdhbnRlZCB0byBzdG9wIGF0XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBvbkxpc3RSZXNpemVFbmQoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucHJlc3NlZENvbHVtbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZXZlbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBhcmVudChldmVudC5zcmNFbGVtZW50LCAncmVzaXplLWJveCcpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJlc2l6ZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJlc2l6ZURhdGEoKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTGlzdEhlYWRlck1vdXNlRW50ZXIoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy5oZWFkZXJJc0luRm9jdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uTGlzdEhlYWRlck1vdXNlTGVhdmUoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy5oZWFkZXJJc0luRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkxpc3RSZXNpemVFbmQoZXZlbnQpO1xuICAgICAgICB0aGlzLmluaXRSZXNpemVEYXRhKCk7XG4gICAgfVxuXG4gICAgb25MaXN0Q2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUV2ZW50cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIG90aGVyIGV2ZW50cyBkbyBub3RoaW5nLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZXZlbnQuc3RhcnQgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZXZlbnQuZW5kID09PSAndW5kZWZpbmVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlZE9iamVjdEhlaWdodCA9IGV2ZW50LmNhbGN1bGF0ZWRDaGlsZEhlaWdodCArICdweCc7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvY2tFdmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlSXRlbXMoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxJdGVtcyhldmVudC5zdGFydCwgZXZlbnQuZW5kLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUl0ZW1zKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UGFyZW50Q29udGFpbmVyKCk6IEVsZW1lbnQgfCBXaW5kb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRTY3JvbGwgPyB0aGlzLnBhcmVudFNjcm9sbCA6IHdpbmRvdztcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlZCh2YWx1ZUNoYW5nZTogSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgb25DdXN0b21pemVGaWVsZENsaWNrKFxuICAgICAgICBjdXN0b21pemVGaWVsZENsaWNrZWREYXRhOiBJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWVsZENsaWNrLmVtaXQoY3VzdG9taXplRmllbGRDbGlja2VkRGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0SXNEaXNhYmxlZChpdGVtOiBPYmplY3RzRGF0YVJvdyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlU2VsZWN0aW9uSXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgSXNOb3RTZWxlY3RhYmxlRm9yQWN0aW9ucyA9XG4gICAgICAgICAgICAgICAgaXRlbSAmJiAhaXRlbS5Jc1NlbGVjdGFibGVGb3JBY3Rpb25zO1xuICAgICAgICAgICAgcmV0dXJuIElzTm90U2VsZWN0YWJsZUZvckFjdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJc0l0ZW1TZWxlY3RlZChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGUgPSAnJyk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNTZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHVuaXFJdGVtSWQgPSB0aGlzLmdldFVuaXFJdGVtSWQoaXRlbUlkLCBpdGVtVHlwZSk7XG4gICAgICAgIGlzU2VsZWN0ZWQgPSB1bmlxSXRlbUlkID09PSB0aGlzLnNlbGVjdGVkSXRlbUlkO1xuXG4gICAgICAgIHJldHVybiBpc1NlbGVjdGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXRlbUNsaWNrZWQoXG4gICAgICAgIGl0ZW1JZCxcbiAgICAgICAgaXNTZWxlY3RhYmxlRm9yQWN0aW9uczogYm9vbGVhbixcbiAgICAgICAgaXRlbVR5cGU6IHN0cmluZyxcbiAgICAgICAgaXNDaGVja2VkOiBib29sZWFuXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVuaXFJdGVtSWQgPSB0aGlzLmdldFVuaXFJdGVtSWQoaXRlbUlkLCBpdGVtVHlwZSk7XG5cbiAgICAgICAgLy8gc2VsZWN0IHRoZSBzZWxlY3RlZCBpdGVtLlxuICAgICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgICAgICAvLyBTZXQgc2VsZXRlZCBpdGVtXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkID0gdW5pcUl0ZW1JZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbUlkID09PSB1bmlxSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXRlbUNsaWNrZWQoZTogYW55LCBpdGVtOiBPYmplY3RzRGF0YVJvdyk6IHZvaWQge1xuICAgICAgICAvLyBTZXQgc2VsZXRlZCBpdGVtXG4gICAgICAgIGNvbnN0IGl0ZW1JZCA9IGl0ZW0uVUlELnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gaXRlbS5UeXBlLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBpc0NoZWNrZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLklzU2VsZWN0YWJsZUZvckFjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSB0aGlzLmdldFVuaXFJdGVtSWQoaXRlbUlkLCBpdGVtVHlwZSk7XG4gICAgICAgICAgICBpc0NoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJdGVtQ2xpY2tlZChcbiAgICAgICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICAgICAgaXRlbS5Jc1NlbGVjdGFibGVGb3JBY3Rpb25zLFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuaXRlbUNsaWNrLmVtaXQoeyBzb3VyY2U6IGl0ZW0sIHZpZXdUeXBlOiB0aGlzLnZpZXdUeXBlIH0pO1xuICAgIH1cblxuICAgIG9uVGFibGVSb3dNb3VzZUVudGVyKGV2ZW50OiBhbnksIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZXZpY2VIYXNNb3VzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pcUl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbUlkID0gdW5pcUl0ZW1JZDtcbiAgICB9XG5cbiAgICBvblRhYmxlUm93TW91c2VMZWF2ZShldmVudDogYW55LCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtSWQgPSAnJztcbiAgICB9XG5cbiAgICBvbkNhcmRNb3VzZUVudGVyKGV2ZW50OiBhbnksIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZXZpY2VIYXNNb3VzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pcUl0ZW1JZCA9IHRoaXMuZ2V0VW5pcUl0ZW1JZChpdGVtSWQsIGl0ZW1UeXBlKTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkSXRlbUlkID0gdW5pcUl0ZW1JZDtcbiAgICB9XG5cbiAgICBvbkNhcmRNb3VzZUxlYXZlKGV2ZW50OiBhbnksIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG92ZXJlZEl0ZW1JZCA9ICcnO1xuICAgIH1cblxuICAgIC8vIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciByZXNpemUgKyBhbmltYXRpb24gZW5kXG4gICAgd2luUmVzaXplKGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuc2V0TGF5b3V0KCk7XG4gICAgfVxuXG4gICAgdHJhY2tCeUZ1bmMoaW5kZXg6IG51bWJlciwgaXRlbTogT2JqZWN0c0RhdGFSb3cpOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbSAmJiBpdGVtLlVJRCA/IGl0ZW0uVUlEIDogaW5kZXg7XG4gICAgfVxuXG4gICAgY2xlYW5JdGVtcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtc0NvdW50ZXIgPSAwO1xuICAgICAgICB0aGlzLl9pdGVtcyA9XG4gICAgICAgICAgICB0aGlzLnRvdGFsUm93cyA+IDAgPyBBcnJheTxPYmplY3RzRGF0YVJvdz4odGhpcy50b3RhbFJvd3MpIDogW107XG4gICAgICAgIHRoaXMuc2Nyb2xsSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkT2JqZWN0SGVpZ2h0ID0gJyc7XG4gICAgfVxuXG4gICAgZ2V0VUlDb250cm9sKCk6IFVJQ29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnVpQ29udHJvbDtcbiAgICB9XG5cbiAgICBpbml0TGlzdERhdGEoXG4gICAgICAgIHVpQ29udHJvbDogVUlDb250cm9sLFxuICAgICAgICB0b3RhbFJvd3M6IG51bWJlcixcbiAgICAgICAgaXRlbXM6IE9iamVjdHNEYXRhUm93W10sXG4gICAgICAgIHZpZXdUeXBlOiBQZXBMaXN0Vmlld1R5cGUgPSAndGFibGUnLFxuICAgICAgICBpdGVtQ2xhc3MgPSAnJ1xuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdUeXBlID0gdmlld1R5cGU7XG4gICAgICAgIHRoaXMuaXNUYWJsZSA9IHZpZXdUeXBlID09PSAndGFibGUnO1xuICAgICAgICAvLyB0aGlzLmlzQ2FyZFZpZXcgPSB2aWV3VHlwZSA9PT0gJ2NhcmRzJztcbiAgICAgICAgdGhpcy51aUNvbnRyb2wgPSB1aUNvbnRyb2w7XG4gICAgICAgIHRoaXMuaXRlbUNsYXNzID0gaXRlbUNsYXNzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkID0gJyc7XG4gICAgICAgIHRoaXMudG90YWxSb3dzID0gdG90YWxSb3dzO1xuXG4gICAgICAgIC8vIGZpeCBidWcgZm9yIHRoZSBzY3JvbGxUbyB0aGF0IGRvZXNuJ3Qgd29yayBvbiBlZGdlIGRpdiAsIG5vdCB3aW5kb3dcbiAgICAgICAgLy8gY29uc3Qgc2Nyb2xsaW5nRWxlbWVudCA9IHRoaXMuZ2V0UGFyZW50Q29udGFpbmVyKCk7XG4gICAgICAgIC8vIHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgICAgICAgdGhpcy5jbGVhbkl0ZW1zKCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVJdGVtcyhpdGVtcyk7XG5cbiAgICAgICAgdGhpcy5zZXRMYXlvdXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUl0ZW1zKGl0ZW1zOiBPYmplY3RzRGF0YVJvd1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSXRlbXMgPSB0aGlzLl9pdGVtcyA9IGl0ZW1zO1xuICAgICAgICB0aGlzLml0ZW1zQ291bnRlciA9IGl0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICB1cGRhdGVJdGVtKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBpdGVtcyBsaXN0XG4gICAgICAgIGluZGV4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoKGkpID0+IGkgJiYgaS5VSUQgPT09IGRhdGEuVUlEKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtc1tpbmRleF0gPSBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIHNjcm9sbEl0ZW1zIGxpc3RcbiAgICAgICAgaW5kZXggPSB0aGlzLnNjcm9sbEl0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaSAmJiBpLlVJRCA9PT0gZGF0YS5VSUQpO1xuXG4gICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5zY3JvbGxJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsSXRlbXNbaW5kZXhdID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGb3JDaGFuZ2VzID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJc0l0ZW1FZGl0YWJsZSh1aWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcy5maWx0ZXIoKHgpID0+IHguVUlELnRvU3RyaW5nKCkgPT09IHVpZCk7XG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtWzBdLklzRWRpdGFibGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJdGVtRGF0YUJ5SUQodWlkOiBzdHJpbmcpOiBPYmplY3RzRGF0YVJvdyB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uVUlELnRvU3RyaW5nKCkgPT09IHVpZCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUm93cyA9PSAwXCI+XG4gICAgPGRpdiBjbGFzcz1cInBlcC1ib3JkZXItYm90dG9tXCI+XG4gICAgICAgIDxwIGNsYXNzPVwidGl0bGUteGwgbm8tZGF0YVwiPlxuICAgICAgICAgICAge3sgKG5vRGF0YUZvdW5kTXNnID8gbm9EYXRhRm91bmRNc2cgOiAnTElTVC5OT19EQVRBX0ZPVU5EJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm5vLWRhdGEtc3VnZ2VzdGlvbnNcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJzdWdnZXN0aW9ucy10aXRsZSB0aXRsZS1sZ1wiPlxuICAgICAgICAgICAge3sgJ0xJU1QuTk9fREFUQV9GT1VORF9TVUdHRVNUSU9OU19USVRMRScgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDx1bCBjbGFzcz1cInN1Z2dlc3Rpb25zLWxpc3QgYm9keS1sZ1wiIFtpbm5lckh0bWxdPVwiJ0xJU1QuTk9fREFUQV9GT1VORF9TVUdHRVNUSU9OU19MSVNUJyB8IHRyYW5zbGF0ZVwiPjwvdWw+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbFJvd3MgPiAwXCI+XG4gICAgPGRpdiAqbmdJZj1cImlzVGFibGVcIiAjdGFibGVIZWFkZXIgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiAobW91c2V1cCk9XCJvbkxpc3RSZXNpemVFbmQoJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9uTGlzdEhlYWRlck1vdXNlRW50ZXIoJGV2ZW50KVwiIChtb3VzZWxlYXZlKT1cIm9uTGlzdEhlYWRlck1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgIChtb3VzZW1vdmUpPVwib25MaXN0UmVzaXplKCRldmVudClcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyLXBhZGRpbmctdG9wXCI+PC9kaXY+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cInRhYmxlLWhlYWRlci1maWVsZHNldFwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHVpQ29udHJvbD8uQ29udHJvbEZpZWxkczsgbGV0IGogPSBpbmRleFwiIGNsYXNzPVwiaGVhZGVyLWNvbHVtbiBwdWxsLWxlZnQgZmxpcFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nIH1cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLXJlc2l6aW5nJzogZmllbGQuQXBpTmFtZSA9PT0gcHJlc3NlZENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtZmlyc3QnOiBqID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1sYXN0JzogaiA9PT0gdWlDb250cm9sPy5Db250cm9sRmllbGRzPy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImZpZWxkLlRpdGxlICE9ICcnXCIgaWQ9XCJ7eyBmaWVsZC5BcGlOYW1lIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWxhYmVsIGJvZHktc20gcHVsbC1sZWZ0IGZsaXAgdGV4dC1hbGlnbi17eyBmaWVsZC5MYXlvdXQuWEFsaWdubWVudCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGZpZWxkLlRpdGxlIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWVsZC5UaXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJmaWVsZC5UaXRsZSA9PSAnJ1wiIGlkPVwie3sgZmllbGQuQXBpTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1sYWJlbCBib2R5LXNtIHB1bGwtbGVmdCBmbGlwXCI+Jm5ic3A7PC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3VwcG9ydFJlc2l6aW5nXCIgY2xhc3M9XCJyZXNpemUtYm94IHB1bGwtcmlnaHQgZmxpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTGlzdFJlc2l6ZVN0YXJ0KCRldmVudCwgZmllbGQuQXBpTmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGxpdHRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICNub1ZpcnR1YWxTY3JvbGxDb250IFtuZ0NsYXNzXT1cInsgJ3RhYmxlLWJvZHknOiBpc1RhYmxlLCAnY2FyZHMtYm9keSc6ICFpc1RhYmxlIH1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3REYXRhXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RUb3RhbHNcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2xpc3REYXRhPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2Nyb2xsSXRlbXM7IGxldCBpID0gaW5kZXg7IGxldCBpc0ZpcnN0ID0gZmlyc3Q7IHRyYWNrQnk6IHRyYWNrQnlGdW5jXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RhYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCIgKG1vdXNlZW50ZXIpPVwib25UYWJsZVJvd01vdXNlRW50ZXIoJGV2ZW50LCBpdGVtPy5VSUQsIGl0ZW0/LlR5cGUpXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvblRhYmxlUm93TW91c2VMZWF2ZSgkZXZlbnQsIGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSlcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZ2V0SXNJdGVtU2VsZWN0ZWQoaXRlbT8uVUlELCBpdGVtPy5UeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkOiBpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBzZWxlY3RlZEl0ZW1JZFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogY2FsY3VsYXRlZE9iamVjdEhlaWdodCwgdmlzaWJpbGl0eTogc2hvd0l0ZW1zIHx8IGl0ZW0gPyAndmlzaWJsZScgOiAnaGlkZGVuJyB9XCI+XG4gICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwidGFibGUtcm93LWZpZWxkc2V0XCIgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0/LkJhY2tncm91bmRDb2xvciB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gW2NhbkVkaXRPYmplY3RdPVwiIWRpc2FibGVkICYmIGl0ZW0/LklzRWRpdGFibGVcIiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHBlcC1pbnRlcm5hbC1mb3JtIFtjaGVja0ZvckNoYW5nZXNdPVwiY2hlY2tGb3JDaGFuZ2VzXCIgW2xheW91dF09XCJ1aUNvbnRyb2xcIiBbZGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5FZGl0T2JqZWN0XT1cIiFkaXNhYmxlZFwiIFtvYmplY3RJZF09XCJvYmplY3RJZFwiIFtwYXJlbnRJZF09XCJwYXJlbnRJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoQ29kZV09XCJzZWFyY2hDb2RlXCIgW2xvY2tFdmVudHNdPVwiZGlzYWJsZVNlbGVjdGlvbkl0ZW1zXCIgW2xheW91dFR5cGVdPVwiJ3RhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBzZWxlY3RlZEl0ZW1JZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy5VSUQgKyBTRVBBUkFUT1IgKyBpdGVtPy5UeXBlID09PSBob3ZlcmVkSXRlbUlkKSAmJiBkZXZpY2VIYXNNb3VzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlZCgkZXZlbnQpXCIgKGZpZWxkQ2xpY2spPVwib25DdXN0b21pemVGaWVsZENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIml0ZW1DbGlja2VkKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wZXAtaW50ZXJuYWwtZm9ybT5cbiAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUYWJsZVwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiaXRlbUNsYXNzXCIgKG1vdXNlZW50ZXIpPVwib25DYXJkTW91c2VFbnRlcigkZXZlbnQsIGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSlcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uQ2FyZE1vdXNlTGVhdmUoJGV2ZW50LCBpdGVtPy5VSUQsIGl0ZW0/LlR5cGUpXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGdldElzSXRlbVNlbGVjdGVkKGl0ZW0/LlVJRCwgaXRlbT8uVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogaXRlbT8uVUlEICsgU0VQQVJBVE9SICsgaXRlbT8uVHlwZSA9PT0gc2VsZWN0ZWRJdGVtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FyZC12aWV3Jzogdmlld1R5cGUgPT09ICdjYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbGluZS12aWV3Jzogdmlld1R5cGUgPT09ICdsaW5lcydcbiAgICAgICAgICAgICAgICAgICAgfVwiIGNsYXNzPVwicHVsbC1sZWZ0IGZsaXBcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBjYWxjdWxhdGVkT2JqZWN0SGVpZ2h0LCB2aXNpYmlsaXR5OiBzaG93SXRlbXMgfHwgaXRlbSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nIH1cIj5cbiAgICAgICAgICAgICAgICA8IS0tIFtjYW5FZGl0T2JqZWN0XT1cIiFkaXNhYmxlZCAmJiBpdGVtPy5Jc0VkaXRhYmxlXCIgLS0+XG4gICAgICAgICAgICAgICAgPHBlcC1pbnRlcm5hbC1mb3JtIFtjaGVja0ZvckNoYW5nZXNdPVwiY2hlY2tGb3JDaGFuZ2VzXCIgW2xheW91dF09XCJ1aUNvbnRyb2xcIiBbZGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2NhbkVkaXRPYmplY3RdPVwiIWRpc2FibGVkXCIgW29iamVjdElkXT1cIiBvYmplY3RJZFwiIFtwYXJlbnRJZF09XCJwYXJlbnRJZFwiIFtzZWFyY2hDb2RlXT1cInNlYXJjaENvZGVcIlxuICAgICAgICAgICAgICAgICAgICBbbG9ja0V2ZW50c109XCJkaXNhYmxlU2VsZWN0aW9uSXRlbXNcIiBbbGF5b3V0VHlwZV09XCInY2FyZCdcIiBbaXNBY3RpdmVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LlVJRCArIFNFUEFSQVRPUiArIGl0ZW0/LlR5cGUgPT09IHNlbGVjdGVkSXRlbUlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbT8uVUlEICsgU0VQQVJBVE9SICsgaXRlbT8uVHlwZSA9PT0gaG92ZXJlZEl0ZW1JZCkgJiYgZGV2aWNlSGFzTW91c2VcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlZCgkZXZlbnQpXCIgKGZpZWxkQ2xpY2spPVwib25DdXN0b21pemVGaWVsZENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbUNsaWNrZWQoJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgICAgICAgIDwvcGVwLWludGVybmFsLWZvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3RUb3RhbHM+XG4gICAgPGRpdiAqbmdJZj1cInRvdGFsc1Jvdz8ubGVuZ3RoID4gMCAmJiB0b3RhbHNSb3cubGVuZ3RoIDw9IHVpQ29udHJvbD8uQ29udHJvbEZpZWxkcy5sZW5ndGhcIiBjbGFzcz1cInRhYmxlLXRvdGFsXCI+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cInRhYmxlLWhlYWRlci1maWVsZHNldFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdWlDb250cm9sPy5Db250cm9sRmllbGRzOyBsZXQgaiA9IGluZGV4XCIgY2xhc3M9XCJ0b3RhbC1jb2x1bW4gcHVsbC1sZWZ0IGZsaXBcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGZpZWxkLmNhbGNUaXRsZUNvbHVtbldpZHRoU3RyaW5nIH1cIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0b3RhbC1sYWJlbCBib2R5LXNtIHRleHQtYWxpZ24te3sgZmllbGQuTGF5b3V0LlhBbGlnbm1lbnQgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdG90YWxzUm93W2pdIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -41,9 +41,9 @@ export class PepInternalMenuComponent {
41
41
  // this.menuItemClick.emit({ key: itemKey });
42
42
  }
43
43
  }
44
- PepInternalMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepInternalMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
- PepInternalMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepInternalMenuComponent, selector: "pep-internal-menu", inputs: { key: "key", label: "label", disabled: "disabled", xAlignment: "xAlignment", options: "options", layoutType: "layoutType" }, outputs: { elementClick: "elementClick" }, ngImport: i0, template: "<ng-container *ngIf=\"options?.length > 0; then subMenuBlock; else noSubMenuBlock\"></ng-container>\n<ng-template #noSubMenuBlock>\n <button (click)=\"menuClicked($event)\" title=\"{{ label }}\" mat-button\n class=\"pep-button icon-button weak special {{ layoutType === 'table' ? 'sm' : 'md' }}\" [ngClass]=\"{\n 'lock-events': disabled,\n 'left-alignment': xAlignment == 'left',\n 'right-alignment': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\">\n <mat-icon>\n <pep-icon name=\"system_menu\">\n </pep-icon>\n </mat-icon>\n </button>\n</ng-template>\n\n<ng-template #subMenuBlock>\n <button mat-button [matMenuTriggerFor]=\"menu\" menu-blur\n class=\"pep-button icon-button weak special {{ layoutType === 'table' ? 'sm' : 'md' }}\" [ngClass]=\"{\n 'left-alignment': xAlignment == 'left',\n 'right-alignment': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\" title=\"{{ label }}\">\n <mat-icon>\n <pep-icon name=\"system_menu\">\n </pep-icon>\n </mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" xPosition=\"{{xAlignment == 'right' ? 'after' : 'before'}}\"\n [ngClass]=\"{ rtlMenu: xAlignment == 'right' }\">\n <button *ngFor=\"let option of options\" mat-menu-item (click)=\"menuItemClicked(option.key)\">\n <span>{{ option.value | translate }}</span>\n </button>\n </mat-menu>\n\n</ng-template>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center}.pepperi-button,.pep-button{cursor:pointer}.pepperi-button.left-alignment,.pep-button.left-alignment{justify-self:flex-start}.pepperi-button.center-alignment,.pep-button.center-alignment{justify-self:center}.pepperi-button.right-alignment,.pep-button.right-alignment{justify-self:flex-end}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepInternalMenuComponent, decorators: [{
44
+ PepInternalMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PepInternalMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ PepInternalMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PepInternalMenuComponent, selector: "pep-internal-menu", inputs: { key: "key", label: "label", disabled: "disabled", xAlignment: "xAlignment", options: "options", layoutType: "layoutType" }, outputs: { elementClick: "elementClick" }, ngImport: i0, template: "<ng-container *ngIf=\"options?.length > 0; then subMenuBlock; else noSubMenuBlock\"></ng-container>\n<ng-template #noSubMenuBlock>\n <button (click)=\"menuClicked($event)\" title=\"{{ label }}\" mat-button\n class=\"pep-button icon-button weak special {{ layoutType === 'table' ? 'sm' : 'md' }}\" [ngClass]=\"{\n 'lock-events': disabled,\n 'left-alignment': xAlignment == 'left',\n 'right-alignment': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\">\n <mat-icon>\n <pep-icon name=\"system_menu\">\n </pep-icon>\n </mat-icon>\n </button>\n</ng-template>\n\n<ng-template #subMenuBlock>\n <button mat-button [matMenuTriggerFor]=\"menu\" menu-blur\n class=\"pep-button icon-button weak special {{ layoutType === 'table' ? 'sm' : 'md' }}\" [ngClass]=\"{\n 'left-alignment': xAlignment == 'left',\n 'right-alignment': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\" title=\"{{ label }}\">\n <mat-icon>\n <pep-icon name=\"system_menu\">\n </pep-icon>\n </mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" xPosition=\"{{xAlignment == 'right' ? 'after' : 'before'}}\"\n [ngClass]=\"{ rtlMenu: xAlignment == 'right' }\">\n <button *ngFor=\"let option of options\" mat-menu-item (click)=\"menuItemClicked(option.key)\">\n <span>{{ option.value | translate }}</span>\n </button>\n </mat-menu>\n\n</ng-template>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center}.pepperi-button,.pep-button{cursor:pointer}.pepperi-button.left-alignment,.pep-button.left-alignment{justify-self:flex-start}.pepperi-button.center-alignment,.pep-button.center-alignment{justify-self:center}.pepperi-button.right-alignment,.pep-button.right-alignment{justify-self:flex-end}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PepInternalMenuComponent, decorators: [{
47
47
  type: Component,
48
48
  args: [{ selector: 'pep-internal-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"options?.length > 0; then subMenuBlock; else noSubMenuBlock\"></ng-container>\n<ng-template #noSubMenuBlock>\n <button (click)=\"menuClicked($event)\" title=\"{{ label }}\" mat-button\n class=\"pep-button icon-button weak special {{ layoutType === 'table' ? 'sm' : 'md' }}\" [ngClass]=\"{\n 'lock-events': disabled,\n 'left-alignment': xAlignment == 'left',\n 'right-alignment': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\">\n <mat-icon>\n <pep-icon name=\"system_menu\">\n </pep-icon>\n </mat-icon>\n </button>\n</ng-template>\n\n<ng-template #subMenuBlock>\n <button mat-button [matMenuTriggerFor]=\"menu\" menu-blur\n class=\"pep-button icon-button weak special {{ layoutType === 'table' ? 'sm' : 'md' }}\" [ngClass]=\"{\n 'left-alignment': xAlignment == 'left',\n 'right-alignment': xAlignment == 'right',\n 'center-alignment': xAlignment == 'center'\n }\" title=\"{{ label }}\">\n <mat-icon>\n <pep-icon name=\"system_menu\">\n </pep-icon>\n </mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" xPosition=\"{{xAlignment == 'right' ? 'after' : 'before'}}\"\n [ngClass]=\"{ rtlMenu: xAlignment == 'right' }\">\n <button *ngFor=\"let option of options\" mat-menu-item (click)=\"menuItemClicked(option.key)\">\n <span>{{ option.value | translate }}</span>\n </button>\n </mat-menu>\n\n</ng-template>", styles: [":host{height:inherit;display:grid}:host>*{align-self:center}.pepperi-button,.pep-button{cursor:pointer}.pepperi-button.left-alignment,.pep-button.left-alignment{justify-self:flex-start}.pepperi-button.center-alignment,.pep-button.center-alignment{justify-self:center}.pepperi-button.right-alignment,.pep-button.right-alignment{justify-self:flex-end}\n"] }]
49
49
  }], propDecorators: { key: [{
@@ -61,4 +61,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
61
61
  }], elementClick: [{
62
62
  type: Output
63
63
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLHVCQUF1QixHQUUxQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUgsNEJBQTRCLEdBRS9CLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7O0FBUWpDLE1BQU0sT0FBTyx3QkFBd0I7SUFOckM7UUFPYSxRQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUEyQiw0QkFBNEIsQ0FBQztRQUMzRSwrQkFBK0I7UUFDdEIsWUFBTyxHQUFpQixFQUFFLENBQUM7UUFDcEMsK0JBQStCO1FBRS9CLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBRVosZUFBVSxHQUFrQixNQUFNLENBQUM7UUFFNUMsaUJBQVksR0FBc0MsSUFBSSxZQUFZLEVBQXVCLENBQUM7S0F3QjdGO0lBdkJHLHdHQUF3RztJQUV4RyxXQUFXO1FBQ1AsMkJBQTJCO1FBQzNCLHVDQUF1QztRQUN2QyxJQUFJO1FBQ0osNEJBQTRCO1FBQzVCLHdDQUF3QztRQUN4QyxJQUFJO0lBQ1IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ25CLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixVQUFVLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZO1FBQ3hCLGtEQUFrRDtRQUNsRCw2Q0FBNkM7SUFDakQsQ0FBQzs7cUhBcENRLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDBPQ3ZCckMsK2lEQW9DYzsyRkRiRCx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0ksbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVOLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwTGF5b3V0VHlwZSxcbiAgICBJUGVwT3B0aW9uLFxuICAgIFBlcEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBJUGVwRmllbGRDbGlja0V2ZW50LFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWludGVybmFsLW1lbnUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnRlcm5hbC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbnRlcm5hbC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEludGVybmFsTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkga2V5ID0gJyc7XG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHhBbGlnbm1lbnQ6IFBlcEhvcml6b250YWxBbGlnbm1lbnQgPSBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5UO1xuICAgIC8vIEBJbnB1dCgpIGhhc1N1Yk1lbnUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBvcHRpb25zOiBJUGVwT3B0aW9uW10gPSBbXTtcbiAgICAvLyBASW5wdXQoKSBpbnZlcnRDbGFzcyA9IHRydWU7XG5cbiAgICBjb250cm9sVHlwZSA9ICdtZW51JztcblxuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IFBlcExheW91dFR5cGUgPSAnZm9ybSc7XG4gICAgQE91dHB1dCgpXG4gICAgZWxlbWVudENsaWNrOiBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGaWVsZENsaWNrRXZlbnQ+KCk7XG4gICAgLy8gQE91dHB1dCgpIG1lbnVJdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4oKTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAodGhpcy5lbGVtZW50Q2xpY2spIHtcbiAgICAgICAgLy8gICAgIHRoaXMuZWxlbWVudENsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHRoaXMubWVudUl0ZW1DbGljaykge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51SXRlbUNsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBtZW51Q2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnVJdGVtQ2xpY2tlZChpdGVtS2V5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gTm90IGluIHVzZSBjb21tZW50IGluIHZlcnNpb24gMTYuNTUgZm9yIHdlYmFwcC5cbiAgICAgICAgLy8gdGhpcy5tZW51SXRlbUNsaWNrLmVtaXQoeyBrZXk6IGl0ZW1LZXkgfSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnM/Lmxlbmd0aCA+IDA7IHRoZW4gc3ViTWVudUJsb2NrOyBlbHNlIG5vU3ViTWVudUJsb2NrXCI+PC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI25vU3ViTWVudUJsb2NrPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm1lbnVDbGlja2VkKCRldmVudClcIiB0aXRsZT1cInt7IGxhYmVsIH19XCIgbWF0LWJ1dHRvblxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gd2VhayBzcGVjaWFsIHt7IGxheW91dFR5cGUgPT09ICd0YWJsZScgPyAnc20nIDogJ21kJyB9fVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdsb2NrLWV2ZW50cyc6IGRpc2FibGVkLFxuICAgICAgICAgICAgJ2xlZnQtYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAnbGVmdCcsXG4gICAgICAgICAgICAncmlnaHQtYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAncmlnaHQnLFxuICAgICAgICAgICAgJ2NlbnRlci1hbGlnbm1lbnQnOiB4QWxpZ25tZW50ID09ICdjZW50ZXInXG4gICAgICAgIH1cIj5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPHBlcC1pY29uIG5hbWU9XCJzeXN0ZW1fbWVudVwiPlxuICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3ViTWVudUJsb2NrPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIG1lbnUtYmx1clxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gd2VhayBzcGVjaWFsIHt7IGxheW91dFR5cGUgPT09ICd0YWJsZScgPyAnc20nIDogJ21kJyB9fVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdsZWZ0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgPT0gJ2xlZnQnLFxuICAgICAgICAgICAgJ3JpZ2h0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JyxcbiAgICAgICAgICAgICdjZW50ZXItYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAnY2VudGVyJ1xuICAgICAgICB9XCIgdGl0bGU9XCJ7eyBsYWJlbCB9fVwiPlxuICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cInN5c3RlbV9tZW51XCI+XG4gICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cInt7eEFsaWdubWVudCA9PSAncmlnaHQnID8gJ2FmdGVyJyA6ICdiZWZvcmUnfX1cIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHJ0bE1lbnU6IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JyB9XCI+XG4gICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibWVudUl0ZW1DbGlja2VkKG9wdGlvbi5rZXkpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBvcHRpb24udmFsdWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LW1lbnU+XG5cbjwvbmctdGVtcGxhdGU+Il19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vaW50ZXJuYWwtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLHVCQUF1QixHQUUxQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUgsNEJBQTRCLEdBRS9CLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7O0FBUWpDLE1BQU0sT0FBTyx3QkFBd0I7SUFOckM7UUFPYSxRQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUEyQiw0QkFBNEIsQ0FBQztRQUMzRSwrQkFBK0I7UUFDdEIsWUFBTyxHQUFpQixFQUFFLENBQUM7UUFDcEMsK0JBQStCO1FBRS9CLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBRVosZUFBVSxHQUFrQixNQUFNLENBQUM7UUFFNUMsaUJBQVksR0FBc0MsSUFBSSxZQUFZLEVBQXVCLENBQUM7S0F3QjdGO0lBdkJHLHdHQUF3RztJQUV4RyxXQUFXO1FBQ1AsMkJBQTJCO1FBQzNCLHVDQUF1QztRQUN2QyxJQUFJO1FBQ0osNEJBQTRCO1FBQzVCLHdDQUF3QztRQUN4QyxJQUFJO0lBQ1IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ25CLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixVQUFVLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZO1FBQ3hCLGtEQUFrRDtRQUNsRCw2Q0FBNkM7SUFDakQsQ0FBQzs7c0hBcENRLHdCQUF3QjswR0FBeEIsd0JBQXdCLDBPQ3ZCckMsK2lEQW9DYzs0RkRiRCx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0ksbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVOLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwTGF5b3V0VHlwZSxcbiAgICBJUGVwT3B0aW9uLFxuICAgIFBlcEhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBJUGVwRmllbGRDbGlja0V2ZW50LFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWludGVybmFsLW1lbnUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnRlcm5hbC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbnRlcm5hbC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEludGVybmFsTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkga2V5ID0gJyc7XG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHhBbGlnbm1lbnQ6IFBlcEhvcml6b250YWxBbGlnbm1lbnQgPSBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5UO1xuICAgIC8vIEBJbnB1dCgpIGhhc1N1Yk1lbnUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBvcHRpb25zOiBJUGVwT3B0aW9uW10gPSBbXTtcbiAgICAvLyBASW5wdXQoKSBpbnZlcnRDbGFzcyA9IHRydWU7XG5cbiAgICBjb250cm9sVHlwZSA9ICdtZW51JztcblxuICAgIEBJbnB1dCgpIGxheW91dFR5cGU6IFBlcExheW91dFR5cGUgPSAnZm9ybSc7XG4gICAgQE91dHB1dCgpXG4gICAgZWxlbWVudENsaWNrOiBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGaWVsZENsaWNrRXZlbnQ+KCk7XG4gICAgLy8gQE91dHB1dCgpIG1lbnVJdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4oKTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAodGhpcy5lbGVtZW50Q2xpY2spIHtcbiAgICAgICAgLy8gICAgIHRoaXMuZWxlbWVudENsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKHRoaXMubWVudUl0ZW1DbGljaykge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51SXRlbUNsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBtZW51Q2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnVJdGVtQ2xpY2tlZChpdGVtS2V5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gTm90IGluIHVzZSBjb21tZW50IGluIHZlcnNpb24gMTYuNTUgZm9yIHdlYmFwcC5cbiAgICAgICAgLy8gdGhpcy5tZW51SXRlbUNsaWNrLmVtaXQoeyBrZXk6IGl0ZW1LZXkgfSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnM/Lmxlbmd0aCA+IDA7IHRoZW4gc3ViTWVudUJsb2NrOyBlbHNlIG5vU3ViTWVudUJsb2NrXCI+PC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI25vU3ViTWVudUJsb2NrPlxuICAgIDxidXR0b24gKGNsaWNrKT1cIm1lbnVDbGlja2VkKCRldmVudClcIiB0aXRsZT1cInt7IGxhYmVsIH19XCIgbWF0LWJ1dHRvblxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gd2VhayBzcGVjaWFsIHt7IGxheW91dFR5cGUgPT09ICd0YWJsZScgPyAnc20nIDogJ21kJyB9fVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdsb2NrLWV2ZW50cyc6IGRpc2FibGVkLFxuICAgICAgICAgICAgJ2xlZnQtYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAnbGVmdCcsXG4gICAgICAgICAgICAncmlnaHQtYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAncmlnaHQnLFxuICAgICAgICAgICAgJ2NlbnRlci1hbGlnbm1lbnQnOiB4QWxpZ25tZW50ID09ICdjZW50ZXInXG4gICAgICAgIH1cIj5cbiAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgPHBlcC1pY29uIG5hbWU9XCJzeXN0ZW1fbWVudVwiPlxuICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3ViTWVudUJsb2NrPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIG1lbnUtYmx1clxuICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gd2VhayBzcGVjaWFsIHt7IGxheW91dFR5cGUgPT09ICd0YWJsZScgPyAnc20nIDogJ21kJyB9fVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdsZWZ0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgPT0gJ2xlZnQnLFxuICAgICAgICAgICAgJ3JpZ2h0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JyxcbiAgICAgICAgICAgICdjZW50ZXItYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAnY2VudGVyJ1xuICAgICAgICB9XCIgdGl0bGU9XCJ7eyBsYWJlbCB9fVwiPlxuICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cInN5c3RlbV9tZW51XCI+XG4gICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cInt7eEFsaWdubWVudCA9PSAncmlnaHQnID8gJ2FmdGVyJyA6ICdiZWZvcmUnfX1cIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHJ0bE1lbnU6IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JyB9XCI+XG4gICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibWVudUl0ZW1DbGlja2VkKG9wdGlvbi5rZXkpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBvcHRpb24udmFsdWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LW1lbnU+XG5cbjwvbmctdGVtcGxhdGU+Il19