ngx-tethys 17.0.0 → 17.0.2

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 (384) hide show
  1. package/CHANGELOG.md +26 -7
  2. package/action/action.component.d.ts +3 -0
  3. package/affix/affix.component.d.ts +2 -0
  4. package/alert/alert.component.d.ts +1 -0
  5. package/anchor/anchor.component.d.ts +3 -0
  6. package/arrow-switcher/arrow-switcher.component.d.ts +1 -0
  7. package/autocomplete/autocomplete.component.d.ts +2 -3
  8. package/autocomplete/autocomplete.trigger.directive.d.ts +3 -0
  9. package/avatar/avatar.component.d.ts +4 -0
  10. package/back-top/back-top.component.d.ts +1 -0
  11. package/badge/badge.component.d.ts +5 -0
  12. package/button/button-icon.component.d.ts +2 -0
  13. package/button/button.component.d.ts +2 -0
  14. package/card/card.component.d.ts +3 -0
  15. package/card/content.component.d.ts +2 -1
  16. package/carousel/carousel.component.d.ts +5 -0
  17. package/cascader/cascader-li.component.d.ts +9 -2
  18. package/cascader/cascader-search-option.component.d.ts +7 -2
  19. package/cascader/cascader.component.d.ts +23 -2
  20. package/cascader/styles/cascader.scss +1 -0
  21. package/cascader/types.d.ts +1 -0
  22. package/checkbox/checkbox.component.d.ts +1 -0
  23. package/collapse/collapse-item.component.d.ts +2 -0
  24. package/collapse/collapse.component.d.ts +1 -0
  25. package/color-picker/color-picker-panel.component.d.ts +1 -0
  26. package/color-picker/color-picker.component.d.ts +7 -1
  27. package/copy/copy.directive.d.ts +1 -0
  28. package/core/behaviors/decorators.d.ts +6 -0
  29. package/date-picker/abstract-picker.component.d.ts +8 -1
  30. package/date-picker/abstract-picker.directive.d.ts +4 -0
  31. package/date-picker/base-picker.component.d.ts +2 -0
  32. package/date-picker/lib/calendar/calendar-footer.component.d.ts +1 -0
  33. package/date-picker/lib/popups/inner-popup.component.d.ts +1 -0
  34. package/date-picker/picker.component.d.ts +1 -0
  35. package/date-range/date-range.component.d.ts +2 -0
  36. package/dialog/body/dialog-body.component.d.ts +2 -1
  37. package/dialog/footer/dialog-footer.component.d.ts +1 -0
  38. package/dialog/header/dialog-header.component.d.ts +1 -0
  39. package/divider/divider.component.d.ts +2 -0
  40. package/drag-drop/drag-handle.directive.d.ts +1 -0
  41. package/drag-drop/drag.directive.d.ts +1 -0
  42. package/drag-drop/drop-container.directive.d.ts +1 -0
  43. package/dropdown/dropdown-menu-item.directive.d.ts +3 -1
  44. package/dropdown/dropdown-menu.component.d.ts +1 -0
  45. package/dropdown/dropdown.directive.d.ts +3 -0
  46. package/empty/empty.component.d.ts +1 -0
  47. package/esm2022/action/action.component.mjs +9 -22
  48. package/esm2022/affix/affix.component.mjs +8 -15
  49. package/esm2022/alert/alert.component.mjs +5 -10
  50. package/esm2022/anchor/anchor.component.mjs +10 -20
  51. package/esm2022/arrow-switcher/arrow-switcher.component.mjs +5 -11
  52. package/esm2022/autocomplete/autocomplete.component.mjs +5 -23
  53. package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +9 -20
  54. package/esm2022/avatar/avatar.component.mjs +14 -30
  55. package/esm2022/back-top/back-top.component.mjs +6 -10
  56. package/esm2022/badge/badge.component.mjs +15 -37
  57. package/esm2022/button/button-icon.component.mjs +9 -20
  58. package/esm2022/button/button.component.mjs +7 -16
  59. package/esm2022/card/card.component.mjs +6 -20
  60. package/esm2022/card/content.component.mjs +5 -6
  61. package/esm2022/carousel/carousel.component.mjs +13 -30
  62. package/esm2022/cascader/cascader-li.component.mjs +16 -31
  63. package/esm2022/cascader/cascader-search-option.component.mjs +12 -21
  64. package/esm2022/cascader/cascader.component.mjs +32 -52
  65. package/esm2022/cascader/types.mjs +1 -1
  66. package/esm2022/checkbox/checkbox.component.mjs +7 -13
  67. package/esm2022/collapse/collapse-item.component.mjs +8 -15
  68. package/esm2022/collapse/collapse.component.mjs +5 -10
  69. package/esm2022/color-picker/color-picker-panel.component.mjs +5 -10
  70. package/esm2022/color-picker/color-picker.component.mjs +17 -37
  71. package/esm2022/copy/copy.directive.mjs +5 -10
  72. package/esm2022/core/behaviors/decorators.mjs +7 -44
  73. package/esm2022/date-picker/abstract-picker.component.mjs +21 -45
  74. package/esm2022/date-picker/abstract-picker.directive.mjs +11 -27
  75. package/esm2022/date-picker/base-picker.component.mjs +8 -15
  76. package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -10
  77. package/esm2022/date-picker/lib/popups/date-popup.component.mjs +4 -2
  78. package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +7 -6
  79. package/esm2022/date-picker/picker.component.mjs +6 -10
  80. package/esm2022/date-range/date-range.component.mjs +7 -15
  81. package/esm2022/dialog/body/dialog-body.component.mjs +6 -6
  82. package/esm2022/dialog/footer/dialog-footer.component.mjs +6 -13
  83. package/esm2022/dialog/header/dialog-header.component.mjs +6 -10
  84. package/esm2022/divider/divider.component.mjs +7 -15
  85. package/esm2022/drag-drop/drag-handle.directive.mjs +5 -13
  86. package/esm2022/drag-drop/drag.directive.mjs +5 -11
  87. package/esm2022/drag-drop/drop-container.directive.mjs +5 -10
  88. package/esm2022/dropdown/dropdown-menu-item.directive.mjs +9 -19
  89. package/esm2022/dropdown/dropdown-menu.component.mjs +6 -9
  90. package/esm2022/dropdown/dropdown.directive.mjs +8 -22
  91. package/esm2022/empty/empty.component.mjs +7 -13
  92. package/esm2022/flexible-text/flexible-text.component.mjs +4 -11
  93. package/esm2022/form/form-group-error/form-group-error.component.mjs +5 -10
  94. package/esm2022/form/form-group-label.directive.mjs +6 -6
  95. package/esm2022/form/form-group.component.mjs +13 -17
  96. package/esm2022/icon/icon.component.mjs +6 -20
  97. package/esm2022/image/image.directive.mjs +7 -15
  98. package/esm2022/input/input-search.component.mjs +6 -11
  99. package/esm2022/input/input.component.mjs +7 -15
  100. package/esm2022/input-number/input-number.component.mjs +12 -25
  101. package/esm2022/layout/header.component.mjs +9 -19
  102. package/esm2022/layout/sidebar-header.component.mjs +5 -10
  103. package/esm2022/layout/sidebar.component.mjs +22 -45
  104. package/esm2022/list/list.component.mjs +5 -11
  105. package/esm2022/list/selection/selection-list.mjs +13 -10
  106. package/esm2022/loading/loading.component.mjs +9 -20
  107. package/esm2022/menu/group/menu-group.component.mjs +12 -38
  108. package/esm2022/menu/item/action/menu-item-action.component.mjs +5 -10
  109. package/esm2022/menu/item/name/menu-item-name.component.mjs +5 -10
  110. package/esm2022/menu/menu.component.mjs +5 -10
  111. package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +6 -6
  112. package/esm2022/nav/nav-ink-bar.directive.mjs +7 -15
  113. package/esm2022/nav/nav-item.directive.mjs +10 -20
  114. package/esm2022/nav/nav.component.mjs +12 -25
  115. package/esm2022/pagination/pagination.component.mjs +18 -68
  116. package/esm2022/popover/popover.directive.mjs +12 -33
  117. package/esm2022/progress/progress-circle.component.mjs +9 -20
  118. package/esm2022/progress/progress-strip.component.mjs +5 -11
  119. package/esm2022/progress/progress.component.mjs +11 -23
  120. package/esm2022/property/properties.component.mjs +5 -10
  121. package/esm2022/property/property-item.component.mjs +8 -15
  122. package/esm2022/property-operation/property-operation.component.mjs +16 -37
  123. package/esm2022/radio/group/radio-group.component.mjs +6 -21
  124. package/esm2022/rate/rate-item.component.mjs +5 -10
  125. package/esm2022/rate/rate.component.mjs +16 -25
  126. package/esm2022/resizable/resizable.directive.mjs +24 -62
  127. package/esm2022/resizable/resize-handle.component.mjs +6 -10
  128. package/esm2022/resizable/resize-handles.component.mjs +5 -10
  129. package/esm2022/segment/segment-item.component.mjs +5 -10
  130. package/esm2022/segment/segment.component.mjs +7 -16
  131. package/esm2022/select/custom-select/custom-select.component.mjs +30 -65
  132. package/esm2022/select/native-select/native-select.component.mjs +6 -10
  133. package/esm2022/shared/base-form-check.component.mjs +10 -20
  134. package/esm2022/shared/directives/thy-autofocus.directive.mjs +10 -15
  135. package/esm2022/shared/directives/thy-scroll.directive.mjs +6 -13
  136. package/esm2022/shared/directives/thy-show.mjs +5 -11
  137. package/esm2022/shared/option/group/option-group.component.mjs +5 -10
  138. package/esm2022/shared/option/list-option/list-option.component.mjs +6 -13
  139. package/esm2022/shared/option/option.component.mjs +5 -11
  140. package/esm2022/shared/select/select-control/select-control.component.mjs +17 -44
  141. package/esm2022/skeleton/skeleton-circle.component.mjs +6 -9
  142. package/esm2022/skeleton/skeleton-rectangle.component.mjs +6 -9
  143. package/esm2022/skeleton/skeleton.component.mjs +5 -10
  144. package/esm2022/skeleton/stylized/bullet-list.component.mjs +6 -9
  145. package/esm2022/skeleton/stylized/list.component.mjs +6 -9
  146. package/esm2022/skeleton/stylized/paragraph.component.mjs +6 -9
  147. package/esm2022/slide/slide-body/slide-body-section.component.mjs +6 -6
  148. package/esm2022/slider/slider.component.mjs +18 -35
  149. package/esm2022/space/space.component.mjs +6 -10
  150. package/esm2022/stepper/step-header.component.mjs +9 -20
  151. package/esm2022/stepper/stepper.component.mjs +7 -16
  152. package/esm2022/switch/switch.component.mjs +12 -17
  153. package/esm2022/table/table-column.component.mjs +9 -31
  154. package/esm2022/table/table-skeleton.component.mjs +8 -14
  155. package/esm2022/table/table.component.mjs +32 -83
  156. package/esm2022/tabs/tab.component.mjs +5 -10
  157. package/esm2022/tabs/tabs.component.mjs +8 -15
  158. package/esm2022/tag/tag.component.mjs +6 -10
  159. package/esm2022/time-picker/time-picker-panel.component.mjs +8 -15
  160. package/esm2022/time-picker/time-picker.component.mjs +20 -46
  161. package/esm2022/timeline/timeline.component.mjs +5 -10
  162. package/esm2022/tooltip/tooltip.directive.mjs +11 -34
  163. package/esm2022/tree/tree-node.component.mjs +17 -40
  164. package/esm2022/tree/tree.component.mjs +19 -47
  165. package/esm2022/tree-select/tree-select.component.mjs +18 -40
  166. package/esm2022/upload/file-select-base.mjs +7 -6
  167. package/esm2022/upload/file-select.component.mjs +11 -26
  168. package/esm2022/version.mjs +2 -2
  169. package/esm2022/vote/vote.component.mjs +11 -33
  170. package/esm2022/watermark/watermark.directive.mjs +6 -10
  171. package/fesm2022/ngx-tethys-action.mjs +9 -21
  172. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  173. package/fesm2022/ngx-tethys-affix.mjs +6 -14
  174. package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
  175. package/fesm2022/ngx-tethys-alert.mjs +4 -9
  176. package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
  177. package/fesm2022/ngx-tethys-anchor.mjs +8 -19
  178. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  179. package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -10
  180. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  181. package/fesm2022/ngx-tethys-autocomplete.mjs +14 -39
  182. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  183. package/fesm2022/ngx-tethys-avatar.mjs +14 -29
  184. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  185. package/fesm2022/ngx-tethys-back-top.mjs +5 -9
  186. package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
  187. package/fesm2022/ngx-tethys-badge.mjs +14 -36
  188. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  189. package/fesm2022/ngx-tethys-button.mjs +13 -30
  190. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  191. package/fesm2022/ngx-tethys-card.mjs +8 -23
  192. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  193. package/fesm2022/ngx-tethys-carousel.mjs +12 -29
  194. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  195. package/fesm2022/ngx-tethys-cascader.mjs +55 -95
  196. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  197. package/fesm2022/ngx-tethys-checkbox.mjs +5 -12
  198. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  199. package/fesm2022/ngx-tethys-collapse.mjs +10 -20
  200. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  201. package/fesm2022/ngx-tethys-color-picker.mjs +19 -42
  202. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  203. package/fesm2022/ngx-tethys-copy.mjs +4 -9
  204. package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
  205. package/fesm2022/ngx-tethys-core.mjs +6 -43
  206. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  207. package/fesm2022/ngx-tethys-date-picker.mjs +48 -94
  208. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  209. package/fesm2022/ngx-tethys-date-range.mjs +6 -14
  210. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  211. package/fesm2022/ngx-tethys-dialog.mjs +13 -21
  212. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  213. package/fesm2022/ngx-tethys-divider.mjs +6 -14
  214. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  215. package/fesm2022/ngx-tethys-drag-drop.mjs +10 -25
  216. package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
  217. package/fesm2022/ngx-tethys-dropdown.mjs +19 -42
  218. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  219. package/fesm2022/ngx-tethys-empty.mjs +5 -12
  220. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  221. package/fesm2022/ngx-tethys-flexible-text.mjs +3 -10
  222. package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
  223. package/fesm2022/ngx-tethys-form.mjs +19 -25
  224. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  225. package/fesm2022/ngx-tethys-icon.mjs +5 -19
  226. package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
  227. package/fesm2022/ngx-tethys-image.mjs +7 -14
  228. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  229. package/fesm2022/ngx-tethys-input-number.mjs +11 -24
  230. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  231. package/fesm2022/ngx-tethys-input.mjs +10 -21
  232. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  233. package/fesm2022/ngx-tethys-layout.mjs +31 -64
  234. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  235. package/fesm2022/ngx-tethys-list.mjs +16 -18
  236. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  237. package/fesm2022/ngx-tethys-loading.mjs +8 -19
  238. package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
  239. package/fesm2022/ngx-tethys-menu.mjs +20 -55
  240. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  241. package/fesm2022/ngx-tethys-nav.mjs +28 -55
  242. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  243. package/fesm2022/ngx-tethys-pagination.mjs +17 -67
  244. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  245. package/fesm2022/ngx-tethys-popover.mjs +11 -32
  246. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  247. package/fesm2022/ngx-tethys-progress.mjs +20 -45
  248. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  249. package/fesm2022/ngx-tethys-property-operation.mjs +14 -36
  250. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  251. package/fesm2022/ngx-tethys-property.mjs +10 -21
  252. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  253. package/fesm2022/ngx-tethys-radio.mjs +5 -19
  254. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  255. package/fesm2022/ngx-tethys-rate.mjs +18 -30
  256. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  257. package/fesm2022/ngx-tethys-resizable.mjs +29 -73
  258. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  259. package/fesm2022/ngx-tethys-segment.mjs +10 -21
  260. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  261. package/fesm2022/ngx-tethys-select.mjs +32 -70
  262. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  263. package/fesm2022/ngx-tethys-shared.mjs +49 -105
  264. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  265. package/fesm2022/ngx-tethys-skeleton.mjs +20 -38
  266. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  267. package/fesm2022/ngx-tethys-slide.mjs +6 -5
  268. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  269. package/fesm2022/ngx-tethys-slider.mjs +17 -34
  270. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  271. package/fesm2022/ngx-tethys-space.mjs +5 -9
  272. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  273. package/fesm2022/ngx-tethys-stepper.mjs +13 -31
  274. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  275. package/fesm2022/ngx-tethys-switch.mjs +11 -16
  276. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  277. package/fesm2022/ngx-tethys-table.mjs +43 -120
  278. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  279. package/fesm2022/ngx-tethys-tabs.mjs +10 -20
  280. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  281. package/fesm2022/ngx-tethys-tag.mjs +5 -9
  282. package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
  283. package/fesm2022/ngx-tethys-time-picker.mjs +24 -55
  284. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  285. package/fesm2022/ngx-tethys-timeline.mjs +4 -9
  286. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  287. package/fesm2022/ngx-tethys-tooltip.mjs +10 -33
  288. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  289. package/fesm2022/ngx-tethys-tree-select.mjs +17 -39
  290. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  291. package/fesm2022/ngx-tethys-tree.mjs +33 -82
  292. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  293. package/fesm2022/ngx-tethys-upload.mjs +15 -28
  294. package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
  295. package/fesm2022/ngx-tethys-vote.mjs +10 -32
  296. package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
  297. package/fesm2022/ngx-tethys-watermark.mjs +5 -9
  298. package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
  299. package/fesm2022/ngx-tethys.mjs +1 -1
  300. package/fesm2022/ngx-tethys.mjs.map +1 -1
  301. package/flexible-text/flexible-text.component.d.ts +1 -0
  302. package/form/form-group-error/form-group-error.component.d.ts +1 -0
  303. package/form/form-group-label.directive.d.ts +2 -1
  304. package/form/form-group.component.d.ts +5 -2
  305. package/icon/icon.component.d.ts +3 -0
  306. package/image/image.directive.d.ts +2 -0
  307. package/input/input-search.component.d.ts +1 -0
  308. package/input/input.component.d.ts +2 -0
  309. package/input-number/input-number.component.d.ts +4 -0
  310. package/layout/header.component.d.ts +5 -2
  311. package/layout/sidebar-header.component.d.ts +1 -0
  312. package/layout/sidebar.component.d.ts +14 -4
  313. package/list/list.component.d.ts +1 -0
  314. package/list/selection/selection-list.d.ts +4 -1
  315. package/loading/loading.component.d.ts +4 -2
  316. package/menu/group/menu-group.component.d.ts +6 -0
  317. package/menu/item/action/menu-item-action.component.d.ts +1 -0
  318. package/menu/item/name/menu-item-name.component.d.ts +1 -0
  319. package/menu/menu.component.d.ts +1 -0
  320. package/nav/icon-nav/icon-nav-link.directive.d.ts +2 -1
  321. package/nav/nav-ink-bar.directive.d.ts +2 -0
  322. package/nav/nav-item.directive.d.ts +3 -0
  323. package/nav/nav.component.d.ts +4 -0
  324. package/package.json +7 -7
  325. package/pagination/pagination.component.d.ts +11 -0
  326. package/popover/popover.directive.d.ts +5 -0
  327. package/progress/progress-circle.component.d.ts +3 -0
  328. package/progress/progress-strip.component.d.ts +1 -0
  329. package/progress/progress.component.d.ts +3 -0
  330. package/property/properties.component.d.ts +1 -0
  331. package/property/property-item.component.d.ts +2 -0
  332. package/property-operation/property-operation.component.d.ts +5 -0
  333. package/radio/group/radio-group.component.d.ts +2 -2
  334. package/rate/rate-item.component.d.ts +1 -0
  335. package/rate/rate.component.d.ts +5 -1
  336. package/resizable/resizable.directive.d.ts +10 -1
  337. package/resizable/resize-handle.component.d.ts +1 -0
  338. package/resizable/resize-handles.component.d.ts +1 -0
  339. package/resizable/styles/resizable.scss +1 -0
  340. package/schematics/dependencies.js +1 -1
  341. package/schematics/version.d.ts +1 -1
  342. package/schematics/version.js +1 -1
  343. package/segment/segment-item.component.d.ts +1 -0
  344. package/segment/segment.component.d.ts +2 -0
  345. package/select/custom-select/custom-select.component.d.ts +12 -1
  346. package/select/native-select/native-select.component.d.ts +1 -0
  347. package/shared/base-form-check.component.d.ts +2 -0
  348. package/shared/directives/thy-autofocus.directive.d.ts +3 -1
  349. package/shared/directives/thy-scroll.directive.d.ts +1 -0
  350. package/shared/directives/thy-show.d.ts +1 -0
  351. package/shared/option/group/option-group.component.d.ts +1 -0
  352. package/shared/option/list-option/list-option.component.d.ts +1 -0
  353. package/shared/option/option.component.d.ts +1 -0
  354. package/shared/option/styles/select-dropdown.scss +1 -0
  355. package/shared/select/select-control/select-control.component.d.ts +7 -0
  356. package/skeleton/skeleton-circle.component.d.ts +1 -0
  357. package/skeleton/skeleton-rectangle.component.d.ts +1 -0
  358. package/skeleton/skeleton.component.d.ts +1 -0
  359. package/skeleton/stylized/bullet-list.component.d.ts +1 -0
  360. package/skeleton/stylized/list.component.d.ts +1 -0
  361. package/skeleton/stylized/paragraph.component.d.ts +1 -0
  362. package/slide/slide-body/slide-body-section.component.d.ts +2 -1
  363. package/slider/slider.component.d.ts +6 -1
  364. package/space/space.component.d.ts +1 -0
  365. package/stepper/step-header.component.d.ts +3 -0
  366. package/stepper/stepper.component.d.ts +2 -0
  367. package/switch/switch.component.d.ts +3 -1
  368. package/table/table-column.component.d.ts +7 -2
  369. package/table/table-skeleton.component.d.ts +2 -0
  370. package/table/table.component.d.ts +14 -0
  371. package/tabs/tab.component.d.ts +1 -0
  372. package/tabs/tabs.component.d.ts +2 -0
  373. package/tag/tag.component.d.ts +1 -0
  374. package/time-picker/time-picker-panel.component.d.ts +2 -0
  375. package/time-picker/time-picker.component.d.ts +6 -2
  376. package/timeline/timeline.component.d.ts +1 -0
  377. package/tooltip/tooltip.directive.d.ts +5 -0
  378. package/tree/tree-node.component.d.ts +7 -0
  379. package/tree/tree.component.d.ts +8 -0
  380. package/tree-select/tree-select.component.d.ts +7 -0
  381. package/upload/file-select-base.d.ts +1 -0
  382. package/upload/file-select.component.d.ts +3 -0
  383. package/vote/vote.component.d.ts +4 -2
  384. package/watermark/watermark.directive.d.ts +1 -0
