@acorex/components 6.5.91 → 6.6.0

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 (544) hide show
  1. package/README.md +7 -3
  2. package/esm2022/acorex-components.mjs +5 -0
  3. package/esm2022/index.mjs +158 -0
  4. package/esm2022/lib/accordion/accordion.component.mjs +45 -0
  5. package/esm2022/lib/accordion/accordion.module.mjs +20 -0
  6. package/esm2022/lib/base/base-page.class.mjs +97 -0
  7. package/esm2022/lib/base/components.class.mjs +17 -0
  8. package/esm2022/lib/base/element.class.mjs +301 -0
  9. package/esm2022/lib/base/events.class.mjs +17 -0
  10. package/esm2022/lib/button/button.component.mjs +74 -0
  11. package/esm2022/lib/button/button.module.mjs +21 -0
  12. package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +426 -0
  13. package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
  14. package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +59 -0
  15. package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +16 -0
  16. package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +226 -0
  17. package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +68 -0
  18. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +136 -0
  19. package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
  20. package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +49 -0
  21. package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +102 -0
  22. package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +214 -0
  23. package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
  24. package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +85 -0
  25. package/esm2022/lib/checkbox/checkbox.component.mjs +102 -0
  26. package/esm2022/lib/checkbox/checkbox.module.mjs +20 -0
  27. package/esm2022/lib/color-picker/color-box/color-box.component.mjs +423 -0
  28. package/esm2022/lib/color-picker/color-picker.component.mjs +89 -0
  29. package/esm2022/lib/color-picker/color-picker.module.mjs +24 -0
  30. package/esm2022/lib/context-menu/context-menu.component.mjs +68 -0
  31. package/esm2022/lib/context-menu/context-menu.directive.mjs +146 -0
  32. package/esm2022/lib/context-menu/context-menu.module.mjs +20 -0
  33. package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +140 -0
  34. package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +119 -0
  35. package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +75 -0
  36. package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +119 -0
  37. package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +267 -0
  38. package/esm2022/lib/data-filter/filter.class.mjs +46 -0
  39. package/esm2022/lib/data-filter/filter.module.mjs +88 -0
  40. package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +168 -0
  41. package/esm2022/lib/data-list/core/data-list.component.mjs +37 -0
  42. package/esm2022/lib/data-list/list/list.component.mjs +134 -0
  43. package/esm2022/lib/data-list/list/list.module.mjs +22 -0
  44. package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +84 -0
  45. package/esm2022/lib/data-source/datasource.component.mjs +47 -0
  46. package/esm2022/lib/data-source/datasource.module.mjs +18 -0
  47. package/esm2022/lib/data-source/read-param.mjs +7 -0
  48. package/esm2022/lib/date-picker/date-picker.component.mjs +1093 -0
  49. package/esm2022/lib/date-picker/date-picker.module.mjs +49 -0
  50. package/esm2022/lib/dialog/dialog.component.mjs +26 -0
  51. package/esm2022/lib/dialog/dialog.module.mjs +21 -0
  52. package/esm2022/lib/dialog/dialog.service.mjs +160 -0
  53. package/esm2022/lib/drawer/content.component.mjs +18 -0
  54. package/esm2022/lib/drawer/drawer-container.component.mjs +38 -0
  55. package/esm2022/lib/drawer/drawer.component.mjs +146 -0
  56. package/esm2022/lib/drawer/drawer.module.mjs +23 -0
  57. package/esm2022/lib/dropdown/dropdown.component.mjs +186 -0
  58. package/esm2022/lib/dropdown/dropdown.module.mjs +26 -0
  59. package/esm2022/lib/fieldset/fieldset.component.mjs +57 -0
  60. package/esm2022/lib/fieldset/fieldset.module.mjs +19 -0
  61. package/esm2022/lib/form-group/form-group.component.mjs +37 -0
  62. package/esm2022/lib/form-group/form-group.module.mjs +21 -0
  63. package/esm2022/lib/label/label.component.mjs +19 -0
  64. package/esm2022/lib/label/label.module.mjs +21 -0
  65. package/esm2022/lib/loading/loading-indicator.component.mjs +18 -0
  66. package/esm2022/lib/loading/loading-panel.component.mjs +45 -0
  67. package/esm2022/lib/loading/loading.module.mjs +21 -0
  68. package/esm2022/lib/loading/loading.service.mjs +47 -0
  69. package/esm2022/lib/menu/menu-item.component.mjs +50 -0
  70. package/esm2022/lib/menu/menu.component.mjs +98 -0
  71. package/esm2022/lib/menu/menu.module.mjs +22 -0
  72. package/esm2022/lib/menu/menu2.component.mjs +100 -0
  73. package/esm2022/lib/number-box/number-box.component.mjs +628 -0
  74. package/esm2022/lib/number-box/number-box.module.mjs +21 -0
  75. package/esm2022/lib/page/content.component.mjs +27 -0
  76. package/esm2022/lib/page/footer.component.mjs +19 -0
  77. package/esm2022/lib/page/page.component.mjs +57 -0
  78. package/esm2022/lib/page/page.module.mjs +22 -0
  79. package/esm2022/lib/panel-box/panel-box.component.mjs +87 -0
  80. package/esm2022/lib/panel-box/panel-box.module.mjs +19 -0
  81. package/esm2022/lib/password-box/password-box.component.mjs +32 -0
  82. package/esm2022/lib/password-box/password-box.module.mjs +23 -0
  83. package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +50 -0
  84. package/esm2022/lib/popover/overlay.service.mjs +94 -0
  85. package/esm2022/lib/popover/popover.component.mjs +145 -0
  86. package/esm2022/lib/popover/popover.module.mjs +19 -0
  87. package/esm2022/lib/popup/popup.component.mjs +160 -0
  88. package/esm2022/lib/popup/popup.module.mjs +25 -0
  89. package/esm2022/lib/popup/popup.service.mjs +94 -0
  90. package/esm2022/lib/progress-bar/progress-bar.component.mjs +16 -0
  91. package/esm2022/lib/progress-bar/progress-bar.module.mjs +19 -0
  92. package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +65 -0
  93. package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
  94. package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +41 -0
  95. package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
  96. package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +118 -0
  97. package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
  98. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +216 -0
  99. package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +76 -0
  100. package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +87 -0
  101. package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
  102. package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +69 -0
  103. package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
  104. package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +145 -0
  105. package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +59 -0
  106. package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +76 -0
  107. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +75 -0
  108. package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
  109. package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +73 -0
  110. package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
  111. package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +30 -0
  112. package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
  113. package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +36 -0
  114. package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
  115. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +35 -0
  116. package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
  117. package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +47 -0
  118. package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
  119. package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +167 -0
  120. package/esm2022/lib/property-editor/property-editor.class.mjs +108 -0
  121. package/esm2022/lib/property-editor/property-editor.module.mjs +194 -0
  122. package/esm2022/lib/query-builder/query-builder-group.component.mjs +129 -0
  123. package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +177 -0
  124. package/esm2022/lib/query-builder/query-builder-rule.component.mjs +428 -0
  125. package/esm2022/lib/query-builder/query-builder.class.mjs +42 -0
  126. package/esm2022/lib/query-builder/query-builder.component.mjs +92 -0
  127. package/esm2022/lib/query-builder/query-builder.module.mjs +62 -0
  128. package/esm2022/lib/query-builder/query-builder.service.mjs +199 -0
  129. package/esm2022/lib/search-bar/search-bar.component.mjs +293 -0
  130. package/esm2022/lib/search-bar/search-bar.module.mjs +61 -0
  131. package/esm2022/lib/searchbox/searchbox.component.mjs +106 -0
  132. package/esm2022/lib/searchbox/searchbox.module.mjs +24 -0
  133. package/esm2022/lib/selectbox/selectbox.component.mjs +1134 -0
  134. package/esm2022/lib/selectbox/selectbox.module.mjs +44 -0
  135. package/esm2022/lib/selectbox/selectbox2.component.mjs +617 -0
  136. package/esm2022/lib/selection-list/selection-list.component.mjs +113 -0
  137. package/esm2022/lib/selection-list/selection-list.module.mjs +21 -0
  138. package/esm2022/lib/switch/switch.component.mjs +55 -0
  139. package/esm2022/lib/switch/switch.module.mjs +20 -0
  140. package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +75 -0
  141. package/esm2022/lib/tab-page/tab-page-host.component.mjs +124 -0
  142. package/esm2022/lib/tab-page/tab-page.module.mjs +21 -0
  143. package/esm2022/lib/tab-page/tab-page.service.mjs +159 -0
  144. package/esm2022/lib/tab-strip/tab-strip.component.mjs +38 -0
  145. package/esm2022/lib/tab-strip/tab-strip.module.mjs +19 -0
  146. package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +25 -0
  147. package/esm2022/lib/tab-view/tab-view.component.mjs +110 -0
  148. package/esm2022/lib/tab-view/tab-view.module.mjs +21 -0
  149. package/esm2022/lib/tab-view/tab.component.mjs +33 -0
  150. package/esm2022/lib/textarea/textarea.component.mjs +27 -0
  151. package/esm2022/lib/textarea/textarea.module.mjs +21 -0
  152. package/esm2022/lib/textbox/textbox.component.mjs +42 -0
  153. package/esm2022/lib/textbox/textbox.module.mjs +36 -0
  154. package/esm2022/lib/time-picker/time-picker.component.mjs +1107 -0
  155. package/esm2022/lib/time-picker/time-picker.module.mjs +34 -0
  156. package/esm2022/lib/toast/toast-message/toast-message.component.mjs +76 -0
  157. package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
  158. package/esm2022/lib/toast/toast.module.mjs +21 -0
  159. package/esm2022/lib/toast/toast.service.mjs +45 -0
  160. package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +77 -0
  161. package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +62 -0
  162. package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +56 -0
  163. package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +37 -0
  164. package/esm2022/lib/toolbar/toolbar-item.mjs +4 -0
  165. package/esm2022/lib/toolbar/toolbar.component.mjs +13 -0
  166. package/esm2022/lib/toolbar/toolbar.module.mjs +40 -0
  167. package/esm2022/lib/tooltip/tooltip.directive.mjs +104 -0
  168. package/esm2022/lib/tooltip/tooltip.module.mjs +19 -0
  169. package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +697 -0
  170. package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +33 -0
  171. package/esm2022/lib/tree-view/tree-view.component.mjs +854 -0
  172. package/esm2022/lib/tree-view/tree-view.module.mjs +22 -0
  173. package/esm2022/lib/upload-file/upload-file.component.mjs +226 -0
  174. package/esm2022/lib/upload-file/upload-file.events.mjs +2 -0
  175. package/esm2022/lib/upload-file/upload-file.module.mjs +24 -0
  176. package/esm2022/lib/validation/validation-form.component.mjs +68 -0
  177. package/esm2022/lib/validation/validation-rule.widget.mjs +114 -0
  178. package/esm2022/lib/validation/validation.class.mjs +2 -0
  179. package/esm2022/lib/validation/validation.component.mjs +89 -0
  180. package/esm2022/lib/validation/validation.module.mjs +34 -0
  181. package/{fesm2020 → fesm2022}/acorex-components.mjs +17004 -15581
  182. package/fesm2022/acorex-components.mjs.map +1 -0
  183. package/{public-api.d.ts → index.d.ts} +155 -155
  184. package/lib/accordion/accordion.component.d.ts +13 -13
  185. package/lib/accordion/accordion.module.d.ts +9 -9
  186. package/lib/base/base-page.class.d.ts +46 -46
  187. package/lib/base/components.class.d.ts +10 -10
  188. package/lib/base/element.class.d.ts +106 -106
  189. package/lib/base/events.class.d.ts +18 -18
  190. package/lib/button/button.component.d.ts +21 -21
  191. package/lib/button/button.module.d.ts +8 -8
  192. package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -81
  193. package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -11
  194. package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -19
  195. package/lib/calendar/scheduler/scheduler.class.d.ts +36 -36
  196. package/lib/calendar/scheduler/scheduler.component.d.ts +39 -39
  197. package/lib/calendar/scheduler/scheduler.module.d.ts +21 -21
  198. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -25
  199. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -14
  200. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -16
  201. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -26
  202. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -37
  203. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -28
  204. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -24
  205. package/lib/checkbox/checkbox.component.d.ts +30 -30
  206. package/lib/checkbox/checkbox.module.d.ts +9 -9
  207. package/lib/color-picker/color-box/color-box.component.d.ts +25 -25
  208. package/lib/color-picker/color-picker.component.d.ts +30 -30
  209. package/lib/color-picker/color-picker.module.d.ts +13 -13
  210. package/lib/context-menu/context-menu.component.d.ts +22 -22
  211. package/lib/context-menu/context-menu.directive.d.ts +38 -38
  212. package/lib/context-menu/context-menu.module.d.ts +9 -9
  213. package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -22
  214. package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -15
  215. package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -18
  216. package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -15
  217. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -45
  218. package/lib/data-filter/filter.class.d.ts +40 -40
  219. package/lib/data-filter/filter.module.d.ts +24 -24
  220. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -25
  221. package/lib/data-list/core/data-list.component.d.ts +15 -15
  222. package/lib/data-list/list/list.component.d.ts +40 -40
  223. package/lib/data-list/list/list.module.d.ts +11 -11
  224. package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -17
  225. package/lib/data-source/datasource.component.d.ts +16 -16
  226. package/lib/data-source/datasource.module.d.ts +7 -7
  227. package/lib/data-source/read-param.d.ts +40 -40
  228. package/lib/date-picker/date-picker.component.d.ts +81 -81
  229. package/lib/date-picker/date-picker.module.d.ts +14 -14
  230. package/lib/dialog/dialog.component.d.ts +14 -14
  231. package/lib/dialog/dialog.module.d.ts +10 -10
  232. package/lib/dialog/dialog.service.d.ts +36 -36
  233. package/lib/drawer/content.component.d.ts +7 -7
  234. package/lib/drawer/drawer-container.component.d.ts +10 -10
  235. package/lib/drawer/drawer.component.d.ts +34 -34
  236. package/lib/drawer/drawer.module.d.ts +10 -10
  237. package/lib/dropdown/dropdown.component.d.ts +38 -38
  238. package/lib/dropdown/dropdown.module.d.ts +13 -13
  239. package/lib/fieldset/fieldset.component.d.ts +11 -11
  240. package/lib/fieldset/fieldset.module.d.ts +8 -8
  241. package/lib/form-group/form-group.component.d.ts +14 -14
  242. package/lib/form-group/form-group.module.d.ts +8 -8
  243. package/lib/label/label.component.d.ts +9 -9
  244. package/lib/label/label.module.d.ts +8 -8
  245. package/lib/loading/loading-indicator.component.d.ts +9 -9
  246. package/lib/loading/loading-panel.component.d.ts +13 -13
  247. package/lib/loading/loading.module.d.ts +10 -10
  248. package/lib/loading/loading.service.d.ts +13 -13
  249. package/lib/menu/menu-item.component.d.ts +18 -18
  250. package/lib/menu/menu.component.d.ts +35 -35
  251. package/lib/menu/menu.module.d.ts +11 -11
  252. package/lib/menu/menu2.component.d.ts +21 -21
  253. package/lib/number-box/number-box.component.d.ts +52 -52
  254. package/lib/number-box/number-box.module.d.ts +10 -10
  255. package/lib/page/content.component.d.ts +8 -8
  256. package/lib/page/footer.component.d.ts +5 -5
  257. package/lib/page/page.component.d.ts +16 -16
  258. package/lib/page/page.module.d.ts +11 -11
  259. package/lib/panel-box/panel-box.component.d.ts +19 -19
  260. package/lib/panel-box/panel-box.module.d.ts +8 -8
  261. package/lib/password-box/password-box.component.d.ts +12 -12
  262. package/lib/password-box/password-box.module.d.ts +10 -10
  263. package/lib/popover/custom-cdk-overlay.service.d.ts +19 -19
  264. package/lib/popover/overlay.service.d.ts +32 -32
  265. package/lib/popover/popover.component.d.ts +35 -35
  266. package/lib/popover/popover.module.d.ts +8 -8
  267. package/lib/popup/popup.component.d.ts +40 -40
  268. package/lib/popup/popup.module.d.ts +13 -13
  269. package/lib/popup/popup.service.d.ts +22 -22
  270. package/lib/progress-bar/progress-bar.component.d.ts +7 -7
  271. package/lib/progress-bar/progress-bar.module.d.ts +8 -8
  272. package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -19
  273. package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -11
  274. package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -13
  275. package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -12
  276. package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -34
  277. package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -20
  278. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -44
  279. package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -19
  280. package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -28
  281. package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -12
  282. package/lib/property-editor/editors/number-editor/number.editor.d.ts +21 -20
  283. package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -12
  284. package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -29
  285. package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -18
  286. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -29
  287. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +28 -28
  288. package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -14
  289. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -25
  290. package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -11
  291. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -11
  292. package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -13
  293. package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -18
  294. package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -12
  295. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -17
  296. package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -12
  297. package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -17
  298. package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -12
  299. package/lib/property-editor/property-editor-renderer.directive.d.ts +31 -31
  300. package/lib/property-editor/property-editor.class.d.ts +93 -93
  301. package/lib/property-editor/property-editor.module.d.ts +21 -21
  302. package/lib/query-builder/query-builder-group.component.d.ts +33 -33
  303. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -35
  304. package/lib/query-builder/query-builder-rule.component.d.ts +45 -45
  305. package/lib/query-builder/query-builder.class.d.ts +45 -45
  306. package/lib/query-builder/query-builder.component.d.ts +29 -29
  307. package/lib/query-builder/query-builder.module.d.ts +23 -23
  308. package/lib/query-builder/query-builder.service.d.ts +18 -18
  309. package/lib/search-bar/search-bar.component.d.ts +62 -62
  310. package/lib/search-bar/search-bar.module.d.ts +18 -18
  311. package/lib/searchbox/searchbox.component.d.ts +23 -22
  312. package/lib/searchbox/searchbox.module.d.ts +13 -13
  313. package/lib/selectbox/selectbox.component.d.ts +149 -118
  314. package/lib/selectbox/selectbox.module.d.ts +15 -15
  315. package/lib/selectbox/selectbox2.component.d.ts +103 -103
  316. package/lib/selection-list/selection-list.component.d.ts +32 -32
  317. package/lib/selection-list/selection-list.module.d.ts +10 -10
  318. package/lib/switch/switch.component.d.ts +20 -20
  319. package/lib/switch/switch.module.d.ts +9 -9
  320. package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -16
  321. package/lib/tab-page/tab-page-host.component.d.ts +24 -24
  322. package/lib/tab-page/tab-page.module.d.ts +10 -10
  323. package/lib/tab-page/tab-page.service.d.ts +30 -30
  324. package/lib/tab-strip/tab-strip.component.d.ts +28 -28
  325. package/lib/tab-strip/tab-strip.module.d.ts +8 -8
  326. package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -16
  327. package/lib/tab-view/tab-view.component.d.ts +26 -26
  328. package/lib/tab-view/tab-view.module.d.ts +10 -10
  329. package/lib/tab-view/tab.component.d.ts +12 -12
  330. package/lib/textarea/textarea.component.d.ts +12 -12
  331. package/lib/textarea/textarea.module.d.ts +8 -8
  332. package/lib/textbox/textbox.component.d.ts +16 -16
  333. package/lib/textbox/textbox.module.d.ts +11 -11
  334. package/lib/time-picker/time-picker.component.d.ts +53 -52
  335. package/lib/time-picker/time-picker.module.d.ts +11 -11
  336. package/lib/toast/toast-message/toast-message.component.d.ts +18 -18
  337. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -8
  338. package/lib/toast/toast.module.d.ts +9 -9
  339. package/lib/toast/toast.service.d.ts +18 -18
  340. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -12
  341. package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -24
  342. package/lib/toolbar/search/toolbar-search.component.d.ts +16 -16
  343. package/lib/toolbar/title/toolbar-title.component.d.ts +9 -9
  344. package/lib/toolbar/toolbar-item.d.ts +3 -3
  345. package/lib/toolbar/toolbar.component.d.ts +8 -8
  346. package/lib/toolbar/toolbar.module.d.ts +14 -14
  347. package/lib/tooltip/tooltip.directive.d.ts +21 -21
  348. package/lib/tooltip/tooltip.module.d.ts +8 -8
  349. package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -111
  350. package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -11
  351. package/lib/tree-view/tree-view.component.d.ts +121 -121
  352. package/lib/tree-view/tree-view.module.d.ts +11 -11
  353. package/lib/upload-file/upload-file.component.d.ts +42 -42
  354. package/lib/upload-file/upload-file.events.d.ts +10 -10
  355. package/lib/upload-file/upload-file.module.d.ts +13 -13
  356. package/lib/validation/validation-form.component.d.ts +19 -19
  357. package/lib/validation/validation-rule.widget.d.ts +23 -23
  358. package/lib/validation/validation.class.d.ts +16 -16
  359. package/lib/validation/validation.component.d.ts +25 -25
  360. package/lib/validation/validation.module.d.ts +11 -11
  361. package/package.json +15 -20
  362. package/acorex-components.d.ts +0 -5
  363. package/esm2020/acorex-components.mjs +0 -5
  364. package/esm2020/lib/accordion/accordion.component.mjs +0 -44
  365. package/esm2020/lib/accordion/accordion.module.mjs +0 -20
  366. package/esm2020/lib/base/base-page.class.mjs +0 -94
  367. package/esm2020/lib/base/components.class.mjs +0 -17
  368. package/esm2020/lib/base/element.class.mjs +0 -294
  369. package/esm2020/lib/base/events.class.mjs +0 -11
  370. package/esm2020/lib/button/button.component.mjs +0 -71
  371. package/esm2020/lib/button/button.module.mjs +0 -21
  372. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +0 -413
  373. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
  374. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +0 -54
  375. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +0 -18
  376. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +0 -213
  377. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +0 -68
  378. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -132
  379. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
  380. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -47
  381. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -95
  382. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -204
  383. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
  384. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -77
  385. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -98
  386. package/esm2020/lib/checkbox/checkbox.module.mjs +0 -20
  387. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +0 -422
  388. package/esm2020/lib/color-picker/color-picker.component.mjs +0 -82
  389. package/esm2020/lib/color-picker/color-picker.module.mjs +0 -24
  390. package/esm2020/lib/context-menu/context-menu.component.mjs +0 -65
  391. package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -135
  392. package/esm2020/lib/context-menu/context-menu.module.mjs +0 -20
  393. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +0 -138
  394. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +0 -117
  395. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +0 -74
  396. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +0 -117
  397. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -258
  398. package/esm2020/lib/data-filter/filter.class.mjs +0 -44
  399. package/esm2020/lib/data-filter/filter.module.mjs +0 -90
  400. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -166
  401. package/esm2020/lib/data-list/core/data-list.component.mjs +0 -40
  402. package/esm2020/lib/data-list/list/list.component.mjs +0 -124
  403. package/esm2020/lib/data-list/list/list.module.mjs +0 -22
  404. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +0 -85
  405. package/esm2020/lib/data-source/datasource.component.mjs +0 -47
  406. package/esm2020/lib/data-source/datasource.module.mjs +0 -18
  407. package/esm2020/lib/data-source/read-param.mjs +0 -5
  408. package/esm2020/lib/date-picker/date-picker.component.mjs +0 -702
  409. package/esm2020/lib/date-picker/date-picker.module.mjs +0 -25
  410. package/esm2020/lib/dialog/dialog.component.mjs +0 -24
  411. package/esm2020/lib/dialog/dialog.module.mjs +0 -21
  412. package/esm2020/lib/dialog/dialog.service.mjs +0 -150
  413. package/esm2020/lib/drawer/content.component.mjs +0 -18
  414. package/esm2020/lib/drawer/drawer-container.component.mjs +0 -36
  415. package/esm2020/lib/drawer/drawer.component.mjs +0 -142
  416. package/esm2020/lib/drawer/drawer.module.mjs +0 -23
  417. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -176
  418. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -26
  419. package/esm2020/lib/fieldset/fieldset.component.mjs +0 -59
  420. package/esm2020/lib/fieldset/fieldset.module.mjs +0 -19
  421. package/esm2020/lib/form-group/form-group.component.mjs +0 -34
  422. package/esm2020/lib/form-group/form-group.module.mjs +0 -21
  423. package/esm2020/lib/label/label.component.mjs +0 -19
  424. package/esm2020/lib/label/label.module.mjs +0 -21
  425. package/esm2020/lib/loading/loading-indicator.component.mjs +0 -17
  426. package/esm2020/lib/loading/loading-panel.component.mjs +0 -44
  427. package/esm2020/lib/loading/loading.module.mjs +0 -21
  428. package/esm2020/lib/loading/loading.service.mjs +0 -45
  429. package/esm2020/lib/menu/menu-item.component.mjs +0 -47
  430. package/esm2020/lib/menu/menu.component.mjs +0 -86
  431. package/esm2020/lib/menu/menu.module.mjs +0 -22
  432. package/esm2020/lib/menu/menu2.component.mjs +0 -96
  433. package/esm2020/lib/number-box/number-box.component.mjs +0 -622
  434. package/esm2020/lib/number-box/number-box.module.mjs +0 -21
  435. package/esm2020/lib/page/content.component.mjs +0 -32
  436. package/esm2020/lib/page/footer.component.mjs +0 -19
  437. package/esm2020/lib/page/page.component.mjs +0 -53
  438. package/esm2020/lib/page/page.module.mjs +0 -22
  439. package/esm2020/lib/panel-box/panel-box.component.mjs +0 -88
  440. package/esm2020/lib/panel-box/panel-box.module.mjs +0 -19
  441. package/esm2020/lib/password-box/password-box.component.mjs +0 -31
  442. package/esm2020/lib/password-box/password-box.module.mjs +0 -23
  443. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +0 -48
  444. package/esm2020/lib/popover/overlay.service.mjs +0 -91
  445. package/esm2020/lib/popover/popover.component.mjs +0 -133
  446. package/esm2020/lib/popover/popover.module.mjs +0 -19
  447. package/esm2020/lib/popup/popup.component.mjs +0 -147
  448. package/esm2020/lib/popup/popup.module.mjs +0 -25
  449. package/esm2020/lib/popup/popup.service.mjs +0 -93
  450. package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -19
  451. package/esm2020/lib/progress-bar/progress-bar.module.mjs +0 -19
  452. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +0 -61
  453. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
  454. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +0 -38
  455. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
  456. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +0 -115
  457. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
  458. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -211
  459. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -78
  460. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +0 -51
  461. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
  462. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +0 -63
  463. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
  464. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +0 -140
  465. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +0 -61
  466. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -72
  467. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -71
  468. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
  469. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -69
  470. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
  471. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -29
  472. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
  473. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +0 -32
  474. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
  475. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -32
  476. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
  477. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +0 -43
  478. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
  479. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +0 -157
  480. package/esm2020/lib/property-editor/property-editor.class.mjs +0 -102
  481. package/esm2020/lib/property-editor/property-editor.module.mjs +0 -196
  482. package/esm2020/lib/query-builder/query-builder-group.component.mjs +0 -124
  483. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -172
  484. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +0 -399
  485. package/esm2020/lib/query-builder/query-builder.class.mjs +0 -20
  486. package/esm2020/lib/query-builder/query-builder.component.mjs +0 -87
  487. package/esm2020/lib/query-builder/query-builder.module.mjs +0 -62
  488. package/esm2020/lib/query-builder/query-builder.service.mjs +0 -197
  489. package/esm2020/lib/search-bar/search-bar.component.mjs +0 -286
  490. package/esm2020/lib/search-bar/search-bar.module.mjs +0 -63
  491. package/esm2020/lib/searchbox/searchbox.component.mjs +0 -81
  492. package/esm2020/lib/searchbox/searchbox.module.mjs +0 -24
  493. package/esm2020/lib/selectbox/selectbox.component.mjs +0 -961
  494. package/esm2020/lib/selectbox/selectbox.module.mjs +0 -44
  495. package/esm2020/lib/selectbox/selectbox2.component.mjs +0 -574
  496. package/esm2020/lib/selection-list/selection-list.component.mjs +0 -108
  497. package/esm2020/lib/selection-list/selection-list.module.mjs +0 -21
  498. package/esm2020/lib/switch/switch.component.mjs +0 -51
  499. package/esm2020/lib/switch/switch.module.mjs +0 -20
  500. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +0 -71
  501. package/esm2020/lib/tab-page/tab-page-host.component.mjs +0 -114
  502. package/esm2020/lib/tab-page/tab-page.module.mjs +0 -21
  503. package/esm2020/lib/tab-page/tab-page.service.mjs +0 -160
  504. package/esm2020/lib/tab-strip/tab-strip.component.mjs +0 -36
  505. package/esm2020/lib/tab-strip/tab-strip.module.mjs +0 -19
  506. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +0 -24
  507. package/esm2020/lib/tab-view/tab-view.component.mjs +0 -105
  508. package/esm2020/lib/tab-view/tab-view.module.mjs +0 -21
  509. package/esm2020/lib/tab-view/tab.component.mjs +0 -30
  510. package/esm2020/lib/textarea/textarea.component.mjs +0 -26
  511. package/esm2020/lib/textarea/textarea.module.mjs +0 -21
  512. package/esm2020/lib/textbox/textbox.component.mjs +0 -39
  513. package/esm2020/lib/textbox/textbox.module.mjs +0 -24
  514. package/esm2020/lib/time-picker/time-picker.component.mjs +0 -943
  515. package/esm2020/lib/time-picker/time-picker.module.mjs +0 -22
  516. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +0 -74
  517. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
  518. package/esm2020/lib/toast/toast.module.mjs +0 -21
  519. package/esm2020/lib/toast/toast.service.mjs +0 -44
  520. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -78
  521. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +0 -57
  522. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +0 -54
  523. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +0 -47
  524. package/esm2020/lib/toolbar/toolbar-item.mjs +0 -6
  525. package/esm2020/lib/toolbar/toolbar.component.mjs +0 -13
  526. package/esm2020/lib/toolbar/toolbar.module.mjs +0 -40
  527. package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -100
  528. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
  529. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +0 -646
  530. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +0 -35
  531. package/esm2020/lib/tree-view/tree-view.component.mjs +0 -775
  532. package/esm2020/lib/tree-view/tree-view.module.mjs +0 -22
  533. package/esm2020/lib/upload-file/upload-file.component.mjs +0 -208
  534. package/esm2020/lib/upload-file/upload-file.events.mjs +0 -2
  535. package/esm2020/lib/upload-file/upload-file.module.mjs +0 -24
  536. package/esm2020/lib/validation/validation-form.component.mjs +0 -65
  537. package/esm2020/lib/validation/validation-rule.widget.mjs +0 -111
  538. package/esm2020/lib/validation/validation.class.mjs +0 -2
  539. package/esm2020/lib/validation/validation.component.mjs +0 -89
  540. package/esm2020/lib/validation/validation.module.mjs +0 -34
  541. package/esm2020/public-api.mjs +0 -158
  542. package/fesm2015/acorex-components.mjs +0 -16013
  543. package/fesm2015/acorex-components.mjs.map +0 -1
  544. package/fesm2020/acorex-components.mjs.map +0 -1
