slick-components 4.4.13 → 4.4.16

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 (346) hide show
  1. package/css/slick-components.css +598 -365
  2. package/css/slick-components.min.css +1 -1
  3. package/esm2020/public-api.mjs +43 -0
  4. package/esm2020/slick-accordion/slick-accordion-item-header.component.mjs +14 -0
  5. package/esm2020/slick-accordion/slick-accordion-item.component.mjs +86 -0
  6. package/esm2020/slick-accordion/slick-accordion.component.mjs +75 -0
  7. package/esm2020/slick-accordion/slick-accordion.module.mjs +23 -0
  8. package/esm2020/slick-auto-complete/slick-auto-complete-list-item-template.directive.mjs +22 -0
  9. package/esm2020/slick-auto-complete/slick-auto-complete.component.mjs +375 -0
  10. package/esm2020/slick-auto-complete/slick-auto-complete.module.mjs +24 -0
  11. package/esm2020/slick-button-spinner/slick-button-spinner.component.mjs +175 -0
  12. package/esm2020/slick-button-spinner/slick-button-spinner.module.mjs +19 -0
  13. package/esm2020/slick-calendar/slick-calendar.component.mjs +246 -0
  14. package/esm2020/slick-calendar/slick-calendar.module.mjs +19 -0
  15. package/esm2020/slick-card/slick-card-header.component.mjs +14 -0
  16. package/esm2020/slick-card/slick-card.component.mjs +42 -0
  17. package/esm2020/slick-card/slick-card.module.mjs +20 -0
  18. package/esm2020/slick-components.mjs +5 -0
  19. package/esm2020/slick-confirm-dialog/slick-confirm-dialog.component.mjs +65 -0
  20. package/esm2020/slick-confirm-dialog/slick-confirm-dialog.module.mjs +20 -0
  21. package/esm2020/slick-container/slick-container-body.component.mjs +24 -0
  22. package/esm2020/slick-container/slick-container-footer.component.mjs +20 -0
  23. package/esm2020/slick-container/slick-container-header.component.mjs +20 -0
  24. package/esm2020/slick-container/slick-container.component.mjs +21 -0
  25. package/esm2020/slick-container/slick-container.module.mjs +25 -0
  26. package/esm2020/slick-context-menu/slick-context-menu-item.component.mjs +14 -0
  27. package/esm2020/slick-context-menu/slick-context-menu.component.mjs +48 -0
  28. package/esm2020/slick-context-menu/slick-context-menu.module.mjs +20 -0
  29. package/{esm2015/slick-currency-mask/slick-currency-mask-options.model.js → esm2020/slick-currency-mask/slick-currency-mask-options.model.mjs} +0 -0
  30. package/esm2020/slick-currency-mask/slick-currency-mask.directive.mjs +233 -0
  31. package/esm2020/slick-currency-mask/slick-currency-mask.module.mjs +19 -0
  32. package/esm2020/slick-date-picker/slick-date-picker.component.mjs +278 -0
  33. package/esm2020/slick-date-picker/slick-date-picker.module.mjs +21 -0
  34. package/esm2020/slick-dialog/slick-dialog-footer.component.mjs +24 -0
  35. package/esm2020/slick-dialog/slick-dialog.component.mjs +294 -0
  36. package/esm2020/slick-dialog/slick-dialog.module.mjs +23 -0
  37. package/esm2020/slick-dialog/slick-dialog.service.mjs +68 -0
  38. package/esm2020/slick-drag-drop/slick-drag-drop.directive.mjs +13 -0
  39. package/esm2020/slick-drag-drop/slick-drag-drop.module.mjs +21 -0
  40. package/esm2020/slick-drag-drop/slick-draggable.directive.mjs +13 -0
  41. package/{esm2015/slick-drop-down/slick-drop-down-button.model.js → esm2020/slick-drop-down/slick-drop-down-button.model.mjs} +0 -0
  42. package/esm2020/slick-drop-down/slick-drop-down.component.mjs +479 -0
  43. package/esm2020/slick-drop-down/slick-drop-down.module.mjs +24 -0
  44. package/esm2020/slick-drop-down/slick-drop-down.service.mjs +55 -0
  45. package/esm2020/slick-drop-list/slick-drop-list-grab.directive.mjs +18 -0
  46. package/esm2020/slick-drop-list/slick-drop-list-item.directive.mjs +18 -0
  47. package/esm2020/slick-drop-list/slick-drop-list.directive.mjs +215 -0
  48. package/esm2020/slick-drop-list/slick-drop-list.module.mjs +23 -0
  49. package/esm2020/slick-email-viewer/slick-email-viewer-dialog.component.mjs +81 -0
  50. package/esm2020/slick-email-viewer/slick-email-viewer.component.mjs +42 -0
  51. package/esm2020/slick-email-viewer/slick-email-viewer.module.mjs +26 -0
  52. package/{esm2015/slick-emailer/slick-emailer-address.model.js → esm2020/slick-emailer/slick-emailer-address.model.mjs} +0 -0
  53. package/esm2020/slick-emailer/slick-emailer-dialog.component.mjs +153 -0
  54. package/esm2020/slick-emailer/slick-emailer.component.mjs +235 -0
  55. package/{esm2015/slick-emailer/slick-emailer.model.js → esm2020/slick-emailer/slick-emailer.model.mjs} +0 -0
  56. package/esm2020/slick-emailer/slick-emailer.module.mjs +29 -0
  57. package/esm2020/slick-file-drop/slick-file-drop.component.mjs +156 -0
  58. package/esm2020/slick-file-drop/slick-file-drop.module.mjs +20 -0
  59. package/esm2020/slick-file-list/slick-file-list-item.component.mjs +173 -0
  60. package/esm2020/slick-file-list/slick-file-list.component.mjs +130 -0
  61. package/esm2020/slick-file-list/slick-file-list.module.mjs +23 -0
  62. package/{esm2015/slick-file-model/slick-file.model.js → esm2020/slick-file-model/slick-file.model.mjs} +0 -0
  63. package/esm2020/slick-google-address-search/slick-google-address-search.directive.mjs +75 -0
  64. package/esm2020/slick-google-address-search/slick-google-address-search.module.mjs +19 -0
  65. package/esm2020/slick-google-map/slick-google-map-dialog.component.mjs +50 -0
  66. package/esm2020/slick-google-map/slick-google-map.component.mjs +48 -0
  67. package/esm2020/slick-google-map/slick-google-map.module.mjs +22 -0
  68. package/esm2020/slick-grid/slick-grid-column-template.directive.mjs +19 -0
  69. package/{esm2015/slick-grid/slick-grid-column.model.js → esm2020/slick-grid/slick-grid-column.model.mjs} +0 -0
  70. package/{esm2015/slick-grid/slick-grid-favorite.model.js → esm2020/slick-grid/slick-grid-favorite.model.mjs} +0 -0
  71. package/{esm2015/slick-grid/slick-grid-request.model.js → esm2020/slick-grid/slick-grid-request.model.mjs} +0 -0
  72. package/{esm2015/slick-grid/slick-grid-response.model.js → esm2020/slick-grid/slick-grid-response.model.mjs} +0 -0
  73. package/esm2020/slick-grid/slick-grid-sanitize.pipe.mjs +20 -0
  74. package/esm2020/slick-grid/slick-grid.component.mjs +793 -0
  75. package/esm2020/slick-grid/slick-grid.module.mjs +43 -0
  76. package/{esm2015/slick-grid/slick-grid.options.js → esm2020/slick-grid/slick-grid.options.mjs} +0 -0
  77. package/esm2020/slick-grid/slick-grid.service.mjs +66 -0
  78. package/esm2020/slick-multi-select/slick-multi-select.component.mjs +362 -0
  79. package/esm2020/slick-multi-select/slick-multi-select.module.mjs +20 -0
  80. package/esm2020/slick-multi-select/slick-multi-select.service.mjs +77 -0
  81. package/esm2020/slick-ordered-list/slick-ordered-list.component.mjs +200 -0
  82. package/esm2020/slick-ordered-list/slick-ordered-list.module.mjs +20 -0
  83. package/esm2020/slick-paging/slick-paging.component.mjs +185 -0
  84. package/esm2020/slick-paging/slick-paging.module.mjs +19 -0
  85. package/esm2020/slick-photo-gallery/slick-photo-gallery.component.mjs +98 -0
  86. package/{esm2015/slick-photo-gallery/slick-photo-gallery.model.js → esm2020/slick-photo-gallery/slick-photo-gallery.model.mjs} +0 -0
  87. package/esm2020/slick-photo-gallery/slick-photo-gallery.module.mjs +21 -0
  88. package/esm2020/slick-pick-list/slick-pick-list.component.mjs +84 -0
  89. package/esm2020/slick-pick-list/slick-pick-list.module.mjs +20 -0
  90. package/esm2020/slick-popover/slick-popover.component.mjs +204 -0
  91. package/esm2020/slick-popover/slick-popover.module.mjs +19 -0
  92. package/esm2020/slick-profile-picture/slick-profile-picture.component.mjs +267 -0
  93. package/esm2020/slick-profile-picture/slick-profile-picture.module.mjs +20 -0
  94. package/esm2020/slick-progress-bar/slick-progress-bar.module.mjs +18 -0
  95. package/esm2020/slick-progress-bar/slick-progress-bar.service.mjs +53 -0
  96. package/esm2020/slick-screen-blocker/slick-screen-blocker.module.mjs +18 -0
  97. package/esm2020/slick-screen-blocker/slick-screen-blocker.service.mjs +83 -0
  98. package/{esm2015/slick-slider/slick-slider-tick.model.js → esm2020/slick-slider/slick-slider-tick.model.mjs} +0 -0
  99. package/esm2020/slick-slider/slick-slider.component.mjs +90 -0
  100. package/esm2020/slick-slider/slick-slider.module.mjs +20 -0
  101. package/esm2020/slick-split-screen/slick-screen-split-left-content.component.mjs +15 -0
  102. package/esm2020/slick-split-screen/slick-screen-split-right-content.component.mjs +15 -0
  103. package/esm2020/slick-split-screen/slick-split-screen.component.mjs +159 -0
  104. package/esm2020/slick-split-screen/slick-split-screen.module.mjs +21 -0
  105. package/esm2020/slick-tabs/slick-tab-header.component.mjs +28 -0
  106. package/esm2020/slick-tabs/slick-tab.component.mjs +63 -0
  107. package/{esm2015/slick-tabs/slick-tab.model.js → esm2020/slick-tabs/slick-tab.model.mjs} +0 -0
  108. package/esm2020/slick-tabs/slick-tabs.component.mjs +107 -0
  109. package/esm2020/slick-tabs/slick-tabs.module.mjs +23 -0
  110. package/esm2020/slick-toast/slick-toast.module.mjs +18 -0
  111. package/esm2020/slick-toast/slick-toast.service.mjs +88 -0
  112. package/{esm2015/slick-tree-view/slick-tree-node.model.js → esm2020/slick-tree-view/slick-tree-node.model.mjs} +0 -0
  113. package/esm2020/slick-tree-view/slick-tree-view.component.mjs +293 -0
  114. package/esm2020/slick-tree-view/slick-tree-view.module.mjs +22 -0
  115. package/esm2020/slick-type-ahead/slick-type-ahead.directive.mjs +164 -0
  116. package/esm2020/slick-type-ahead/slick-type-ahead.module.mjs +18 -0
  117. package/esm2020/slick-validation-indicator/slick-validation-indicator.directive.mjs +63 -0
  118. package/esm2020/slick-validation-indicator/slick-validation-indicator.module.mjs +19 -0
  119. package/esm2020/utils/slick-function-lock.service.mjs +55 -0
  120. package/esm2020/utils/slick-init.service.mjs +49 -0
  121. package/esm2020/utils/slick-log.service.mjs +23 -0
  122. package/esm2020/utils/slick-sleep.service.mjs +14 -0
  123. package/esm2020/utils/slick-utils.service.mjs +247 -0
  124. package/fesm2015/{slick-components.js → slick-components.mjs} +2779 -2070
  125. package/fesm2015/slick-components.mjs.map +1 -0
  126. package/fesm2020/slick-components.mjs +8467 -0
  127. package/fesm2020/slick-components.mjs.map +1 -0
  128. package/package.json +20 -8
  129. package/public-api.d.ts +8 -8
  130. package/slick-accordion/slick-accordion-item-header.component.d.ts +3 -0
  131. package/slick-accordion/slick-accordion-item.component.d.ts +3 -0
  132. package/slick-accordion/slick-accordion.component.d.ts +3 -0
  133. package/slick-accordion/slick-accordion.module.d.ts +8 -0
  134. package/slick-auto-complete/slick-auto-complete-list-item-template.directive.d.ts +3 -0
  135. package/slick-auto-complete/slick-auto-complete.component.d.ts +3 -0
  136. package/slick-auto-complete/slick-auto-complete.module.d.ts +8 -0
  137. package/slick-button-spinner/slick-button-spinner.component.d.ts +3 -0
  138. package/slick-button-spinner/slick-button-spinner.module.d.ts +6 -0
  139. package/slick-calendar/slick-calendar.component.d.ts +3 -0
  140. package/slick-calendar/slick-calendar.module.d.ts +6 -0
  141. package/slick-card/slick-card-header.component.d.ts +3 -0
  142. package/slick-card/slick-card.component.d.ts +3 -0
  143. package/slick-card/slick-card.module.d.ts +10 -0
  144. package/slick-components.d.ts +1 -22
  145. package/slick-confirm-dialog/slick-confirm-dialog.component.d.ts +3 -0
  146. package/slick-confirm-dialog/slick-confirm-dialog.module.d.ts +7 -0
  147. package/slick-container/slick-container-body.component.d.ts +3 -0
  148. package/slick-container/slick-container-footer.component.d.ts +3 -0
  149. package/slick-container/slick-container-header.component.d.ts +3 -0
  150. package/slick-container/slick-container.component.d.ts +3 -0
  151. package/slick-container/slick-container.module.d.ts +9 -0
  152. package/slick-context-menu/slick-context-menu-item.component.d.ts +3 -0
  153. package/slick-context-menu/slick-context-menu.component.d.ts +3 -0
  154. package/slick-context-menu/slick-context-menu.module.d.ts +7 -0
  155. package/slick-currency-mask/slick-currency-mask.directive.d.ts +3 -0
  156. package/slick-currency-mask/slick-currency-mask.module.d.ts +5 -0
  157. package/slick-date-picker/slick-date-picker.component.d.ts +3 -0
  158. package/slick-date-picker/slick-date-picker.module.d.ts +8 -0
  159. package/slick-dialog/slick-dialog-footer.component.d.ts +3 -0
  160. package/slick-dialog/slick-dialog.component.d.ts +3 -0
  161. package/slick-dialog/slick-dialog.module.d.ts +10 -1
  162. package/slick-dialog/slick-dialog.service.d.ts +3 -0
  163. package/slick-drag-drop/slick-drag-drop.directive.d.ts +3 -0
  164. package/slick-drag-drop/slick-drag-drop.module.d.ts +11 -0
  165. package/slick-drag-drop/slick-draggable.directive.d.ts +3 -0
  166. package/slick-drop-down/slick-drop-down.component.d.ts +3 -0
  167. package/slick-drop-down/slick-drop-down.module.d.ts +9 -0
  168. package/slick-drop-down/slick-drop-down.service.d.ts +3 -0
  169. package/slick-drop-list/slick-drop-list-grab.directive.d.ts +3 -0
  170. package/slick-drop-list/slick-drop-list-item.directive.d.ts +3 -0
  171. package/slick-drop-list/slick-drop-list.directive.d.ts +13 -7
  172. package/slick-drop-list/slick-drop-list.module.d.ts +14 -0
  173. package/slick-email-viewer/slick-email-viewer-dialog.component.d.ts +3 -0
  174. package/slick-email-viewer/slick-email-viewer.component.d.ts +3 -0
  175. package/slick-email-viewer/slick-email-viewer.module.d.ts +10 -0
  176. package/slick-emailer/slick-emailer-dialog.component.d.ts +3 -0
  177. package/slick-emailer/slick-emailer.component.d.ts +3 -0
  178. package/slick-emailer/slick-emailer.module.d.ts +13 -0
  179. package/slick-file-drop/slick-file-drop.component.d.ts +3 -0
  180. package/slick-file-drop/slick-file-drop.module.d.ts +7 -0
  181. package/slick-file-list/slick-file-list-item.component.d.ts +3 -0
  182. package/slick-file-list/slick-file-list.component.d.ts +3 -0
  183. package/slick-file-list/slick-file-list.module.d.ts +10 -0
  184. package/slick-google-address-search/slick-google-address-search.directive.d.ts +3 -0
  185. package/slick-google-address-search/slick-google-address-search.module.d.ts +6 -0
  186. package/slick-google-map/slick-google-map-dialog.component.d.ts +3 -0
  187. package/slick-google-map/slick-google-map.component.d.ts +3 -0
  188. package/slick-google-map/slick-google-map.module.d.ts +8 -0
  189. package/slick-grid/slick-grid-column-template.directive.d.ts +3 -0
  190. package/slick-grid/slick-grid-sanitize.pipe.d.ts +3 -0
  191. package/slick-grid/slick-grid.component.d.ts +3 -0
  192. package/slick-grid/slick-grid.module.d.ts +16 -0
  193. package/slick-grid/slick-grid.service.d.ts +3 -0
  194. package/slick-multi-select/slick-multi-select.component.d.ts +3 -0
  195. package/slick-multi-select/slick-multi-select.module.d.ts +7 -0
  196. package/slick-multi-select/slick-multi-select.service.d.ts +3 -0
  197. package/slick-ordered-list/slick-ordered-list.component.d.ts +3 -0
  198. package/slick-ordered-list/slick-ordered-list.module.d.ts +7 -0
  199. package/slick-paging/slick-paging.component.d.ts +3 -0
  200. package/slick-paging/slick-paging.module.d.ts +6 -0
  201. package/slick-photo-gallery/slick-photo-gallery.component.d.ts +3 -0
  202. package/slick-photo-gallery/slick-photo-gallery.module.d.ts +6 -0
  203. package/slick-pick-list/slick-pick-list.component.d.ts +3 -0
  204. package/slick-pick-list/slick-pick-list.module.d.ts +7 -0
  205. package/slick-popover/slick-popover.component.d.ts +3 -0
  206. package/slick-popover/slick-popover.module.d.ts +6 -0
  207. package/slick-profile-picture/slick-profile-picture.component.d.ts +3 -0
  208. package/slick-profile-picture/slick-profile-picture.module.d.ts +7 -0
  209. package/slick-progress-bar/slick-progress-bar.module.d.ts +5 -0
  210. package/slick-progress-bar/slick-progress-bar.service.d.ts +3 -0
  211. package/slick-screen-blocker/slick-screen-blocker.module.d.ts +5 -0
  212. package/slick-screen-blocker/slick-screen-blocker.service.d.ts +3 -0
  213. package/slick-slider/slick-slider.component.d.ts +3 -0
  214. package/slick-slider/slick-slider.module.d.ts +6 -0
  215. package/slick-split-screen/slick-screen-split-left-content.component.d.ts +3 -0
  216. package/slick-split-screen/slick-screen-split-right-content.component.d.ts +3 -0
  217. package/slick-split-screen/slick-split-screen.component.d.ts +3 -0
  218. package/slick-split-screen/slick-split-screen.module.d.ts +8 -0
  219. package/slick-tabs/slick-tab-header.component.d.ts +3 -0
  220. package/slick-tabs/slick-tab.component.d.ts +3 -0
  221. package/slick-tabs/slick-tabs.component.d.ts +3 -0
  222. package/slick-tabs/slick-tabs.module.d.ts +10 -0
  223. package/slick-toast/slick-toast.module.d.ts +5 -0
  224. package/slick-toast/slick-toast.service.d.ts +3 -0
  225. package/slick-tree-view/slick-tree-view.component.d.ts +3 -0
  226. package/slick-tree-view/slick-tree-view.module.d.ts +8 -0
  227. package/slick-type-ahead/slick-type-ahead.directive.d.ts +3 -0
  228. package/slick-type-ahead/slick-type-ahead.module.d.ts +5 -0
  229. package/slick-validation-indicator/slick-validation-indicator.directive.d.ts +3 -0
  230. package/slick-validation-indicator/slick-validation-indicator.module.d.ts +6 -0
  231. package/utils/slick-function-lock.service.d.ts +3 -0
  232. package/utils/slick-init.service.d.ts +3 -0
  233. package/utils/slick-log.service.d.ts +3 -0
  234. package/utils/slick-sleep.service.d.ts +3 -0
  235. package/utils/slick-utils.service.d.ts +5 -0
  236. package/bundles/slick-components.umd.js +0 -9777
  237. package/bundles/slick-components.umd.js.map +0 -1
  238. package/esm2015/public-api.js +0 -43
  239. package/esm2015/slick-accordion/slick-accordion-item-header.component.js +0 -10
  240. package/esm2015/slick-accordion/slick-accordion-item.component.js +0 -80
  241. package/esm2015/slick-accordion/slick-accordion.component.js +0 -77
  242. package/esm2015/slick-accordion/slick-accordion.module.js +0 -18
  243. package/esm2015/slick-auto-complete/slick-auto-complete-list-item-template.directive.js +0 -21
  244. package/esm2015/slick-auto-complete/slick-auto-complete.component.js +0 -352
  245. package/esm2015/slick-auto-complete/slick-auto-complete.module.js +0 -19
  246. package/esm2015/slick-button-spinner/slick-button-spinner.component.js +0 -186
  247. package/esm2015/slick-button-spinner/slick-button-spinner.module.js +0 -14
  248. package/esm2015/slick-calendar/slick-calendar.component.js +0 -233
  249. package/esm2015/slick-calendar/slick-calendar.module.js +0 -14
  250. package/esm2015/slick-card/slick-card-header.component.js +0 -10
  251. package/esm2015/slick-card/slick-card.component.js +0 -37
  252. package/esm2015/slick-card/slick-card.module.js +0 -14
  253. package/esm2015/slick-components.js +0 -27
  254. package/esm2015/slick-confirm-dialog/slick-confirm-dialog.component.js +0 -62
  255. package/esm2015/slick-confirm-dialog/slick-confirm-dialog.module.js +0 -15
  256. package/esm2015/slick-container/slick-container-body.component.js +0 -18
  257. package/esm2015/slick-container/slick-container-footer.component.js +0 -16
  258. package/esm2015/slick-container/slick-container-header.component.js +0 -16
  259. package/esm2015/slick-container/slick-container.component.js +0 -19
  260. package/esm2015/slick-container/slick-container.module.js +0 -20
  261. package/esm2015/slick-context-menu/slick-context-menu-item.component.js +0 -10
  262. package/esm2015/slick-context-menu/slick-context-menu.component.js +0 -43
  263. package/esm2015/slick-context-menu/slick-context-menu.module.js +0 -15
  264. package/esm2015/slick-currency-mask/slick-currency-mask.directive.js +0 -234
  265. package/esm2015/slick-currency-mask/slick-currency-mask.module.js +0 -14
  266. package/esm2015/slick-date-picker/slick-date-picker.component.js +0 -267
  267. package/esm2015/slick-date-picker/slick-date-picker.module.js +0 -16
  268. package/esm2015/slick-dialog/slick-dialog-footer.component.js +0 -18
  269. package/esm2015/slick-dialog/slick-dialog.component.js +0 -282
  270. package/esm2015/slick-dialog/slick-dialog.module.js +0 -18
  271. package/esm2015/slick-dialog/slick-dialog.service.js +0 -67
  272. package/esm2015/slick-drag-drop/slick-drag-drop.directive.js +0 -9
  273. package/esm2015/slick-drag-drop/slick-drag-drop.module.js +0 -14
  274. package/esm2015/slick-drag-drop/slick-draggable.directive.js +0 -9
  275. package/esm2015/slick-drop-down/slick-drop-down.component.js +0 -465
  276. package/esm2015/slick-drop-down/slick-drop-down.module.js +0 -19
  277. package/esm2015/slick-drop-down/slick-drop-down.service.js +0 -59
  278. package/esm2015/slick-drop-list/slick-drop-list-grab.directive.js +0 -18
  279. package/esm2015/slick-drop-list/slick-drop-list-item.directive.js +0 -18
  280. package/esm2015/slick-drop-list/slick-drop-list.directive.js +0 -162
  281. package/esm2015/slick-drop-list/slick-drop-list.module.js +0 -15
  282. package/esm2015/slick-email-viewer/slick-email-viewer-dialog.component.js +0 -61
  283. package/esm2015/slick-email-viewer/slick-email-viewer.component.js +0 -39
  284. package/esm2015/slick-email-viewer/slick-email-viewer.module.js +0 -21
  285. package/esm2015/slick-emailer/slick-emailer-dialog.component.js +0 -122
  286. package/esm2015/slick-emailer/slick-emailer.component.js +0 -226
  287. package/esm2015/slick-emailer/slick-emailer.module.js +0 -24
  288. package/esm2015/slick-file-drop/slick-file-drop.component.js +0 -144
  289. package/esm2015/slick-file-drop/slick-file-drop.module.js +0 -15
  290. package/esm2015/slick-file-list/slick-file-list-item.component.js +0 -156
  291. package/esm2015/slick-file-list/slick-file-list.component.js +0 -114
  292. package/esm2015/slick-file-list/slick-file-list.module.js +0 -18
  293. package/esm2015/slick-google-address-search/slick-google-address-search.directive.js +0 -75
  294. package/esm2015/slick-google-address-search/slick-google-address-search.module.js +0 -14
  295. package/esm2015/slick-google-map/slick-google-map-dialog.component.js +0 -45
  296. package/esm2015/slick-google-map/slick-google-map.component.js +0 -45
  297. package/esm2015/slick-google-map/slick-google-map.module.js +0 -17
  298. package/esm2015/slick-grid/slick-grid-column-template.directive.js +0 -19
  299. package/esm2015/slick-grid/slick-grid-sanitize.pipe.js +0 -20
  300. package/esm2015/slick-grid/slick-grid.component.js +0 -792
  301. package/esm2015/slick-grid/slick-grid.module.js +0 -38
  302. package/esm2015/slick-grid/slick-grid.service.js +0 -72
  303. package/esm2015/slick-multi-select/slick-multi-select.component.js +0 -356
  304. package/esm2015/slick-multi-select/slick-multi-select.module.js +0 -15
  305. package/esm2015/slick-multi-select/slick-multi-select.service.js +0 -74
  306. package/esm2015/slick-ordered-list/slick-ordered-list.component.js +0 -198
  307. package/esm2015/slick-ordered-list/slick-ordered-list.module.js +0 -15
  308. package/esm2015/slick-paging/slick-paging.component.js +0 -180
  309. package/esm2015/slick-paging/slick-paging.module.js +0 -14
  310. package/esm2015/slick-photo-gallery/slick-photo-gallery.component.js +0 -101
  311. package/esm2015/slick-photo-gallery/slick-photo-gallery.module.js +0 -16
  312. package/esm2015/slick-pick-list/slick-pick-list.component.js +0 -78
  313. package/esm2015/slick-pick-list/slick-pick-list.module.js +0 -15
  314. package/esm2015/slick-popover/slick-popover.component.js +0 -199
  315. package/esm2015/slick-popover/slick-popover.module.js +0 -14
  316. package/esm2015/slick-profile-picture/slick-profile-picture.component.js +0 -242
  317. package/esm2015/slick-profile-picture/slick-profile-picture.module.js +0 -15
  318. package/esm2015/slick-progress-bar/slick-progress-bar.module.js +0 -13
  319. package/esm2015/slick-progress-bar/slick-progress-bar.service.js +0 -50
  320. package/esm2015/slick-screen-blocker/slick-screen-blocker.module.js +0 -13
  321. package/esm2015/slick-screen-blocker/slick-screen-blocker.service.js +0 -80
  322. package/esm2015/slick-slider/slick-slider.component.js +0 -88
  323. package/esm2015/slick-slider/slick-slider.module.js +0 -15
  324. package/esm2015/slick-split-screen/slick-screen-split-left-content.component.js +0 -13
  325. package/esm2015/slick-split-screen/slick-screen-split-right-content.component.js +0 -13
  326. package/esm2015/slick-split-screen/slick-split-screen.component.js +0 -148
  327. package/esm2015/slick-split-screen/slick-split-screen.module.js +0 -16
  328. package/esm2015/slick-tabs/slick-tab-header.component.js +0 -25
  329. package/esm2015/slick-tabs/slick-tab.component.js +0 -67
  330. package/esm2015/slick-tabs/slick-tabs.component.js +0 -104
  331. package/esm2015/slick-tabs/slick-tabs.module.js +0 -17
  332. package/esm2015/slick-toast/slick-toast.module.js +0 -13
  333. package/esm2015/slick-toast/slick-toast.service.js +0 -91
  334. package/esm2015/slick-tree-view/slick-tree-view.component.js +0 -287
  335. package/esm2015/slick-tree-view/slick-tree-view.module.js +0 -17
  336. package/esm2015/slick-type-ahead/slick-type-ahead.directive.js +0 -155
  337. package/esm2015/slick-type-ahead/slick-type-ahead.module.js +0 -13
  338. package/esm2015/slick-validation-indicator/slick-validation-indicator.directive.js +0 -61
  339. package/esm2015/slick-validation-indicator/slick-validation-indicator.module.js +0 -14
  340. package/esm2015/utils/slick-function-lock.service.js +0 -54
  341. package/esm2015/utils/slick-init.service.js +0 -48
  342. package/esm2015/utils/slick-log.service.js +0 -27
  343. package/esm2015/utils/slick-sleep.service.js +0 -14
  344. package/esm2015/utils/slick-utils.service.js +0 -229
  345. package/fesm2015/slick-components.js.map +0 -1
  346. package/slick-components.metadata.json +0 -1