@@ -1,10 +1,9 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { InputBoolean, MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';
1
+ import { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';
3
2
  import { ThyPopover } from 'ngx-tethys/popover';
4
3
  import { merge, Observable, of } from 'rxjs';
5
4
  import { debounceTime, take, takeUntil, tap } from 'rxjs/operators';
6
5
  import { useHostRenderer } from '@tethys/cdk/dom';
7
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, HostBinding, Input, NgZone, QueryList, TemplateRef, ViewChild } from '@angular/core';
6
+ import { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, HostBinding, Input, NgZone, QueryList, TemplateRef, ViewChild } from '@angular/core';
8
7
  import { RouterLinkActive } from '@angular/router';
9
8
  import { ThyNavInkBarDirective } from './nav-ink-bar.directive';
10
9
  import { ThyNavItemDirective } from './nav-item.directive';
@@ -296,24 +295,8 @@ export class ThyNav extends _MixinBase {
296
295
  this.ngUnsubscribe$.complete();
297
296
  }
298
297
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyNav, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.ThyPopover }], target: i0.ɵɵFactoryTarget.Component }); }
299
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: "thyType", thySize: "thySize", thyHorizontal: "thyHorizontal", thyVertical: "thyVertical", thyFill: "thyFill", thyResponsive: "thyResponsive", thyInsideClosable: "thyInsideClosable", thyExtra: "thyExtra" }, host: { properties: { "class.thy-nav--vertical": "this.thyVertical", "class.thy-nav--fill": "this.thyFill" }, classAttribute: "thy-nav" }, queries: [{ propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true }, { propertyName: "links", predicate: ThyNavItemDirective, descendants: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n <a\n *ngIf=\"thyResponsive\"\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavLinkActive]=\"moreActive\"\n (click)=\"openMore($event, navListPopover)\"\n >\n <ng-container *ngIf=\"moreOperation; else defaultMoreOperation\" [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n <ng-template #defaultMoreOperation>\n \u66F4\u591A\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n </ng-template>\n </a>\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n <ng-container\n *ngIf=\"morePopover; else default\"\n [ngTemplateOutlet]=\"morePopover\"\n [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"\n ></ng-container>\n <ng-template #default>\n <thy-dropdown-menu thyImmediateRender>\n <ng-container *ngFor=\"let item of hiddenItems\">\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"\n ></span>\n </ng-container>\n </thy-dropdown-menu>\n </ng-template>\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n\n<div *ngIf=\"thyExtra || extra\" class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
298
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.3", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: "thyType", thySize: "thySize", thyHorizontal: "thyHorizontal", thyVertical: ["thyVertical", "thyVertical", booleanAttribute], thyFill: ["thyFill", "thyFill", booleanAttribute], thyResponsive: ["thyResponsive", "thyResponsive", booleanAttribute], thyInsideClosable: ["thyInsideClosable", "thyInsideClosable", booleanAttribute], thyExtra: "thyExtra" }, host: { properties: { "class.thy-nav--vertical": "this.thyVertical", "class.thy-nav--fill": "this.thyFill" }, classAttribute: "thy-nav" }, queries: [{ propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true }, { propertyName: "links", predicate: ThyNavItemDirective, descendants: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal ? 'justify-content-' + horizontal : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n <a\n *ngIf=\"thyResponsive\"\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore\"\n [class.invisible]=\"!initialized\"\n #moreOperationContainer\n thyNavLink\n [thyNavLinkActive]=\"moreActive\"\n (click)=\"openMore($event, navListPopover)\"\n >\n <ng-container *ngIf=\"moreOperation; else defaultMoreOperation\" [ngTemplateOutlet]=\"moreOperation\"></ng-container>\n <ng-template #defaultMoreOperation>\n \u66F4\u591A\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n </ng-template>\n </a>\n <thy-nav-ink-bar [showInkBar]=\"showInkBar\" [isVertical]=\"thyVertical\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n <ng-container\n *ngIf=\"morePopover; else default\"\n [ngTemplateOutlet]=\"morePopover\"\n [ngTemplateOutletContext]=\"{ $implicit: hiddenItems }\"\n ></ng-container>\n <ng-template #default>\n <thy-dropdown-menu thyImmediateRender>\n <ng-container *ngFor=\"let item of hiddenItems\">\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"\n ></span>\n </ng-container>\n </thy-dropdown-menu>\n </ng-template>\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n\n<div *ngIf=\"thyExtra || extra\" class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra || extra\"></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
300
299
  }
301
- __decorate([
302
- InputBoolean(),
303
- __metadata("design:type", Boolean)
304
- ], ThyNav.prototype, "thyVertical", void 0);
305
- __decorate([
306
- InputBoolean(),
307
- __metadata("design:type", Boolean)
308
- ], ThyNav.prototype, "thyFill", void 0);
309
- __decorate([
310
- InputBoolean(),
311
- __metadata("design:type", Boolean)
312
- ], ThyNav.prototype, "thyResponsive", void 0);
313
- __decorate([
314
- InputBoolean(),
315
- __metadata("design:type", Object)
316
- ], ThyNav.prototype, "thyInsideClosable", void 0);
317
300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyNav, decorators: [{
318
301
  type: Component,
319
302
  args: [{ selector: 'thy-nav', host: {
@@ -341,16 +324,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
341
324
  type: HostBinding,
342
325
  args: ['class.thy-nav--vertical']
343
326
  }, {
344
- type: Input
327
+ type: Input,
328
+ args: [{ transform: booleanAttribute }]
345
329
  }], thyFill: [{
346
330
  type: HostBinding,
347
331
  args: ['class.thy-nav--fill']
348
332
  }, {
349
- type: Input
333
+ type: Input,
334
+ args: [{ transform: booleanAttribute }]
350
335
  }], thyResponsive: [{
351
- type: Input
336
+ type: Input,
337
+ args: [{ transform: booleanAttribute }]
352
338
  }], thyInsideClosable: [{
353
- type: Input
339
+ type: Input,
340
+ args: [{ transform: booleanAttribute }]
354
341
  }], thyExtra: [{
355
342
  type: Input
356
343
  }], links: [{
@@ -375,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
375
362
  type: ViewChild,
376
363
  args: [ThyNavInkBarDirective, { static: true }]
377
364
  }] } });
378
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWUsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUlILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUlOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUV6RSxNQUFNLFVBQVUsR0FBbUQsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFNL0YsTUFBTSxpQkFBaUIsR0FBRztJQUN0QixNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQixJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUM7SUFDdEIsS0FBSyxFQUFFLENBQUMsZUFBZSxDQUFDO0lBQ3hCLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUN0QixVQUFVO0lBQ1YsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDNUIsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUM7SUFDaEMsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDNUIsbUJBQW1CLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztDQUNyRCxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRztJQUN0QixFQUFFLEVBQUUsWUFBWTtJQUNoQixFQUFFLEVBQUUsWUFBWTtJQUNoQixFQUFFLEVBQUUsWUFBWTtDQUNuQixDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBRXhCOzs7O0dBSUc7QUF1QkgsTUFBTSxPQUFPLE1BQU8sU0FBUSxVQUFVO0lBdUJsQzs7OztPQUlHO0lBQ0gsSUFDSSxPQUFPLENBQUMsSUFBZ0I7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNJLE9BQU8sQ0FBQyxJQUFnQjtRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDSSxhQUFhLENBQUMsVUFBNEI7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBSSxVQUFxQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDOUUsQ0FBQztJQXlFRCxJQUFJLFVBQVU7UUFDVixNQUFNLFNBQVMsR0FBaUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDOUIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixVQUFVLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFNRCxZQUNZLFVBQXNCLEVBQ3RCLE1BQWMsRUFDZCxpQkFBb0MsRUFDcEMsT0FBbUI7UUFFM0IsS0FBSyxFQUFFLENBQUM7UUFMQSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUF6SnZCLFNBQUksR0FBZSxRQUFRLENBQUM7UUFDNUIsU0FBSSxHQUFlLElBQUksQ0FBQztRQUN6QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUdwQixrQkFBYSxHQUFpRTtZQUNqRixNQUFNLEVBQUUsQ0FBQztZQUNULEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztTQUNULENBQUM7UUFFSyxnQkFBVyxHQUEwQixFQUFFLENBQUM7UUFJeEMsYUFBUSxHQUFHLElBQUksQ0FBQztRQUVmLGtCQUFhLEdBQXNDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFM0UsaUJBQVksR0FBRyxlQUFlLEVBQUUsQ0FBQztRQStDekM7O1dBRUc7UUFJSCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBVXpCOztXQUVHO1FBR0gsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBMkRqQixvQkFBZSxHQUFXLEdBQUcsQ0FBQztJQVN0QyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsS0FBSyxDQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUNsQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2hGLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDM0csR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUNoRTtpQkFDSSxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDOUIsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDTCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNqQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQ0w7aUJBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pILElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsWUFBWTtZQUM5RCxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxXQUFXO1NBQy9ELENBQUM7SUFDTixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBb0I7UUFDckMsT0FBTyxPQUFPLGNBQWMsS0FBSyxXQUFXO1lBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ1YsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxHQUFHLEVBQUU7b0JBQ1IsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRU8sY0FBYztRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM1QyxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRU8sa0NBQWtDLENBQUMsSUFBMkI7UUFDbEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7WUFDaEksSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztnQkFDbEQsSUFBSSxVQUFVLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDOUQsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxNQUFNO1lBQ1YsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFVBQVUsR0FBRyxXQUFXLENBQUM7Z0JBQ3pCLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsSUFBMkI7UUFDaEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDMUIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN6RCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQyxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO2dCQUNwRCxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqRSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO2dCQUNELE1BQU07WUFDVixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUM7WUFDdkQsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxDQUFDO1lBQ3JELElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksQ0FBQztZQUNuRCxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLENBQUM7U0FDcEQsQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBWSxFQUFFLFFBQTBCO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN4QixNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQTRCO1lBQzFDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDdEMsU0FBUyxFQUFFLFFBQVE7WUFDbkIsVUFBVSxFQUFFLHNCQUFzQjtZQUNsQyxpQkFBaUIsRUFBRSx1QkFBdUI7U0FDN0MsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUF5QjtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLG1CQUFtQixHQUFnQixZQUFZLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFFN0YsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUM7UUFDbEUsQ0FBQztRQUNELElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUV6QyxJQUFJLE9BQU8sRUFBRSxZQUFZLEtBQUssT0FBTyxFQUFFLGFBQWEsSUFBSSxXQUFXLEVBQUUsWUFBWSxLQUFLLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUMvRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs4R0FqWFEsTUFBTTtrR0FBTixNQUFNLDRzQkFvR0UsbUJBQW1CLDZEQUtuQixnQkFBZ0IseU1BdUJ0QixxQkFBcUIsMEdDeE5wQyxzeERBa0RBLDRDRHlCUSxPQUFPLG9GQUNQLGdCQUFnQixvSkFDaEIsSUFBSSw2RkFDSixtQkFBbUIsOElBQ25CLE9BQU8sc01BQ1AscUJBQXFCLGtIQUNyQix3QkFBd0IsMEdBQ3hCLEtBQUssbUhBQ0wsNEJBQTRCLHNHQUM1QixrQ0FBa0MsMEdBQ2xDLDJCQUEyQjs7QUFxRS9CO0lBREMsWUFBWSxFQUFFOzsyQ0FDTTtBQVFyQjtJQURDLFlBQVksRUFBRTs7dUNBQ1U7QUFRekI7SUFEQyxZQUFZLEVBQUU7OzZDQUNRO0FBT3ZCO0lBREMsWUFBWSxFQUFFOztpREFDVTsyRkF6RmhCLE1BQU07a0JBdEJsQixTQUFTOytCQUNJLFNBQVMsUUFFYjt3QkFDRixLQUFLLEVBQUUsU0FBUztxQkFDbkIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNMLE9BQU87d0JBQ1AsZ0JBQWdCO3dCQUNoQixJQUFJO3dCQUNKLG1CQUFtQjt3QkFDbkIsT0FBTzt3QkFDUCxxQkFBcUI7d0JBQ3JCLHdCQUF3Qjt3QkFDeEIsS0FBSzt3QkFDTCw0QkFBNEI7d0JBQzVCLGtDQUFrQzt3QkFDbEMsMkJBQTJCO3FCQUM5Qjs2SkErQkcsT0FBTztzQkFEVixLQUFLO2dCQWNGLE9BQU87c0JBRFYsS0FBSztnQkFjRixhQUFhO3NCQURoQixLQUFLO2dCQVlOLFdBQVc7c0JBSFYsV0FBVzt1QkFBQyx5QkFBeUI7O3NCQUNyQyxLQUFLO2dCQVVOLE9BQU87c0JBSE4sV0FBVzt1QkFBQyxxQkFBcUI7O3NCQUNqQyxLQUFLO2dCQVVOLGFBQWE7c0JBRlosS0FBSztnQkFTTixpQkFBaUI7c0JBRmhCLEtBQUs7Z0JBUUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLdUQsS0FBSztzQkFBakUsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBS0QsT0FBTztzQkFBaEUsZUFBZTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBTWxDLGFBQWE7c0JBQWxDLFlBQVk7dUJBQUMsTUFBTTtnQkFNUyxXQUFXO3NCQUF2QyxZQUFZO3VCQUFDLGFBQWE7Z0JBT0osS0FBSztzQkFBM0IsWUFBWTt1QkFBQyxPQUFPO2dCQUVnQixvQkFBb0I7c0JBQXhELFNBQVM7dUJBQUMsd0JBQXdCO2dCQUVpQixNQUFNO3NCQUF6RCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdG9yLCBJbnB1dEJvb2xlYW4sIE1peGluQmFzZSwgbWl4aW5VbnN1YnNjcmliZSwgVGh5VW5zdWJzY3JpYmUgfSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgVGh5UG9wb3ZlciB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB1c2VIb3N0UmVuZGVyZXIgfSBmcm9tICdAdGV0aHlzL2Nkay9kb20nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJvdXRlckxpbmtBY3RpdmUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGh5TmF2SW5rQmFyRGlyZWN0aXZlIH0gZnJvbSAnLi9uYXYtaW5rLWJhci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGh5TmF2SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vbmF2LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sUGlwZSB9IGZyb20gJy4vbmF2LnBpcGUnO1xuaW1wb3J0IHsgVGh5RHJvcGRvd25NZW51Q29tcG9uZW50LCBUaHlEcm9wZG93bk1lbnVJdGVtRGlyZWN0aXZlLCBUaHlEcm9wZG93bk1lbnVJdGVtQWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9kcm9wZG93bic7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuY29uc3QgX01peGluQmFzZTogQ29uc3RydWN0b3I8VGh5VW5zdWJzY3JpYmU+ICYgdHlwZW9mIE1peGluQmFzZSA9IG1peGluVW5zdWJzY3JpYmUoTWl4aW5CYXNlKTtcblxuZXhwb3J0IHR5cGUgVGh5TmF2VHlwZSA9ICdwdWxsZWQnIHwgJ3RhYnMnIHwgJ3BpbGxzJyB8ICdsaXRlJyB8ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknIHwgJ3RoaXJkbHknIHwgJ3NlY29uZGFyeS1kaXZpZGVyJztcbmV4cG9ydCB0eXBlIFRoeU5hdlNpemUgPSAnbGcnIHwgJ21kJyB8ICdzbSc7XG5leHBvcnQgdHlwZSBUaHlOYXZIb3Jpem9udGFsID0gJycgfCAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcblxuY29uc3QgbmF2VHlwZUNsYXNzZXNNYXAgPSB7XG4gICAgcHVsbGVkOiBbJ3RoeS1uYXYtcHVsbGVkJ10sXG4gICAgdGFiczogWyd0aHktbmF2LXRhYnMnXSxcbiAgICBwaWxsczogWyd0aHktbmF2LXBpbGxzJ10sXG4gICAgbGl0ZTogWyd0aHktbmF2LWxpdGUnXSxcbiAgICAvL+WmguS4i+exu+Wei+W3sue7j+W6n+W8g1xuICAgIHByaW1hcnk6IFsndGh5LW5hdi1wcmltYXJ5J10sXG4gICAgc2Vjb25kYXJ5OiBbJ3RoeS1uYXYtc2Vjb25kYXJ5J10sXG4gICAgdGhpcmRseTogWyd0aHktbmF2LXRoaXJkbHknXSxcbiAgICAnc2Vjb25kYXJ5LWRpdmlkZXInOiBbJ3RoeS1uYXYtc2Vjb25kYXJ5LWRpdmlkZXInXVxufTtcblxuY29uc3QgbmF2U2l6ZUNsYXNzZXNNYXAgPSB7XG4gICAgbGc6ICd0aHktbmF2LWxnJyxcbiAgICBtZDogJ3RoeS1uYXYtbWQnLFxuICAgIHNtOiAndGh5LW5hdi1zbSdcbn07XG5cbmNvbnN0IHRhYkl0ZW1SaWdodCA9IDIwO1xuXG4vKipcbiAqIOWvvOiIque7hOS7tlxuICogQG5hbWUgdGh5LW5hdlxuICogQG9yZGVyIDEwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LW5hdicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdi5jb21wb25lbnQuaHRtbCcsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3RoeS1uYXYnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgTmdJZixcbiAgICAgICAgVGh5TmF2SXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgVGh5TmF2SW5rQmFyRGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVDb21wb25lbnQsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVJdGVtRGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVJdGVtQWN0aXZlRGlyZWN0aXZlLFxuICAgICAgICBCeXBhc3NTZWN1cml0eVRydXN0SHRtbFBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRoeU5hdiBleHRlbmRzIF9NaXhpbkJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHR5cGU6IFRoeU5hdlR5cGUgPSAncHVsbGVkJztcbiAgICBwcml2YXRlIHNpemU6IFRoeU5hdlNpemUgPSAnbWQnO1xuICAgIHB1YmxpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGhvcml6b250YWw6IFRoeU5hdkhvcml6b250YWw7XG4gICAgcHVibGljIHdyYXBwZXJPZmZzZXQ6IHsgaGVpZ2h0OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXIgfSA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgdG9wOiAwXG4gICAgfTtcblxuICAgIHB1YmxpYyBoaWRkZW5JdGVtczogVGh5TmF2SXRlbURpcmVjdGl2ZVtdID0gW107XG5cbiAgICBwdWJsaWMgbW9yZUFjdGl2ZTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBzaG93TW9yZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIG1vcmVCdG5PZmZzZXQ6IHsgaGVpZ2h0OiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfSA9IHsgaGVpZ2h0OiAwLCB3aWR0aDogMCB9O1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIC8qKlxuICAgICAqIOWvvOiIquexu+Wei1xuICAgICAqIEB0eXBlIHB1bGxlZCB8IHRhYnMgfCBwaWxscyB8IGxpdGUgfCBwcmltYXJ5IHwgc2Vjb25kYXJ5IHwgdGhpcmRseSB8IHNlY29uZGFyeS1kaXZpZGVyXG4gICAgICogQGRlZmF1bHQgcHVsbGVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5VHlwZSh0eXBlOiBUaHlOYXZUeXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgJ3B1bGxlZCc7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWvvOiIquWkp+Wwj1xuICAgICAqIEB0eXBlIGxnIHwgbWQgfCBzbVxuICAgICAqIEBkZWZhdWx0IG1kXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5U2l6ZShzaXplOiBUaHlOYXZTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOawtOW5s+aOkuWIl1xuICAgICAqIEB0eXBlICcnIHwgJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCdcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUhvcml6b250YWwoaG9yaXpvbnRhbDogVGh5TmF2SG9yaXpvbnRhbCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWwgPSAoaG9yaXpvbnRhbCBhcyBzdHJpbmcpID09PSAncmlnaHQnID8gJ2VuZCcgOiBob3Jpem9udGFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuWeguebtOaOkuWIl1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktbmF2LS12ZXJ0aWNhbCcpXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlWZXJ0aWNhbDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuaYr+Whq+WFheaooeW8j1xuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LW5hdi0tZmlsbCcpXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlGaWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblk43lupTlvI/vvIzoh6rliqjorqHnrpflrr3luqblrZjmlL4gdGh5TmF2SXRlbe+8jOW5tua3u+WKoOabtOWkmuW8ueahhlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlSZXNwb25zaXZlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5pu05aSa5pON5L2c55qE6I+c5Y2V54K55Ye75YaF6YOo5piv5ZCm5Y+v5YWz6ZetXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICB0aHlJbnNpZGVDbG9zYWJsZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDlj7Pkvqfpop3lpJbljLrln5/mqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUV4dHJhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUaHlOYXZJdGVtRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGxpbmtzOiBRdWVyeUxpc3Q8VGh5TmF2SXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oUm91dGVyTGlua0FjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3V0ZXJzOiBRdWVyeUxpc3Q8Um91dGVyTGlua0FjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiDlk43lupTlvI/mqKHlvI/kuIvmm7TlpJrmk43kvZzmqKHmnb9cbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ21vcmUnKSBtb3JlT3BlcmF0aW9uOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWTjeW6lOW8j+aooeW8j+S4i+abtOWkmuW8ueahhuaooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnbW9yZVBvcG92ZXInKSBtb3JlUG9wb3ZlcjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiDlj7Pkvqfpop3lpJbljLrln5/mqKHmnb/vvIzmlK/mjIEgdGh5RXh0cmEg5Lyg5Y+C5ZKMIDxuZy10ZW1wbGF0ZSAjZXh0cmE+PC9uZy10ZW1wbGF0ZT4g5qih5p2/XG4gICAgICogQG5hbWUgZXh0cmFcbiAgICAgKiBAdHlwZSBUZW1wbGF0ZVJlZlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2V4dHJhJykgZXh0cmE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgQFZpZXdDaGlsZCgnbW9yZU9wZXJhdGlvbkNvbnRhaW5lcicpIGRlZmF1bHRNb3JlT3BlcmF0aW9uOiBFbGVtZW50UmVmPEhUTUxBbmNob3JFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoVGh5TmF2SW5rQmFyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbmtCYXIhOiBUaHlOYXZJbmtCYXJEaXJlY3RpdmU7XG5cbiAgICBnZXQgc2hvd0lua0JhcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc2hvd1R5cGVzOiBUaHlOYXZUeXBlW10gPSBbJ3B1bGxlZCcsICd0YWJzJ107XG4gICAgICAgIHJldHVybiBzaG93VHlwZXMuaW5jbHVkZXModGhpcy50eXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNsYXNzZXMoKSB7XG4gICAgICAgIGxldCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAobmF2VHlwZUNsYXNzZXNNYXBbdGhpcy50eXBlXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcyA9IFsuLi5uYXZUeXBlQ2xhc3Nlc01hcFt0aGlzLnR5cGVdXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmF2U2l6ZUNsYXNzZXNNYXBbdGhpcy5zaXplXSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5wdXNoKG5hdlNpemVDbGFzc2VzTWFwW3RoaXMuc2l6ZV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnVwZGF0ZUNsYXNzKGNsYXNzTmFtZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3VyQWN0aXZlSW5kZXg6IG51bWJlcjtcblxuICAgIHByaXZhdGUgcHJldkFjdGl2ZUluZGV4OiBudW1iZXIgPSBOYU47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBwb3BvdmVyOiBUaHlQb3BvdmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy50aHlSZXNwb25zaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3NlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5UmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRNb3JlQnRuT2Zmc2V0KCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rcy50b0FycmF5KCkuZm9yRWFjaChsaW5rID0+IGxpbmsuc2V0T2Zmc2V0KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGlkZGVuSXRlbXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgIHRoaXMubGlua3MuY2hhbmdlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJlc2l6ZU9ic2VydmVyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5waXBlKGRlYm91bmNlVGltZSgxMDApKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmxpbmtzLm1hcChpdGVtID0+IHRoaXMuY3JlYXRlUmVzaXplT2JzZXJ2ZXIoaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpKSxcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5yb3V0ZXJzIHx8IFtdKS5tYXAocm91dGVyID0+IHJvdXRlcj8uaXNBY3RpdmVDaGFuZ2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSxcbiAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRoeVJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2l6ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEhpZGRlbkl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVNb3JlSXNBY3RpdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGh5UmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTaXplcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTW9yZUlzQWN0aXZlKCk7XG5cbiAgICAgICAgdGhpcy5jdXJBY3RpdmVJbmRleCA9IHRoaXMubGlua3MgJiYgdGhpcy5saW5rcy5sZW5ndGggPyB0aGlzLmxpbmtzLnRvQXJyYXkoKS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmxpbmtJc0FjdGl2ZSgpKSA6IC0xO1xuICAgICAgICBpZiAodGhpcy5jdXJBY3RpdmVJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5rQmFyLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1ckFjdGl2ZUluZGV4ICE9PSB0aGlzLnByZXZBY3RpdmVJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TW9yZUJ0bk9mZnNldCgpIHtcbiAgICAgICAgdGhpcy5tb3JlQnRuT2Zmc2V0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmRlZmF1bHRNb3JlT3BlcmF0aW9uPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5kZWZhdWx0TW9yZU9wZXJhdGlvbj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZXNpemVPYnNlcnZlcihlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgOiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXNpemUgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcmVzaXplLm9ic2VydmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU1vcmVJc0FjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5tb3JlQWN0aXZlID0gdGhpcy5oaWRkZW5JdGVtcy5zb21lKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubGlua0lzQWN0aXZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEhpZGRlbkl0ZW1zKCkge1xuICAgICAgICB0aGlzLm1vcmVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdGFicyA9IHRoaXMubGlua3MudG9BcnJheSgpO1xuICAgICAgICBpZiAoIXRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLnNob3dNb3JlID0gdGhpcy5oaWRkZW5JdGVtcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnRoeVZlcnRpY2FsID8gdGhpcy5nZXRTaG93SXRlbXNFbmRJbmRleFdoZW5WZXJ0aWNhbCh0YWJzKSA6IHRoaXMuZ2V0U2hvd0l0ZW1zRW5kSW5kZXhXaGVuSG9yaXpvbnRhbCh0YWJzKTtcblxuICAgICAgICBjb25zdCBzaG93SXRlbXMgPSB0YWJzLnNsaWNlKDAsIGVuZEluZGV4ICsgMSk7XG4gICAgICAgIChzaG93SXRlbXMgfHwgW10pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldE5hdkxpbmtIaWRkZW4oZmFsc2UpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmhpZGRlbkl0ZW1zID0gZW5kSW5kZXggPT09IHRhYnMubGVuZ3RoIC0gMSA/IFtdIDogdGFicy5zbGljZShlbmRJbmRleCArIDEpO1xuICAgICAgICAodGhpcy5oaWRkZW5JdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0TmF2TGlua0hpZGRlbih0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zaG93TW9yZSA9IHRoaXMuaGlkZGVuSXRlbXMubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaG93SXRlbXNFbmRJbmRleFdoZW5Ib3Jpem9udGFsKHRhYnM6IFRoeU5hdkl0ZW1EaXJlY3RpdmVbXSkge1xuICAgICAgICBjb25zdCB0YWJzTGVuZ3RoID0gdGFicy5sZW5ndGg7XG4gICAgICAgIGxldCBlbmRJbmRleCA9IHRhYnNMZW5ndGg7XG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnNMZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgX3RvdGFsV2lkdGggPSBpID09PSB0YWJzTGVuZ3RoIC0gMSA/IHRvdGFsV2lkdGggKyB0YWJzW2ldLm9mZnNldC53aWR0aCA6IHRvdGFsV2lkdGggKyB0YWJzW2ldLm9mZnNldC53aWR0aCArIHRhYkl0ZW1SaWdodDtcbiAgICAgICAgICAgIGlmIChfdG90YWxXaWR0aCA+IHRoaXMud3JhcHBlck9mZnNldC53aWR0aCkge1xuICAgICAgICAgICAgICAgIGxldCBtb3JlT3BlcmF0aW9uV2lkdGggPSB0aGlzLm1vcmVCdG5PZmZzZXQud2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsV2lkdGggKyBtb3JlT3BlcmF0aW9uV2lkdGggPD0gdGhpcy53cmFwcGVyT2Zmc2V0LndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpIC0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggPSBfdG90YWxXaWR0aDtcbiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuZEluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2hvd0l0ZW1zRW5kSW5kZXhXaGVuVmVydGljYWwodGFiczogVGh5TmF2SXRlbURpcmVjdGl2ZVtdKSB7XG4gICAgICAgIGNvbnN0IHRhYnNMZW5ndGggPSB0YWJzLmxlbmd0aDtcbiAgICAgICAgbGV0IGVuZEluZGV4ID0gdGFic0xlbmd0aDtcbiAgICAgICAgbGV0IHRvdGFsSGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IF90b3RhbEhlaWdodCA9IHRvdGFsSGVpZ2h0ICsgdGFic1tpXS5vZmZzZXQuaGVpZ2h0O1xuICAgICAgICAgICAgaWYgKF90b3RhbEhlaWdodCA+IHRoaXMud3JhcHBlck9mZnNldC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbW9yZU9wZXJhdGlvbkhlaWdodCA9IHRoaXMubW9yZUJ0bk9mZnNldC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsSGVpZ2h0ICsgbW9yZU9wZXJhdGlvbkhlaWdodCA8PSB0aGlzLndyYXBwZXJPZmZzZXQuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpIC0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRvdGFsSGVpZ2h0ID0gX3RvdGFsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5kSW5kZXg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNpemVzKCkge1xuICAgICAgICB0aGlzLndyYXBwZXJPZmZzZXQgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCB8fCAwLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDAsXG4gICAgICAgICAgICBsZWZ0OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IHx8IDAsXG4gICAgICAgICAgICB0b3A6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCB8fCAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb3Blbk1vcmUoZXZlbnQ6IEV2ZW50LCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLnBvcG92ZXIub3Blbih0ZW1wbGF0ZSwge1xuICAgICAgICAgICAgb3JpZ2luOiBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgaW5zaWRlQ2xvc2FibGU6IHRoaXMudGh5SW5zaWRlQ2xvc2FibGUsXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ3RoeS1uYXYtbGlzdC1wb3BvdmVyJyxcbiAgICAgICAgICAgIG9yaWdpbkFjdGl2ZUNsYXNzOiAndGh5LW5hdi1vcmlnaW4tYWN0aXZlJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuYXZJdGVtQ2xpY2soaXRlbTogVGh5TmF2SXRlbURpcmVjdGl2ZSkge1xuICAgICAgICBpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd0lua0Jhcikge1xuICAgICAgICAgICAgdGhpcy5pbmtCYXIuaGlkZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLmxpbmtzPy50b0FycmF5KCkgPz8gW107XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRhYnMuZmluZChpdGVtID0+IGl0ZW0ubGlua0lzQWN0aXZlKCkpO1xuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtRWxlbWVudDogSFRNTEVsZW1lbnQgPSBzZWxlY3RlZEl0ZW0gJiYgc2VsZWN0ZWRJdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtICYmIHRoaXMubW9yZUFjdGl2ZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtRWxlbWVudCA9IHRoaXMuZGVmYXVsdE1vcmVPcGVyYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2QWN0aXZlSW5kZXggPSB0aGlzLmN1ckFjdGl2ZUluZGV4O1xuICAgICAgICAgICAgdGhpcy5pbmtCYXIuYWxpZ25Ub0VsZW1lbnQoc2VsZWN0ZWRJdGVtRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdGh5VmVydGljYWwsIHRoeVR5cGUgfSA9IGNoYW5nZXM7XG5cbiAgICAgICAgaWYgKHRoeVR5cGU/LmN1cnJlbnRWYWx1ZSAhPT0gdGh5VHlwZT8ucHJldmlvdXNWYWx1ZSB8fCB0aHlWZXJ0aWNhbD8uY3VycmVudFZhbHVlICE9PSB0aHlWZXJ0aWNhbD8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0aHktbmF2LWxpc3RcIiBbbmdDbGFzc109XCJob3Jpem9udGFsID8gJ2p1c3RpZnktY29udGVudC0nICsgaG9yaXpvbnRhbCA6ICcnXCIgI25hdkxpc3Q+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICA8YVxuICAgICpuZ0lmPVwidGh5UmVzcG9uc2l2ZVwiXG4gICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgY2xhc3M9XCJ0aHktbmF2LW1vcmUtY29udGFpbmVyXCJcbiAgICBbY2xhc3MuZC1ub25lXT1cIiFzaG93TW9yZVwiXG4gICAgW2NsYXNzLmludmlzaWJsZV09XCIhaW5pdGlhbGl6ZWRcIlxuICAgICNtb3JlT3BlcmF0aW9uQ29udGFpbmVyXG4gICAgdGh5TmF2TGlua1xuICAgIFt0aHlOYXZMaW5rQWN0aXZlXT1cIm1vcmVBY3RpdmVcIlxuICAgIChjbGljayk9XCJvcGVuTW9yZSgkZXZlbnQsIG5hdkxpc3RQb3BvdmVyKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9yZU9wZXJhdGlvbjsgZWxzZSBkZWZhdWx0TW9yZU9wZXJhdGlvblwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vcmVPcGVyYXRpb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb3JlT3BlcmF0aW9uPlxuICAgICAg5pu05aSaXG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJhbmdsZS1kb3duXCIgY2xhc3M9XCJ0aHktbmF2LW1vcmUtaWNvblwiPjwvdGh5LWljb24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9hPlxuICA8dGh5LW5hdi1pbmstYmFyIFtzaG93SW5rQmFyXT1cInNob3dJbmtCYXJcIiBbaXNWZXJ0aWNhbF09XCJ0aHlWZXJ0aWNhbFwiPjwvdGh5LW5hdi1pbmstYmFyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbmF2TGlzdFBvcG92ZXI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIm1vcmVQb3BvdmVyOyBlbHNlIGRlZmF1bHRcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vcmVQb3BvdmVyXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGhpZGRlbkl0ZW1zIH1cIlxuICA+PC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICA8dGh5LWRyb3Bkb3duLW1lbnUgdGh5SW1tZWRpYXRlUmVuZGVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBoaWRkZW5JdGVtc1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidGh5LW5hdi1pdGVtLW1vcmVcIlxuICAgICAgICAgIHRoeURyb3Bkb3duTWVudUl0ZW1cbiAgICAgICAgICBbdGh5RHJvcGRvd25NZW51SXRlbUFjdGl2ZV09XCJpdGVtLmlzQWN0aXZlXCJcbiAgICAgICAgICAoY2xpY2spPVwibmF2SXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCB8IGJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGh5LWRyb3Bkb3duLW1lbnU+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgKm5nSWY9XCJ0aHlFeHRyYSB8fCBleHRyYVwiIGNsYXNzPVwidGh5LW5hdi1leHRyYVwiPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRoeUV4dHJhIHx8IGV4dHJhXCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9uYXYvbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFJSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBSU4sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIs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LFFBQVE7c0JBQWhCLEtBQUs7Z0JBS3VELEtBQUs7c0JBQWpFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUtELE9BQU87c0JBQWhFLGVBQWU7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQU1sQyxhQUFhO3NCQUFsQyxZQUFZO3VCQUFDLE1BQU07Z0JBTVMsV0FBVztzQkFBdkMsWUFBWTt1QkFBQyxhQUFhO2dCQU9KLEtBQUs7c0JBQTNCLFlBQVk7dUJBQUMsT0FBTztnQkFFZ0Isb0JBQW9CO3NCQUF4RCxTQUFTO3VCQUFDLHdCQUF3QjtnQkFFaUIsTUFBTTtzQkFBekQsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3RvciwgTWl4aW5CYXNlLCBtaXhpblVuc3Vic2NyaWJlLCBUaHlVbnN1YnNjcmliZSB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlQb3BvdmVyIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRoeU5hdklua0JhckRpcmVjdGl2ZSB9IGZyb20gJy4vbmF2LWluay1iYXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRoeU5hdkl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL25hdi1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCeXBhc3NTZWN1cml0eVRydXN0SHRtbFBpcGUgfSBmcm9tICcuL25hdi5waXBlJztcbmltcG9ydCB7IFRoeURyb3Bkb3duTWVudUNvbXBvbmVudCwgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSwgVGh5RHJvcGRvd25NZW51SXRlbUFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvZHJvcGRvd24nO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IF9NaXhpbkJhc2U6IENvbnN0cnVjdG9yPFRoeVVuc3Vic2NyaWJlPiAmIHR5cGVvZiBNaXhpbkJhc2UgPSBtaXhpblVuc3Vic2NyaWJlKE1peGluQmFzZSk7XG5cbmV4cG9ydCB0eXBlIFRoeU5hdlR5cGUgPSAncHVsbGVkJyB8ICd0YWJzJyB8ICdwaWxscycgfCAnbGl0ZScgfCAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICd0aGlyZGx5JyB8ICdzZWNvbmRhcnktZGl2aWRlcic7XG5leHBvcnQgdHlwZSBUaHlOYXZTaXplID0gJ2xnJyB8ICdtZCcgfCAnc20nO1xuZXhwb3J0IHR5cGUgVGh5TmF2SG9yaXpvbnRhbCA9ICcnIHwgJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCc7XG5cbmNvbnN0IG5hdlR5cGVDbGFzc2VzTWFwID0ge1xuICAgIHB1bGxlZDogWyd0aHktbmF2LXB1bGxlZCddLFxuICAgIHRhYnM6IFsndGh5LW5hdi10YWJzJ10sXG4gICAgcGlsbHM6IFsndGh5LW5hdi1waWxscyddLFxuICAgIGxpdGU6IFsndGh5LW5hdi1saXRlJ10sXG4gICAgLy/lpoLkuIvnsbvlnovlt7Lnu4/lup/lvINcbiAgICBwcmltYXJ5OiBbJ3RoeS1uYXYtcHJpbWFyeSddLFxuICAgIHNlY29uZGFyeTogWyd0aHktbmF2LXNlY29uZGFyeSddLFxuICAgIHRoaXJkbHk6IFsndGh5LW5hdi10aGlyZGx5J10sXG4gICAgJ3NlY29uZGFyeS1kaXZpZGVyJzogWyd0aHktbmF2LXNlY29uZGFyeS1kaXZpZGVyJ11cbn07XG5cbmNvbnN0IG5hdlNpemVDbGFzc2VzTWFwID0ge1xuICAgIGxnOiAndGh5LW5hdi1sZycsXG4gICAgbWQ6ICd0aHktbmF2LW1kJyxcbiAgICBzbTogJ3RoeS1uYXYtc20nXG59O1xuXG5jb25zdCB0YWJJdGVtUmlnaHQgPSAyMDtcblxuLyoqXG4gKiDlr7zoiKrnu4Tku7ZcbiAqIEBuYW1lIHRoeS1uYXZcbiAqIEBvcmRlciAxMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1uYXYnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uYXYuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktbmF2J1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFRoeU5hdkl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIFRoeUljb24sXG4gICAgICAgIFRoeU5hdklua0JhckRpcmVjdGl2ZSxcbiAgICAgICAgVGh5RHJvcGRvd25NZW51Q29tcG9uZW50LFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbUFjdGl2ZURpcmVjdGl2ZSxcbiAgICAgICAgQnlwYXNzU2VjdXJpdHlUcnVzdEh0bWxQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlOYXYgZXh0ZW5kcyBfTWl4aW5CYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSB0eXBlOiBUaHlOYXZUeXBlID0gJ3B1bGxlZCc7XG4gICAgcHJpdmF0ZSBzaXplOiBUaHlOYXZTaXplID0gJ21kJztcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBob3Jpem9udGFsOiBUaHlOYXZIb3Jpem9udGFsO1xuICAgIHB1YmxpYyB3cmFwcGVyT2Zmc2V0OiB7IGhlaWdodDogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyIH0gPSB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRvcDogMFxuICAgIH07XG5cbiAgICBwdWJsaWMgaGlkZGVuSXRlbXM6IFRoeU5hdkl0ZW1EaXJlY3RpdmVbXSA9IFtdO1xuXG4gICAgcHVibGljIG1vcmVBY3RpdmU6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgc2hvd01vcmUgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBtb3JlQnRuT2Zmc2V0OiB7IGhlaWdodDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0gPSB7IGhlaWdodDogMCwgd2lkdGg6IDAgfTtcblxuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiDlr7zoiKrnsbvlnotcbiAgICAgKiBAdHlwZSBwdWxsZWQgfCB0YWJzIHwgcGlsbHMgfCBsaXRlIHwgcHJpbWFyeSB8IHNlY29uZGFyeSB8IHRoaXJkbHkgfCBzZWNvbmRhcnktZGl2aWRlclxuICAgICAqIEBkZWZhdWx0IHB1bGxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVR5cGUodHlwZTogVGh5TmF2VHlwZSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlIHx8ICdwdWxsZWQnO1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlr7zoiKrlpKflsI9cbiAgICAgKiBAdHlwZSBsZyB8IG1kIHwgc21cbiAgICAgKiBAZGVmYXVsdCBtZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUoc2l6ZTogVGh5TmF2U2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDbGFzc2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmsLTlubPmjpLliJdcbiAgICAgKiBAdHlwZSAnJyB8ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlIb3Jpem9udGFsKGhvcml6b250YWw6IFRoeU5hdkhvcml6b250YWwpIHtcbiAgICAgICAgdGhpcy5ob3Jpem9udGFsID0gKGhvcml6b250YWwgYXMgc3RyaW5nKSA9PT0gJ3JpZ2h0JyA/ICdlbmQnIDogaG9yaXpvbnRhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblnoLnm7TmjpLliJdcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LW5hdi0tdmVydGljYWwnKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHRoeVZlcnRpY2FsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5piv5aGr5YWF5qih5byPXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktbmF2LS1maWxsJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB0aHlGaWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblk43lupTlvI/vvIzoh6rliqjorqHnrpflrr3luqblrZjmlL4gdGh5TmF2SXRlbe+8jOW5tua3u+WKoOabtOWkmuW8ueahhlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgdGh5UmVzcG9uc2l2ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOabtOWkmuaTjeS9nOeahOiPnOWNleeCueWHu+WGhemDqOaYr+WQpuWPr+WFs+mXrVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHRoeUluc2lkZUNsb3NhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOWPs+S+p+mineWkluWMuuWfn+aooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5RXh0cmE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFRoeU5hdkl0ZW1EaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgbGlua3M6IFF1ZXJ5TGlzdDxUaHlOYXZJdGVtRGlyZWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihSb3V0ZXJMaW5rQWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvdXRlcnM6IFF1ZXJ5TGlzdDxSb3V0ZXJMaW5rQWN0aXZlPjtcblxuICAgIC8qKlxuICAgICAqIOWTjeW6lOW8j+aooeW8j+S4i+abtOWkmuaTjeS9nOaooeadv1xuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnbW9yZScpIG1vcmVPcGVyYXRpb246IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICog5ZON5bqU5byP5qih5byP5LiL5pu05aSa5by55qGG5qih5p2/XG4gICAgICogQHR5cGUgVGVtcGxhdGVSZWZcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdtb3JlUG9wb3ZlcicpIG1vcmVQb3BvdmVyOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWPs+S+p+mineWkluWMuuWfn+aooeadv++8jOaUr+aMgSB0aHlFeHRyYSDkvKDlj4LlkowgPG5nLXRlbXBsYXRlICNleHRyYT48L25nLXRlbXBsYXRlPiDmqKHmnb9cbiAgICAgKiBAbmFtZSBleHRyYVxuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZXh0cmEnKSBleHRyYTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICBAVmlld0NoaWxkKCdtb3JlT3BlcmF0aW9uQ29udGFpbmVyJykgZGVmYXVsdE1vcmVPcGVyYXRpb246IEVsZW1lbnRSZWY8SFRNTEFuY2hvckVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZChUaHlOYXZJbmtCYXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGlua0JhciE6IFRoeU5hdklua0JhckRpcmVjdGl2ZTtcblxuICAgIGdldCBzaG93SW5rQmFyKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzaG93VHlwZXM6IFRoeU5hdlR5cGVbXSA9IFsncHVsbGVkJywgJ3RhYnMnXTtcbiAgICAgICAgcmV0dXJuIHNob3dUeXBlcy5pbmNsdWRlcyh0aGlzLnR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ2xhc3NlcygpIHtcbiAgICAgICAgbGV0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmIChuYXZUeXBlQ2xhc3Nlc01hcFt0aGlzLnR5cGVdKSB7XG4gICAgICAgICAgICBjbGFzc05hbWVzID0gWy4uLm5hdlR5cGVDbGFzc2VzTWFwW3RoaXMudHlwZV1dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYXZTaXplQ2xhc3Nlc01hcFt0aGlzLnNpemVdKSB7XG4gICAgICAgICAgICBjbGFzc05hbWVzLnB1c2gobmF2U2l6ZUNsYXNzZXNNYXBbdGhpcy5zaXplXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIudXBkYXRlQ2xhc3MoY2xhc3NOYW1lcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJBY3RpdmVJbmRleDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBwcmV2QWN0aXZlSW5kZXg6IG51bWJlciA9IE5hTjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHBvcG92ZXI6IFRoeVBvcG92ZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRoeVJlc3BvbnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVDbGFzc2VzKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy50aHlSZXNwb25zaXZlKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1vcmVCdG5PZmZzZXQoKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtzLnRvQXJyYXkoKS5mb3JFYWNoKGxpbmsgPT4gbGluay5zZXRPZmZzZXQoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaWRkZW5JdGVtcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5saW5rcy5jaGFuZ2VzLFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUmVzaXplT2JzZXJ2ZXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMubGlua3MubWFwKGl0ZW0gPT4gdGhpcy5jcmVhdGVSZXNpemVPYnNlcnZlcihpdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkucGlwZShkZWJvdW5jZVRpbWUoMTAwKSkpLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLnJvdXRlcnMgfHwgW10pLm1hcChyb3V0ZXIgPT4gcm91dGVyPy5pc0FjdGl2ZUNoYW5nZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpLFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGh5UmVzcG9uc2l2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTaXplcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SGlkZGVuSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU1vcmVJc0FjdGl2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50aHlSZXNwb25zaXZlKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFNpemVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVNb3JlSXNBY3RpdmUoKTtcblxuICAgICAgICB0aGlzLmN1ckFjdGl2ZUluZGV4ID0gdGhpcy5saW5rcyAmJiB0aGlzLmxpbmtzLmxlbmd0aCA/IHRoaXMubGlua3MudG9BcnJheSgpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ubGlua0lzQWN0aXZlKCkpIDogLTE7XG4gICAgICAgIGlmICh0aGlzLmN1ckFjdGl2ZUluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5pbmtCYXIuaGlkZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyQWN0aXZlSW5kZXggIT09IHRoaXMucHJldkFjdGl2ZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmFsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNb3JlQnRuT2Zmc2V0KCkge1xuICAgICAgICB0aGlzLm1vcmVCdG5PZmZzZXQgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZGVmYXVsdE1vcmVPcGVyYXRpb24/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLmRlZmF1bHRNb3JlT3BlcmF0aW9uPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNyZWF0ZVJlc2l6ZU9ic2VydmVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICA6IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZSA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICByZXNpemUub2JzZXJ2ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzaXplLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlTW9yZUlzQWN0aXZlKCkge1xuICAgICAgICB0aGlzLm1vcmVBY3RpdmUgPSB0aGlzLmhpZGRlbkl0ZW1zLnNvbWUoaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5saW5rSXNBY3RpdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SGlkZGVuSXRlbXMoKSB7XG4gICAgICAgIHRoaXMubW9yZUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCB0YWJzID0gdGhpcy5saW5rcy50b0FycmF5KCk7XG4gICAgICAgIGlmICghdGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01vcmUgPSB0aGlzLmhpZGRlbkl0ZW1zLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMudGh5VmVydGljYWwgPyB0aGlzLmdldFNob3dJdGVtc0VuZEluZGV4V2hlblZlcnRpY2FsKHRhYnMpIDogdGhpcy5nZXRTaG93SXRlbXNFbmRJbmRleFdoZW5Ib3Jpem9udGFsKHRhYnMpO1xuXG4gICAgICAgIGNvbnN0IHNob3dJdGVtcyA9IHRhYnMuc2xpY2UoMCwgZW5kSW5kZXggKyAxKTtcbiAgICAgICAgKHNob3dJdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0TmF2TGlua0hpZGRlbihmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaGlkZGVuSXRlbXMgPSBlbmRJbmRleCA9PT0gdGFicy5sZW5ndGggLSAxID8gW10gOiB0YWJzLnNsaWNlKGVuZEluZGV4ICsgMSk7XG4gICAgICAgICh0aGlzLmhpZGRlbkl0ZW1zIHx8IFtdKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXROYXZMaW5rSGlkZGVuKHRydWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNob3dNb3JlID0gdGhpcy5oaWRkZW5JdGVtcy5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNob3dJdGVtc0VuZEluZGV4V2hlbkhvcml6b250YWwodGFiczogVGh5TmF2SXRlbURpcmVjdGl2ZVtdKSB7XG4gICAgICAgIGNvbnN0IHRhYnNMZW5ndGggPSB0YWJzLmxlbmd0aDtcbiAgICAgICAgbGV0IGVuZEluZGV4ID0gdGFic0xlbmd0aDtcbiAgICAgICAgbGV0IHRvdGFsV2lkdGggPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFic0xlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBfdG90YWxXaWR0aCA9IGkgPT09IHRhYnNMZW5ndGggLSAxID8gdG90YWxXaWR0aCArIHRhYnNbaV0ub2Zmc2V0LndpZHRoIDogdG90YWxXaWR0aCArIHRhYnNbaV0ub2Zmc2V0LndpZHRoICsgdGFiSXRlbVJpZ2h0O1xuICAgICAgICAgICAgaWYgKF90b3RhbFdpZHRoID4gdGhpcy53cmFwcGVyT2Zmc2V0LndpZHRoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1vcmVPcGVyYXRpb25XaWR0aCA9IHRoaXMubW9yZUJ0bk9mZnNldC53aWR0aDtcbiAgICAgICAgICAgICAgICBpZiAodG90YWxXaWR0aCArIG1vcmVPcGVyYXRpb25XaWR0aCA8PSB0aGlzLndyYXBwZXJPZmZzZXQud2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpIC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGkgLSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCA9IF90b3RhbFdpZHRoO1xuICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5kSW5kZXg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTaG93SXRlbXNFbmRJbmRleFdoZW5WZXJ0aWNhbCh0YWJzOiBUaHlOYXZJdGVtRGlyZWN0aXZlW10pIHtcbiAgICAgICAgY29uc3QgdGFic0xlbmd0aCA9IHRhYnMubGVuZ3RoO1xuICAgICAgICBsZXQgZW5kSW5kZXggPSB0YWJzTGVuZ3RoO1xuICAgICAgICBsZXQgdG90YWxIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnNMZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgX3RvdGFsSGVpZ2h0ID0gdG90YWxIZWlnaHQgKyB0YWJzW2ldLm9mZnNldC5oZWlnaHQ7XG4gICAgICAgICAgICBpZiAoX3RvdGFsSGVpZ2h0ID4gdGhpcy53cmFwcGVyT2Zmc2V0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGxldCBtb3JlT3BlcmF0aW9uSGVpZ2h0ID0gdGhpcy5tb3JlQnRuT2Zmc2V0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAodG90YWxIZWlnaHQgKyBtb3JlT3BlcmF0aW9uSGVpZ2h0IDw9IHRoaXMud3JhcHBlck9mZnNldC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpIC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGkgLSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG90YWxIZWlnaHQgPSBfdG90YWxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmRJbmRleDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2l6ZXMoKSB7XG4gICAgICAgIHRoaXMud3JhcHBlck9mZnNldCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDAsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMCxcbiAgICAgICAgICAgIGxlZnQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgfHwgMCxcbiAgICAgICAgICAgIHRvcDogdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wIHx8IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvcGVuTW9yZShldmVudDogRXZlbnQsIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMucG9wb3Zlci5vcGVuKHRlbXBsYXRlLCB7XG4gICAgICAgICAgICBvcmlnaW46IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xvc2FibGU6IHRydWUsXG4gICAgICAgICAgICBpbnNpZGVDbG9zYWJsZTogdGhpcy50aHlJbnNpZGVDbG9zYWJsZSxcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndGh5LW5hdi1saXN0LXBvcG92ZXInLFxuICAgICAgICAgICAgb3JpZ2luQWN0aXZlQ2xhc3M6ICd0aHktbmF2LW9yaWdpbi1hY3RpdmUnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5hdkl0ZW1DbGljayhpdGVtOiBUaHlOYXZJdGVtRGlyZWN0aXZlKSB7XG4gICAgICAgIGl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zaG93SW5rQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlua0Jhci5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFicyA9IHRoaXMubGlua3M/LnRvQXJyYXkoKSA/PyBbXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGFicy5maW5kKGl0ZW0gPT4gaXRlbS5saW5rSXNBY3RpdmUoKSk7XG4gICAgICAgIGxldCBzZWxlY3RlZEl0ZW1FbGVtZW50OiBIVE1MRWxlbWVudCA9IHNlbGVjdGVkSXRlbSAmJiBzZWxlY3RlZEl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW0gJiYgdGhpcy5tb3JlQWN0aXZlKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1FbGVtZW50ID0gdGhpcy5kZWZhdWx0TW9yZU9wZXJhdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnByZXZBY3RpdmVJbmRleCA9IHRoaXMuY3VyQWN0aXZlSW5kZXg7XG4gICAgICAgICAgICB0aGlzLmlua0Jhci5hbGlnblRvRWxlbWVudChzZWxlY3RlZEl0ZW1FbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB0aHlWZXJ0aWNhbCwgdGh5VHlwZSB9ID0gY2hhbmdlcztcblxuICAgICAgICBpZiAodGh5VHlwZT8uY3VycmVudFZhbHVlICE9PSB0aHlUeXBlPy5wcmV2aW91c1ZhbHVlIHx8IHRoeVZlcnRpY2FsPy5jdXJyZW50VmFsdWUgIT09IHRoeVZlcnRpY2FsPy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRoeS1uYXYtbGlzdFwiIFtuZ0NsYXNzXT1cImhvcml6b250YWwgPyAnanVzdGlmeS1jb250ZW50LScgKyBob3Jpem9udGFsIDogJydcIiAjbmF2TGlzdD5cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIDxhXG4gICAgKm5nSWY9XCJ0aHlSZXNwb25zaXZlXCJcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICBjbGFzcz1cInRoeS1uYXYtbW9yZS1jb250YWluZXJcIlxuICAgIFtjbGFzcy5kLW5vbmVdPVwiIXNob3dNb3JlXCJcbiAgICBbY2xhc3MuaW52aXNpYmxlXT1cIiFpbml0aWFsaXplZFwiXG4gICAgI21vcmVPcGVyYXRpb25Db250YWluZXJcbiAgICB0aHlOYXZMaW5rXG4gICAgW3RoeU5hdkxpbmtBY3RpdmVdPVwibW9yZUFjdGl2ZVwiXG4gICAgKGNsaWNrKT1cIm9wZW5Nb3JlKCRldmVudCwgbmF2TGlzdFBvcG92ZXIpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb3JlT3BlcmF0aW9uOyBlbHNlIGRlZmF1bHRNb3JlT3BlcmF0aW9uXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9yZU9wZXJhdGlvblwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1vcmVPcGVyYXRpb24+XG4gICAgICDmm7TlpJpcbiAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImFuZ2xlLWRvd25cIiBjbGFzcz1cInRoeS1uYXYtbW9yZS1pY29uXCI+PC90aHktaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2E+XG4gIDx0aHktbmF2LWluay1iYXIgW3Nob3dJbmtCYXJdPVwic2hvd0lua0JhclwiIFtpc1ZlcnRpY2FsXT1cInRoeVZlcnRpY2FsXCI+PC90aHktbmF2LWluay1iYXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNuYXZMaXN0UG9wb3Zlcj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwibW9yZVBvcG92ZXI7IGVsc2UgZGVmYXVsdFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9yZVBvcG92ZXJcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaGlkZGVuSXRlbXMgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgIDx0aHktZHJvcGRvd24tbWVudSB0aHlJbW1lZGlhdGVSZW5kZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhpZGRlbkl0ZW1zXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0aHktbmF2LWl0ZW0tbW9yZVwiXG4gICAgICAgICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgICAgICAgIFt0aHlEcm9wZG93bk1lbnVJdGVtQWN0aXZlXT1cIml0ZW0uaXNBY3RpdmVcIlxuICAgICAgICAgIChjbGljayk9XCJuYXZJdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MIHwgYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWxcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90aHktZHJvcGRvd24tbWVudT5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAqbmdJZj1cInRoeUV4dHJhIHx8IGV4dHJhXCIgY2xhc3M9XCJ0aHktbmF2LWV4dHJhXCI+XG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGh5RXh0cmEgfHwgZXh0cmFcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19