@@ -0,0 +1,1107 @@
1
+ import { Component, ChangeDetectorRef, ElementRef, Input, ChangeDetectionStrategy, EventEmitter, Output, } from '@angular/core';
2
+ import { AXBaseTextComponent, AXValidatableComponent, } from '../base/element.class';
3
+ import { AXValueEvent } from '../base/events.class';
4
+ import { AXTranslator } from '@acorex/core';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "../button/button.component";
9
+ import * as i4 from "ngx-mask";
10
+ export class AXTimePickerItemChangedEvent {
11
+ minute;
12
+ second;
13
+ hour;
14
+ time;
15
+ }
16
+ export class AXTimePickerChangedEvent extends AXValueEvent {
17
+ }
18
+ export class AXTimePickerComponent extends AXBaseTextComponent {
19
+ cdr;
20
+ onValueChanged = new EventEmitter();
21
+ // @ViewChild('input', { static: true })
22
+ // @ContentChild('input', { static: true })
23
+ // input: ElementRef<HTMLInputElement>;
24
+ timeType;
25
+ showMask = true;
26
+ type = 'HHmm';
27
+ showCurentTime = false;
28
+ clearDisabled = true;
29
+ HHmmss = [
30
+ /[0-2]/,
31
+ /[0-9]/,
32
+ ':',
33
+ /[0-5]/,
34
+ /[0-9]/,
35
+ ':',
36
+ /[0-5]/,
37
+ /[0-9]/,
38
+ ];
39
+ HHmm = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
40
+ HH = [/[0-2]/, /[0-9]/];
41
+ hhmmss = [
42
+ /[0-1]/,
43
+ /[0-9]/,
44
+ ':',
45
+ /[0-5]/,
46
+ /[0-9]/,
47
+ ':',
48
+ /[0-5]/,
49
+ /[0-9]/,
50
+ ];
51
+ hhmm = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
52
+ hh = [/[0-1]/, /[0-9]/];
53
+ // TODO: apply am pm from locale
54
+ hhmmssam = [
55
+ /[0-1]/,
56
+ /[0-9]/,
57
+ ':',
58
+ /[0-5]/,
59
+ /[0-9]/,
60
+ ':',
61
+ /[0-5]/,
62
+ /[0-9]/,
63
+ ' ',
64
+ /[a|p|ق|ب]/,
65
+ AXTranslator.get('dateTime.dayTime.m'),
66
+ ];
67
+ hhmmam = [
68
+ /[0-1]/,
69
+ /[0-9]/,
70
+ ':',
71
+ /[0-5]/,
72
+ /[0-9]/,
73
+ ' ',
74
+ /[a|p|ق|ب]/,
75
+ AXTranslator.get('dateTime.dayTime.m'),
76
+ ];
77
+ hham = [
78
+ /[0-1]/,
79
+ /[0-9]/,
80
+ ' ',
81
+ /[a|p|ق|ب]/,
82
+ AXTranslator.get('dateTime.dayTime.m'),
83
+ ];
84
+ textValue = '';
85
+ valueHam = '-- ' + AXTranslator.get('dateTime.dayTime.am');
86
+ valueMam = '--:-- ' + AXTranslator.get('dateTime.dayTime.am');
87
+ valueSam = '--:--:-- ' + AXTranslator.get('dateTime.dayTime.am');
88
+ _values;
89
+ get value() {
90
+ return this._values;
91
+ }
92
+ set value(v) {
93
+ if (v === '' ||
94
+ v == null ||
95
+ v === '--:--:--' ||
96
+ v === '--:--' ||
97
+ v === '--' ||
98
+ v === this.valueSam ||
99
+ v === this.valueMam ||
100
+ v === this.valueHam) {
101
+ this.clearDisabled = false;
102
+ const old = this._values;
103
+ switch (this.type) {
104
+ case 'HHmmss':
105
+ this.textValue = '--:--:--';
106
+ break;
107
+ case 'HHmm':
108
+ this.textValue = '--:--';
109
+ break;
110
+ case 'HH':
111
+ this.textValue = '--';
112
+ break;
113
+ case 'hhmmss':
114
+ this.textValue = '--:--:--';
115
+ break;
116
+ case 'hhmm':
117
+ this.textValue = '--:--';
118
+ break;
119
+ case 'hh':
120
+ this.textValue = '--';
121
+ break;
122
+ case 'hhmmssam':
123
+ this.textValue = this.valueSam;
124
+ break;
125
+ case 'hhmmam':
126
+ this.textValue = this.valueMam;
127
+ break;
128
+ case 'hham':
129
+ this.textValue = this.valueHam;
130
+ break;
131
+ }
132
+ this._values = null;
133
+ if (v !== old) {
134
+ this.valueChange.emit(null);
135
+ this.onValueChanged.emit({
136
+ component: this,
137
+ value: { hour: null, minute: null, second: null, time: null },
138
+ oldValue: { time: old },
139
+ htmlElement: this.ref.nativeElement,
140
+ });
141
+ }
142
+ }
143
+ else {
144
+ this.clearDisabled = true;
145
+ if (this._values && v) {
146
+ const old = this._values;
147
+ const ind1 = v.charAt(0);
148
+ const ind2 = v.charAt(1);
149
+ const ind3 = v.charAt(2);
150
+ const ind4 = v.charAt(3);
151
+ const ind5 = v.charAt(4);
152
+ const ind6 = v.charAt(5);
153
+ const ind7 = v.charAt(6);
154
+ const ind8 = v.charAt(7);
155
+ const ind9 = v.charAt(8);
156
+ const ind10 = v.charAt(9);
157
+ const indOld4 = old.charAt(9);
158
+ const indOld7 = old.charAt(9);
159
+ const indOld10 = old.charAt(9);
160
+ // handle hhmmssAm
161
+ if (ind1 === '-' &&
162
+ ind2 !== '-' &&
163
+ this.timeType.mask === this.hhmmssam) {
164
+ this.textValue =
165
+ '0' +
166
+ ind2 +
167
+ ind3 +
168
+ ind4 +
169
+ ind5 +
170
+ ind6 +
171
+ ind7 +
172
+ ind8 +
173
+ ind9 +
174
+ ind10 +
175
+ AXTranslator.get('dateTime.dayTime.m');
176
+ setTimeout(() => {
177
+ this.setCaretPosition(this.input.nativeElement, 2);
178
+ this.cursorPosition = 2;
179
+ }, 0);
180
+ }
181
+ if (ind4 === '-' &&
182
+ ind5 !== '-' &&
183
+ this.timeType.mask === this.hhmmssam) {
184
+ this.textValue =
185
+ ind1 +
186
+ ind2 +
187
+ ind3 +
188
+ '0' +
189
+ ind5 +
190
+ ind6 +
191
+ ind7 +
192
+ ind8 +
193
+ ind9 +
194
+ ind10 +
195
+ AXTranslator.get('dateTime.dayTime.m');
196
+ setTimeout(() => {
197
+ this.setCaretPosition(this.input.nativeElement, 5);
198
+ this.cursorPosition = 5;
199
+ }, 0);
200
+ }
201
+ if (ind7 === '-' &&
202
+ ind8 !== '-' &&
203
+ this.timeType.mask === this.hhmmssam) {
204
+ this.textValue =
205
+ ind1 +
206
+ ind2 +
207
+ ind3 +
208
+ ind4 +
209
+ ind5 +
210
+ ind6 +
211
+ '0' +
212
+ ind8 +
213
+ ind9 +
214
+ ind10 +
215
+ AXTranslator.get('dateTime.dayTime.m');
216
+ setTimeout(() => {
217
+ this.setCaretPosition(this.input.nativeElement, 8);
218
+ this.cursorPosition = 8;
219
+ }, 0);
220
+ }
221
+ if (indOld10 === '-' && this.timeType.mask === this.hhmmssam) {
222
+ this.textValue =
223
+ ind1 +
224
+ ind2 +
225
+ ind3 +
226
+ ind4 +
227
+ ind5 +
228
+ ind6 +
229
+ ind7 +
230
+ ind8 +
231
+ ind9 +
232
+ AXTranslator.get('dateTime.dayTime.am');
233
+ }
234
+ //
235
+ if (ind1 === '-' &&
236
+ ind2 !== '-' &&
237
+ this.timeType.mask === this.hhmmam) {
238
+ this.textValue =
239
+ '0' +
240
+ ind2 +
241
+ ind3 +
242
+ ind4 +
243
+ ind5 +
244
+ ind6 +
245
+ ind7 +
246
+ AXTranslator.get('dateTime.dayTime.m');
247
+ setTimeout(() => {
248
+ this.setCaretPosition(this.input.nativeElement, 2);
249
+ this.cursorPosition = 2;
250
+ }, 0);
251
+ }
252
+ if (ind4 === '-' &&
253
+ ind5 !== '-' &&
254
+ this.timeType.mask === this.hhmmam) {
255
+ this.textValue =
256
+ ind1 +
257
+ ind2 +
258
+ ind3 +
259
+ '0' +
260
+ ind5 +
261
+ ind6 +
262
+ ind7 +
263
+ AXTranslator.get('dateTime.dayTime.m');
264
+ setTimeout(() => {
265
+ this.setCaretPosition(this.input.nativeElement, 5);
266
+ this.cursorPosition = 5;
267
+ }, 0);
268
+ }
269
+ if (indOld7 === '-' && this.timeType.mask === this.hhmmam) {
270
+ this.textValue =
271
+ ind1 +
272
+ ind2 +
273
+ ind3 +
274
+ ind4 +
275
+ ind5 +
276
+ ind6 +
277
+ AXTranslator.get('dateTime.dayTime.am');
278
+ }
279
+ //
280
+ if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hham) {
281
+ this.textValue =
282
+ '0' + ind2 + ind3 + ind4 + AXTranslator.get('dateTime.dayTime.m');
283
+ setTimeout(() => {
284
+ this.setCaretPosition(this.input.nativeElement, 2);
285
+ this.cursorPosition = 2;
286
+ }, 0);
287
+ }
288
+ if (indOld4 === '-' && this.timeType.mask === this.hham) {
289
+ this.textValue =
290
+ ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
291
+ }
292
+ //
293
+ if (ind1 === '-' &&
294
+ ind2 !== '-' &&
295
+ (this.timeType.mask === this.hhmmss ||
296
+ this.timeType.mask === this.HHmmss)) {
297
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8;
298
+ setTimeout(() => {
299
+ this.setCaretPosition(this.input.nativeElement, 2);
300
+ this.cursorPosition = 2;
301
+ }, 0);
302
+ }
303
+ if (ind4 === '-' &&
304
+ ind5 !== '-' &&
305
+ (this.timeType.mask === this.hhmmss ||
306
+ this.timeType.mask === this.HHmmss)) {
307
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + ind8;
308
+ setTimeout(() => {
309
+ this.setCaretPosition(this.input.nativeElement, 6);
310
+ this.cursorPosition = 6;
311
+ }, 0);
312
+ }
313
+ if (ind7 === '-' &&
314
+ ind8 !== '-' &&
315
+ (this.timeType.mask === this.hhmmss ||
316
+ this.timeType.mask === this.HHmmss)) {
317
+ this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + '0' + ind8;
318
+ setTimeout(() => {
319
+ this.setCaretPosition(this.input.nativeElement, 9);
320
+ this.cursorPosition = 9;
321
+ }, 0);
322
+ }
323
+ //
324
+ if (ind1 === '-' &&
325
+ ind2 !== '-' &&
326
+ (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
327
+ this.textValue = '0' + ind2 + ind3 + ind4 + ind5;
328
+ setTimeout(() => {
329
+ this.setCaretPosition(this.input.nativeElement, 2);
330
+ this.cursorPosition = 2;
331
+ }, 0);
332
+ }
333
+ if (ind4 === '-' &&
334
+ ind5 !== '-' &&
335
+ (this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
336
+ this.textValue = ind1 + ind2 + ind3 + '0' + ind5;
337
+ setTimeout(() => {
338
+ this.setCaretPosition(this.input.nativeElement, 5);
339
+ this.cursorPosition = 5;
340
+ }, 0);
341
+ }
342
+ //
343
+ if (ind1 === '-' &&
344
+ ind2 !== '-' &&
345
+ (this.timeType.mask === this.hh || this.timeType.mask === this.HH)) {
346
+ this.textValue = '0' + ind2;
347
+ setTimeout(() => {
348
+ this.setCaretPosition(this.input.nativeElement, 2);
349
+ this.cursorPosition = 2;
350
+ }, 0);
351
+ }
352
+ }
353
+ if (v !== this._values) {
354
+ const old = this._values;
355
+ this.textValue = v;
356
+ this._values = v && v.indexOf('-') === -1 ? v : null;
357
+ if (v.indexOf('-') === -1) {
358
+ this.valueChange.emit(v);
359
+ this.onValueChanged.emit({
360
+ component: this,
361
+ value: {
362
+ time: v,
363
+ hour: Number(v[0] + v[1]),
364
+ minute: v[3] &&
365
+ v[3] !== AXTranslator.get('dateTime.dayTime.a') &&
366
+ v[3] !== AXTranslator.get('dateTime.dayTime.p')
367
+ ? Number(v[3] + v[4])
368
+ : null,
369
+ second: v[6] &&
370
+ v[6] !== AXTranslator.get('dateTime.dayTime.a') &&
371
+ v[6] !== AXTranslator.get('dateTime.dayTime.p')
372
+ ? Number(v[6] + v[7])
373
+ : null,
374
+ },
375
+ oldValue: { time: old },
376
+ htmlElement: this.ref.nativeElement,
377
+ });
378
+ this.cdr.detectChanges();
379
+ this.clearValidationStyle(this.input.nativeElement);
380
+ }
381
+ }
382
+ }
383
+ }
384
+ cursorPosition = 0;
385
+ constructor(cdr, ref) {
386
+ super(cdr, ref);
387
+ this.cdr = cdr;
388
+ this.timeType = 'HHmm';
389
+ }
390
+ clearValue() {
391
+ this.clear();
392
+ this.handleInputFocus();
393
+ }
394
+ ngOnInit() {
395
+ switch (this.timeType) {
396
+ case 'HHmmss':
397
+ this.type = 'HHmmss';
398
+ this.timeType = "00:00:00";
399
+ this.textValue = this.value ? this.value : '--:--:--';
400
+ break;
401
+ case 'HHmm':
402
+ this.type = 'HHmm';
403
+ this.timeType = "00:00";
404
+ this.textValue = this.value ? this.value : '--:--';
405
+ break;
406
+ case 'HH':
407
+ this.type = 'HH';
408
+ this.timeType = "00";
409
+ this.textValue = this.value ? this.value : '--';
410
+ break;
411
+ case 'hhmmss':
412
+ this.type = 'hhmmss';
413
+ this.timeType = "00:00:00";
414
+ this.textValue = this.value ? this.value : '--:--:--';
415
+ break;
416
+ case 'hhmm':
417
+ this.type = 'hhmm';
418
+ this.timeType = "00:00";
419
+ this.textValue = this.value ? this.value : '--:--';
420
+ break;
421
+ case 'hh':
422
+ this.type = 'hh';
423
+ this.timeType = "00";
424
+ this.textValue = this.value ? this.value : '--';
425
+ break;
426
+ case 'hhmmssam':
427
+ this.type = 'hhmmssam';
428
+ this.timeType = "00:00:00aa";
429
+ this.textValue = this.value ? this.value : this.valueSam;
430
+ break;
431
+ case 'hhmmam':
432
+ this.type = 'hhmmam';
433
+ this.timeType = "00:00aa";
434
+ this.textValue = this.value ? this.value : this.valueMam;
435
+ break;
436
+ case 'hham':
437
+ this.type = 'hham';
438
+ this.timeType = "9haa";
439
+ this.textValue = this.value ? this.value : this.valueHam;
440
+ break;
441
+ default:
442
+ this.type = 'HHmm';
443
+ this.timeType = "00:00";
444
+ this.textValue = this.value ? this.value : '--:--';
445
+ break;
446
+ }
447
+ if (this.showCurentTime === true) {
448
+ const hour = new Date().getHours() > 10
449
+ ? new Date().getHours()
450
+ : '0' + new Date().getHours();
451
+ let amHour;
452
+ if (new Date().getHours() > 10) {
453
+ if (new Date().getHours() > 12) {
454
+ if (new Date().getHours() - 12 < 10) {
455
+ amHour = '0' + (new Date().getHours() - 12);
456
+ }
457
+ else {
458
+ amHour = new Date().getHours();
459
+ }
460
+ }
461
+ else {
462
+ amHour = new Date().getHours();
463
+ }
464
+ }
465
+ else {
466
+ amHour = '0' + new Date().getHours();
467
+ }
468
+ const min = new Date().getMinutes() > 9
469
+ ? new Date().getMinutes()
470
+ : '0' + new Date().getMinutes();
471
+ const sec = new Date().getSeconds() > 9
472
+ ? new Date().getSeconds()
473
+ : '0' + new Date().getSeconds();
474
+ if (this.type === 'hh' ||
475
+ this.type === 'hhmm' ||
476
+ this.type === 'hhmmss' ||
477
+ this.type === 'hhmmssam') {
478
+ if (hour >= 12) {
479
+ this.value =
480
+ amHour +
481
+ ':' +
482
+ min +
483
+ ':' +
484
+ sec +
485
+ ' ' +
486
+ AXTranslator.get('dateTime.dayTime.pm');
487
+ }
488
+ else {
489
+ this.value =
490
+ amHour +
491
+ ':' +
492
+ min +
493
+ ':' +
494
+ sec +
495
+ ' ' +
496
+ AXTranslator.get('dateTime.dayTime.am');
497
+ }
498
+ }
499
+ else if (this.type === 'hham') {
500
+ if (hour >= 12) {
501
+ this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.pm');
502
+ }
503
+ else {
504
+ this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.am');
505
+ }
506
+ }
507
+ else if (this.type === 'hhmmam') {
508
+ if (hour >= 12) {
509
+ this.value =
510
+ amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.pm');
511
+ }
512
+ else {
513
+ this.value =
514
+ amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.am');
515
+ }
516
+ }
517
+ else {
518
+ this.value = hour + ':' + min + ':' + sec;
519
+ }
520
+ }
521
+ }
522
+ onStartfocus() {
523
+ this.input.nativeElement.style.caretColor = 'transparent';
524
+ setTimeout(() => {
525
+ this.setCaretPosition(this.input.nativeElement, 0);
526
+ this.cursorPosition = 0;
527
+ this.input.nativeElement.style.caretColor = 'auto';
528
+ }, 0);
529
+ }
530
+ handleInputFocus() {
531
+ this.onStartfocus();
532
+ this.input.nativeElement.focus();
533
+ }
534
+ handleInputBlur(e) {
535
+ if (this.textValue.indexOf('-') !== -1) {
536
+ switch (this.type) {
537
+ case 'HHmmss':
538
+ this.textValue = '--:--:--';
539
+ break;
540
+ case 'HHmm':
541
+ this.textValue = '--:--';
542
+ break;
543
+ case 'HH':
544
+ this.textValue = '--';
545
+ break;
546
+ case 'hhmmss':
547
+ this.textValue = '--:--:--';
548
+ break;
549
+ case 'hhmm':
550
+ this.textValue = '--:--';
551
+ break;
552
+ case 'hh':
553
+ this.textValue = '--';
554
+ break;
555
+ case 'hhmmssam':
556
+ this.textValue = this.valueSam;
557
+ break;
558
+ case 'hhmmam':
559
+ this.textValue = this.valueMam;
560
+ break;
561
+ case 'hham':
562
+ this.textValue = this.valueHam;
563
+ break;
564
+ }
565
+ }
566
+ }
567
+ handleKeyPress(event) {
568
+ const inputChar = String.fromCharCode(event.charCode);
569
+ const firstChar = this.textValue.charAt(0);
570
+ const secondChar = this.textValue.charAt(1);
571
+ setTimeout(() => {
572
+ if (this.input.nativeElement.selectionStart ||
573
+ this.input.nativeElement.selectionStart === 0) {
574
+ this.cursorPosition = this.input.nativeElement.selectionStart;
575
+ // this.cursorPosition += 1 ;
576
+ }
577
+ }, 0);
578
+ if (firstChar === '2') {
579
+ if (secondChar === '' ||
580
+ this.textValue.charAt(1) >= '4' ||
581
+ this.cursorPosition < 3) {
582
+ if (inputChar >= '4') {
583
+ event.preventDefault();
584
+ }
585
+ }
586
+ }
587
+ if (this.timeType.mask === this.hhmmss ||
588
+ this.timeType.mask === this.hhmm ||
589
+ this.timeType.mask === this.hh ||
590
+ this.timeType.mask === this.hhmmssam ||
591
+ this.timeType.mask === this.hhmmam ||
592
+ this.timeType.mask === this.hham) {
593
+ if (firstChar === '1') {
594
+ if (secondChar === '' ||
595
+ this.textValue.charAt(1) >= '3' ||
596
+ this.cursorPosition < 3) {
597
+ if (inputChar >= '3') {
598
+ event.preventDefault();
599
+ }
600
+ }
601
+ }
602
+ }
603
+ if (inputChar === '-') {
604
+ event.preventDefault();
605
+ }
606
+ }
607
+ handleKeyUp(event) {
608
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
609
+ this.input.nativeElement.style.caretColor = 'auto';
610
+ event.preventDefault();
611
+ event.stopPropagation();
612
+ }
613
+ // up & down button
614
+ if (event.key === 'ArrowUp') {
615
+ this.setCaret();
616
+ }
617
+ if (event.key === 'ArrowDown') {
618
+ this.setCaret();
619
+ }
620
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
621
+ event.preventDefault();
622
+ return false;
623
+ }
624
+ // left & right Button
625
+ if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
626
+ if (this.input.nativeElement.selectionStart ||
627
+ this.input.nativeElement.selectionStart === 0) {
628
+ this.cursorPosition = this.input.nativeElement.selectionStart;
629
+ }
630
+ }
631
+ // home button
632
+ if (event.key === 'Home') {
633
+ this.cursorPosition = 0;
634
+ }
635
+ // end button
636
+ if (event.key === 'End') {
637
+ if (this.timeType.mask === this.hhmmssam ||
638
+ this.timeType.mask === this.hhmmam ||
639
+ this.timeType.mask === this.hham) {
640
+ if (this.timeType.mask === this.hhmmssam) {
641
+ this.cursorPosition = 9;
642
+ setTimeout(() => {
643
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
644
+ this.input.nativeElement.style.caretColor = 'auto';
645
+ }, 0);
646
+ }
647
+ if (this.timeType.mask === this.hhmmam) {
648
+ this.cursorPosition = 6;
649
+ setTimeout(() => {
650
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
651
+ this.input.nativeElement.style.caretColor = 'auto';
652
+ }, 0);
653
+ }
654
+ if (this.timeType.mask === this.hham) {
655
+ this.cursorPosition = 3;
656
+ setTimeout(() => {
657
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
658
+ this.input.nativeElement.style.caretColor = 'auto';
659
+ }, 0);
660
+ }
661
+ }
662
+ else {
663
+ this.cursorPosition = this.textValue.length;
664
+ }
665
+ }
666
+ // backspace Control
667
+ if (event.key === 'Backspace') {
668
+ const ind1 = this.textValue.charAt(0);
669
+ const ind2 = this.textValue.charAt(1);
670
+ const ind3 = this.textValue.charAt(2);
671
+ const ind4 = this.textValue.charAt(3);
672
+ const ind5 = this.textValue.charAt(4);
673
+ const ind6 = this.textValue.charAt(5);
674
+ const ind7 = this.textValue.charAt(6);
675
+ const ind8 = this.textValue.charAt(7);
676
+ const ind9 = this.textValue.charAt(8);
677
+ const ind10 = this.textValue.charAt(9);
678
+ if (this.timeType.mask === this.hhmmssam) {
679
+ if (ind10 === '-') {
680
+ this.textValue =
681
+ ind1 +
682
+ ind2 +
683
+ ind3 +
684
+ ind4 +
685
+ ind5 +
686
+ ind6 +
687
+ ind7 +
688
+ ind8 +
689
+ ind9 +
690
+ AXTranslator.get('dateTime.dayTime.am');
691
+ setTimeout(() => {
692
+ this.setCaretPosition(this.input.nativeElement, 0);
693
+ this.cursorPosition = 0;
694
+ }, 0);
695
+ }
696
+ }
697
+ if (this.timeType.mask === this.hhmmam) {
698
+ if (ind7 === '-') {
699
+ this.textValue =
700
+ ind1 +
701
+ ind2 +
702
+ ind3 +
703
+ ind4 +
704
+ ind5 +
705
+ ind6 +
706
+ AXTranslator.get('dateTime.dayTime.am');
707
+ setTimeout(() => {
708
+ this.setCaretPosition(this.input.nativeElement, 0);
709
+ this.cursorPosition = 0;
710
+ }, 0);
711
+ }
712
+ }
713
+ if (this.timeType.mask === this.hham) {
714
+ if (ind4 === '-') {
715
+ this.textValue =
716
+ ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
717
+ setTimeout(() => {
718
+ this.setCaretPosition(this.input.nativeElement, 0);
719
+ this.cursorPosition = 0;
720
+ }, 0);
721
+ }
722
+ }
723
+ if (this.textValue.length <= 0) {
724
+ this.cursorPosition = 0;
725
+ }
726
+ else {
727
+ this.cursorPosition -= 1;
728
+ }
729
+ }
730
+ }
731
+ handleKeyDown(event) {
732
+ if (event.key === 'End') {
733
+ if (this.timeType.mask === this.hhmmssam ||
734
+ this.timeType.mask === this.hhmmam ||
735
+ this.timeType.mask === this.hham) {
736
+ this.input.nativeElement.style.caretColor = 'transparent';
737
+ }
738
+ else {
739
+ this.input.nativeElement.style.caretColor = 'auto';
740
+ }
741
+ }
742
+ let newValue = this.textValue;
743
+ const ind1 = newValue.charAt(0);
744
+ const ind2 = newValue.charAt(1);
745
+ const ind3 = this.textValue.charAt(2);
746
+ const ind4 = this.textValue.charAt(3);
747
+ const ind5 = this.textValue.charAt(4);
748
+ const ind6 = this.textValue.charAt(5);
749
+ const ind7 = this.textValue.charAt(6);
750
+ const ind8 = this.textValue.charAt(7);
751
+ const ind9 = this.textValue.charAt(8);
752
+ const ind10 = this.textValue.charAt(9);
753
+ const ind11 = this.textValue.charAt(10);
754
+ // up key
755
+ if (event.key === 'ArrowUp') {
756
+ // hour
757
+ if (this.cursorPosition <= 2) {
758
+ const hourind = ind1 + ind2;
759
+ const newHour = +hourind + 1;
760
+ newValue = newHour.toString();
761
+ if (this.timeType.mask === this.hhmmss ||
762
+ this.timeType.mask === this.hhmm ||
763
+ this.timeType.mask === this.hh ||
764
+ this.timeType.mask === this.hhmmssam ||
765
+ this.timeType.mask === this.hhmmam ||
766
+ this.timeType.mask === this.hham) {
767
+ if (hourind === '--') {
768
+ newValue = '0';
769
+ }
770
+ if (ind1 !== '-' && hourind === ind1 + '-') {
771
+ newValue = '0';
772
+ }
773
+ if (ind2 !== '-' && hourind === '-' + ind2) {
774
+ newValue = '0';
775
+ }
776
+ if (+newValue > 12) {
777
+ newValue = '01';
778
+ }
779
+ else if (+newValue < 10) {
780
+ newValue = '0' + newValue;
781
+ }
782
+ }
783
+ else {
784
+ if (hourind === '--') {
785
+ newValue = '0';
786
+ }
787
+ if (ind1 !== '-' && hourind === ind1 + '-') {
788
+ newValue = '0';
789
+ }
790
+ if (ind2 !== '-' && hourind === '-' + ind2) {
791
+ newValue = '0';
792
+ }
793
+ if (+newValue > 23) {
794
+ newValue = '00';
795
+ }
796
+ else if (+newValue < 10) {
797
+ newValue = '0' + newValue;
798
+ }
799
+ }
800
+ const afterHourind = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
801
+ const hour = newValue.toString() + afterHourind;
802
+ this.textValue = hour;
803
+ }
804
+ // minute
805
+ if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
806
+ const hourind = ind4 + ind5;
807
+ const newHour = +hourind + 1;
808
+ newValue = newHour.toString();
809
+ if (hourind === '--') {
810
+ newValue = '0';
811
+ }
812
+ if (ind4 !== '-' && hourind === ind4 + '-') {
813
+ newValue = '0';
814
+ }
815
+ if (ind5 !== '-' && hourind === '-' + ind5) {
816
+ newValue = '0';
817
+ }
818
+ if (+newValue > 59) {
819
+ newValue = '00';
820
+ }
821
+ else if (+newValue < 10) {
822
+ newValue = '0' + newValue;
823
+ }
824
+ const beforeHourind = ind1 + ind2 + ind3;
825
+ const afterHourind = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
826
+ const minute = beforeHourind + newValue.toString() + afterHourind;
827
+ this.textValue = minute;
828
+ }
829
+ // second
830
+ if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
831
+ const secondind = ind7 + ind8;
832
+ const newSecond = +secondind + 1;
833
+ newValue = newSecond.toString();
834
+ if (secondind === '--') {
835
+ newValue = '0';
836
+ }
837
+ if (ind7 !== '-' && secondind === ind7 + '-') {
838
+ newValue = '0';
839
+ }
840
+ if (ind8 !== '-' && secondind === '-' + ind8) {
841
+ newValue = '0';
842
+ }
843
+ if (+newValue > 59) {
844
+ newValue = '00';
845
+ }
846
+ else if (+newValue < 10) {
847
+ newValue = '0' + newValue;
848
+ }
849
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
850
+ const afterHourind = ind9 + ind10 + ind11;
851
+ const second = beforeHourind + newValue.toString() + afterHourind;
852
+ this.textValue = second;
853
+ }
854
+ // type am/PM
855
+ if (this.timeType.mask === this.hhmmssam) {
856
+ if (this.cursorPosition > 8) {
857
+ let typeind = ind10.toString();
858
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
859
+ const afterHourind = ind11;
860
+ if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
861
+ typeind = AXTranslator.get('dateTime.dayTime.a');
862
+ }
863
+ else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
864
+ typeind = AXTranslator.get('dateTime.dayTime.p');
865
+ }
866
+ this.textValue = beforeHourind + typeind + afterHourind;
867
+ }
868
+ }
869
+ if (this.timeType.mask === this.hhmmam) {
870
+ if (this.cursorPosition >= 6) {
871
+ let typeind = ind7.toString();
872
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
873
+ const afterHourind = ind8;
874
+ if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
875
+ typeind = AXTranslator.get('dateTime.dayTime.a');
876
+ }
877
+ else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
878
+ typeind = AXTranslator.get('dateTime.dayTime.p');
879
+ }
880
+ this.textValue = beforeHourind + typeind + afterHourind;
881
+ }
882
+ }
883
+ if (this.timeType.mask === this.hham) {
884
+ if (this.cursorPosition >= 3) {
885
+ let typeind2 = ind4.toString();
886
+ const beforeHourind = ind1 + ind2 + ind3;
887
+ const afterHourind = ind5;
888
+ if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
889
+ typeind2 = AXTranslator.get('dateTime.dayTime.a');
890
+ }
891
+ else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
892
+ typeind2 = AXTranslator.get('dateTime.dayTime.p');
893
+ }
894
+ this.textValue = beforeHourind + typeind2 + afterHourind;
895
+ }
896
+ }
897
+ }
898
+ // key down
899
+ if (event.key === 'ArrowDown') {
900
+ // hour
901
+ if (this.cursorPosition <= 2) {
902
+ const hourind = ind1 + ind2;
903
+ const newHour = +hourind - 1;
904
+ newValue = newHour.toString();
905
+ if (this.timeType.mask === this.hhmmss ||
906
+ this.timeType.mask === this.hhmm ||
907
+ this.timeType.mask === this.hh ||
908
+ this.timeType.mask === this.hhmmssam ||
909
+ this.timeType.mask === this.hhmmam ||
910
+ this.timeType.mask === this.hham) {
911
+ if (hourind === '--') {
912
+ newValue = '0';
913
+ }
914
+ if (ind1 !== '-' && hourind === ind1 + '-') {
915
+ newValue = '0';
916
+ }
917
+ if (ind2 !== '-' && hourind === '-' + ind2) {
918
+ newValue = '0';
919
+ }
920
+ if (+newValue < 1) {
921
+ newValue = '12';
922
+ }
923
+ else if (+newValue < 10) {
924
+ newValue = '0' + newValue;
925
+ }
926
+ }
927
+ else {
928
+ if (hourind === '--') {
929
+ newValue = '0';
930
+ }
931
+ if (ind1 !== '-' && hourind === ind1 + '-') {
932
+ newValue = '0';
933
+ }
934
+ if (ind2 !== '-' && hourind === '-' + ind2) {
935
+ newValue = '0';
936
+ }
937
+ if (+newValue < 0) {
938
+ newValue = '23';
939
+ }
940
+ else if (+newValue < 10) {
941
+ newValue = '0' + newValue;
942
+ }
943
+ }
944
+ const afterHourIndex = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
945
+ const hour = newValue.toString() + afterHourIndex;
946
+ this.textValue = hour;
947
+ }
948
+ // minute
949
+ if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
950
+ const minuteind = ind4 + ind5;
951
+ const newMinute = +minuteind - 1;
952
+ newValue = newMinute.toString();
953
+ if (minuteind === '--') {
954
+ newValue = '0';
955
+ }
956
+ if (ind4 !== '-' && minuteind === ind4 + '-') {
957
+ newValue = '0';
958
+ }
959
+ if (ind5 !== '-' && minuteind === '-' + ind5) {
960
+ newValue = '0';
961
+ }
962
+ if (minuteind === '--') {
963
+ newValue = '0';
964
+ }
965
+ if (+newValue < 0) {
966
+ newValue = '59';
967
+ }
968
+ else if (+newValue < 10) {
969
+ newValue = '0' + newValue;
970
+ }
971
+ const beforeMinuteIndex = ind1 + ind2 + ind3;
972
+ const afterMinuteIndex = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
973
+ const minute = beforeMinuteIndex + newValue.toString() + afterMinuteIndex;
974
+ this.textValue = minute;
975
+ }
976
+ // second
977
+ if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
978
+ const secondIndex = ind7 + ind8;
979
+ const newSecond = +secondIndex - 1;
980
+ newValue = newSecond.toString();
981
+ if (secondIndex === '--') {
982
+ newValue = '0';
983
+ }
984
+ if (ind7 !== '-' && secondIndex === ind7 + '-') {
985
+ newValue = '0';
986
+ }
987
+ if (ind8 !== '-' && secondIndex === '-' + ind8) {
988
+ newValue = '0';
989
+ }
990
+ if (secondIndex === '--') {
991
+ newValue = '0';
992
+ }
993
+ if (+newValue < 0) {
994
+ newValue = '59';
995
+ }
996
+ else if (+newValue < 10) {
997
+ newValue = '0' + newValue;
998
+ }
999
+ const beforesecondIndex = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
1000
+ const aftersecondIndex = ind9 + ind10 + ind11;
1001
+ const second = beforesecondIndex + newValue.toString() + aftersecondIndex;
1002
+ this.textValue = second;
1003
+ }
1004
+ // type
1005
+ if (this.timeType.mask === this.hhmmssam) {
1006
+ if (this.cursorPosition > 8) {
1007
+ let typeind = ind10.toString();
1008
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
1009
+ const afterHourind = ind11;
1010
+ if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
1011
+ typeind = AXTranslator.get('dateTime.dayTime.a');
1012
+ }
1013
+ else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
1014
+ typeind = AXTranslator.get('dateTime.dayTime.p');
1015
+ }
1016
+ this.textValue = beforeHourind + typeind + afterHourind;
1017
+ }
1018
+ }
1019
+ if (this.timeType.mask === this.hhmmam) {
1020
+ if (this.cursorPosition >= 6) {
1021
+ let typeind = ind7.toString();
1022
+ const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
1023
+ const afterHourind = ind8;
1024
+ if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
1025
+ typeind = AXTranslator.get('dateTime.dayTime.a');
1026
+ }
1027
+ else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
1028
+ typeind = AXTranslator.get('dateTime.dayTime.p');
1029
+ }
1030
+ this.textValue = beforeHourind + typeind + afterHourind;
1031
+ }
1032
+ }
1033
+ if (this.timeType.mask === this.hham) {
1034
+ if (this.cursorPosition >= 3) {
1035
+ let typeind2 = ind4.toString();
1036
+ const beforeHourind = ind1 + ind2 + ind3;
1037
+ const afterHourind = ind5;
1038
+ //TO DO this is wrong check index
1039
+ if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
1040
+ typeind2 = AXTranslator.get('dateTime.dayTime.a');
1041
+ }
1042
+ else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
1043
+ typeind2 = AXTranslator.get('dateTime.dayTime.p');
1044
+ }
1045
+ this.textValue = beforeHourind + typeind2 + afterHourind;
1046
+ }
1047
+ }
1048
+ }
1049
+ if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
1050
+ this.input.nativeElement.style.caretColor = 'transparent';
1051
+ event.preventDefault();
1052
+ event.stopPropagation();
1053
+ return false;
1054
+ }
1055
+ if (event.key === 'Delete') {
1056
+ event.preventDefault();
1057
+ }
1058
+ }
1059
+ handleClick(event) {
1060
+ if (this.input.nativeElement.selectionStart ||
1061
+ this.input.nativeElement.selectionStart === 0) {
1062
+ this.cursorPosition = this.input.nativeElement.selectionStart;
1063
+ }
1064
+ }
1065
+ doGetCaretPosition(ctrl) {
1066
+ let CaretPos = 0;
1067
+ if (ctrl.selectionStart || ctrl.selectionStart === 0) {
1068
+ CaretPos = ctrl.selectionStart;
1069
+ return CaretPos;
1070
+ }
1071
+ }
1072
+ setCaretPosition(ctrl, pos) {
1073
+ if (ctrl.setSelectionRange) {
1074
+ ctrl.focus();
1075
+ ctrl.setSelectionRange(pos, pos);
1076
+ }
1077
+ else if (ctrl.createTextRange) {
1078
+ const range = ctrl.createTextRange();
1079
+ range.collapse(true);
1080
+ range.moveEnd('character', pos);
1081
+ range.moveStart('character', pos);
1082
+ range.select();
1083
+ }
1084
+ }
1085
+ setCaret() {
1086
+ this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
1087
+ }
1088
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXTimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1089
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXTimePickerComponent, selector: "ax-time-picker", inputs: { timeType: "timeType", showMask: "showMask", showCurentTime: "showCurentTime" }, outputs: { onValueChanged: "onValueChanged" }, host: { styleAttribute: "width: 100%" }, providers: [
1090
+ { provide: AXValidatableComponent, useExisting: AXTimePickerComponent },
1091
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\n <div class=\"ax items-wrapper\">\n <ng-content select=\"[start]\"> </ng-content>\n <i class=\"form-item-icon {{ icon }}\" *ngIf=\"icon\"></i>\n </div>\n <div class=\"content\" #content>\n <div class=\"ax form-control input {{ size }}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\"\n [class.icon]=\"icon\">\n <input #input type=\"text\" class=\"ax {{ size }}\" [mask]=\"timeType\" [showMaskTyped]=\"showMask\"\n [(ngModel)]=\"textValue\" placeholder=\"{{ placeholder }}\" [readonly]=\"readonly\" [disabled]=\"disabled\"\n [ngClass]=\"setTextAlign()\" [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur($event)\" (keypress)=\"handleKeyPress($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\" />\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\"\n [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\n <ng-content select=\"[end]\"> </ng-content>\n </div>\n</div>\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["type", "icon", "submitBehavior", "cancelBehavior", "block", "loading", "selected"] }, { kind: "directive", type: i4.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1092
+ }
1093
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXTimePickerComponent, decorators: [{
1094
+ type: Component,
1095
+ args: [{ selector: 'ax-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
1096
+ { provide: AXValidatableComponent, useExisting: AXTimePickerComponent },
1097
+ ], template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\n <div class=\"ax items-wrapper\">\n <ng-content select=\"[start]\"> </ng-content>\n <i class=\"form-item-icon {{ icon }}\" *ngIf=\"icon\"></i>\n </div>\n <div class=\"content\" #content>\n <div class=\"ax form-control input {{ size }}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\"\n [class.icon]=\"icon\">\n <input #input type=\"text\" class=\"ax {{ size }}\" [mask]=\"timeType\" [showMaskTyped]=\"showMask\"\n [(ngModel)]=\"textValue\" placeholder=\"{{ placeholder }}\" [readonly]=\"readonly\" [disabled]=\"disabled\"\n [ngClass]=\"setTextAlign()\" [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur($event)\" (keypress)=\"handleKeyPress($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\" />\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button *ngIf=\"value && allowClear\" icon=\"far fa-times\" type=\"danger blank\" (click)=\"clear()\"\n [disabled]=\"disabled\" [tabIndex]=\"-1\"></ax-button>\n <ng-content select=\"[end]\"> </ng-content>\n </div>\n</div>\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->" }]
1098
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { onValueChanged: [{
1099
+ type: Output
1100
+ }], timeType: [{
1101
+ type: Input
1102
+ }], showMask: [{
1103
+ type: Input
1104
+ }], showCurentTime: [{
1105
+ type: Input
1106
+ }] } });
1107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLEtBQUssRUFFTCx1QkFBdUIsRUFDdkIsWUFBWSxFQUNaLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7QUFFNUMsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxNQUFNLENBQVU7SUFDaEIsTUFBTSxDQUFVO0lBQ2hCLElBQUksQ0FBVTtJQUNkLElBQUksQ0FBUztDQUNkO0FBQ0QsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFlBQTBDO0NBQUk7QUFXNUYsTUFBTSxPQUFPLHFCQUNYLFNBQVEsbUJBQW1CO0lBa2FMO0lBL1p0QixjQUFjLEdBQ1osSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFFL0Msd0NBQXdDO0lBQ3hDLDJDQUEyQztJQUMzQyx1Q0FBdUM7SUFNdkMsUUFBUSxDQUFNO0lBR2QsUUFBUSxHQUFHLElBQUksQ0FBQTtJQUVmLElBQUksR0FBVyxNQUFNLENBQUM7SUFFdEIsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUVoQyxhQUFhLEdBQVksSUFBSSxDQUFDO0lBQzlCLE1BQU0sR0FBUTtRQUNaLE9BQU87UUFDUCxPQUFPO1FBQ1AsR0FBRztRQUNILE9BQU87UUFDUCxPQUFPO1FBQ1AsR0FBRztRQUNILE9BQU87UUFDUCxPQUFPO0tBQ1IsQ0FBQztJQUNGLElBQUksR0FBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxFQUFFLEdBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0IsTUFBTSxHQUFRO1FBQ1osT0FBTztRQUNQLE9BQU87UUFDUCxHQUFHO1FBQ0gsT0FBTztRQUNQLE9BQU87UUFDUCxHQUFHO1FBQ0gsT0FBTztRQUNQLE9BQU87S0FDUixDQUFDO0lBQ0YsSUFBSSxHQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELEVBQUUsR0FBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QixnQ0FBZ0M7SUFDaEMsUUFBUSxHQUFRO1FBQ2QsT0FBTztRQUNQLE9BQU87UUFDUCxHQUFHO1FBQ0gsT0FBTztRQUNQLE9BQU87UUFDUCxHQUFHO1FBQ0gsT0FBTztRQUNQLE9BQU87UUFDUCxHQUFHO1FBQ0gsV0FBVztRQUNYLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7S0FDdkMsQ0FBQztJQUNGLE1BQU0sR0FBUTtRQUNaLE9BQU87UUFDUCxPQUFPO1FBQ1AsR0FBRztRQUNILE9BQU87UUFDUCxPQUFPO1FBQ1AsR0FBRztRQUNILFdBQVc7UUFDWCxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0tBQ3ZDLENBQUM7SUFDRixJQUFJLEdBQVE7UUFDVixPQUFPO1FBQ1AsT0FBTztRQUNQLEdBQUc7UUFDSCxXQUFXO1FBQ1gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztLQUN2QyxDQUFDO0lBQ0YsU0FBUyxHQUFXLEVBQUUsQ0FBQztJQUV2QixRQUFRLEdBQVcsS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNuRSxRQUFRLEdBQVcsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN0RSxRQUFRLEdBQVcsV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUVqRSxPQUFPLENBQVM7SUFDeEIsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFXLEtBQUssQ0FBQyxDQUFTO1FBQ3hCLElBQ0UsQ0FBQyxLQUFLLEVBQUU7WUFDUixDQUFDLElBQUksSUFBSTtZQUNULENBQUMsS0FBSyxVQUFVO1lBQ2hCLENBQUMsS0FBSyxPQUFPO1lBQ2IsQ0FBQyxLQUFLLElBQUk7WUFDVixDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVE7WUFDbkIsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQ25CLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUNuQjtZQUNBLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDekIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNqQixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssSUFBSTtvQkFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDdEIsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO29CQUN6QixNQUFNO2dCQUNSLEtBQUssSUFBSTtvQkFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDdEIsTUFBTTtnQkFDUixLQUFLLFVBQVU7b0JBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMvQixNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQy9CLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDL0IsTUFBTTthQUNUO1lBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDdkIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtvQkFDN0QsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtpQkFDcEMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTtnQkFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFMUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFL0Isa0JBQWtCO2dCQUNsQixJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQ3BDO29CQUNBLElBQUksQ0FBQyxTQUFTO3dCQUNaLEdBQUc7NEJBQ0gsSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLEtBQUs7NEJBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQ3BDO29CQUNBLElBQUksQ0FBQyxTQUFTO3dCQUNaLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLEdBQUc7NEJBQ0gsSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLEtBQUs7NEJBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQ3BDO29CQUNBLElBQUksQ0FBQyxTQUFTO3dCQUNaLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLEdBQUc7NEJBQ0gsSUFBSTs0QkFDSixJQUFJOzRCQUNKLEtBQUs7NEJBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUFJLFFBQVEsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDNUQsSUFBSSxDQUFDLFNBQVM7d0JBQ1osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUMzQztnQkFFRCxFQUFFO2dCQUNGLElBQ0UsSUFBSSxLQUFLLEdBQUc7b0JBQ1osSUFBSSxLQUFLLEdBQUc7b0JBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFDbEM7b0JBQ0EsSUFBSSxDQUFDLFNBQVM7d0JBQ1osR0FBRzs0QkFDSCxJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7b0JBQ3pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELElBQ0UsSUFBSSxLQUFLLEdBQUc7b0JBQ1osSUFBSSxLQUFLLEdBQUc7b0JBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFDbEM7b0JBQ0EsSUFBSSxDQUFDLFNBQVM7d0JBQ1osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osR0FBRzs0QkFDSCxJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7b0JBQ3pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUN6RCxJQUFJLENBQUMsU0FBUzt3QkFDWixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQzNDO2dCQUVELEVBQUU7Z0JBQ0YsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDcEUsSUFBSSxDQUFDLFNBQVM7d0JBQ1osR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztvQkFDcEUsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7Z0JBQ0QsSUFBSSxPQUFPLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxTQUFTO3dCQUNaLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDaEU7Z0JBRUQsRUFBRTtnQkFDRixJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU07d0JBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDckM7b0JBQ0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUN0RSxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU07d0JBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDckM7b0JBQ0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUN0RSxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU07d0JBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDckM7b0JBQ0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUN0RSxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFFRCxFQUFFO2dCQUNGLElBQ0UsSUFBSSxLQUFLLEdBQUc7b0JBQ1osSUFBSSxLQUFLLEdBQUc7b0JBQ1osQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDdEU7b0JBQ0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUNqRCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3RFO29CQUNBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDakQsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7Z0JBRUQsRUFBRTtnQkFDRixJQUNFLElBQUksS0FBSyxHQUFHO29CQUNaLElBQUksS0FBSyxHQUFHO29CQUNaLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQ2xFO29CQUNBLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7YUFDRjtZQUNELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDckQsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLEtBQUssRUFBRTs0QkFDTCxJQUFJLEVBQUUsQ0FBQzs0QkFDUCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3pCLE1BQU0sRUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNGLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2dDQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztnQ0FDL0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNyQixDQUFDLENBQUMsSUFBSTs0QkFDVixNQUFNLEVBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDRixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztnQ0FDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7Z0NBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDckIsQ0FBQyxDQUFDLElBQUk7eUJBQ1g7d0JBQ0QsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTt3QkFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtxQkFDcEMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNyRDthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsY0FBYyxHQUFXLENBQUMsQ0FBQztJQUUzQixZQUFzQixHQUFzQixFQUFFLEdBQWU7UUFDM0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQURJLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBRzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDTixRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDckIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RELE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO2dCQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbkQsTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RELE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO2dCQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbkQsTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO2dCQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQTtnQkFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUN6RCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQTtnQkFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUV6RCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQTtnQkFFdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUN6RCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO2dCQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbkQsTUFBTTtTQUNUO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUNoQyxNQUFNLElBQUksR0FDUixJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ3hCLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtnQkFDdkIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksTUFBVyxDQUFDO1lBRWhCLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQzlCLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO3dCQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztxQkFDN0M7eUJBQU07d0JBQ0wsTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ2hDO2lCQUNGO3FCQUFNO29CQUNMLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNoQzthQUNGO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN0QztZQUVELE1BQU0sR0FBRyxHQUNQLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUN6QixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQ1AsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2dCQUN6QixDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3pCLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxJQUNFLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSTtnQkFDbEIsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO2dCQUNwQixJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7Z0JBQ3RCLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUN4QjtnQkFDQSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEtBQUs7d0JBQ1IsTUFBTTs0QkFDTixHQUFHOzRCQUNILEdBQUc7NEJBQ0gsR0FBRzs0QkFDSCxHQUFHOzRCQUNILEdBQUc7NEJBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUMzQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSzt3QkFDUixNQUFNOzRCQUNOLEdBQUc7NEJBQ0gsR0FBRzs0QkFDSCxHQUFHOzRCQUNILEdBQUc7NEJBQ0gsR0FBRzs0QkFDSCxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQzNDO2FBQ0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDL0IsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO29CQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQ3JFO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQ3JFO2FBQ0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDakMsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO29CQUNkLElBQUksQ0FBQyxLQUFLO3dCQUNSLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQ3RFO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLO3dCQUNSLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQ3RFO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO2FBQzNDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQzFELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsZUFBZSxDQUFDLENBQUM7UUFDZixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3RDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDakIsS0FBSyxRQUFRO29CQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO29CQUM1QixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLElBQUk7b0JBQ1AsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO29CQUM1QixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLElBQUk7b0JBQ1AsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxVQUFVO29CQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDL0IsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMvQixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQy9CLE1BQU07YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWM7Z0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsS0FBSyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO2dCQUM5RCw2QkFBNkI7YUFDOUI7UUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUU7WUFDckIsSUFDRSxVQUFVLEtBQUssRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRztnQkFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQ3ZCO2dCQUNBLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN4QjthQUNGO1NBQ0Y7UUFDRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQ2hDO1lBQ0EsSUFBSSxTQUFTLEtBQUssR0FBRyxFQUFFO2dCQUNyQixJQUNFLFVBQVUsS0FBSyxFQUFFO29CQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHO29CQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFDdkI7b0JBQ0EsSUFBSSxTQUFTLElBQUksR0FBRyxFQUFFO3dCQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7cUJBQ3hCO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtZQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQW9CO1FBQzlCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7WUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDbkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QjtRQUNELG1CQUFtQjtRQUNuQixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQzNCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUN4RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELHNCQUFzQjtRQUN0QixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWSxFQUFFO1lBQzNELElBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYztnQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxLQUFLLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7YUFDL0Q7U0FDRjtRQUVELGNBQWM7UUFDZCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsYUFBYTtRQUNiLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7WUFDdkIsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUTtnQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU07Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQ2hDO2dCQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FDcEIsQ0FBQzt3QkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztvQkFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FDcEIsQ0FBQzt3QkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztvQkFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FDcEIsQ0FBQzt3QkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztvQkFDckQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUM3QztTQUNGO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4QyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxTQUFTO3dCQUNaLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLFlBQVksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ1A7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEMsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUNoQixJQUFJLENBQUMsU0FBUzt3QkFDWixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixJQUFJOzRCQUNKLElBQUk7NEJBQ0osSUFBSTs0QkFDSixZQUFZLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7b0JBQzFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2FBQ0Y7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3BDLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFNBQVM7d0JBQ1osSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUMvRCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDthQUNGO1lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO2FBQzFCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7WUFDdkIsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUTtnQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU07Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQ2hDO2dCQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO2FBQzNEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2FBQ3BEO1NBQ0Y7UUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRTlCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QyxTQUFTO1FBQ1QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUMzQixPQUFPO1lBQ1AsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDNUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNO29CQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSTtvQkFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRO29CQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTTtvQkFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFDaEM7b0JBQ0EsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO3dCQUNwQixRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTt3QkFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUU7d0JBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUM7cUJBQ2pCO3lCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO3dCQUN6QixRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztxQkFDM0I7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO3dCQUNwQixRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTt3QkFDMUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUU7d0JBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUM7cUJBQ2pCO3lCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO3dCQUN6QixRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztxQkFDM0I7aUJBQ0Y7Z0JBQ0QsTUFBTSxZQUFZLEdBQ2hCLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNqRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsWUFBWSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzthQUN2QjtZQUNELFNBQVM7WUFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFO2dCQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBRTdCLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzlCLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtvQkFDcEIsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFO29CQUMxQyxRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxJQUFJLEVBQUU7b0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO29CQUNsQixRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtxQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTtvQkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7aUJBQzNCO2dCQUNELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDL0QsTUFBTSxNQUFNLEdBQUcsYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2FBQ3pCO1lBRUQsU0FBUztZQUNULElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzlCLE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFakMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO29CQUN0QixRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUU7b0JBQzVDLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRTtvQkFDNUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUU7b0JBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUM7aUJBQ2pCO3FCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFO29CQUN6QixRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztpQkFDM0I7Z0JBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzlELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUMxQyxNQUFNLE1BQU0sR0FBRyxhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLFlBQVksQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7YUFDekI7WUFFRCxhQUFhO1lBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRS9CLE1BQU0sYUFBYSxHQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDL0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUUzQixJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7d0JBQ3BELE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ2xEO3lCQUFNLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDM0QsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsT0FBTyxHQUFHLFlBQVksQ0FBQztpQkFDekQ7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUU5QixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDOUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUUxQixJQUFJLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7d0JBQ25ELE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ2xEO3lCQUFNLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDMUQsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsT0FBTyxHQUFHLFlBQVksQ0FBQztpQkFDekQ7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUUvQixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUUxQixJQUFJLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7d0JBQ25ELFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ25EO3lCQUFNLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDMUQsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbkQ7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsUUFBUSxHQUFHLFlBQVksQ0FBQztpQkFDMUQ7YUFDRjtTQUNGO1FBRUQsV0FBVztRQUNYLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7WUFDN0IsT0FBTztZQUNQLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFFN0IsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTTtvQkFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUk7b0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO29CQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUTtvQkFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU07b0JBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQ2hDO29CQUNBLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDcEIsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFO3dCQUMxQyxRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxJQUFJLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO3dCQUNqQixRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUNqQjt5QkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTt3QkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7cUJBQzNCO2lCQUNGO3FCQUFNO29CQUNMLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTt3QkFDcEIsUUFBUSxHQUFHLEdBQUcsQ0FBQztxQkFDaEI7b0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsR0FBRyxFQUFFO3dCQUMxQyxRQUFRLEdBQUcsR0FBRyxDQUFDO3FCQUNoQjtvQkFDRCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxJQUFJLEVBQUU7d0JBQzFDLFFBQVEsR0FBRyxHQUFHLENBQUM7cUJBQ2hCO29CQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO3dCQUNqQixRQUFRLEdBQUcsSUFBSSxDQUFDO3FCQUNqQjt5QkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTt3QkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7cUJBQzNCO2lCQUNGO2dCQUNELE1BQU0sY0FBYyxHQUNsQixJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDakUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDdkI7WUFDRCxTQUFTO1lBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtnQkFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDOUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUVqQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7b0JBQ3RCLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRTtvQkFDNUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLEdBQUcsSUFBSSxFQUFFO29CQUM1QyxRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7b0JBQ3RCLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtxQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTtvQkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7aUJBQzNCO2dCQUNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ25FLE1BQU0sTUFBTSxHQUNWLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7YUFDekI7WUFFRCxTQUFTO1lBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtnQkFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDaEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUVuQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7b0JBQ3hCLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxXQUFXLEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRTtvQkFDOUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztpQkFDaEI7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLFdBQVcsS0FBSyxHQUFHLEdBQUcsSUFBSSxFQUFFO29CQUM5QyxRQUFRLEdBQUcsR0FBRyxDQUFDO2lCQUNoQjtnQkFDRCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7b0JBQ3hCLFFBQVEsR0FBRyxHQUFHLENBQUM7aUJBQ2hCO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtxQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRTtvQkFDekIsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7aUJBQzNCO2dCQUNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQzlDLE1BQU0sTUFBTSxHQUNWLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7YUFDekI7WUFFRCxPQUFPO1lBQ1AsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBRS9CLE1BQU0sYUFBYSxHQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDL0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUUzQixJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7d0JBQ3BELE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ2xEO3lCQUFNLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDM0QsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsT0FBTyxHQUFHLFlBQVksQ0FBQztpQkFDekQ7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUU5QixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDOUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUUxQixJQUFJLElBQUksS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7d0JBQ25ELE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ2xEO3lCQUFNLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDMUQsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbEQ7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsT0FBTyxHQUFHLFlBQVksQ0FBQztpQkFDekQ7YUFDRjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDcEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUUvQixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUMxQixpQ0FBaUM7b0JBQ2pDLElBQUksSUFBSSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDbkQsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztxQkFDbkQ7eUJBQU0sSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO3dCQUMxRCxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUNuRDtvQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUFDO2lCQUMxRDthQUNGO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1lBQzFELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixJQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxLQUFLLENBQUMsRUFDN0M7WUFDQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFJO1FBQ3JCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLEVBQUU7WUFDcEQsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDL0IsT0FBTyxRQUFRLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUc7UUFDeEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkUsQ0FBQzt3R0ExcENVLHFCQUFxQjs0RkFBckIscUJBQXFCLDJOQUpyQjtZQUNULEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRTtTQUN4RSxpRENuQ0gsNGtEQXVCc0c7OzRGRGN6RixxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUVULHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQ25CO3dCQUNULEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFdBQVcsdUJBQXVCLEVBQUU7cUJBQ3hFO2lJQU1ELGNBQWM7c0JBRGIsTUFBTTtnQkFZUCxRQUFRO3NCQURQLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBDb250ZW50Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhCYXNlVGV4dENvbXBvbmVudCxcbiAgQVhWYWxpZGF0YWJsZUNvbXBvbmVudCxcbn0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcbmltcG9ydCB7IF8gfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBBWFZhbHVlRXZlbnQgfSBmcm9tICcuLi9iYXNlL2V2ZW50cy5jbGFzcyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgQVhUaW1lUGlja2VySXRlbUNoYW5nZWRFdmVudCB7XG4gIG1pbnV0ZT86IG51bWJlcjtcbiAgc2Vjb25kPzogbnVtYmVyO1xuICBob3VyPzogbnVtYmVyO1xuICB0aW1lOiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgQVhUaW1lUGlja2VyQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhWYWx1ZUV2ZW50PEFYVGltZVBpY2tlckl0ZW1DaGFuZ2VkRXZlbnQ+IHsgfVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC10aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IHN0eWxlOiAnd2lkdGg6IDEwMCUnIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYVGltZVBpY2tlckNvbXBvbmVudCB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFRpbWVQaWNrZXJDb21wb25lbnRcbiAgZXh0ZW5kcyBBWEJhc2VUZXh0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQE91dHB1dCgpXG4gIG9uVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhUaW1lUGlja2VyQ2hhbmdlZEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWFRpbWVQaWNrZXJDaGFuZ2VkRXZlbnQ+KCk7XG5cbiAgLy8gQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAvLyBAQ29udGVudENoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIC8vIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG5cblxuXG4gIEBJbnB1dCgpXG4gIHRpbWVUeXBlOiBhbnk7XG5cbiAgQElucHV0KClcbiAgc2hvd01hc2sgPSB0cnVlXG5cbiAgdHlwZTogc3RyaW5nID0gJ0hIbW0nO1xuICBASW5wdXQoKVxuICBzaG93Q3VyZW50VGltZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNsZWFyRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBISG1tc3M6IGFueSA9IFtcbiAgICAvWzAtMl0vLFxuICAgIC9bMC05XS8sXG4gICAgJzonLFxuICAgIC9bMC01XS8sXG4gICAgL1swLTldLyxcbiAgICAnOicsXG4gICAgL1swLTVdLyxcbiAgICAvWzAtOV0vLFxuICBdO1xuICBISG1tOiBhbnkgPSBbL1swLTJdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vXTtcbiAgSEg6IGFueSA9IFsvWzAtMl0vLCAvWzAtOV0vXTtcbiAgaGhtbXNzOiBhbnkgPSBbXG4gICAgL1swLTFdLyxcbiAgICAvWzAtOV0vLFxuICAgICc6JyxcbiAgICAvWzAtNV0vLFxuICAgIC9bMC05XS8sXG4gICAgJzonLFxuICAgIC9bMC01XS8sXG4gICAgL1swLTldLyxcbiAgXTtcbiAgaGhtbTogYW55ID0gWy9bMC0xXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XG4gIGhoOiBhbnkgPSBbL1swLTFdLywgL1swLTldL107XG4gIC8vIFRPRE86IGFwcGx5IGFtIHBtIGZyb20gbG9jYWxlXG4gIGhobW1zc2FtOiBhbnkgPSBbXG4gICAgL1swLTFdLyxcbiAgICAvWzAtOV0vLFxuICAgICc6JyxcbiAgICAvWzAtNV0vLFxuICAgIC9bMC05XS8sXG4gICAgJzonLFxuICAgIC9bMC01XS8sXG4gICAgL1swLTldLyxcbiAgICAnICcsXG4gICAgL1thfHB82YJ82KhdLyxcbiAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKSxcbiAgXTtcbiAgaGhtbWFtOiBhbnkgPSBbXG4gICAgL1swLTFdLyxcbiAgICAvWzAtOV0vLFxuICAgICc6JyxcbiAgICAvWzAtNV0vLFxuICAgIC9bMC05XS8sXG4gICAgJyAnLFxuICAgIC9bYXxwfNmCfNioXS8sXG4gICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyksXG4gIF07XG4gIGhoYW06IGFueSA9IFtcbiAgICAvWzAtMV0vLFxuICAgIC9bMC05XS8sXG4gICAgJyAnLFxuICAgIC9bYXxwfNmCfNioXS8sXG4gICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyksXG4gIF07XG4gIHRleHRWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgdmFsdWVIYW06IHN0cmluZyA9ICctLSAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICB2YWx1ZU1hbTogc3RyaW5nID0gJy0tOi0tICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gIHZhbHVlU2FtOiBzdHJpbmcgPSAnLS06LS06LS0gJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcblxuICBwcml2YXRlIF92YWx1ZXM6IHN0cmluZztcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICB2ID09PSAnJyB8fFxuICAgICAgdiA9PSBudWxsIHx8XG4gICAgICB2ID09PSAnLS06LS06LS0nIHx8XG4gICAgICB2ID09PSAnLS06LS0nIHx8XG4gICAgICB2ID09PSAnLS0nIHx8XG4gICAgICB2ID09PSB0aGlzLnZhbHVlU2FtIHx8XG4gICAgICB2ID09PSB0aGlzLnZhbHVlTWFtIHx8XG4gICAgICB2ID09PSB0aGlzLnZhbHVlSGFtXG4gICAgKSB7XG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgb2xkID0gdGhpcy5fdmFsdWVzO1xuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0hIbW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSEgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hobW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZVNhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbWFtJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVNYW07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hoYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZUhhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdmFsdWVzID0gbnVsbDtcbiAgICAgIGlmICh2ICE9PSBvbGQpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICB2YWx1ZTogeyBob3VyOiBudWxsLCBtaW51dGU6IG51bGwsIHNlY29uZDogbnVsbCwgdGltZTogbnVsbCB9LFxuICAgICAgICAgIG9sZFZhbHVlOiB7IHRpbWU6IG9sZCB9LFxuICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhckRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLl92YWx1ZXMgJiYgdikge1xuICAgICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XG4gICAgICAgIGNvbnN0IGluZDEgPSB2LmNoYXJBdCgwKTtcbiAgICAgICAgY29uc3QgaW5kMiA9IHYuY2hhckF0KDEpO1xuICAgICAgICBjb25zdCBpbmQzID0gdi5jaGFyQXQoMik7XG4gICAgICAgIGNvbnN0IGluZDQgPSB2LmNoYXJBdCgzKTtcbiAgICAgICAgY29uc3QgaW5kNSA9IHYuY2hhckF0KDQpO1xuICAgICAgICBjb25zdCBpbmQ2ID0gdi5jaGFyQXQoNSk7XG4gICAgICAgIGNvbnN0IGluZDcgPSB2LmNoYXJBdCg2KTtcbiAgICAgICAgY29uc3QgaW5kOCA9IHYuY2hhckF0KDcpO1xuICAgICAgICBjb25zdCBpbmQ5ID0gdi5jaGFyQXQoOCk7XG4gICAgICAgIGNvbnN0IGluZDEwID0gdi5jaGFyQXQoOSk7XG5cbiAgICAgICAgY29uc3QgaW5kT2xkNCA9IG9sZC5jaGFyQXQoOSk7XG4gICAgICAgIGNvbnN0IGluZE9sZDcgPSBvbGQuY2hhckF0KDkpO1xuICAgICAgICBjb25zdCBpbmRPbGQxMCA9IG9sZC5jaGFyQXQoOSk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGhobW1zc0FtXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQxID09PSAnLScgJiZcbiAgICAgICAgICBpbmQyICE9PSAnLScgJiZcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgJzAnICtcbiAgICAgICAgICAgIGluZDIgK1xuICAgICAgICAgICAgaW5kMyArXG4gICAgICAgICAgICBpbmQ0ICtcbiAgICAgICAgICAgIGluZDUgK1xuICAgICAgICAgICAgaW5kNiArXG4gICAgICAgICAgICBpbmQ3ICtcbiAgICAgICAgICAgIGluZDggK1xuICAgICAgICAgICAgaW5kOSArXG4gICAgICAgICAgICBpbmQxMCArXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZDQgPT09ICctJyAmJlxuICAgICAgICAgIGluZDUgIT09ICctJyAmJlxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICtcbiAgICAgICAgICAgIGluZDIgK1xuICAgICAgICAgICAgaW5kMyArXG4gICAgICAgICAgICAnMCcgK1xuICAgICAgICAgICAgaW5kNSArXG4gICAgICAgICAgICBpbmQ2ICtcbiAgICAgICAgICAgIGluZDcgK1xuICAgICAgICAgICAgaW5kOCArXG4gICAgICAgICAgICBpbmQ5ICtcbiAgICAgICAgICAgIGluZDEwICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNSk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5kNyA9PT0gJy0nICYmXG4gICAgICAgICAgaW5kOCAhPT0gJy0nICYmXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cbiAgICAgICAgICAgIGluZDEgK1xuICAgICAgICAgICAgaW5kMiArXG4gICAgICAgICAgICBpbmQzICtcbiAgICAgICAgICAgIGluZDQgK1xuICAgICAgICAgICAgaW5kNSArXG4gICAgICAgICAgICBpbmQ2ICtcbiAgICAgICAgICAgICcwJyArXG4gICAgICAgICAgICBpbmQ4ICtcbiAgICAgICAgICAgIGluZDkgK1xuICAgICAgICAgICAgaW5kMTAgK1xuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA4KTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA4O1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRPbGQxMCA9PT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cbiAgICAgICAgICAgIGluZDEgK1xuICAgICAgICAgICAgaW5kMiArXG4gICAgICAgICAgICBpbmQzICtcbiAgICAgICAgICAgIGluZDQgK1xuICAgICAgICAgICAgaW5kNSArXG4gICAgICAgICAgICBpbmQ2ICtcbiAgICAgICAgICAgIGluZDcgK1xuICAgICAgICAgICAgaW5kOCArXG4gICAgICAgICAgICBpbmQ5ICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQxID09PSAnLScgJiZcbiAgICAgICAgICBpbmQyICE9PSAnLScgJiZcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cbiAgICAgICAgICAgICcwJyArXG4gICAgICAgICAgICBpbmQyICtcbiAgICAgICAgICAgIGluZDMgK1xuICAgICAgICAgICAgaW5kNCArXG4gICAgICAgICAgICBpbmQ1ICtcbiAgICAgICAgICAgIGluZDYgK1xuICAgICAgICAgICAgaW5kNyArXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZDQgPT09ICctJyAmJlxuICAgICAgICAgIGluZDUgIT09ICctJyAmJlxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgaW5kMSArXG4gICAgICAgICAgICBpbmQyICtcbiAgICAgICAgICAgIGluZDMgK1xuICAgICAgICAgICAgJzAnICtcbiAgICAgICAgICAgIGluZDUgK1xuICAgICAgICAgICAgaW5kNiArXG4gICAgICAgICAgICBpbmQ3ICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNSk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kT2xkNyA9PT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0pIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICtcbiAgICAgICAgICAgIGluZDIgK1xuICAgICAgICAgICAgaW5kMyArXG4gICAgICAgICAgICBpbmQ0ICtcbiAgICAgICAgICAgIGluZDUgK1xuICAgICAgICAgICAgaW5kNiArXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL1xuICAgICAgICBpZiAoaW5kMSA9PT0gJy0nICYmIGluZDIgIT09ICctJyAmJiB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cbiAgICAgICAgICAgICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kT2xkNCA9PT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgaW5kMSArIGluZDIgKyBpbmQzICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZDEgPT09ICctJyAmJlxuICAgICAgICAgIGluZDIgIT09ICctJyAmJlxuICAgICAgICAgICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XG4gICAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbXNzKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDg7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAyO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQ0ID09PSAnLScgJiZcbiAgICAgICAgICBpbmQ1ICE9PSAnLScgJiZcbiAgICAgICAgICAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxuICAgICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLkhIbW1zcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyAnMCcgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4O1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNik7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNjtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5kNyA9PT0gJy0nICYmXG4gICAgICAgICAgaW5kOCAhPT0gJy0nICYmXG4gICAgICAgICAgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3MgfHxcbiAgICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tc3MpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2ICsgJzAnICsgaW5kODtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDkpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5kMSA9PT0gJy0nICYmXG4gICAgICAgICAgaW5kMiAhPT0gJy0nICYmXG4gICAgICAgICAgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcwJyArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDU7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAyO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQ0ID09PSAnLScgJiZcbiAgICAgICAgICBpbmQ1ICE9PSAnLScgJiZcbiAgICAgICAgICAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW0gfHwgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLkhIbW0pXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gaW5kMSArIGluZDIgKyBpbmQzICsgJzAnICsgaW5kNTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDUpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDU7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5kMSA9PT0gJy0nICYmXG4gICAgICAgICAgaW5kMiAhPT0gJy0nICYmXG4gICAgICAgICAgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaCB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEgpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMjtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh2ICE9PSB0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgY29uc3Qgb2xkID0gdGhpcy5fdmFsdWVzO1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHY7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHYgJiYgdi5pbmRleE9mKCctJykgPT09IC0xID8gdiA6IG51bGw7XG4gICAgICAgIGlmICh2LmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHRpbWU6IHYsXG4gICAgICAgICAgICAgIGhvdXI6IE51bWJlcih2WzBdICsgdlsxXSksXG4gICAgICAgICAgICAgIG1pbnV0ZTpcbiAgICAgICAgICAgICAgICB2WzNdICYmXG4gICAgICAgICAgICAgICAgICB2WzNdICE9PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSAmJlxuICAgICAgICAgICAgICAgICAgdlszXSAhPT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJylcbiAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHZbM10gKyB2WzRdKVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICBzZWNvbmQ6XG4gICAgICAgICAgICAgICAgdls2XSAmJlxuICAgICAgICAgICAgICAgICAgdls2XSAhPT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykgJiZcbiAgICAgICAgICAgICAgICAgIHZbNl0gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih2WzZdICsgdls3XSlcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbGRWYWx1ZTogeyB0aW1lOiBvbGQgfSxcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjdXJzb3JQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoY2RyLCByZWYpO1xuXG4gICAgdGhpcy50aW1lVHlwZSA9ICdISG1tJztcbiAgfVxuICBjbGVhclZhbHVlKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmhhbmRsZUlucHV0Rm9jdXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy50aW1lVHlwZSkge1xuICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIbW1zcyc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjAwOjAwOjAwXCJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSEhtbSc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdISG1tJztcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDBcIlxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdISCc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdISCc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjAwXCJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1zcyc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjAwOjAwOjAwXCJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbSc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdoaG1tJztcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDBcIlxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoaCc6XG4gICAgICAgIHRoaXMudHlwZSA9ICdoaCc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjAwXCJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbXNzYW0nOlxuICAgICAgICB0aGlzLnR5cGUgPSAnaGhtbXNzYW0nO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gXCIwMDowMDowMGFhXCJcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMudmFsdWVTYW07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbWFtJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1hbSc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjAwOjAwYWFcIlxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogdGhpcy52YWx1ZU1hbTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hoYW0nOlxuICAgICAgICB0aGlzLnR5cGUgPSAnaGhhbSc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSBcIjloYWFcIlxuXG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiB0aGlzLnZhbHVlSGFtO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMudHlwZSA9ICdISG1tJztcbiAgICAgICAgdGhpcy50aW1lVHlwZSA9IFwiMDA6MDBcIlxuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dDdXJlbnRUaW1lID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBob3VyOiBhbnkgPVxuICAgICAgICBuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMFxuICAgICAgICAgID8gbmV3IERhdGUoKS5nZXRIb3VycygpXG4gICAgICAgICAgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgICBsZXQgYW1Ib3VyOiBhbnk7XG5cbiAgICAgIGlmIChuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMCkge1xuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpID4gMTIpIHtcbiAgICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpIC0gMTIgPCAxMCkge1xuICAgICAgICAgICAgYW1Ib3VyID0gJzAnICsgKG5ldyBEYXRlKCkuZ2V0SG91cnMoKSAtIDEyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW1Ib3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbUhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFtSG91ciA9ICcwJyArIG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluID1cbiAgICAgICAgbmV3IERhdGUoKS5nZXRNaW51dGVzKCkgPiA5XG4gICAgICAgICAgPyBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKVxuICAgICAgICAgIDogJzAnICsgbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzZWMgPVxuICAgICAgICBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKSA+IDlcbiAgICAgICAgICA/IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpXG4gICAgICAgICAgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50eXBlID09PSAnaGgnIHx8XG4gICAgICAgIHRoaXMudHlwZSA9PT0gJ2hobW0nIHx8XG4gICAgICAgIHRoaXMudHlwZSA9PT0gJ2hobW1zcycgfHxcbiAgICAgICAgdGhpcy50eXBlID09PSAnaGhtbXNzYW0nXG4gICAgICApIHtcbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICAgIGFtSG91ciArXG4gICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgbWluICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBzZWMgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucG0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICAgIGFtSG91ciArXG4gICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgbWluICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBzZWMgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdoaGFtJykge1xuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBhbUhvdXIgKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnBtJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdoaG1tYW0nKSB7XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgICBhbUhvdXIgKyAnOicgKyBtaW4gKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnBtJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgICBhbUhvdXIgKyAnOicgKyBtaW4gKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBob3VyICsgJzonICsgbWluICsgJzonICsgc2VjO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3RhcnRmb2N1cygpIHtcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XG4gICAgfSwgMCk7XG4gIH1cblxuICBoYW5kbGVJbnB1dEZvY3VzKCkge1xuICAgIHRoaXMub25TdGFydGZvY3VzKCk7XG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cbiAgaGFuZGxlSW5wdXRCbHVyKGUpIHtcbiAgICBpZiAodGhpcy50ZXh0VmFsdWUuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0hIbW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSEgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hobW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZVNhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbWFtJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVNYW07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hoYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZUhhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlQcmVzcyhldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSk7XG4gICAgY29uc3QgZmlyc3RDaGFyID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDApO1xuICAgIGNvbnN0IHNlY29uZENoYXIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIC8vIHRoaXMuY3Vyc29yUG9zaXRpb24gKz0gMSA7XG4gICAgICB9XG4gICAgfSwgMCk7XG5cbiAgICBpZiAoZmlyc3RDaGFyID09PSAnMicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Vjb25kQ2hhciA9PT0gJycgfHxcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEpID49ICc0JyB8fFxuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uIDwgM1xuICAgICAgKSB7XG4gICAgICAgIGlmIChpbnB1dENoYXIgPj0gJzQnKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXG4gICAgKSB7XG4gICAgICBpZiAoZmlyc3RDaGFyID09PSAnMScpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlY29uZENoYXIgPT09ICcnIHx8XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEpID49ICczJyB8fFxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPCAzXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChpbnB1dENoYXIgPj0gJzMnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5wdXRDaGFyID09PSAnLScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIC8vIHVwICYgZG93biBidXR0b25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuc2V0Q2FyZXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuc2V0Q2FyZXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbGVmdCAmIHJpZ2h0IEJ1dHRvblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fFxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhvbWUgYnV0dG9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICB9XG5cbiAgICAvLyBlbmQgYnV0dG9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XG4gICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtKSB7XG4gICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDY7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAzO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKFxuICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IHRoaXMudGV4dFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiYWNrc3BhY2UgQ29udHJvbFxuICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICBjb25zdCBpbmQxID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDApO1xuICAgICAgY29uc3QgaW5kMiA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgxKTtcbiAgICAgIGNvbnN0IGluZDMgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMik7XG4gICAgICBjb25zdCBpbmQ0ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDMpO1xuICAgICAgY29uc3QgaW5kNSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg0KTtcbiAgICAgIGNvbnN0IGluZDYgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNSk7XG4gICAgICBjb25zdCBpbmQ3ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDYpO1xuICAgICAgY29uc3QgaW5kOCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg3KTtcbiAgICAgIGNvbnN0IGluZDkgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoOCk7XG4gICAgICBjb25zdCBpbmQxMCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg5KTtcbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcbiAgICAgICAgaWYgKGluZDEwID09PSAnLScpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICtcbiAgICAgICAgICAgIGluZDIgK1xuICAgICAgICAgICAgaW5kMyArXG4gICAgICAgICAgICBpbmQ0ICtcbiAgICAgICAgICAgIGluZDUgK1xuICAgICAgICAgICAgaW5kNiArXG4gICAgICAgICAgICBpbmQ3ICtcbiAgICAgICAgICAgIGluZDggK1xuICAgICAgICAgICAgaW5kOSArXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAoaW5kNyA9PT0gJy0nKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgaW5kMSArXG4gICAgICAgICAgICBpbmQyICtcbiAgICAgICAgICAgIGluZDMgK1xuICAgICAgICAgICAgaW5kNCArXG4gICAgICAgICAgICBpbmQ1ICtcbiAgICAgICAgICAgIGluZDYgK1xuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XG4gICAgICAgIGlmIChpbmQ0ID09PSAnLScpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICsgaW5kMiArIGluZDMgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gLT0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cbiAgICAgICkge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLnRleHRWYWx1ZTtcblxuICAgIGNvbnN0IGluZDEgPSBuZXdWYWx1ZS5jaGFyQXQoMCk7XG4gICAgY29uc3QgaW5kMiA9IG5ld1ZhbHVlLmNoYXJBdCgxKTtcbiAgICBjb25zdCBpbmQzID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDIpO1xuICAgIGNvbnN0IGluZDQgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMyk7XG4gICAgY29uc3QgaW5kNSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg0KTtcbiAgICBjb25zdCBpbmQ2ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDUpO1xuICAgIGNvbnN0IGluZDcgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNik7XG4gICAgY29uc3QgaW5kOCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg3KTtcbiAgICBjb25zdCBpbmQ5ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDgpO1xuICAgIGNvbnN0IGluZDEwID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDkpO1xuICAgIGNvbnN0IGluZDExID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEwKTtcblxuICAgIC8vIHVwIGtleVxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgLy8gaG91clxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gMikge1xuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kMSArIGluZDI7XG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSAraG91cmluZCArIDE7XG4gICAgICAgIG5ld1ZhbHVlID0gbmV3SG91ci50b1N0cmluZygpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDEgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQxICsgJy0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDIgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCtuZXdWYWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwMSc7XG4gICAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMSAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDEgKyAnLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMiAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDIpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoK25ld1ZhbHVlID4gMjMpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAwJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPVxuICAgICAgICAgIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xuICAgICAgICBjb25zdCBob3VyID0gbmV3VmFsdWUudG9TdHJpbmcoKSArIGFmdGVySG91cmluZDtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBob3VyO1xuICAgICAgfVxuICAgICAgLy8gbWludXRlXG4gICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzICYmIHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gNSkge1xuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kNCArIGluZDU7XG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSAraG91cmluZCArIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdIb3VyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDQgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQ0ICsgJy0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDUgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQ1KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCtuZXdWYWx1ZSA+IDU5KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMDAnO1xuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzO1xuICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ2ICsgaW5kNyArIGluZDggKyBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcbiAgICAgICAgY29uc3QgbWludXRlID0gYmVmb3JlSG91cmluZCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWNvbmRcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDYgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA4KSB7XG4gICAgICAgIGNvbnN0IHNlY29uZGluZCA9IGluZDcgKyBpbmQ4O1xuICAgICAgICBjb25zdCBuZXdTZWNvbmQgPSArc2Vjb25kaW5kICsgMTtcblxuICAgICAgICBuZXdWYWx1ZSA9IG5ld1NlY29uZC50b1N0cmluZygpO1xuICAgICAgICBpZiAoc2Vjb25kaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRpbmQgPT09IGluZDcgKyAnLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kOCAhPT0gJy0nICYmIHNlY29uZGluZCA9PT0gJy0nICsgaW5kOCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgrbmV3VmFsdWUgPiA1OSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAwJztcbiAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNjtcbiAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kOSArIGluZDEwICsgaW5kMTE7XG4gICAgICAgIGNvbnN0IHNlY29uZCA9IGJlZm9yZUhvdXJpbmQgKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHNlY29uZDtcbiAgICAgIH1cblxuICAgICAgLy8gdHlwZSBhbS9QTVxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+IDgpIHtcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDEwLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID1cbiAgICAgICAgICAgIGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOTtcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQxMTtcblxuICAgICAgICAgIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDEwID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSA2KSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQ3LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDg7XG5cbiAgICAgICAgICBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzKSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQyID0gaW5kNC50b1N0cmluZygpO1xuXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMztcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ1O1xuXG4gICAgICAgICAgaWYgKGluZDQgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kNCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQyID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQyICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8ga2V5IGRvd25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgLy8gaG91clxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gMikge1xuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kMSArIGluZDI7XG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSAraG91cmluZCAtIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdIb3VyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW0gfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGggfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMSAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDEgKyAnLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMiAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDIpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMTInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDEgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQxICsgJy0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDIgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCtuZXdWYWx1ZSA8IDApIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzIzJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZnRlckhvdXJJbmRleCA9XG4gICAgICAgICAgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOSArIGluZDEwICsgaW5kMTE7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VySW5kZXg7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gaG91cjtcbiAgICAgIH1cbiAgICAgIC8vIG1pbnV0ZVxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gMyAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDUpIHtcbiAgICAgICAgY29uc3QgbWludXRlaW5kID0gaW5kNCArIGluZDU7XG4gICAgICAgIGNvbnN0IG5ld01pbnV0ZSA9ICttaW51dGVpbmQgLSAxO1xuXG4gICAgICAgIG5ld1ZhbHVlID0gbmV3TWludXRlLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtaW51dGVpbmQgPT09ICctLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kNCAhPT0gJy0nICYmIG1pbnV0ZWluZCA9PT0gaW5kNCArICctJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ1ICE9PSAnLScgJiYgbWludXRlaW5kID09PSAnLScgKyBpbmQ1KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZWluZCA9PT0gJy0tJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgrbmV3VmFsdWUgPCAwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnNTknO1xuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiZWZvcmVNaW51dGVJbmRleCA9IGluZDEgKyBpbmQyICsgaW5kMztcbiAgICAgICAgY29uc3QgYWZ0ZXJNaW51dGVJbmRleCA9IGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xuICAgICAgICBjb25zdCBtaW51dGUgPVxuICAgICAgICAgIGJlZm9yZU1pbnV0ZUluZGV4ICsgbmV3VmFsdWUudG9TdHJpbmcoKSArIGFmdGVyTWludXRlSW5kZXg7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWNvbmRcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDYgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA4KSB7XG4gICAgICAgIGNvbnN0IHNlY29uZEluZGV4ID0gaW5kNyArIGluZDg7XG4gICAgICAgIGNvbnN0IG5ld1NlY29uZCA9ICtzZWNvbmRJbmRleCAtIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdTZWNvbmQudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHNlY29uZEluZGV4ID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRJbmRleCA9PT0gaW5kNyArICctJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ4ICE9PSAnLScgJiYgc2Vjb25kSW5kZXggPT09ICctJyArIGluZDgpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kSW5kZXggPT09ICctLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzU5JztcbiAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmVmb3Jlc2Vjb25kSW5kZXggPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDY7XG4gICAgICAgIGNvbnN0IGFmdGVyc2Vjb25kSW5kZXggPSBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcbiAgICAgICAgY29uc3Qgc2Vjb25kID1cbiAgICAgICAgICBiZWZvcmVzZWNvbmRJbmRleCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlcnNlY29uZEluZGV4O1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHNlY29uZDtcbiAgICAgIH1cblxuICAgICAgLy8gdHlwZVxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+IDgpIHtcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDEwLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID1cbiAgICAgICAgICAgIGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOTtcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQxMTtcblxuICAgICAgICAgIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDEwID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSA2KSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQ3LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDg7XG5cbiAgICAgICAgICBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzKSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQyID0gaW5kNC50b1N0cmluZygpO1xuXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMztcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ1O1xuICAgICAgICAgIC8vVE8gRE8gdGhpcyBpcyB3cm9uZyBjaGVjayBpbmRleFxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xuICAgICAgICAgICAgdHlwZWluZDIgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDQgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kMiArIGFmdGVySG91cmluZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdEZWxldGUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgfVxuICB9XG5cbiAgZG9HZXRDYXJldFBvc2l0aW9uKGN0cmwpIHtcbiAgICBsZXQgQ2FyZXRQb3MgPSAwO1xuICAgIGlmIChjdHJsLnNlbGVjdGlvblN0YXJ0IHx8IGN0cmwuc2VsZWN0aW9uU3RhcnQgPT09IDApIHtcbiAgICAgIENhcmV0UG9zID0gY3RybC5zZWxlY3Rpb25TdGFydDtcbiAgICAgIHJldHVybiBDYXJldFBvcztcbiAgICB9XG4gIH1cblxuICBzZXRDYXJldFBvc2l0aW9uKGN0cmwsIHBvcykge1xuICAgIGlmIChjdHJsLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBjdHJsLmZvY3VzKCk7XG4gICAgICBjdHJsLnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTtcbiAgICB9IGVsc2UgaWYgKGN0cmwuY3JlYXRlVGV4dFJhbmdlKSB7XG4gICAgICBjb25zdCByYW5nZSA9IGN0cmwuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIHBvcyk7XG4gICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHBvcyk7XG4gICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDYXJldCgpIHtcbiAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCB0aGlzLmN1cnNvclBvc2l0aW9uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4IGZvcm0taXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFthdHRyLmlkXT1cInVpZFwiICNmYz5cbiAgPGRpdiBjbGFzcz1cImF4IGl0ZW1zLXdyYXBwZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+IDwvbmctY29udGVudD5cbiAgICA8aSBjbGFzcz1cImZvcm0taXRlbS1pY29uIHt7IGljb24gfX1cIiAqbmdJZj1cImljb25cIj48L2k+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiICNjb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJheCBmb3JtLWNvbnRyb2wgaW5wdXQge3sgc2l6ZSB9fVwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICBbY2xhc3MuaWNvbl09XCJpY29uXCI+XG4gICAgICA8aW5wdXQgI2lucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJheCB7eyBzaXplIH19XCIgW21hc2tdPVwidGltZVR5cGVcIiBbc2hvd01hc2tUeXBlZF09XCJzaG93TWFza1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwidGV4dFZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInNldFRleHRBbGlnbigpXCIgW2NsYXNzLmNsZWFyXT1cInZhbHVlICYmIGFsbG93Q2xlYXJcIiAoZm9jdXMpPVwiaGFuZGxlSW5wdXRGb2N1cygpXCJcbiAgICAgICAgKGJsdXIpPVwiaGFuZGxlSW5wdXRCbHVyKCRldmVudClcIiAoa2V5cHJlc3MpPVwiaGFuZGxlS2V5UHJlc3MoJGV2ZW50KVwiIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImF4IGl0ZW1zLXdyYXBwZXJcIj5cbiAgICA8YXgtYnV0dG9uICpuZ0lmPVwidmFsdWUgJiYgYWxsb3dDbGVhclwiIGljb249XCJmYXIgZmEtdGltZXNcIiB0eXBlPVwiZGFuZ2VyIGJsYW5rXCIgKGNsaWNrKT1cImNsZWFyKClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYkluZGV4XT1cIi0xXCI+PC9heC1idXR0b24+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2VuZF1cIj4gPC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBbdGV4dE1hc2tdPVwie21hc2s6IG1hc2sgLCBzaG93TWFzazpzaG93TWFzayAsIGd1aWQ6IG1hc2tHdWlkICwga2VlcENoYXJQb3NpdGlvbnM6IG1hc2tLZWVwQ2hhclBvc2l0aW9uc31cIiAtLT5cbjwhLS0gPGlucHV0ICNpbnB1dCBpZD1cInRpbWVQaWNrZXJWYWx1ZVwiIFt0ZXh0TWFza109XCJ0aW1lVHlwZVwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChrZXlwcmVzcyk9J2hhbmRsZUtleVByZXNzKCRldmVudCknXG4gICAgKGtleXVwKT1cImhhbmRsZUtleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiPiAtLT4iXX0=