@igo2/common 1.8.1 → 1.9.3

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 (344) hide show
  1. package/bundles/igo2-common.umd.js +10700 -10473
  2. package/bundles/igo2-common.umd.js.map +1 -1
  3. package/esm2015/igo2-common.js +5 -5
  4. package/esm2015/lib/action/action.module.js +29 -28
  5. package/esm2015/lib/action/actionbar/actionbar-item.component.js +257 -257
  6. package/esm2015/lib/action/actionbar/actionbar.component.js +385 -387
  7. package/esm2015/lib/action/actionbar/actionbar.module.js +59 -58
  8. package/esm2015/lib/action/index.js +3 -3
  9. package/esm2015/lib/action/shared/action.enums.js +7 -7
  10. package/esm2015/lib/action/shared/action.interfaces.js +2 -1
  11. package/esm2015/lib/action/shared/index.js +4 -4
  12. package/esm2015/lib/action/shared/store.js +8 -8
  13. package/esm2015/lib/backdrop/backdrop.component.js +30 -30
  14. package/esm2015/lib/backdrop/backdrop.module.js +25 -24
  15. package/esm2015/lib/backdrop/index.js +2 -2
  16. package/esm2015/lib/badge-icon/badge-icon.directive.js +125 -121
  17. package/esm2015/lib/badge-icon/badge-icon.module.js +26 -25
  18. package/esm2015/lib/badge-icon/index.js +2 -2
  19. package/esm2015/lib/clickout/clickout.directive.js +32 -32
  20. package/esm2015/lib/clickout/clickout.module.js +24 -23
  21. package/esm2015/lib/clickout/index.js +2 -2
  22. package/esm2015/lib/clone/clone.module.js +24 -23
  23. package/esm2015/lib/clone/clone.pipe.js +24 -24
  24. package/esm2015/lib/clone/index.js +2 -2
  25. package/esm2015/lib/collapsible/collapse.directive.js +55 -55
  26. package/esm2015/lib/collapsible/collapsible.component.js +63 -63
  27. package/esm2015/lib/collapsible/collapsible.module.js +27 -26
  28. package/esm2015/lib/collapsible/index.js +3 -3
  29. package/esm2015/lib/confirm-dialog/confirm-dialog.component.js +50 -51
  30. package/esm2015/lib/confirm-dialog/confirm-dialog.module.js +29 -28
  31. package/esm2015/lib/confirm-dialog/confirm-dialog.service.js +22 -23
  32. package/esm2015/lib/confirm-dialog/index.js +3 -3
  33. package/esm2015/lib/context-menu/context-menu.directive.js +135 -89
  34. package/esm2015/lib/context-menu/context-menu.module.js +24 -23
  35. package/esm2015/lib/context-menu/index.js +2 -2
  36. package/esm2015/lib/custom-html/custom-html.component.js +32 -32
  37. package/esm2015/lib/custom-html/custom-html.module.js +49 -48
  38. package/esm2015/lib/custom-html/custom-html.pipe.js +18 -19
  39. package/esm2015/lib/custom-html/index.js +3 -3
  40. package/esm2015/lib/drag-drop/drag-drop.directive.js +88 -88
  41. package/esm2015/lib/drag-drop/drag-drop.module.js +24 -23
  42. package/esm2015/lib/drag-drop/index.js +2 -2
  43. package/esm2015/lib/dynamic-component/dynamic-component.module.js +33 -32
  44. package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.js +124 -125
  45. package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.js +30 -29
  46. package/esm2015/lib/dynamic-component/index.js +3 -3
  47. package/esm2015/lib/dynamic-component/shared/dynamic-component.interfaces.js +2 -1
  48. package/esm2015/lib/dynamic-component/shared/dynamic-component.js +174 -174
  49. package/esm2015/lib/dynamic-component/shared/dynamic-component.service.js +29 -29
  50. package/esm2015/lib/dynamic-component/shared/index.js +4 -4
  51. package/esm2015/lib/entity/entity-selector/entity-selector.component.js +201 -202
  52. package/esm2015/lib/entity/entity-selector/entity-selector.module.js +34 -33
  53. package/esm2015/lib/entity/entity-table/entity-table-row.directive.js +137 -137
  54. package/esm2015/lib/entity/entity-table/entity-table.component.js +912 -916
  55. package/esm2015/lib/entity/entity-table/entity-table.module.js +77 -76
  56. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.component.js +138 -140
  57. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.interface.js +2 -1
  58. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.module.js +30 -29
  59. package/esm2015/lib/entity/entity.module.js +33 -32
  60. package/esm2015/lib/entity/index.js +6 -6
  61. package/esm2015/lib/entity/shared/entity.enums.js +27 -27
  62. package/esm2015/lib/entity/shared/entity.interfaces.js +2 -1
  63. package/esm2015/lib/entity/shared/entity.utils.js +67 -67
  64. package/esm2015/lib/entity/shared/index.js +10 -10
  65. package/esm2015/lib/entity/shared/state.js +191 -191
  66. package/esm2015/lib/entity/shared/store.js +288 -288
  67. package/esm2015/lib/entity/shared/strategies/filter-custom-function.js +79 -79
  68. package/esm2015/lib/entity/shared/strategies/filter-selection.js +84 -84
  69. package/esm2015/lib/entity/shared/strategies/index.js +4 -4
  70. package/esm2015/lib/entity/shared/strategies/strategy.js +75 -75
  71. package/esm2015/lib/entity/shared/transaction.js +316 -316
  72. package/esm2015/lib/entity/shared/view.js +315 -315
  73. package/esm2015/lib/entity/shared/watcher.js +120 -120
  74. package/esm2015/lib/flexible/flexible.component.js +158 -159
  75. package/esm2015/lib/flexible/flexible.module.js +24 -23
  76. package/esm2015/lib/flexible/flexible.type.js +2 -1
  77. package/esm2015/lib/flexible/index.js +3 -3
  78. package/esm2015/lib/form/form/form.component.js +125 -125
  79. package/esm2015/lib/form/form/form.module.js +42 -41
  80. package/esm2015/lib/form/form-field/form-field-select.component.js +132 -132
  81. package/esm2015/lib/form/form-field/form-field-text.component.js +108 -108
  82. package/esm2015/lib/form/form-field/form-field-textarea.component.js +110 -110
  83. package/esm2015/lib/form/form-field/form-field.component.js +77 -78
  84. package/esm2015/lib/form/form-field/form-field.module.js +76 -75
  85. package/esm2015/lib/form/form-field/index.js +5 -5
  86. package/esm2015/lib/form/form-group/form-group.component.js +110 -110
  87. package/esm2015/lib/form/form-group/form-group.module.js +42 -41
  88. package/esm2015/lib/form/form.module.js +51 -50
  89. package/esm2015/lib/form/index.js +5 -5
  90. package/esm2015/lib/form/shared/form-field-component.js +7 -7
  91. package/esm2015/lib/form/shared/form-field.service.js +29 -29
  92. package/esm2015/lib/form/shared/form.interfaces.js +2 -1
  93. package/esm2015/lib/form/shared/form.service.js +77 -77
  94. package/esm2015/lib/form/shared/form.utils.js +40 -40
  95. package/esm2015/lib/form/shared/index.js +6 -6
  96. package/esm2015/lib/home-button/home-button.component.js +35 -0
  97. package/esm2015/lib/home-button/home-button.module.js +43 -0
  98. package/esm2015/lib/home-button/index.js +2 -0
  99. package/esm2015/lib/image/image.module.js +24 -23
  100. package/esm2015/lib/image/index.js +2 -2
  101. package/esm2015/lib/image/secure-image.pipe.js +48 -51
  102. package/esm2015/lib/interactive-tour/index.js +5 -5
  103. package/esm2015/lib/interactive-tour/interactive-tour.component.js +140 -142
  104. package/esm2015/lib/interactive-tour/interactive-tour.interface.js +2 -1
  105. package/esm2015/lib/interactive-tour/interactive-tour.loader.js +44 -46
  106. package/esm2015/lib/interactive-tour/interactive-tour.module.js +42 -41
  107. package/esm2015/lib/interactive-tour/interactive-tour.service.js +285 -288
  108. package/esm2015/lib/json-dialog/index.js +3 -3
  109. package/esm2015/lib/json-dialog/json-dialog.component.js +116 -117
  110. package/esm2015/lib/json-dialog/json-dialog.module.js +29 -28
  111. package/esm2015/lib/json-dialog/json-dialog.service.js +24 -25
  112. package/esm2015/lib/keyvalue/index.js +2 -2
  113. package/esm2015/lib/keyvalue/keyvalue.module.js +24 -23
  114. package/esm2015/lib/keyvalue/keyvalue.pipe.js +18 -18
  115. package/esm2015/lib/list/index.js +3 -3
  116. package/esm2015/lib/list/list-item.directive.js +165 -165
  117. package/esm2015/lib/list/list.component.js +266 -266
  118. package/esm2015/lib/list/list.module.js +29 -28
  119. package/esm2015/lib/panel/index.js +2 -2
  120. package/esm2015/lib/panel/panel.component.js +67 -67
  121. package/esm2015/lib/panel/panel.module.js +19 -18
  122. package/esm2015/lib/sidenav/index.js +2 -2
  123. package/esm2015/lib/sidenav/sidenav-shim.directive.js +55 -56
  124. package/esm2015/lib/sidenav/sidenav.module.js +24 -23
  125. package/esm2015/lib/spinner/index.js +3 -3
  126. package/esm2015/lib/spinner/spinner-activity.directive.js +47 -49
  127. package/esm2015/lib/spinner/spinner.component.js +40 -40
  128. package/esm2015/lib/spinner/spinner.module.js +21 -20
  129. package/esm2015/lib/stop-propagation/index.js +3 -3
  130. package/esm2015/lib/stop-propagation/stop-drop-propagation.directive.js +22 -22
  131. package/esm2015/lib/stop-propagation/stop-propagation.directive.js +21 -21
  132. package/esm2015/lib/stop-propagation/stop-propagation.module.js +25 -24
  133. package/esm2015/lib/table/index.js +6 -6
  134. package/esm2015/lib/table/table-action-color.enum.js +7 -7
  135. package/esm2015/lib/table/table-database.js +28 -28
  136. package/esm2015/lib/table/table-datasource.js +61 -61
  137. package/esm2015/lib/table/table-model.interface.js +2 -1
  138. package/esm2015/lib/table/table.component.js +310 -311
  139. package/esm2015/lib/table/table.module.js +69 -68
  140. package/esm2015/lib/tool/index.js +3 -3
  141. package/esm2015/lib/tool/shared/index.js +6 -6
  142. package/esm2015/lib/tool/shared/tool-component.js +9 -9
  143. package/esm2015/lib/tool/shared/tool.interface.js +2 -1
  144. package/esm2015/lib/tool/shared/tool.service.js +43 -43
  145. package/esm2015/lib/tool/shared/toolbox.enums.js +7 -7
  146. package/esm2015/lib/tool/shared/toolbox.js +179 -179
  147. package/esm2015/lib/tool/tool.module.js +34 -33
  148. package/esm2015/lib/tool/toolbox/toolbox.animation.js +10 -10
  149. package/esm2015/lib/tool/toolbox/toolbox.component.js +261 -262
  150. package/esm2015/lib/tool/toolbox/toolbox.module.js +38 -37
  151. package/esm2015/lib/widget/index.js +3 -3
  152. package/esm2015/lib/widget/shared/index.js +4 -4
  153. package/esm2015/lib/widget/shared/widget.interfaces.js +2 -1
  154. package/esm2015/lib/widget/shared/widget.js +4 -4
  155. package/esm2015/lib/widget/shared/widget.service.js +20 -21
  156. package/esm2015/lib/widget/widget-outlet/widget-outlet.component.js +121 -122
  157. package/esm2015/lib/widget/widget-outlet/widget-outlet.module.js +34 -33
  158. package/esm2015/lib/widget/widget.module.js +34 -33
  159. package/esm2015/lib/workspace/index.js +4 -4
  160. package/esm2015/lib/workspace/shared/index.js +4 -4
  161. package/esm2015/lib/workspace/shared/store.js +40 -40
  162. package/esm2015/lib/workspace/shared/workspace.interfaces.js +2 -1
  163. package/esm2015/lib/workspace/shared/workspace.js +117 -117
  164. package/esm2015/lib/workspace/workspace-selector/workspace-selector.component.js +54 -55
  165. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +34 -33
  166. package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.js +93 -94
  167. package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.js +34 -33
  168. package/esm2015/lib/workspace/workspace.module.js +29 -28
  169. package/esm2015/public_api.js +72 -70
  170. package/fesm2015/igo2-common.js +9015 -8846
  171. package/fesm2015/igo2-common.js.map +1 -1
  172. package/igo2-common.d.ts +5 -5
  173. package/lib/action/action.module.d.ts +8 -7
  174. package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
  175. package/lib/action/actionbar/actionbar.component.d.ts +146 -146
  176. package/lib/action/actionbar/actionbar.module.d.ts +20 -19
  177. package/lib/action/index.d.ts +2 -2
  178. package/lib/action/shared/action.enums.d.ts +5 -5
  179. package/lib/action/shared/action.interfaces.d.ts +17 -17
  180. package/lib/action/shared/index.d.ts +3 -3
  181. package/lib/action/shared/store.d.ts +8 -8
  182. package/lib/backdrop/backdrop.component.d.ts +9 -9
  183. package/lib/backdrop/backdrop.module.d.ts +10 -9
  184. package/lib/backdrop/index.d.ts +1 -1
  185. package/lib/badge-icon/badge-icon.directive.d.ts +32 -27
  186. package/lib/badge-icon/badge-icon.module.d.ts +11 -10
  187. package/lib/badge-icon/index.d.ts +1 -1
  188. package/lib/clickout/clickout.directive.d.ts +10 -10
  189. package/lib/clickout/clickout.module.d.ts +9 -8
  190. package/lib/clickout/index.d.ts +1 -1
  191. package/lib/clone/clone.module.d.ts +9 -8
  192. package/lib/clone/clone.pipe.d.ts +7 -7
  193. package/lib/clone/index.d.ts +1 -1
  194. package/lib/collapsible/collapse.directive.d.ts +19 -19
  195. package/lib/collapsible/collapsible.component.d.ts +13 -13
  196. package/lib/collapsible/collapsible.module.d.ts +12 -11
  197. package/lib/collapsible/index.d.ts +2 -2
  198. package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
  199. package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -11
  200. package/lib/confirm-dialog/confirm-dialog.service.d.ts +10 -10
  201. package/lib/confirm-dialog/index.d.ts +2 -2
  202. package/lib/context-menu/context-menu.directive.d.ts +27 -21
  203. package/lib/context-menu/context-menu.module.d.ts +9 -8
  204. package/lib/context-menu/index.d.ts +1 -1
  205. package/lib/custom-html/custom-html.component.d.ts +9 -9
  206. package/lib/custom-html/custom-html.module.d.ts +16 -15
  207. package/lib/custom-html/custom-html.pipe.d.ts +10 -10
  208. package/lib/custom-html/index.d.ts +2 -2
  209. package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
  210. package/lib/drag-drop/drag-drop.module.d.ts +9 -8
  211. package/lib/drag-drop/index.d.ts +1 -1
  212. package/lib/dynamic-component/dynamic-component.module.d.ts +8 -7
  213. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
  214. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -10
  215. package/lib/dynamic-component/index.d.ts +2 -2
  216. package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
  217. package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
  218. package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
  219. package/lib/dynamic-component/shared/index.d.ts +3 -3
  220. package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
  221. package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -12
  222. package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
  223. package/lib/entity/entity-table/entity-table.component.d.ts +275 -275
  224. package/lib/entity/entity-table/entity-table.module.d.ts +23 -22
  225. package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
  226. package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
  227. package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -10
  228. package/lib/entity/entity.module.d.ts +10 -9
  229. package/lib/entity/index.d.ts +5 -5
  230. package/lib/entity/shared/entity.enums.d.ts +22 -22
  231. package/lib/entity/shared/entity.interfaces.d.ts +88 -88
  232. package/lib/entity/shared/entity.utils.d.ts +49 -49
  233. package/lib/entity/shared/index.d.ts +9 -9
  234. package/lib/entity/shared/state.d.ts +103 -103
  235. package/lib/entity/shared/store.d.ts +176 -176
  236. package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
  237. package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
  238. package/lib/entity/shared/strategies/index.d.ts +3 -3
  239. package/lib/entity/shared/strategies/strategy.d.ts +56 -56
  240. package/lib/entity/shared/transaction.d.ts +168 -168
  241. package/lib/entity/shared/view.d.ts +193 -193
  242. package/lib/entity/shared/watcher.d.ts +72 -72
  243. package/lib/flexible/flexible.component.d.ts +41 -41
  244. package/lib/flexible/flexible.module.d.ts +9 -8
  245. package/lib/flexible/flexible.type.d.ts +2 -2
  246. package/lib/flexible/index.d.ts +2 -2
  247. package/lib/form/form/form.component.d.ts +53 -53
  248. package/lib/form/form/form.module.d.ts +12 -11
  249. package/lib/form/form-field/form-field-select.component.d.ts +48 -48
  250. package/lib/form/form-field/form-field-text.component.d.ts +41 -41
  251. package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
  252. package/lib/form/form-field/form-field.component.d.ts +34 -34
  253. package/lib/form/form-field/form-field.module.d.ts +21 -20
  254. package/lib/form/form-field/index.d.ts +4 -4
  255. package/lib/form/form-group/form-group.component.d.ts +49 -49
  256. package/lib/form/form-group/form-group.module.d.ts +14 -13
  257. package/lib/form/form.module.d.ts +13 -12
  258. package/lib/form/index.d.ts +4 -4
  259. package/lib/form/shared/form-field-component.d.ts +1 -1
  260. package/lib/form/shared/form-field.service.d.ts +19 -19
  261. package/lib/form/shared/form.interfaces.d.ts +57 -57
  262. package/lib/form/shared/form.service.d.ts +15 -15
  263. package/lib/form/shared/form.utils.d.ts +11 -11
  264. package/lib/form/shared/index.d.ts +5 -5
  265. package/lib/home-button/home-button.component.d.ts +9 -0
  266. package/lib/home-button/home-button.module.d.ts +15 -0
  267. package/lib/home-button/index.d.ts +1 -0
  268. package/lib/image/image.module.d.ts +9 -8
  269. package/lib/image/index.d.ts +1 -1
  270. package/lib/image/secure-image.pipe.d.ts +11 -11
  271. package/lib/interactive-tour/index.d.ts +4 -4
  272. package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
  273. package/lib/interactive-tour/interactive-tour.interface.d.ts +32 -32
  274. package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
  275. package/lib/interactive-tour/interactive-tour.module.d.ts +12 -11
  276. package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
  277. package/lib/json-dialog/index.d.ts +2 -2
  278. package/lib/json-dialog/json-dialog.component.d.ts +13 -13
  279. package/lib/json-dialog/json-dialog.module.d.ts +13 -12
  280. package/lib/json-dialog/json-dialog.service.d.ts +10 -10
  281. package/lib/keyvalue/index.d.ts +1 -1
  282. package/lib/keyvalue/keyvalue.module.d.ts +9 -8
  283. package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
  284. package/lib/list/index.d.ts +2 -2
  285. package/lib/list/list-item.directive.d.ts +43 -43
  286. package/lib/list/list.component.d.ts +51 -51
  287. package/lib/list/list.module.d.ts +14 -13
  288. package/lib/panel/index.d.ts +1 -1
  289. package/lib/panel/panel.component.d.ts +11 -11
  290. package/lib/panel/panel.module.d.ts +8 -7
  291. package/lib/sidenav/index.d.ts +1 -1
  292. package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
  293. package/lib/sidenav/sidenav.module.d.ts +9 -8
  294. package/lib/spinner/index.d.ts +2 -2
  295. package/lib/spinner/spinner-activity.directive.d.ts +32 -32
  296. package/lib/spinner/spinner.component.d.ts +12 -12
  297. package/lib/spinner/spinner.module.d.ts +10 -9
  298. package/lib/stop-propagation/index.d.ts +2 -2
  299. package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
  300. package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
  301. package/lib/stop-propagation/stop-propagation.module.d.ts +10 -9
  302. package/lib/table/index.d.ts +5 -5
  303. package/lib/table/table-action-color.enum.d.ts +5 -5
  304. package/lib/table/table-database.d.ts +10 -10
  305. package/lib/table/table-datasource.d.ts +17 -17
  306. package/lib/table/table-model.interface.d.ts +28 -28
  307. package/lib/table/table.component.d.ts +40 -40
  308. package/lib/table/table.module.d.ts +20 -19
  309. package/lib/tool/index.d.ts +2 -2
  310. package/lib/tool/shared/index.d.ts +5 -5
  311. package/lib/tool/shared/tool-component.d.ts +2 -2
  312. package/lib/tool/shared/tool.interface.d.ts +18 -18
  313. package/lib/tool/shared/tool.service.d.ts +30 -30
  314. package/lib/tool/shared/toolbox.d.ts +95 -95
  315. package/lib/tool/shared/toolbox.enums.d.ts +5 -5
  316. package/lib/tool/tool.module.d.ts +10 -9
  317. package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
  318. package/lib/tool/toolbox/toolbox.component.d.ts +127 -127
  319. package/lib/tool/toolbox/toolbox.module.d.ts +13 -12
  320. package/lib/widget/index.d.ts +2 -2
  321. package/lib/widget/shared/index.d.ts +3 -3
  322. package/lib/widget/shared/widget.d.ts +4 -4
  323. package/lib/widget/shared/widget.interfaces.d.ts +12 -12
  324. package/lib/widget/shared/widget.service.d.ts +10 -10
  325. package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
  326. package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -11
  327. package/lib/widget/widget.module.d.ts +8 -7
  328. package/lib/workspace/index.d.ts +3 -3
  329. package/lib/workspace/shared/index.d.ts +3 -3
  330. package/lib/workspace/shared/store.d.ts +20 -20
  331. package/lib/workspace/shared/workspace.d.ts +108 -108
  332. package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
  333. package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +35 -35
  334. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -11
  335. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
  336. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -11
  337. package/lib/workspace/workspace.module.d.ts +9 -8
  338. package/package.json +8 -7
  339. package/public_api.d.ts +68 -66
  340. package/style/common.theming.scss +12 -236
  341. package/style/partial/action.scss +18 -18
  342. package/style/partial/common.variables.scss +8 -8
  343. package/bundles/igo2-common.umd.min.js +0 -17
  344. package/bundles/igo2-common.umd.min.js.map +0 -1