@@ -1,352 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, ElementRef, ViewChild, ContentChild, Input, Output, EventEmitter, forwardRef } from "@angular/core";
3
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
4
- import { SlickAutoCompleteListItemTemplateDirective } from "./slick-auto-complete-list-item-template.directive";
5
- import { SlickUtilsService } from "../utils/slick-utils.service";
6
- import { SlickFunctionLockService } from "../utils/slick-function-lock.service";
7
- import { SlickSleepService } from "../utils/slick-sleep.service";
8
- export class SlickAutoCompleteComponent {
9
- constructor(slickFunctionLockService) {
10
- this.slickFunctionLockService = slickFunctionLockService;
11
- this.delay = 300;
12
- this.selectFirst = true;
13
- this.listHeight = "300px";
14
- this.listWidth = '100%';
15
- this.allowFreeformText = true;
16
- this.showNoItemsFoundDisplay = true;
17
- this.onRefresh = new EventEmitter();
18
- this.onSelect = new EventEmitter();
19
- this.onFreeformTextSelect = new EventEmitter();
20
- this.fnDocumentClick = (e) => this.documentClick(e);
21
- this.fnKeyDown = (e) => this.keyDown(e);
22
- this.lastInputValue = "";
23
- this.forcedCollapse = false;
24
- // This is necessary so that the scroll and resize events can add and remove the event properly,
25
- // as well as getting the correct ES6 function
26
- this.fnReposition = () => this.reposition();
27
- this.selectedIndex = -1;
28
- this.showAutoComplete = false;
29
- this.autoCompleteVisiblity = false;
30
- this.expanded = true;
31
- this.loading = false;
32
- this.propagateChange = (_) => { };
33
- this.uuid = SlickUtilsService.newGuid();
34
- }
35
- ngOnInit() {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- yield SlickSleepService.sleep();
38
- // Remove this from the inline version and put it on the body so that it doesn't hide behind the bottom
39
- // of a div when it expands beyond the bottom.
40
- this.autoCompleteRef.nativeElement.remove(this.autoCompleteRef);
41
- document.body.appendChild(this.autoCompleteRef.nativeElement);
42
- this.inputRef.addEventListener("keydown", this.fnKeyDown);
43
- });
44
- }
45
- ngOnDestroy() {
46
- // Since angular has no way to use the third parameter, I'm doing this in raw js
47
- document.removeEventListener("click", this.fnDocumentClick, true);
48
- this.inputRef.removeEventListener("keydown", this.fnKeyDown);
49
- clearTimeout(this.delayTimeout);
50
- this.delayTimeout = null;
51
- this.collapse();
52
- // Is okay if this fails. It just means it was already removed.
53
- try {
54
- document.body.removeChild(this.autoCompleteRef.nativeElement);
55
- }
56
- catch (_a) { }
57
- }
58
- ngOnChanges(changes) {
59
- if (changes.allowFreeformText)
60
- this.allowFreeformText = (this.allowFreeformText.toString().toLowerCase() === 'false') ? false : true;
61
- if (changes.showNoItemsFoundDisplay)
62
- this.showNoItemsFoundDisplay = (this.showNoItemsFoundDisplay.toString().toLowerCase() === 'false') ? false : true;
63
- if (changes.items) {
64
- if (this.items && this.items.length === 0 && this.showNoItemsFoundDisplay === false)
65
- this.collapse();
66
- }
67
- }
68
- documentClick(e) {
69
- if (!this.expanded || !e.target)
70
- return;
71
- if (SlickUtilsService.checkParentIdExists(e.target, "slick-auto-complete_" + this.uuid) === false)
72
- this.collapse();
73
- }
74
- onItemClick(index) {
75
- this.selectItem(index);
76
- this.collapse();
77
- }
78
- keyDown(event) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- // alt
81
- if (event.keyCode === 18)
82
- return;
83
- clearInterval(this.waitForItemsInterval);
84
- this.slickFunctionLockService.release("AUTO_COMPLETE_WAIT_FOR_ITEMS");
85
- // If we're just tabbing through, don't even do anything
86
- if (!this.lastInputValue && (event.keyCode === 9 || event.keyCode === 13))
87
- return;
88
- yield SlickSleepService.sleep();
89
- if (this.lastInputValue !== this.inputRef.value) {
90
- this.lastInputValue = this.inputRef.value;
91
- this.forcedCollapse = false;
92
- if (!this.lastInputValue) {
93
- this.propagateChange(null);
94
- this.collapse();
95
- }
96
- clearTimeout(this.delayTimeout);
97
- this.delayTimeout = null;
98
- if (this.inputRef.value === '') {
99
- this.items = null;
100
- this.collapse();
101
- return true;
102
- }
103
- else {
104
- this.delayTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
105
- (this.selectFirst === true) ? this.selectedIndex = 0 : this.selectedIndex = -1;
106
- this.delayTimeout = null;
107
- this.items = null;
108
- this.expand();
109
- yield this.refreshItems(true);
110
- }), this.delay);
111
- }
112
- }
113
- if (event.keyCode === 9 || event.keyCode === 13) {
114
- if (this.delayTimeout && this.selectFirst) {
115
- clearTimeout(this.delayTimeout);
116
- this.delayTimeout = null;
117
- this.items = null;
118
- this.collapse();
119
- if (this.selectFirst === true && !this.forcedCollapse) {
120
- yield this.refreshItems(false);
121
- this.selectedIndex = -1;
122
- if (!this.items && !this.inputRef.value && this.onSelect) {
123
- this.onSelect.emit(null);
124
- }
125
- else if (this.items && this.items.length > 0) {
126
- this.selectedIndex = 0;
127
- this.selectItem(this.selectedIndex);
128
- }
129
- else {
130
- if (this.allowFreeformText && this.onFreeformTextSelect)
131
- this.onFreeformTextSelect.emit(this.inputRef.value);
132
- }
133
- }
134
- else {
135
- if (this.allowFreeformText && this.onFreeformTextSelect)
136
- this.onFreeformTextSelect.emit(this.inputRef.value);
137
- }
138
- }
139
- else {
140
- clearTimeout(this.delayTimeout);
141
- if (!this.items && !this.inputRef.value && this.onSelect) {
142
- this.onSelect.emit(null);
143
- }
144
- else if (this.items && this.items.length > 0 && this.expanded && !this.forcedCollapse) {
145
- this.selectItem(this.selectedIndex);
146
- }
147
- else {
148
- if (this.allowFreeformText && this.onFreeformTextSelect) {
149
- this.onFreeformTextSelect.emit(this.inputRef.value);
150
- }
151
- }
152
- this.collapse();
153
- }
154
- }
155
- // Esc
156
- if (event.which === 27) {
157
- this.forcedCollapse = true;
158
- this.collapse();
159
- return false;
160
- }
161
- // Arrowup
162
- if (event.which === 38) {
163
- if (this.selectedIndex === null || this.selectedIndex === undefined)
164
- this.selectedIndex = 0;
165
- if (this.selectedIndex > 0)
166
- this.selectedIndex--;
167
- return false;
168
- }
169
- // Arrowdown
170
- if (event.which === 40) {
171
- event.stopPropagation();
172
- if (this.selectedIndex === null || this.selectedIndex === undefined)
173
- this.selectedIndex = -1;
174
- if (!this.expanded) {
175
- this.expand();
176
- return false;
177
- }
178
- if (this.selectedIndex < this.items.length - 1)
179
- this.selectedIndex++;
180
- return false;
181
- }
182
- });
183
- }
184
- // this is the initial value set to the component
185
- writeValue(obj) {
186
- if (obj) {
187
- }
188
- }
189
- // registers 'fn' that will be fired when changes are made
190
- // this is how we emit the changes back to the form
191
- registerOnChange(fn) {
192
- this.propagateChange = fn;
193
- }
194
- // not used, used for touch input
195
- registerOnTouched() { }
196
- selectItem(index) {
197
- return __awaiter(this, void 0, void 0, function* () {
198
- if (index < 0 || !this.items || this.items.length === 0) {
199
- this.selectedItem = null;
200
- }
201
- else {
202
- this.selectedItem = this.items[index];
203
- if (this.displayTextFieldName) {
204
- const text = SlickUtilsService.getDeepObject(this.selectedItem, this.displayTextFieldName);
205
- if (text) {
206
- this.inputRef.value = text;
207
- this.lastInputValue = this.inputRef.value;
208
- }
209
- }
210
- }
211
- this.propagateChange(this.selectedItem);
212
- if (this.onSelect)
213
- this.onSelect.emit(this.selectedItem);
214
- // Call to update the model for the textbox
215
- yield SlickSleepService.sleep();
216
- let evt = document.createEvent('Event');
217
- evt.initEvent('input', true, false);
218
- this.inputRef.dispatchEvent(evt);
219
- });
220
- }
221
- expand() {
222
- return __awaiter(this, void 0, void 0, function* () {
223
- this.reposition();
224
- // If the flag to show items is false, don't display "Loading..."
225
- if (this.showNoItemsFoundDisplay === false && (!this.items || this.items.length === 0)) {
226
- this.showAutoComplete = false;
227
- this.autoCompleteVisiblity = false;
228
- this.expanded = false;
229
- return;
230
- }
231
- this.showAutoComplete = true;
232
- this.autoCompleteRef.nativeElement.style.display = "inline-block";
233
- yield SlickSleepService.sleep();
234
- this.autoCompleteVisiblity = true;
235
- this.expanded = true;
236
- this.inputRef.classList.add("slick-auto-complete_remove-bottom-left-border-radius");
237
- this.inputRef.classList.add("slick-auto-complete_remove-bottom-right-border-radius");
238
- // This is necessary, otherwise `this` in the reposition function will be window
239
- // and not the component.
240
- // Since angular has no way to use the third parameter, I'm doing this in raw js
241
- document.addEventListener("click", this.fnDocumentClick, true);
242
- });
243
- }
244
- collapse() {
245
- let inputGroupPrepend = SlickUtilsService.getClosestSibling(this.inputRef, "input-group-prepend");
246
- if (inputGroupPrepend)
247
- inputGroupPrepend.classList.remove("slick-auto-complete_remove-bottom-left-border-radius");
248
- this.inputRef.classList.remove("slick-auto-complete_remove-bottom-left-border-radius");
249
- this.inputRef.classList.remove("slick-auto-complete_remove-bottom-right-border-radius");
250
- this.autoCompleteVisiblity = false;
251
- this.expanded = false;
252
- this.autoCompleteRef.nativeElement.style.display = "none";
253
- // Since angular has no way to use the third parameter, I'm doing this in raw js
254
- document.removeEventListener("click", this.fnDocumentClick, true);
255
- }
256
- reposition() {
257
- let rect = this.inputRef.getBoundingClientRect();
258
- let inputLeft = rect.left;
259
- let inputTop = rect.top;
260
- let inputHeight = this.inputRef.offsetHeight;
261
- let inputWidth = this.inputRef.offsetWidth;
262
- let inputGroupPrepend = SlickUtilsService.getClosestSibling(this.inputRef, "input-group-prepend");
263
- if (inputGroupPrepend) {
264
- inputLeft = inputGroupPrepend.getBoundingClientRect().left;
265
- inputWidth = inputWidth += inputGroupPrepend.offsetWidth;
266
- inputGroupPrepend.classList.add("slick-auto-complete_remove-bottom-left-border-radius");
267
- }
268
- this.left = inputLeft + "px";
269
- this.top = (inputTop + inputHeight + 1) + "px";
270
- if (this.listWidth === '100%')
271
- this.width = inputWidth + "px";
272
- else if (this.listWidth === 'auto')
273
- this.width = "auto";
274
- else
275
- this.width = this.listWidth;
276
- }
277
- refreshItems(expand) {
278
- return __awaiter(this, void 0, void 0, function* () {
279
- return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
280
- yield this.slickFunctionLockService.lock("AUTO_COMPLETE_WAIT_FOR_ITEMS");
281
- clearInterval(this.waitForItemsInterval);
282
- this.items = null;
283
- if (!this.onRefresh || !this.inputRef.value) {
284
- this.items = [];
285
- this.slickFunctionLockService.release("AUTO_COMPLETE_WAIT_FOR_ITEMS");
286
- resolve();
287
- }
288
- else {
289
- this.loading = true;
290
- if (this.showNoItemsFoundDisplay === false)
291
- this.collapse();
292
- // Call the users refresh method to get a fresh list of items
293
- this.onRefresh.emit(this.inputRef.value);
294
- // Wait for the list to refresh
295
- let timeoutCheck = 1000;
296
- this.waitForItemsInterval = setInterval(() => {
297
- // If we've timedout, got a response or they started typing something else, stop the interval
298
- if (timeoutCheck <= 0 || this.items) {
299
- clearInterval(this.waitForItemsInterval);
300
- if (timeoutCheck <= 0) {
301
- console.error("Timed out waiting for list in auto complete");
302
- this.items = [];
303
- if (this.showNoItemsFoundDisplay === false)
304
- this.collapse();
305
- }
306
- this.loading = false;
307
- if (expand)
308
- this.expand();
309
- this.slickFunctionLockService.release("AUTO_COMPLETE_WAIT_FOR_ITEMS");
310
- resolve();
311
- }
312
- timeoutCheck--;
313
- }, 100);
314
- }
315
- }));
316
- });
317
- }
318
- }
319
- SlickAutoCompleteComponent.decorators = [
320
- { type: Component, args: [{
321
- selector: 'slick-auto-complete',
322
- template: "<div #autoCompleteRef id=\"slick-auto-complete_{{uuid}}\" class='slick-auto-complete dropdown-menu' [style.width]=\"width\" [style.minWidth]=\"width\" [style.visibility]=\"(expanded === true) ? 'visible' : 'hidden'\" [style.opacity]=\"(expanded === true) ? '1' : '0'\" [style.max-height]=\"listHeight\" [style.left]=\"left\" [style.top]=\"top\">\r\n\t<div *ngIf=\"loading\" style=\"font-size: .8rem\" class=\"ml-3\">Loading...</div>\r\n\t<div *ngIf=\"!loading && items?.length === 0\" style=\"font-size: .8rem\" class=\"ml-3\">\r\n\t\tNo items found\r\n\t</div>\r\n\t<div *ngIf=\"!loading && items?.length > 0\">\r\n\t\t<div *ngFor=\"let item of items; let index = index;\" (click)=\"onItemClick(index)\" [class.card-header]=\"selectedIndex === index\" class=\"dropdown-item\">\r\n\t\t\t<ng-container *ngTemplateOutlet=\"listItemTemplateRef.template, context: { $implicit: item, index: index }\">\r\n\t\t\t</ng-container>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n",
323
- providers: [
324
- {
325
- provide: NG_VALUE_ACCESSOR,
326
- useExisting: forwardRef(() => SlickAutoCompleteComponent),
327
- multi: true
328
- }
329
- ]
330
- },] }
331
- ];
332
- /** @nocollapse */
333
- SlickAutoCompleteComponent.ctorParameters = () => [
334
- { type: SlickFunctionLockService }
335
- ];
336
- SlickAutoCompleteComponent.propDecorators = {
337
- inputRef: [{ type: Input, args: ["inputRef",] }],
338
- items: [{ type: Input, args: ["items",] }],
339
- delay: [{ type: Input, args: ["delay",] }],
340
- selectFirst: [{ type: Input, args: ["selectFirst",] }],
341
- displayTextFieldName: [{ type: Input, args: ["displayTextFieldName",] }],
342
- listHeight: [{ type: Input, args: ["listHeight",] }],
343
- listWidth: [{ type: Input, args: ["listWidth",] }],
344
- allowFreeformText: [{ type: Input, args: ["allowFreeformText",] }],
345
- showNoItemsFoundDisplay: [{ type: Input, args: ["showNoItemsFoundDisplay",] }],
346
- onRefresh: [{ type: Output, args: ["onRefresh",] }],
347
- onSelect: [{ type: Output, args: ["onSelect",] }],
348
- onFreeformTextSelect: [{ type: Output, args: ["onFreeformTextSelect",] }],
349
- autoCompleteRef: [{ type: ViewChild, args: ["autoCompleteRef", { static: true },] }],
350
- listItemTemplateRef: [{ type: ContentChild, args: [SlickAutoCompleteListItemTemplateDirective, { static: true },] }]
351
- };
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stYXV0by1jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9zbGljay1hdXRvLWNvbXBsZXRlL3NsaWNrLWF1dG8tY29tcGxldGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF3QyxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQTJDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZNLE9BQU8sRUFBMkMsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVlqRSxNQUFNLE9BQU8sMEJBQTBCO0lBd0N0QyxZQUFvQix3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQXJDdEQsVUFBSyxHQUFXLEdBQUcsQ0FBQztRQUNkLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBRTdCLGVBQVUsR0FBRyxPQUFPLENBQUM7UUFDdEIsY0FBUyxHQUFXLE1BQU0sQ0FBQztRQUNuQixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDbkIsNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQzVDLGNBQVMsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5RCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDMUMseUJBQW9CLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFLeEcsb0JBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxjQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFLM0IsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFDNUIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFL0IsZ0dBQWdHO1FBQ2hHLDhDQUE4QztRQUN0QyxpQkFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQU0vQyxrQkFBYSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzNCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBc0x6QixvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFuTGpDLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVLLFFBQVE7O1lBQ2IsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyx1R0FBdUc7WUFDdkcsOENBQThDO1lBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUU5RCxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQztLQUFBO0lBRUQsV0FBVztRQUNWLGdGQUFnRjtRQUNoRixRQUFRLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdELFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhCLGdFQUFnRTtRQUNoRSxJQUFJO1lBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM5RDtRQUNELFdBQU0sR0FBRztJQUNWLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDakMsSUFBSSxPQUFPLENBQUMsaUJBQWlCO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFdkcsSUFBSSxPQUFPLENBQUMsdUJBQXVCO1lBQ2xDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFbkgsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLHVCQUF1QixLQUFLLEtBQUs7Z0JBQ2xGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtJQUNGLENBQUM7SUFFTyxhQUFhLENBQUMsQ0FBYTtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQzlCLE9BQU87UUFFUixJQUFJLGlCQUFpQixDQUFDLG1CQUFtQixDQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUs7WUFDN0csSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRWEsT0FBTyxDQUFDLEtBQW9COztZQUN6QyxNQUFNO1lBQ04sSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ3ZCLE9BQU87WUFFUixhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBRXRFLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUN4RSxPQUFPO1lBRVIsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVoQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNoQjtnQkFFRCxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNsQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sSUFBSSxDQUFDO2lCQUNaO3FCQUNJO29CQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQVMsRUFBRTt3QkFDekMsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDL0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO3dCQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ2QsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDLENBQUEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2Y7YUFDRDtZQUVELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUMxQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFFaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7d0JBQ3RELE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFOzRCQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDekI7NkJBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7NEJBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3lCQUNwQzs2QkFDSTs0QkFDSixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CO2dDQUN0RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ3JEO3FCQUNEO3lCQUNJO3dCQUNKLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxvQkFBb0I7NEJBQ3RELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDckQ7aUJBQ0Q7cUJBQ0k7b0JBQ0osWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDekI7eUJBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7cUJBQ3BDO3lCQUNJO3dCQUNKLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTs0QkFDeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNwRDtxQkFDRDtvQkFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQ2hCO2FBQ0Q7WUFFRCxNQUFNO1lBQ04sSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFaEIsT0FBTyxLQUFLLENBQUM7YUFDYjtZQUVELFVBQVU7WUFDVixJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUztvQkFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBRXhCLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDO29CQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBRXRCLE9BQU8sS0FBSyxDQUFDO2FBQ2I7WUFFRCxZQUFZO1lBQ1osSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtnQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUztvQkFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZCxPQUFPLEtBQUssQ0FBQztpQkFDYjtnQkFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUV0QixPQUFPLEtBQUssQ0FBQzthQUNiO1FBQ0YsQ0FBQztLQUFBO0lBSUQsaURBQWlEO0lBQ2pELFVBQVUsQ0FBQyxHQUFRO1FBQ2xCLElBQUksR0FBRyxFQUFFO1NBQ1I7SUFDRixDQUFDO0lBRUQsMERBQTBEO0lBQzFELG1EQUFtRDtJQUNuRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsaUJBQWlCLEtBQUssQ0FBQztJQUVqQixVQUFVLENBQUMsS0FBYTs7WUFDN0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO2lCQUNJO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7b0JBQzlCLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO29CQUMzRixJQUFJLElBQUksRUFBRTt3QkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7d0JBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7cUJBQzFDO2lCQUNEO2FBQ0Q7WUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsMkNBQTJDO1lBQzNDLE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQztLQUFBO0lBRWEsTUFBTTs7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLGlFQUFpRTtZQUNqRSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixPQUFPO2FBQ1A7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO1lBQ2xFLE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUVyQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztZQUVyRixnRkFBZ0Y7WUFDaEYseUJBQXlCO1lBQ3pCLGdGQUFnRjtZQUNoRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsQ0FBQztLQUFBO0lBRU8sUUFBUTtRQUNmLElBQUksaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xHLElBQUksaUJBQWlCO1lBQ3BCLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUV4RixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRTFELGdGQUFnRjtRQUNoRixRQUFRLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLFVBQVU7UUFDakIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2pELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN4QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUM3QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUUzQyxJQUFJLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUNsRyxJQUFJLGlCQUFpQixFQUFFO1lBQ3RCLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQztZQUMzRCxVQUFVLEdBQUcsVUFBVSxJQUFJLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztZQUN6RCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDeEY7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxNQUFNO1lBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQzthQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTTtZQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQzs7WUFFcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFYSxZQUFZLENBQUMsTUFBZTs7WUFDekMsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFPLE9BQU8sRUFBRSxFQUFFO2dCQUMxQyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztnQkFDekUsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFFbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtvQkFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztvQkFDdEUsT0FBTyxFQUFFLENBQUM7aUJBQ1Y7cUJBQ0k7b0JBQ0osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ3BCLElBQUksSUFBSSxDQUFDLHVCQUF1QixLQUFLLEtBQUs7d0JBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakIsNkRBQTZEO29CQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUV6QywrQkFBK0I7b0JBQy9CLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDeEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7d0JBQzVDLDZGQUE2Rjt3QkFDN0YsSUFBSSxZQUFZLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ3BDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQzs0QkFDekMsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO2dDQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7Z0NBQzdELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dDQUNoQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxLQUFLO29DQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7NkJBQ2pCOzRCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUNyQixJQUFJLE1BQU07Z0NBQ1QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNmLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQzs0QkFDdEUsT0FBTyxFQUFFLENBQUM7eUJBQ1Y7d0JBRUQsWUFBWSxFQUFFLENBQUM7b0JBQ2hCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDUjtZQUNGLENBQUMsQ0FBQSxDQUFDLENBQUE7UUFDSCxDQUFDO0tBQUE7OztZQTNYRCxTQUFTLFNBQUM7Z0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsNjhCQUFpRDtnQkFDakQsU0FBUyxFQUFFO29CQUNWO3dCQUNDLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUM7d0JBQ3pELEtBQUssRUFBRSxJQUFJO3FCQUNYO2lCQUFDO2FBQ0g7Ozs7WUFaUSx3QkFBd0I7Ozt1QkFjL0IsS0FBSyxTQUFDLFVBQVU7b0JBQ2hCLEtBQUssU0FBQyxPQUFPO29CQUNiLEtBQUssU0FBQyxPQUFPOzBCQUNiLEtBQUssU0FBQyxhQUFhO21DQUNuQixLQUFLLFNBQUMsc0JBQXNCO3lCQUM1QixLQUFLLFNBQUMsWUFBWTt3QkFDbEIsS0FBSyxTQUFDLFdBQVc7Z0NBQ2pCLEtBQUssU0FBQyxtQkFBbUI7c0NBQ3pCLEtBQUssU0FBQyx5QkFBeUI7d0JBQy9CLE1BQU0sU0FBQyxXQUFXO3VCQUNsQixNQUFNLFNBQUMsVUFBVTttQ0FDakIsTUFBTSxTQUFDLHNCQUFzQjs4QkFFN0IsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtrQ0FDN0MsWUFBWSxTQUFDLDBDQUEwQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uSW5pdCwgT25EZXN0cm95LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIENvbnRlbnRDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3Jtc01vZHVsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFNsaWNrQXV0b0NvbXBsZXRlTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gXCIuL3NsaWNrLWF1dG8tY29tcGxldGUtbGlzdC1pdGVtLXRlbXBsYXRlLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBTbGlja1V0aWxzU2VydmljZSB9IGZyb20gXCIuLi91dGlscy9zbGljay11dGlscy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNsaWNrRnVuY3Rpb25Mb2NrU2VydmljZSB9IGZyb20gXCIuLi91dGlscy9zbGljay1mdW5jdGlvbi1sb2NrLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2xpY2tTbGVlcFNlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvc2xpY2stc2xlZXAuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdzbGljay1hdXRvLWNvbXBsZXRlJyxcclxuXHR0ZW1wbGF0ZVVybDogJ3NsaWNrLWF1dG8tY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHByb3ZpZGVyczogW1xyXG5cdFx0e1xyXG5cdFx0XHRwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpY2tBdXRvQ29tcGxldGVDb21wb25lbnQpLFxyXG5cdFx0XHRtdWx0aTogdHJ1ZVxyXG5cdFx0fV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWNrQXV0b0NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cdEBJbnB1dChcImlucHV0UmVmXCIpIGlucHV0UmVmOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdEBJbnB1dChcIml0ZW1zXCIpIGl0ZW1zOiBhbnlbXTtcclxuXHRASW5wdXQoXCJkZWxheVwiKSBkZWxheTogbnVtYmVyID0gMzAwO1xyXG5cdEBJbnB1dChcInNlbGVjdEZpcnN0XCIpIHNlbGVjdEZpcnN0OiBib29sZWFuID0gdHJ1ZTtcclxuXHRASW5wdXQoXCJkaXNwbGF5VGV4dEZpZWxkTmFtZVwiKSBkaXNwbGF5VGV4dEZpZWxkTmFtZTogc3RyaW5nO1xyXG5cdEBJbnB1dChcImxpc3RIZWlnaHRcIikgbGlzdEhlaWdodCA9IFwiMzAwcHhcIjtcclxuXHRASW5wdXQoXCJsaXN0V2lkdGhcIikgbGlzdFdpZHRoOiBzdHJpbmcgPSAnMTAwJSc7XHJcblx0QElucHV0KFwiYWxsb3dGcmVlZm9ybVRleHRcIikgYWxsb3dGcmVlZm9ybVRleHQgPSB0cnVlO1xyXG5cdEBJbnB1dChcInNob3dOb0l0ZW1zRm91bmREaXNwbGF5XCIpIHNob3dOb0l0ZW1zRm91bmREaXNwbGF5ID0gdHJ1ZTtcclxuXHRAT3V0cHV0KFwib25SZWZyZXNoXCIpIG9uUmVmcmVzaDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHRAT3V0cHV0KFwib25TZWxlY3RcIikgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QE91dHB1dChcIm9uRnJlZWZvcm1UZXh0U2VsZWN0XCIpIG9uRnJlZWZvcm1UZXh0U2VsZWN0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuXHRAVmlld0NoaWxkKFwiYXV0b0NvbXBsZXRlUmVmXCIsIHsgc3RhdGljOiB0cnVlIH0pIGF1dG9Db21wbGV0ZVJlZjogRWxlbWVudFJlZjtcclxuXHRAQ29udGVudENoaWxkKFNsaWNrQXV0b0NvbXBsZXRlTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgbGlzdEl0ZW1UZW1wbGF0ZVJlZjogU2xpY2tBdXRvQ29tcGxldGVMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlO1xyXG5cclxuXHRmbkRvY3VtZW50Q2xpY2sgPSAoZSkgPT4gdGhpcy5kb2N1bWVudENsaWNrKGUpO1xyXG5cdGZuS2V5RG93biA9IChlKSA9PiB0aGlzLmtleURvd24oZSk7XHJcblxyXG5cdHByaXZhdGUgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcblx0cHJpdmF0ZSBkZWxheVRpbWVvdXQ6IE5vZGVKUy5UaW1lcjtcclxuXHRwcml2YXRlIHdhaXRGb3JJdGVtc0ludGVydmFsOiBOb2RlSlMuVGltZXI7XHJcblx0cHJpdmF0ZSBsYXN0SW5wdXRWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuXHRwcml2YXRlIGZvcmNlZENvbGxhcHNlID0gZmFsc2U7XHJcblxyXG5cdC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhlIHNjcm9sbCBhbmQgcmVzaXplIGV2ZW50cyBjYW4gYWRkIGFuZCByZW1vdmUgdGhlIGV2ZW50IHByb3Blcmx5LFxyXG5cdC8vIGFzIHdlbGwgYXMgZ2V0dGluZyB0aGUgY29ycmVjdCBFUzYgZnVuY3Rpb25cclxuXHRwcml2YXRlIGZuUmVwb3NpdGlvbiA9ICgpID0+IHRoaXMucmVwb3NpdGlvbigpO1xyXG5cclxuXHR1dWlkOiBzdHJpbmc7XHJcblx0bGVmdDogc3RyaW5nO1xyXG5cdHRvcDogc3RyaW5nO1xyXG5cdHdpZHRoOiBzdHJpbmc7XHJcblx0c2VsZWN0ZWRJbmRleDogbnVtYmVyID0gLTE7XHJcblx0c2hvd0F1dG9Db21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGF1dG9Db21wbGV0ZVZpc2libGl0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHRsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgc2xpY2tGdW5jdGlvbkxvY2tTZXJ2aWNlOiBTbGlja0Z1bmN0aW9uTG9ja1NlcnZpY2UpIHtcclxuXHRcdHRoaXMudXVpZCA9IFNsaWNrVXRpbHNTZXJ2aWNlLm5ld0d1aWQoKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIG5nT25Jbml0KCkge1xyXG5cdFx0YXdhaXQgU2xpY2tTbGVlcFNlcnZpY2Uuc2xlZXAoKTtcclxuXHRcdC8vIFJlbW92ZSB0aGlzIGZyb20gdGhlIGlubGluZSB2ZXJzaW9uIGFuZCBwdXQgaXQgb24gdGhlIGJvZHkgc28gdGhhdCBpdCBkb2Vzbid0IGhpZGUgYmVoaW5kIHRoZSBib3R0b21cclxuXHRcdC8vIG9mIGEgZGl2IHdoZW4gaXQgZXhwYW5kcyBiZXlvbmQgdGhlIGJvdHRvbS5cclxuXHRcdHRoaXMuYXV0b0NvbXBsZXRlUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlKHRoaXMuYXV0b0NvbXBsZXRlUmVmKTtcclxuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5hdXRvQ29tcGxldGVSZWYubmF0aXZlRWxlbWVudCk7XHJcblxyXG5cdFx0dGhpcy5pbnB1dFJlZi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmZuS2V5RG93bik7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdC8vIFNpbmNlIGFuZ3VsYXIgaGFzIG5vIHdheSB0byB1c2UgdGhlIHRoaXJkIHBhcmFtZXRlciwgSSdtIGRvaW5nIHRoaXMgaW4gcmF3IGpzXHJcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5mbkRvY3VtZW50Q2xpY2ssIHRydWUpO1xyXG5cdFx0dGhpcy5pbnB1dFJlZi5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmZuS2V5RG93bik7XHJcblxyXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlUaW1lb3V0KTtcclxuXHRcdHRoaXMuZGVsYXlUaW1lb3V0ID0gbnVsbDtcclxuXHJcblx0XHR0aGlzLmNvbGxhcHNlKCk7XHJcblxyXG5cdFx0Ly8gSXMgb2theSBpZiB0aGlzIGZhaWxzLiAgSXQganVzdCBtZWFucyBpdCB3YXMgYWxyZWFkeSByZW1vdmVkLlxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmF1dG9Db21wbGV0ZVJlZi5uYXRpdmVFbGVtZW50KTtcclxuXHRcdH1cclxuXHRcdGNhdGNoIHsgfVxyXG5cdH1cclxuXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1x0XHRcclxuXHRcdGlmIChjaGFuZ2VzLmFsbG93RnJlZWZvcm1UZXh0KSBcclxuXHRcdFx0dGhpcy5hbGxvd0ZyZWVmb3JtVGV4dCA9ICh0aGlzLmFsbG93RnJlZWZvcm1UZXh0LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJykgPyBmYWxzZSA6IHRydWU7XHRcdFxyXG5cclxuXHRcdGlmIChjaGFuZ2VzLnNob3dOb0l0ZW1zRm91bmREaXNwbGF5KVxyXG5cdFx0XHR0aGlzLnNob3dOb0l0ZW1zRm91bmREaXNwbGF5ID0gKHRoaXMuc2hvd05vSXRlbXNGb3VuZERpc3BsYXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnZmFsc2UnKSA/IGZhbHNlIDogdHJ1ZTtcdFx0XHJcblxyXG5cdFx0aWYgKGNoYW5nZXMuaXRlbXMpIHtcclxuXHRcdFx0aWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zaG93Tm9JdGVtc0ZvdW5kRGlzcGxheSA9PT0gZmFsc2UpXHJcblx0XHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBkb2N1bWVudENsaWNrKGU6IE1vdXNlRXZlbnQpIHtcclxuXHRcdGlmICghdGhpcy5leHBhbmRlZCB8fCAhZS50YXJnZXQpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRpZiAoU2xpY2tVdGlsc1NlcnZpY2UuY2hlY2tQYXJlbnRJZEV4aXN0cyg8SFRNTEVsZW1lbnQ+ZS50YXJnZXQsIFwic2xpY2stYXV0by1jb21wbGV0ZV9cIiArIHRoaXMudXVpZCkgPT09IGZhbHNlKVxyXG5cdFx0XHR0aGlzLmNvbGxhcHNlKCk7XHJcblx0fVxyXG5cclxuXHRvbkl0ZW1DbGljayhpbmRleCkge1xyXG5cdFx0dGhpcy5zZWxlY3RJdGVtKGluZGV4KTtcclxuXHRcdHRoaXMuY29sbGFwc2UoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMga2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0Ly8gYWx0XHJcblx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTgpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjbGVhckludGVydmFsKHRoaXMud2FpdEZvckl0ZW1zSW50ZXJ2YWwpO1xyXG5cdFx0dGhpcy5zbGlja0Z1bmN0aW9uTG9ja1NlcnZpY2UucmVsZWFzZShcIkFVVE9fQ09NUExFVEVfV0FJVF9GT1JfSVRFTVNcIik7XHJcblxyXG5cdFx0Ly8gSWYgd2UncmUganVzdCB0YWJiaW5nIHRocm91Z2gsIGRvbid0IGV2ZW4gZG8gYW55dGhpbmdcclxuXHRcdGlmICghdGhpcy5sYXN0SW5wdXRWYWx1ZSAmJiAoZXZlbnQua2V5Q29kZSA9PT0gOSB8fCBldmVudC5rZXlDb2RlID09PSAxMykpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRhd2FpdCBTbGlja1NsZWVwU2VydmljZS5zbGVlcCgpO1xyXG5cclxuXHRcdGlmICh0aGlzLmxhc3RJbnB1dFZhbHVlICE9PSB0aGlzLmlucHV0UmVmLnZhbHVlKSB7XHJcblx0XHRcdHRoaXMubGFzdElucHV0VmFsdWUgPSB0aGlzLmlucHV0UmVmLnZhbHVlO1xyXG5cdFx0XHR0aGlzLmZvcmNlZENvbGxhcHNlID0gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMubGFzdElucHV0VmFsdWUpIHtcclxuXHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZShudWxsKTtcclxuXHRcdFx0XHR0aGlzLmNvbGxhcHNlKCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLmRlbGF5VGltZW91dCk7XHJcblx0XHRcdHRoaXMuZGVsYXlUaW1lb3V0ID0gbnVsbDtcclxuXHRcdFx0aWYgKHRoaXMuaW5wdXRSZWYudmFsdWUgPT09ICcnKSB7XHJcblx0XHRcdFx0dGhpcy5pdGVtcyA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHQodGhpcy5zZWxlY3RGaXJzdCA9PT0gdHJ1ZSkgPyB0aGlzLnNlbGVjdGVkSW5kZXggPSAwIDogdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcblx0XHRcdFx0XHR0aGlzLmRlbGF5VGltZW91dCA9IG51bGw7XHJcblx0XHRcdFx0XHR0aGlzLml0ZW1zID0gbnVsbDtcclxuXHRcdFx0XHRcdHRoaXMuZXhwYW5kKCk7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlZnJlc2hJdGVtcyh0cnVlKTtcclxuXHRcdFx0XHR9LCB0aGlzLmRlbGF5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChldmVudC5rZXlDb2RlID09PSA5IHx8IGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XHJcblx0XHRcdGlmICh0aGlzLmRlbGF5VGltZW91dCAmJiB0aGlzLnNlbGVjdEZpcnN0KSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlUaW1lb3V0KTtcclxuXHRcdFx0XHR0aGlzLmRlbGF5VGltZW91dCA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5pdGVtcyA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RGaXJzdCA9PT0gdHJ1ZSAmJiAhdGhpcy5mb3JjZWRDb2xsYXBzZSkge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoSXRlbXMoZmFsc2UpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLml0ZW1zICYmICF0aGlzLmlucHV0UmVmLnZhbHVlICYmIHRoaXMub25TZWxlY3QpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5vblNlbGVjdC5lbWl0KG51bGwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RJdGVtKHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYWxsb3dGcmVlZm9ybVRleHQgJiYgdGhpcy5vbkZyZWVmb3JtVGV4dFNlbGVjdCkgXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5vbkZyZWVmb3JtVGV4dFNlbGVjdC5lbWl0KHRoaXMuaW5wdXRSZWYudmFsdWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmFsbG93RnJlZWZvcm1UZXh0ICYmIHRoaXMub25GcmVlZm9ybVRleHRTZWxlY3QpIFxyXG5cdFx0XHRcdFx0XHR0aGlzLm9uRnJlZWZvcm1UZXh0U2VsZWN0LmVtaXQodGhpcy5pbnB1dFJlZi52YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLmRlbGF5VGltZW91dCk7XHJcblx0XHRcdFx0aWYgKCF0aGlzLml0ZW1zICYmICF0aGlzLmlucHV0UmVmLnZhbHVlICYmIHRoaXMub25TZWxlY3QpIHtcclxuXHRcdFx0XHRcdHRoaXMub25TZWxlY3QuZW1pdChudWxsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy5leHBhbmRlZCAmJiAhdGhpcy5mb3JjZWRDb2xsYXBzZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RJdGVtKHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsb3dGcmVlZm9ybVRleHQgJiYgdGhpcy5vbkZyZWVmb3JtVGV4dFNlbGVjdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm9uRnJlZWZvcm1UZXh0U2VsZWN0LmVtaXQodGhpcy5pbnB1dFJlZi52YWx1ZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY29sbGFwc2UoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVzY1xyXG5cdFx0aWYgKGV2ZW50LndoaWNoID09PSAyNykge1xyXG5cdFx0XHR0aGlzLmZvcmNlZENvbGxhcHNlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFycm93dXBcclxuXHRcdGlmIChldmVudC53aGljaCA9PT0gMzgpIHtcclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gbnVsbCB8fCB0aGlzLnNlbGVjdGVkSW5kZXggPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA+IDApXHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4LS07XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXJyb3dkb3duXHJcblx0XHRpZiAoZXZlbnQud2hpY2ggPT09IDQwKSB7XHJcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBudWxsIHx8IHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmV4cGFuZGVkKSB7XHJcblx0XHRcdFx0dGhpcy5leHBhbmQoKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCAtIDEpXHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4Kys7XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcblxyXG5cdC8vIHRoaXMgaXMgdGhlIGluaXRpYWwgdmFsdWUgc2V0IHRvIHRoZSBjb21wb25lbnRcclxuXHR3cml0ZVZhbHVlKG9iajogYW55KSB7XHJcblx0XHRpZiAob2JqKSB7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZWdpc3RlcnMgJ2ZuJyB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBjaGFuZ2VzIGFyZSBtYWRlXHJcblx0Ly8gdGhpcyBpcyBob3cgd2UgZW1pdCB0aGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtXHJcblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG5cdH1cclxuXHJcblx0Ly8gbm90IHVzZWQsIHVzZWQgZm9yIHRvdWNoIGlucHV0XHJcblx0cmVnaXN0ZXJPblRvdWNoZWQoKSB7IH1cclxuXHJcblx0YXN5bmMgc2VsZWN0SXRlbShpbmRleDogbnVtYmVyKSB7XHJcblx0XHRpZiAoaW5kZXggPCAwIHx8ICF0aGlzLml0ZW1zIHx8IHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xyXG5cdFx0XHRpZiAodGhpcy5kaXNwbGF5VGV4dEZpZWxkTmFtZSkge1xyXG5cdFx0XHRcdGNvbnN0IHRleHQgPSBTbGlja1V0aWxzU2VydmljZS5nZXREZWVwT2JqZWN0KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmRpc3BsYXlUZXh0RmllbGROYW1lKTtcclxuXHRcdFx0XHRpZiAodGV4dCkge1xyXG5cdFx0XHRcdFx0dGhpcy5pbnB1dFJlZi52YWx1ZSA9IHRleHQ7XHJcblx0XHRcdFx0XHR0aGlzLmxhc3RJbnB1dFZhbHVlID0gdGhpcy5pbnB1dFJlZi52YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcblx0XHRpZiAodGhpcy5vblNlbGVjdClcclxuXHRcdFx0dGhpcy5vblNlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuXHRcdC8vIENhbGwgdG8gdXBkYXRlIHRoZSBtb2RlbCBmb3IgdGhlIHRleHRib3hcclxuXHRcdGF3YWl0IFNsaWNrU2xlZXBTZXJ2aWNlLnNsZWVwKCk7XHJcblx0XHRsZXQgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XHJcblx0XHRldnQuaW5pdEV2ZW50KCdpbnB1dCcsIHRydWUsIGZhbHNlKTtcclxuXHRcdHRoaXMuaW5wdXRSZWYuZGlzcGF0Y2hFdmVudChldnQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBleHBhbmQoKSB7XHJcblx0XHR0aGlzLnJlcG9zaXRpb24oKTtcclxuXHJcblx0XHQvLyBJZiB0aGUgZmxhZyB0byBzaG93IGl0ZW1zIGlzIGZhbHNlLCBkb24ndCBkaXNwbGF5IFwiTG9hZGluZy4uLlwiXHJcblx0XHRpZiAodGhpcy5zaG93Tm9JdGVtc0ZvdW5kRGlzcGxheSA9PT0gZmFsc2UgJiYgKCF0aGlzLml0ZW1zIHx8IHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSkge1xyXG5cdFx0XHR0aGlzLnNob3dBdXRvQ29tcGxldGUgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5hdXRvQ29tcGxldGVWaXNpYmxpdHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zaG93QXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuXHRcdHRoaXMuYXV0b0NvbXBsZXRlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XHJcblx0XHRhd2FpdCBTbGlja1NsZWVwU2VydmljZS5zbGVlcCgpO1xyXG5cdFx0dGhpcy5hdXRvQ29tcGxldGVWaXNpYmxpdHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5leHBhbmRlZCA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5pbnB1dFJlZi5jbGFzc0xpc3QuYWRkKFwic2xpY2stYXV0by1jb21wbGV0ZV9yZW1vdmUtYm90dG9tLWxlZnQtYm9yZGVyLXJhZGl1c1wiKTtcclxuXHRcdHRoaXMuaW5wdXRSZWYuY2xhc3NMaXN0LmFkZChcInNsaWNrLWF1dG8tY29tcGxldGVfcmVtb3ZlLWJvdHRvbS1yaWdodC1ib3JkZXItcmFkaXVzXCIpO1xyXG5cclxuXHRcdC8vIFRoaXMgaXMgbmVjZXNzYXJ5LCBvdGhlcndpc2UgYHRoaXNgIGluIHRoZSByZXBvc2l0aW9uIGZ1bmN0aW9uIHdpbGwgYmUgd2luZG93XHJcblx0XHQvLyBhbmQgbm90IHRoZSBjb21wb25lbnQuXHJcblx0XHQvLyBTaW5jZSBhbmd1bGFyIGhhcyBubyB3YXkgdG8gdXNlIHRoZSB0aGlyZCBwYXJhbWV0ZXIsIEknbSBkb2luZyB0aGlzIGluIHJhdyBqc1xyXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuZm5Eb2N1bWVudENsaWNrLCB0cnVlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29sbGFwc2UoKSB7XHJcblx0XHRsZXQgaW5wdXRHcm91cFByZXBlbmQgPSBTbGlja1V0aWxzU2VydmljZS5nZXRDbG9zZXN0U2libGluZyh0aGlzLmlucHV0UmVmLCBcImlucHV0LWdyb3VwLXByZXBlbmRcIik7XHJcblx0XHRpZiAoaW5wdXRHcm91cFByZXBlbmQpXHJcblx0XHRcdGlucHV0R3JvdXBQcmVwZW5kLmNsYXNzTGlzdC5yZW1vdmUoXCJzbGljay1hdXRvLWNvbXBsZXRlX3JlbW92ZS1ib3R0b20tbGVmdC1ib3JkZXItcmFkaXVzXCIpO1xyXG5cclxuXHRcdHRoaXMuaW5wdXRSZWYuY2xhc3NMaXN0LnJlbW92ZShcInNsaWNrLWF1dG8tY29tcGxldGVfcmVtb3ZlLWJvdHRvbS1sZWZ0LWJvcmRlci1yYWRpdXNcIik7XHJcblx0XHR0aGlzLmlucHV0UmVmLmNsYXNzTGlzdC5yZW1vdmUoXCJzbGljay1hdXRvLWNvbXBsZXRlX3JlbW92ZS1ib3R0b20tcmlnaHQtYm9yZGVyLXJhZGl1c1wiKTtcclxuXHJcblx0XHR0aGlzLmF1dG9Db21wbGV0ZVZpc2libGl0eSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5hdXRvQ29tcGxldGVSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcblxyXG5cdFx0Ly8gU2luY2UgYW5ndWxhciBoYXMgbm8gd2F5IHRvIHVzZSB0aGUgdGhpcmQgcGFyYW1ldGVyLCBJJ20gZG9pbmcgdGhpcyBpbiByYXcganNcclxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmZuRG9jdW1lbnRDbGljaywgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlcG9zaXRpb24oKSB7XHJcblx0XHRsZXQgcmVjdCA9IHRoaXMuaW5wdXRSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRsZXQgaW5wdXRMZWZ0ID0gcmVjdC5sZWZ0O1xyXG5cdFx0bGV0IGlucHV0VG9wID0gcmVjdC50b3A7XHJcblx0XHRsZXQgaW5wdXRIZWlnaHQgPSB0aGlzLmlucHV0UmVmLm9mZnNldEhlaWdodDtcclxuXHRcdGxldCBpbnB1dFdpZHRoID0gdGhpcy5pbnB1dFJlZi5vZmZzZXRXaWR0aDtcclxuXHJcblx0XHRsZXQgaW5wdXRHcm91cFByZXBlbmQgPSBTbGlja1V0aWxzU2VydmljZS5nZXRDbG9zZXN0U2libGluZyh0aGlzLmlucHV0UmVmLCBcImlucHV0LWdyb3VwLXByZXBlbmRcIik7XHJcblx0XHRpZiAoaW5wdXRHcm91cFByZXBlbmQpIHtcclxuXHRcdFx0aW5wdXRMZWZ0ID0gaW5wdXRHcm91cFByZXBlbmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxuXHRcdFx0aW5wdXRXaWR0aCA9IGlucHV0V2lkdGggKz0gaW5wdXRHcm91cFByZXBlbmQub2Zmc2V0V2lkdGg7XHJcblx0XHRcdGlucHV0R3JvdXBQcmVwZW5kLmNsYXNzTGlzdC5hZGQoXCJzbGljay1hdXRvLWNvbXBsZXRlX3JlbW92ZS1ib3R0b20tbGVmdC1ib3JkZXItcmFkaXVzXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubGVmdCA9IGlucHV0TGVmdCArIFwicHhcIjtcclxuXHRcdHRoaXMudG9wID0gKGlucHV0VG9wICsgaW5wdXRIZWlnaHQgKyAxKSArIFwicHhcIjtcclxuXHRcdGlmICh0aGlzLmxpc3RXaWR0aCA9PT0gJzEwMCUnKVxyXG5cdFx0XHR0aGlzLndpZHRoID0gaW5wdXRXaWR0aCArIFwicHhcIjtcclxuXHRcdGVsc2UgaWYgKHRoaXMubGlzdFdpZHRoID09PSAnYXV0bycpXHJcblx0XHRcdHRoaXMud2lkdGggPSBcImF1dG9cIjtcclxuXHRcdGVsc2VcclxuXHRcdFx0dGhpcy53aWR0aCA9IHRoaXMubGlzdFdpZHRoO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyByZWZyZXNoSXRlbXMoZXhwYW5kOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuXHRcdFx0YXdhaXQgdGhpcy5zbGlja0Z1bmN0aW9uTG9ja1NlcnZpY2UubG9jayhcIkFVVE9fQ09NUExFVEVfV0FJVF9GT1JfSVRFTVNcIik7XHJcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy53YWl0Rm9ySXRlbXNJbnRlcnZhbCk7XHJcblx0XHRcdHRoaXMuaXRlbXMgPSBudWxsO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLm9uUmVmcmVzaCB8fCAhdGhpcy5pbnB1dFJlZi52YWx1ZSkge1xyXG5cdFx0XHRcdHRoaXMuaXRlbXMgPSBbXTtcclxuXHRcdFx0XHR0aGlzLnNsaWNrRnVuY3Rpb25Mb2NrU2VydmljZS5yZWxlYXNlKFwiQVVUT19DT01QTEVURV9XQUlUX0ZPUl9JVEVNU1wiKTtcclxuXHRcdFx0XHRyZXNvbHZlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHRcdFx0XHRpZiAodGhpcy5zaG93Tm9JdGVtc0ZvdW5kRGlzcGxheSA9PT0gZmFsc2UpXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxhcHNlKCk7XHJcblx0XHRcdFx0Ly8gQ2FsbCB0aGUgdXNlcnMgcmVmcmVzaCBtZXRob2QgdG8gZ2V0IGEgZnJlc2ggbGlzdCBvZiBpdGVtc1xyXG5cdFx0XHRcdHRoaXMub25SZWZyZXNoLmVtaXQodGhpcy5pbnB1dFJlZi52YWx1ZSk7XHJcblxyXG5cdFx0XHRcdC8vIFdhaXQgZm9yIHRoZSBsaXN0IHRvIHJlZnJlc2hcclxuXHRcdFx0XHRsZXQgdGltZW91dENoZWNrID0gMTAwMDtcclxuXHRcdFx0XHR0aGlzLndhaXRGb3JJdGVtc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG5cdFx0XHRcdFx0Ly8gSWYgd2UndmUgdGltZWRvdXQsIGdvdCBhIHJlc3BvbnNlIG9yIHRoZXkgc3RhcnRlZCB0eXBpbmcgc29tZXRoaW5nIGVsc2UsIHN0b3AgdGhlIGludGVydmFsXHJcblx0XHRcdFx0XHRpZiAodGltZW91dENoZWNrIDw9IDAgfHwgdGhpcy5pdGVtcykge1xyXG5cdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRoaXMud2FpdEZvckl0ZW1zSW50ZXJ2YWwpO1xyXG5cdFx0XHRcdFx0XHRpZiAodGltZW91dENoZWNrIDw9IDApIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGxpc3QgaW4gYXV0byBjb21wbGV0ZVwiKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLml0ZW1zID0gW107XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuc2hvd05vSXRlbXNGb3VuZERpc3BsYXkgPT09IGZhbHNlKVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZSgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5kKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZXhwYW5kKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2xpY2tGdW5jdGlvbkxvY2tTZXJ2aWNlLnJlbGVhc2UoXCJBVVRPX0NPTVBMRVRFX1dBSVRfRk9SX0lURU1TXCIpO1xyXG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGltZW91dENoZWNrLS07XHJcblx0XHRcdFx0fSwgMTAwKTtcclxuXHRcdFx0fVxyXG5cdFx0fSlcclxuXHR9XHJcblxyXG59Il19
@@ -1,19 +0,0 @@
1
- import { NgModule } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { FormsModule } from '@angular/forms';
4
- import { SlickAutoCompleteComponent } from "./slick-auto-complete.component";
5
- import { SlickAutoCompleteListItemTemplateDirective } from "./slick-auto-complete-list-item-template.directive";
6
- import { SlickFunctionLockService } from "../utils/slick-function-lock.service";
7
- export class SlickAutoCompleteModule {
8
- }
9
- SlickAutoCompleteModule.decorators = [
10
- { type: NgModule, args: [{
11
- imports: [CommonModule, FormsModule],
12
- declarations: [SlickAutoCompleteComponent, SlickAutoCompleteListItemTemplateDirective],
13
- exports: [SlickAutoCompleteComponent, SlickAutoCompleteListItemTemplateDirective],
14
- providers: [SlickFunctionLockService]
15
- },] }
16
- ];
17
- export { SlickAutoCompleteComponent };
18
- export { SlickAutoCompleteListItemTemplateDirective };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stYXV0by1jb21wbGV0ZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9zbGljay1hdXRvLWNvbXBsZXRlL3NsaWNrLWF1dG8tY29tcGxldGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQVFoRixNQUFNLE9BQU8sdUJBQXVCOzs7WUFObkMsUUFBUSxTQUFDO2dCQUNULE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7Z0JBQ3BDLFlBQVksRUFBRSxDQUFDLDBCQUEwQixFQUFFLDBDQUEwQyxDQUFDO2dCQUN0RixPQUFPLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSwwQ0FBMEMsQ0FBQztnQkFDakYsU0FBUyxFQUFFLENBQUMsd0JBQXdCLENBQUM7YUFDckM7O0FBR0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLENBQUE7QUFDckMsT0FBTyxFQUFFLDBDQUEwQyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNsaWNrQXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSBcIi4vc2xpY2stYXV0by1jb21wbGV0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgU2xpY2tBdXRvQ29tcGxldGVMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSBcIi4vc2xpY2stYXV0by1jb21wbGV0ZS1saXN0LWl0ZW0tdGVtcGxhdGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFNsaWNrRnVuY3Rpb25Mb2NrU2VydmljZSB9IGZyb20gXCIuLi91dGlscy9zbGljay1mdW5jdGlvbi1sb2NrLnNlcnZpY2VcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG5cdGRlY2xhcmF0aW9uczogW1NsaWNrQXV0b0NvbXBsZXRlQ29tcG9uZW50LCBTbGlja0F1dG9Db21wbGV0ZUxpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmVdLFxyXG5cdGV4cG9ydHM6IFtTbGlja0F1dG9Db21wbGV0ZUNvbXBvbmVudCwgU2xpY2tBdXRvQ29tcGxldGVMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlXSxcclxuXHRwcm92aWRlcnM6IFtTbGlja0Z1bmN0aW9uTG9ja1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbGlja0F1dG9Db21wbGV0ZU1vZHVsZSB7IH1cclxuXHJcbmV4cG9ydCB7IFNsaWNrQXV0b0NvbXBsZXRlQ29tcG9uZW50IH1cclxuZXhwb3J0IHsgU2xpY2tBdXRvQ29tcGxldGVMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlIH0iXX0=