@colijnit/corecomponents_v12 12.2.26 → 12.2.27

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 (438) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +13684 -13680
  2. package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
  3. package/colijnit-corecomponents_v12.d.ts +43 -43
  4. package/colijnit-corecomponents_v12.metadata.json +1 -1
  5. package/esm2015/colijnit-corecomponents_v12.js +43 -43
  6. package/esm2015/lib/components/article-tile/article-tile.component.js +49 -49
  7. package/esm2015/lib/components/article-tile/article-tile.module.js +34 -34
  8. package/esm2015/lib/components/base/base-input.component.js +833 -833
  9. package/esm2015/lib/components/base/base.module.js +21 -21
  10. package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +85 -85
  11. package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +20 -20
  12. package/esm2015/lib/components/base/dialog-base.component.js +5 -5
  13. package/esm2015/lib/components/base-input-date-picker/base-input-date-picker.directive.js +24 -24
  14. package/esm2015/lib/components/button/button.component.js +73 -73
  15. package/esm2015/lib/components/button/button.module.js +18 -18
  16. package/esm2015/lib/components/calendar/calendar-template.component.js +281 -281
  17. package/esm2015/lib/components/calendar/calendar.component.js +32 -32
  18. package/esm2015/lib/components/calendar/calendar.module.js +27 -27
  19. package/esm2015/lib/components/card/card.component.js +50 -50
  20. package/esm2015/lib/components/card/card.module.js +34 -34
  21. package/esm2015/lib/components/carousel/carousel.component.js +109 -109
  22. package/esm2015/lib/components/carousel/carousel.module.js +31 -31
  23. package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +293 -293
  24. package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +18 -18
  25. package/esm2015/lib/components/carousel-3d/carouselItem.js +53 -53
  26. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.component.js +72 -72
  27. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.module.js +18 -18
  28. package/esm2015/lib/components/co-dialog/co-dialog.component.js +91 -91
  29. package/esm2015/lib/components/co-dialog/co-dialog.module.js +18 -18
  30. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +35 -35
  31. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +16 -16
  32. package/esm2015/lib/components/collapsible/collapsible.component.js +67 -67
  33. package/esm2015/lib/components/collapsible/collapsible.module.js +18 -18
  34. package/esm2015/lib/components/color-picker/color-picker.component.js +33 -33
  35. package/esm2015/lib/components/color-picker/color-picker.module.js +20 -20
  36. package/esm2015/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.js +46 -46
  37. package/esm2015/lib/components/core-dialog/core-dialog.module.js +38 -38
  38. package/esm2015/lib/components/core-dialog/core-dialog.service.js +66 -66
  39. package/esm2015/lib/components/core-dialog/core-dynamic-component.service.js +92 -92
  40. package/esm2015/lib/components/double-calendar/double-calendar.component.js +62 -62
  41. package/esm2015/lib/components/double-calendar/double-calendar.module.js +24 -24
  42. package/esm2015/lib/components/filter-item/filter-item-viewmodel.js +12 -12
  43. package/esm2015/lib/components/filter-item/filter-item.component.js +496 -496
  44. package/esm2015/lib/components/filter-item/filter-item.module.js +42 -42
  45. package/esm2015/lib/components/filter-item/filter-viewmodel.js +10 -10
  46. package/esm2015/lib/components/form/form.component.js +181 -181
  47. package/esm2015/lib/components/form/form.module.js +22 -22
  48. package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +48 -48
  49. package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +22 -22
  50. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.component.js +23 -23
  51. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.module.js +18 -18
  52. package/esm2015/lib/components/icon/icon-cache.service.js +51 -51
  53. package/esm2015/lib/components/icon/icon.component.js +47 -47
  54. package/esm2015/lib/components/icon/icon.module.js +24 -24
  55. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.component.js +56 -56
  56. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.module.js +22 -22
  57. package/esm2015/lib/components/image/image.component.js +31 -31
  58. package/esm2015/lib/components/image/image.module.js +13 -13
  59. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +71 -71
  60. package/esm2015/lib/components/input-checkbox/input-checkbox.module.js +18 -18
  61. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +74 -74
  62. package/esm2015/lib/components/input-date-picker/input-date-picker.module.js +25 -25
  63. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +107 -107
  64. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.module.js +26 -26
  65. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +285 -285
  66. package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +22 -22
  67. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +77 -77
  68. package/esm2015/lib/components/input-radio-button/input-radio-button.module.js +18 -18
  69. package/esm2015/lib/components/input-scanner/bar-code-scanner.js +22 -22
  70. package/esm2015/lib/components/input-scanner/input-scanner.component.js +56 -56
  71. package/esm2015/lib/components/input-scanner/input-scanner.module.js +20 -20
  72. package/esm2015/lib/components/input-scanner/scanner.service.js +27 -27
  73. package/esm2015/lib/components/input-search/input-search.component.js +67 -63
  74. package/esm2015/lib/components/input-search/input-search.module.js +20 -20
  75. package/esm2015/lib/components/input-text/input-text.component.js +192 -192
  76. package/esm2015/lib/components/input-text/input-text.module.js +32 -32
  77. package/esm2015/lib/components/input-textarea/input-textarea.component.js +55 -55
  78. package/esm2015/lib/components/input-textarea/input-textarea.module.js +26 -26
  79. package/esm2015/lib/components/level-indicator/level-indicator-level.enum.js +6 -6
  80. package/esm2015/lib/components/level-indicator/level-indicator.component.js +29 -29
  81. package/esm2015/lib/components/level-indicator/level-indicator.module.js +14 -14
  82. package/esm2015/lib/components/list-of-values/list-of-values-multiselect-popup.component.js +87 -87
  83. package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +218 -218
  84. package/esm2015/lib/components/list-of-values/list-of-values.component.js +199 -199
  85. package/esm2015/lib/components/list-of-values/list-of-values.module.js +37 -37
  86. package/esm2015/lib/components/loader/loader.component.js +16 -16
  87. package/esm2015/lib/components/loader/loader.module.js +18 -18
  88. package/esm2015/lib/components/pagination/paginate.pipe.js +98 -98
  89. package/esm2015/lib/components/pagination/pagination-instance.js +1 -1
  90. package/esm2015/lib/components/pagination/pagination.component.js +107 -107
  91. package/esm2015/lib/components/pagination/pagination.module.js +27 -27
  92. package/esm2015/lib/components/pagination/pagination.service.js +87 -87
  93. package/esm2015/lib/components/pagination-bar/pagination-bar.component.js +136 -136
  94. package/esm2015/lib/components/pagination-bar/pagination-bar.module.js +18 -18
  95. package/esm2015/lib/components/popup/const/popup-window-token.js +2 -2
  96. package/esm2015/lib/components/popup/interface/popup-button.js +7 -7
  97. package/esm2015/lib/components/popup/interface/popup-close-event.js +1 -1
  98. package/esm2015/lib/components/popup/interface/popup-settings.js +41 -41
  99. package/esm2015/lib/components/popup/interface/popup.js +1 -1
  100. package/esm2015/lib/components/popup/model/popup-button-globals.js +10 -10
  101. package/esm2015/lib/components/popup/model/popup-window.js +37 -37
  102. package/esm2015/lib/components/popup/popup-buttons.component.js +42 -42
  103. package/esm2015/lib/components/popup/popup-message-display.component.js +37 -37
  104. package/esm2015/lib/components/popup/popup-window-shell.component.js +141 -141
  105. package/esm2015/lib/components/popup/popup.module.js +48 -48
  106. package/esm2015/lib/components/popup/service/popup-shower.service.js +89 -89
  107. package/esm2015/lib/components/popup/service/prompt.service.js +126 -126
  108. package/esm2015/lib/components/popup/text-input-popup.component.js +33 -33
  109. package/esm2015/lib/components/responsive-text/responsive-text.component.js +17 -17
  110. package/esm2015/lib/components/responsive-text/responsive-text.module.js +18 -18
  111. package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +163 -163
  112. package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +141 -141
  113. package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +110 -110
  114. package/esm2015/lib/components/simple-grid/simple-grid.component.js +378 -378
  115. package/esm2015/lib/components/simple-grid/simple-grid.module.js +40 -40
  116. package/esm2015/lib/components/tile/tile.component.js +44 -44
  117. package/esm2015/lib/components/tile/tile.module.js +22 -22
  118. package/esm2015/lib/components/tile-select/tile-select.component.js +26 -26
  119. package/esm2015/lib/components/tile-select/tile-select.module.js +20 -20
  120. package/esm2015/lib/components/tooltip/tooltip.component.js +74 -74
  121. package/esm2015/lib/components/tooltip/tooltip.module.js +18 -18
  122. package/esm2015/lib/components/validation-error/validation-error.component.js +30 -30
  123. package/esm2015/lib/components/validation-error/validation-error.module.js +24 -24
  124. package/esm2015/lib/components/view-mode-buttons/content-view-mode.enum.js +10 -10
  125. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.component.js +41 -41
  126. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.module.js +20 -20
  127. package/esm2015/lib/core/constant/default-upper-bound-for-range-components.js +3 -3
  128. package/esm2015/lib/core/constant/java-max-int.js +1 -1
  129. package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +44 -44
  130. package/esm2015/lib/core/decorator/input-boolean.decorator.js +33 -33
  131. package/esm2015/lib/core/enum/co-direction.js +8 -8
  132. package/esm2015/lib/core/enum/co-document-image-display-kind.enum.js +6 -6
  133. package/esm2015/lib/core/enum/co-document-type.enum.js +10 -10
  134. package/esm2015/lib/core/enum/co-orientation.js +16 -16
  135. package/esm2015/lib/core/enum/core-components-icon.enum.js +299 -299
  136. package/esm2015/lib/core/enum/file-type-internal.enum.js +16 -16
  137. package/esm2015/lib/core/enum/file-type.enum.js +10 -10
  138. package/esm2015/lib/core/enum/filterItem-mode.enum.js +42 -42
  139. package/esm2015/lib/core/enum/input-number-picker-show-mode.enum.js +7 -7
  140. package/esm2015/lib/core/enum/keyboard-code.enum.js +73 -73
  141. package/esm2015/lib/core/enum/keyboard-key.enum.js +75 -75
  142. package/esm2015/lib/core/enum/object-right-type.enum.js +6 -6
  143. package/esm2015/lib/core/enum/popup-button-type.enum.js +11 -11
  144. package/esm2015/lib/core/enum/popup-type.enum.js +10 -10
  145. package/esm2015/lib/core/enum/table-name.enum.js +80 -80
  146. package/esm2015/lib/core/function/any-nill.function.js +5 -5
  147. package/esm2015/lib/core/function/is-nill.function.js +4 -4
  148. package/esm2015/lib/core/function/none-nill.function.js +16 -16
  149. package/esm2015/lib/core/function/not-nill.function.js +4 -4
  150. package/esm2015/lib/core/model/bounds-constrained-number-value.js +170 -170
  151. package/esm2015/lib/core/model/check-precision-and-scale-result.js +1 -1
  152. package/esm2015/lib/core/model/check-within-stepped-bounds-result.js +1 -1
  153. package/esm2015/lib/core/model/co-document-right.bo.js +2 -2
  154. package/esm2015/lib/core/model/co-document.bo.js +120 -120
  155. package/esm2015/lib/core/model/core-components-icon-svg.js +298 -298
  156. package/esm2015/lib/core/model/element-position.js +9 -9
  157. package/esm2015/lib/core/model/event/string-prompt-result-event.js +7 -7
  158. package/esm2015/lib/core/service/form-input-user-change-listener.service.js +24 -24
  159. package/esm2015/lib/core/service/form-master.service.js +101 -101
  160. package/esm2015/lib/core/service/ng-zone-wrapper.service.js +19 -19
  161. package/esm2015/lib/core/utils/array-utils.js +263 -263
  162. package/esm2015/lib/core/utils/browser-utils.js +99 -99
  163. package/esm2015/lib/core/utils/direction-enum-utils.js +13 -13
  164. package/esm2015/lib/core/utils/event-utils.js +52 -52
  165. package/esm2015/lib/core/utils/file-utils.js +266 -266
  166. package/esm2015/lib/core/utils/number-utils.js +308 -308
  167. package/esm2015/lib/core/utils/object-utils.js +185 -185
  168. package/esm2015/lib/core/utils/string-utils.js +93 -93
  169. package/esm2015/lib/core/validator/email.validator.js +5 -5
  170. package/esm2015/lib/core/validator/equal.validator.js +10 -10
  171. package/esm2015/lib/core/validator/max-string-length.validator.js +9 -9
  172. package/esm2015/lib/core/validator/password.validator.js +30 -30
  173. package/esm2015/lib/core/validator/precision-scale.validator.js +10 -10
  174. package/esm2015/lib/core/validator/required.validator.js +4 -4
  175. package/esm2015/lib/directives/clickoutside/click-outside-master.service.js +56 -56
  176. package/esm2015/lib/directives/clickoutside/click-outside.directive.js +70 -70
  177. package/esm2015/lib/directives/clickoutside/clickoutside.module.js +18 -18
  178. package/esm2015/lib/directives/observe-visibility/observe-visibility.directive.js +52 -52
  179. package/esm2015/lib/directives/observe-visibility/observe-visibility.module.js +14 -14
  180. package/esm2015/lib/directives/overlay/overlay-parent.directive.js +18 -18
  181. package/esm2015/lib/directives/overlay/overlay.directive.js +160 -160
  182. package/esm2015/lib/directives/overlay/overlay.module.js +17 -17
  183. package/esm2015/lib/directives/ripple/ripple-ref.js +25 -25
  184. package/esm2015/lib/directives/ripple/ripple-renderer.js +159 -159
  185. package/esm2015/lib/directives/ripple/ripple.directive.js +79 -79
  186. package/esm2015/lib/directives/ripple/ripple.module.js +23 -23
  187. package/esm2015/lib/directives/ripple/scroll-dispatcher.service.js +107 -107
  188. package/esm2015/lib/directives/ripple/scrollable.directive.js +39 -39
  189. package/esm2015/lib/directives/ripple/viewport-ruler.service.js +72 -72
  190. package/esm2015/lib/directives/screen-configuration/screen-configuration.directive.js +157 -157
  191. package/esm2015/lib/directives/screen-configuration/screen-configuration.module.js +18 -18
  192. package/esm2015/lib/directives/stopclick/stop-click.directive.js +37 -37
  193. package/esm2015/lib/directives/stopclick/stop-click.module.js +14 -14
  194. package/esm2015/lib/directives/template-wrapper/template-wrapper.directive.js +67 -67
  195. package/esm2015/lib/directives/template-wrapper/template-wrapper.module.js +14 -14
  196. package/esm2015/lib/directives/tooltip/tooltip-directive.module.js +18 -18
  197. package/esm2015/lib/directives/tooltip/tooltip.directive.js +77 -77
  198. package/esm2015/lib/interfaces/dialog-response.interface.js +1 -1
  199. package/esm2015/lib/interfaces/scanner-input.interface.js +1 -1
  200. package/esm2015/lib/interfaces/screen-config-adapter-component-interface-name.js +3 -3
  201. package/esm2015/lib/interfaces/screen-config-adapter.component.interface.js +1 -1
  202. package/esm2015/lib/model/enum/app-button-type.enum.js +10 -10
  203. package/esm2015/lib/model/enum/app-popup-type.enum.js +7 -7
  204. package/esm2015/lib/pipes/append.pipe.js +16 -16
  205. package/esm2015/lib/pipes/append.pipe.module.js +14 -14
  206. package/esm2015/lib/pipes/filter.pipe.js +15 -15
  207. package/esm2015/lib/pipes/filter.pipe.module.js +14 -14
  208. package/esm2015/lib/pipes/prepend.pipe.js +16 -16
  209. package/esm2015/lib/pipes/prepend.pipe.module.js +14 -14
  210. package/esm2015/lib/pipes/price-display-pipe.module.js +14 -14
  211. package/esm2015/lib/pipes/price-display.pipe.js +19 -19
  212. package/esm2015/lib/service/base-module-screen-config.service.js +204 -204
  213. package/esm2015/lib/service/base-module.service.js +41 -41
  214. package/esm2015/lib/service/color-sequence.service.js +22 -22
  215. package/esm2015/lib/service/overlay.service.js +72 -72
  216. package/esm2015/lib/translation/core-components-translation.module.js +28 -28
  217. package/esm2015/lib/translation/core-components-translation.service.js +16 -16
  218. package/esm2015/lib/translation/core-dictionary.service.js +28 -28
  219. package/esm2015/lib/translation/core-localize.pipe.js +25 -25
  220. package/esm2015/public-api.js +129 -129
  221. package/fesm2015/colijnit-corecomponents_v12.js +12090 -12086
  222. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  223. package/lib/components/article-tile/article-tile.component.d.ts +22 -22
  224. package/lib/components/article-tile/article-tile.module.d.ts +2 -2
  225. package/lib/components/base/base-input.component.d.ts +182 -182
  226. package/lib/components/base/base.module.d.ts +2 -2
  227. package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +21 -21
  228. package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +2 -2
  229. package/lib/components/base/dialog-base.component.d.ts +4 -4
  230. package/lib/components/base-input-date-picker/base-input-date-picker.directive.d.ts +15 -15
  231. package/lib/components/button/button.component.d.ts +29 -29
  232. package/lib/components/button/button.module.d.ts +2 -2
  233. package/lib/components/calendar/calendar-template.component.d.ts +60 -60
  234. package/lib/components/calendar/calendar.component.d.ts +13 -13
  235. package/lib/components/calendar/calendar.module.d.ts +2 -2
  236. package/lib/components/card/card.component.d.ts +23 -23
  237. package/lib/components/card/card.module.d.ts +2 -2
  238. package/lib/components/carousel/carousel.component.d.ts +23 -23
  239. package/lib/components/carousel/carousel.module.d.ts +6 -6
  240. package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -55
  241. package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -2
  242. package/lib/components/carousel-3d/carouselItem.d.ts +13 -13
  243. package/lib/components/checkmark-overlay/checkmark-overlay.component.d.ts +17 -17
  244. package/lib/components/checkmark-overlay/checkmark-overlay.module.d.ts +2 -2
  245. package/lib/components/co-dialog/co-dialog.component.d.ts +23 -23
  246. package/lib/components/co-dialog/co-dialog.module.d.ts +2 -2
  247. package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +9 -9
  248. package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +2 -2
  249. package/lib/components/collapsible/collapsible.component.d.ts +22 -22
  250. package/lib/components/collapsible/collapsible.module.d.ts +2 -2
  251. package/lib/components/color-picker/color-picker.component.d.ts +6 -6
  252. package/lib/components/color-picker/color-picker.module.d.ts +2 -2
  253. package/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +20 -20
  254. package/lib/components/core-dialog/core-dialog.module.d.ts +4 -4
  255. package/lib/components/core-dialog/core-dialog.service.d.ts +15 -15
  256. package/lib/components/core-dialog/core-dynamic-component.service.d.ts +12 -12
  257. package/lib/components/double-calendar/double-calendar.component.d.ts +18 -18
  258. package/lib/components/double-calendar/double-calendar.module.d.ts +2 -2
  259. package/lib/components/filter-item/filter-item-viewmodel.d.ts +9 -9
  260. package/lib/components/filter-item/filter-item.component.d.ts +80 -80
  261. package/lib/components/filter-item/filter-item.module.d.ts +2 -2
  262. package/lib/components/filter-item/filter-viewmodel.d.ts +8 -8
  263. package/lib/components/form/form.component.d.ts +39 -39
  264. package/lib/components/form/form.module.d.ts +2 -2
  265. package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +19 -19
  266. package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +2 -2
  267. package/lib/components/grid-toolbar-button/grid-toolbar-button.component.d.ts +8 -8
  268. package/lib/components/grid-toolbar-button/grid-toolbar-button.module.d.ts +2 -2
  269. package/lib/components/icon/icon-cache.service.d.ts +20 -20
  270. package/lib/components/icon/icon.component.d.ts +17 -17
  271. package/lib/components/icon/icon.module.d.ts +2 -2
  272. package/lib/components/icon-collapse-handle/icon-collapse-handle.component.d.ts +21 -21
  273. package/lib/components/icon-collapse-handle/icon-collapse-handle.module.d.ts +2 -2
  274. package/lib/components/image/image.component.d.ts +20 -20
  275. package/lib/components/image/image.module.d.ts +2 -2
  276. package/lib/components/input-checkbox/input-checkbox.component.d.ts +24 -24
  277. package/lib/components/input-checkbox/input-checkbox.module.d.ts +2 -2
  278. package/lib/components/input-date-picker/input-date-picker.component.d.ts +12 -12
  279. package/lib/components/input-date-picker/input-date-picker.module.d.ts +2 -2
  280. package/lib/components/input-date-range-picker/input-date-range-picker.component.d.ts +20 -20
  281. package/lib/components/input-date-range-picker/input-date-range-picker.module.d.ts +2 -2
  282. package/lib/components/input-number-picker/input-number-picker.component.d.ts +73 -73
  283. package/lib/components/input-number-picker/input-number-picker.module.d.ts +2 -2
  284. package/lib/components/input-radio-button/input-radio-button.component.d.ts +19 -19
  285. package/lib/components/input-radio-button/input-radio-button.module.d.ts +2 -2
  286. package/lib/components/input-scanner/bar-code-scanner.d.ts +7 -7
  287. package/lib/components/input-scanner/input-scanner.component.d.ts +24 -24
  288. package/lib/components/input-scanner/input-scanner.module.d.ts +2 -2
  289. package/lib/components/input-scanner/scanner.service.d.ts +11 -11
  290. package/lib/components/input-search/input-search.component.d.ts +20 -19
  291. package/lib/components/input-search/input-search.module.d.ts +2 -2
  292. package/lib/components/input-text/input-text.component.d.ts +65 -65
  293. package/lib/components/input-text/input-text.module.d.ts +2 -2
  294. package/lib/components/input-textarea/input-textarea.component.d.ts +19 -19
  295. package/lib/components/input-textarea/input-textarea.module.d.ts +2 -2
  296. package/lib/components/level-indicator/level-indicator-level.enum.d.ts +5 -5
  297. package/lib/components/level-indicator/level-indicator.component.d.ts +10 -10
  298. package/lib/components/level-indicator/level-indicator.module.d.ts +2 -2
  299. package/lib/components/list-of-values/list-of-values-multiselect-popup.component.d.ts +25 -25
  300. package/lib/components/list-of-values/list-of-values-popup.component.d.ts +47 -47
  301. package/lib/components/list-of-values/list-of-values.component.d.ts +37 -37
  302. package/lib/components/list-of-values/list-of-values.module.d.ts +2 -2
  303. package/lib/components/loader/loader.component.d.ts +3 -3
  304. package/lib/components/loader/loader.module.d.ts +2 -2
  305. package/lib/components/pagination/paginate.pipe.d.ts +15 -15
  306. package/lib/components/pagination/pagination-instance.d.ts +14 -14
  307. package/lib/components/pagination/pagination.component.d.ts +38 -38
  308. package/lib/components/pagination/pagination.module.d.ts +2 -2
  309. package/lib/components/pagination/pagination.service.d.ts +24 -24
  310. package/lib/components/pagination-bar/pagination-bar.component.d.ts +33 -33
  311. package/lib/components/pagination-bar/pagination-bar.module.d.ts +2 -2
  312. package/lib/components/popup/const/popup-window-token.d.ts +3 -3
  313. package/lib/components/popup/interface/popup-button.d.ts +8 -8
  314. package/lib/components/popup/interface/popup-close-event.d.ts +5 -5
  315. package/lib/components/popup/interface/popup-settings.d.ts +21 -21
  316. package/lib/components/popup/interface/popup.d.ts +9 -9
  317. package/lib/components/popup/model/popup-button-globals.d.ts +9 -9
  318. package/lib/components/popup/model/popup-window.d.ts +21 -21
  319. package/lib/components/popup/popup-buttons.component.d.ts +13 -13
  320. package/lib/components/popup/popup-message-display.component.d.ts +12 -12
  321. package/lib/components/popup/popup-window-shell.component.d.ts +42 -42
  322. package/lib/components/popup/popup.module.d.ts +4 -4
  323. package/lib/components/popup/service/popup-shower.service.d.ts +17 -17
  324. package/lib/components/popup/service/prompt.service.d.ts +17 -17
  325. package/lib/components/popup/text-input-popup.component.d.ts +12 -12
  326. package/lib/components/responsive-text/responsive-text.component.d.ts +4 -4
  327. package/lib/components/responsive-text/responsive-text.module.d.ts +2 -2
  328. package/lib/components/simple-grid/base-simple-grid.component.d.ts +52 -52
  329. package/lib/components/simple-grid/simple-grid-cell.component.d.ts +30 -30
  330. package/lib/components/simple-grid/simple-grid-column.directive.d.ts +42 -42
  331. package/lib/components/simple-grid/simple-grid.component.d.ts +64 -64
  332. package/lib/components/simple-grid/simple-grid.module.d.ts +2 -2
  333. package/lib/components/tile/tile.component.d.ts +16 -16
  334. package/lib/components/tile/tile.module.d.ts +2 -2
  335. package/lib/components/tile-select/tile-select.component.d.ts +8 -8
  336. package/lib/components/tile-select/tile-select.module.d.ts +2 -2
  337. package/lib/components/tooltip/tooltip.component.d.ts +18 -18
  338. package/lib/components/tooltip/tooltip.module.d.ts +2 -2
  339. package/lib/components/validation-error/validation-error.component.d.ts +12 -12
  340. package/lib/components/validation-error/validation-error.module.d.ts +2 -2
  341. package/lib/components/view-mode-buttons/content-view-mode.enum.d.ts +8 -8
  342. package/lib/components/view-mode-buttons/view-mode-buttons.component.d.ts +17 -17
  343. package/lib/components/view-mode-buttons/view-mode-buttons.module.d.ts +2 -2
  344. package/lib/core/constant/default-upper-bound-for-range-components.d.ts +2 -2
  345. package/lib/core/constant/java-max-int.d.ts +1 -1
  346. package/lib/core/constant/number-inputs-key-down-white-list.d.ts +2 -2
  347. package/lib/core/decorator/input-boolean.decorator.d.ts +8 -8
  348. package/lib/core/enum/co-direction.d.ts +6 -6
  349. package/lib/core/enum/co-document-image-display-kind.enum.d.ts +5 -5
  350. package/lib/core/enum/co-document-type.enum.d.ts +5 -5
  351. package/lib/core/enum/co-orientation.d.ts +6 -6
  352. package/lib/core/enum/core-components-icon.enum.d.ts +298 -298
  353. package/lib/core/enum/file-type-internal.enum.d.ts +15 -15
  354. package/lib/core/enum/file-type.enum.d.ts +5 -5
  355. package/lib/core/enum/filterItem-mode.enum.d.ts +15 -15
  356. package/lib/core/enum/input-number-picker-show-mode.enum.d.ts +5 -5
  357. package/lib/core/enum/keyboard-code.enum.d.ts +71 -71
  358. package/lib/core/enum/keyboard-key.enum.d.ts +70 -70
  359. package/lib/core/enum/object-right-type.enum.d.ts +5 -5
  360. package/lib/core/enum/popup-button-type.enum.d.ts +9 -9
  361. package/lib/core/enum/popup-type.enum.d.ts +9 -9
  362. package/lib/core/enum/table-name.enum.d.ts +79 -79
  363. package/lib/core/function/any-nill.function.d.ts +1 -1
  364. package/lib/core/function/is-nill.function.d.ts +1 -1
  365. package/lib/core/function/none-nill.function.d.ts +1 -1
  366. package/lib/core/function/not-nill.function.d.ts +1 -1
  367. package/lib/core/model/bounds-constrained-number-value.d.ts +46 -46
  368. package/lib/core/model/check-precision-and-scale-result.d.ts +4 -4
  369. package/lib/core/model/check-within-stepped-bounds-result.d.ts +8 -8
  370. package/lib/core/model/co-document-right.bo.d.ts +6 -6
  371. package/lib/core/model/co-document.bo.d.ts +61 -61
  372. package/lib/core/model/core-components-icon-svg.d.ts +4 -4
  373. package/lib/core/model/element-position.d.ts +7 -7
  374. package/lib/core/model/event/string-prompt-result-event.d.ts +6 -6
  375. package/lib/core/service/form-input-user-change-listener.service.d.ts +10 -10
  376. package/lib/core/service/form-master.service.d.ts +26 -26
  377. package/lib/core/service/ng-zone-wrapper.service.d.ts +6 -6
  378. package/lib/core/utils/array-utils.d.ts +85 -85
  379. package/lib/core/utils/browser-utils.d.ts +15 -15
  380. package/lib/core/utils/direction-enum-utils.d.ts +5 -5
  381. package/lib/core/utils/event-utils.d.ts +12 -12
  382. package/lib/core/utils/file-utils.d.ts +29 -29
  383. package/lib/core/utils/number-utils.d.ts +89 -89
  384. package/lib/core/utils/object-utils.d.ts +31 -31
  385. package/lib/core/utils/string-utils.d.ts +25 -25
  386. package/lib/core/validator/email.validator.d.ts +2 -2
  387. package/lib/core/validator/equal.validator.d.ts +2 -2
  388. package/lib/core/validator/max-string-length.validator.d.ts +2 -2
  389. package/lib/core/validator/password.validator.d.ts +3 -3
  390. package/lib/core/validator/precision-scale.validator.d.ts +2 -2
  391. package/lib/core/validator/required.validator.d.ts +2 -2
  392. package/lib/directives/clickoutside/click-outside-master.service.d.ts +15 -15
  393. package/lib/directives/clickoutside/click-outside.directive.d.ts +18 -18
  394. package/lib/directives/clickoutside/clickoutside.module.d.ts +2 -2
  395. package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +14 -14
  396. package/lib/directives/observe-visibility/observe-visibility.module.d.ts +2 -2
  397. package/lib/directives/overlay/overlay-parent.directive.d.ts +6 -6
  398. package/lib/directives/overlay/overlay.directive.d.ts +25 -25
  399. package/lib/directives/overlay/overlay.module.d.ts +2 -2
  400. package/lib/directives/ripple/ripple-ref.d.ts +21 -21
  401. package/lib/directives/ripple/ripple-renderer.d.ts +56 -56
  402. package/lib/directives/ripple/ripple.directive.d.ts +56 -56
  403. package/lib/directives/ripple/ripple.module.d.ts +2 -2
  404. package/lib/directives/ripple/scroll-dispatcher.service.d.ts +51 -51
  405. package/lib/directives/ripple/scrollable.directive.d.ts +20 -20
  406. package/lib/directives/ripple/viewport-ruler.service.d.ts +29 -29
  407. package/lib/directives/screen-configuration/screen-configuration.directive.d.ts +32 -32
  408. package/lib/directives/screen-configuration/screen-configuration.module.d.ts +2 -2
  409. package/lib/directives/stopclick/stop-click.directive.d.ts +10 -10
  410. package/lib/directives/stopclick/stop-click.module.d.ts +2 -2
  411. package/lib/directives/template-wrapper/template-wrapper.directive.d.ts +13 -13
  412. package/lib/directives/template-wrapper/template-wrapper.module.d.ts +2 -2
  413. package/lib/directives/tooltip/tooltip-directive.module.d.ts +2 -2
  414. package/lib/directives/tooltip/tooltip.directive.d.ts +20 -20
  415. package/lib/interfaces/dialog-response.interface.d.ts +6 -6
  416. package/lib/interfaces/scanner-input.interface.d.ts +3 -3
  417. package/lib/interfaces/screen-config-adapter-component-interface-name.d.ts +3 -3
  418. package/lib/interfaces/screen-config-adapter.component.interface.d.ts +10 -10
  419. package/lib/model/enum/app-button-type.enum.d.ts +9 -9
  420. package/lib/model/enum/app-popup-type.enum.d.ts +6 -6
  421. package/lib/pipes/append.pipe.d.ts +4 -4
  422. package/lib/pipes/append.pipe.module.d.ts +2 -2
  423. package/lib/pipes/filter.pipe.d.ts +4 -4
  424. package/lib/pipes/filter.pipe.module.d.ts +2 -2
  425. package/lib/pipes/prepend.pipe.d.ts +4 -4
  426. package/lib/pipes/prepend.pipe.module.d.ts +2 -2
  427. package/lib/pipes/price-display-pipe.module.d.ts +2 -2
  428. package/lib/pipes/price-display.pipe.d.ts +4 -4
  429. package/lib/service/base-module-screen-config.service.d.ts +47 -47
  430. package/lib/service/base-module.service.d.ts +22 -22
  431. package/lib/service/color-sequence.service.d.ts +4 -4
  432. package/lib/service/overlay.service.d.ts +13 -13
  433. package/lib/translation/core-components-translation.module.d.ts +4 -4
  434. package/lib/translation/core-components-translation.service.d.ts +6 -6
  435. package/lib/translation/core-dictionary.service.d.ts +12 -12
  436. package/lib/translation/core-localize.pipe.d.ts +7 -7
  437. package/package.json +1 -1
  438. package/public-api.d.ts +126 -126
@@ -1,466 +1,466 @@
1
- import { __awaiter } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
3
- import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
4
- import { IconCacheService } from '../icon/icon-cache.service';
5
- import { FilterItemMode } from '../../core/enum/filterItem-mode.enum';
6
- export class FilterItemComponent {
7
- constructor(iconService, _changeDetector) {
8
- this.iconService = iconService;
9
- this._changeDetector = _changeDetector;
10
- this.icons = CoreComponentsIcon;
11
- this.modes = FilterItemMode;
12
- this.initialLimit = 10;
13
- this.expanded = false;
14
- // Set to false to use filter item with a multi selectable collection. Set to true to specify custom content
15
- this.customContent = false;
16
- // Set to true to show all results. Set to false to get 'show more' and 'show less' buttons to expand and contract.
17
- this.showAllResults = false;
18
- this.filterButtonLabel = "Search";
19
- this.searchPlaceholder = 'Search...';
20
- this.showMoreLabel = 'Show more';
21
- this.showLessLabel = 'Show less';
22
- this.noResultsLabel = "No results";
23
- this.sliderDefaultMin = 0;
24
- this.sliderDefaultMax = 100000;
25
- this.fullRangeIsNull = false;
26
- this.modelChange = new EventEmitter();
27
- this.collectionChange = new EventEmitter();
28
- this.filterButtonClicked = new EventEmitter();
29
- this.filteredCollection = [];
30
- this.limitTo = 10;
31
- this.filterText = "";
32
- this.showButton = false;
33
- this._collection = [];
34
- this._mode = this.modes.Filterlist;
35
- }
36
- set mode(value) {
37
- this._mode = value;
38
- this.readModelForMode(this._model);
39
- }
40
- get mode() {
41
- return this._mode;
42
- }
43
- set collection(value) {
44
- var _a;
45
- this._collection = value;
46
- this.filteredCollection = (_a = this._collection) === null || _a === void 0 ? void 0 : _a.slice();
47
- //reset the model in case there was no collection to set its values on when it was set.
48
- this.model = this._model;
49
- }
50
- get collection() {
51
- return this._collection;
52
- }
53
- set model(newModel) {
54
- this.readModelForMode(newModel);
55
- }
56
- get model() {
57
- return this._model;
58
- }
59
- ngOnInit() {
60
- this.setToInitialLimit();
61
- this.showButton = this.valueSelected();
62
- if (this.checkBoxToTextModel === undefined || this.checkBoxToTextModel === null) {
63
- this.checkBoxToTextModel = false;
64
- }
65
- }
66
- setToInitialLimit() {
67
- this.limitTo = this.initialLimit;
68
- }
69
- increaseLimit() {
70
- this.limitTo += 10;
71
- }
72
- moreToShow() {
73
- var _a;
74
- if (this.showAllResults) {
75
- return false;
76
- }
77
- return ((_a = this.filteredCollection) === null || _a === void 0 ? void 0 : _a.length) > this.limitTo;
78
- }
79
- lessToShow() {
80
- var _a, _b;
81
- if (this.showAllResults) {
82
- return false;
83
- }
84
- return ((_a = this.filteredCollection) === null || _a === void 0 ? void 0 : _a.length) <= this.limitTo && ((_b = this.filteredCollection) === null || _b === void 0 ? void 0 : _b.length) > this.initialLimit;
85
- }
86
- handleModelChange(model) {
87
- switch (this.mode) {
88
- case this.modes.Filterlist:
89
- this.showButton = true;
90
- model.checked = !model.checked;
91
- this._createModelForFilterList();
92
- break;
93
- case this.modes.SelectListWithStringCollectionOutput:
94
- this.showButton = true;
95
- model.checked = !model.checked;
96
- this._createModelForStringCollectionList();
97
- break;
98
- case this.modes.SingleSelectList:
99
- this.showButton = true;
100
- this.uncheckForSingleSelect(model);
101
- model.checked = !model.checked;
102
- this._createModelForSingleSelectList();
103
- break;
104
- case this.modes.SelectListWithNumberOutput:
105
- this.showButton = true;
106
- model.checked = !model.checked;
107
- this._createModelForSelectListWithNumberOutput();
108
- break;
109
- case this.modes.Slider:
110
- this.showButton = true;
111
- this._createModelForSliderMode();
112
- break;
113
- case this.modes.NullableSlider:
114
- this.showButton = true;
115
- this._createModelForNullableSliderMode();
116
- break;
117
- case this.modes.CheckboxToText:
118
- this.showButton = true;
119
- this._createModelForCheckboxToText();
120
- break;
121
- case this.modes.CheckboxToSimpleText:
122
- this.showButton = true;
123
- this._createModelForCheckboxToSimpleText();
124
- break;
125
- case this.modes.CheckboxToBinary:
126
- this.showButton = true;
127
- this._createModelForCheckboxToBinary();
128
- break;
129
- case this.modes.DateRangeField:
130
- this.showButton = true;
131
- this._createModelForDateRange(model);
132
- break;
133
- case this.modes.TextField:
134
- this.showButton = true;
135
- this._model = (typeof this._model === 'string' && this._model.length === 0) ? undefined : this._model;
136
- break;
137
- }
138
- this.modelChange.emit(this._model);
139
- this.collectionChange.emit(this.collection);
140
- }
141
- valueSelected() {
142
- if (this.collection) {
143
- return !!this.collection.find(c => c.checked);
144
- }
145
- return false;
146
- }
147
- // Applies filter to the collection.
148
- applyFilter(text) {
149
- var _a, _b;
150
- return __awaiter(this, void 0, void 0, function* () {
151
- if (!isNaN(this.minSearchCharsToLoadCollection) && this.collectionLoadFn) {
152
- if (text.length === this.minSearchCharsToLoadCollection && text.length > this.filterText.length) {
153
- this.collection = yield this.collectionLoadFn(text);
154
- }
155
- else if (text.length < this.minSearchCharsToLoadCollection) {
156
- this.collection = undefined;
157
- }
158
- }
159
- this.filterText = text;
160
- if (!this.collection) {
161
- return [];
162
- }
163
- const filterText = (_a = this.filterText) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
164
- let filteredItemCount = 0;
165
- this.filteredCollection = (_b = this.collection) === null || _b === void 0 ? void 0 : _b.filter((item) => {
166
- var _a;
167
- const labelText = (_a = item.description) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
168
- const isHiddenByFilter = ((labelText === null || labelText === void 0 ? void 0 : labelText.indexOf(filterText)) === -1);
169
- if (isHiddenByFilter) {
170
- return false;
171
- }
172
- else {
173
- filteredItemCount++;
174
- return true;
175
- }
176
- });
177
- });
178
- }
179
- onButtonClicked() {
180
- this.filterButtonClicked.emit();
181
- }
182
- uncheckForSingleSelect(model) {
183
- this.collection.forEach(m => {
184
- if (m.code !== model.code && m.description !== model.description) {
185
- m.checked = false;
186
- }
187
- });
188
- }
189
- readModelForMode(newModel) {
190
- switch (this.mode) {
191
- case this.modes.Filterlist:
192
- this._readModelForFilterList(newModel);
193
- break;
194
- case this.modes.SingleSelectList:
195
- this._readModelForSingleSelectList(newModel);
196
- break;
197
- case this.modes.SelectListWithStringCollectionOutput:
198
- this._readModelForStringCollectionList(newModel);
199
- break;
200
- case this.modes.SelectListWithNumberOutput:
201
- this._readModelForSelectListWithNumberOutput(newModel);
202
- break;
203
- case this.modes.Slider:
204
- case this.modes.NullableSlider:
205
- this._readModelForSliderMode(newModel);
206
- break;
207
- case this.modes.CheckboxToText:
208
- case this.modes.CheckboxToSimpleText:
209
- this._readModelForCheckboxToText(newModel);
210
- break;
211
- case this.modes.CheckboxToBinary:
212
- this._readModelForCheckboxToBinary(newModel);
213
- break;
214
- case this.modes.DateField:
215
- this._readModelForDateField(newModel);
216
- break;
217
- case this.modes.DateRangeField:
218
- this._readModelForDateRangeField(newModel);
219
- break;
220
- default:
221
- this._model = newModel;
222
- }
223
- }
224
- /////////////////////////////////////////////////////////////
225
- //Model creation for all of the different options available//
226
- /////////////////////////////////////////////////////////////
227
- _createModelForFilterList() {
228
- let filterRange = [];
229
- if (this.collection !== null && this.collection !== undefined) {
230
- this.collection.forEach((viewModel) => {
231
- if (viewModel.checked) {
232
- filterRange.push(`?='${viewModel.code}'`);
233
- }
234
- });
235
- if (filterRange.length > 0) {
236
- this._model = filterRange.join(',');
237
- }
238
- else {
239
- this._model = undefined;
240
- }
241
- }
242
- }
243
- _createModelForStringCollectionList() {
244
- let filterRange = [];
245
- this.collection.forEach((viewModel) => {
246
- if (viewModel.checked) {
247
- filterRange.push(viewModel.code.toString());
248
- }
249
- });
250
- if (filterRange.length > 0) {
251
- this._model = filterRange;
252
- }
253
- else {
254
- this._model = undefined;
255
- }
256
- }
257
- _createModelForSingleSelectList() {
258
- let filterString = "";
259
- this.collection.forEach((viewModel) => {
260
- if (viewModel.checked) {
261
- filterString = viewModel.code.toString();
262
- }
263
- });
264
- if (filterString.length > 0) {
265
- this._model = filterString;
266
- }
267
- else {
268
- this._model = undefined;
269
- }
270
- }
271
- _createModelForSelectListWithNumberOutput() {
272
- let filterNumber = null;
273
- this.collection.forEach((viewModel) => {
274
- if (viewModel.checked) {
275
- if (filterNumber == null) {
276
- filterNumber = 0;
277
- }
278
- filterNumber += Number(viewModel.code);
279
- }
280
- });
281
- this._model = filterNumber;
282
- }
283
- _createModelForSliderMode() {
284
- this.sliderMin = !!this.sliderMin ? this.sliderMin : this.sliderDefaultMin;
285
- this.sliderMax = !!this.sliderMax ? this.sliderMax : this.sliderDefaultMax;
286
- let trueLowerBound = Math.min(this.sliderMin, this.sliderMax);
287
- let trueUpperBound = Math.max(this.sliderMin, this.sliderMax);
288
- this.sliderMin = trueLowerBound;
289
- this.sliderMax = trueUpperBound;
290
- this._model = `${trueLowerBound} - ${trueUpperBound}`;
291
- }
292
- _createModelForNullableSliderMode() {
293
- if (this.sliderMin && this.sliderMax) {
294
- let trueLowerBound = Math.min(this.sliderMin, this.sliderMax);
295
- let trueUpperBound = Math.max(this.sliderMin, this.sliderMax);
296
- this._model = `${trueLowerBound} - ${trueUpperBound}`;
297
- }
298
- else {
299
- this._model = null;
300
- }
301
- }
302
- _createModelForCheckboxToText() {
303
- if (this.checkBoxToTextModel) {
304
- this._model = "?='J'";
305
- }
306
- else {
307
- this._model = "?='N'";
308
- }
309
- }
310
- _createModelForCheckboxToSimpleText() {
311
- if (this.checkBoxToTextModel) {
312
- this._model = "J";
313
- }
314
- else {
315
- this._model = "N";
316
- }
317
- }
318
- _createModelForCheckboxToBinary() {
319
- if (this.checkBoxToTextModel) {
320
- this._model = 1;
321
- }
322
- else {
323
- this._model = 0;
324
- }
325
- }
326
- _createModelForDateRange(dates) {
327
- if (dates) {
328
- let startDate = dates[0];
329
- let endDate = dates[1];
330
- const startDateRequest = startDate ? this._formatDateToString(startDate) : '';
331
- const endDateRequest = endDate ? this._formatDateToString(endDate) : '';
332
- this._model = `?>=\'${startDateRequest}\'& ?<=\'${endDateRequest}\'`;
333
- }
334
- }
335
- _formatDateToString(date) {
336
- let day = date.getDate().toString().padStart(2, '0');
337
- let month = (date.getMonth() + 1).toString().padStart(2, '0');
338
- let year = date.getFullYear();
339
- return `${day}-${month}-${year}`;
340
- }
341
- ////////////////////////////////////////////////////////////
342
- //Model reading for all of the different options available//
343
- ////////////////////////////////////////////////////////////
344
- _readModelForFilterList(filterModel) {
345
- let filterList = [];
346
- let itemsToCheck = [];
347
- this._uncheckAll();
348
- this._model = filterModel;
349
- if (filterModel !== null && filterModel !== undefined && typeof filterModel === 'string' && filterModel.length != 0 && this.collection !== null && this.collection !== undefined) {
350
- filterList = filterModel.split(",");
351
- filterList.forEach((filter) => {
352
- itemsToCheck.push(filter.substr(3, filter.length - 4));
353
- });
354
- for (const item of itemsToCheck) {
355
- let filter = this.collection.find(element => element.code.toString() === item);
356
- if (filter !== null && filter !== undefined) {
357
- filter.checked = true;
358
- }
359
- }
360
- this._model = filterModel;
361
- }
362
- }
363
- _readModelForSingleSelectList(singleSelectModel) {
364
- this._uncheckAll();
365
- this._model = singleSelectModel;
366
- if (singleSelectModel !== null && singleSelectModel !== undefined && this.collection !== null && this.collection !== undefined) {
367
- let filter = this.collection.find(element => element.code.toString() === singleSelectModel);
368
- if (filter !== null && filter !== undefined) {
369
- filter.checked = true;
370
- }
371
- }
372
- }
373
- _readModelForStringCollectionList(collectionModel) {
374
- this._uncheckAll();
375
- this._model = collectionModel;
376
- if (collectionModel !== null && collectionModel !== undefined && this.collection !== null && this.collection !== undefined) {
377
- this.collection.forEach((viewModel) => {
378
- if (collectionModel.indexOf(viewModel.code.toString()) > -1) {
379
- viewModel.checked = true;
380
- }
381
- else {
382
- viewModel.checked = false;
383
- }
384
- });
385
- }
386
- }
387
- _readModelForSelectListWithNumberOutput(numberModel) {
388
- this._uncheckAll();
389
- this._model = numberModel;
390
- if (numberModel !== null && numberModel !== undefined && this.collection !== null && this.collection !== undefined) {
391
- for (const item of this.collection) {
392
- const itemCode = item.code;
393
- const modValue = (numberModel % (2 * itemCode));
394
- item.checked = (modValue >= itemCode);
395
- }
396
- }
397
- }
398
- _uncheckAll() {
399
- if (this.collection !== null && this.collection !== undefined) {
400
- this.collection.forEach(m => {
401
- m.checked = false;
402
- });
403
- }
404
- }
405
- _readModelForSliderMode(sliderModel) {
406
- this._model = sliderModel;
407
- if (sliderModel !== undefined && sliderModel !== null) {
408
- let sliderInputCollection = sliderModel.split(' - ');
409
- this.sliderMin = parseInt(sliderInputCollection[0]);
410
- this.sliderMax = parseInt(sliderInputCollection[1]);
411
- }
412
- else {
413
- this.sliderMin = this.sliderDefaultMin;
414
- this.sliderMax = this.sliderDefaultMax;
415
- }
416
- }
417
- _readModelForCheckboxToText(checkboxToTextModel) {
418
- this._model = checkboxToTextModel;
419
- if (checkboxToTextModel !== undefined && checkboxToTextModel !== null) {
420
- this.checkBoxToTextModel = (checkboxToTextModel.indexOf('J') > -1);
421
- }
422
- else {
423
- this.checkBoxToTextModel = false;
424
- }
425
- }
426
- _readModelForCheckboxToBinary(checkboxToBinary) {
427
- this._model = checkboxToBinary;
428
- if (checkboxToBinary !== undefined && checkboxToBinary !== null) {
429
- this.checkBoxToTextModel = (checkboxToBinary >= 1);
430
- }
431
- else {
432
- this.checkBoxToTextModel = false;
433
- }
434
- }
435
- _readModelForDateField(dateFieldModel) {
436
- this._model = dateFieldModel;
437
- if (dateFieldModel !== undefined && dateFieldModel !== null) {
438
- this._model = new Date(dateFieldModel);
439
- }
440
- else {
441
- this._model = undefined;
442
- }
443
- }
444
- _readModelForDateRangeField(dateRangeFieldModel) {
445
- this._model = dateRangeFieldModel;
446
- if (dateRangeFieldModel !== undefined && dateRangeFieldModel !== null) {
447
- let dateCollection = dateRangeFieldModel.split('&');
448
- let startString = dateCollection[0].trim().substr(4, dateCollection[0].length - 5);
449
- let endString = dateCollection[1].trim().substr(4, dateCollection[1].length - 5);
450
- let startDateComponents = startString.split('-');
451
- let endDateComponents = endString.split('-');
452
- this.dateRangeStart = new Date(parseInt(startDateComponents[2]), parseInt(startDateComponents[1]) - 1, parseInt(startDateComponents[0]));
453
- this.dateRangeEnd = new Date(parseInt(endDateComponents[2]), parseInt(endDateComponents[1]) - 1, parseInt(endDateComponents[0]));
454
- }
455
- else {
456
- this.dateRangeStart = undefined;
457
- this.dateRangeEnd = undefined;
458
- }
459
- }
460
- }
461
- FilterItemComponent.decorators = [
462
- { type: Component, args: [{
463
- selector: "co-filter-item",
1
+ import { __awaiter } from "tslib";
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
3
+ import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
4
+ import { IconCacheService } from '../icon/icon-cache.service';
5
+ import { FilterItemMode } from '../../core/enum/filterItem-mode.enum';
6
+ export class FilterItemComponent {
7
+ constructor(iconService, _changeDetector) {
8
+ this.iconService = iconService;
9
+ this._changeDetector = _changeDetector;
10
+ this.icons = CoreComponentsIcon;
11
+ this.modes = FilterItemMode;
12
+ this.initialLimit = 10;
13
+ this.expanded = false;
14
+ // Set to false to use filter item with a multi selectable collection. Set to true to specify custom content
15
+ this.customContent = false;
16
+ // Set to true to show all results. Set to false to get 'show more' and 'show less' buttons to expand and contract.
17
+ this.showAllResults = false;
18
+ this.filterButtonLabel = "Search";
19
+ this.searchPlaceholder = 'Search...';
20
+ this.showMoreLabel = 'Show more';
21
+ this.showLessLabel = 'Show less';
22
+ this.noResultsLabel = "No results";
23
+ this.sliderDefaultMin = 0;
24
+ this.sliderDefaultMax = 100000;
25
+ this.fullRangeIsNull = false;
26
+ this.modelChange = new EventEmitter();
27
+ this.collectionChange = new EventEmitter();
28
+ this.filterButtonClicked = new EventEmitter();
29
+ this.filteredCollection = [];
30
+ this.limitTo = 10;
31
+ this.filterText = "";
32
+ this.showButton = false;
33
+ this._collection = [];
34
+ this._mode = this.modes.Filterlist;
35
+ }
36
+ set mode(value) {
37
+ this._mode = value;
38
+ this.readModelForMode(this._model);
39
+ }
40
+ get mode() {
41
+ return this._mode;
42
+ }
43
+ set collection(value) {
44
+ var _a;
45
+ this._collection = value;
46
+ this.filteredCollection = (_a = this._collection) === null || _a === void 0 ? void 0 : _a.slice();
47
+ //reset the model in case there was no collection to set its values on when it was set.
48
+ this.model = this._model;
49
+ }
50
+ get collection() {
51
+ return this._collection;
52
+ }
53
+ set model(newModel) {
54
+ this.readModelForMode(newModel);
55
+ }
56
+ get model() {
57
+ return this._model;
58
+ }
59
+ ngOnInit() {
60
+ this.setToInitialLimit();
61
+ this.showButton = this.valueSelected();
62
+ if (this.checkBoxToTextModel === undefined || this.checkBoxToTextModel === null) {
63
+ this.checkBoxToTextModel = false;
64
+ }
65
+ }
66
+ setToInitialLimit() {
67
+ this.limitTo = this.initialLimit;
68
+ }
69
+ increaseLimit() {
70
+ this.limitTo += 10;
71
+ }
72
+ moreToShow() {
73
+ var _a;
74
+ if (this.showAllResults) {
75
+ return false;
76
+ }
77
+ return ((_a = this.filteredCollection) === null || _a === void 0 ? void 0 : _a.length) > this.limitTo;
78
+ }
79
+ lessToShow() {
80
+ var _a, _b;
81
+ if (this.showAllResults) {
82
+ return false;
83
+ }
84
+ return ((_a = this.filteredCollection) === null || _a === void 0 ? void 0 : _a.length) <= this.limitTo && ((_b = this.filteredCollection) === null || _b === void 0 ? void 0 : _b.length) > this.initialLimit;
85
+ }
86
+ handleModelChange(model) {
87
+ switch (this.mode) {
88
+ case this.modes.Filterlist:
89
+ this.showButton = true;
90
+ model.checked = !model.checked;
91
+ this._createModelForFilterList();
92
+ break;
93
+ case this.modes.SelectListWithStringCollectionOutput:
94
+ this.showButton = true;
95
+ model.checked = !model.checked;
96
+ this._createModelForStringCollectionList();
97
+ break;
98
+ case this.modes.SingleSelectList:
99
+ this.showButton = true;
100
+ this.uncheckForSingleSelect(model);
101
+ model.checked = !model.checked;
102
+ this._createModelForSingleSelectList();
103
+ break;
104
+ case this.modes.SelectListWithNumberOutput:
105
+ this.showButton = true;
106
+ model.checked = !model.checked;
107
+ this._createModelForSelectListWithNumberOutput();
108
+ break;
109
+ case this.modes.Slider:
110
+ this.showButton = true;
111
+ this._createModelForSliderMode();
112
+ break;
113
+ case this.modes.NullableSlider:
114
+ this.showButton = true;
115
+ this._createModelForNullableSliderMode();
116
+ break;
117
+ case this.modes.CheckboxToText:
118
+ this.showButton = true;
119
+ this._createModelForCheckboxToText();
120
+ break;
121
+ case this.modes.CheckboxToSimpleText:
122
+ this.showButton = true;
123
+ this._createModelForCheckboxToSimpleText();
124
+ break;
125
+ case this.modes.CheckboxToBinary:
126
+ this.showButton = true;
127
+ this._createModelForCheckboxToBinary();
128
+ break;
129
+ case this.modes.DateRangeField:
130
+ this.showButton = true;
131
+ this._createModelForDateRange(model);
132
+ break;
133
+ case this.modes.TextField:
134
+ this.showButton = true;
135
+ this._model = (typeof this._model === 'string' && this._model.length === 0) ? undefined : this._model;
136
+ break;
137
+ }
138
+ this.modelChange.emit(this._model);
139
+ this.collectionChange.emit(this.collection);
140
+ }
141
+ valueSelected() {
142
+ if (this.collection) {
143
+ return !!this.collection.find(c => c.checked);
144
+ }
145
+ return false;
146
+ }
147
+ // Applies filter to the collection.
148
+ applyFilter(text) {
149
+ var _a, _b;
150
+ return __awaiter(this, void 0, void 0, function* () {
151
+ if (!isNaN(this.minSearchCharsToLoadCollection) && this.collectionLoadFn) {
152
+ if (text.length === this.minSearchCharsToLoadCollection && text.length > this.filterText.length) {
153
+ this.collection = yield this.collectionLoadFn(text);
154
+ }
155
+ else if (text.length < this.minSearchCharsToLoadCollection) {
156
+ this.collection = undefined;
157
+ }
158
+ }
159
+ this.filterText = text;
160
+ if (!this.collection) {
161
+ return [];
162
+ }
163
+ const filterText = (_a = this.filterText) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
164
+ let filteredItemCount = 0;
165
+ this.filteredCollection = (_b = this.collection) === null || _b === void 0 ? void 0 : _b.filter((item) => {
166
+ var _a;
167
+ const labelText = (_a = item.description) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
168
+ const isHiddenByFilter = ((labelText === null || labelText === void 0 ? void 0 : labelText.indexOf(filterText)) === -1);
169
+ if (isHiddenByFilter) {
170
+ return false;
171
+ }
172
+ else {
173
+ filteredItemCount++;
174
+ return true;
175
+ }
176
+ });
177
+ });
178
+ }
179
+ onButtonClicked() {
180
+ this.filterButtonClicked.emit();
181
+ }
182
+ uncheckForSingleSelect(model) {
183
+ this.collection.forEach(m => {
184
+ if (m.code !== model.code && m.description !== model.description) {
185
+ m.checked = false;
186
+ }
187
+ });
188
+ }
189
+ readModelForMode(newModel) {
190
+ switch (this.mode) {
191
+ case this.modes.Filterlist:
192
+ this._readModelForFilterList(newModel);
193
+ break;
194
+ case this.modes.SingleSelectList:
195
+ this._readModelForSingleSelectList(newModel);
196
+ break;
197
+ case this.modes.SelectListWithStringCollectionOutput:
198
+ this._readModelForStringCollectionList(newModel);
199
+ break;
200
+ case this.modes.SelectListWithNumberOutput:
201
+ this._readModelForSelectListWithNumberOutput(newModel);
202
+ break;
203
+ case this.modes.Slider:
204
+ case this.modes.NullableSlider:
205
+ this._readModelForSliderMode(newModel);
206
+ break;
207
+ case this.modes.CheckboxToText:
208
+ case this.modes.CheckboxToSimpleText:
209
+ this._readModelForCheckboxToText(newModel);
210
+ break;
211
+ case this.modes.CheckboxToBinary:
212
+ this._readModelForCheckboxToBinary(newModel);
213
+ break;
214
+ case this.modes.DateField:
215
+ this._readModelForDateField(newModel);
216
+ break;
217
+ case this.modes.DateRangeField:
218
+ this._readModelForDateRangeField(newModel);
219
+ break;
220
+ default:
221
+ this._model = newModel;
222
+ }
223
+ }
224
+ /////////////////////////////////////////////////////////////
225
+ //Model creation for all of the different options available//
226
+ /////////////////////////////////////////////////////////////
227
+ _createModelForFilterList() {
228
+ let filterRange = [];
229
+ if (this.collection !== null && this.collection !== undefined) {
230
+ this.collection.forEach((viewModel) => {
231
+ if (viewModel.checked) {
232
+ filterRange.push(`?='${viewModel.code}'`);
233
+ }
234
+ });
235
+ if (filterRange.length > 0) {
236
+ this._model = filterRange.join(',');
237
+ }
238
+ else {
239
+ this._model = undefined;
240
+ }
241
+ }
242
+ }
243
+ _createModelForStringCollectionList() {
244
+ let filterRange = [];
245
+ this.collection.forEach((viewModel) => {
246
+ if (viewModel.checked) {
247
+ filterRange.push(viewModel.code.toString());
248
+ }
249
+ });
250
+ if (filterRange.length > 0) {
251
+ this._model = filterRange;
252
+ }
253
+ else {
254
+ this._model = undefined;
255
+ }
256
+ }
257
+ _createModelForSingleSelectList() {
258
+ let filterString = "";
259
+ this.collection.forEach((viewModel) => {
260
+ if (viewModel.checked) {
261
+ filterString = viewModel.code.toString();
262
+ }
263
+ });
264
+ if (filterString.length > 0) {
265
+ this._model = filterString;
266
+ }
267
+ else {
268
+ this._model = undefined;
269
+ }
270
+ }
271
+ _createModelForSelectListWithNumberOutput() {
272
+ let filterNumber = null;
273
+ this.collection.forEach((viewModel) => {
274
+ if (viewModel.checked) {
275
+ if (filterNumber == null) {
276
+ filterNumber = 0;
277
+ }
278
+ filterNumber += Number(viewModel.code);
279
+ }
280
+ });
281
+ this._model = filterNumber;
282
+ }
283
+ _createModelForSliderMode() {
284
+ this.sliderMin = !!this.sliderMin ? this.sliderMin : this.sliderDefaultMin;
285
+ this.sliderMax = !!this.sliderMax ? this.sliderMax : this.sliderDefaultMax;
286
+ let trueLowerBound = Math.min(this.sliderMin, this.sliderMax);
287
+ let trueUpperBound = Math.max(this.sliderMin, this.sliderMax);
288
+ this.sliderMin = trueLowerBound;
289
+ this.sliderMax = trueUpperBound;
290
+ this._model = `${trueLowerBound} - ${trueUpperBound}`;
291
+ }
292
+ _createModelForNullableSliderMode() {
293
+ if (this.sliderMin && this.sliderMax) {
294
+ let trueLowerBound = Math.min(this.sliderMin, this.sliderMax);
295
+ let trueUpperBound = Math.max(this.sliderMin, this.sliderMax);
296
+ this._model = `${trueLowerBound} - ${trueUpperBound}`;
297
+ }
298
+ else {
299
+ this._model = null;
300
+ }
301
+ }
302
+ _createModelForCheckboxToText() {
303
+ if (this.checkBoxToTextModel) {
304
+ this._model = "?='J'";
305
+ }
306
+ else {
307
+ this._model = "?='N'";
308
+ }
309
+ }
310
+ _createModelForCheckboxToSimpleText() {
311
+ if (this.checkBoxToTextModel) {
312
+ this._model = "J";
313
+ }
314
+ else {
315
+ this._model = "N";
316
+ }
317
+ }
318
+ _createModelForCheckboxToBinary() {
319
+ if (this.checkBoxToTextModel) {
320
+ this._model = 1;
321
+ }
322
+ else {
323
+ this._model = 0;
324
+ }
325
+ }
326
+ _createModelForDateRange(dates) {
327
+ if (dates) {
328
+ let startDate = dates[0];
329
+ let endDate = dates[1];
330
+ const startDateRequest = startDate ? this._formatDateToString(startDate) : '';
331
+ const endDateRequest = endDate ? this._formatDateToString(endDate) : '';
332
+ this._model = `?>=\'${startDateRequest}\'& ?<=\'${endDateRequest}\'`;
333
+ }
334
+ }
335
+ _formatDateToString(date) {
336
+ let day = date.getDate().toString().padStart(2, '0');
337
+ let month = (date.getMonth() + 1).toString().padStart(2, '0');
338
+ let year = date.getFullYear();
339
+ return `${day}-${month}-${year}`;
340
+ }
341
+ ////////////////////////////////////////////////////////////
342
+ //Model reading for all of the different options available//
343
+ ////////////////////////////////////////////////////////////
344
+ _readModelForFilterList(filterModel) {
345
+ let filterList = [];
346
+ let itemsToCheck = [];
347
+ this._uncheckAll();
348
+ this._model = filterModel;
349
+ if (filterModel !== null && filterModel !== undefined && typeof filterModel === 'string' && filterModel.length != 0 && this.collection !== null && this.collection !== undefined) {
350
+ filterList = filterModel.split(",");
351
+ filterList.forEach((filter) => {
352
+ itemsToCheck.push(filter.substr(3, filter.length - 4));
353
+ });
354
+ for (const item of itemsToCheck) {
355
+ let filter = this.collection.find(element => element.code.toString() === item);
356
+ if (filter !== null && filter !== undefined) {
357
+ filter.checked = true;
358
+ }
359
+ }
360
+ this._model = filterModel;
361
+ }
362
+ }
363
+ _readModelForSingleSelectList(singleSelectModel) {
364
+ this._uncheckAll();
365
+ this._model = singleSelectModel;
366
+ if (singleSelectModel !== null && singleSelectModel !== undefined && this.collection !== null && this.collection !== undefined) {
367
+ let filter = this.collection.find(element => element.code.toString() === singleSelectModel);
368
+ if (filter !== null && filter !== undefined) {
369
+ filter.checked = true;
370
+ }
371
+ }
372
+ }
373
+ _readModelForStringCollectionList(collectionModel) {
374
+ this._uncheckAll();
375
+ this._model = collectionModel;
376
+ if (collectionModel !== null && collectionModel !== undefined && this.collection !== null && this.collection !== undefined) {
377
+ this.collection.forEach((viewModel) => {
378
+ if (collectionModel.indexOf(viewModel.code.toString()) > -1) {
379
+ viewModel.checked = true;
380
+ }
381
+ else {
382
+ viewModel.checked = false;
383
+ }
384
+ });
385
+ }
386
+ }
387
+ _readModelForSelectListWithNumberOutput(numberModel) {
388
+ this._uncheckAll();
389
+ this._model = numberModel;
390
+ if (numberModel !== null && numberModel !== undefined && this.collection !== null && this.collection !== undefined) {
391
+ for (const item of this.collection) {
392
+ const itemCode = item.code;
393
+ const modValue = (numberModel % (2 * itemCode));
394
+ item.checked = (modValue >= itemCode);
395
+ }
396
+ }
397
+ }
398
+ _uncheckAll() {
399
+ if (this.collection !== null && this.collection !== undefined) {
400
+ this.collection.forEach(m => {
401
+ m.checked = false;
402
+ });
403
+ }
404
+ }
405
+ _readModelForSliderMode(sliderModel) {
406
+ this._model = sliderModel;
407
+ if (sliderModel !== undefined && sliderModel !== null) {
408
+ let sliderInputCollection = sliderModel.split(' - ');
409
+ this.sliderMin = parseInt(sliderInputCollection[0]);
410
+ this.sliderMax = parseInt(sliderInputCollection[1]);
411
+ }
412
+ else {
413
+ this.sliderMin = this.sliderDefaultMin;
414
+ this.sliderMax = this.sliderDefaultMax;
415
+ }
416
+ }
417
+ _readModelForCheckboxToText(checkboxToTextModel) {
418
+ this._model = checkboxToTextModel;
419
+ if (checkboxToTextModel !== undefined && checkboxToTextModel !== null) {
420
+ this.checkBoxToTextModel = (checkboxToTextModel.indexOf('J') > -1);
421
+ }
422
+ else {
423
+ this.checkBoxToTextModel = false;
424
+ }
425
+ }
426
+ _readModelForCheckboxToBinary(checkboxToBinary) {
427
+ this._model = checkboxToBinary;
428
+ if (checkboxToBinary !== undefined && checkboxToBinary !== null) {
429
+ this.checkBoxToTextModel = (checkboxToBinary >= 1);
430
+ }
431
+ else {
432
+ this.checkBoxToTextModel = false;
433
+ }
434
+ }
435
+ _readModelForDateField(dateFieldModel) {
436
+ this._model = dateFieldModel;
437
+ if (dateFieldModel !== undefined && dateFieldModel !== null) {
438
+ this._model = new Date(dateFieldModel);
439
+ }
440
+ else {
441
+ this._model = undefined;
442
+ }
443
+ }
444
+ _readModelForDateRangeField(dateRangeFieldModel) {
445
+ this._model = dateRangeFieldModel;
446
+ if (dateRangeFieldModel !== undefined && dateRangeFieldModel !== null) {
447
+ let dateCollection = dateRangeFieldModel.split('&');
448
+ let startString = dateCollection[0].trim().substr(4, dateCollection[0].length - 5);
449
+ let endString = dateCollection[1].trim().substr(4, dateCollection[1].length - 5);
450
+ let startDateComponents = startString.split('-');
451
+ let endDateComponents = endString.split('-');
452
+ this.dateRangeStart = new Date(parseInt(startDateComponents[2]), parseInt(startDateComponents[1]) - 1, parseInt(startDateComponents[0]));
453
+ this.dateRangeEnd = new Date(parseInt(endDateComponents[2]), parseInt(endDateComponents[1]) - 1, parseInt(endDateComponents[0]));
454
+ }
455
+ else {
456
+ this.dateRangeStart = undefined;
457
+ this.dateRangeEnd = undefined;
458
+ }
459
+ }
460
+ }
461
+ FilterItemComponent.decorators = [
462
+ { type: Component, args: [{
463
+ selector: "co-filter-item",
464
464
  template: `
465
465
  <div class="co-filter-item-header">
466
466
  <co-collapsible
@@ -610,37 +610,37 @@ FilterItemComponent.decorators = [
610
610
  </co-collapsible>
611
611
  </div>
612
612
 
613
- `,
614
- encapsulation: ViewEncapsulation.None,
615
- changeDetection: ChangeDetectionStrategy.OnPush
616
- },] }
617
- ];
618
- FilterItemComponent.ctorParameters = () => [
619
- { type: IconCacheService },
620
- { type: ChangeDetectorRef }
621
- ];
622
- FilterItemComponent.propDecorators = {
623
- mode: [{ type: Input }],
624
- collection: [{ type: Input }],
625
- placeholder: [{ type: Input }],
626
- initialLimit: [{ type: Input }],
627
- expanded: [{ type: Input }],
628
- minSearchCharsToLoadCollection: [{ type: Input }],
629
- collectionLoadFn: [{ type: Input }],
630
- customContent: [{ type: Input }],
631
- showAllResults: [{ type: Input }],
632
- filterButtonLabel: [{ type: Input }],
633
- searchPlaceholder: [{ type: Input }],
634
- showMoreLabel: [{ type: Input }],
635
- showLessLabel: [{ type: Input }],
636
- noResultsLabel: [{ type: Input }],
637
- sliderDefaultMin: [{ type: Input }],
638
- sliderDefaultMax: [{ type: Input }],
639
- fullRangeIsNull: [{ type: Input }],
640
- model: [{ type: Input }],
641
- modelChange: [{ type: Output }],
642
- collectionChange: [{ type: Output }],
643
- filterButtonClicked: [{ type: Output }],
644
- filteredCollection: [{ type: HostBinding, args: ["class.co-filter-item",] }]
645
- };
613
+ `,
614
+ encapsulation: ViewEncapsulation.None,
615
+ changeDetection: ChangeDetectionStrategy.OnPush
616
+ },] }
617
+ ];
618
+ FilterItemComponent.ctorParameters = () => [
619
+ { type: IconCacheService },
620
+ { type: ChangeDetectorRef }
621
+ ];
622
+ FilterItemComponent.propDecorators = {
623
+ mode: [{ type: Input }],
624
+ collection: [{ type: Input }],
625
+ placeholder: [{ type: Input }],
626
+ initialLimit: [{ type: Input }],
627
+ expanded: [{ type: Input }],
628
+ minSearchCharsToLoadCollection: [{ type: Input }],
629
+ collectionLoadFn: [{ type: Input }],
630
+ customContent: [{ type: Input }],
631
+ showAllResults: [{ type: Input }],
632
+ filterButtonLabel: [{ type: Input }],
633
+ searchPlaceholder: [{ type: Input }],
634
+ showMoreLabel: [{ type: Input }],
635
+ showLessLabel: [{ type: Input }],
636
+ noResultsLabel: [{ type: Input }],
637
+ sliderDefaultMin: [{ type: Input }],
638
+ sliderDefaultMax: [{ type: Input }],
639
+ fullRangeIsNull: [{ type: Input }],
640
+ model: [{ type: Input }],
641
+ modelChange: [{ type: Output }],
642
+ collectionChange: [{ type: Output }],
643
+ filterButtonClicked: [{ type: Output }],
644
+ filteredCollection: [{ type: HostBinding, args: ["class.co-filter-item",] }]
645
+ };
646
646
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci1pdGVtL2ZpbHRlci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsWUFBWSxFQUFFLFdBQVcsRUFDekIsS0FBSyxFQUVMLE1BQU0sRUFDTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBNkpwRSxNQUFNLE9BQU8sbUJBQW1CO0lBaUg5QixZQUFtQixXQUE2QixFQUM1QixlQUFrQztRQURuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBakgvQyxVQUFLLEdBQThCLGtCQUFrQixDQUFDO1FBQ3RELFVBQUssR0FBMEIsY0FBYyxDQUFDO1FBNEI5QyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUcxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBUWpDLDRHQUE0RztRQUVyRyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV0QyxtSEFBbUg7UUFFNUcsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFHaEMsc0JBQWlCLEdBQVcsUUFBUSxDQUFDO1FBR3JDLHNCQUFpQixHQUFXLFdBQVcsQ0FBQztRQUd4QyxrQkFBYSxHQUFXLFdBQVcsQ0FBQztRQUdwQyxrQkFBYSxHQUFXLFdBQVcsQ0FBQztRQUdwQyxtQkFBYyxHQUFXLFlBQVksQ0FBQztRQUd0QyxxQkFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUpUO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTthQUNoRDs7O1lBN0pPLGdCQUFnQjtZQVZHLGlCQUFpQjs7O21CQTRLekMsS0FBSzt5QkFVTCxLQUFLOzBCQVlMLEtBQUs7MkJBR0wsS0FBSzt1QkFHTCxLQUFLOzZDQUdMLEtBQUs7K0JBR0wsS0FBSzs0QkFJTCxLQUFLOzZCQUlMLEtBQUs7Z0NBR0wsS0FBSztnQ0FHTCxLQUFLOzRCQUdMLEtBQUs7NEJBR0wsS0FBSzs2QkFHTCxLQUFLOytCQUdMLEtBQUs7K0JBR0wsS0FBSzs4QkFHTCxLQUFLO29CQUdMLEtBQUs7MEJBU0wsTUFBTTsrQkFHTixNQUFNO2tDQUdOLE1BQU07aUNBR04sV0FBVyxTQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb3JlQ29tcG9uZW50c0ljb259IGZyb20gJy4uLy4uL2NvcmUvZW51bS9jb3JlLWNvbXBvbmVudHMtaWNvbi5lbnVtJztcclxuaW1wb3J0IHtGaWx0ZXJJdGVtVmlld21vZGVsfSBmcm9tICcuL2ZpbHRlci1pdGVtLXZpZXdtb2RlbCc7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vaWNvbi9pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZpbHRlckl0ZW1Nb2RlfSBmcm9tICcuLi8uLi9jb3JlL2VudW0vZmlsdGVySXRlbS1tb2RlLmVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiY28tZmlsdGVyLWl0ZW1cIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0taGVhZGVyXCI+XHJcbiAgICAgICAgICA8Y28tY29sbGFwc2libGVcclxuICAgICAgICAgICAgICAgICAgW2hlYWRlclRpdGxlXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2V4cGFuZEJ1dHRvbkxhc3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLkFycm93UG9pbnREb3duKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93QnV0dG9uXT1cInNob3dCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBbYnV0dG9uVGV4dF09XCJmaWx0ZXJCdXR0b25MYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgIChidXR0b25DbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2tlZCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY29sbGFwc2FibGUtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY3VzdG9tLWNvbnRlbnRcIiAqbmdJZj1cImN1c3RvbUNvbnRlbnQ7IGVsc2UgY29sbGVjdGlvbkNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cInNob3dCdXR0b249dHJ1ZVwiIChtb3VzZWRvd24pPVwic2hvd0J1dHRvbj10cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbGxlY3Rpb25Db250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNvbGxlY3Rpb24tY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuRmlsdGVybGlzdCB8fCBtb2RlID09PSBtb2Rlcy5TaW5nbGVTZWxlY3RMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtb2RlID09PSBtb2Rlcy5TZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dCB8fCBtb2RlID09PSBtb2Rlcy5TZWxlY3RMaXN0V2l0aFN0cmluZ0NvbGxlY3Rpb25PdXRwdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2xsZWN0aW9uPy5sZW5ndGggPiAxMCB8fCBtaW5TZWFyY2hDaGFyc1RvTG9hZENvbGxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJmaWx0ZXJUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1yZXN1bHRzXCIgKm5nSWY9XCJmaWx0ZXJlZENvbGxlY3Rpb24/Lmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwibm9SZXN1bHRzTGFiZWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWNvbGxlY3Rpb24tcmVzdWx0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZENvbGxlY3Rpb247IGxldCBpbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY29sbGVjdGlvbi1yZXN1bHQtaXRlbVwiICpuZ0lmPVwiaW5kZXggPCBsaW1pdFRvIHx8IHNob3dBbGxSZXN1bHRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94ICpuZ0lmPVwibW9kZSAhPT0gbW9kZXMuU2luZ2xlU2VsZWN0TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24uZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwib3B0aW9uLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2thYmxlTGFiZWxdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2Uob3B0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28taW5wdXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLlNpbmdsZVNlbGVjdExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwib3B0aW9uLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKG9wdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLWlucHV0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tYW1vdW50XCIgKm5nSWY9XCJvcHRpb24uY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRDb250ZW50XT1cIm9wdGlvbi5jb3VudC50b1N0cmluZygpIHwgYXBwZW5kOiAnKScgfCBwcmVwZW5kOiAnICAgICAgKCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1zaG93LW1vcmUtb3ItbGVzc1wiICpuZ0lmPVwiIXNob3dBbGxSZXN1bHRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItc2hvdy1tb3JlIGNsaWNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtb3JlVG9TaG93KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJpbmNyZWFzZUxpbWl0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50RG93bilcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInNob3dNb3JlTGFiZWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLXNob3ctbGVzcyBjbGlja2FibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGVzc1RvU2hvdygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic2V0VG9Jbml0aWFsTGltaXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLkFycm93UG9pbnRVcClcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInNob3dMZXNzTGFiZWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tc2xpZGVyLWNvbnRlbnRcIiAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLlNsaWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlci1mcm9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWdpdHNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVBcnJvd0J1dHRvbnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXhjbHVkZVBsdXNNaW51c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInRlJPTScgfCBjb3JlTG9jYWxpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwic2xpZGVyTWluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJoYW5kbGVNb2RlbENoYW5nZShzbGlkZXJNaW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlci10b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlnaXRzT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlQXJyb3dCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4Y2x1ZGVQbHVzTWludXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1RPJyB8IGNvcmVMb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzbGlkZXJNYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cImhhbmRsZU1vZGVsQ2hhbmdlKHNsaWRlck1heClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1zbGlkZXItY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuTnVsbGFibGVTbGlkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItZnJvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlnaXRzT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlQXJyb3dCdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4Y2x1ZGVQbHVzTWludXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0ZST00nIHwgY29yZUxvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInNsaWRlck1pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwiaGFuZGxlTW9kZWxDaGFuZ2Uoc2xpZGVyTWluKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY28taW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpZ2l0c09ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUFycm93QnV0dG9uc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleGNsdWRlUGx1c01pbnVzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidUTycgfCBjb3JlTG9jYWxpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwic2xpZGVyTWF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJoYW5kbGVNb2RlbENoYW5nZShzbGlkZXJNYXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jby1pbnB1dC10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY2hlY2tib3gtY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuQ2hlY2tib3ggXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJtb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvLWlucHV0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tY2hlY2tib3gtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuQ2hlY2tib3hUb1RleHQgfHwgbW9kZSA9PT0gbW9kZXMuQ2hlY2tib3hUb1NpbXBsZVRleHQgfHwgbW9kZSA9PT0gbW9kZXMuQ2hlY2tib3hUb0JpbmFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwiY2hlY2tCb3hUb1RleHRNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicGxhY2Vob2xkZXJcIj48L2NvLWlucHV0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZmlsdGVyLWl0ZW0tdGV4dGZpZWxkLWNvbnRlbnRcIiAqbmdJZj1cIm1vZGUgPT09IG1vZGVzLlRleHRGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJtb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiPjwvY28taW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWZpbHRlci1pdGVtLWRhdGVGaWVsZC1jb250ZW50XCIgKm5nSWY9XCJtb2RlID09PSBtb2Rlcy5EYXRlRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwibW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2NvLWlucHV0LWRhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1maWx0ZXItaXRlbS1kYXRlRmllbGQtY29udGVudFwiICpuZ0lmPVwibW9kZSA9PT0gbW9kZXMuRGF0ZVJhbmdlRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtZGF0ZS1yYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIltkYXRlUmFuZ2VTdGFydCwgZGF0ZVJhbmdlRW5kXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiaGFuZGxlTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFTEVDVF9EQVRFJyB8IGNvcmVMb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvY28taW5wdXQtZGF0ZS1yYW5nZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9jby1jb2xsYXBzaWJsZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVySXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIGljb25zOiB0eXBlb2YgQ29yZUNvbXBvbmVudHNJY29uID0gQ29yZUNvbXBvbmVudHNJY29uO1xyXG4gIHB1YmxpYyBtb2RlczogdHlwZW9mIEZpbHRlckl0ZW1Nb2RlID0gRmlsdGVySXRlbU1vZGU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBGaWx0ZXJJdGVtTW9kZSkge1xyXG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5yZWFkTW9kZWxGb3JNb2RlKHRoaXMuX21vZGVsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBGaWx0ZXJJdGVtTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjb2xsZWN0aW9uKHZhbHVlOiBGaWx0ZXJJdGVtVmlld21vZGVsW10pIHtcclxuICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB2YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uID0gdGhpcy5fY29sbGVjdGlvbj8uc2xpY2UoKTtcclxuICAgIC8vcmVzZXQgdGhlIG1vZGVsIGluIGNhc2UgdGhlcmUgd2FzIG5vIGNvbGxlY3Rpb24gdG8gc2V0IGl0cyB2YWx1ZXMgb24gd2hlbiBpdCB3YXMgc2V0LlxyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuX21vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb2xsZWN0aW9uKCk6IEZpbHRlckl0ZW1WaWV3bW9kZWxbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGluaXRpYWxMaW1pdDogbnVtYmVyID0gMTA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIG1pblNlYXJjaENoYXJzVG9Mb2FkQ29sbGVjdGlvbjogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjb2xsZWN0aW9uTG9hZEZuOiBGdW5jdGlvbjtcclxuXHJcbiAgLy8gU2V0IHRvIGZhbHNlIHRvIHVzZSBmaWx0ZXIgaXRlbSB3aXRoIGEgbXVsdGkgc2VsZWN0YWJsZSBjb2xsZWN0aW9uLiBTZXQgdG8gdHJ1ZSB0byBzcGVjaWZ5IGN1c3RvbSBjb250ZW50XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY3VzdG9tQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBTZXQgdG8gdHJ1ZSB0byBzaG93IGFsbCByZXN1bHRzLiBTZXQgdG8gZmFsc2UgdG8gZ2V0ICdzaG93IG1vcmUnIGFuZCAnc2hvdyBsZXNzJyBidXR0b25zIHRvIGV4cGFuZCBhbmQgY29udHJhY3QuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd0FsbFJlc3VsdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZmlsdGVyQnV0dG9uTGFiZWw6IHN0cmluZyA9IFwiU2VhcmNoXCI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoLi4uJztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd01vcmVMYWJlbDogc3RyaW5nID0gJ1Nob3cgbW9yZSc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dMZXNzTGFiZWw6IHN0cmluZyA9ICdTaG93IGxlc3MnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBub1Jlc3VsdHNMYWJlbDogc3RyaW5nID0gXCJObyByZXN1bHRzXCI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNsaWRlckRlZmF1bHRNaW46IG51bWJlciA9IDA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNsaWRlckRlZmF1bHRNYXg6IG51bWJlciA9IDEwMDAwMDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZnVsbFJhbmdlSXNOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBtb2RlbChuZXdNb2RlbDogYW55KSB7XHJcbiAgICB0aGlzLnJlYWRNb2RlbEZvck1vZGUobmV3TW9kZWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtb2RlbCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgY29sbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlckl0ZW1WaWV3bW9kZWxbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckl0ZW1WaWV3bW9kZWxbXT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGZpbHRlckJ1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tZmlsdGVyLWl0ZW1cIilcclxuXHJcbiAgcHVibGljIGZpbHRlcmVkQ29sbGVjdGlvbjogRmlsdGVySXRlbVZpZXdtb2RlbFtdID0gW107XHJcbiAgcHVibGljIGxpbWl0VG86IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBmaWx0ZXJUZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBzaG93QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vbW9kZWxzIGZvciB0aGUgc2xpZGVyIGZpZWxkIGlucHV0c1xyXG4gIHB1YmxpYyBzbGlkZXJNaW46IG51bWJlcjtcclxuICBwdWJsaWMgc2xpZGVyTWF4OiBudW1iZXI7XHJcblxyXG4gIC8vbW9kZWxzIGZvciB0aCBkYXRlcmFuZ2UgaW5wdXRcclxuICBwdWJsaWMgZGF0ZVJhbmdlU3RhcnQ6IERhdGU7XHJcbiAgcHVibGljIGRhdGVSYW5nZUVuZDogRGF0ZTtcclxuXHJcbiAgLy9tb2RlbCBmb3IgdGhlIHRleHRib3ggb3B0aW9ucyB0aGF0IG5lZWQgYSBjb252ZXJ0ZWQgb3V0cHV0XHJcbiAgcHVibGljIGNoZWNrQm94VG9UZXh0TW9kZWw6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb246IEZpbHRlckl0ZW1WaWV3bW9kZWxbXSA9IFtdO1xyXG4gIHByaXZhdGUgX21vZGU6IEZpbHRlckl0ZW1Nb2RlID0gdGhpcy5tb2Rlcy5GaWx0ZXJsaXN0O1xyXG4gIHByaXZhdGUgX21vZGVsOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpY29uU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0VG9Jbml0aWFsTGltaXQoKTtcclxuICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRoaXMudmFsdWVTZWxlY3RlZCgpO1xyXG4gICAgaWYodGhpcy5jaGVja0JveFRvVGV4dE1vZGVsID09PSB1bmRlZmluZWQgfHwgdGhpcy5jaGVja0JveFRvVGV4dE1vZGVsID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRvSW5pdGlhbExpbWl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5saW1pdFRvID0gdGhpcy5pbml0aWFsTGltaXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5jcmVhc2VMaW1pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubGltaXRUbyArPSAxMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3JlVG9TaG93KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuc2hvd0FsbFJlc3VsdHMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uPy5sZW5ndGggPiB0aGlzLmxpbWl0VG87XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGVzc1RvU2hvdygpIHtcclxuICAgIGlmICh0aGlzLnNob3dBbGxSZXN1bHRzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkQ29sbGVjdGlvbj8ubGVuZ3RoIDw9IHRoaXMubGltaXRUbyAmJiB0aGlzLmZpbHRlcmVkQ29sbGVjdGlvbj8ubGVuZ3RoID4gdGhpcy5pbml0aWFsTGltaXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW9kZWxDaGFuZ2UobW9kZWw6IGFueSkge1xyXG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkZpbHRlcmxpc3Q6XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBtb2RlbC5jaGVja2VkID0gIW1vZGVsLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JGaWx0ZXJMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TZWxlY3RMaXN0V2l0aFN0cmluZ0NvbGxlY3Rpb25PdXRwdXQ6XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBtb2RlbC5jaGVja2VkID0gIW1vZGVsLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2luZ2xlU2VsZWN0TGlzdDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudW5jaGVja0ZvclNpbmdsZVNlbGVjdChtb2RlbCk7XHJcbiAgICAgICAgbW9kZWwuY2hlY2tlZCA9ICFtb2RlbC5jaGVja2VkO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yU2luZ2xlU2VsZWN0TGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2VsZWN0TGlzdFdpdGhOdW1iZXJPdXRwdXQ6XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICBtb2RlbC5jaGVja2VkID0gIW1vZGVsLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2xpZGVyOlxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JTbGlkZXJNb2RlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5OdWxsYWJsZVNsaWRlcjpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yTnVsbGFibGVTbGlkZXJNb2RlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5DaGVja2JveFRvVGV4dDpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb1RleHQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9TaW1wbGVUZXh0OlxyXG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTW9kZWxGb3JDaGVja2JveFRvU2ltcGxlVGV4dCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuQ2hlY2tib3hUb0JpbmFyeTpcclxuICAgICAgICB0aGlzLnNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb0JpbmFyeSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuRGF0ZVJhbmdlRmllbGQ6XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9jcmVhdGVNb2RlbEZvckRhdGVSYW5nZShtb2RlbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5UZXh0RmllbGQ6XHJcbiAgICAgICAgdGhpcy5zaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9tb2RlbCA9ICh0eXBlb2YgdGhpcy5fbW9kZWwgPT09ICdzdHJpbmcnICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gMCkgPyB1bmRlZmluZWQgOiB0aGlzLl9tb2RlbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLl9tb2RlbCk7XHJcbiAgICB0aGlzLmNvbGxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmNvbGxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbHVlU2VsZWN0ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuY29sbGVjdGlvbi5maW5kKGMgPT4gYy5jaGVja2VkKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIEFwcGxpZXMgZmlsdGVyIHRvIHRoZSBjb2xsZWN0aW9uLlxyXG4gIHB1YmxpYyBhc3luYyBhcHBseUZpbHRlcih0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPFtdPiB7XHJcbiAgICBpZiAoIWlzTmFOKHRoaXMubWluU2VhcmNoQ2hhcnNUb0xvYWRDb2xsZWN0aW9uKSAmJiB0aGlzLmNvbGxlY3Rpb25Mb2FkRm4pIHtcclxuICAgICAgaWYgKHRleHQubGVuZ3RoID09PSB0aGlzLm1pblNlYXJjaENoYXJzVG9Mb2FkQ29sbGVjdGlvbiAmJiB0ZXh0Lmxlbmd0aCA+IHRoaXMuZmlsdGVyVGV4dC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25Mb2FkRm4odGV4dCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGV4dC5sZW5ndGggPCB0aGlzLm1pblNlYXJjaENoYXJzVG9Mb2FkQ29sbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5maWx0ZXJUZXh0ID0gdGV4dDtcclxuICAgIGlmICghdGhpcy5jb2xsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJUZXh0OiBzdHJpbmcgPSB0aGlzLmZpbHRlclRleHQ/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGxldCBmaWx0ZXJlZEl0ZW1Db3VudDogbnVtYmVyID0gMDtcclxuICAgIHRoaXMuZmlsdGVyZWRDb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uPy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgbGFiZWxUZXh0OiBzdHJpbmcgPSBpdGVtLmRlc2NyaXB0aW9uPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGlzSGlkZGVuQnlGaWx0ZXI6IGJvb2xlYW4gPSAobGFiZWxUZXh0Py5pbmRleE9mKGZpbHRlclRleHQpID09PSAtMSk7XHJcbiAgICAgIGlmIChpc0hpZGRlbkJ5RmlsdGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlcmVkSXRlbUNvdW50Kys7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQnV0dG9uQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVuY2hlY2tGb3JTaW5nbGVTZWxlY3QobW9kZWw6IEZpbHRlckl0ZW1WaWV3bW9kZWwpOiB2b2lkIHtcclxuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICBpZiAobS5jb2RlICE9PSBtb2RlbC5jb2RlICYmIG0uZGVzY3JpcHRpb24gIT09IG1vZGVsLmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkTW9kZWxGb3JNb2RlKG5ld01vZGVsOiBhbnkpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5GaWx0ZXJsaXN0OlxyXG4gICAgICAgIHRoaXMuX3JlYWRNb2RlbEZvckZpbHRlckxpc3QobmV3TW9kZWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuU2luZ2xlU2VsZWN0TGlzdDpcclxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JTaW5nbGVTZWxlY3RMaXN0KG5ld01vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLlNlbGVjdExpc3RXaXRoU3RyaW5nQ29sbGVjdGlvbk91dHB1dDpcclxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdChuZXdNb2RlbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dDpcclxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JTZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dChuZXdNb2RlbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5TbGlkZXI6XHJcbiAgICAgIGNhc2UgdGhpcy5tb2Rlcy5OdWxsYWJsZVNsaWRlcjpcclxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JTbGlkZXJNb2RlKG5ld01vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkNoZWNrYm94VG9UZXh0OlxyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuQ2hlY2tib3hUb1NpbXBsZVRleHQ6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yQ2hlY2tib3hUb1RleHQobmV3TW9kZWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuQ2hlY2tib3hUb0JpbmFyeTpcclxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JDaGVja2JveFRvQmluYXJ5KG5ld01vZGVsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLm1vZGVzLkRhdGVGaWVsZDpcclxuICAgICAgICB0aGlzLl9yZWFkTW9kZWxGb3JEYXRlRmllbGQobmV3TW9kZWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMubW9kZXMuRGF0ZVJhbmdlRmllbGQ6XHJcbiAgICAgICAgdGhpcy5fcmVhZE1vZGVsRm9yRGF0ZVJhbmdlRmllbGQobmV3TW9kZWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3TW9kZWw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAvL01vZGVsIGNyZWF0aW9uIGZvciBhbGwgb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGF2YWlsYWJsZS8vXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yRmlsdGVyTGlzdCgpOiB2b2lkIHtcclxuICAgIGxldCBmaWx0ZXJSYW5nZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICh0aGlzLmNvbGxlY3Rpb24gIT09IG51bGwgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHZpZXdNb2RlbDogRmlsdGVySXRlbVZpZXdtb2RlbCkgPT4ge1xyXG4gICAgICAgIGlmICh2aWV3TW9kZWwuY2hlY2tlZCkge1xyXG4gICAgICAgICAgZmlsdGVyUmFuZ2UucHVzaChgPz0nJHt2aWV3TW9kZWwuY29kZX0nYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGZpbHRlclJhbmdlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9tb2RlbCA9IGZpbHRlclJhbmdlLmpvaW4oJywnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9tb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JTdHJpbmdDb2xsZWN0aW9uTGlzdCgpOiB2b2lkIHtcclxuICAgIGxldCBmaWx0ZXJSYW5nZTogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKCh2aWV3TW9kZWw6IEZpbHRlckl0ZW1WaWV3bW9kZWwpID0+IHtcclxuICAgICAgaWYgKHZpZXdNb2RlbC5jaGVja2VkKSB7XHJcbiAgICAgICAgZmlsdGVyUmFuZ2UucHVzaCh2aWV3TW9kZWwuY29kZS50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoZmlsdGVyUmFuZ2UubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IGZpbHRlclJhbmdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvclNpbmdsZVNlbGVjdExpc3QoKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsdGVyU3RyaW5nOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHZpZXdNb2RlbDogRmlsdGVySXRlbVZpZXdtb2RlbCkgPT4ge1xyXG4gICAgICBpZiAodmlld01vZGVsLmNoZWNrZWQpIHtcclxuICAgICAgICBmaWx0ZXJTdHJpbmcgPSB2aWV3TW9kZWwuY29kZS50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChmaWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IGZpbHRlclN0cmluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JTZWxlY3RMaXN0V2l0aE51bWJlck91dHB1dCgpOiB2b2lkIHtcclxuICAgIGxldCBmaWx0ZXJOdW1iZXI6IG51bWJlciA9IG51bGw7XHJcbiAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgodmlld01vZGVsOiBGaWx0ZXJJdGVtVmlld21vZGVsKSA9PiB7XHJcbiAgICAgIGlmICh2aWV3TW9kZWwuY2hlY2tlZCkge1xyXG4gICAgICAgIGlmIChmaWx0ZXJOdW1iZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgZmlsdGVyTnVtYmVyID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsdGVyTnVtYmVyICs9IE51bWJlcih2aWV3TW9kZWwuY29kZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBmaWx0ZXJOdW1iZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvclNsaWRlck1vZGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNsaWRlck1pbiA9ICEhdGhpcy5zbGlkZXJNaW4gPyB0aGlzLnNsaWRlck1pbiA6IHRoaXMuc2xpZGVyRGVmYXVsdE1pbjtcclxuICAgIHRoaXMuc2xpZGVyTWF4ID0gISF0aGlzLnNsaWRlck1heCA/IHRoaXMuc2xpZGVyTWF4IDogdGhpcy5zbGlkZXJEZWZhdWx0TWF4O1xyXG5cclxuICAgIGxldCB0cnVlTG93ZXJCb3VuZCA9IE1hdGgubWluKHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XHJcbiAgICBsZXQgdHJ1ZVVwcGVyQm91bmQgPSBNYXRoLm1heCh0aGlzLnNsaWRlck1pbiwgdGhpcy5zbGlkZXJNYXgpO1xyXG5cclxuICAgIHRoaXMuc2xpZGVyTWluID0gdHJ1ZUxvd2VyQm91bmQ7XHJcbiAgICB0aGlzLnNsaWRlck1heCA9IHRydWVVcHBlckJvdW5kO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBgJHt0cnVlTG93ZXJCb3VuZH0gLSAke3RydWVVcHBlckJvdW5kfWA7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JOdWxsYWJsZVNsaWRlck1vZGUoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuc2xpZGVyTWluICYmIHRoaXMuc2xpZGVyTWF4KSB7XHJcbiAgICAgIGxldCB0cnVlTG93ZXJCb3VuZCA9IE1hdGgubWluKHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XHJcbiAgICAgIGxldCB0cnVlVXBwZXJCb3VuZCA9IE1hdGgubWF4KHRoaXMuc2xpZGVyTWluLCB0aGlzLnNsaWRlck1heCk7XHJcblxyXG4gICAgICB0aGlzLl9tb2RlbCA9IGAke3RydWVMb3dlckJvdW5kfSAtICR7dHJ1ZVVwcGVyQm91bmR9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb1RleHQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja0JveFRvVGV4dE1vZGVsKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gXCI/PSdKJ1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSBcIj89J04nXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVNb2RlbEZvckNoZWNrYm94VG9TaW1wbGVUZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCkge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IFwiSlwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSBcIk5cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZU1vZGVsRm9yQ2hlY2tib3hUb0JpbmFyeSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwpIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbW9kZWwgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTW9kZWxGb3JEYXRlUmFuZ2UoZGF0ZXM6IERhdGVbXSk6IHZvaWQge1xyXG4gICAgaWYgKGRhdGVzKSB7XHJcbiAgICAgIGxldCBzdGFydERhdGUgPSBkYXRlc1swXTtcclxuICAgICAgbGV0IGVuZERhdGUgPSBkYXRlc1sxXTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVJlcXVlc3QgPSBzdGFydERhdGUgPyB0aGlzLl9mb3JtYXREYXRlVG9TdHJpbmcoc3RhcnREYXRlKSA6ICcnO1xyXG4gICAgICBjb25zdCBlbmREYXRlUmVxdWVzdCA9IGVuZERhdGUgPyB0aGlzLl9mb3JtYXREYXRlVG9TdHJpbmcoZW5kRGF0ZSkgOiAnJztcclxuXHJcbiAgICAgIHRoaXMuX21vZGVsID0gYD8+PVxcJyR7c3RhcnREYXRlUmVxdWVzdH1cXCcmID88PVxcJyR7ZW5kRGF0ZVJlcXVlc3R9XFwnYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zvcm1hdERhdGVUb1N0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBkYXkgPSBkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBsZXQgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgbGV0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgcmV0dXJuIGAke2RheX0tJHttb250aH0tJHt5ZWFyfWA7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAvL01vZGVsIHJlYWRpbmcgZm9yIGFsbCBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXZhaWxhYmxlLy9cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JGaWx0ZXJMaXN0KGZpbHRlck1vZGVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBmaWx0ZXJMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGV0IGl0ZW1zVG9DaGVjazogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuX3VuY2hlY2tBbGwoKTtcclxuICAgIHRoaXMuX21vZGVsID0gZmlsdGVyTW9kZWw7XHJcblxyXG4gICAgaWYgKGZpbHRlck1vZGVsICE9PSBudWxsICYmIGZpbHRlck1vZGVsICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGZpbHRlck1vZGVsID09PSAnc3RyaW5nJyAmJiBmaWx0ZXJNb2RlbC5sZW5ndGggIT0gMCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IG51bGwgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZmlsdGVyTGlzdCA9IGZpbHRlck1vZGVsLnNwbGl0KFwiLFwiKVxyXG4gICAgICBmaWx0ZXJMaXN0LmZvckVhY2goKGZpbHRlcjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaXRlbXNUb0NoZWNrLnB1c2goZmlsdGVyLnN1YnN0cigzLCBmaWx0ZXIubGVuZ3RoIC0gNCkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtc1RvQ2hlY2spIHtcclxuICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5jb2xsZWN0aW9uLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvZGUudG9TdHJpbmcoKSA9PT0gaXRlbSk7XHJcbiAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCAmJiBmaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZmlsdGVyLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tb2RlbCA9IGZpbHRlck1vZGVsO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvclNpbmdsZVNlbGVjdExpc3Qoc2luZ2xlU2VsZWN0TW9kZWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdW5jaGVja0FsbCgpO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBzaW5nbGVTZWxlY3RNb2RlbDtcclxuXHJcbiAgICBpZiAoc2luZ2xlU2VsZWN0TW9kZWwgIT09IG51bGwgJiYgc2luZ2xlU2VsZWN0TW9kZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IG51bGwgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgbGV0IGZpbHRlciA9IHRoaXMuY29sbGVjdGlvbi5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5jb2RlLnRvU3RyaW5nKCkgPT09IHNpbmdsZVNlbGVjdE1vZGVsKTtcclxuICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCAmJiBmaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZpbHRlci5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yU3RyaW5nQ29sbGVjdGlvbkxpc3QoY29sbGVjdGlvbk1vZGVsOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdW5jaGVja0FsbCgpO1xyXG4gICAgdGhpcy5fbW9kZWwgPSBjb2xsZWN0aW9uTW9kZWw7XHJcblxyXG4gICAgaWYgKGNvbGxlY3Rpb25Nb2RlbCAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uTW9kZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IG51bGwgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKHZpZXdNb2RlbDogRmlsdGVySXRlbVZpZXdtb2RlbCkgPT4ge1xyXG4gICAgICAgIGlmIChjb2xsZWN0aW9uTW9kZWwuaW5kZXhPZih2aWV3TW9kZWwuY29kZS50b1N0cmluZygpKSA+IC0xKSB7XHJcbiAgICAgICAgICB2aWV3TW9kZWwuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZpZXdNb2RlbC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvclNlbGVjdExpc3RXaXRoTnVtYmVyT3V0cHV0KG51bWJlck1vZGVsOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3VuY2hlY2tBbGwoKTtcclxuICAgIHRoaXMuX21vZGVsID0gbnVtYmVyTW9kZWw7XHJcblxyXG4gICAgaWYgKG51bWJlck1vZGVsICE9PSBudWxsICYmIG51bWJlck1vZGVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb2xsZWN0aW9uICE9PSBudWxsICYmIHRoaXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICBjb25zdCBpdGVtQ29kZTogbnVtYmVyID0gaXRlbS5jb2RlIGFzIG51bWJlcjtcclxuICAgICAgICBjb25zdCBtb2RWYWx1ZSA9IChudW1iZXJNb2RlbCAlICgyICogaXRlbUNvZGUpKTtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSAobW9kVmFsdWUgPj0gaXRlbUNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91bmNoZWNrQWxsKCkge1xyXG4gICAgaWYgKHRoaXMuY29sbGVjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChtID0+IHtcclxuICAgICAgICBtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWFkTW9kZWxGb3JTbGlkZXJNb2RlKHNsaWRlck1vZGVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGVsID0gc2xpZGVyTW9kZWw7XHJcbiAgICBpZiAoc2xpZGVyTW9kZWwgIT09IHVuZGVmaW5lZCAmJiBzbGlkZXJNb2RlbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgc2xpZGVySW5wdXRDb2xsZWN0aW9uID0gc2xpZGVyTW9kZWwuc3BsaXQoJyAtICcpO1xyXG4gICAgICB0aGlzLnNsaWRlck1pbiA9IHBhcnNlSW50KHNsaWRlcklucHV0Q29sbGVjdGlvblswXSk7XHJcbiAgICAgIHRoaXMuc2xpZGVyTWF4ID0gcGFyc2VJbnQoc2xpZGVySW5wdXRDb2xsZWN0aW9uWzFdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2xpZGVyTWluID0gdGhpcy5zbGlkZXJEZWZhdWx0TWluO1xyXG4gICAgICB0aGlzLnNsaWRlck1heCA9IHRoaXMuc2xpZGVyRGVmYXVsdE1heDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlYWRNb2RlbEZvckNoZWNrYm94VG9UZXh0KGNoZWNrYm94VG9UZXh0TW9kZWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fbW9kZWwgPSBjaGVja2JveFRvVGV4dE1vZGVsO1xyXG4gICAgaWYgKGNoZWNrYm94VG9UZXh0TW9kZWwgIT09IHVuZGVmaW5lZCAmJiBjaGVja2JveFRvVGV4dE1vZGVsICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IChjaGVja2JveFRvVGV4dE1vZGVsLmluZGV4T2YoJ0onKSA+IC0xKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yQ2hlY2tib3hUb0JpbmFyeShjaGVja2JveFRvQmluYXJ5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGVsID0gY2hlY2tib3hUb0JpbmFyeTtcclxuICAgIGlmIChjaGVja2JveFRvQmluYXJ5ICE9PSB1bmRlZmluZWQgJiYgY2hlY2tib3hUb0JpbmFyeSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmNoZWNrQm94VG9UZXh0TW9kZWwgPSAoY2hlY2tib3hUb0JpbmFyeSA+PSAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hlY2tCb3hUb1RleHRNb2RlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yRGF0ZUZpZWxkKGRhdGVGaWVsZE1vZGVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGVsID0gZGF0ZUZpZWxkTW9kZWw7XHJcbiAgICBpZiAoZGF0ZUZpZWxkTW9kZWwgIT09IHVuZGVmaW5lZCAmJiBkYXRlRmllbGRNb2RlbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9tb2RlbCA9IG5ldyBEYXRlKGRhdGVGaWVsZE1vZGVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhZE1vZGVsRm9yRGF0ZVJhbmdlRmllbGQoZGF0ZVJhbmdlRmllbGRNb2RlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tb2RlbCA9IGRhdGVSYW5nZUZpZWxkTW9kZWw7XHJcbiAgICBpZiAoZGF0ZVJhbmdlRmllbGRNb2RlbCAhPT0gdW5kZWZpbmVkICYmIGRhdGVSYW5nZUZpZWxkTW9kZWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGRhdGVDb2xsZWN0aW9uID0gZGF0ZVJhbmdlRmllbGRNb2RlbC5zcGxpdCgnJicpO1xyXG5cclxuICAgICAgbGV0IHN0YXJ0U3RyaW5nID0gZGF0ZUNvbGxlY3Rpb25bMF0udHJpbSgpLnN1YnN0cig0LCBkYXRlQ29sbGVjdGlvblswXS5sZW5ndGggLSA1KTtcclxuICAgICAgbGV0IGVuZFN0cmluZyA9IGRhdGVDb2xsZWN0aW9uWzFdLnRyaW0oKS5zdWJzdHIoNCwgZGF0ZUNvbGxlY3Rpb25bMV0ubGVuZ3RoIC0gNSk7XHJcblxyXG4gICAgICBsZXQgc3RhcnREYXRlQ29tcG9uZW50cyA9IHN0YXJ0U3RyaW5nLnNwbGl0KCctJyk7XHJcbiAgICAgIGxldCBlbmREYXRlQ29tcG9uZW50cyA9IGVuZFN0cmluZy5zcGxpdCgnLScpO1xyXG5cclxuICAgICAgdGhpcy5kYXRlUmFuZ2VTdGFydCA9IG5ldyBEYXRlKHBhcnNlSW50KHN0YXJ0RGF0ZUNvbXBvbmVudHNbMl0pLCBwYXJzZUludChzdGFydERhdGVDb21wb25lbnRzWzFdKSAtIDEsIHBhcnNlSW50KHN0YXJ0RGF0ZUNvbXBvbmVudHNbMF0pKTtcclxuICAgICAgdGhpcy5kYXRlUmFuZ2VFbmQgPSBuZXcgRGF0ZShwYXJzZUludChlbmREYXRlQ29tcG9uZW50c1syXSksIHBhcnNlSW50KGVuZERhdGVDb21wb25lbnRzWzFdKSAtIDEsIHBhcnNlSW50KGVuZERhdGVDb21wb25lbnRzWzBdKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGVSYW5nZVN0YXJ0ID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmRhdGVSYW5nZUVuZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19