@@ -1,916 +1,912 @@
1
- import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { EntityStore, EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
4
- import { MatPaginator } from '@angular/material/paginator';
5
- import { MatTableDataSource } from '@angular/material/table';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/material/table";
8
- import * as i2 from "@angular/material/sort";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "@angular/material/checkbox";
11
- import * as i5 from "@angular/material/icon";
12
- import * as i6 from "@angular/material/button";
13
- import * as i7 from "../../stop-propagation/stop-propagation.directive";
14
- import * as i8 from "./entity-table-row.directive";
15
- import * as i9 from "../entity-table-paginator/entity-table-paginator.component";
16
- import * as i10 from "../../image/secure-image.pipe";
17
- import * as i11 from "@ngx-translate/core";
18
- import * as i12 from "../../custom-html/custom-html.pipe";
19
- function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
20
- const _r10 = i0.ɵɵgetCurrentView();
21
- i0.ɵɵelementContainerStart(0);
22
- i0.ɵɵelementStart(1, "mat-checkbox", 11);
23
- i0.ɵɵlistener("change", function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return ctx_r9.onToggleRows($event.checked); });
24
- i0.ɵɵelementEnd();
25
- i0.ɵɵelementContainerEnd();
26
- } if (rf & 2) {
27
- const selectionState_r8 = ctx.ngIf;
28
- const ctx_r7 = i0.ɵɵnextContext(3);
29
- i0.ɵɵadvance(1);
30
- i0.ɵɵproperty("checked", selectionState_r8 === ctx_r7.entityTableSelectionState.All)("indeterminate", selectionState_r8 === ctx_r7.entityTableSelectionState.Some);
31
- } }
32
- function EntityTableComponent_th_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵelementContainerStart(0);
34
- i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_ng_container_1_Template, 2, 2, "ng-container", 10);
35
- i0.ɵɵpipe(2, "async");
36
- i0.ɵɵelementContainerEnd();
37
- } if (rf & 2) {
38
- const ctx_r6 = i0.ɵɵnextContext(2);
39
- i0.ɵɵadvance(1);
40
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r6.selectionState$));
41
- } }
42
- function EntityTableComponent_th_3_Template(rf, ctx) { if (rf & 1) {
43
- i0.ɵɵelementStart(0, "th", 9);
44
- i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_Template, 3, 3, "ng-container", 10);
45
- i0.ɵɵelementEnd();
46
- } if (rf & 2) {
47
- const ctx_r0 = i0.ɵɵnextContext();
48
- i0.ɵɵadvance(1);
49
- i0.ɵɵproperty("ngIf", ctx_r0.selectMany);
50
- } }
51
- function EntityTableComponent_td_4_Template(rf, ctx) { if (rf & 1) {
52
- const _r13 = i0.ɵɵgetCurrentView();
53
- i0.ɵɵelementStart(0, "td", 12);
54
- i0.ɵɵelementStart(1, "mat-checkbox", 13);
55
- i0.ɵɵlistener("mousedown", function EntityTableComponent_td_4_Template_mat_checkbox_mousedown_1_listener($event) { i0.ɵɵrestoreView(_r13); return $event.shiftKey ? $event.preventDefault() : null; })("click", function EntityTableComponent_td_4_Template_mat_checkbox_click_1_listener($event) { i0.ɵɵrestoreView(_r13); const record_r11 = ctx.$implicit; const ctx_r14 = i0.ɵɵnextContext(); return $event.shiftKey ? ctx_r14.onShiftToggleRow(!ctx_r14.rowIsSelected(record_r11), record_r11, $event) : $event.stopPropagation(); })("change", function EntityTableComponent_td_4_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r13); const record_r11 = ctx.$implicit; const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.onToggleRow($event.checked, record_r11); });
56
- i0.ɵɵelementEnd();
57
- i0.ɵɵelementEnd();
58
- } if (rf & 2) {
59
- const record_r11 = ctx.$implicit;
60
- const ctx_r1 = i0.ɵɵnextContext();
61
- i0.ɵɵadvance(1);
62
- i0.ɵɵproperty("checked", ctx_r1.rowIsSelected(record_r11));
63
- } }
64
- function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵelementStart(0, "th", 16);
66
- i0.ɵɵtext(1);
67
- i0.ɵɵelementEnd();
68
- } if (rf & 2) {
69
- const column_r16 = i0.ɵɵnextContext(2).$implicit;
70
- i0.ɵɵadvance(1);
71
- i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
72
- } }
73
- function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
74
- i0.ɵɵelementContainerStart(0);
75
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 1, "th", 15);
76
- i0.ɵɵelementContainerEnd();
77
- } }
78
- function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
79
- i0.ɵɵelementStart(0, "th", 9);
80
- i0.ɵɵtext(1);
81
- i0.ɵɵelementEnd();
82
- } if (rf & 2) {
83
- const column_r16 = i0.ɵɵnextContext(2).$implicit;
84
- i0.ɵɵadvance(1);
85
- i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
86
- } }
87
- function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
88
- i0.ɵɵelementContainerStart(0);
89
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 1, "th", 3);
90
- i0.ɵɵelementContainerEnd();
91
- } }
92
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
93
- i0.ɵɵelementStart(0, "td", 20);
94
- i0.ɵɵtext(1);
95
- i0.ɵɵelementEnd();
96
- } if (rf & 2) {
97
- const record_r31 = i0.ɵɵnextContext().$implicit;
98
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
99
- const ctx_r32 = i0.ɵɵnextContext();
100
- i0.ɵɵproperty("ngClass", ctx_r32.getCellClass(record_r31, column_r16));
101
- i0.ɵɵadvance(1);
102
- i0.ɵɵtextInterpolate1(" ", ctx_r32.getValue(record_r31, column_r16), " ");
103
- } }
104
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
105
- i0.ɵɵelement(0, "img", 24);
106
- i0.ɵɵpipe(1, "async");
107
- i0.ɵɵpipe(2, "secureImage");
108
- } if (rf & 2) {
109
- const record_r31 = i0.ɵɵnextContext(2).$implicit;
110
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
111
- const ctx_r37 = i0.ɵɵnextContext();
112
- i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r37.getValue(record_r31, column_r16))), i0.ɵɵsanitizeUrl);
113
- } }
114
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelementStart(0, "span");
116
- i0.ɵɵtext(1);
117
- i0.ɵɵpipe(2, "translate");
118
- i0.ɵɵelementEnd();
119
- } if (rf & 2) {
120
- i0.ɵɵadvance(1);
121
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
122
- } }
123
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
124
- const _r43 = i0.ɵɵgetCurrentView();
125
- i0.ɵɵelementStart(0, "td", 20);
126
- i0.ɵɵelementStart(1, "a", 21);
127
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r43); return $event.stopPropagation(); });
128
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
129
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
130
- i0.ɵɵelementEnd();
131
- i0.ɵɵelementEnd();
132
- } if (rf & 2) {
133
- const _r38 = i0.ɵɵreference(4);
134
- const record_r31 = i0.ɵɵnextContext().$implicit;
135
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
136
- const ctx_r34 = i0.ɵɵnextContext();
137
- i0.ɵɵproperty("ngClass", ctx_r34.getCellClass(record_r31, column_r16));
138
- i0.ɵɵadvance(1);
139
- i0.ɵɵpropertyInterpolate("href", ctx_r34.getValue(record_r31, column_r16), i0.ɵɵsanitizeUrl);
140
- i0.ɵɵadvance(1);
141
- i0.ɵɵproperty("ngIf", ctx_r34.isImg(ctx_r34.getValue(record_r31, column_r16)))("ngIfElse", _r38);
142
- } }
143
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
144
- i0.ɵɵelementContainerStart(0);
145
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 18);
146
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 19, i0.ɵɵtemplateRefExtractor);
147
- i0.ɵɵelementContainerEnd();
148
- } if (rf & 2) {
149
- const record_r31 = ctx.$implicit;
150
- const _r33 = i0.ɵɵreference(3);
151
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
152
- const ctx_r30 = i0.ɵɵnextContext();
153
- i0.ɵɵadvance(1);
154
- i0.ɵɵproperty("ngIf", !ctx_r30.isUrl(ctx_r30.getValue(record_r31, column_r16)))("ngIfElse", _r33);
155
- } }
156
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
157
- i0.ɵɵelementContainerStart(0);
158
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 17);
159
- i0.ɵɵelementContainerEnd();
160
- } }
161
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
162
- i0.ɵɵelement(0, "td", 27);
163
- } if (rf & 2) {
164
- const record_r48 = i0.ɵɵnextContext().$implicit;
165
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
166
- const ctx_r49 = i0.ɵɵnextContext();
167
- i0.ɵɵproperty("ngClass", ctx_r49.getCellClass(record_r48, column_r16))("innerHTML", ctx_r49.getValue(record_r48, column_r16), i0.ɵɵsanitizeHtml);
168
- } }
169
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
170
- i0.ɵɵelement(0, "img", 24);
171
- i0.ɵɵpipe(1, "async");
172
- i0.ɵɵpipe(2, "secureImage");
173
- } if (rf & 2) {
174
- const record_r48 = i0.ɵɵnextContext(2).$implicit;
175
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
176
- const ctx_r54 = i0.ɵɵnextContext();
177
- i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r54.getValue(record_r48, column_r16))), i0.ɵɵsanitizeUrl);
178
- } }
179
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
180
- i0.ɵɵelementStart(0, "span");
181
- i0.ɵɵtext(1);
182
- i0.ɵɵpipe(2, "translate");
183
- i0.ɵɵelementEnd();
184
- } if (rf & 2) {
185
- i0.ɵɵadvance(1);
186
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
187
- } }
188
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
189
- const _r60 = i0.ɵɵgetCurrentView();
190
- i0.ɵɵelementStart(0, "td", 20);
191
- i0.ɵɵelementStart(1, "a", 21);
192
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r60); return $event.stopPropagation(); });
193
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
194
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
195
- i0.ɵɵelementEnd();
196
- i0.ɵɵelementEnd();
197
- } if (rf & 2) {
198
- const _r55 = i0.ɵɵreference(4);
199
- const record_r48 = i0.ɵɵnextContext().$implicit;
200
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
201
- const ctx_r51 = i0.ɵɵnextContext();
202
- i0.ɵɵproperty("ngClass", ctx_r51.getCellClass(record_r48, column_r16));
203
- i0.ɵɵadvance(1);
204
- i0.ɵɵpropertyInterpolate("href", ctx_r51.getValue(record_r48, column_r16), i0.ɵɵsanitizeUrl);
205
- i0.ɵɵadvance(1);
206
- i0.ɵɵproperty("ngIf", ctx_r51.isImg(ctx_r51.getValue(record_r48, column_r16)))("ngIfElse", _r55);
207
- } }
208
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
209
- i0.ɵɵelementContainerStart(0);
210
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 25);
211
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 26, i0.ɵɵtemplateRefExtractor);
212
- i0.ɵɵelementContainerEnd();
213
- } if (rf & 2) {
214
- const record_r48 = ctx.$implicit;
215
- const _r50 = i0.ɵɵreference(3);
216
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
217
- const ctx_r47 = i0.ɵɵnextContext();
218
- i0.ɵɵadvance(1);
219
- i0.ɵɵproperty("ngIf", !ctx_r47.isUrl(ctx_r47.getValue(record_r48, column_r16)))("ngIfElse", _r50);
220
- } }
221
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
222
- i0.ɵɵelementContainerStart(0);
223
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 17);
224
- i0.ɵɵelementContainerEnd();
225
- } }
226
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
227
- i0.ɵɵelement(0, "td", 27);
228
- i0.ɵɵpipe(1, "sanitizeHtml");
229
- } if (rf & 2) {
230
- const record_r65 = i0.ɵɵnextContext().$implicit;
231
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
232
- const ctx_r66 = i0.ɵɵnextContext();
233
- i0.ɵɵproperty("ngClass", ctx_r66.getCellClass(record_r65, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r66.getValue(record_r65, column_r16)), i0.ɵɵsanitizeHtml);
234
- } }
235
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
236
- i0.ɵɵelement(0, "img", 24);
237
- i0.ɵɵpipe(1, "async");
238
- i0.ɵɵpipe(2, "secureImage");
239
- } if (rf & 2) {
240
- const record_r65 = i0.ɵɵnextContext(2).$implicit;
241
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
242
- const ctx_r71 = i0.ɵɵnextContext();
243
- i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r71.getValue(record_r65, column_r16))), i0.ɵɵsanitizeUrl);
244
- } }
245
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
246
- i0.ɵɵelementStart(0, "span");
247
- i0.ɵɵtext(1);
248
- i0.ɵɵpipe(2, "translate");
249
- i0.ɵɵelementEnd();
250
- } if (rf & 2) {
251
- i0.ɵɵadvance(1);
252
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
253
- } }
254
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
255
- const _r77 = i0.ɵɵgetCurrentView();
256
- i0.ɵɵelementStart(0, "td", 20);
257
- i0.ɵɵelementStart(1, "a", 21);
258
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r77); return $event.stopPropagation(); });
259
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
260
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
261
- i0.ɵɵelementEnd();
262
- i0.ɵɵelementEnd();
263
- } if (rf & 2) {
264
- const _r72 = i0.ɵɵreference(4);
265
- const record_r65 = i0.ɵɵnextContext().$implicit;
266
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
267
- const ctx_r68 = i0.ɵɵnextContext();
268
- i0.ɵɵproperty("ngClass", ctx_r68.getCellClass(record_r65, column_r16));
269
- i0.ɵɵadvance(1);
270
- i0.ɵɵpropertyInterpolate("href", ctx_r68.getValue(record_r65, column_r16), i0.ɵɵsanitizeUrl);
271
- i0.ɵɵadvance(1);
272
- i0.ɵɵproperty("ngIf", ctx_r68.isImg(ctx_r68.getValue(record_r65, column_r16)))("ngIfElse", _r72);
273
- } }
274
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
275
- i0.ɵɵelementContainerStart(0);
276
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 2, 4, "td", 25);
277
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
278
- i0.ɵɵelementContainerEnd();
279
- } if (rf & 2) {
280
- const record_r65 = ctx.$implicit;
281
- const _r67 = i0.ɵɵreference(3);
282
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
283
- const ctx_r64 = i0.ɵɵnextContext();
284
- i0.ɵɵadvance(1);
285
- i0.ɵɵproperty("ngIf", !ctx_r64.isUrl(ctx_r64.getValue(record_r65, column_r16)))("ngIfElse", _r67);
286
- } }
287
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
288
- i0.ɵɵelementContainerStart(0);
289
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 17);
290
- i0.ɵɵelementContainerEnd();
291
- } }
292
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
293
- i0.ɵɵelementStart(0, "td", 20);
294
- i0.ɵɵelement(1, "mat-icon", 30);
295
- i0.ɵɵelementEnd();
296
- } if (rf & 2) {
297
- const record_r82 = ctx.$implicit;
298
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
299
- const ctx_r81 = i0.ɵɵnextContext();
300
- i0.ɵɵproperty("ngClass", ctx_r81.getCellClass(record_r82, column_r16));
301
- i0.ɵɵadvance(1);
302
- i0.ɵɵpropertyInterpolate("svgIcon", ctx_r81.getValue(record_r82, column_r16));
303
- } }
304
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
305
- i0.ɵɵelementContainerStart(0);
306
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 2, 2, "td", 29);
307
- i0.ɵɵelementContainerEnd();
308
- } }
309
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template(rf, ctx) { if (rf & 1) {
310
- const _r92 = i0.ɵɵgetCurrentView();
311
- i0.ɵɵelementStart(0, "button", 34);
312
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r92); const button_r87 = i0.ɵɵnextContext().$implicit; const record_r85 = i0.ɵɵnextContext().$implicit; const ctx_r90 = i0.ɵɵnextContext(4); return ctx_r90.onButtonClick(button_r87.click, record_r85); });
313
- i0.ɵɵelement(1, "mat-icon", 30);
314
- i0.ɵɵelementEnd();
315
- } if (rf & 2) {
316
- const button_r87 = i0.ɵɵnextContext().$implicit;
317
- i0.ɵɵproperty("color", button_r87.color);
318
- i0.ɵɵadvance(1);
319
- i0.ɵɵpropertyInterpolate("svgIcon", button_r87.icon);
320
- } }
321
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template(rf, ctx) { if (rf & 1) {
322
- const _r97 = i0.ɵɵgetCurrentView();
323
- i0.ɵɵelementStart(0, "button", 35);
324
- i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r97); const button_r87 = i0.ɵɵnextContext().$implicit; const record_r85 = i0.ɵɵnextContext().$implicit; const ctx_r95 = i0.ɵɵnextContext(4); return ctx_r95.onButtonClick(button_r87.click, record_r85); });
325
- i0.ɵɵelement(1, "mat-icon", 30);
326
- i0.ɵɵelementEnd();
327
- } if (rf & 2) {
328
- const button_r87 = i0.ɵɵnextContext().$implicit;
329
- i0.ɵɵproperty("color", button_r87.color);
330
- i0.ɵɵadvance(1);
331
- i0.ɵɵpropertyInterpolate("svgIcon", button_r87.icon);
332
- } }
333
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_Template(rf, ctx) { if (rf & 1) {
334
- i0.ɵɵelementStart(0, "span");
335
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template, 2, 2, "button", 32);
336
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template, 2, 2, "button", 33);
337
- i0.ɵɵelementEnd();
338
- } if (rf & 2) {
339
- const button_r87 = ctx.$implicit;
340
- i0.ɵɵadvance(1);
341
- i0.ɵɵproperty("ngIf", button_r87.style === "mat-icon-button");
342
- i0.ɵɵadvance(1);
343
- i0.ɵɵproperty("ngIf", button_r87.style !== "mat-icon-button");
344
- } }
345
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_Template(rf, ctx) { if (rf & 1) {
346
- i0.ɵɵelementStart(0, "td", 20);
347
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_Template, 3, 2, "span", 31);
348
- i0.ɵɵelementEnd();
349
- } if (rf & 2) {
350
- const record_r85 = ctx.$implicit;
351
- const column_r16 = i0.ɵɵnextContext(3).$implicit;
352
- const ctx_r84 = i0.ɵɵnextContext();
353
- i0.ɵɵproperty("ngClass", ctx_r84.getCellClass(record_r85, column_r16));
354
- i0.ɵɵadvance(1);
355
- i0.ɵɵproperty("ngForOf", ctx_r84.getValue(record_r85, column_r16));
356
- } }
357
- function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
358
- i0.ɵɵelementContainerStart(0);
359
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_Template, 2, 2, "td", 29);
360
- i0.ɵɵelementContainerEnd();
361
- } }
362
- function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
363
- i0.ɵɵelementContainerStart(0);
364
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template, 2, 0, "ng-container", 10);
365
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template, 2, 0, "ng-container", 10);
366
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template, 2, 0, "ng-container", 10);
367
- i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template, 2, 0, "ng-container", 10);
368
- i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template, 2, 0, "ng-container", 10);
369
- i0.ɵɵelementContainerEnd();
370
- } if (rf & 2) {
371
- const columnRenderer_r24 = ctx.ngIf;
372
- const ctx_r19 = i0.ɵɵnextContext(2);
373
- i0.ɵɵadvance(1);
374
- i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Default);
375
- i0.ɵɵadvance(1);
376
- i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.HTML);
377
- i0.ɵɵadvance(1);
378
- i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.UnsanitizedHTML);
379
- i0.ɵɵadvance(1);
380
- i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Icon);
381
- i0.ɵɵadvance(1);
382
- i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.ButtonGroup);
383
- } }
384
- function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
385
- i0.ɵɵelementContainerStart(0, 14);
386
- i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_Template, 2, 0, "ng-container", 10);
387
- i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_2_Template, 2, 0, "ng-container", 10);
388
- i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_Template, 6, 5, "ng-container", 10);
389
- i0.ɵɵelementContainerEnd();
390
- } if (rf & 2) {
391
- const column_r16 = ctx.$implicit;
392
- const ctx_r2 = i0.ɵɵnextContext();
393
- i0.ɵɵproperty("matColumnDef", column_r16.name);
394
- i0.ɵɵadvance(1);
395
- i0.ɵɵproperty("ngIf", ctx_r2.columnIsSortable(column_r16));
396
- i0.ɵɵadvance(1);
397
- i0.ɵɵproperty("ngIf", !ctx_r2.columnIsSortable(column_r16));
398
- i0.ɵɵadvance(1);
399
- i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
400
- } }
401
- function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
402
- i0.ɵɵelement(0, "tr", 36);
403
- } if (rf & 2) {
404
- const ctx_r3 = i0.ɵɵnextContext();
405
- i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
406
- } }
407
- function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
408
- const _r103 = i0.ɵɵgetCurrentView();
409
- i0.ɵɵelementStart(0, "tr", 37);
410
- i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { i0.ɵɵrestoreView(_r103); const record_r101 = ctx.$implicit; const ctx_r102 = i0.ɵɵnextContext(); return ctx_r102.onRowSelect(record_r101); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { i0.ɵɵrestoreView(_r103); const record_r101 = ctx.$implicit; const ctx_r104 = i0.ɵɵnextContext(); return ctx_r104.onRowClick(record_r101); });
411
- i0.ɵɵelementEnd();
412
- } if (rf & 2) {
413
- const record_r101 = ctx.$implicit;
414
- const ctx_r4 = i0.ɵɵnextContext();
415
- i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r101))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r101));
416
- } }
417
- function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
418
- const _r106 = i0.ɵɵgetCurrentView();
419
- i0.ɵɵelementStart(0, "igo-entity-table-paginator", 38);
420
- i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r106); const ctx_r105 = i0.ɵɵnextContext(); return ctx_r105.paginatorChange($event); });
421
- i0.ɵɵelementEnd();
422
- } if (rf & 2) {
423
- const ctx_r5 = i0.ɵɵnextContext();
424
- i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
425
- } }
426
- export class EntityTableComponent {
427
- constructor(cdRef) {
428
- this.cdRef = cdRef;
429
- this.entitySortChange$ = new BehaviorSubject(false);
430
- /**
431
- * Reference to the column renderer types
432
- * @internal
433
- */
434
- this.entityTableColumnRenderer = EntityTableColumnRenderer;
435
- /**
436
- * Reference to the selection's state
437
- * @internal
438
- */
439
- this.entityTableSelectionState = EntityTableSelectionState;
440
- /**
441
- * Observable of the selection,s state
442
- * @internal
443
- */
444
- this.selectionState$ = new BehaviorSubject(undefined);
445
- /**
446
- * Scroll behavior on selection
447
- */
448
- this.scrollBehavior = EntityTableScrollBehavior.Auto;
449
- /**
450
- * Whether nulls should be first when sorting
451
- */
452
- this.sortNullsFirst = false;
453
- /**
454
- * Show the table paginator or not. False by default.
455
- */
456
- this.withPaginator = false;
457
- /**
458
- * Event emitted when an entity (row) is clicked
459
- */
460
- this.entityClick = new EventEmitter();
461
- /**
462
- * Event emitted when an entity (row) is selected
463
- */
464
- this.entitySelectChange = new EventEmitter();
465
- /**
466
- * Event emitted when the table sort is changed.
467
- */
468
- this.entitySortChange = new EventEmitter(undefined);
469
- /**
470
- * Data source consumable by the underlying material table
471
- * @internal
472
- */
473
- this.dataSource = new MatTableDataSource();
474
- }
475
- /**
476
- * Table paginator
477
- */
478
- set paginator(value) {
479
- this._paginator = value;
480
- this.dataSource.paginator = value;
481
- }
482
- get paginator() {
483
- return this._paginator;
484
- }
485
- /**
486
- * Table headers
487
- * @internal
488
- */
489
- get headers() {
490
- let columns = this.template.columns
491
- .filter((column) => column.visible !== false)
492
- .map((column) => column.name);
493
- if (this.selectionCheckbox === true) {
494
- columns = ['selectionCheckbox'].concat(columns);
495
- }
496
- return columns;
497
- }
498
- /**
499
- * Whether selection is supported
500
- * @internal
501
- */
502
- get selection() { return this.template.selection || false; }
503
- /**
504
- * Whether a selection checkbox should be displayed
505
- * @internal
506
- */
507
- get selectionCheckbox() { return this.template.selectionCheckbox || false; }
508
- /**
509
- * Whether selection many entities should eb supported
510
- * @internal
511
- */
512
- get selectMany() { return this.template.selectMany || false; }
513
- /**
514
- * Whether selection many entities should eb supported
515
- * @internal
516
- */
517
- get fixedHeader() { return this.template.fixedHeader === undefined ? true : this.template.fixedHeader; }
518
- /**
519
- * Track the selection state to properly display the selection checkboxes
520
- * @internal
521
- */
522
- ngOnInit() {
523
- this.handleDatasource();
524
- this.dataSource.paginator = this.paginator;
525
- }
526
- /**
527
- * @internal
528
- */
529
- ngOnChanges(changes) {
530
- const store = changes.store;
531
- if (store && store.currentValue !== store.previousValue) {
532
- this.handleDatasource();
533
- }
534
- }
535
- handleDatasource() {
536
- this.unsubscribeStore();
537
- this.selection$$ = this.store.stateView
538
- .manyBy$((record) => record.state.selected === true)
539
- .subscribe((records) => {
540
- const firstSelected = records[0];
541
- const firstSelectedStateviewPosition = this.store.stateView.all().indexOf(firstSelected);
542
- const pageMax = this.paginator ? this.paginator.pageSize * (this.paginator.pageIndex + 1) : 0;
543
- const pageMin = this.paginator ? pageMax - this.paginator.pageSize : 0;
544
- if (this.paginator &&
545
- (firstSelectedStateviewPosition < pageMin ||
546
- firstSelectedStateviewPosition >= pageMax)) {
547
- const pageToReach = Math.floor(firstSelectedStateviewPosition / this.paginator.pageSize);
548
- this.dataSource.paginator.pageIndex = pageToReach;
549
- }
550
- this.selectionState$.next(this.computeSelectionState(records));
551
- });
552
- this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {
553
- this.dataSource.data = all;
554
- });
555
- }
556
- /**
557
- * Unbind the store watcher
558
- * @internal
559
- */
560
- ngOnDestroy() {
561
- this.unsubscribeStore();
562
- }
563
- unsubscribeStore() {
564
- if (this.selection$$) {
565
- this.selection$$.unsubscribe();
566
- }
567
- if (this.dataSource$$) {
568
- this.dataSource$$.unsubscribe();
569
- }
570
- }
571
- /**
572
- * Trackby function
573
- * @param record Record
574
- * @param index Record index
575
- * @internal
576
- */
577
- getTrackByFunction() {
578
- return (index, record) => {
579
- return record.ref;
580
- };
581
- }
582
- /**
583
- * Trigger a refresh of thre table. This can be useful when
584
- * the data source doesn't emit a new value but for some reason
585
- * the records need an update.
586
- * @internal
587
- */
588
- refresh() {
589
- this.cdRef.detectChanges();
590
- }
591
- paginatorChange(event) {
592
- this.paginator = event;
593
- }
594
- /**
595
- * On sort, sort the store
596
- * @param event Sort event
597
- * @internal
598
- */
599
- onSort(event) {
600
- const direction = event.direction;
601
- const column = this.template.columns
602
- .find((c) => c.name === event.active);
603
- if (direction === 'asc' || direction === 'desc') {
604
- this.store.stateView.sort({
605
- valueAccessor: (record) => this.getValue(record, column),
606
- direction,
607
- nullsFirst: this.sortNullsFirst
608
- });
609
- this.entitySortChange.emit({ column, direction });
610
- this.entitySortChange$.next(true);
611
- }
612
- else {
613
- this.store.stateView.sort(undefined);
614
- }
615
- }
616
- /**
617
- * When an entity is clicked, emit an event
618
- * @param record Record
619
- * @internal
620
- */
621
- onRowClick(record) {
622
- this.lastRecordCheckedKey = this.store.stateView.getKey(record);
623
- this.entityClick.emit(record.entity);
624
- }
625
- /**
626
- * When an entity is selected, select it in the store and emit an event. Even if
627
- * "many" is set to true, this method always select a single, exclusive row. Selecting
628
- * multiple rows should be achieved by using the checkboxes.
629
- * @param record Record
630
- * @internal
631
- */
632
- onRowSelect(record) {
633
- if (this.selection === false) {
634
- return;
635
- }
636
- const entity = record.entity;
637
- this.store.state.update(entity, { selected: true }, true);
638
- this.entitySelectChange.emit({ added: [entity] });
639
- }
640
- /**
641
- * Select or unselect all rows at once. On select, emit an event.
642
- * @param toggle Select or unselect
643
- * @internal
644
- */
645
- onToggleRows(toggle) {
646
- if (this.selection === false) {
647
- return;
648
- }
649
- this.store.state.updateAll({ selected: toggle });
650
- if (toggle === true) {
651
- const entities = this.store.stateView
652
- .all()
653
- .map((record) => record.entity);
654
- this.entitySelectChange.emit({ added: [entities] });
655
- }
656
- }
657
- /**
658
- * When an entity is toggled, select or unselect it in the store. On select,
659
- * emit an event.
660
- * @param toggle Select or unselect
661
- * @param record Record
662
- * @internal
663
- */
664
- onToggleRow(toggle, record) {
665
- if (this.selection === false) {
666
- return;
667
- }
668
- const entity = record.entity;
669
- const exclusive = toggle === true && !this.selectMany;
670
- this.store.state.update(entity, { selected: toggle }, exclusive);
671
- if (toggle === true) {
672
- this.entitySelectChange.emit({ added: [entity] });
673
- }
674
- this.lastRecordCheckedKey = this.store.stateView.getKey(record);
675
- }
676
- /**
677
- * When an entity is toggled, select or unselect it in the store. On select,
678
- * emit an event.
679
- * @param toggle Select or unselect
680
- * @param record Record
681
- * @internal
682
- */
683
- onShiftToggleRow(toggle, record, event) {
684
- if (this.selection === false) {
685
- return;
686
- }
687
- if (this.selectMany === false || this.lastRecordCheckedKey === undefined) {
688
- this.onToggleRow(toggle, record);
689
- return;
690
- }
691
- // This is a workaround mat checkbox wrong behavior
692
- // when the shift key is held.
693
- // See https://github.com/angular/components/issues/6232
694
- const range = window.document.createRange();
695
- range.selectNode(event.target);
696
- window.getSelection().removeAllRanges();
697
- window.getSelection().addRange(range);
698
- event.stopImmediatePropagation();
699
- const records = this.store.stateView.all();
700
- const recordIndex = records.indexOf(record);
701
- const lastRecordChecked = this.store.stateView.get(this.lastRecordCheckedKey);
702
- const lastRecordIndex = records.indexOf(lastRecordChecked);
703
- const indexes = [recordIndex, lastRecordIndex];
704
- const selectRecords = records.slice(Math.min(...indexes), Math.max(...indexes) + 1);
705
- const entities = selectRecords.map((_record) => _record.entity);
706
- this.store.state.updateMany(entities, { selected: toggle });
707
- if (toggle === true) {
708
- this.entitySelectChange.emit({ added: entities });
709
- }
710
- this.lastRecordCheckedKey = this.store.stateView.getKey(record);
711
- }
712
- /**
713
- * Compute the selection state
714
- * @returns Whether all, some or no rows are selected
715
- * @internal
716
- */
717
- computeSelectionState(selectedRecords) {
718
- const states = EntityTableSelectionState;
719
- const selectionCount = selectedRecords.length;
720
- return selectionCount === 0 ?
721
- states.None :
722
- (selectionCount === this.store.stateView.count ? states.All : states.Some);
723
- }
724
- /**
725
- * Whether a column is sortable
726
- * @param column Column
727
- * @returns True if a column is sortable
728
- * @internal
729
- */
730
- columnIsSortable(column) {
731
- let sortable = column.sort;
732
- if (sortable === undefined) {
733
- sortable = this.template.sort === undefined ? false : this.template.sort;
734
- }
735
- return sortable;
736
- }
737
- /**
738
- * Whether a row is should be selected based on the underlying entity state
739
- * @param record Record
740
- * @returns True if a row should be selected
741
- * @internal
742
- */
743
- rowIsSelected(record) {
744
- const state = record.state;
745
- return state.selected ? state.selected : false;
746
- }
747
- isImg(value) {
748
- if (this.isUrl(value)) {
749
- return (['jpg', 'png', 'gif'].indexOf(value.split('.').pop().toLowerCase()) !== -1);
750
- }
751
- else {
752
- return false;
753
- }
754
- }
755
- isUrl(value) {
756
- if (typeof value === 'string') {
757
- return (value.slice(0, 8) === 'https://' || value.slice(0, 7) === 'http://');
758
- }
759
- else {
760
- return false;
761
- }
762
- }
763
- /**
764
- * Method to access an entity's values
765
- * @param record Record
766
- * @param column Column
767
- * @returns Any value
768
- * @internal
769
- */
770
- getValue(record, column) {
771
- const entity = record.entity;
772
- if (column.valueAccessor !== undefined) {
773
- return column.valueAccessor(entity, record);
774
- }
775
- if (this.template.valueAccessor !== undefined) {
776
- return this.template.valueAccessor(entity, column.name, record);
777
- }
778
- return this.store.getProperty(entity, column.name);
779
- }
780
- /**
781
- * Return the type of renderer of a column
782
- * @param column Column
783
- * @returns Renderer type
784
- * @internal
785
- */
786
- getColumnRenderer(column) {
787
- if (column.renderer !== undefined) {
788
- return column.renderer;
789
- }
790
- return EntityTableColumnRenderer.Default;
791
- }
792
- /**
793
- * Return the table ngClass
794
- * @returns ngClass
795
- * @internal
796
- */
797
- getTableClass() {
798
- return {
799
- 'igo-entity-table-with-selection': this.selection
800
- };
801
- }
802
- /**
803
- * Return a header ngClass
804
- * @returns ngClass
805
- * @internal
806
- */
807
- getHeaderClass() {
808
- const func = this.template.headerClassFunc;
809
- if (func instanceof Function) {
810
- return func();
811
- }
812
- return {};
813
- }
814
- /**
815
- * Return a row ngClass
816
- * @param record Record
817
- * @returns ngClass
818
- * @internal
819
- */
820
- getRowClass(record) {
821
- const entity = record.entity;
822
- const func = this.template.rowClassFunc;
823
- if (func instanceof Function) {
824
- return func(entity, record);
825
- }
826
- return {};
827
- }
828
- /**
829
- * Return a row ngClass
830
- * @param record Record
831
- * @param column Column
832
- * @returns ngClass
833
- * @internal
834
- */
835
- getCellClass(record, column) {
836
- const entity = record.entity;
837
- const cls = {};
838
- const tableFunc = this.template.cellClassFunc;
839
- if (tableFunc instanceof Function) {
840
- Object.assign(cls, tableFunc(entity, column, record));
841
- }
842
- const columnFunc = column.cellClassFunc;
843
- if (columnFunc instanceof Function) {
844
- Object.assign(cls, columnFunc(entity, record));
845
- }
846
- return cls;
847
- }
848
- /**
849
- * When a button is clicked
850
- * @param func Function
851
- * @param record Record
852
- * @internal
853
- */
854
- onButtonClick(clickFunc, record) {
855
- if (typeof clickFunc === 'function') {
856
- clickFunc(record.entity, record);
857
- }
858
- }
859
- }
860
- EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
861
- EntityTableComponent.ɵcmp = i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", ""], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "click"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "click"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
862
- i0.ɵɵelementStart(0, "div", 0);
863
- i0.ɵɵelementStart(1, "table", 1);
864
- i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
865
- i0.ɵɵelementContainerStart(2, 2);
866
- i0.ɵɵtemplate(3, EntityTableComponent_th_3_Template, 2, 1, "th", 3);
867
- i0.ɵɵtemplate(4, EntityTableComponent_td_4_Template, 2, 1, "td", 4);
868
- i0.ɵɵelementContainerEnd();
869
- i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_Template, 4, 4, "ng-container", 5);
870
- i0.ɵɵtemplate(6, EntityTableComponent_tr_6_Template, 1, 1, "tr", 6);
871
- i0.ɵɵtemplate(7, EntityTableComponent_tr_7_Template, 1, 4, "tr", 7);
872
- i0.ɵɵelementEnd();
873
- i0.ɵɵtemplate(8, EntityTableComponent_igo_entity_table_paginator_8_Template, 1, 3, "igo-entity-table-paginator", 8);
874
- i0.ɵɵelementEnd();
875
- } if (rf & 2) {
876
- i0.ɵɵadvance(1);
877
- i0.ɵɵproperty("ngClass", ctx.getTableClass())("dataSource", ctx.dataSource)("trackBy", ctx.getTrackByFunction());
878
- i0.ɵɵadvance(4);
879
- i0.ɵɵproperty("ngForOf", ctx.template.columns);
880
- i0.ɵɵadvance(1);
881
- i0.ɵɵproperty("matHeaderRowDef", ctx.headers)("matHeaderRowDefSticky", ctx.fixedHeader);
882
- i0.ɵɵadvance(1);
883
- i0.ɵɵproperty("matRowDefColumns", ctx.headers);
884
- i0.ɵɵadvance(1);
885
- i0.ɵɵproperty("ngIf", ctx.withPaginator);
886
- } }, directives: [i1.MatTable, i2.MatSort, i3.NgClass, i1.MatColumnDef, i1.MatHeaderCellDef, i1.MatCellDef, i3.NgForOf, i1.MatHeaderRowDef, i1.MatRowDef, i3.NgIf, i1.MatHeaderCell, i4.MatCheckbox, i1.MatCell, i2.MatSortHeader, i5.MatIcon, i6.MatButton, i7.StopPropagationDirective, i1.MatHeaderRow, i1.MatRow, i8.EntityTableRowDirective, i9.EntityTablePaginatorComponent], pipes: [i3.AsyncPipe, i10.SecureImagePipe, i11.TranslatePipe, i12.SanitizeHtmlPipe], styles: ["[_nghost-%COMP%]{display:block;height:100%;width:100%}.table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple, .table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%]{height:36px}.table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple, .table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%]{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex:1 1 auto;flex-direction:column;height:100%;overflow:auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%], th.mat-header-cell[_ngcontent-%COMP%]{padding:0 3px}entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0 2px 0 #ddd;box-shadow:2px 0 2px 0 #ddd;cursor:pointer}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}"], changeDetection: 0 });
887
- /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(EntityTableComponent, [{
888
- type: Component,
889
- args: [{
890
- selector: 'igo-entity-table',
891
- templateUrl: './entity-table.component.html',
892
- styleUrls: ['./entity-table.component.scss'],
893
- changeDetection: ChangeDetectionStrategy.OnPush
894
- }]
895
- }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { store: [{
896
- type: Input
897
- }], paginator: [{
898
- type: Input
899
- }], template: [{
900
- type: Input
901
- }], scrollBehavior: [{
902
- type: Input
903
- }], sortNullsFirst: [{
904
- type: Input
905
- }], withPaginator: [{
906
- type: Input
907
- }], paginatorOptions: [{
908
- type: Input
909
- }], entityClick: [{
910
- type: Output
911
- }], entitySelectChange: [{
912
- type: Output
913
- }], entitySortChange: [{
914
- type: Output
915
- }] }); })();
916
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvc3J2L2FwcHMvaWdvMi1saWIvcGFja2FnZXMvY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9lbnRpdHkvZW50aXR5LXRhYmxlL2VudGl0eS10YWJsZS5jb21wb25lbnQudHMiLCJsaWIvZW50aXR5L2VudGl0eS10YWJsZS9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBS2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFJTCxXQUFXLEVBR1gseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDMUIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0lDZm5ELDZCQUNFO0lBQUEsd0NBR2U7SUFIRCxxUEFBdUM7SUFHckQsaUJBQWU7SUFDakIsMEJBQWU7Ozs7SUFIQyxlQUE0RDtJQUE1RCxvRkFBNEQsOEVBQUE7OztJQUg5RSw2QkFDRTtJQUFBLDRHQUNFOztJQUtKLDBCQUFlOzs7SUFOQyxlQUFpRDtJQUFqRCxtRUFBaUQ7OztJQUZuRSw2QkFDRTtJQUFBLDZGQUNFO0lBT0osaUJBQUs7OztJQVJXLGVBQWtCO0lBQWxCLHdDQUFrQjs7OztJQVNsQyw4QkFDRTtJQUFBLHdDQUllO0lBSkQsb0tBQStCLHVCQUF1QixHQUFHLElBQUksSUFBQyx3U0FDd0Isd0JBQXdCLElBRGhELHdQQUFBO0lBSTVFLGlCQUFlO0lBQ2pCLGlCQUFLOzs7O0lBRlcs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QSxtRUFDRTtRQVNGLG1FQUNFO1FBTUosMEJBQWU7UUFFZix1RkFDRTtRQTJGRixtRUFJQTtRQUNBLG1FQVVBO1FBQ0YsaUJBQVE7UUFDUixtSEFLQTtRQUNGLGlCQUFNOztRQTVJRixlQUEyQjtRQUEzQiw2Q0FBMkIsOEJBQUEscUNBQUE7UUF5QmdCLGVBQXVDO1FBQXZDLDhDQUF1QztRQThGaEYsZUFBZ0Q7UUFBaEQsNkNBQWdELDBDQUFBO1FBTWhELGVBQTBDO1FBQTFDLDhDQUEwQztRQVNsQixlQUFxQjtRQUFyQix3Q0FBcUI7O2tERHRHdEMsb0JBQW9CO2NBTmhDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixXQUFXLEVBQUUsK0JBQStCO2dCQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztnQkFDNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7b0VBMkNVLEtBQUs7a0JBQWIsS0FBSztZQUtPLFNBQVM7a0JBQXJCLEtBQUs7WUFhRyxRQUFRO2tCQUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBFbnRpdHlSZWNvcmQsXG4gIEVudGl0eVN0YXRlLFxuICBFbnRpdHlTdG9yZSxcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcbiAgRW50aXR5VGFibGVDb2x1bW4sXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXG4gIEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3Jcbn0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnMgfSBmcm9tICcuLi9lbnRpdHktdGFibGUtcGFnaW5hdG9yL2VudGl0eS10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbnRpdHktdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRW50aXR5VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95ICB7XG5cbiAgZW50aXR5U29ydENoYW5nZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbHVtbiByZW5kZXJlciB0eXBlc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIgPSBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbidzIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGlvbixzIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBkYXRhU291cmNlXG4gICAqL1xuICBwcml2YXRlIGRhdGFTb3VyY2UkJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCByZWNvcmQgY2hlY2tlZC4gVXNlZnVsIGZvciBzZWxlY3RpbmdcbiAgICogbXVsdGlwbGUgcmVjb3JkcyBieSBob2xkaW5nIHRoZSBzaGlmdCBrZXkgYW5kIGNoZWNraW5nXG4gICAqIGNoZWNrYm94ZXMuXG4gICAqL1xuICBwcml2YXRlIGxhc3RSZWNvcmRDaGVja2VkS2V5OiBFbnRpdHlLZXk7XG5cbiAgLyoqXG4gICAqIEVudGl0eSBzdG9yZVxuICAgKi9cbiAgQElucHV0KCkgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD47XG5cbiAgLyoqXG4gICAqIFRhYmxlIHBhZ2luYXRvclxuICAgKi9cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XG4gIH1cbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyoqXG4gICAqIFRhYmxlIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcblxuICAvKipcbiAgICogU2Nyb2xsIGJlaGF2aW9yIG9uIHNlbGVjdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAgc2Nyb2xsQmVoYXZpb3I6IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IgPSBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yLkF1dG87XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbnVsbHMgc2hvdWxkIGJlIGZpcnN0IHdoZW4gc29ydGluZ1xuICAgKi9cbiAgQElucHV0KClcbiAgc29ydE51bGxzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgdGFibGUgcGFnaW5hdG9yIG9yIG5vdC4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHdpdGhQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUGFnaW5hdG9yIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRvck9wdGlvbnM6IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucztcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxuICAgKi9cbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGFkZGVkOiBvYmplY3RbXTtcbiAgfT4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0YWJsZSBzb3J0IGlzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBUYWJsZSBoZWFkZXJzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGhlYWRlcnMoKTogc3RyaW5nW10ge1xuICAgIGxldCBjb2x1bW5zID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGVja2JveCA9PT0gdHJ1ZSkge1xuICAgICAgY29sdW1ucyA9IFsnc2VsZWN0aW9uQ2hlY2tib3gnXS5jb25jYXQoY29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBzb3VyY2UgY29uc3VtYWJsZSBieSB0aGUgdW5kZXJseWluZyBtYXRlcmlhbCB0YWJsZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPG9iamVjdD4oKTtcblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uIHx8IGZhbHNlOyB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uQ2hlY2tib3ggfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdE1hbnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdE1hbnkgfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGZpeGVkSGVhZGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXI7IH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAvKipcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmN1cnJlbnRWYWx1ZSAhPT0gc3RvcmUucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRhc291cmNlKCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xuICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZCA9IHJlY29yZHNbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpLmluZGV4T2YoZmlyc3RTZWxlY3RlZCk7XG4gICAgICAgIGNvbnN0IHBhZ2VNYXggPSB0aGlzLnBhZ2luYXRvciA/IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICogKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCArIDEpIDogMDtcbiAgICAgICAgY29uc3QgcGFnZU1pbiA9IHRoaXMucGFnaW5hdG9yID8gcGFnZU1heCAtIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIDogMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiZcbiAgICAgICAgICAoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIDwgcGFnZU1pbiB8fFxuICAgICAgICAgIGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA+PSBwYWdlTWF4KSkge1xuICAgICAgICAgIGNvbnN0IHBhZ2VUb1JlYWNoID0gTWF0aC5mbG9vcihmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gLyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlSW5kZXggPSBwYWdlVG9SZWFjaDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlJC5uZXh0KHRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlKHJlY29yZHMpKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZGF0YVNvdXJjZSQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsJCgpLnN1YnNjcmliZSgoYWxsKSA9PiB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGFsbDtcbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFVuYmluZCB0aGUgc3RvcmUgd2F0Y2hlclxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVN0b3JlKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbiQkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbiQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UkJCkge1xuICAgICAgdGhpcy5kYXRhU291cmNlJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tieSBmdW5jdGlvblxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcGFyYW0gaW5kZXggUmVjb3JkIGluZGV4XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoaW5kZXg6IG51bWJlciwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0LCBFbnRpdHlTdGF0ZT4pID0+IHtcbiAgICAgIHJldHVybiByZWNvcmQucmVmO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBhIHJlZnJlc2ggb2YgdGhyZSB0YWJsZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW5cbiAgICogdGhlIGRhdGEgc291cmNlIGRvZXNuJ3QgZW1pdCBhIG5ldyB2YWx1ZSBidXQgZm9yIHNvbWUgcmVhc29uXG4gICAqIHRoZSByZWNvcmRzIG5lZWQgYW4gdXBkYXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwYWdpbmF0b3JDaGFuZ2UoZXZlbnQ6IE1hdFBhZ2luYXRvcikge1xuICAgIHRoaXMucGFnaW5hdG9yID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogT24gc29ydCwgc29ydCB0aGUgc3RvcmVcbiAgICogQHBhcmFtIGV2ZW50IFNvcnQgZXZlbnRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblNvcnQoZXZlbnQ6IHthY3RpdmU6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmd9KSB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gZXZlbnQuZGlyZWN0aW9uO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGVtcGxhdGUuY29sdW1uc1xuICAgICAgLmZpbmQoKGM6IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjLm5hbWUgPT09IGV2ZW50LmFjdGl2ZSk7XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJyB8fCBkaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh7XG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB0aGlzLmdldFZhbHVlKHJlY29yZCwgY29sdW1uKSxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBudWxsc0ZpcnN0OiB0aGlzLnNvcnROdWxsc0ZpcnN0XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZS5lbWl0KHtjb2x1bW4sIGRpcmVjdGlvbn0pO1xuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlJC5uZXh0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIGNsaWNrZWQsIGVtaXQgYW4gZXZlbnRcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblJvd0NsaWNrKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XG4gICAgdGhpcy5lbnRpdHlDbGljay5lbWl0KHJlY29yZC5lbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHNlbGVjdGVkLCBzZWxlY3QgaXQgaW4gdGhlIHN0b3JlIGFuZCBlbWl0IGFuIGV2ZW50LiBFdmVuIGlmXG4gICAqIFwibWFueVwiIGlzIHNldCB0byB0cnVlLCB0aGlzIG1ldGhvZCBhbHdheXMgc2VsZWN0IGEgc2luZ2xlLCBleGNsdXNpdmUgcm93LiBTZWxlY3RpbmdcbiAgICogbXVsdGlwbGUgcm93cyBzaG91bGQgYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIGNoZWNrYm94ZXMuXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Sb3dTZWxlY3QocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwge3NlbGVjdGVkOiB0cnVlfSwgdHJ1ZSk7XG4gICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IG9yIHVuc2VsZWN0IGFsbCByb3dzIGF0IG9uY2UuIE9uIHNlbGVjdCwgZW1pdCBhbiBldmVudC5cbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblRvZ2dsZVJvd3ModG9nZ2xlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlQWxsKHtzZWxlY3RlZDogdG9nZ2xlfSk7XG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuYWxsKClcbiAgICAgICAgLm1hcCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLmVudGl0eSk7XG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0aWVzXX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXG4gICAqIGVtaXQgYW4gZXZlbnQuXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgZXhjbHVzaXZlID0gdG9nZ2xlID09PSB0cnVlICYmICF0aGlzLnNlbGVjdE1hbnk7XG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRvZ2dsZX0sIGV4Y2x1c2l2ZSk7XG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XG4gICAgfVxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXG4gICAqIGVtaXQgYW4gZXZlbnQuXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25TaGlmdFRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIGlmICh0aGlzLnNlbGVjdE1hbnkgPT09IGZhbHNlIHx8IHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vblRvZ2dsZVJvdyh0b2dnbGUsIHJlY29yZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgbWF0IGNoZWNrYm94IHdyb25nIGJlaGF2aW9yXG4gICAgLy8gd2hlbiB0aGUgc2hpZnQga2V5IGlzIGhlbGQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzYyMzJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNlbGVjdE5vZGUoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKTtcbiAgICBjb25zdCByZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihyZWNvcmQpO1xuICAgIGNvbnN0IGxhc3RSZWNvcmRDaGVja2VkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0KHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkpO1xuICAgIGNvbnN0IGxhc3RSZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihsYXN0UmVjb3JkQ2hlY2tlZCk7XG4gICAgY29uc3QgaW5kZXhlcyA9IFtyZWNvcmRJbmRleCwgbGFzdFJlY29yZEluZGV4XTtcbiAgICBjb25zdCBzZWxlY3RSZWNvcmRzID0gcmVjb3Jkcy5zbGljZShNYXRoLm1pbiguLi5pbmRleGVzKSwgTWF0aC5tYXgoLi4uaW5kZXhlcykgKyAxKTtcblxuICAgIGNvbnN0IGVudGl0aWVzID0gc2VsZWN0UmVjb3Jkcy5tYXAoKF9yZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBfcmVjb3JkLmVudGl0eSk7XG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVNYW55KGVudGl0aWVzLCB7c2VsZWN0ZWQ6IHRvZ2dsZX0pO1xuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBlbnRpdGllc30pO1xuICAgIH1cbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc2VsZWN0aW9uIHN0YXRlXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYWxsLCBzb21lIG9yIG5vIHJvd3MgYXJlIHNlbGVjdGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlU2VsZWN0aW9uU3RhdGUoc2VsZWN0ZWRSZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdKTogRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSB7XG4gICAgY29uc3Qgc3RhdGVzID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcbiAgICBjb25zdCBzZWxlY3Rpb25Db3VudCA9IHNlbGVjdGVkUmVjb3Jkcy5sZW5ndGg7XG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvdW50ID09PSAwID9cbiAgICAgIHN0YXRlcy5Ob25lIDpcbiAgICAgIChzZWxlY3Rpb25Db3VudCA9PT0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuY291bnQgPyBzdGF0ZXMuQWxsIDogc3RhdGVzLlNvbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGVcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbHVtbiBpcyBzb3J0YWJsZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbHVtbklzU29ydGFibGUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCBzb3J0YWJsZSA9IGNvbHVtbi5zb3J0O1xuICAgIGlmIChzb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzb3J0YWJsZSA9IHRoaXMudGVtcGxhdGUuc29ydCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLnRlbXBsYXRlLnNvcnQ7XG4gICAgfVxuICAgIHJldHVybiBzb3J0YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgcm93IGlzIHNob3VsZCBiZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBlbnRpdHkgc3RhdGVcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICByb3dJc1NlbGVjdGVkKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlY29yZC5zdGF0ZTtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQgPyBzdGF0ZS5zZWxlY3RlZCA6IGZhbHNlO1xuICB9XG5cbiAgaXNJbWcodmFsdWUpIHtcbiAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsnanBnJywgJ3BuZycsICdnaWYnXS5pbmRleE9mKHZhbHVlLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNVcmwodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsdWUuc2xpY2UoMCwgOCkgPT09ICdodHRwczovLycgfHwgdmFsdWUuc2xpY2UoMCwgNykgPT09ICdodHRwOi8vJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbHVlc1xuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRWYWx1ZShyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYW55IHtcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIGlmIChjb2x1bW4udmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnZhbHVlQWNjZXNzb3IoZW50aXR5LCByZWNvcmQpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IoZW50aXR5LCBjb2x1bW4ubmFtZSwgcmVjb3JkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0UHJvcGVydHkoZW50aXR5LCBjb2x1bW4ubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHJlbmRlcmVyIG9mIGEgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEByZXR1cm5zIFJlbmRlcmVyIHR5cGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciB7XG4gICAgaWYgKGNvbHVtbi5yZW5kZXJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyO1xuICAgIH1cbiAgICByZXR1cm4gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5EZWZhdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGFibGUgbmdDbGFzc1xuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VGFibGVDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIHJldHVybiB7XG4gICAgICAnaWdvLWVudGl0eS10YWJsZS13aXRoLXNlbGVjdGlvbic6IHRoaXMuc2VsZWN0aW9uXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBoZWFkZXIgbmdDbGFzc1xuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0SGVhZGVyQ2xhc3MoKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5oZWFkZXJDbGFzc0Z1bmM7XG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRSb3dDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLnJvd0NsYXNzRnVuYztcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZnVuYyhlbnRpdHksIHJlY29yZCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0Q2VsbENsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgY2xzID0ge307XG5cbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XG4gICAgaWYgKHRhYmxlRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNscywgdGFibGVGdW5jKGVudGl0eSwgY29sdW1uLCByZWNvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5GdW5jID0gY29sdW1uLmNlbGxDbGFzc0Z1bmM7XG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIGNvbHVtbkZ1bmMoZW50aXR5LCByZWNvcmQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBidXR0b24gaXMgY2xpY2tlZFxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uQnV0dG9uQ2xpY2soXG4gICAgY2xpY2tGdW5jOiAoZW50aXR5OiBvYmplY3QsIHJlY29yZD86IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB2b2lkLFxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cbiAgKSB7XG4gICAgaWYgKHR5cGVvZiBjbGlja0Z1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsaWNrRnVuYyhyZWNvcmQuZW50aXR5LCByZWNvcmQpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gIDx0YWJsZVxuICAgIG1hdC10YWJsZVxuICAgIG1hdFNvcnRcbiAgICBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzKClcIlxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCJcbiAgICAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3Rpb25DaGVja2JveFwiIGNsYXNzPVwibWF0LWNlbGwtY2hlY2tib3hcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RNYW55XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblN0YXRlJCB8IGFzeW5jIGFzIHNlbGVjdGlvblN0YXRlXCI+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwib25Ub2dnbGVSb3dzKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLkFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLlNvbWVcIj5cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggKG1vdXNlZG93bik9XCIkZXZlbnQuc2hpZnRLZXkgPyAkZXZlbnQucHJldmVudERlZmF1bHQoKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc2hpZnRLZXkgPyBvblNoaWZ0VG9nZ2xlUm93KCFyb3dJc1NlbGVjdGVkKHJlY29yZCksIHJlY29yZCwgJGV2ZW50KSA6ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZVJvdygkZXZlbnQuY2hlY2tlZCwgcmVjb3JkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCI+XG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGVtcGxhdGUuY29sdW1uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbilcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtblJlbmRlcmVyKGNvbHVtbikgYXMgY29sdW1uUmVuZGVyZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybERlZmF1bHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICB7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybERlZmF1bHQ+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmNvbW1vbi5lbnRpdHktdGFibGUudGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5IVE1MXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxIVE1MXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxIVE1MPlxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8wqBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybFVuc2FuaXRpemVkSFRNTFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzYW5pdGl6ZUh0bWxcIj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MPlxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8wqBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5JY29uXCI+XG4gICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCIgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXBcIj5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIiBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1dHRvbi5zdHlsZSA9PT0gJ21hdC1pY29uLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgaWdvU3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7YnV0dG9uLmljb259fVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1dHRvbi5zdHlsZSAhPT0gJ21hdC1pY29uLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgaWdvU3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgICAgICBtYXQtbWluaS1mYWJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7YnV0dG9uLmljb259fVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0clxuICAgICAgbWF0LWhlYWRlci1yb3dcbiAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJoZWFkZXJzOyBzdGlja3k6IGZpeGVkSGVhZGVyO1wiXG4gICAgICBbbmdDbGFzc109XCJnZXRIZWFkZXJDbGFzcygpXCI+XG4gICAgPC90cj5cbiAgICA8dHJcbiAgICAgIG1hdC1yb3dcbiAgICAgIGlnb0VudGl0eVRhYmxlUm93XG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJlY29yZDsgY29sdW1uczogaGVhZGVycztcIlxuICAgICAgW3Njcm9sbEJlaGF2aW9yXT1cInNjcm9sbEJlaGF2aW9yXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzKHJlY29yZClcIlxuICAgICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIlxuICAgICAgW3NlbGVjdGVkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiXG4gICAgICAoc2VsZWN0KT1cIm9uUm93U2VsZWN0KHJlY29yZClcIlxuICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2socmVjb3JkKVwiPlxuICAgIDwvdHI+XG4gIDwvdGFibGU+XG4gIDxpZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvciAqbmdJZj1cIndpdGhQYWdpbmF0b3JcIlxuICAgIFtzdG9yZV09XCJzdG9yZVwiXG4gICAgW3BhZ2luYXRvck9wdGlvbnNdPVwicGFnaW5hdG9yT3B0aW9uc1wiXG4gICAgW2VudGl0eVNvcnRDaGFuZ2UkXT1cImVudGl0eVNvcnRDaGFuZ2UkXCJcbiAgICAocGFnaW5hdG9yQ2hhbmdlKT1cInBhZ2luYXRvckNoYW5nZSgkZXZlbnQpXCI+XG4gIDwvaWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3I+XG48L2Rpdj5cbiJdfQ==
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
4
+ import { MatTableDataSource } from '@angular/material/table';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/table";
7
+ import * as i2 from "@angular/material/sort";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "@angular/material/checkbox";
10
+ import * as i5 from "@angular/material/icon";
11
+ import * as i6 from "@angular/material/button";
12
+ import * as i7 from "../../stop-propagation/stop-propagation.directive";
13
+ import * as i8 from "./entity-table-row.directive";
14
+ import * as i9 from "../entity-table-paginator/entity-table-paginator.component";
15
+ import * as i10 from "../../image/secure-image.pipe";
16
+ import * as i11 from "@ngx-translate/core";
17
+ import * as i12 from "../../custom-html/custom-html.pipe";
18
+ function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
19
+ const _r10 = i0.ɵɵgetCurrentView();
20
+ i0.ɵɵelementContainerStart(0);
21
+ i0.ɵɵelementStart(1, "mat-checkbox", 11);
22
+ i0.ɵɵlistener("change", function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return ctx_r9.onToggleRows($event.checked); });
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵelementContainerEnd();
25
+ } if (rf & 2) {
26
+ const selectionState_r8 = ctx.ngIf;
27
+ const ctx_r7 = i0.ɵɵnextContext(3);
28
+ i0.ɵɵadvance(1);
29
+ i0.ɵɵproperty("checked", selectionState_r8 === ctx_r7.entityTableSelectionState.All)("indeterminate", selectionState_r8 === ctx_r7.entityTableSelectionState.Some);
30
+ } }
31
+ function EntityTableComponent_th_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementContainerStart(0);
33
+ i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_ng_container_1_Template, 2, 2, "ng-container", 10);
34
+ i0.ɵɵpipe(2, "async");
35
+ i0.ɵɵelementContainerEnd();
36
+ } if (rf & 2) {
37
+ const ctx_r6 = i0.ɵɵnextContext(2);
38
+ i0.ɵɵadvance(1);
39
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r6.selectionState$));
40
+ } }
41
+ function EntityTableComponent_th_3_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelementStart(0, "th", 9);
43
+ i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_Template, 3, 3, "ng-container", 10);
44
+ i0.ɵɵelementEnd();
45
+ } if (rf & 2) {
46
+ const ctx_r0 = i0.ɵɵnextContext();
47
+ i0.ɵɵadvance(1);
48
+ i0.ɵɵproperty("ngIf", ctx_r0.selectMany);
49
+ } }
50
+ function EntityTableComponent_td_4_Template(rf, ctx) { if (rf & 1) {
51
+ const _r14 = i0.ɵɵgetCurrentView();
52
+ i0.ɵɵelementStart(0, "td", 12);
53
+ i0.ɵɵelementStart(1, "mat-checkbox", 13);
54
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_td_4_Template_mat_checkbox_mousedown_1_listener($event) { return $event.shiftKey ? $event.preventDefault() : null; })("click", function EntityTableComponent_td_4_Template_mat_checkbox_click_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r13 = i0.ɵɵnextContext(); return $event.shiftKey ? ctx_r13.onShiftToggleRow(!ctx_r13.rowIsSelected(record_r11), record_r11, $event) : $event.stopPropagation(); })("change", function EntityTableComponent_td_4_Template_mat_checkbox_change_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.onToggleRow($event.checked, record_r11); });
55
+ i0.ɵɵelementEnd();
56
+ i0.ɵɵelementEnd();
57
+ } if (rf & 2) {
58
+ const record_r11 = ctx.$implicit;
59
+ const ctx_r1 = i0.ɵɵnextContext();
60
+ i0.ɵɵadvance(1);
61
+ i0.ɵɵproperty("checked", ctx_r1.rowIsSelected(record_r11));
62
+ } }
63
+ function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
64
+ i0.ɵɵelementStart(0, "th", 16);
65
+ i0.ɵɵtext(1);
66
+ i0.ɵɵelementEnd();
67
+ } if (rf & 2) {
68
+ const column_r16 = i0.ɵɵnextContext(2).$implicit;
69
+ i0.ɵɵadvance(1);
70
+ i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
71
+ } }
72
+ function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵelementContainerStart(0);
74
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 1, "th", 15);
75
+ i0.ɵɵelementContainerEnd();
76
+ } }
77
+ function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
78
+ i0.ɵɵelementStart(0, "th", 9);
79
+ i0.ɵɵtext(1);
80
+ i0.ɵɵelementEnd();
81
+ } if (rf & 2) {
82
+ const column_r16 = i0.ɵɵnextContext(2).$implicit;
83
+ i0.ɵɵadvance(1);
84
+ i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
85
+ } }
86
+ function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
87
+ i0.ɵɵelementContainerStart(0);
88
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 1, "th", 3);
89
+ i0.ɵɵelementContainerEnd();
90
+ } }
91
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
92
+ i0.ɵɵelementStart(0, "td", 20);
93
+ i0.ɵɵtext(1);
94
+ i0.ɵɵelementEnd();
95
+ } if (rf & 2) {
96
+ const record_r31 = i0.ɵɵnextContext().$implicit;
97
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
98
+ const ctx_r32 = i0.ɵɵnextContext();
99
+ i0.ɵɵproperty("ngClass", ctx_r32.getCellClass(record_r31, column_r16));
100
+ i0.ɵɵadvance(1);
101
+ i0.ɵɵtextInterpolate1(" ", ctx_r32.getValue(record_r31, column_r16), " ");
102
+ } }
103
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
104
+ i0.ɵɵelement(0, "img", 24);
105
+ i0.ɵɵpipe(1, "async");
106
+ i0.ɵɵpipe(2, "secureImage");
107
+ } if (rf & 2) {
108
+ const record_r31 = i0.ɵɵnextContext(2).$implicit;
109
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
110
+ const ctx_r37 = i0.ɵɵnextContext();
111
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r37.getValue(record_r31, column_r16))), i0.ɵɵsanitizeUrl);
112
+ } }
113
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
114
+ i0.ɵɵelementStart(0, "span");
115
+ i0.ɵɵtext(1);
116
+ i0.ɵɵpipe(2, "translate");
117
+ i0.ɵɵelementEnd();
118
+ } if (rf & 2) {
119
+ i0.ɵɵadvance(1);
120
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
121
+ } }
122
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
123
+ i0.ɵɵelementStart(0, "td", 20);
124
+ i0.ɵɵelementStart(1, "a", 21);
125
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
126
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
127
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
128
+ i0.ɵɵelementEnd();
129
+ i0.ɵɵelementEnd();
130
+ } if (rf & 2) {
131
+ const _r38 = i0.ɵɵreference(4);
132
+ const record_r31 = i0.ɵɵnextContext().$implicit;
133
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
134
+ const ctx_r34 = i0.ɵɵnextContext();
135
+ i0.ɵɵproperty("ngClass", ctx_r34.getCellClass(record_r31, column_r16));
136
+ i0.ɵɵadvance(1);
137
+ i0.ɵɵpropertyInterpolate("href", ctx_r34.getValue(record_r31, column_r16), i0.ɵɵsanitizeUrl);
138
+ i0.ɵɵadvance(1);
139
+ i0.ɵɵproperty("ngIf", ctx_r34.isImg(ctx_r34.getValue(record_r31, column_r16)))("ngIfElse", _r38);
140
+ } }
141
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
142
+ i0.ɵɵelementContainerStart(0);
143
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 18);
144
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 19, i0.ɵɵtemplateRefExtractor);
145
+ i0.ɵɵelementContainerEnd();
146
+ } if (rf & 2) {
147
+ const record_r31 = ctx.$implicit;
148
+ const _r33 = i0.ɵɵreference(3);
149
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
150
+ const ctx_r30 = i0.ɵɵnextContext();
151
+ i0.ɵɵadvance(1);
152
+ i0.ɵɵproperty("ngIf", !ctx_r30.isUrl(ctx_r30.getValue(record_r31, column_r16)))("ngIfElse", _r33);
153
+ } }
154
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
155
+ i0.ɵɵelementContainerStart(0);
156
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 17);
157
+ i0.ɵɵelementContainerEnd();
158
+ } }
159
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
160
+ i0.ɵɵelement(0, "td", 27);
161
+ } if (rf & 2) {
162
+ const record_r47 = i0.ɵɵnextContext().$implicit;
163
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
164
+ const ctx_r48 = i0.ɵɵnextContext();
165
+ i0.ɵɵproperty("ngClass", ctx_r48.getCellClass(record_r47, column_r16))("innerHTML", ctx_r48.getValue(record_r47, column_r16), i0.ɵɵsanitizeHtml);
166
+ } }
167
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
168
+ i0.ɵɵelement(0, "img", 24);
169
+ i0.ɵɵpipe(1, "async");
170
+ i0.ɵɵpipe(2, "secureImage");
171
+ } if (rf & 2) {
172
+ const record_r47 = i0.ɵɵnextContext(2).$implicit;
173
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
174
+ const ctx_r53 = i0.ɵɵnextContext();
175
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r53.getValue(record_r47, column_r16))), i0.ɵɵsanitizeUrl);
176
+ } }
177
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
178
+ i0.ɵɵelementStart(0, "span");
179
+ i0.ɵɵtext(1);
180
+ i0.ɵɵpipe(2, "translate");
181
+ i0.ɵɵelementEnd();
182
+ } if (rf & 2) {
183
+ i0.ɵɵadvance(1);
184
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
185
+ } }
186
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
187
+ i0.ɵɵelementStart(0, "td", 20);
188
+ i0.ɵɵelementStart(1, "a", 21);
189
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
190
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
191
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
192
+ i0.ɵɵelementEnd();
193
+ i0.ɵɵelementEnd();
194
+ } if (rf & 2) {
195
+ const _r54 = i0.ɵɵreference(4);
196
+ const record_r47 = i0.ɵɵnextContext().$implicit;
197
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
198
+ const ctx_r50 = i0.ɵɵnextContext();
199
+ i0.ɵɵproperty("ngClass", ctx_r50.getCellClass(record_r47, column_r16));
200
+ i0.ɵɵadvance(1);
201
+ i0.ɵɵpropertyInterpolate("href", ctx_r50.getValue(record_r47, column_r16), i0.ɵɵsanitizeUrl);
202
+ i0.ɵɵadvance(1);
203
+ i0.ɵɵproperty("ngIf", ctx_r50.isImg(ctx_r50.getValue(record_r47, column_r16)))("ngIfElse", _r54);
204
+ } }
205
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
206
+ i0.ɵɵelementContainerStart(0);
207
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 25);
208
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 26, i0.ɵɵtemplateRefExtractor);
209
+ i0.ɵɵelementContainerEnd();
210
+ } if (rf & 2) {
211
+ const record_r47 = ctx.$implicit;
212
+ const _r49 = i0.ɵɵreference(3);
213
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
214
+ const ctx_r46 = i0.ɵɵnextContext();
215
+ i0.ɵɵadvance(1);
216
+ i0.ɵɵproperty("ngIf", !ctx_r46.isUrl(ctx_r46.getValue(record_r47, column_r16)))("ngIfElse", _r49);
217
+ } }
218
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
219
+ i0.ɵɵelementContainerStart(0);
220
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 17);
221
+ i0.ɵɵelementContainerEnd();
222
+ } }
223
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
224
+ i0.ɵɵelement(0, "td", 27);
225
+ i0.ɵɵpipe(1, "sanitizeHtml");
226
+ } if (rf & 2) {
227
+ const record_r63 = i0.ɵɵnextContext().$implicit;
228
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
229
+ const ctx_r64 = i0.ɵɵnextContext();
230
+ i0.ɵɵproperty("ngClass", ctx_r64.getCellClass(record_r63, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r64.getValue(record_r63, column_r16)), i0.ɵɵsanitizeHtml);
231
+ } }
232
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
233
+ i0.ɵɵelement(0, "img", 24);
234
+ i0.ɵɵpipe(1, "async");
235
+ i0.ɵɵpipe(2, "secureImage");
236
+ } if (rf & 2) {
237
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
238
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
239
+ const ctx_r69 = i0.ɵɵnextContext();
240
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r69.getValue(record_r63, column_r16))), i0.ɵɵsanitizeUrl);
241
+ } }
242
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
243
+ i0.ɵɵelementStart(0, "span");
244
+ i0.ɵɵtext(1);
245
+ i0.ɵɵpipe(2, "translate");
246
+ i0.ɵɵelementEnd();
247
+ } if (rf & 2) {
248
+ i0.ɵɵadvance(1);
249
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
250
+ } }
251
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
252
+ i0.ɵɵelementStart(0, "td", 20);
253
+ i0.ɵɵelementStart(1, "a", 21);
254
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
255
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 22);
256
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 23, i0.ɵɵtemplateRefExtractor);
257
+ i0.ɵɵelementEnd();
258
+ i0.ɵɵelementEnd();
259
+ } if (rf & 2) {
260
+ const _r70 = i0.ɵɵreference(4);
261
+ const record_r63 = i0.ɵɵnextContext().$implicit;
262
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
263
+ const ctx_r66 = i0.ɵɵnextContext();
264
+ i0.ɵɵproperty("ngClass", ctx_r66.getCellClass(record_r63, column_r16));
265
+ i0.ɵɵadvance(1);
266
+ i0.ɵɵpropertyInterpolate("href", ctx_r66.getValue(record_r63, column_r16), i0.ɵɵsanitizeUrl);
267
+ i0.ɵɵadvance(1);
268
+ i0.ɵɵproperty("ngIf", ctx_r66.isImg(ctx_r66.getValue(record_r63, column_r16)))("ngIfElse", _r70);
269
+ } }
270
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
271
+ i0.ɵɵelementContainerStart(0);
272
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 2, 4, "td", 25);
273
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
274
+ i0.ɵɵelementContainerEnd();
275
+ } if (rf & 2) {
276
+ const record_r63 = ctx.$implicit;
277
+ const _r65 = i0.ɵɵreference(3);
278
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
279
+ const ctx_r62 = i0.ɵɵnextContext();
280
+ i0.ɵɵadvance(1);
281
+ i0.ɵɵproperty("ngIf", !ctx_r62.isUrl(ctx_r62.getValue(record_r63, column_r16)))("ngIfElse", _r65);
282
+ } }
283
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
284
+ i0.ɵɵelementContainerStart(0);
285
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 17);
286
+ i0.ɵɵelementContainerEnd();
287
+ } }
288
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
289
+ i0.ɵɵelementStart(0, "td", 20);
290
+ i0.ɵɵelement(1, "mat-icon", 30);
291
+ i0.ɵɵelementEnd();
292
+ } if (rf & 2) {
293
+ const record_r79 = ctx.$implicit;
294
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
295
+ const ctx_r78 = i0.ɵɵnextContext();
296
+ i0.ɵɵproperty("ngClass", ctx_r78.getCellClass(record_r79, column_r16));
297
+ i0.ɵɵadvance(1);
298
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r78.getValue(record_r79, column_r16));
299
+ } }
300
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
301
+ i0.ɵɵelementContainerStart(0);
302
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 2, 2, "td", 29);
303
+ i0.ɵɵelementContainerEnd();
304
+ } }
305
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template(rf, ctx) { if (rf & 1) {
306
+ const _r89 = i0.ɵɵgetCurrentView();
307
+ i0.ɵɵelementStart(0, "button", 34);
308
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r89); const button_r84 = i0.ɵɵnextContext().$implicit; const record_r82 = i0.ɵɵnextContext().$implicit; const ctx_r87 = i0.ɵɵnextContext(4); return ctx_r87.onButtonClick(button_r84.click, record_r82); });
309
+ i0.ɵɵelement(1, "mat-icon", 30);
310
+ i0.ɵɵelementEnd();
311
+ } if (rf & 2) {
312
+ const button_r84 = i0.ɵɵnextContext().$implicit;
313
+ i0.ɵɵproperty("color", button_r84.color);
314
+ i0.ɵɵadvance(1);
315
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r84.icon);
316
+ } }
317
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template(rf, ctx) { if (rf & 1) {
318
+ const _r94 = i0.ɵɵgetCurrentView();
319
+ i0.ɵɵelementStart(0, "button", 35);
320
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r94); const button_r84 = i0.ɵɵnextContext().$implicit; const record_r82 = i0.ɵɵnextContext().$implicit; const ctx_r92 = i0.ɵɵnextContext(4); return ctx_r92.onButtonClick(button_r84.click, record_r82); });
321
+ i0.ɵɵelement(1, "mat-icon", 30);
322
+ i0.ɵɵelementEnd();
323
+ } if (rf & 2) {
324
+ const button_r84 = i0.ɵɵnextContext().$implicit;
325
+ i0.ɵɵproperty("color", button_r84.color);
326
+ i0.ɵɵadvance(1);
327
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r84.icon);
328
+ } }
329
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_Template(rf, ctx) { if (rf & 1) {
330
+ i0.ɵɵelementStart(0, "span");
331
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_1_Template, 2, 2, "button", 32);
332
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template, 2, 2, "button", 33);
333
+ i0.ɵɵelementEnd();
334
+ } if (rf & 2) {
335
+ const button_r84 = ctx.$implicit;
336
+ i0.ɵɵadvance(1);
337
+ i0.ɵɵproperty("ngIf", button_r84.style === "mat-icon-button");
338
+ i0.ɵɵadvance(1);
339
+ i0.ɵɵproperty("ngIf", button_r84.style !== "mat-icon-button");
340
+ } }
341
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_Template(rf, ctx) { if (rf & 1) {
342
+ i0.ɵɵelementStart(0, "td", 20);
343
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_Template, 3, 2, "span", 31);
344
+ i0.ɵɵelementEnd();
345
+ } if (rf & 2) {
346
+ const record_r82 = ctx.$implicit;
347
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
348
+ const ctx_r81 = i0.ɵɵnextContext();
349
+ i0.ɵɵproperty("ngClass", ctx_r81.getCellClass(record_r82, column_r16));
350
+ i0.ɵɵadvance(1);
351
+ i0.ɵɵproperty("ngForOf", ctx_r81.getValue(record_r82, column_r16));
352
+ } }
353
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
354
+ i0.ɵɵelementContainerStart(0);
355
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_Template, 2, 2, "td", 29);
356
+ i0.ɵɵelementContainerEnd();
357
+ } }
358
+ function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
359
+ i0.ɵɵelementContainerStart(0);
360
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template, 2, 0, "ng-container", 10);
361
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template, 2, 0, "ng-container", 10);
362
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template, 2, 0, "ng-container", 10);
363
+ i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template, 2, 0, "ng-container", 10);
364
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template, 2, 0, "ng-container", 10);
365
+ i0.ɵɵelementContainerEnd();
366
+ } if (rf & 2) {
367
+ const columnRenderer_r24 = ctx.ngIf;
368
+ const ctx_r19 = i0.ɵɵnextContext(2);
369
+ i0.ɵɵadvance(1);
370
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Default);
371
+ i0.ɵɵadvance(1);
372
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.HTML);
373
+ i0.ɵɵadvance(1);
374
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.UnsanitizedHTML);
375
+ i0.ɵɵadvance(1);
376
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Icon);
377
+ i0.ɵɵadvance(1);
378
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.ButtonGroup);
379
+ } }
380
+ function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
381
+ i0.ɵɵelementContainerStart(0, 14);
382
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_Template, 2, 0, "ng-container", 10);
383
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_2_Template, 2, 0, "ng-container", 10);
384
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_Template, 6, 5, "ng-container", 10);
385
+ i0.ɵɵelementContainerEnd();
386
+ } if (rf & 2) {
387
+ const column_r16 = ctx.$implicit;
388
+ const ctx_r2 = i0.ɵɵnextContext();
389
+ i0.ɵɵproperty("matColumnDef", column_r16.name);
390
+ i0.ɵɵadvance(1);
391
+ i0.ɵɵproperty("ngIf", ctx_r2.columnIsSortable(column_r16));
392
+ i0.ɵɵadvance(1);
393
+ i0.ɵɵproperty("ngIf", !ctx_r2.columnIsSortable(column_r16));
394
+ i0.ɵɵadvance(1);
395
+ i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
396
+ } }
397
+ function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
398
+ i0.ɵɵelement(0, "tr", 36);
399
+ } if (rf & 2) {
400
+ const ctx_r3 = i0.ɵɵnextContext();
401
+ i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
402
+ } }
403
+ function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
404
+ const _r100 = i0.ɵɵgetCurrentView();
405
+ i0.ɵɵelementStart(0, "tr", 37);
406
+ i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r100); const record_r98 = restoredCtx.$implicit; const ctx_r99 = i0.ɵɵnextContext(); return ctx_r99.onRowSelect(record_r98); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r100); const record_r98 = restoredCtx.$implicit; const ctx_r101 = i0.ɵɵnextContext(); return ctx_r101.onRowClick(record_r98); });
407
+ i0.ɵɵelementEnd();
408
+ } if (rf & 2) {
409
+ const record_r98 = ctx.$implicit;
410
+ const ctx_r4 = i0.ɵɵnextContext();
411
+ i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r98))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r98));
412
+ } }
413
+ function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
414
+ const _r103 = i0.ɵɵgetCurrentView();
415
+ i0.ɵɵelementStart(0, "igo-entity-table-paginator", 38);
416
+ i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r103); const ctx_r102 = i0.ɵɵnextContext(); return ctx_r102.paginatorChange($event); });
417
+ i0.ɵɵelementEnd();
418
+ } if (rf & 2) {
419
+ const ctx_r5 = i0.ɵɵnextContext();
420
+ i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
421
+ } }
422
+ export class EntityTableComponent {
423
+ constructor(cdRef) {
424
+ this.cdRef = cdRef;
425
+ this.entitySortChange$ = new BehaviorSubject(false);
426
+ /**
427
+ * Reference to the column renderer types
428
+ * @internal
429
+ */
430
+ this.entityTableColumnRenderer = EntityTableColumnRenderer;
431
+ /**
432
+ * Reference to the selection's state
433
+ * @internal
434
+ */
435
+ this.entityTableSelectionState = EntityTableSelectionState;
436
+ /**
437
+ * Observable of the selection,s state
438
+ * @internal
439
+ */
440
+ this.selectionState$ = new BehaviorSubject(undefined);
441
+ /**
442
+ * Scroll behavior on selection
443
+ */
444
+ this.scrollBehavior = EntityTableScrollBehavior.Auto;
445
+ /**
446
+ * Whether nulls should be first when sorting
447
+ */
448
+ this.sortNullsFirst = false;
449
+ /**
450
+ * Show the table paginator or not. False by default.
451
+ */
452
+ this.withPaginator = false;
453
+ /**
454
+ * Event emitted when an entity (row) is clicked
455
+ */
456
+ this.entityClick = new EventEmitter();
457
+ /**
458
+ * Event emitted when an entity (row) is selected
459
+ */
460
+ this.entitySelectChange = new EventEmitter();
461
+ /**
462
+ * Event emitted when the table sort is changed.
463
+ */
464
+ this.entitySortChange = new EventEmitter(undefined);
465
+ /**
466
+ * Data source consumable by the underlying material table
467
+ * @internal
468
+ */
469
+ this.dataSource = new MatTableDataSource();
470
+ }
471
+ /**
472
+ * Table paginator
473
+ */
474
+ set paginator(value) {
475
+ this._paginator = value;
476
+ this.dataSource.paginator = value;
477
+ }
478
+ get paginator() {
479
+ return this._paginator;
480
+ }
481
+ /**
482
+ * Table headers
483
+ * @internal
484
+ */
485
+ get headers() {
486
+ let columns = this.template.columns
487
+ .filter((column) => column.visible !== false)
488
+ .map((column) => column.name);
489
+ if (this.selectionCheckbox === true) {
490
+ columns = ['selectionCheckbox'].concat(columns);
491
+ }
492
+ return columns;
493
+ }
494
+ /**
495
+ * Whether selection is supported
496
+ * @internal
497
+ */
498
+ get selection() { return this.template.selection || false; }
499
+ /**
500
+ * Whether a selection checkbox should be displayed
501
+ * @internal
502
+ */
503
+ get selectionCheckbox() { return this.template.selectionCheckbox || false; }
504
+ /**
505
+ * Whether selection many entities should eb supported
506
+ * @internal
507
+ */
508
+ get selectMany() { return this.template.selectMany || false; }
509
+ /**
510
+ * Whether selection many entities should eb supported
511
+ * @internal
512
+ */
513
+ get fixedHeader() { return this.template.fixedHeader === undefined ? true : this.template.fixedHeader; }
514
+ /**
515
+ * Track the selection state to properly display the selection checkboxes
516
+ * @internal
517
+ */
518
+ ngOnInit() {
519
+ this.handleDatasource();
520
+ this.dataSource.paginator = this.paginator;
521
+ }
522
+ /**
523
+ * @internal
524
+ */
525
+ ngOnChanges(changes) {
526
+ const store = changes.store;
527
+ if (store && store.currentValue !== store.previousValue) {
528
+ this.handleDatasource();
529
+ }
530
+ }
531
+ handleDatasource() {
532
+ this.unsubscribeStore();
533
+ this.selection$$ = this.store.stateView
534
+ .manyBy$((record) => record.state.selected === true)
535
+ .subscribe((records) => {
536
+ const firstSelected = records[0];
537
+ const firstSelectedStateviewPosition = this.store.stateView.all().indexOf(firstSelected);
538
+ const pageMax = this.paginator ? this.paginator.pageSize * (this.paginator.pageIndex + 1) : 0;
539
+ const pageMin = this.paginator ? pageMax - this.paginator.pageSize : 0;
540
+ if (this.paginator &&
541
+ (firstSelectedStateviewPosition < pageMin ||
542
+ firstSelectedStateviewPosition >= pageMax)) {
543
+ const pageToReach = Math.floor(firstSelectedStateviewPosition / this.paginator.pageSize);
544
+ this.dataSource.paginator.pageIndex = pageToReach;
545
+ }
546
+ this.selectionState$.next(this.computeSelectionState(records));
547
+ });
548
+ this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {
549
+ this.dataSource.data = all;
550
+ });
551
+ }
552
+ /**
553
+ * Unbind the store watcher
554
+ * @internal
555
+ */
556
+ ngOnDestroy() {
557
+ this.unsubscribeStore();
558
+ }
559
+ unsubscribeStore() {
560
+ if (this.selection$$) {
561
+ this.selection$$.unsubscribe();
562
+ }
563
+ if (this.dataSource$$) {
564
+ this.dataSource$$.unsubscribe();
565
+ }
566
+ }
567
+ /**
568
+ * Trackby function
569
+ * @param record Record
570
+ * @param index Record index
571
+ * @internal
572
+ */
573
+ getTrackByFunction() {
574
+ return (index, record) => {
575
+ return record.ref;
576
+ };
577
+ }
578
+ /**
579
+ * Trigger a refresh of thre table. This can be useful when
580
+ * the data source doesn't emit a new value but for some reason
581
+ * the records need an update.
582
+ * @internal
583
+ */
584
+ refresh() {
585
+ this.cdRef.detectChanges();
586
+ }
587
+ paginatorChange(event) {
588
+ this.paginator = event;
589
+ }
590
+ /**
591
+ * On sort, sort the store
592
+ * @param event Sort event
593
+ * @internal
594
+ */
595
+ onSort(event) {
596
+ const direction = event.direction;
597
+ const column = this.template.columns
598
+ .find((c) => c.name === event.active);
599
+ if (direction === 'asc' || direction === 'desc') {
600
+ this.store.stateView.sort({
601
+ valueAccessor: (record) => this.getValue(record, column),
602
+ direction,
603
+ nullsFirst: this.sortNullsFirst
604
+ });
605
+ this.entitySortChange.emit({ column, direction });
606
+ this.entitySortChange$.next(true);
607
+ }
608
+ else {
609
+ this.store.stateView.sort(undefined);
610
+ }
611
+ }
612
+ /**
613
+ * When an entity is clicked, emit an event
614
+ * @param record Record
615
+ * @internal
616
+ */
617
+ onRowClick(record) {
618
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
619
+ this.entityClick.emit(record.entity);
620
+ }
621
+ /**
622
+ * When an entity is selected, select it in the store and emit an event. Even if
623
+ * "many" is set to true, this method always select a single, exclusive row. Selecting
624
+ * multiple rows should be achieved by using the checkboxes.
625
+ * @param record Record
626
+ * @internal
627
+ */
628
+ onRowSelect(record) {
629
+ if (this.selection === false) {
630
+ return;
631
+ }
632
+ const entity = record.entity;
633
+ this.store.state.update(entity, { selected: true }, true);
634
+ this.entitySelectChange.emit({ added: [entity] });
635
+ }
636
+ /**
637
+ * Select or unselect all rows at once. On select, emit an event.
638
+ * @param toggle Select or unselect
639
+ * @internal
640
+ */
641
+ onToggleRows(toggle) {
642
+ if (this.selection === false) {
643
+ return;
644
+ }
645
+ this.store.state.updateAll({ selected: toggle });
646
+ if (toggle === true) {
647
+ const entities = this.store.stateView
648
+ .all()
649
+ .map((record) => record.entity);
650
+ this.entitySelectChange.emit({ added: [entities] });
651
+ }
652
+ }
653
+ /**
654
+ * When an entity is toggled, select or unselect it in the store. On select,
655
+ * emit an event.
656
+ * @param toggle Select or unselect
657
+ * @param record Record
658
+ * @internal
659
+ */
660
+ onToggleRow(toggle, record) {
661
+ if (this.selection === false) {
662
+ return;
663
+ }
664
+ const entity = record.entity;
665
+ const exclusive = toggle === true && !this.selectMany;
666
+ this.store.state.update(entity, { selected: toggle }, exclusive);
667
+ if (toggle === true) {
668
+ this.entitySelectChange.emit({ added: [entity] });
669
+ }
670
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
671
+ }
672
+ /**
673
+ * When an entity is toggled, select or unselect it in the store. On select,
674
+ * emit an event.
675
+ * @param toggle Select or unselect
676
+ * @param record Record
677
+ * @internal
678
+ */
679
+ onShiftToggleRow(toggle, record, event) {
680
+ if (this.selection === false) {
681
+ return;
682
+ }
683
+ if (this.selectMany === false || this.lastRecordCheckedKey === undefined) {
684
+ this.onToggleRow(toggle, record);
685
+ return;
686
+ }
687
+ // This is a workaround mat checkbox wrong behavior
688
+ // when the shift key is held.
689
+ // See https://github.com/angular/components/issues/6232
690
+ const range = window.document.createRange();
691
+ range.selectNode(event.target);
692
+ window.getSelection().removeAllRanges();
693
+ window.getSelection().addRange(range);
694
+ event.stopImmediatePropagation();
695
+ const records = this.store.stateView.all();
696
+ const recordIndex = records.indexOf(record);
697
+ const lastRecordChecked = this.store.stateView.get(this.lastRecordCheckedKey);
698
+ const lastRecordIndex = records.indexOf(lastRecordChecked);
699
+ const indexes = [recordIndex, lastRecordIndex];
700
+ const selectRecords = records.slice(Math.min(...indexes), Math.max(...indexes) + 1);
701
+ const entities = selectRecords.map((_record) => _record.entity);
702
+ this.store.state.updateMany(entities, { selected: toggle });
703
+ if (toggle === true) {
704
+ this.entitySelectChange.emit({ added: entities });
705
+ }
706
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
707
+ }
708
+ /**
709
+ * Compute the selection state
710
+ * @returns Whether all, some or no rows are selected
711
+ * @internal
712
+ */
713
+ computeSelectionState(selectedRecords) {
714
+ const states = EntityTableSelectionState;
715
+ const selectionCount = selectedRecords.length;
716
+ return selectionCount === 0 ?
717
+ states.None :
718
+ (selectionCount === this.store.stateView.count ? states.All : states.Some);
719
+ }
720
+ /**
721
+ * Whether a column is sortable
722
+ * @param column Column
723
+ * @returns True if a column is sortable
724
+ * @internal
725
+ */
726
+ columnIsSortable(column) {
727
+ let sortable = column.sort;
728
+ if (sortable === undefined) {
729
+ sortable = this.template.sort === undefined ? false : this.template.sort;
730
+ }
731
+ return sortable;
732
+ }
733
+ /**
734
+ * Whether a row is should be selected based on the underlying entity state
735
+ * @param record Record
736
+ * @returns True if a row should be selected
737
+ * @internal
738
+ */
739
+ rowIsSelected(record) {
740
+ const state = record.state;
741
+ return state.selected ? state.selected : false;
742
+ }
743
+ isImg(value) {
744
+ if (this.isUrl(value)) {
745
+ return (['jpg', 'png', 'gif'].indexOf(value.split('.').pop().toLowerCase()) !== -1);
746
+ }
747
+ else {
748
+ return false;
749
+ }
750
+ }
751
+ isUrl(value) {
752
+ if (typeof value === 'string') {
753
+ return (value.slice(0, 8) === 'https://' || value.slice(0, 7) === 'http://');
754
+ }
755
+ else {
756
+ return false;
757
+ }
758
+ }
759
+ /**
760
+ * Method to access an entity's values
761
+ * @param record Record
762
+ * @param column Column
763
+ * @returns Any value
764
+ * @internal
765
+ */
766
+ getValue(record, column) {
767
+ const entity = record.entity;
768
+ if (column.valueAccessor !== undefined) {
769
+ return column.valueAccessor(entity, record);
770
+ }
771
+ if (this.template.valueAccessor !== undefined) {
772
+ return this.template.valueAccessor(entity, column.name, record);
773
+ }
774
+ return this.store.getProperty(entity, column.name);
775
+ }
776
+ /**
777
+ * Return the type of renderer of a column
778
+ * @param column Column
779
+ * @returns Renderer type
780
+ * @internal
781
+ */
782
+ getColumnRenderer(column) {
783
+ if (column.renderer !== undefined) {
784
+ return column.renderer;
785
+ }
786
+ return EntityTableColumnRenderer.Default;
787
+ }
788
+ /**
789
+ * Return the table ngClass
790
+ * @returns ngClass
791
+ * @internal
792
+ */
793
+ getTableClass() {
794
+ return {
795
+ 'igo-entity-table-with-selection': this.selection
796
+ };
797
+ }
798
+ /**
799
+ * Return a header ngClass
800
+ * @returns ngClass
801
+ * @internal
802
+ */
803
+ getHeaderClass() {
804
+ const func = this.template.headerClassFunc;
805
+ if (func instanceof Function) {
806
+ return func();
807
+ }
808
+ return {};
809
+ }
810
+ /**
811
+ * Return a row ngClass
812
+ * @param record Record
813
+ * @returns ngClass
814
+ * @internal
815
+ */
816
+ getRowClass(record) {
817
+ const entity = record.entity;
818
+ const func = this.template.rowClassFunc;
819
+ if (func instanceof Function) {
820
+ return func(entity, record);
821
+ }
822
+ return {};
823
+ }
824
+ /**
825
+ * Return a row ngClass
826
+ * @param record Record
827
+ * @param column Column
828
+ * @returns ngClass
829
+ * @internal
830
+ */
831
+ getCellClass(record, column) {
832
+ const entity = record.entity;
833
+ const cls = {};
834
+ const tableFunc = this.template.cellClassFunc;
835
+ if (tableFunc instanceof Function) {
836
+ Object.assign(cls, tableFunc(entity, column, record));
837
+ }
838
+ const columnFunc = column.cellClassFunc;
839
+ if (columnFunc instanceof Function) {
840
+ Object.assign(cls, columnFunc(entity, record));
841
+ }
842
+ return cls;
843
+ }
844
+ /**
845
+ * When a button is clicked
846
+ * @param func Function
847
+ * @param record Record
848
+ * @internal
849
+ */
850
+ onButtonClick(clickFunc, record) {
851
+ if (typeof clickFunc === 'function') {
852
+ clickFunc(record.entity, record);
853
+ }
854
+ }
855
+ }
856
+ EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
857
+ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", ""], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "click", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "click"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "click"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
858
+ i0.ɵɵelementStart(0, "div", 0);
859
+ i0.ɵɵelementStart(1, "table", 1);
860
+ i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
861
+ i0.ɵɵelementContainerStart(2, 2);
862
+ i0.ɵɵtemplate(3, EntityTableComponent_th_3_Template, 2, 1, "th", 3);
863
+ i0.ɵɵtemplate(4, EntityTableComponent_td_4_Template, 2, 1, "td", 4);
864
+ i0.ɵɵelementContainerEnd();
865
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_Template, 4, 4, "ng-container", 5);
866
+ i0.ɵɵtemplate(6, EntityTableComponent_tr_6_Template, 1, 1, "tr", 6);
867
+ i0.ɵɵtemplate(7, EntityTableComponent_tr_7_Template, 1, 4, "tr", 7);
868
+ i0.ɵɵelementEnd();
869
+ i0.ɵɵtemplate(8, EntityTableComponent_igo_entity_table_paginator_8_Template, 1, 3, "igo-entity-table-paginator", 8);
870
+ i0.ɵɵelementEnd();
871
+ } if (rf & 2) {
872
+ i0.ɵɵadvance(1);
873
+ i0.ɵɵproperty("ngClass", ctx.getTableClass())("dataSource", ctx.dataSource)("trackBy", ctx.getTrackByFunction());
874
+ i0.ɵɵadvance(4);
875
+ i0.ɵɵproperty("ngForOf", ctx.template.columns);
876
+ i0.ɵɵadvance(1);
877
+ i0.ɵɵproperty("matHeaderRowDef", ctx.headers)("matHeaderRowDefSticky", ctx.fixedHeader);
878
+ i0.ɵɵadvance(1);
879
+ i0.ɵɵproperty("matRowDefColumns", ctx.headers);
880
+ i0.ɵɵadvance(1);
881
+ i0.ɵɵproperty("ngIf", ctx.withPaginator);
882
+ } }, directives: [i1.MatTable, i2.MatSort, i3.NgClass, i1.MatColumnDef, i1.MatHeaderCellDef, i1.MatCellDef, i3.NgForOf, i1.MatHeaderRowDef, i1.MatRowDef, i3.NgIf, i1.MatHeaderCell, i4.MatCheckbox, i1.MatCell, i2.MatSortHeader, i5.MatIcon, i6.MatButton, i7.StopPropagationDirective, i1.MatHeaderRow, i1.MatRow, i8.EntityTableRowDirective, i9.EntityTablePaginatorComponent], pipes: [i3.AsyncPipe, i10.SecureImagePipe, i11.TranslatePipe, i12.SanitizeHtmlPipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}th.mat-header-cell[_ngcontent-%COMP%], td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%]{padding:0 3px}entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}"], changeDetection: 0 });
883
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
884
+ type: Component,
885
+ args: [{
886
+ selector: 'igo-entity-table',
887
+ templateUrl: './entity-table.component.html',
888
+ styleUrls: ['./entity-table.component.scss'],
889
+ changeDetection: ChangeDetectionStrategy.OnPush
890
+ }]
891
+ }], function () { return [{ type: i0.ChangeDetectorRef }]; }, { store: [{
892
+ type: Input
893
+ }], paginator: [{
894
+ type: Input
895
+ }], template: [{
896
+ type: Input
897
+ }], scrollBehavior: [{
898
+ type: Input
899
+ }], sortNullsFirst: [{
900
+ type: Input
901
+ }], withPaginator: [{
902
+ type: Input
903
+ }], paginatorOptions: [{
904
+ type: Input
905
+ }], entityClick: [{
906
+ type: Output
907
+ }], entitySelectChange: [{
908
+ type: Output
909
+ }], entitySortChange: [{
910
+ type: Output
911
+ }] }); })();
912
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBTXhCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFPTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztJQ2ZuRCw2QkFBZ0U7SUFDOUQsd0NBRWtGO0lBRnBFLHFQQUF1QztJQUdyRCxpQkFBZTtJQUNqQiwwQkFBZTs7OztJQUhDLGVBQTREO0lBQTVELG9GQUE0RCw4RUFBQTs7O0lBSDlFLDZCQUFpQztJQUMvQiw0R0FLZTs7SUFDakIsMEJBQWU7OztJQU5FLGVBQThCO0lBQTlCLG1FQUE4Qjs7O0lBRmpELDZCQUFzQztJQUNwQyw2RkFPZTtJQUNqQixpQkFBSzs7O0lBUlksZUFBZ0I7SUFBaEIsd0NBQWdCOzs7O0lBU2pDLDhCQUFzQztJQUNwQyx3Q0FHZ0Q7SUFIbEMsNElBQStCLHVCQUF1QixHQUFHLElBQUksSUFBQyxvVUFDd0Isd0JBQXdCLElBRGhELG9SQUFBO0lBSTVFLGlCQUFlO0lBQ2pCLGlCQUFLOzs7O0lBRlcsZUFBaUM7SUFBakMsMERB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QjtRQUMzQixnQ0FNbUM7UUFBakMsc0hBQWlCLGtCQUFjLElBQUM7UUFFaEMsZ0NBQXlFO1FBQ3ZFLG1FQVNLO1FBQ0wsbUVBTUs7UUFDUCwwQkFBZTtRQUVmLHVGQTBGZTtRQUVmLG1FQUlLO1FBQ0wsbUVBVUs7UUFDUCxpQkFBUTtRQUNSLG1IQUs2QjtRQUMvQixpQkFBTTs7UUE1SUYsZUFBMkI7UUFBM0IsNkNBQTJCLDhCQUFBLHFDQUFBO1FBeUJtQyxlQUFtQjtRQUFuQiw4Q0FBbUI7UUE4RjlFLGVBQTBCO1FBQTFCLDZDQUEwQiwwQ0FBQTtRQU1ILGVBQWlCO1FBQWpCLDhDQUFpQjtRQVNoQixlQUFtQjtRQUFuQix3Q0FBbUI7O3VGRHRHckMsb0JBQW9CO2NBTmhDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixXQUFXLEVBQUUsK0JBQStCO2dCQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztnQkFDNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7b0VBMkNVLEtBQUs7a0JBQWIsS0FBSztZQUtPLFNBQVM7a0JBQXJCLEtBQUs7WUFhRyxRQUFRO2tCQUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBFbnRpdHlLZXksXHJcbiAgRW50aXR5UmVjb3JkLFxyXG4gIEVudGl0eVN0YXRlLFxyXG4gIEVudGl0eVN0b3JlLFxyXG4gIEVudGl0eVRhYmxlVGVtcGxhdGUsXHJcbiAgRW50aXR5VGFibGVDb2x1bW4sXHJcbiAgRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcixcclxuICBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLFxyXG4gIEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3JcclxufSBmcm9tICcuLi9zaGFyZWQnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucyB9IGZyb20gJy4uL2VudGl0eS10YWJsZS1wYWdpbmF0b3IvZW50aXR5LXRhYmxlLXBhZ2luYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tZW50aXR5LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9lbnRpdHktdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW50aXR5VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgZW50aXR5U29ydENoYW5nZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbHVtbiByZW5kZXJlciB0eXBlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIgPSBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyO1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbidzIHN0YXRlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGlvbixzIHN0YXRlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIHNlbGVjdGlvbiQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgZGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGF0YVNvdXJjZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsYXN0IHJlY29yZCBjaGVja2VkLiBVc2VmdWwgZm9yIHNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJlY29yZHMgYnkgaG9sZGluZyB0aGUgc2hpZnQga2V5IGFuZCBjaGVja2luZ1xyXG4gICAqIGNoZWNrYm94ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXN0UmVjb3JkQ2hlY2tlZEtleTogRW50aXR5S2V5O1xyXG5cclxuICAvKipcclxuICAgKiBFbnRpdHkgc3RvcmVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgcGFnaW5hdG9yXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICB0aGlzLl9wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGwgYmVoYXZpb3Igb24gc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzY3JvbGxCZWhhdmlvcjogRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvciA9IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IuQXV0bztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBudWxscyBzaG91bGQgYmUgZmlyc3Qgd2hlbiBzb3J0aW5nXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzb3J0TnVsbHNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTaG93IHRoZSB0YWJsZSBwYWdpbmF0b3Igb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgd2l0aFBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQYWdpbmF0b3Igb3B0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnaW5hdG9yT3B0aW9uczogRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGFkZGVkOiBvYmplY3RbXTtcclxuICB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRhYmxlIHNvcnQgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSBoZWFkZXJzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGhlYWRlcnMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgIT09IGZhbHNlKVxyXG4gICAgICAubWFwKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hlY2tib3ggPT09IHRydWUpIHtcclxuICAgICAgY29sdW1ucyA9IFsnc2VsZWN0aW9uQ2hlY2tib3gnXS5jb25jYXQoY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHNvdXJjZSBjb25zdW1hYmxlIGJ5IHRoZSB1bmRlcmx5aW5nIG1hdGVyaWFsIHRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8b2JqZWN0PigpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb24gfHwgZmFsc2U7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIHNlbGVjdGlvbiBjaGVja2JveCBzaG91bGQgYmUgZGlzcGxheWVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdGlvbkNoZWNrYm94KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb25DaGVja2JveCB8fCBmYWxzZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0TWFueSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0TWFueSB8fCBmYWxzZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgZml4ZWRIZWFkZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlcjsgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVEYXRhc291cmNlKCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZSlcclxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWQgPSByZWNvcmRzWzBdO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpLmluZGV4T2YoZmlyc3RTZWxlY3RlZCk7XHJcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yID8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICsgMSkgOiAwO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VNaW4gPSB0aGlzLnBhZ2luYXRvciA/IHBhZ2VNYXggLSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA6IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yICYmXHJcbiAgICAgICAgICAoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIDwgcGFnZU1pbiB8fFxyXG4gICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID49IHBhZ2VNYXgpKSB7XHJcbiAgICAgICAgICBjb25zdCBwYWdlVG9SZWFjaCA9IE1hdGguZmxvb3IoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIC8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlSW5kZXggPSBwYWdlVG9SZWFjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSQubmV4dCh0aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZShyZWNvcmRzKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwkKCkuc3Vic2NyaWJlKChhbGwpID0+IHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBhbGw7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVbmJpbmQgdGhlIHN0b3JlIHdhdGNoZXJcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVN0b3JlKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uJCQpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24kJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSQkKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2J5IGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gaW5kZXggUmVjb3JkIGluZGV4XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3QsIEVudGl0eVN0YXRlPikgPT4ge1xyXG4gICAgICByZXR1cm4gcmVjb3JkLnJlZjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VyIGEgcmVmcmVzaCBvZiB0aHJlIHRhYmxlLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlblxyXG4gICAqIHRoZSBkYXRhIHNvdXJjZSBkb2Vzbid0IGVtaXQgYSBuZXcgdmFsdWUgYnV0IGZvciBzb21lIHJlYXNvblxyXG4gICAqIHRoZSByZWNvcmRzIG5lZWQgYW4gdXBkYXRlLlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHBhZ2luYXRvckNoYW5nZShldmVudDogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRvciA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc29ydCwgc29ydCB0aGUgc3RvcmVcclxuICAgKiBAcGFyYW0gZXZlbnQgU29ydCBldmVudFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uU29ydChldmVudDoge2FjdGl2ZTogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZ30pIHtcclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGV2ZW50LmRpcmVjdGlvbjtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGVtcGxhdGUuY29sdW1uc1xyXG4gICAgICAuZmluZCgoYzogRW50aXR5VGFibGVDb2x1bW4pID0+IGMubmFtZSA9PT0gZXZlbnQuYWN0aXZlKTtcclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJyB8fCBkaXJlY3Rpb24gPT09ICdkZXNjJykge1xyXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHtcclxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdGhpcy5nZXRWYWx1ZShyZWNvcmQsIGNvbHVtbiksXHJcbiAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgIG51bGxzRmlyc3Q6IHRoaXMuc29ydE51bGxzRmlyc3RcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZS5lbWl0KHtjb2x1bW4sIGRpcmVjdGlvbn0pO1xyXG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UkLm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBjbGlja2VkLCBlbWl0IGFuIGV2ZW50XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblJvd0NsaWNrKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICAgIHRoaXMuZW50aXR5Q2xpY2suZW1pdChyZWNvcmQuZW50aXR5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHNlbGVjdGVkLCBzZWxlY3QgaXQgaW4gdGhlIHN0b3JlIGFuZCBlbWl0IGFuIGV2ZW50LiBFdmVuIGlmXHJcbiAgICogXCJtYW55XCIgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIGFsd2F5cyBzZWxlY3QgYSBzaW5nbGUsIGV4Y2x1c2l2ZSByb3cuIFNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJvd3Mgc2hvdWxkIGJlIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBjaGVja2JveGVzLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Sb3dTZWxlY3QocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRydWV9LCB0cnVlKTtcclxuICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXR5XX0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IG9yIHVuc2VsZWN0IGFsbCByb3dzIGF0IG9uY2UuIE9uIHNlbGVjdCwgZW1pdCBhbiBldmVudC5cclxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlUm93cyh0b2dnbGU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVBbGwoe3NlbGVjdGVkOiB0b2dnbGV9KTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAgIC5hbGwoKVxyXG4gICAgICAgIC5tYXAoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5lbnRpdHkpO1xyXG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0aWVzXX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxyXG4gICAqIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgY29uc3QgZXhjbHVzaXZlID0gdG9nZ2xlID09PSB0cnVlICYmICF0aGlzLnNlbGVjdE1hbnk7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHtzZWxlY3RlZDogdG9nZ2xlfSwgZXhjbHVzaXZlKTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXHJcbiAgICogZW1pdCBhbiBldmVudC5cclxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25TaGlmdFRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdE1hbnkgPT09IGZhbHNlIHx8IHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm9uVG9nZ2xlUm93KHRvZ2dsZSwgcmVjb3JkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIG1hdCBjaGVja2JveCB3cm9uZyBiZWhhdmlvclxyXG4gICAgLy8gd2hlbiB0aGUgc2hpZnQga2V5IGlzIGhlbGQuXHJcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvNjIzMlxyXG4gICAgY29uc3QgcmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIHJhbmdlLnNlbGVjdE5vZGUoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcclxuICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCByZWNvcmRzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsKCk7XHJcbiAgICBjb25zdCByZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihyZWNvcmQpO1xyXG4gICAgY29uc3QgbGFzdFJlY29yZENoZWNrZWQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXQodGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSk7XHJcbiAgICBjb25zdCBsYXN0UmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YobGFzdFJlY29yZENoZWNrZWQpO1xyXG4gICAgY29uc3QgaW5kZXhlcyA9IFtyZWNvcmRJbmRleCwgbGFzdFJlY29yZEluZGV4XTtcclxuICAgIGNvbnN0IHNlbGVjdFJlY29yZHMgPSByZWNvcmRzLnNsaWNlKE1hdGgubWluKC4uLmluZGV4ZXMpLCBNYXRoLm1heCguLi5pbmRleGVzKSArIDEpO1xyXG5cclxuICAgIGNvbnN0IGVudGl0aWVzID0gc2VsZWN0UmVjb3Jkcy5tYXAoKF9yZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBfcmVjb3JkLmVudGl0eSk7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZU1hbnkoZW50aXRpZXMsIHtzZWxlY3RlZDogdG9nZ2xlfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBlbnRpdGllc30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSB0aGUgc2VsZWN0aW9uIHN0YXRlXHJcbiAgICogQHJldHVybnMgV2hldGhlciBhbGwsIHNvbWUgb3Igbm8gcm93cyBhcmUgc2VsZWN0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcml2YXRlIGNvbXB1dGVTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pOiBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlIHtcclxuICAgIGNvbnN0IHN0YXRlcyA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Db3VudCA9IHNlbGVjdGVkUmVjb3Jkcy5sZW5ndGg7XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ291bnQgPT09IDAgP1xyXG4gICAgICBzdGF0ZXMuTm9uZSA6XHJcbiAgICAgIChzZWxlY3Rpb25Db3VudCA9PT0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuY291bnQgPyBzdGF0ZXMuQWxsIDogc3RhdGVzLlNvbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZVxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbHVtbiBpcyBzb3J0YWJsZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGNvbHVtbklzU29ydGFibGUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNvcnRhYmxlID0gY29sdW1uLnNvcnQ7XHJcbiAgICBpZiAoc29ydGFibGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzb3J0YWJsZSA9IHRoaXMudGVtcGxhdGUuc29ydCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLnRlbXBsYXRlLnNvcnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc29ydGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgcm93IGlzIHNob3VsZCBiZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBlbnRpdHkgc3RhdGVcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSByb3cgc2hvdWxkIGJlIHNlbGVjdGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcm93SXNTZWxlY3RlZChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHJlY29yZC5zdGF0ZTtcclxuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZCA/IHN0YXRlLnNlbGVjdGVkIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0ltZyh2YWx1ZSkge1xyXG4gICAgaWYgKHRoaXMuaXNVcmwodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgWydqcGcnLCAncG5nJywgJ2dpZiddLmluZGV4T2YodmFsdWUuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVXJsKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHZhbHVlLnNsaWNlKDAsIDgpID09PSAnaHR0cHM6Ly8nIHx8IHZhbHVlLnNsaWNlKDAsIDcpID09PSAnaHR0cDovLydcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCB0byBhY2Nlc3MgYW4gZW50aXR5J3MgdmFsdWVzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFZhbHVlKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBhbnkge1xyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGlmIChjb2x1bW4udmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4udmFsdWVBY2Nlc3NvcihlbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvcihlbnRpdHksIGNvbHVtbi5uYW1lLCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0UHJvcGVydHkoZW50aXR5LCBjb2x1bW4ubmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgcmVuZGVyZXIgb2YgYSBjb2x1bW5cclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIFJlbmRlcmVyIHR5cGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciB7XHJcbiAgICBpZiAoY29sdW1uLnJlbmRlcmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5yZW5kZXJlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHRhYmxlIG5nQ2xhc3NcclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VGFibGVDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2lnby1lbnRpdHktdGFibGUtd2l0aC1zZWxlY3Rpb24nOiB0aGlzLnNlbGVjdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGhlYWRlciBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldEhlYWRlckNsYXNzKCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5oZWFkZXJDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFJvd0NsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLnJvd0NsYXNzRnVuYztcclxuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZ1bmMoZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldENlbGxDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBjbHMgPSB7fTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XHJcbiAgICBpZiAodGFibGVGdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIHRhYmxlRnVuYyhlbnRpdHksIGNvbHVtbiwgcmVjb3JkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1uRnVuYyA9IGNvbHVtbi5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICBPYmplY3QuYXNzaWduKGNscywgY29sdW1uRnVuYyhlbnRpdHksIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjbHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25CdXR0b25DbGljayhcclxuICAgIGNsaWNrRnVuYzogKGVudGl0eTogb2JqZWN0LCByZWNvcmQ/OiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdm9pZCxcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cclxuICApIHtcclxuICAgIGlmICh0eXBlb2YgY2xpY2tGdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNsaWNrRnVuYyhyZWNvcmQuZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxyXG4gIDx0YWJsZVxyXG4gICAgbWF0LXRhYmxlXHJcbiAgICBtYXRTb3J0XHJcbiAgICBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzKClcIlxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJhY2tCeV09XCJnZXRUcmFja0J5RnVuY3Rpb24oKVwiXHJcbiAgICAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0aW9uQ2hlY2tib3hcIiBjbGFzcz1cIm1hdC1jZWxsLWNoZWNrYm94XCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE1hbnlcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25TdGF0ZSQgfCBhc3luYyBhcyBzZWxlY3Rpb25TdGF0ZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwib25Ub2dnbGVSb3dzKCRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25TdGF0ZSA9PT0gZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZS5Tb21lXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICA8bWF0LWNoZWNrYm94IChtb3VzZWRvd24pPVwiJGV2ZW50LnNoaWZ0S2V5ID8gJGV2ZW50LnByZXZlbnREZWZhdWx0KCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc2hpZnRLZXkgPyBvblNoaWZ0VG9nZ2xlUm93KCFyb3dJc1NlbGVjdGVkKHJlY29yZCksIHJlY29yZCwgJGV2ZW50KSA6ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93KCRldmVudC5jaGVja2VkLCByZWNvcmQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0ZW1wbGF0ZS5jb2x1bW5zXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbilcIj5cclxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cclxuICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pIGFzIGNvbHVtblJlbmRlcmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxEZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgIHt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uY29tbW9uLmVudGl0eS10YWJsZS50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkhUTUxcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxIVE1MXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XHJcbiAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19IDwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzYW5pdGl6ZUh0bWxcIj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybFVuc2FuaXRpemVkSFRNTD5cclxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfMKgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5JY29uXCI+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIiBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXBcIj5cclxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGlnb1N0b3BQcm9wYWdhdGlvblxyXG4gICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbi5jbGljaywgcmVjb3JkKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7YnV0dG9uLmljb259fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJidXR0b24uc3R5bGUgIT09ICdtYXQtaWNvbi1idXR0b24nXCJcclxuICAgICAgICAgICAgICAgICAgaWdvU3RvcFByb3BhZ2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDx0clxyXG4gICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAqbWF0SGVhZGVyUm93RGVmPVwiaGVhZGVyczsgc3RpY2t5OiBmaXhlZEhlYWRlcjtcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRIZWFkZXJDbGFzcygpXCI+XHJcbiAgICA8L3RyPlxyXG4gICAgPHRyXHJcbiAgICAgIG1hdC1yb3dcclxuICAgICAgaWdvRW50aXR5VGFibGVSb3dcclxuICAgICAgKm1hdFJvd0RlZj1cImxldCByZWNvcmQ7IGNvbHVtbnM6IGhlYWRlcnM7XCJcclxuICAgICAgW3Njcm9sbEJlaGF2aW9yXT1cInNjcm9sbEJlaGF2aW9yXCJcclxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MocmVjb3JkKVwiXHJcbiAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcclxuICAgICAgW3NlbGVjdGVkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiXHJcbiAgICAgIChzZWxlY3QpPVwib25Sb3dTZWxlY3QocmVjb3JkKVwiXHJcbiAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJlY29yZClcIj5cclxuICAgIDwvdHI+XHJcbiAgPC90YWJsZT5cclxuICA8aWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3IgKm5nSWY9XCJ3aXRoUGFnaW5hdG9yXCJcclxuICAgIFtzdG9yZV09XCJzdG9yZVwiXHJcbiAgICBbcGFnaW5hdG9yT3B0aW9uc109XCJwYWdpbmF0b3JPcHRpb25zXCJcclxuICAgIFtlbnRpdHlTb3J0Q2hhbmdlJF09XCJlbnRpdHlTb3J0Q2hhbmdlJFwiXHJcbiAgICAocGFnaW5hdG9yQ2hhbmdlKT1cInBhZ2luYXRvckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgPC9pZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcbiJdfQ==