aril 1.2.18 → 1.2.20

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 (398) hide show
  1. package/boot/config/apps/src/interfaces.d.ts +7 -1
  2. package/boot/config/apps/src/route-permissions.d.ts +2 -2
  3. package/esm2022/boot/config/api/src/interfaces.mjs +3 -2
  4. package/esm2022/boot/config/apps/src/apps.service.mjs +5 -5
  5. package/esm2022/boot/config/apps/src/auth.guard.mjs +4 -4
  6. package/esm2022/boot/config/apps/src/interfaces.mjs +2 -1
  7. package/esm2022/boot/config/apps/src/route-permissions.mjs +24 -6
  8. package/esm2022/boot/config/apps/src/showdowDOMWrapper.mjs +4 -4
  9. package/esm2022/boot/config/plugins/src/plugins.service.mjs +7 -5
  10. package/esm2022/boot/host/src/app.component.mjs +4 -4
  11. package/esm2022/boot/host/src/bootstrap.mjs +5 -3
  12. package/esm2022/boot/mfe/src/app.component.mjs +4 -4
  13. package/esm2022/boot/mfe/src/bootstrap.mjs +5 -3
  14. package/esm2022/boot/pages/src/forbidden.component.mjs +4 -4
  15. package/esm2022/boot/pages/src/notFound.component.mjs +4 -4
  16. package/esm2022/http/src/httpBackend.mjs +4 -4
  17. package/esm2022/i18n/src/i18n.module.mjs +5 -5
  18. package/esm2022/i18n/src/loader.mjs +4 -4
  19. package/esm2022/keycloak/src/auth.interceptor.mjs +5 -2
  20. package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +4 -4
  21. package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +4 -4
  22. package/esm2022/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.mjs +4 -4
  23. package/esm2022/theme/layout/app/favorite-pages/favorite-pages.service.mjs +4 -4
  24. package/esm2022/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.mjs +4 -4
  25. package/esm2022/theme/layout/app/general-search/general-search.component.mjs +4 -4
  26. package/esm2022/theme/layout/app/history/history-sidebar.component.mjs +4 -4
  27. package/esm2022/theme/layout/app/history/history.service.mjs +4 -4
  28. package/esm2022/theme/layout/app/layout/app.layout.component.mjs +4 -4
  29. package/esm2022/theme/layout/app/layout/mfe.layout.component.mjs +4 -4
  30. package/esm2022/theme/layout/app/notifications/notifications-sidebar.component.mjs +4 -4
  31. package/esm2022/theme/layout/app/profileSidebar/app.profilesidebar.component.mjs +4 -4
  32. package/esm2022/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.mjs +4 -4
  33. package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +4 -4
  34. package/esm2022/theme/layout/app/profileSidebar/profile.service.mjs +4 -4
  35. package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +4 -4
  36. package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +4 -4
  37. package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +18 -6
  38. package/esm2022/theme/layout/service/app.layout.service.mjs +4 -4
  39. package/esm2022/theme/layout/service/app.menu.service.mjs +4 -4
  40. package/esm2022/theme/layout/service/breadcrumb.service.mjs +4 -4
  41. package/esm2022/theme/layout/service/notifications.service.mjs +4 -4
  42. package/esm2022/theme/layout/service/search.service.mjs +4 -4
  43. package/esm2022/theme/layout/service/selection-group.service.mjs +4 -4
  44. package/esm2022/ui/autoComplete/src/auto-complete.component.mjs +4 -4
  45. package/esm2022/ui/badge/src/badge.component.mjs +4 -4
  46. package/esm2022/ui/button/src/button.component.mjs +8 -5
  47. package/esm2022/ui/button/src/split-button.component.mjs +4 -4
  48. package/esm2022/ui/calendar/src/calendar.component.mjs +4 -4
  49. package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +4 -4
  50. package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +4 -4
  51. package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +4 -4
  52. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +4 -4
  53. package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +4 -4
  54. package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +4 -4
  55. package/esm2022/ui/charts/src/highCharts/gauge/solid-gauge.component.mjs +4 -4
  56. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +4 -4
  57. package/esm2022/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.mjs +4 -4
  58. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +4 -4
  59. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +4 -4
  60. package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +4 -4
  61. package/esm2022/ui/checkbox/src/check-box.component.mjs +4 -4
  62. package/esm2022/ui/checkbox/src/tri-state-checkbox.component.mjs +4 -4
  63. package/esm2022/ui/chip/src/chip.component.mjs +4 -4
  64. package/esm2022/ui/collapse-reorder-list/src/collapse-reorder-list.component.mjs +4 -4
  65. package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +4 -4
  66. package/esm2022/ui/dxField/src/dx-field.component.mjs +4 -4
  67. package/esm2022/ui/editor/src/aril-editor.component.mjs +4 -4
  68. package/esm2022/ui/field/src/field.component.mjs +4 -4
  69. package/esm2022/ui/fileUpload/src/file-upload.component.mjs +4 -4
  70. package/esm2022/ui/form/index.mjs +5 -5
  71. package/esm2022/ui/form/src/form-submit-button.component.mjs +4 -4
  72. package/esm2022/ui/form/src/form.component.mjs +4 -4
  73. package/esm2022/ui/img-viewer/src/img-viewer.component.mjs +4 -4
  74. package/esm2022/ui/json-diff-comparison/src/json-diff.component.mjs +4 -4
  75. package/esm2022/ui/lib/src/form/form-error-message.component.mjs +4 -4
  76. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +4 -4
  77. package/esm2022/ui/lib/src/grid/enum-color-picker.pipe.mjs +4 -4
  78. package/esm2022/ui/lib/src/grid/flex-grid.directive.mjs +4 -4
  79. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +4 -4
  80. package/esm2022/ui/lib/src/input/dx-input-error-message.pipe.mjs +4 -4
  81. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +4 -4
  82. package/esm2022/ui/lib/src/input/input-error-message.pipe.mjs +4 -4
  83. package/esm2022/ui/lib/src/input/value-accessor.directive.mjs +4 -4
  84. package/esm2022/ui/loader/src/loader.component.mjs +4 -4
  85. package/esm2022/ui/mask/src/mask.component.mjs +4 -4
  86. package/esm2022/ui/multiSelect/src/multi-select.component.mjs +4 -4
  87. package/esm2022/ui/number/src/number.component.mjs +4 -4
  88. package/esm2022/ui/operation-types-dialog/src/operation-types-dialog.component.mjs +4 -4
  89. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +4 -4
  90. package/esm2022/ui/panel/src/panel.component.mjs +4 -4
  91. package/esm2022/ui/password/src/password.component.mjs +4 -4
  92. package/esm2022/ui/pdf-viewer/src/pdf-viewer.component.mjs +4 -4
  93. package/esm2022/ui/progressbar/src/progressbar.component.mjs +4 -4
  94. package/esm2022/ui/radioButton/src/radio-button.component.mjs +4 -4
  95. package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +4 -4
  96. package/esm2022/ui/selectBox/src/select-box.component.mjs +4 -4
  97. package/esm2022/ui/switch/src/switch.component.mjs +4 -4
  98. package/esm2022/ui/table/index.mjs +5 -5
  99. package/esm2022/ui/table/src/export-overlay-panel.component.mjs +4 -4
  100. package/esm2022/ui/table/src/table-column.component.mjs +4 -4
  101. package/esm2022/ui/table/src/table.component.mjs +4 -4
  102. package/esm2022/ui/table-expand/index.mjs +5 -5
  103. package/esm2022/ui/table-expand/src/table-column.component.mjs +4 -4
  104. package/esm2022/ui/table-expand/src/table-expand-area.component.mjs +4 -4
  105. package/esm2022/ui/table-expand/src/table.component.mjs +4 -4
  106. package/esm2022/ui/tag/src/tag.component.mjs +4 -4
  107. package/esm2022/ui/tagBox/src/tag-box.component.mjs +4 -4
  108. package/esm2022/ui/text/src/text.component.mjs +4 -4
  109. package/esm2022/ui/textArea/src/text-area.component.mjs +4 -4
  110. package/esm2022/ui/toggle-button/src/toggle-button.component.mjs +4 -4
  111. package/esm2022/ui/tooltip/src/tooltip-component.mjs +4 -4
  112. package/esm2022/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.mjs +4 -4
  113. package/esm2022/ui/translate-input/src/aril-translate-input.component.mjs +4 -4
  114. package/esm2022/ui/tree/src/tree.component.mjs +4 -4
  115. package/esm2022/ui/treeSelect/src/treeSelect.component.mjs +4 -4
  116. package/esm2022/ui/treeTable/src/tree-table.component.mjs +4 -4
  117. package/esm2022/ui/value/src/value.component.mjs +4 -4
  118. package/esm2022/ui-business/assetPicker/src/asset-picker.component.mjs +4 -4
  119. package/esm2022/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.mjs +4 -4
  120. package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +4 -4
  121. package/esm2022/ui-business/image-viewer/src/aril-image-viewer.component.mjs +4 -4
  122. package/esm2022/ui-business/multiple-ref-value/src/multiple-ref-value.component.mjs +4 -4
  123. package/esm2022/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.mjs +4 -4
  124. package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +4 -4
  125. package/esm2022/ui-business/pdf-preview-modal/src/pdf-preview-modal.component.mjs +4 -4
  126. package/esm2022/ui-business/ref-value/src/ref-value.component.mjs +4 -4
  127. package/esm2022/ui-business/rolePicker/src/role-picker.component.mjs +4 -4
  128. package/esm2022/ui-business/trace-drawer/src/app-log.service.mjs +4 -4
  129. package/esm2022/ui-business/trace-drawer/src/trace-drawer.component.mjs +4 -4
  130. package/esm2022/ui-business/trace-drawer/src/trace-log.service.mjs +4 -4
  131. package/esm2022/ui-business/trace-id/src/trace-id.component.mjs +4 -4
  132. package/esm2022/ui-business/userPicker/src/user-picker.component.mjs +4 -4
  133. package/esm2022/util/activity/aril-util-activity.mjs +5 -0
  134. package/esm2022/util/activity/index.mjs +4 -0
  135. package/esm2022/util/activity/src/activity.constants.mjs +4 -0
  136. package/esm2022/util/activity/src/activity.service.mjs +198 -0
  137. package/esm2022/util/activity/src/activity.types.mjs +2 -0
  138. package/esm2022/util/block/src/block.mjs +7 -7
  139. package/esm2022/util/directives/src/detail-page-customization/detail-page-customization.directive.mjs +4 -4
  140. package/esm2022/util/directives/src/dialog-component/plugin-dialog.component.mjs +4 -4
  141. package/esm2022/util/directives/src/dialog-service/plugin-dialog.service.mjs +4 -4
  142. package/esm2022/util/lib/src/module-router.mjs +4 -4
  143. package/esm2022/util/pipes/src/distance-to-now.pipe.mjs +4 -4
  144. package/esm2022/util/pipes/src/get-column-by-field.pipe.mjs +4 -4
  145. package/esm2022/util/pipes/src/parse.pipe.mjs +4 -4
  146. package/esm2022/util/pipes/src/round-number.pipe.mjs +4 -4
  147. package/esm2022/util/pipes/src/safe.pipe.mjs +4 -4
  148. package/esm2022/util/pipes/src/translate-json/translate-json.pipe.mjs +4 -4
  149. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +4 -4
  150. package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +4 -4
  151. package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +4 -4
  152. package/fesm2022/{aril-app.component-wxP3y8dg.mjs → aril-app.component-CwZZhJcO.mjs} +5 -4
  153. package/fesm2022/{aril-app.component-wxP3y8dg.mjs.map → aril-app.component-CwZZhJcO.mjs.map} +1 -1
  154. package/fesm2022/aril-boot-base.mjs +1 -1
  155. package/fesm2022/aril-boot-base.mjs.map +1 -1
  156. package/fesm2022/aril-boot-bridge.mjs.map +1 -1
  157. package/fesm2022/aril-boot-config-api.mjs +3 -2
  158. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  159. package/fesm2022/aril-boot-config-apps.mjs +35 -16
  160. package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
  161. package/fesm2022/aril-boot-config-plugins.mjs +7 -5
  162. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
  163. package/fesm2022/aril-boot-config-translate.mjs.map +1 -1
  164. package/fesm2022/aril-boot-host.mjs +8 -6
  165. package/fesm2022/aril-boot-host.mjs.map +1 -1
  166. package/fesm2022/{aril-boot-mfe-app.component-7IjAmjz0.mjs → aril-boot-mfe-app.component-DwYgUUdL.mjs} +6 -5
  167. package/fesm2022/{aril-boot-mfe-app.component-7IjAmjz0.mjs.map → aril-boot-mfe-app.component-DwYgUUdL.mjs.map} +1 -1
  168. package/fesm2022/{aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs → aril-boot-mfe-aril-boot-mfe-hJkkFa_a.mjs} +8 -6
  169. package/fesm2022/{aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs.map → aril-boot-mfe-aril-boot-mfe-hJkkFa_a.mjs.map} +1 -1
  170. package/fesm2022/aril-boot-mfe.mjs +2 -1
  171. package/fesm2022/aril-boot-mfe.mjs.map +1 -1
  172. package/fesm2022/aril-boot-pages.mjs +6 -6
  173. package/fesm2022/aril-boot-pages.mjs.map +1 -1
  174. package/fesm2022/aril-http.mjs +3 -3
  175. package/fesm2022/aril-http.mjs.map +1 -1
  176. package/fesm2022/aril-i18n.mjs +7 -7
  177. package/fesm2022/aril-i18n.mjs.map +1 -1
  178. package/fesm2022/aril-keycloak.mjs +4 -1
  179. package/fesm2022/aril-keycloak.mjs.map +1 -1
  180. package/fesm2022/aril-provider.mjs +1 -1
  181. package/fesm2022/aril-provider.mjs.map +1 -1
  182. package/fesm2022/aril-theme-layout.mjs +85 -74
  183. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  184. package/fesm2022/aril-ui-autoComplete.mjs +6 -6
  185. package/fesm2022/aril-ui-autoComplete.mjs.map +1 -1
  186. package/fesm2022/aril-ui-badge.mjs +4 -4
  187. package/fesm2022/aril-ui-badge.mjs.map +1 -1
  188. package/fesm2022/aril-ui-business-assetPicker.mjs +5 -5
  189. package/fesm2022/aril-ui-business-assetPicker.mjs.map +1 -1
  190. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs +5 -5
  191. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs.map +1 -1
  192. package/fesm2022/aril-ui-business-enumPicker.mjs +5 -5
  193. package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -1
  194. package/fesm2022/aril-ui-business-image-viewer.mjs +3 -3
  195. package/fesm2022/aril-ui-business-image-viewer.mjs.map +1 -1
  196. package/fesm2022/aril-ui-business-multiple-ref-value.mjs +4 -4
  197. package/fesm2022/aril-ui-business-multiple-ref-value.mjs.map +1 -1
  198. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs +3 -3
  199. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs.map +1 -1
  200. package/fesm2022/aril-ui-business-operation-types-dialog.mjs +3 -3
  201. package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +1 -1
  202. package/fesm2022/aril-ui-business-pdf-preview-modal.mjs +3 -3
  203. package/fesm2022/aril-ui-business-pdf-preview-modal.mjs.map +1 -1
  204. package/fesm2022/aril-ui-business-ref-value.mjs +4 -4
  205. package/fesm2022/aril-ui-business-ref-value.mjs.map +1 -1
  206. package/fesm2022/aril-ui-business-rolePicker.mjs +4 -4
  207. package/fesm2022/aril-ui-business-rolePicker.mjs.map +1 -1
  208. package/fesm2022/aril-ui-business-trace-drawer.mjs +10 -10
  209. package/fesm2022/aril-ui-business-trace-drawer.mjs.map +1 -1
  210. package/fesm2022/aril-ui-business-trace-id.mjs +4 -4
  211. package/fesm2022/aril-ui-business-trace-id.mjs.map +1 -1
  212. package/fesm2022/aril-ui-business-userPicker.mjs +3 -3
  213. package/fesm2022/aril-ui-business-userPicker.mjs.map +1 -1
  214. package/fesm2022/aril-ui-button.mjs +10 -7
  215. package/fesm2022/aril-ui-button.mjs.map +1 -1
  216. package/fesm2022/aril-ui-calendar.mjs +3 -3
  217. package/fesm2022/aril-ui-calendar.mjs.map +1 -1
  218. package/fesm2022/aril-ui-charts.mjs +37 -37
  219. package/fesm2022/aril-ui-charts.mjs.map +1 -1
  220. package/fesm2022/aril-ui-checkbox.mjs +6 -6
  221. package/fesm2022/aril-ui-checkbox.mjs.map +1 -1
  222. package/fesm2022/aril-ui-chip.mjs +4 -4
  223. package/fesm2022/aril-ui-chip.mjs.map +1 -1
  224. package/fesm2022/aril-ui-collapse-reorder-list.mjs +4 -4
  225. package/fesm2022/aril-ui-collapse-reorder-list.mjs.map +1 -1
  226. package/fesm2022/aril-ui-dxEditor.mjs +4 -4
  227. package/fesm2022/aril-ui-dxEditor.mjs.map +1 -1
  228. package/fesm2022/aril-ui-dxField.mjs +4 -4
  229. package/fesm2022/aril-ui-dxField.mjs.map +1 -1
  230. package/fesm2022/aril-ui-editor.mjs +4 -4
  231. package/fesm2022/aril-ui-editor.mjs.map +1 -1
  232. package/fesm2022/aril-ui-field.mjs +4 -4
  233. package/fesm2022/aril-ui-field.mjs.map +1 -1
  234. package/fesm2022/aril-ui-fileUpload.mjs +4 -4
  235. package/fesm2022/aril-ui-fileUpload.mjs.map +1 -1
  236. package/fesm2022/aril-ui-form.mjs +11 -11
  237. package/fesm2022/aril-ui-form.mjs.map +1 -1
  238. package/fesm2022/aril-ui-img-viewer.mjs +3 -3
  239. package/fesm2022/aril-ui-img-viewer.mjs.map +1 -1
  240. package/fesm2022/aril-ui-json-diff-comparison.mjs +4 -4
  241. package/fesm2022/aril-ui-json-diff-comparison.mjs.map +1 -1
  242. package/fesm2022/aril-ui-lib.mjs +28 -28
  243. package/fesm2022/aril-ui-lib.mjs.map +1 -1
  244. package/fesm2022/aril-ui-loader.mjs +3 -3
  245. package/fesm2022/aril-ui-loader.mjs.map +1 -1
  246. package/fesm2022/aril-ui-mask.mjs +3 -3
  247. package/fesm2022/aril-ui-mask.mjs.map +1 -1
  248. package/fesm2022/aril-ui-multiSelect.mjs +3 -3
  249. package/fesm2022/aril-ui-multiSelect.mjs.map +1 -1
  250. package/fesm2022/aril-ui-number.mjs +3 -3
  251. package/fesm2022/aril-ui-number.mjs.map +1 -1
  252. package/fesm2022/aril-ui-operation-types-dialog.mjs +3 -3
  253. package/fesm2022/aril-ui-operation-types-dialog.mjs.map +1 -1
  254. package/fesm2022/aril-ui-overlayPanel.mjs +4 -4
  255. package/fesm2022/aril-ui-overlayPanel.mjs.map +1 -1
  256. package/fesm2022/aril-ui-panel.mjs +4 -4
  257. package/fesm2022/aril-ui-panel.mjs.map +1 -1
  258. package/fesm2022/aril-ui-password.mjs +3 -3
  259. package/fesm2022/aril-ui-password.mjs.map +1 -1
  260. package/fesm2022/aril-ui-pdf-viewer.mjs +3 -3
  261. package/fesm2022/aril-ui-pdf-viewer.mjs.map +1 -1
  262. package/fesm2022/aril-ui-progressbar.mjs +3 -3
  263. package/fesm2022/aril-ui-progressbar.mjs.map +1 -1
  264. package/fesm2022/aril-ui-radioButton.mjs +3 -3
  265. package/fesm2022/aril-ui-radioButton.mjs.map +1 -1
  266. package/fesm2022/aril-ui-relativeDateSelector.mjs +4 -4
  267. package/fesm2022/aril-ui-relativeDateSelector.mjs.map +1 -1
  268. package/fesm2022/aril-ui-selectBox.mjs +5 -5
  269. package/fesm2022/aril-ui-selectBox.mjs.map +1 -1
  270. package/fesm2022/aril-ui-switch.mjs +3 -3
  271. package/fesm2022/aril-ui-switch.mjs.map +1 -1
  272. package/fesm2022/aril-ui-table-expand.mjs +14 -14
  273. package/fesm2022/aril-ui-table-expand.mjs.map +1 -1
  274. package/fesm2022/aril-ui-table.mjs +15 -15
  275. package/fesm2022/aril-ui-table.mjs.map +1 -1
  276. package/fesm2022/aril-ui-tag.mjs +3 -3
  277. package/fesm2022/aril-ui-tag.mjs.map +1 -1
  278. package/fesm2022/aril-ui-tagBox.mjs +5 -5
  279. package/fesm2022/aril-ui-tagBox.mjs.map +1 -1
  280. package/fesm2022/aril-ui-text.mjs +3 -3
  281. package/fesm2022/aril-ui-text.mjs.map +1 -1
  282. package/fesm2022/aril-ui-textArea.mjs +3 -3
  283. package/fesm2022/aril-ui-textArea.mjs.map +1 -1
  284. package/fesm2022/aril-ui-toggle-button.mjs +4 -4
  285. package/fesm2022/aril-ui-toggle-button.mjs.map +1 -1
  286. package/fesm2022/aril-ui-tooltip.mjs +3 -3
  287. package/fesm2022/aril-ui-tooltip.mjs.map +1 -1
  288. package/fesm2022/aril-ui-translate-input.mjs +6 -6
  289. package/fesm2022/aril-ui-translate-input.mjs.map +1 -1
  290. package/fesm2022/aril-ui-tree.mjs +4 -4
  291. package/fesm2022/aril-ui-tree.mjs.map +1 -1
  292. package/fesm2022/aril-ui-treeSelect.mjs +4 -4
  293. package/fesm2022/aril-ui-treeSelect.mjs.map +1 -1
  294. package/fesm2022/aril-ui-treeTable.mjs +4 -4
  295. package/fesm2022/aril-ui-treeTable.mjs.map +1 -1
  296. package/fesm2022/aril-ui-value.mjs +5 -5
  297. package/fesm2022/aril-ui-value.mjs.map +1 -1
  298. package/fesm2022/aril-util-activity.mjs +208 -0
  299. package/fesm2022/aril-util-activity.mjs.map +1 -0
  300. package/fesm2022/aril-util-block.mjs +6 -6
  301. package/fesm2022/aril-util-block.mjs.map +1 -1
  302. package/fesm2022/aril-util-directives.mjs +10 -10
  303. package/fesm2022/aril-util-directives.mjs.map +1 -1
  304. package/fesm2022/aril-util-lib.mjs +3 -3
  305. package/fesm2022/aril-util-lib.mjs.map +1 -1
  306. package/fesm2022/aril-util-pipes.mjs +18 -18
  307. package/fesm2022/aril-util-pipes.mjs.map +1 -1
  308. package/fesm2022/aril-util-primitive-extensions.mjs.map +1 -1
  309. package/fesm2022/aril-util-pub-sub.mjs +3 -3
  310. package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
  311. package/fesm2022/aril-util-sync-active-tab-route.mjs +4 -4
  312. package/fesm2022/aril-util-sync-active-tab-route.mjs.map +1 -1
  313. package/fesm2022/aril-util-unwrap.mjs +3 -3
  314. package/fesm2022/aril-util-unwrap.mjs.map +1 -1
  315. package/fesm2022/aril.mjs +13 -10
  316. package/fesm2022/aril.mjs.map +1 -1
  317. package/package.json +233 -227
  318. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.d.ts +16 -0
  319. package/theme/layout/app/history/history-sidebar.component.d.ts +16 -0
  320. package/theme/layout/app/notifications/notifications-sidebar.component.d.ts +16 -0
  321. package/theme/layout/app/site-map/site-map-sidebar.component.d.ts +16 -0
  322. package/theme/layout/app/topbar/app.topbar.component.d.ts +5 -0
  323. package/theme/layout/app/topbar/app.topbar.component.html +3 -0
  324. package/theme/layout/app/topbar/app.topbar.component.scss +31 -0
  325. package/theme/layout/app/topbar/app.topbar.component.ts +14 -1
  326. package/ui/autoComplete/src/auto-complete.component.d.ts +8 -8
  327. package/ui/badge/src/badge.component.d.ts +9 -9
  328. package/ui/button/src/button.component.d.ts +14 -12
  329. package/ui/button/src/split-button.component.d.ts +1 -1
  330. package/ui/calendar/src/calendar.component.d.ts +22 -22
  331. package/ui/charts/src/amCharts/column/column-chart.component.d.ts +4 -4
  332. package/ui/charts/src/amCharts/line/line-chart.component.d.ts +5 -5
  333. package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +4 -4
  334. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +3 -3
  335. package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +7 -7
  336. package/ui/charts/src/highCharts/column/column-chart.component.d.ts +9 -9
  337. package/ui/charts/src/highCharts/gauge/solid-gauge.component.d.ts +3 -3
  338. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +4 -4
  339. package/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.d.ts +5 -5
  340. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +4 -4
  341. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +4 -4
  342. package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +7 -7
  343. package/ui/checkbox/src/check-box.component.d.ts +3 -3
  344. package/ui/checkbox/src/tri-state-checkbox.component.d.ts +2 -2
  345. package/ui/chip/src/chip.component.d.ts +7 -7
  346. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.d.ts +4 -4
  347. package/ui/dxEditor/src/dx-editor.component.d.ts +5 -5
  348. package/ui/dxField/src/dx-field.component.d.ts +5 -5
  349. package/ui/editor/src/aril-editor.component.d.ts +3 -3
  350. package/ui/field/src/field.component.d.ts +9 -9
  351. package/ui/fileUpload/src/file-upload.component.d.ts +14 -14
  352. package/ui/form/src/form-submit-button.component.d.ts +1 -1
  353. package/ui/form/src/form.component.d.ts +1 -1
  354. package/ui/img-viewer/src/img-viewer.component.d.ts +1 -1
  355. package/ui/lib/src/form/form-error-message.directive.d.ts +1 -1
  356. package/ui/mask/src/mask.component.d.ts +6 -6
  357. package/ui/multiSelect/src/multi-select.component.d.ts +13 -13
  358. package/ui/number/src/number.component.d.ts +15 -15
  359. package/ui/overlayPanel/src/overlay-panel.component.d.ts +1 -1
  360. package/ui/panel/src/panel.component.d.ts +6 -6
  361. package/ui/password/src/password.component.d.ts +4 -4
  362. package/ui/pdf-viewer/src/pdf-viewer.component.d.ts +12 -12
  363. package/ui/progressbar/src/progressbar.component.d.ts +3 -3
  364. package/ui/radioButton/src/radio-button.component.d.ts +3 -3
  365. package/ui/selectBox/src/select-box.component.d.ts +10 -10
  366. package/ui/switch/src/switch.component.d.ts +1 -1
  367. package/ui/table/src/export-overlay-panel.component.d.ts +2 -2
  368. package/ui/table/src/table-column.component.d.ts +11 -11
  369. package/ui/table/src/table.component.d.ts +35 -35
  370. package/ui/table-expand/src/table-column.component.d.ts +6 -6
  371. package/ui/table-expand/src/table.component.d.ts +20 -20
  372. package/ui/tag/src/tag.component.d.ts +4 -6
  373. package/ui/tagBox/src/tag-box.component.d.ts +7 -7
  374. package/ui/text/src/text.component.d.ts +5 -5
  375. package/ui/textArea/src/text-area.component.d.ts +5 -5
  376. package/ui/toggle-button/src/toggle-button.component.d.ts +1 -1
  377. package/ui/tooltip/src/tooltip-component.d.ts +8 -8
  378. package/ui/translate-input/src/aril-translate-input.component.d.ts +2 -2
  379. package/ui/tree/src/tree.component.d.ts +8 -8
  380. package/ui/treeSelect/src/treeSelect.component.d.ts +12 -12
  381. package/ui/treeTable/src/tree-table.component.d.ts +5 -5
  382. package/ui/value/src/value.component.d.ts +15 -15
  383. package/ui-business/assetPicker/src/asset-picker.component.d.ts +11 -11
  384. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.d.ts +3 -6
  385. package/ui-business/enumPicker/src/enum-picker.component.d.ts +23 -23
  386. package/ui-business/image-viewer/src/aril-image-viewer.component.d.ts +8 -8
  387. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.d.ts +2 -5
  388. package/ui-business/ref-value/src/ref-value.component.d.ts +5 -5
  389. package/ui-business/rolePicker/src/role-picker.component.d.ts +6 -6
  390. package/ui-business/trace-drawer/src/trace-drawer.component.d.ts +8 -8
  391. package/ui-business/trace-id/src/trace-id.component.d.ts +6 -6
  392. package/ui-business/userPicker/src/user-picker.component.d.ts +3 -3
  393. package/util/activity/index.d.ts +3 -0
  394. package/util/activity/src/activity.constants.d.ts +3 -0
  395. package/util/activity/src/activity.service.d.ts +29 -0
  396. package/util/activity/src/activity.types.d.ts +13 -0
  397. package/util/block/src/block.d.ts +4 -4
  398. package/util/lib/src/types.d.ts +16 -0
@@ -311,10 +311,10 @@ export class TableComponent {
311
311
  this.selectedRows = prevRecord;
312
312
  }
313
313
  }
314
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TableComponent, deps: [{ token: i1.TranslocoService }, { token: i2.SelectionGroupService }], target: i0.ɵɵFactoryTarget.Component }); }
315
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: TableComponent, selector: "aril-table", inputs: { kebabMenuItems: { classPropertyName: "kebabMenuItems", publicName: "kebabMenuItems", isSignal: false, isRequired: false, transformFunction: null }, expandableFields: { classPropertyName: "expandableFields", publicName: "expandableFields", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, checkboxSelection: { classPropertyName: "checkboxSelection", publicName: "checkboxSelection", isSignal: true, isRequired: false, transformFunction: null }, radioButtonSelection: { classPropertyName: "radioButtonSelection", publicName: "radioButtonSelection", isSignal: true, isRequired: false, transformFunction: null }, headerCheckboxSelection: { classPropertyName: "headerCheckboxSelection", publicName: "headerCheckboxSelection", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, proxy: { classPropertyName: "proxy", publicName: "proxy", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, tAlign: { classPropertyName: "tAlign", publicName: "tAlign", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, exportFileName: { classPropertyName: "exportFileName", publicName: "exportFileName", isSignal: true, isRequired: false, transformFunction: null }, noDataFoundLabel: { classPropertyName: "noDataFoundLabel", publicName: "noDataFoundLabel", isSignal: true, isRequired: false, transformFunction: null }, tableHeader: { classPropertyName: "tableHeader", publicName: "tableHeader", isSignal: true, isRequired: false, transformFunction: null }, showTableHeader: { classPropertyName: "showTableHeader", publicName: "showTableHeader", isSignal: true, isRequired: false, transformFunction: null }, isFirstRowSelected: { classPropertyName: "isFirstRowSelected", publicName: "isFirstRowSelected", isSignal: true, isRequired: false, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: false, transformFunction: null }, selectedRowsInput: { classPropertyName: "selectedRowsInput", publicName: "selectedRowsInput", isSignal: true, isRequired: false, transformFunction: null }, isLazy: { classPropertyName: "isLazy", publicName: "isLazy", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, paginatorDropdownAppendTo: { classPropertyName: "paginatorDropdownAppendTo", publicName: "paginatorDropdownAppendTo", isSignal: true, isRequired: false, transformFunction: null }, isColumnExpandMode: { classPropertyName: "isColumnExpandMode", publicName: "isColumnExpandMode", isSignal: true, isRequired: false, transformFunction: null }, isResizableColumns: { classPropertyName: "isResizableColumns", publicName: "isResizableColumns", isSignal: true, isRequired: false, transformFunction: null }, isSortable: { classPropertyName: "isSortable", publicName: "isSortable", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: true, isRequired: false, transformFunction: null }, sortMode: { classPropertyName: "sortMode", publicName: "sortMode", isSignal: true, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: true, isRequired: false, transformFunction: null }, rowSelectable: { classPropertyName: "rowSelectable", publicName: "rowSelectable", isSignal: true, isRequired: false, transformFunction: null }, reorderableColumns: { classPropertyName: "reorderableColumns", publicName: "reorderableColumns", isSignal: true, isRequired: false, transformFunction: null }, reorderField: { classPropertyName: "reorderField", publicName: "reorderField", isSignal: true, isRequired: false, transformFunction: null }, showColumnFilters: { classPropertyName: "showColumnFilters", publicName: "showColumnFilters", isSignal: true, isRequired: false, transformFunction: null }, selectionPageOnly: { classPropertyName: "selectionPageOnly", publicName: "selectionPageOnly", isSignal: true, isRequired: false, transformFunction: null }, openSelectionOnSidebar: { classPropertyName: "openSelectionOnSidebar", publicName: "openSelectionOnSidebar", isSignal: true, isRequired: false, transformFunction: null }, globalFilterFields: { classPropertyName: "globalFilterFields", publicName: "globalFilterFields", isSignal: true, isRequired: false, transformFunction: null }, exportConfig: { classPropertyName: "exportConfig", publicName: "exportConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onPageEvent: "onPageEvent", selectionEvent: "selectionEvent", lazyLoadEvent: "lazyLoadEvent", rowReorderEvent: "rowReorderEvent" }, queries: [{ propertyName: "columns", predicate: TableColumnComponent }], viewQueries: [{ propertyName: "exportOp", first: true, predicate: ExportOverlayPanelComponent, descendants: true }, { propertyName: "tableRef", first: true, predicate: Table, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-table\r\n\t#ref\r\n\t[value]=\"data()\"\r\n\t[dataKey]=\"dataKey()\"\r\n\t[columns]=\"columns._results\"\r\n\t[rows]=\"pageSize()\"\r\n\t[rowHover]=\"true\"\r\n\t[paginator]=\"!this.isLazy() || this.totalRecords() > 10 ? this.paginator() : false\"\r\n\t[lazy]=\"isLazy()\"\r\n\t[lazyLoadOnInit]=\"false\"\r\n\t[totalRecords]=\"totalRecords()\"\r\n\t[rowsPerPageOptions]=\"[5, 10, 20, 50, 100]\"\r\n\t[rowSelectable]=\"rowSelectable()\"\r\n\t[filterDelay]=\"0\"\r\n\t[sortMode]=\"sortMode()\"\r\n\t[(selection)]=\"selectedRows\"\r\n\t(onPage)=\"onPageEvent.emit($event)\"\r\n\t(onSort)=\"onTableSort($event)\"\r\n\t(onLazyLoad)=\"handleLazyLoadEvent($event)\"\r\n\t(selectionChange)=\"selectionEvent.emit(selectedRows)\"\r\n\t(onRowSelect)=\"sidebarVisible = true\"\r\n\t(onRowUnselect)=\"sidebarVisible = false\"\r\n\t[showCurrentPageReport]=\"true\"\r\n\t[selectionMode]=\"effectiveSelectionMode()\"\r\n\t[selectionPageOnly]=\"selectionPageOnly()\"\r\n\t[columnResizeMode]=\"isColumnExpandMode() ? 'expand' : ''\"\r\n\t[resizableColumns]=\"isResizableColumns()\"\r\n\t[currentPageReportTemplate]=\"currentPageReportText\"\r\n\tstyleClass=\"p-datatable-sm\"\r\n\t[paginatorDropdownAppendTo]=\"paginatorDropdownAppendTo()\"\r\n\t[scrollable]=\"scrollable()\"\r\n\t[scrollHeight]=\"scrollHeight()\"\r\n\t[showFirstLastIcon]=\"showFirstLastIcon()\"\r\n\t[reorderableColumns]=\"reorderableColumns()\"\r\n\t(onRowReorder)=\"rowReorder($event)\"\r\n\t[globalFilterFields]=\"globalFilterFields()\">\r\n\t<ng-template pTemplate=\"groupheader\" let-item let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\r\n\t\t<tr pRowGroupHeader style=\"background-color: #f8fafc\">\r\n\t\t\t<td [attr.colspan]=\"columns._results.length\">\r\n\t\t\t\t<span class=\"font-bold ml-2\" style=\"color: #6b7280\">{{ item.groupName }}</span>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</ng-template>\r\n\r\n\t@if (globalFilterFields()?.length) {\r\n\t\t<ng-template pTemplate=\"caption\">\r\n\t\t\t<div class=\"grid p-fluid\">\r\n\t\t\t\t<aril-text\r\n\t\t\t\t\tclass=\"lg:col-3 md:col-4 sm:col-6 col-12\"\r\n\t\t\t\t\t[(ngModel)]=\"globalSearchValue\"\r\n\t\t\t\t\t(input)=\"filterGlobal($event)\"\r\n\t\t\t\t\ticon=\"SEARCH\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t[placeholder]=\"translocoService.translate('search')\" />\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t}\r\n\r\n\t<ng-template pTemplate=\"header\" let-columns>\r\n\t\t<tr>\r\n\t\t\t@if (reorderableColumns() || radioButtonSelection()) {\r\n\t\t\t\t<th style=\"width: 3rem !important\"></th>\r\n\t\t\t}\r\n\r\n\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t<th>\r\n\t\t\t\t\t@if (headerCheckboxSelection()) {\r\n\t\t\t\t\t\t<p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n\t\t\t\t\t}\r\n\t\t\t\t</th>\r\n\t\t\t}\r\n\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t@if (column.type() === 'operations') {\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t<div class=\"flex justify-content-center\">\u0130\u015Flemler</div>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t@if (isResizableColumns()) {\r\n\t\t\t\t\t\t<th [ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\" pResizableColumn>\r\n\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<div class=\"flex\">\r\n\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green; padding-top: 4px; padding-left: 4px\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle\"\r\n\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t@if (isLazy() && isSortable()) {\r\n\t\t\t\t\t\t\t<th\r\n\t\t\t\t\t\t\t\t[pSortableColumn]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\"\r\n\t\t\t\t\t\t\t\tstyle=\"min-width: 170px\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-center align-items-center\">\r\n\t\t\t\t\t\t\t\t\t\t@if (column.type() !== 'operations') {\r\n\t\t\t\t\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field()\"></p-sortIcon>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (showColumnFilters() && column.showFilter() && column.type() !== 'operations') {\r\n\t\t\t\t\t\t\t\t\t\t\t@switch (column.filterType()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.TEXT) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.NUMERIC) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"numeric\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-number\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxDigits]=\"6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(ngModelChange)=\"onFilterChange($event, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.DATE) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (column.showTimeInDateFilters()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-calendar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(ngModelChange)=\"onFilterChange($event, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"w-6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showTime]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[appendTo]=\"null\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-calendar [(ngModel)]=\"filter.value\" class=\"w-6\" [appendTo]=\"null\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.BOOLEAN) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter [field]=\"column.field()\" type=\"boolean\" display=\"menu\" class=\"mt-2\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.ENUM) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[matchModeOptions]=\"[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: 'E\u015Fittir', value: 'equals' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: 'E\u015Fit De\u011Fildir', value: 'notEquals' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: '\u0130\u00E7erir', value: 'contains' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: '\u0130\u00E7ermez', value: 'notContains' }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-dropdown\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[options]=\"getEnumOptions(column.enumGroupName(), 'ALL')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(onChange)=\"onFilterChange($event.value, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappendTo=\"self\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClear]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyleClass=\"w-full\"></p-dropdown>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle mt-1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t<th [ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\" style=\"min-width: 170px\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-center align-items-center\">\r\n\t\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle mt-1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</tr>\r\n\t</ng-template>\r\n\r\n\t<ng-template pTemplate=\"body\" let-item let-columns=\"columns\" let-index=\"rowIndex\">\r\n\t\t@if (effectiveSelectionMode()) {\r\n\t\t\t<tr\r\n\t\t\t\t[pSelectableRow]=\"item\"\r\n\t\t\t\t[ngStyle]=\"{ 'background-color': item?.rowColor ? item?.rowColor : null }\"\r\n\t\t\t\t[pReorderableRow]=\"index\">\r\n\t\t\t\t@if (reorderableColumns()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<span class=\"pi pi-bars\" pReorderableRowHandle></span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t\t<td (click)=\"$event.stopPropagation()\">\r\n\t\t\t\t\t\t<p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (radioButtonSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t\t<td [ngStyle]=\"{ 'text-align': column.type() === 'operations' ? 'center' : column.tAlign() || tAlign() }\">\r\n\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[item]\" [ngForTemplate]=\"column.template\"></ng-template>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t} @else {\r\n\t\t\t<tr [ngStyle]=\"{ 'background-color': item?.rowColor ? item?.rowColor : null }\" [pReorderableRow]=\"index\">\r\n\t\t\t\t@if (reorderableColumns()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<span class=\"pi pi-bars\" pReorderableRowHandle></span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (radioButtonSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t\t<td [ngStyle]=\"{ 'text-align': column.type() === 'operations' ? 'center' : column.tAlign() || tAlign() }\">\r\n\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[item]\" [ngForTemplate]=\"column.template\"></ng-template>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t}\r\n\t</ng-template>\r\n\r\n\t@if (showFooter()) {\r\n\t\t<ng-template pTemplate=\"summary\">\r\n\t\t\t<ng-content select=\"[footer]\"></ng-content>\r\n\t\t</ng-template>\r\n\t}\r\n\r\n\t<ng-template pTemplate=\"emptymessage\">\r\n\t\t<tr>\r\n\t\t\t<td [attr.colspan]=\"columns._results.length\">{{ noDataFoundLabel() }}</td>\r\n\t\t</tr>\r\n\t</ng-template>\r\n</p-table>\r\n\r\n<aril-export-overlay-panel [exportConfig]=\"exportConfig()!\" [columns]=\"columns\" />\r\n\r\n<p-toast key=\"export-toast\">\r\n\t<ng-template let-message pTemplate=\"message\">\r\n\t\t<span class=\"p-toast-message-icon\">\r\n\t\t\t<CheckIcon />\r\n\t\t</span>\r\n\t\t<div class=\"p-toast-message-text\">\r\n\t\t\t<div class=\"p-toast-summary\">{{ message.summary }}</div>\r\n\t\t\t<div class=\"p-toast-detail\" [innerHTML]=\"message.detail | safe: 'html'\"></div>\r\n\t\t</div>\r\n\t</ng-template>\r\n</p-toast>\r\n\r\n@if (openSelectionOnSidebar() && selectionMode() === 'single') {\r\n\t<p-sidebar\r\n\t\t[(visible)]=\"sidebarVisible\"\r\n\t\tposition=\"right\"\r\n\t\t[style]=\"{ 'max-width': '800px', width: '100%' }\"\r\n\t\t(onHide)=\"selectedRows = undefined\"\r\n\t\t[modal]=\"false\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<span class=\"font-semibold text-xl\">{{ translocoService.translate('table.sidebarDetailHeader') }}</span>\r\n\t\t</ng-template>\r\n\r\n\t\t@if (sidebarVisible) {\r\n\t\t\t<p-table [value]=\"selectedRows | keyvalue\" [paginator]=\"false\" styleClass=\"p-datatable-sm\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th>{{ translocoService.translate('table.field') }}</th>\r\n\t\t\t\t\t\t<th>{{ translocoService.translate('table.value') }}</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-item let-index=\"rowIndex\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t@if (columns | getColumnByField: item.key; as column) {\r\n\t\t\t\t\t\t\t<td [width]=\"'120px'\">{{ column.header() }}</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t@if (column.type() === 'json' && item.value) {\r\n\t\t\t\t\t\t\t\t\t<div [ngStyle]=\"{ display: 'grid' }\">\r\n\t\t\t\t\t\t\t\t\t\t<pre\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"overflow-y-auto max-h-30rem border-300 border-1 border-round my-2 p-3\"><code>{{item.value | parse | json}}</code></pre>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t} @else if (column.type() === 'long-text' && item.value) {\r\n\t\t\t\t\t\t\t\t\t<aril-value type=\"text\" [model]=\"item.value\" [isTextClamp]=\"false\" />\r\n\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[selectedRows]\" [ngForTemplate]=\"column.template\" />\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t}\r\n\r\n\t\t<ng-template pTemplate=\"footer\">\r\n\t\t\t<div class=\"flex align-items-center justify-content-between\">\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\ticon=\"ARROW_LEFT\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t[label]=\"translocoService.translate('table.prevRecord')\"\r\n\t\t\t\t\t(clickEvent)=\"prevRecord()\" />\r\n\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\ticon=\"ARROW_RIGHT\"\r\n\t\t\t\t\ticonPos=\"right\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t[label]=\"translocoService.translate('table.nextRecord')\"\r\n\t\t\t\t\t(clickEvent)=\"nextRecord()\" />\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-sidebar>\r\n}\r\n", styles: ["::ng-deep aril-table th{min-width:0px!important}::ng-deep .p-datatable .p-datatable-tbody>tr.p-highlight{background-color:#e3f2fd!important;color:#475569!important}.no-wrap-word{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: i3.ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.CalendarComponent, selector: "aril-calendar[ngModel], aril-calendar[formControl], aril-calendar[formControlName]", inputs: ["minDate", "maxDate", "inputStyle", "inputStyleClass", "autoZIndex", "inline", "showIcon", "showTime", "showWeek", "showSeconds", "disabledDates", "numberOfMonthToShow", "appendTo", "dataType", "placeholder", "view", "selectionMode", "rangeConfig", "tabindex", "showOnFocus", "timeOnly", "keepInvalid"] }, { kind: "component", type: i6.CheckIcon, selector: "CheckIcon" }, { kind: "component", type: i7.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.NumberComponent, selector: "aril-number[ngModel], aril-number[formControl], aril-number[formControlName]", inputs: ["min", "max", "showButtons", "placeholder", "prefix", "locale", "suffix", "maxlength", "showClear", "useGrouping", "maxDigits", "minDigits", "tabindex", "inputStyle", "buttonLayout"] }, { kind: "component", type: i12.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i13.RowGroupHeader, selector: "[pRowGroupHeader]" }, { kind: "directive", type: i13.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i13.ResizableColumn, selector: "[pResizableColumn]", inputs: ["pResizableColumnDisabled"] }, { kind: "component", type: i13.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i13.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i13.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i13.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i13.ReorderableRowHandle, selector: "[pReorderableRowHandle]" }, { kind: "directive", type: i13.ReorderableRow, selector: "[pReorderableRow]", inputs: ["pReorderableRow", "pReorderableRowDisabled"] }, { kind: "component", type: i13.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i14.TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "component", type: i15.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: i16.ValueComponent, selector: "aril-value", inputs: ["model", "type", "format", "isClickable", "groupName", "parentSelectionKey", "isTextClamp", "textClampCharacters", "style", "copyable", "shouldShowCopyForClampedText", "arrayTypeDisplayName", "arrayTypeMaxBadgeCount", "bigDecimalRoundingMode", "bigDecimalScale"] }, { kind: "component", type: i17.ExportOverlayPanelComponent, selector: "aril-export-overlay-panel", inputs: ["exportConfig", "columns"] }, { kind: "pipe", type: i18.GetColumnByFieldPipe, name: "getColumnByField" }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i10.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i18.ParsePipe, name: "parse" }, { kind: "pipe", type: i18.SafePipe, name: "safe" }, { kind: "pipe", type: i10.SlicePipe, name: "slice" }] }); }
314
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [{ token: i1.TranslocoService }, { token: i2.SelectionGroupService }], target: i0.ɵɵFactoryTarget.Component }); }
315
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TableComponent, selector: "aril-table", inputs: { kebabMenuItems: { classPropertyName: "kebabMenuItems", publicName: "kebabMenuItems", isSignal: false, isRequired: false, transformFunction: null }, expandableFields: { classPropertyName: "expandableFields", publicName: "expandableFields", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, checkboxSelection: { classPropertyName: "checkboxSelection", publicName: "checkboxSelection", isSignal: true, isRequired: false, transformFunction: null }, radioButtonSelection: { classPropertyName: "radioButtonSelection", publicName: "radioButtonSelection", isSignal: true, isRequired: false, transformFunction: null }, headerCheckboxSelection: { classPropertyName: "headerCheckboxSelection", publicName: "headerCheckboxSelection", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, proxy: { classPropertyName: "proxy", publicName: "proxy", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, tAlign: { classPropertyName: "tAlign", publicName: "tAlign", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, exportFileName: { classPropertyName: "exportFileName", publicName: "exportFileName", isSignal: true, isRequired: false, transformFunction: null }, noDataFoundLabel: { classPropertyName: "noDataFoundLabel", publicName: "noDataFoundLabel", isSignal: true, isRequired: false, transformFunction: null }, tableHeader: { classPropertyName: "tableHeader", publicName: "tableHeader", isSignal: true, isRequired: false, transformFunction: null }, showTableHeader: { classPropertyName: "showTableHeader", publicName: "showTableHeader", isSignal: true, isRequired: false, transformFunction: null }, isFirstRowSelected: { classPropertyName: "isFirstRowSelected", publicName: "isFirstRowSelected", isSignal: true, isRequired: false, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: false, transformFunction: null }, selectedRowsInput: { classPropertyName: "selectedRowsInput", publicName: "selectedRowsInput", isSignal: true, isRequired: false, transformFunction: null }, isLazy: { classPropertyName: "isLazy", publicName: "isLazy", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, paginatorDropdownAppendTo: { classPropertyName: "paginatorDropdownAppendTo", publicName: "paginatorDropdownAppendTo", isSignal: true, isRequired: false, transformFunction: null }, isColumnExpandMode: { classPropertyName: "isColumnExpandMode", publicName: "isColumnExpandMode", isSignal: true, isRequired: false, transformFunction: null }, isResizableColumns: { classPropertyName: "isResizableColumns", publicName: "isResizableColumns", isSignal: true, isRequired: false, transformFunction: null }, isSortable: { classPropertyName: "isSortable", publicName: "isSortable", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: true, isRequired: false, transformFunction: null }, sortMode: { classPropertyName: "sortMode", publicName: "sortMode", isSignal: true, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: true, isRequired: false, transformFunction: null }, rowSelectable: { classPropertyName: "rowSelectable", publicName: "rowSelectable", isSignal: true, isRequired: false, transformFunction: null }, reorderableColumns: { classPropertyName: "reorderableColumns", publicName: "reorderableColumns", isSignal: true, isRequired: false, transformFunction: null }, reorderField: { classPropertyName: "reorderField", publicName: "reorderField", isSignal: true, isRequired: false, transformFunction: null }, showColumnFilters: { classPropertyName: "showColumnFilters", publicName: "showColumnFilters", isSignal: true, isRequired: false, transformFunction: null }, selectionPageOnly: { classPropertyName: "selectionPageOnly", publicName: "selectionPageOnly", isSignal: true, isRequired: false, transformFunction: null }, openSelectionOnSidebar: { classPropertyName: "openSelectionOnSidebar", publicName: "openSelectionOnSidebar", isSignal: true, isRequired: false, transformFunction: null }, globalFilterFields: { classPropertyName: "globalFilterFields", publicName: "globalFilterFields", isSignal: true, isRequired: false, transformFunction: null }, exportConfig: { classPropertyName: "exportConfig", publicName: "exportConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onPageEvent: "onPageEvent", selectionEvent: "selectionEvent", lazyLoadEvent: "lazyLoadEvent", rowReorderEvent: "rowReorderEvent" }, queries: [{ propertyName: "columns", predicate: TableColumnComponent }], viewQueries: [{ propertyName: "exportOp", first: true, predicate: ExportOverlayPanelComponent, descendants: true }, { propertyName: "tableRef", first: true, predicate: Table, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-table\r\n\t#ref\r\n\t[value]=\"data()\"\r\n\t[dataKey]=\"dataKey()\"\r\n\t[columns]=\"columns._results\"\r\n\t[rows]=\"pageSize()\"\r\n\t[rowHover]=\"true\"\r\n\t[paginator]=\"!this.isLazy() || this.totalRecords() > 10 ? this.paginator() : false\"\r\n\t[lazy]=\"isLazy()\"\r\n\t[lazyLoadOnInit]=\"false\"\r\n\t[totalRecords]=\"totalRecords()\"\r\n\t[rowsPerPageOptions]=\"[5, 10, 20, 50, 100]\"\r\n\t[rowSelectable]=\"rowSelectable()\"\r\n\t[filterDelay]=\"0\"\r\n\t[sortMode]=\"sortMode()\"\r\n\t[(selection)]=\"selectedRows\"\r\n\t(onPage)=\"onPageEvent.emit($event)\"\r\n\t(onSort)=\"onTableSort($event)\"\r\n\t(onLazyLoad)=\"handleLazyLoadEvent($event)\"\r\n\t(selectionChange)=\"selectionEvent.emit(selectedRows)\"\r\n\t(onRowSelect)=\"sidebarVisible = true\"\r\n\t(onRowUnselect)=\"sidebarVisible = false\"\r\n\t[showCurrentPageReport]=\"true\"\r\n\t[selectionMode]=\"effectiveSelectionMode()\"\r\n\t[selectionPageOnly]=\"selectionPageOnly()\"\r\n\t[columnResizeMode]=\"isColumnExpandMode() ? 'expand' : ''\"\r\n\t[resizableColumns]=\"isResizableColumns()\"\r\n\t[currentPageReportTemplate]=\"currentPageReportText\"\r\n\tstyleClass=\"p-datatable-sm\"\r\n\t[paginatorDropdownAppendTo]=\"paginatorDropdownAppendTo()\"\r\n\t[scrollable]=\"scrollable()\"\r\n\t[scrollHeight]=\"scrollHeight()\"\r\n\t[showFirstLastIcon]=\"showFirstLastIcon()\"\r\n\t[reorderableColumns]=\"reorderableColumns()\"\r\n\t(onRowReorder)=\"rowReorder($event)\"\r\n\t[globalFilterFields]=\"globalFilterFields()\">\r\n\t<ng-template pTemplate=\"groupheader\" let-item let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\r\n\t\t<tr pRowGroupHeader style=\"background-color: #f8fafc\">\r\n\t\t\t<td [attr.colspan]=\"columns._results.length\">\r\n\t\t\t\t<span class=\"font-bold ml-2\" style=\"color: #6b7280\">{{ item.groupName }}</span>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</ng-template>\r\n\r\n\t@if (globalFilterFields()?.length) {\r\n\t\t<ng-template pTemplate=\"caption\">\r\n\t\t\t<div class=\"grid p-fluid\">\r\n\t\t\t\t<aril-text\r\n\t\t\t\t\tclass=\"lg:col-3 md:col-4 sm:col-6 col-12\"\r\n\t\t\t\t\t[(ngModel)]=\"globalSearchValue\"\r\n\t\t\t\t\t(input)=\"filterGlobal($event)\"\r\n\t\t\t\t\ticon=\"SEARCH\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t[placeholder]=\"translocoService.translate('search')\" />\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t}\r\n\r\n\t<ng-template pTemplate=\"header\" let-columns>\r\n\t\t<tr>\r\n\t\t\t@if (reorderableColumns() || radioButtonSelection()) {\r\n\t\t\t\t<th style=\"width: 3rem !important\"></th>\r\n\t\t\t}\r\n\r\n\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t<th>\r\n\t\t\t\t\t@if (headerCheckboxSelection()) {\r\n\t\t\t\t\t\t<p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n\t\t\t\t\t}\r\n\t\t\t\t</th>\r\n\t\t\t}\r\n\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t@if (column.type() === 'operations') {\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t<div class=\"flex justify-content-center\">\u0130\u015Flemler</div>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t@if (isResizableColumns()) {\r\n\t\t\t\t\t\t<th [ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\" pResizableColumn>\r\n\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<div class=\"flex\">\r\n\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green; padding-top: 4px; padding-left: 4px\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle\"\r\n\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t@if (isLazy() && isSortable()) {\r\n\t\t\t\t\t\t\t<th\r\n\t\t\t\t\t\t\t\t[pSortableColumn]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\"\r\n\t\t\t\t\t\t\t\tstyle=\"min-width: 170px\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-center align-items-center\">\r\n\t\t\t\t\t\t\t\t\t\t@if (column.type() !== 'operations') {\r\n\t\t\t\t\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field()\"></p-sortIcon>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (showColumnFilters() && column.showFilter() && column.type() !== 'operations') {\r\n\t\t\t\t\t\t\t\t\t\t\t@switch (column.filterType()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.TEXT) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.NUMERIC) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"numeric\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-number\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxDigits]=\"6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(ngModelChange)=\"onFilterChange($event, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.DATE) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (column.showTimeInDateFilters()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-calendar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(ngModelChange)=\"onFilterChange($event, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"w-6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showTime]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[appendTo]=\"null\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-calendar [(ngModel)]=\"filter.value\" class=\"w-6\" [appendTo]=\"null\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.BOOLEAN) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter [field]=\"column.field()\" type=\"boolean\" display=\"menu\" class=\"mt-2\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.ENUM) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[matchModeOptions]=\"[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: 'E\u015Fittir', value: 'equals' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: 'E\u015Fit De\u011Fildir', value: 'notEquals' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: '\u0130\u00E7erir', value: 'contains' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: '\u0130\u00E7ermez', value: 'notContains' }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-dropdown\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[options]=\"getEnumOptions(column.enumGroupName(), 'ALL')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(onChange)=\"onFilterChange($event.value, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappendTo=\"self\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClear]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyleClass=\"w-full\"></p-dropdown>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle mt-1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t<th [ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\" style=\"min-width: 170px\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-center align-items-center\">\r\n\t\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle mt-1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</tr>\r\n\t</ng-template>\r\n\r\n\t<ng-template pTemplate=\"body\" let-item let-columns=\"columns\" let-index=\"rowIndex\">\r\n\t\t@if (effectiveSelectionMode()) {\r\n\t\t\t<tr\r\n\t\t\t\t[pSelectableRow]=\"item\"\r\n\t\t\t\t[ngStyle]=\"{ 'background-color': item?.rowColor ? item?.rowColor : null }\"\r\n\t\t\t\t[pReorderableRow]=\"index\">\r\n\t\t\t\t@if (reorderableColumns()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<span class=\"pi pi-bars\" pReorderableRowHandle></span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t\t<td (click)=\"$event.stopPropagation()\">\r\n\t\t\t\t\t\t<p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (radioButtonSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t\t<td [ngStyle]=\"{ 'text-align': column.type() === 'operations' ? 'center' : column.tAlign() || tAlign() }\">\r\n\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[item]\" [ngForTemplate]=\"column.template\"></ng-template>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t} @else {\r\n\t\t\t<tr [ngStyle]=\"{ 'background-color': item?.rowColor ? item?.rowColor : null }\" [pReorderableRow]=\"index\">\r\n\t\t\t\t@if (reorderableColumns()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<span class=\"pi pi-bars\" pReorderableRowHandle></span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (radioButtonSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t\t<td [ngStyle]=\"{ 'text-align': column.type() === 'operations' ? 'center' : column.tAlign() || tAlign() }\">\r\n\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[item]\" [ngForTemplate]=\"column.template\"></ng-template>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t}\r\n\t</ng-template>\r\n\r\n\t@if (showFooter()) {\r\n\t\t<ng-template pTemplate=\"summary\">\r\n\t\t\t<ng-content select=\"[footer]\"></ng-content>\r\n\t\t</ng-template>\r\n\t}\r\n\r\n\t<ng-template pTemplate=\"emptymessage\">\r\n\t\t<tr>\r\n\t\t\t<td [attr.colspan]=\"columns._results.length\">{{ noDataFoundLabel() }}</td>\r\n\t\t</tr>\r\n\t</ng-template>\r\n</p-table>\r\n\r\n<aril-export-overlay-panel [exportConfig]=\"exportConfig()!\" [columns]=\"columns\" />\r\n\r\n<p-toast key=\"export-toast\">\r\n\t<ng-template let-message pTemplate=\"message\">\r\n\t\t<span class=\"p-toast-message-icon\">\r\n\t\t\t<CheckIcon />\r\n\t\t</span>\r\n\t\t<div class=\"p-toast-message-text\">\r\n\t\t\t<div class=\"p-toast-summary\">{{ message.summary }}</div>\r\n\t\t\t<div class=\"p-toast-detail\" [innerHTML]=\"message.detail | safe: 'html'\"></div>\r\n\t\t</div>\r\n\t</ng-template>\r\n</p-toast>\r\n\r\n@if (openSelectionOnSidebar() && selectionMode() === 'single') {\r\n\t<p-sidebar\r\n\t\t[(visible)]=\"sidebarVisible\"\r\n\t\tposition=\"right\"\r\n\t\t[style]=\"{ 'max-width': '800px', width: '100%' }\"\r\n\t\t(onHide)=\"selectedRows = undefined\"\r\n\t\t[modal]=\"false\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<span class=\"font-semibold text-xl\">{{ translocoService.translate('table.sidebarDetailHeader') }}</span>\r\n\t\t</ng-template>\r\n\r\n\t\t@if (sidebarVisible) {\r\n\t\t\t<p-table [value]=\"selectedRows | keyvalue\" [paginator]=\"false\" styleClass=\"p-datatable-sm\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th>{{ translocoService.translate('table.field') }}</th>\r\n\t\t\t\t\t\t<th>{{ translocoService.translate('table.value') }}</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-item let-index=\"rowIndex\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t@if (columns | getColumnByField: item.key; as column) {\r\n\t\t\t\t\t\t\t<td [width]=\"'120px'\">{{ column.header() }}</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t@if (column.type() === 'json' && item.value) {\r\n\t\t\t\t\t\t\t\t\t<div [ngStyle]=\"{ display: 'grid' }\">\r\n\t\t\t\t\t\t\t\t\t\t<pre\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"overflow-y-auto max-h-30rem border-300 border-1 border-round my-2 p-3\"><code>{{item.value | parse | json}}</code></pre>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t} @else if (column.type() === 'long-text' && item.value) {\r\n\t\t\t\t\t\t\t\t\t<aril-value type=\"text\" [model]=\"item.value\" [isTextClamp]=\"false\" />\r\n\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[selectedRows]\" [ngForTemplate]=\"column.template\" />\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t}\r\n\r\n\t\t<ng-template pTemplate=\"footer\">\r\n\t\t\t<div class=\"flex align-items-center justify-content-between\">\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\ticon=\"ARROW_LEFT\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t[label]=\"translocoService.translate('table.prevRecord')\"\r\n\t\t\t\t\t(clickEvent)=\"prevRecord()\" />\r\n\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\ticon=\"ARROW_RIGHT\"\r\n\t\t\t\t\ticonPos=\"right\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t[label]=\"translocoService.translate('table.nextRecord')\"\r\n\t\t\t\t\t(clickEvent)=\"nextRecord()\" />\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-sidebar>\r\n}\r\n", styles: ["::ng-deep aril-table th{min-width:0px!important}::ng-deep .p-datatable .p-datatable-tbody>tr.p-highlight{background-color:#e3f2fd!important;color:#475569!important}.no-wrap-word{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: i3.ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.CalendarComponent, selector: "aril-calendar[ngModel], aril-calendar[formControl], aril-calendar[formControlName]", inputs: ["minDate", "maxDate", "inputStyle", "inputStyleClass", "autoZIndex", "inline", "showIcon", "showTime", "showWeek", "showSeconds", "disabledDates", "numberOfMonthToShow", "appendTo", "dataType", "placeholder", "view", "selectionMode", "rangeConfig", "tabindex", "showOnFocus", "timeOnly", "keepInvalid"] }, { kind: "component", type: i6.CheckIcon, selector: "CheckIcon" }, { kind: "component", type: i7.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.NumberComponent, selector: "aril-number[ngModel], aril-number[formControl], aril-number[formControlName]", inputs: ["min", "max", "showButtons", "placeholder", "prefix", "locale", "suffix", "maxlength", "showClear", "useGrouping", "maxDigits", "minDigits", "tabindex", "inputStyle", "buttonLayout"] }, { kind: "component", type: i12.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i13.RowGroupHeader, selector: "[pRowGroupHeader]" }, { kind: "directive", type: i13.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i13.ResizableColumn, selector: "[pResizableColumn]", inputs: ["pResizableColumnDisabled"] }, { kind: "component", type: i13.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i13.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i13.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i13.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i13.ReorderableRowHandle, selector: "[pReorderableRowHandle]" }, { kind: "directive", type: i13.ReorderableRow, selector: "[pReorderableRow]", inputs: ["pReorderableRow", "pReorderableRowDisabled"] }, { kind: "component", type: i13.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i14.TextComponent, selector: "aril-text[ngModel], aril-text[formControl], aril-text[formControlName]", inputs: ["placeholder", "tabindex", "icon", "iconPos", "size"] }, { kind: "component", type: i15.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: i16.ValueComponent, selector: "aril-value", inputs: ["model", "type", "format", "isClickable", "groupName", "parentSelectionKey", "isTextClamp", "textClampCharacters", "style", "copyable", "shouldShowCopyForClampedText", "arrayTypeDisplayName", "arrayTypeMaxBadgeCount", "bigDecimalRoundingMode", "bigDecimalScale"] }, { kind: "component", type: i17.ExportOverlayPanelComponent, selector: "aril-export-overlay-panel", inputs: ["exportConfig", "columns"] }, { kind: "pipe", type: i18.GetColumnByFieldPipe, name: "getColumnByField" }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i10.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i18.ParsePipe, name: "parse" }, { kind: "pipe", type: i18.SafePipe, name: "safe" }, { kind: "pipe", type: i10.SlicePipe, name: "slice" }] }); }
316
316
  }
317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TableComponent, decorators: [{
317
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
318
318
  type: Component,
319
319
  args: [{ selector: 'aril-table', template: "<p-table\r\n\t#ref\r\n\t[value]=\"data()\"\r\n\t[dataKey]=\"dataKey()\"\r\n\t[columns]=\"columns._results\"\r\n\t[rows]=\"pageSize()\"\r\n\t[rowHover]=\"true\"\r\n\t[paginator]=\"!this.isLazy() || this.totalRecords() > 10 ? this.paginator() : false\"\r\n\t[lazy]=\"isLazy()\"\r\n\t[lazyLoadOnInit]=\"false\"\r\n\t[totalRecords]=\"totalRecords()\"\r\n\t[rowsPerPageOptions]=\"[5, 10, 20, 50, 100]\"\r\n\t[rowSelectable]=\"rowSelectable()\"\r\n\t[filterDelay]=\"0\"\r\n\t[sortMode]=\"sortMode()\"\r\n\t[(selection)]=\"selectedRows\"\r\n\t(onPage)=\"onPageEvent.emit($event)\"\r\n\t(onSort)=\"onTableSort($event)\"\r\n\t(onLazyLoad)=\"handleLazyLoadEvent($event)\"\r\n\t(selectionChange)=\"selectionEvent.emit(selectedRows)\"\r\n\t(onRowSelect)=\"sidebarVisible = true\"\r\n\t(onRowUnselect)=\"sidebarVisible = false\"\r\n\t[showCurrentPageReport]=\"true\"\r\n\t[selectionMode]=\"effectiveSelectionMode()\"\r\n\t[selectionPageOnly]=\"selectionPageOnly()\"\r\n\t[columnResizeMode]=\"isColumnExpandMode() ? 'expand' : ''\"\r\n\t[resizableColumns]=\"isResizableColumns()\"\r\n\t[currentPageReportTemplate]=\"currentPageReportText\"\r\n\tstyleClass=\"p-datatable-sm\"\r\n\t[paginatorDropdownAppendTo]=\"paginatorDropdownAppendTo()\"\r\n\t[scrollable]=\"scrollable()\"\r\n\t[scrollHeight]=\"scrollHeight()\"\r\n\t[showFirstLastIcon]=\"showFirstLastIcon()\"\r\n\t[reorderableColumns]=\"reorderableColumns()\"\r\n\t(onRowReorder)=\"rowReorder($event)\"\r\n\t[globalFilterFields]=\"globalFilterFields()\">\r\n\t<ng-template pTemplate=\"groupheader\" let-item let-rowIndex=\"rowIndex\" let-expanded=\"expanded\">\r\n\t\t<tr pRowGroupHeader style=\"background-color: #f8fafc\">\r\n\t\t\t<td [attr.colspan]=\"columns._results.length\">\r\n\t\t\t\t<span class=\"font-bold ml-2\" style=\"color: #6b7280\">{{ item.groupName }}</span>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</ng-template>\r\n\r\n\t@if (globalFilterFields()?.length) {\r\n\t\t<ng-template pTemplate=\"caption\">\r\n\t\t\t<div class=\"grid p-fluid\">\r\n\t\t\t\t<aril-text\r\n\t\t\t\t\tclass=\"lg:col-3 md:col-4 sm:col-6 col-12\"\r\n\t\t\t\t\t[(ngModel)]=\"globalSearchValue\"\r\n\t\t\t\t\t(input)=\"filterGlobal($event)\"\r\n\t\t\t\t\ticon=\"SEARCH\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t[placeholder]=\"translocoService.translate('search')\" />\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t}\r\n\r\n\t<ng-template pTemplate=\"header\" let-columns>\r\n\t\t<tr>\r\n\t\t\t@if (reorderableColumns() || radioButtonSelection()) {\r\n\t\t\t\t<th style=\"width: 3rem !important\"></th>\r\n\t\t\t}\r\n\r\n\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t<th>\r\n\t\t\t\t\t@if (headerCheckboxSelection()) {\r\n\t\t\t\t\t\t<p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n\t\t\t\t\t}\r\n\t\t\t\t</th>\r\n\t\t\t}\r\n\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t@if (column.type() === 'operations') {\r\n\t\t\t\t\t<th>\r\n\t\t\t\t\t\t<div class=\"flex justify-content-center\">\u0130\u015Flemler</div>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t@if (isResizableColumns()) {\r\n\t\t\t\t\t\t<th [ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\" pResizableColumn>\r\n\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t<div class=\"flex\">\r\n\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green; padding-top: 4px; padding-left: 4px\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle\"\r\n\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</th>\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t@if (isLazy() && isSortable()) {\r\n\t\t\t\t\t\t\t<th\r\n\t\t\t\t\t\t\t\t[pSortableColumn]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\"\r\n\t\t\t\t\t\t\t\tstyle=\"min-width: 170px\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-center align-items-center\">\r\n\t\t\t\t\t\t\t\t\t\t@if (column.type() !== 'operations') {\r\n\t\t\t\t\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field()\"></p-sortIcon>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (showColumnFilters() && column.showFilter() && column.type() !== 'operations') {\r\n\t\t\t\t\t\t\t\t\t\t\t@switch (column.filterType()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.TEXT) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.NUMERIC) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"numeric\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-number\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxDigits]=\"6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(ngModelChange)=\"onFilterChange($event, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.DATE) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (column.showTimeInDateFilters()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-calendar\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(ngModelChange)=\"onFilterChange($event, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"w-6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showTime]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[appendTo]=\"null\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"date\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-calendar [(ngModel)]=\"filter.value\" class=\"w-6\" [appendTo]=\"null\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.BOOLEAN) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter [field]=\"column.field()\" type=\"boolean\" display=\"menu\" class=\"mt-2\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t@case (ColumnFilterTypeEnum.ENUM) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p-columnFilter\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[field]=\"column.field()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"menu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClearButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showApplyButton]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[maxConstraints]=\"1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[matchModeOptions]=\"[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: 'E\u015Fittir', value: 'equals' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: 'E\u015Fit De\u011Fildir', value: 'notEquals' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: '\u0130\u00E7erir', value: 'contains' },\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ label: '\u0130\u00E7ermez', value: 'notContains' }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mt-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ng-template pTemplate=\"filter\" let-filter=\"filterCallback\" let-value>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p-dropdown\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[options]=\"getEnumOptions(column.enumGroupName(), 'ALL')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngModel]=\"getFilterValue(column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(onChange)=\"onFilterChange($event.value, filter, column.field())\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappendTo=\"self\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[showClear]=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyleClass=\"w-full\"></p-dropdown>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-end mt-5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Temizle'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"clearFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[label]=\"'Uygula'\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(clickEvent)=\"applyFilter(filter, column.field())\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p-columnFilter>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle mt-1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t<th [ngStyle]=\"{ width: column.width() ? column.width() : 'auto' }\" style=\"min-width: 170px\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\tclass=\"no-wrap-word\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.header().length > 50 ? column.header() : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t\t\t{{ column.header().length > 50 ? (column.header() | slice: 0 : 50) + '...' : column.header() }}\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex justify-content-center align-items-center\">\r\n\t\t\t\t\t\t\t\t\t\t@if (column.isShowHeaderTooltip()) {\r\n\t\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: green\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-info-circle mt-1\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"column.tooltipTemplate()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"top\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</tr>\r\n\t</ng-template>\r\n\r\n\t<ng-template pTemplate=\"body\" let-item let-columns=\"columns\" let-index=\"rowIndex\">\r\n\t\t@if (effectiveSelectionMode()) {\r\n\t\t\t<tr\r\n\t\t\t\t[pSelectableRow]=\"item\"\r\n\t\t\t\t[ngStyle]=\"{ 'background-color': item?.rowColor ? item?.rowColor : null }\"\r\n\t\t\t\t[pReorderableRow]=\"index\">\r\n\t\t\t\t@if (reorderableColumns()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<span class=\"pi pi-bars\" pReorderableRowHandle></span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t\t<td (click)=\"$event.stopPropagation()\">\r\n\t\t\t\t\t\t<p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (radioButtonSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t\t<td [ngStyle]=\"{ 'text-align': column.type() === 'operations' ? 'center' : column.tAlign() || tAlign() }\">\r\n\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[item]\" [ngForTemplate]=\"column.template\"></ng-template>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t} @else {\r\n\t\t\t<tr [ngStyle]=\"{ 'background-color': item?.rowColor ? item?.rowColor : null }\" [pReorderableRow]=\"index\">\r\n\t\t\t\t@if (reorderableColumns()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<span class=\"pi pi-bars\" pReorderableRowHandle></span>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t\t@if (checkboxSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@if (radioButtonSelection()) {\r\n\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\r\n\t\t\t\t@for (column of columns; track $index) {\r\n\t\t\t\t\t<td [ngStyle]=\"{ 'text-align': column.type() === 'operations' ? 'center' : column.tAlign() || tAlign() }\">\r\n\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[item]\" [ngForTemplate]=\"column.template\"></ng-template>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t}\r\n\t\t\t</tr>\r\n\t\t}\r\n\t</ng-template>\r\n\r\n\t@if (showFooter()) {\r\n\t\t<ng-template pTemplate=\"summary\">\r\n\t\t\t<ng-content select=\"[footer]\"></ng-content>\r\n\t\t</ng-template>\r\n\t}\r\n\r\n\t<ng-template pTemplate=\"emptymessage\">\r\n\t\t<tr>\r\n\t\t\t<td [attr.colspan]=\"columns._results.length\">{{ noDataFoundLabel() }}</td>\r\n\t\t</tr>\r\n\t</ng-template>\r\n</p-table>\r\n\r\n<aril-export-overlay-panel [exportConfig]=\"exportConfig()!\" [columns]=\"columns\" />\r\n\r\n<p-toast key=\"export-toast\">\r\n\t<ng-template let-message pTemplate=\"message\">\r\n\t\t<span class=\"p-toast-message-icon\">\r\n\t\t\t<CheckIcon />\r\n\t\t</span>\r\n\t\t<div class=\"p-toast-message-text\">\r\n\t\t\t<div class=\"p-toast-summary\">{{ message.summary }}</div>\r\n\t\t\t<div class=\"p-toast-detail\" [innerHTML]=\"message.detail | safe: 'html'\"></div>\r\n\t\t</div>\r\n\t</ng-template>\r\n</p-toast>\r\n\r\n@if (openSelectionOnSidebar() && selectionMode() === 'single') {\r\n\t<p-sidebar\r\n\t\t[(visible)]=\"sidebarVisible\"\r\n\t\tposition=\"right\"\r\n\t\t[style]=\"{ 'max-width': '800px', width: '100%' }\"\r\n\t\t(onHide)=\"selectedRows = undefined\"\r\n\t\t[modal]=\"false\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<span class=\"font-semibold text-xl\">{{ translocoService.translate('table.sidebarDetailHeader') }}</span>\r\n\t\t</ng-template>\r\n\r\n\t\t@if (sidebarVisible) {\r\n\t\t\t<p-table [value]=\"selectedRows | keyvalue\" [paginator]=\"false\" styleClass=\"p-datatable-sm\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th>{{ translocoService.translate('table.field') }}</th>\r\n\t\t\t\t\t\t<th>{{ translocoService.translate('table.value') }}</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-item let-index=\"rowIndex\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t@if (columns | getColumnByField: item.key; as column) {\r\n\t\t\t\t\t\t\t<td [width]=\"'120px'\">{{ column.header() }}</td>\r\n\t\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t\t@if (column.type() === 'json' && item.value) {\r\n\t\t\t\t\t\t\t\t\t<div [ngStyle]=\"{ display: 'grid' }\">\r\n\t\t\t\t\t\t\t\t\t\t<pre\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"overflow-y-auto max-h-30rem border-300 border-1 border-round my-2 p-3\"><code>{{item.value | parse | json}}</code></pre>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t} @else if (column.type() === 'long-text' && item.value) {\r\n\t\t\t\t\t\t\t\t\t<aril-value type=\"text\" [model]=\"item.value\" [isTextClamp]=\"false\" />\r\n\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t<ng-template ngFor [ngForOf]=\"[selectedRows]\" [ngForTemplate]=\"column.template\" />\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t}\r\n\r\n\t\t<ng-template pTemplate=\"footer\">\r\n\t\t\t<div class=\"flex align-items-center justify-content-between\">\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\ticon=\"ARROW_LEFT\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t[label]=\"translocoService.translate('table.prevRecord')\"\r\n\t\t\t\t\t(clickEvent)=\"prevRecord()\" />\r\n\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\ticon=\"ARROW_RIGHT\"\r\n\t\t\t\t\ticonPos=\"right\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t[label]=\"translocoService.translate('table.nextRecord')\"\r\n\t\t\t\t\t(clickEvent)=\"nextRecord()\" />\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-sidebar>\r\n}\r\n", styles: ["::ng-deep aril-table th{min-width:0px!important}::ng-deep .p-datatable .p-datatable-tbody>tr.p-highlight{background-color:#e3f2fd!important;color:#475569!important}.no-wrap-word{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
320
320
  }], ctorParameters: () => [{ type: i1.TranslocoService }, { type: i2.SelectionGroupService }], propDecorators: { onPageEvent: [{
@@ -339,4 +339,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
339
339
  }], expandableFields: [{
340
340
  type: Input
341
341
  }] } });
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS90YWJsZS9zcmMvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS90YWJsZS9zcmMvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxLQUFLLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBSTVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHdkMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUdOLG9CQUFvQixFQUVwQixhQUFhLEVBRWIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhFOzs7OztHQUtHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFVLENBQUM7QUFTbEQsTUFBTSxPQUFPLGNBQWM7SUFtRTFCLFlBQ1EsZ0JBQWtDLEVBQ2pDLHFCQUE0QztRQUQ3QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFwRTNDLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM1RCxrQkFBYSxHQUFzQixJQUFJLFlB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QiwyRUFDM0IsS0FBSyxxRUN2RGpCLDY3bUJBeWFBOzsyRkR6WGEsY0FBYztrQkFMMUIsU0FBUzsrQkFDQyxZQUFZO3lIQUtaLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ2dDLE9BQU87c0JBQTdDLGVBQWU7dUJBQUMsb0JBQW9CO2dCQUNHLFFBQVE7c0JBQS9DLFNBQVM7dUJBQUMsMkJBQTJCO2dCQUNwQixRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ1AsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENvbXBvbmVudCxcclxuXHRDb250ZW50Q2hpbGRyZW4sXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE91dHB1dCxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdFZpZXdDaGlsZCxcclxuXHRTaWduYWwsXHJcblx0Y29tcHV0ZWQsXHJcblx0ZWZmZWN0LFxyXG5cdGlucHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGFibGUsIFRhYmxlUm93UmVvcmRlckV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5cclxuaW1wb3J0IHsgUHJveHlUeXBlcyB9IGZyb20gJ2FyaWwvaHR0cCc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbkdyb3VwU2VydmljZSB9IGZyb20gJ2FyaWwvdGhlbWUvbGF5b3V0JztcclxuXHJcbmltcG9ydCB7IEV4cG9ydE92ZXJsYXlQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vZXhwb3J0LW92ZXJsYXktcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuXHRBbGlnblR5cGVzLFxyXG5cdEFyaWxmaWVsZEZpbHRlcixcclxuXHRDb2x1bW5GaWx0ZXJUeXBlRW51bSxcclxuXHRFeHBvcnRPcHRpb25zLFxyXG5cdEZpbHRlck9wZXJhbmQsXHJcblx0VGFibGVDb2x1bW5zXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5cclxuLyogVE9ETyA6XHJcbiAqIHNlcnZlci1zaWRlLXByb3h5IChQcm94eVR5cGVzLlNlcnZlclNpZGUpXHJcbiAqIHNlYXJjaCAmIGNvbHVtIGZpbHRlciAmIHNvcnRcclxuICogcGFnaW5hdGlvbiBvcGVyYXRpb25cclxuICogUXVlcnkgU2lnbmFsc1xyXG4gKi9cclxuY29uc3QgcGFnZU9wdGlvbnMgPSBbNSwgMTAsIDIwLCA1MCwgMTAwXSBhcyBjb25zdDtcclxuXHJcbnR5cGUgU2VsZWN0aW9uVHlwZXMgPSAnc2luZ2xlJyB8ICdtdWx0aXBsZScgfCBudWxsO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcmlsLXRhYmxlJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IHtcclxuXHRAT3V0cHV0KCkgb25QYWdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QE91dHB1dCgpIHNlbGVjdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdEBPdXRwdXQoKSBsYXp5TG9hZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdEBPdXRwdXQoKSByb3dSZW9yZGVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93UmVvcmRlckV2ZW50PigpO1xyXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW5Db21wb25lbnQpIGNvbHVtbnMhOiBUYWJsZUNvbHVtbnM7XHJcblx0QFZpZXdDaGlsZChFeHBvcnRPdmVybGF5UGFuZWxDb21wb25lbnQpIGV4cG9ydE9wITogRXhwb3J0T3ZlcmxheVBhbmVsQ29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoVGFibGUpIHRhYmxlUmVmITogVGFibGU7XHJcblx0QElucHV0KCkga2ViYWJNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHRASW5wdXQoKSBleHBhbmRhYmxlRmllbGRzITogc3RyaW5nO1xyXG5cclxuXHRkYXRhID0gaW5wdXQucmVxdWlyZWQ8YW55W10+KCk7XHJcblx0Y2hlY2tib3hTZWxlY3Rpb24gPSBpbnB1dDxib29sZWFuPigpO1xyXG5cdHJhZGlvQnV0dG9uU2VsZWN0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oKTtcclxuXHRoZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XHJcblx0cGFnZVNpemUgPSBpbnB1dDwodHlwZW9mIHBhZ2VPcHRpb25zKVtudW1iZXJdPigxMCk7XHJcblx0cHJveHkgPSBpbnB1dDxQcm94eVR5cGVzPihQcm94eVR5cGVzLk5hdGl2ZSk7XHJcblx0c2hvd0Zvb3RlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHR0QWxpZ24gPSBpbnB1dDxBbGlnblR5cGVzPignbGVmdCcpO1xyXG5cdHNlbGVjdGlvbk1vZGUgPSBpbnB1dDxTZWxlY3Rpb25UeXBlcz4oJ3NpbmdsZScpO1xyXG5cdGV4cG9ydEZpbGVOYW1lID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0bm9EYXRhRm91bmRMYWJlbCA9IGlucHV0PHN0cmluZz4oJ05vIERhdGEgRm91bmQnKTtcclxuXHR0YWJsZUhlYWRlciA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cdHNob3dUYWJsZUhlYWRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRpc0ZpcnN0Um93U2VsZWN0ZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0ZGF0YUtleSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cdHNlbGVjdGVkUm93c0lucHV0ID0gaW5wdXQ8YW55PihbXSk7XHJcblx0aXNMYXp5ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblx0dG90YWxSZWNvcmRzID0gaW5wdXQ8bnVtYmVyPigwKTtcclxuXHRwYWdpbmF0b3IgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHRwYWdpbmF0b3JEcm9wZG93bkFwcGVuZFRvID0gaW5wdXQ8c3RyaW5nPignYm9keScpOyAvLyAnYm9keSd8ICdteURpdidcclxuXHRpc0NvbHVtbkV4cGFuZE1vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0aXNSZXNpemFibGVDb2x1bW5zID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdGlzU29ydGFibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0ZWZmZWN0aXZlU2VsZWN0aW9uTW9kZSE6IFNpZ25hbDxTZWxlY3Rpb25UeXBlcz47XHJcblx0c2Nyb2xsYWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cdHNjcm9sbEhlaWdodCA9IGlucHV0PHN0cmluZz4oJzQ2MHB4Jyk7XHJcblx0c29ydE1vZGUgPSBpbnB1dDwnc2luZ2xlJyB8ICdtdWx0aXBsZSc+KCdtdWx0aXBsZScpO1xyXG5cdHNob3dGaXJzdExhc3RJY29uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblx0cm93U2VsZWN0YWJsZSA9IGlucHV0PChyb3dEYXRhOiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cdHJlb3JkZXJhYmxlQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRyZW9yZGVyRmllbGQgPSBpbnB1dDxzdHJpbmc+KCk7XHJcblx0c2hvd0NvbHVtbkZpbHRlcnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0c2VsZWN0aW9uUGFnZU9ubHkgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0b3BlblNlbGVjdGlvbk9uU2lkZWJhciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRnbG9iYWxGaWx0ZXJGaWVsZHMgPSBpbnB1dDxzdHJpbmdbXT4oKTtcclxuXHJcblx0Ly8gS2VlcHMgbGFzdCBjbGlja2VkIHNvcnQgZmllbGQgYW5kIGl0cyBjeWNsZXMgdG8gZW5hYmxlIEFTQyAtPiBERVNDIC0+IE5PTkVcclxuXHRwcml2YXRlIGxhc3RTb3J0ZWRGaWVsZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBsYXN0U29ydE9yZGVyOiAxIHwgLTEgfCAwID0gMDsgLy8gMTogYXNjLCAtMTogZGVzYywgMDogbm9uZSAvIHdlIHNlbmQgMiBmb3IgZGVzYyB0byBiYWNrZW5kIGJ1dCBwcmltZW5nIGtlZXBzIC0xXHJcblxyXG5cdC8qKlxyXG5cdCAqIEBzZWUge0BsaW5rIEV4cG9ydE9wdGlvbnN9XHJcblx0ICovXHJcblx0ZXhwb3J0Q29uZmlnID0gaW5wdXQ8RXhwb3J0T3B0aW9ucz4oKTtcclxuXHJcblx0ZmlsdGVyVGV4dCE6IHN0cmluZztcclxuXHRnbG9iYWxTZWFyY2hWYWx1ZT86IHN0cmluZztcclxuXHRpc0FsbFNlbGVjdGVkID0gdHJ1ZTtcclxuXHRzZWxlY3RlZFJvd3M6IGFueTtcclxuXHRwYWdlT3B0aW9ucyA9IHBhZ2VPcHRpb25zO1xyXG5cdGV4cG9ydENvbHVtbnM6IEFycmF5PHsgdGl0bGU6IHN0cmluZzsgZGF0YUtleTogc3RyaW5nIH0+ID0gW107XHJcblx0ZmlsdGVyVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB8IG51bGwgfSA9IHt9O1xyXG5cdHByaXZhdGUgcmVxdWVzdGVkRW51bUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHRDb2x1bW5GaWx0ZXJUeXBlRW51bSA9IENvbHVtbkZpbHRlclR5cGVFbnVtO1xyXG5cdHNpZGViYXJWaXNpYmxlID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHNlbGVjdGlvbkdyb3VwU2VydmljZTogU2VsZWN0aW9uR3JvdXBTZXJ2aWNlXHJcblx0KSB7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5pc0ZpcnN0Um93U2VsZWN0ZWQoKSAmJiB0aGlzLmRhdGEoKSkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5kYXRhKClbMF07XHJcblx0XHRcdFx0dGhpcy5zZWxlY3Rpb25FdmVudC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRSb3dzSW5wdXQoKSkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZWxlY3RlZFJvd3NJbnB1dCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmVmZmVjdGl2ZVNlbGVjdGlvbk1vZGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLmNoZWNrYm94U2VsZWN0aW9uKCkpIHJldHVybiAnbXVsdGlwbGUnO1xyXG5cdFx0XHRpZiAodGhpcy5yYWRpb0J1dHRvblNlbGVjdGlvbigpKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSgpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuZGF0YSgpPy5sZW5ndGggPT0gMTApIHRoaXMudGFibGVSZWYucm93cyA9IDEwO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuaXNMYXp5KCkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMoKT8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0YWxlcnQoXHJcblx0XHRcdFx0XHQnR2xvYmFsIGZpbHRlciBpcyBub3Qgc3VwcG9ydGVkIGluIGxhenkgbG9hZGluZyBtb2RlLiBQbGVhc2Ugc2V0IGlzTGF6eSBpbnB1dCB0byBmYWxzZSB0byB1c2UgZ2xvYmFsIGZpbHRlci4nXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGlzSW5pdGlhbExvYWQgPSB0cnVlO1xyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHRpZiAoY2hhbmdlc1snZGF0YSddICYmIGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2RhdGEnXS5wcmV2aW91c1ZhbHVlKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzSW5pdGlhbExvYWQpIHtcclxuXHRcdFx0XHR0aGlzLmlzSW5pdGlhbExvYWQgPSBmYWxzZTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldCBjdXJyZW50UGFnZVJlcG9ydFRleHQoKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IHRvdGFsID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUudG90YWwnKTtcclxuXHRcdGNvbnN0IHJlY29yZCA9IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3RhYmxlLnJlY29yZHMnKTtcclxuXHRcdGNvbnN0IHBhZ2UgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCd0YWJsZS5wYWdlJyk7XHJcblx0XHRyZXR1cm4gYCR7dG90YWx9IDoge3RvdGFsUmVjb3Jkc30gJHtyZWNvcmR9IHwgJHtwYWdlfSA6IHtjdXJyZW50UGFnZX0gLyB7dG90YWxQYWdlc31gO1xyXG5cdH1cclxuXHJcblx0dG9nZ2xlRXhwb3J0ID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4gdGhpcy5leHBvcnRPcC5vcC50b2dnbGUoZXZlbnQpO1xyXG5cclxuXHRoYW5kbGVMYXp5TG9hZEV2ZW50KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHNvcnRGaWVsZCA9IGV2ZW50Lm11bHRpU29ydE1ldGE/Lmxlbmd0aCA/IGV2ZW50Lm11bHRpU29ydE1ldGFbMF0gOiBudWxsO1xyXG5cdFx0Y29uc3QgYXJpbEZpbHRlcnMgPSB0aGlzLmNvbnZlcnRQcmltZU5nRmlsdGVyc1RvU3RhbmRhcmQoZXZlbnQuZmlsdGVycyk7XHJcblxyXG5cdFx0Y29uc3QgbmV3RXZlbnREYXRhID0ge1xyXG5cdFx0XHRwYWdlcjoge1xyXG5cdFx0XHRcdHBhZ2VTaXplOiBldmVudC5yb3dzLFxyXG5cdFx0XHRcdHBhZ2VOdW1iZXI6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDFcclxuXHRcdFx0fSxcclxuXHRcdFx0c29ydDpcclxuXHRcdFx0XHRzb3J0RmllbGQ/LmZpZWxkID9cclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0ZmllbGRJZDogc29ydEZpZWxkPy5maWVsZCxcclxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBzb3J0RmllbGQ/Lm9yZGVyID09PSAxID8gMSA6IDIgLy8gMSBmb3IgYXNjLCAyIGZvciBkZXNjXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0Olx0bnVsbCxcclxuXHRcdFx0ZmlsdGVyczogYXJpbEZpbHRlcnNcclxuXHRcdH07XHJcblx0XHR0aGlzLmxhenlMb2FkRXZlbnQuZW1pdChuZXdFdmVudERhdGEpO1xyXG5cdH1cclxuXHJcblx0ZmlsdGVyR2xvYmFsKGU6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy50YWJsZVJlZi5maWx0ZXJHbG9iYWwoZT8udGFyZ2V0Py52YWx1ZSwgJ2NvbnRhaW5zJyk7XHJcblx0fVxyXG5cclxuXHRjbGVhcigpOiB2b2lkIHtcclxuXHRcdHRoaXMudGFibGVSZWYudmFsdWUgPSBbXTtcclxuXHRcdHRoaXMudGFibGVSZWYuY2xlYXIoKTtcclxuXHRcdHRoaXMuZXhwb3J0T3Aub3A/LmhpZGUoKTtcclxuXHRcdHRoaXMuZ2xvYmFsU2VhcmNoVmFsdWUgPSAnJztcclxuXHR9XHJcblxyXG5cdHJvd1Jlb3JkZXIoZXZlbnQ6IFRhYmxlUm93UmVvcmRlckV2ZW50KTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMucmVvcmRlckZpZWxkKCkpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignUmVvcmRlciBmaWVsZCBpcyBub3QgZGVmaW5lZC4gUGxlYXNlIHNldCB0aGUgcmVvcmRlckZpZWxkIGlucHV0LicpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2UgaWYgKCEoKHRoaXMucmVvcmRlckZpZWxkKCkgYXMgc3RyaW5nKSBpbiB0aGlzLmRhdGEoKVswXSkpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihgUmVvcmRlciBmaWVsZCBcIiR7dGhpcy5yZW9yZGVyRmllbGQoKX1cIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YSBpdGVtcy5gKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGF0YSgpLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcblx0XHRcdGl0ZW1bdGhpcy5yZW9yZGVyRmllbGQoKSBhcyBzdHJpbmddID0gaW5kZXggKyAxO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5yb3dSZW9yZGVyRXZlbnQuZW1pdChldmVudCk7XHJcblx0fVxyXG5cclxuXHRnZXRGaWx0ZXJWYWx1ZShmaWVsZDogc3RyaW5nKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzLmZpbHRlclZhbHVlc1tmaWVsZF0gfHwgbnVsbDtcclxuXHR9XHJcblxyXG5cdG9uRmlsdGVyQ2hhbmdlKHZhbHVlOiBvYmplY3QsIF9maWx0ZXJDYWxsYmFjazogYW55LCBmaWVsZDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmZpbHRlclZhbHVlc1tmaWVsZF0gPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGFwcGx5RmlsdGVyKGZpbHRlckNhbGxiYWNrOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgZmllbGQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZpbHRlclZhbHVlc1tmaWVsZF07XHJcblx0XHRmaWx0ZXJDYWxsYmFjayh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRjbGVhckZpbHRlcihmaWx0ZXJDYWxsYmFjazogKHZhbHVlOiBhbnkpID0+IHZvaWQsIGZpZWxkOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuZmlsdGVyVmFsdWVzW2ZpZWxkXSA9IG51bGw7XHJcblx0XHRmaWx0ZXJDYWxsYmFjayhudWxsKTtcclxuXHR9XHJcblxyXG5cdGdldEVudW1PcHRpb25zKGdyb3VwTmFtZTogc3RyaW5nLCBwYXJlbnRTZWxlY3Rpb25LZXkgPSAnQUxMJyk6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB7XHJcblx0XHRjb25zdCBrZXkgPSBgJHtncm91cE5hbWV9fiR7cGFyZW50U2VsZWN0aW9uS2V5fWA7XHJcblx0XHRjb25zdCBncm91cCA9IHRoaXMuc2VsZWN0aW9uR3JvdXBTZXJ2aWNlLnNlbGVjdGlvbkdyb3VwcygpW2tleV07XHJcblxyXG5cdFx0aWYgKCFncm91cCAmJiAhdGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2UuaXNMb2FkaW5nKGtleSkgJiYgIXRoaXMucmVxdWVzdGVkRW51bUtleXMuaGFzKGtleSkpIHtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0ZWRFbnVtS2V5cy5hZGQoa2V5KTtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2UuZmV0Y2hFbnVtKGdyb3VwTmFtZSwgcGFyZW50U2VsZWN0aW9uS2V5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRncm91cD8uc2VsZWN0aW9uSXRlbXM/Lm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG5cdFx0XHRcdGxhYmVsOiBpdGVtLnNlbGVjdGlvbkRpc3BsYXksXHJcblx0XHRcdFx0dmFsdWU6IGl0ZW0uc2VsZWN0aW9uS2V5XHJcblx0XHRcdH0pKSA/PyBbXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29udmVydFByaW1lTmdGaWx0ZXJzVG9TdGFuZGFyZChwcmltZU5nRmlsdGVyczogYW55KTogQXJpbGZpZWxkRmlsdGVyW10ge1xyXG5cdFx0Y29uc3QgZmlsdGVyczogQXJpbGZpZWxkRmlsdGVyW10gPSBbXTtcclxuXHJcblx0XHRpZiAoIXByaW1lTmdGaWx0ZXJzKSB7XHJcblx0XHRcdHJldHVybiBmaWx0ZXJzO1xyXG5cdFx0fVxyXG5cclxuXHRcdE9iamVjdC5rZXlzKHByaW1lTmdGaWx0ZXJzKS5mb3JFYWNoKChmaWVsZElkKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkRmlsdGVycyA9IHByaW1lTmdGaWx0ZXJzW2ZpZWxkSWRdO1xyXG5cclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZmllbGRGaWx0ZXJzKSAmJiBmaWVsZEZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGZpZWxkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmlzVmFsaWRGaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0aGlzLm1hcE1hdGNoTW9kZVRvT3BlcmFuZChmaWx0ZXIubWF0Y2hNb2RlKTtcclxuXHRcdFx0XHRcdFx0aWYgKG9wZXJhbmQpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgdmFsdWVzIGZvciBJTi9OT1RfSU4gb3BlcmF0aW9uc1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBvcGVyYW5kKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0ZmlsdGVycy5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkSWQ6IGlzTmFOKHBhcnNlSW50KGZpZWxkSWQpKSA/IGZpZWxkSWQgOiBwYXJzZUludChmaWVsZElkKSxcclxuXHRcdFx0XHRcdFx0XHRcdG9wZXJhbmQ6IG9wZXJhbmQsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogcHJvY2Vzc2VkVmFsdWVcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gZmlsdGVycztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaXNWYWxpZEZpbHRlclZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUuc29tZSgoaXRlbSkgPT4gaXRlbSAhPT0gbnVsbCAmJiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gJycpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCkgIT09ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXBNYXRjaE1vZGVUb09wZXJhbmQobWF0Y2hNb2RlOiBzdHJpbmcpOiBGaWx0ZXJPcGVyYW5kIHwgbnVsbCB7XHJcblx0XHRjb25zdCBtb2RlTWFwOiB7IFtrZXk6IHN0cmluZ106IEZpbHRlck9wZXJhbmQgfSA9IHtcclxuXHRcdFx0ZXF1YWxzOiBGaWx0ZXJPcGVyYW5kLkVRLFxyXG5cdFx0XHRub3RFcXVhbHM6IEZpbHRlck9wZXJhbmQuTk9UX0VRLFxyXG5cdFx0XHRjb250YWluczogRmlsdGVyT3BlcmFuZC5MSUtFLFxyXG5cdFx0XHRub3RDb250YWluczogRmlsdGVyT3BlcmFuZC5OT1RfTElLRSxcclxuXHRcdFx0c3RhcnRzV2l0aDogRmlsdGVyT3BlcmFuZC5TVEFSVFMsXHJcblx0XHRcdGVuZHNXaXRoOiBGaWx0ZXJPcGVyYW5kLkVORFMsXHJcblx0XHRcdGx0OiBGaWx0ZXJPcGVyYW5kLkxULFxyXG5cdFx0XHRsdGU6IEZpbHRlck9wZXJhbmQuTFRFLFxyXG5cdFx0XHRndDogRmlsdGVyT3BlcmFuZC5HVCxcclxuXHRcdFx0Z3RlOiBGaWx0ZXJPcGVyYW5kLkdURSxcclxuXHRcdFx0aW46IEZpbHRlck9wZXJhbmQuSU4sXHJcblx0XHRcdG5vdEluOiBGaWx0ZXJPcGVyYW5kLk5PVF9JTixcclxuXHRcdFx0aXM6IEZpbHRlck9wZXJhbmQuRVEsXHJcblx0XHRcdGlzTm90OiBGaWx0ZXJPcGVyYW5kLk5PVF9FUSxcclxuXHRcdFx0YmVmb3JlOiBGaWx0ZXJPcGVyYW5kLkxULFxyXG5cdFx0XHRhZnRlcjogRmlsdGVyT3BlcmFuZC5HVCxcclxuXHRcdFx0ZGF0ZUlzOiBGaWx0ZXJPcGVyYW5kLkVRLFxyXG5cdFx0XHRkYXRlSXNOb3Q6IEZpbHRlck9wZXJhbmQuTk9UX0VRLFxyXG5cdFx0XHRkYXRlQmVmb3JlOiBGaWx0ZXJPcGVyYW5kLkxULFxyXG5cdFx0XHRkYXRlQWZ0ZXI6IEZpbHRlck9wZXJhbmQuR1RcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIG1vZGVNYXBbbWF0Y2hNb2RlXSB8fCBudWxsO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzRmlsdGVyVmFsdWUodmFsdWU6IGFueSwgb3BlcmFuZDogRmlsdGVyT3BlcmFuZCkge1xyXG5cdFx0aWYgKG9wZXJhbmQgPT09IEZpbHRlck9wZXJhbmQuSU4gfHwgb3BlcmFuZCA9PT0gRmlsdGVyT3BlcmFuZC5OT1RfSU4pIHtcclxuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG5cdFx0XHRcdHJldHVybiBbdmFsdWVdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRvblRhYmxlU29ydChldmVudDogYW55KTogdm9pZCB7XHJcblx0XHRjb25zdCBmaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZXZlbnQ/LmZpZWxkID8/IGV2ZW50Py5tdWx0aXNvcnRtZXRhPy5bMF0/LmZpZWxkO1xyXG5cdFx0Y29uc3Qgb3JkZXI6IDEgfCAtMSB8IHVuZGVmaW5lZCA9IGV2ZW50Py5vcmRlciA/PyBldmVudD8ubXVsdGlzb3J0bWV0YT8uWzBdPy5vcmRlcjtcclxuXHRcdGlmICghZmllbGQgfHwgKG9yZGVyICE9PSAxICYmIG9yZGVyICE9PSAtMSkpIHJldHVybjtcclxuXHRcdGlmICh0aGlzLmxhc3RTb3J0ZWRGaWVsZCA9PT0gZmllbGQgJiYgdGhpcy5sYXN0U29ydE9yZGVyID09PSAtMSAmJiBvcmRlciA9PT0gMSkge1xyXG5cdFx0XHR0aGlzLmNsZWFyU29ydCgpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmxhc3RTb3J0ZWRGaWVsZCA9IGZpZWxkO1xyXG5cdFx0dGhpcy5sYXN0U29ydE9yZGVyID0gb3JkZXI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNsZWFyU29ydCgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy50YWJsZVJlZikgcmV0dXJuO1xyXG5cdFx0dGhpcy50YWJsZVJlZi5zb3J0RmllbGQgPSBudWxsO1xyXG5cdFx0dGhpcy50YWJsZVJlZi5zb3J0T3JkZXIgPSAxO1xyXG5cdFx0dGhpcy50YWJsZVJlZi5tdWx0aVNvcnRNZXRhID0gW107XHJcblx0XHRpZiAodGhpcy5pc0xhenkoKSkge1xyXG5cdFx0XHRjb25zdCBtZXRhID0gdGhpcy50YWJsZVJlZi5jcmVhdGVMYXp5TG9hZE1ldGFkYXRhKCk7XHJcblx0XHRcdG1ldGEubXVsdGlTb3J0TWV0YSA9IFtdO1xyXG5cdFx0XHRtZXRhLnNvcnRGaWVsZCA9IG51bGw7XHJcblx0XHRcdHRoaXMudGFibGVSZWYub25MYXp5TG9hZC5lbWl0KG1ldGEpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sYXN0U29ydGVkRmllbGQgPSBudWxsO1xyXG5cdFx0dGhpcy5sYXN0U29ydE9yZGVyID0gMDtcclxuXHR9XHJcblxyXG5cdG5leHRSZWNvcmQoKSB7XHJcblx0XHRjb25zdCBpZHggPSB0aGlzLmRhdGEoKS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuXHRcdGNvbnN0IG5leHRSZWNvcmQgPSB0aGlzLmRhdGEoKVtpZHggKyAxXTtcclxuXHRcdGlmIChuZXh0UmVjb3JkKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gbmV4dFJlY29yZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByZXZSZWNvcmQoKSB7XHJcblx0XHRjb25zdCBpZHggPSB0aGlzLmRhdGEoKS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuXHRcdGNvbnN0IHByZXZSZWNvcmQgPSB0aGlzLmRhdGEoKVtpZHggLSAxXTtcclxuXHRcdGlmIChwcmV2UmVjb3JkKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gcHJldlJlY29yZDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiPHAtdGFibGVcclxuXHQjcmVmXHJcblx0W3ZhbHVlXT1cImRhdGEoKVwiXHJcblx0W2RhdGFLZXldPVwiZGF0YUtleSgpXCJcclxuXHRbY29sdW1uc109XCJjb2x1bW5zLl9yZXN1bHRzXCJcclxuXHRbcm93c109XCJwYWdlU2l6ZSgpXCJcclxuXHRbcm93SG92ZXJdPVwidHJ1ZVwiXHJcblx0W3BhZ2luYXRvcl09XCIhdGhpcy5pc0xhenkoKSB8fCB0aGlzLnRvdGFsUmVjb3JkcygpID4gMTAgPyB0aGlzLnBhZ2luYXRvcigpIDogZmFsc2VcIlxyXG5cdFtsYXp5XT1cImlzTGF6eSgpXCJcclxuXHRbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxyXG5cdFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzKClcIlxyXG5cdFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzUsIDEwLCAyMCwgNTAsIDEwMF1cIlxyXG5cdFtyb3dTZWxlY3RhYmxlXT1cInJvd1NlbGVjdGFibGUoKVwiXHJcblx0W2ZpbHRlckRlbGF5XT1cIjBcIlxyXG5cdFtzb3J0TW9kZV09XCJzb3J0TW9kZSgpXCJcclxuXHRbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRSb3dzXCJcclxuXHQob25QYWdlKT1cIm9uUGFnZUV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcblx0KG9uU29ydCk9XCJvblRhYmxlU29ydCgkZXZlbnQpXCJcclxuXHQob25MYXp5TG9hZCk9XCJoYW5kbGVMYXp5TG9hZEV2ZW50KCRldmVudClcIlxyXG5cdChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uRXZlbnQuZW1pdChzZWxlY3RlZFJvd3MpXCJcclxuXHQob25Sb3dTZWxlY3QpPVwic2lkZWJhclZpc2libGUgPSB0cnVlXCJcclxuXHQob25Sb3dVbnNlbGVjdCk9XCJzaWRlYmFyVmlzaWJsZSA9IGZhbHNlXCJcclxuXHRbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG5cdFtzZWxlY3Rpb25Nb2RlXT1cImVmZmVjdGl2ZVNlbGVjdGlvbk1vZGUoKVwiXHJcblx0W3NlbGVjdGlvblBhZ2VPbmx5XT1cInNlbGVjdGlvblBhZ2VPbmx5KClcIlxyXG5cdFtjb2x1bW5SZXNpemVNb2RlXT1cImlzQ29sdW1uRXhwYW5kTW9kZSgpID8gJ2V4cGFuZCcgOiAnJ1wiXHJcblx0W3Jlc2l6YWJsZUNvbHVtbnNdPVwiaXNSZXNpemFibGVDb2x1bW5zKClcIlxyXG5cdFtjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlXT1cImN1cnJlbnRQYWdlUmVwb3J0VGV4dFwiXHJcblx0c3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtXCJcclxuXHRbcGFnaW5hdG9yRHJvcGRvd25BcHBlbmRUb109XCJwYWdpbmF0b3JEcm9wZG93bkFwcGVuZFRvKClcIlxyXG5cdFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGUoKVwiXHJcblx0W3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHQoKVwiXHJcblx0W3Nob3dGaXJzdExhc3RJY29uXT1cInNob3dGaXJzdExhc3RJY29uKClcIlxyXG5cdFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwicmVvcmRlcmFibGVDb2x1bW5zKClcIlxyXG5cdChvblJvd1Jlb3JkZXIpPVwicm93UmVvcmRlcigkZXZlbnQpXCJcclxuXHRbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkcygpXCI+XHJcblx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImdyb3VwaGVhZGVyXCIgbGV0LWl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiPlxyXG5cdFx0PHRyIHBSb3dHcm91cEhlYWRlciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmOGZhZmNcIj5cclxuXHRcdFx0PHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5fcmVzdWx0cy5sZW5ndGhcIj5cclxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCBtbC0yXCIgc3R5bGU9XCJjb2xvcjogIzZiNzI4MFwiPnt7IGl0ZW0uZ3JvdXBOYW1lIH19PC9zcGFuPlxyXG5cdFx0XHQ8L3RkPlxyXG5cdFx0PC90cj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHRAaWYgKGdsb2JhbEZpbHRlckZpZWxkcygpPy5sZW5ndGgpIHtcclxuXHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJncmlkIHAtZmx1aWRcIj5cclxuXHRcdFx0XHQ8YXJpbC10ZXh0XHJcblx0XHRcdFx0XHRjbGFzcz1cImxnOmNvbC0zIG1kOmNvbC00IHNtOmNvbC02IGNvbC0xMlwiXHJcblx0XHRcdFx0XHRbKG5nTW9kZWwpXT1cImdsb2JhbFNlYXJjaFZhbHVlXCJcclxuXHRcdFx0XHRcdChpbnB1dCk9XCJmaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXHJcblx0XHRcdFx0XHRpY29uPVwiU0VBUkNIXCJcclxuXHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwidHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3NlYXJjaCcpXCIgLz5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdH1cclxuXHJcblx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHRAaWYgKHJlb3JkZXJhYmxlQ29sdW1ucygpIHx8IHJhZGlvQnV0dG9uU2VsZWN0aW9uKCkpIHtcclxuXHRcdFx0XHQ8dGggc3R5bGU9XCJ3aWR0aDogM3JlbSAhaW1wb3J0YW50XCI+PC90aD5cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0QGlmIChjaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0PHRoPlxyXG5cdFx0XHRcdFx0QGlmIChoZWFkZXJDaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHRcdDxwLXRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0PC90aD5cclxuXHRcdFx0fVxyXG5cdFx0XHRAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcblx0XHRcdFx0QGlmIChjb2x1bW4udHlwZSgpID09PSAnb3BlcmF0aW9ucycpIHtcclxuXHRcdFx0XHRcdDx0aD5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPsSwxZ9sZW1sZXI8L2Rpdj5cclxuXHRcdFx0XHRcdDwvdGg+XHJcblx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRAaWYgKGlzUmVzaXphYmxlQ29sdW1ucygpKSB7XHJcblx0XHRcdFx0XHRcdDx0aCBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjb2x1bW4ud2lkdGgoKSA/IGNvbHVtbi53aWR0aCgpIDogJ2F1dG8nIH1cIiBwUmVzaXphYmxlQ29sdW1uPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJuby13cmFwLXdvcmRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gY29sdW1uLmhlYWRlcigpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0e3sgY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gKGNvbHVtbi5oZWFkZXIoKSB8IHNsaWNlOiAwIDogNTApICsgJy4uLicgOiBjb2x1bW4uaGVhZGVyKCkgfX1cclxuXHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoY29sdW1uLmlzU2hvd0hlYWRlclRvb2x0aXAoKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cImNvbG9yOiBncmVlbjsgcGFkZGluZy10b3A6IDRweDsgcGFkZGluZy1sZWZ0OiA0cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXBUZW1wbGF0ZSgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvdGg+XHJcblx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0QGlmIChpc0xhenkoKSAmJiBpc1NvcnRhYmxlKCkpIHtcclxuXHRcdFx0XHRcdFx0XHQ8dGhcclxuXHRcdFx0XHRcdFx0XHRcdFtwU29ydGFibGVDb2x1bW5dPVwiY29sdW1uLmZpZWxkKClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0W25nU3R5bGVdPVwieyB3aWR0aDogY29sdW1uLndpZHRoKCkgPyBjb2x1bW4ud2lkdGgoKSA6ICdhdXRvJyB9XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWluLXdpZHRoOiAxNzBweFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJuby13cmFwLXdvcmRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCJjb2x1bW4uaGVhZGVyKCkubGVuZ3RoID4gNTAgPyBjb2x1bW4uaGVhZGVyKCkgOiAnJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3sgY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gKGNvbHVtbi5oZWFkZXIoKSB8IHNsaWNlOiAwIDogNTApICsgJy4uLicgOiBjb2x1bW4uaGVhZGVyKCkgfX1cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoY29sdW1uLnR5cGUoKSAhPT0gJ29wZXJhdGlvbnMnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sdW1uLmZpZWxkKClcIj48L3Atc29ydEljb24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoc2hvd0NvbHVtbkZpbHRlcnMoKSAmJiBjb2x1bW4uc2hvd0ZpbHRlcigpICYmIGNvbHVtbi50eXBlKCkgIT09ICdvcGVyYXRpb25zJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QHN3aXRjaCAoY29sdW1uLmZpbHRlclR5cGUoKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2FzZSAoQ29sdW1uRmlsdGVyVHlwZUVudW0uVEVYVCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxwLWNvbHVtbkZpbHRlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ZpZWxkXT1cImNvbHVtbi5maWVsZCgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk9XCJtZW51XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFttYXhDb25zdHJhaW50c109XCIxXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibXQtMlwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNhc2UgKENvbHVtbkZpbHRlclR5cGVFbnVtLk5VTUVSSUMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1lcmljXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtmaWVsZF09XCJjb2x1bW4uZmllbGQoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbc2hvd0FwcGx5QnV0dG9uXT1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W21heENvbnN0cmFpbnRzXT1cIjFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtdC0yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCIgbGV0LXZhbHVlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1udW1iZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbWF4RGlnaXRzXT1cIjZcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ01vZGVsXT1cImdldEZpbHRlclZhbHVlKGNvbHVtbi5maWVsZCgpKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50LCBmaWx0ZXIsIGNvbHVtbi5maWVsZCgpKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LWZ1bGxcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1lbmQgbXQtNVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtsYWJlbF09XCInVGVtaXpsZSdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrRXZlbnQpPVwiY2xlYXJGaWx0ZXIoZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbGFiZWxdPVwiJ1V5Z3VsYSdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrRXZlbnQpPVwiYXBwbHlGaWx0ZXIoZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9wLWNvbHVtbkZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2FzZSAoQ29sdW1uRmlsdGVyVHlwZUVudW0uREFURSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoY29sdW1uLnNob3dUaW1lSW5EYXRlRmlsdGVycygpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ZpZWxkXT1cImNvbHVtbi5maWVsZCgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFttYXhDb25zdHJhaW50c109XCIxXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3Nob3dBcHBseUJ1dHRvbl09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm10LTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiIGxldC12YWx1ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1jYWxlbmRhclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nTW9kZWxdPVwiZ2V0RmlsdGVyVmFsdWUoY29sdW1uLmZpZWxkKCkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKCRldmVudCwgZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LTZcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3Nob3dUaW1lXT1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2FwcGVuZFRvXT1cIm51bGxcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWVuZCBtdC01XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I9XCJzZWNvbmRhcnlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbGFiZWxdPVwiJ1RlbWl6bGUnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrRXZlbnQpPVwiY2xlYXJGaWx0ZXIoZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGFyaWwtYnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtsYWJlbF09XCInVXlndWxhJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImFwcGx5RmlsdGVyKGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvcC1jb2x1bW5GaWx0ZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbZmllbGRdPVwiY29sdW1uLmZpZWxkKClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFttYXhDb25zdHJhaW50c109XCIxXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtdC0yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1jYWxlbmRhciBbKG5nTW9kZWwpXT1cImZpbHRlci52YWx1ZVwiIGNsYXNzPVwidy02XCIgW2FwcGVuZFRvXT1cIm51bGxcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9wLWNvbHVtbkZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNhc2UgKENvbHVtbkZpbHRlclR5cGVFbnVtLkJPT0xFQU4pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZCgpXCIgdHlwZT1cImJvb2xlYW5cIiBkaXNwbGF5PVwibWVudVwiIGNsYXNzPVwibXQtMlwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNhc2UgKENvbHVtbkZpbHRlclR5cGVFbnVtLkVOVU0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtmaWVsZF09XCJjb2x1bW4uZmllbGQoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93QXBwbHlCdXR0b25dPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W21heENvbnN0cmFpbnRzXT1cIjFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W21hdGNoTW9kZU9wdGlvbnNdPVwiW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiAnRcWfaXR0aXInLCB2YWx1ZTogJ2VxdWFscycgfSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogJ0XFn2l0IERlxJ9pbGRpcicsIHZhbHVlOiAnbm90RXF1YWxzJyB9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiAnxLDDp2VyaXInLCB2YWx1ZTogJ2NvbnRhaW5zJyB9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiAnxLDDp2VybWV6JywgdmFsdWU6ICdub3RDb250YWlucycgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm10LTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIiBsZXQtdmFsdWU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxwLWRyb3Bkb3duXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W29wdGlvbnNdPVwiZ2V0RW51bU9wdGlvbnMoY29sdW1uLmVudW1Hcm91cE5hbWUoKSwgJ0FMTCcpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdNb2RlbF09XCJnZXRGaWx0ZXJWYWx1ZShjb2x1bW4uZmllbGQoKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvbkNoYW5nZSk9XCJvbkZpbHRlckNoYW5nZSgkZXZlbnQudmFsdWUsIGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcHBlbmRUbz1cInNlbGZcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93Q2xlYXJdPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1kcm9wZG93bj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtZW5kIG10LTVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2xvcj1cInNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbGFiZWxdPVwiJ1RlbWl6bGUnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImNsZWFyRmlsdGVyKGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2xvcj1cInByaW1hcnlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2xhYmVsXT1cIidVeWd1bGEnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImFwcGx5RmlsdGVyKGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvcC1jb2x1bW5GaWx0ZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QGlmIChjb2x1bW4uaXNTaG93SGVhZGVyVG9vbHRpcCgpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cImNvbG9yOiBncmVlblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGUgbXQtMVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcFRlbXBsYXRlKClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvdGg+XHJcblx0XHRcdFx0XHRcdH0gQGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdDx0aCBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjb2x1bW4ud2lkdGgoKSA/IGNvbHVtbi53aWR0aCgpIDogJ2F1dG8nIH1cIiBzdHlsZT1cIm1pbi13aWR0aDogMTcwcHhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibm8td3JhcC13b3JkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gY29sdW1uLmhlYWRlcigpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7IGNvbHVtbi5oZWFkZXIoKS5sZW5ndGggPiA1MCA/IChjb2x1bW4uaGVhZGVyKCkgfCBzbGljZTogMCA6IDUwKSArICcuLi4nIDogY29sdW1uLmhlYWRlcigpIH19XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYgKGNvbHVtbi5pc1Nob3dIZWFkZXJUb29sdGlwKCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwiY29sb3I6IGdyZWVuXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSBtdC0xXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cImNvbHVtbi50b29sdGlwVGVtcGxhdGUoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC90aD5cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0PC90cj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XHJcblx0XHRAaWYgKGVmZmVjdGl2ZVNlbGVjdGlvbk1vZGUoKSkge1xyXG5cdFx0XHQ8dHJcclxuXHRcdFx0XHRbcFNlbGVjdGFibGVSb3ddPVwiaXRlbVwiXHJcblx0XHRcdFx0W25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0/LnJvd0NvbG9yID8gaXRlbT8ucm93Q29sb3IgOiBudWxsIH1cIlxyXG5cdFx0XHRcdFtwUmVvcmRlcmFibGVSb3ddPVwiaW5kZXhcIj5cclxuXHRcdFx0XHRAaWYgKHJlb3JkZXJhYmxlQ29sdW1ucygpKSB7XHJcblx0XHRcdFx0XHQ8dGQ+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwicGkgcGktYmFyc1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT48L3NwYW4+XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0QGlmIChjaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHQ8dGQgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG5cdFx0XHRcdFx0XHQ8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0QGlmIChyYWRpb0J1dHRvblNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHQ8dGQ+XHJcblx0XHRcdFx0XHRcdDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcblx0XHRcdFx0XHQ8dGQgW25nU3R5bGVdPVwieyAndGV4dC1hbGlnbic6IGNvbHVtbi50eXBlKCkgPT09ICdvcGVyYXRpb25zJyA/ICdjZW50ZXInIDogY29sdW1uLnRBbGlnbigpIHx8IHRBbGlnbigpIH1cIj5cclxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cIltpdGVtXVwiIFtuZ0ZvclRlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC90cj5cclxuXHRcdH0gQGVsc2Uge1xyXG5cdFx0XHQ8dHIgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0/LnJvd0NvbG9yID8gaXRlbT8ucm93Q29sb3IgOiBudWxsIH1cIiBbcFJlb3JkZXJhYmxlUm93XT1cImluZGV4XCI+XHJcblx0XHRcdFx0QGlmIChyZW9yZGVyYWJsZUNvbHVtbnMoKSkge1xyXG5cdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInBpIHBpLWJhcnNcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+PC9zcGFuPlxyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0QGlmIChjaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHQ8dGQ+XHJcblx0XHRcdFx0XHRcdDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVDaGVja2JveD5cclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRAaWYgKHJhZGlvQnV0dG9uU2VsZWN0aW9uKCkpIHtcclxuXHRcdFx0XHRcdDx0ZD5cclxuXHRcdFx0XHRcdFx0PHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuXHRcdFx0XHRcdDx0ZCBbbmdTdHlsZV09XCJ7ICd0ZXh0LWFsaWduJzogY29sdW1uLnR5cGUoKSA9PT0gJ29wZXJhdGlvbnMnID8gJ2NlbnRlcicgOiBjb2x1bW4udEFsaWduKCkgfHwgdEFsaWduKCkgfVwiPlxyXG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgbmdGb3IgW25nRm9yT2ZdPVwiW2l0ZW1dXCIgW25nRm9yVGVtcGxhdGVdPVwiY29sdW1uLnRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L3RyPlxyXG5cdFx0fVxyXG5cdDwvbmctdGVtcGxhdGU+XHJcblxyXG5cdEBpZiAoc2hvd0Zvb3RlcigpKSB7XHJcblx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic3VtbWFyeVwiPlxyXG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbZm9vdGVyXVwiPjwvbmctY29udGVudD5cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0fVxyXG5cclxuXHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMuX3Jlc3VsdHMubGVuZ3RoXCI+e3sgbm9EYXRhRm91bmRMYWJlbCgpIH19PC90ZD5cclxuXHRcdDwvdHI+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuPC9wLXRhYmxlPlxyXG5cclxuPGFyaWwtZXhwb3J0LW92ZXJsYXktcGFuZWwgW2V4cG9ydENvbmZpZ109XCJleHBvcnRDb25maWcoKSFcIiBbY29sdW1uc109XCJjb2x1bW5zXCIgLz5cclxuXHJcbjxwLXRvYXN0IGtleT1cImV4cG9ydC10b2FzdFwiPlxyXG5cdDxuZy10ZW1wbGF0ZSBsZXQtbWVzc2FnZSBwVGVtcGxhdGU9XCJtZXNzYWdlXCI+XHJcblx0XHQ8c3BhbiBjbGFzcz1cInAtdG9hc3QtbWVzc2FnZS1pY29uXCI+XHJcblx0XHRcdDxDaGVja0ljb24gLz5cclxuXHRcdDwvc3Bhbj5cclxuXHRcdDxkaXYgY2xhc3M9XCJwLXRvYXN0LW1lc3NhZ2UtdGV4dFwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwicC10b2FzdC1zdW1tYXJ5XCI+e3sgbWVzc2FnZS5zdW1tYXJ5IH19PC9kaXY+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJwLXRvYXN0LWRldGFpbFwiIFtpbm5lckhUTUxdPVwibWVzc2FnZS5kZXRhaWwgfCBzYWZlOiAnaHRtbCdcIj48L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcbjwvcC10b2FzdD5cclxuXHJcbkBpZiAob3BlblNlbGVjdGlvbk9uU2lkZWJhcigpICYmIHNlbGVjdGlvbk1vZGUoKSA9PT0gJ3NpbmdsZScpIHtcclxuXHQ8cC1zaWRlYmFyXHJcblx0XHRbKHZpc2libGUpXT1cInNpZGViYXJWaXNpYmxlXCJcclxuXHRcdHBvc2l0aW9uPVwicmlnaHRcIlxyXG5cdFx0W3N0eWxlXT1cInsgJ21heC13aWR0aCc6ICc4MDBweCcsIHdpZHRoOiAnMTAwJScgfVwiXHJcblx0XHQob25IaWRlKT1cInNlbGVjdGVkUm93cyA9IHVuZGVmaW5lZFwiXHJcblx0XHRbbW9kYWxdPVwiZmFsc2VcIj5cclxuXHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuXHRcdFx0PHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQteGxcIj57eyB0cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUuc2lkZWJhckRldGFpbEhlYWRlcicpIH19PC9zcGFuPlxyXG5cdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0XHRAaWYgKHNpZGViYXJWaXNpYmxlKSB7XHJcblx0XHRcdDxwLXRhYmxlIFt2YWx1ZV09XCJzZWxlY3RlZFJvd3MgfCBrZXl2YWx1ZVwiIFtwYWdpbmF0b3JdPVwiZmFsc2VcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc21cIj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcblx0XHRcdFx0XHQ8dHI+XHJcblx0XHRcdFx0XHRcdDx0aD57eyB0cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUuZmllbGQnKSB9fTwvdGg+XHJcblx0XHRcdFx0XHRcdDx0aD57eyB0cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUudmFsdWUnKSB9fTwvdGg+XHJcblx0XHRcdFx0XHQ8L3RyPlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblxyXG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0gbGV0LWluZGV4PVwicm93SW5kZXhcIj5cclxuXHRcdFx0XHRcdDx0cj5cclxuXHRcdFx0XHRcdFx0QGlmIChjb2x1bW5zIHwgZ2V0Q29sdW1uQnlGaWVsZDogaXRlbS5rZXk7IGFzIGNvbHVtbikge1xyXG5cdFx0XHRcdFx0XHRcdDx0ZCBbd2lkdGhdPVwiJzEyMHB4J1wiPnt7IGNvbHVtbi5oZWFkZXIoKSB9fTwvdGQ+XHJcblx0XHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0QGlmIChjb2x1bW4udHlwZSgpID09PSAnanNvbicgJiYgaXRlbS52YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IFtuZ1N0eWxlXT1cInsgZGlzcGxheTogJ2dyaWQnIH1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cHJlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm92ZXJmbG93LXktYXV0byBtYXgtaC0zMHJlbSBib3JkZXItMzAwIGJvcmRlci0xIGJvcmRlci1yb3VuZCBteS0yIHAtM1wiPjxjb2RlPnt7aXRlbS52YWx1ZSB8IHBhcnNlIHwganNvbn19PC9jb2RlPjwvcHJlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdH0gQGVsc2UgaWYgKGNvbHVtbi50eXBlKCkgPT09ICdsb25nLXRleHQnICYmIGl0ZW0udmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0PGFyaWwtdmFsdWUgdHlwZT1cInRleHRcIiBbbW9kZWxdPVwiaXRlbS52YWx1ZVwiIFtpc1RleHRDbGFtcF09XCJmYWxzZVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cIltzZWxlY3RlZFJvd3NdXCIgW25nRm9yVGVtcGxhdGVdPVwiY29sdW1uLnRlbXBsYXRlXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQ8L3RyPlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdDwvcC10YWJsZT5cclxuXHRcdH1cclxuXHJcblx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG5cdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdGljb249XCJBUlJPV19MRUZUXCJcclxuXHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRbbGFiZWxdPVwidHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3RhYmxlLnByZXZSZWNvcmQnKVwiXHJcblx0XHRcdFx0XHQoY2xpY2tFdmVudCk9XCJwcmV2UmVjb3JkKClcIiAvPlxyXG5cclxuXHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRpY29uPVwiQVJST1dfUklHSFRcIlxyXG5cdFx0XHRcdFx0aWNvblBvcz1cInJpZ2h0XCJcclxuXHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRbbGFiZWxdPVwidHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3RhYmxlLm5leHRSZWNvcmQnKVwiXHJcblx0XHRcdFx0XHQoY2xpY2tFdmVudCk9XCJuZXh0UmVjb3JkKClcIiAvPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0PC9wLXNpZGViYXI+XHJcbn1cclxuIl19
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS90YWJsZS9zcmMvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS90YWJsZS9zcmMvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxLQUFLLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBSTVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHdkMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUdOLG9CQUFvQixFQUVwQixhQUFhLEVBRWIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhFOzs7OztHQUtHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFVLENBQUM7QUFTbEQsTUFBTSxPQUFPLGNBQWM7SUFtRTFCLFlBQ1EsZ0JBQWtDLEVBQ2pDLHFCQUE0QztRQUQ3QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFwRTNDLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM1RCxrQkFBYSxHQUFzQixJQUFJLFlB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QiwyRUFDM0IsS0FBSyxxRUN2RGpCLDY3bUJBeWFBOzs0RkR6WGEsY0FBYztrQkFMMUIsU0FBUzsrQkFDQyxZQUFZO3lIQUtaLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ2dDLE9BQU87c0JBQTdDLGVBQWU7dUJBQUMsb0JBQW9CO2dCQUNHLFFBQVE7c0JBQS9DLFNBQVM7dUJBQUMsMkJBQTJCO2dCQUNwQixRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ1AsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENvbXBvbmVudCxcclxuXHRDb250ZW50Q2hpbGRyZW4sXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE91dHB1dCxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdFZpZXdDaGlsZCxcclxuXHRTaWduYWwsXHJcblx0Y29tcHV0ZWQsXHJcblx0ZWZmZWN0LFxyXG5cdGlucHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGFibGUsIFRhYmxlUm93UmVvcmRlckV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5cclxuaW1wb3J0IHsgUHJveHlUeXBlcyB9IGZyb20gJ2FyaWwvaHR0cCc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbkdyb3VwU2VydmljZSB9IGZyb20gJ2FyaWwvdGhlbWUvbGF5b3V0JztcclxuXHJcbmltcG9ydCB7IEV4cG9ydE92ZXJsYXlQYW5lbENvbXBvbmVudCB9IGZyb20gJy4vZXhwb3J0LW92ZXJsYXktcGFuZWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuXHRBbGlnblR5cGVzLFxyXG5cdEFyaWxmaWVsZEZpbHRlcixcclxuXHRDb2x1bW5GaWx0ZXJUeXBlRW51bSxcclxuXHRFeHBvcnRPcHRpb25zLFxyXG5cdEZpbHRlck9wZXJhbmQsXHJcblx0VGFibGVDb2x1bW5zXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5cclxuLyogVE9ETyA6XHJcbiAqIHNlcnZlci1zaWRlLXByb3h5IChQcm94eVR5cGVzLlNlcnZlclNpZGUpXHJcbiAqIHNlYXJjaCAmIGNvbHVtIGZpbHRlciAmIHNvcnRcclxuICogcGFnaW5hdGlvbiBvcGVyYXRpb25cclxuICogUXVlcnkgU2lnbmFsc1xyXG4gKi9cclxuY29uc3QgcGFnZU9wdGlvbnMgPSBbNSwgMTAsIDIwLCA1MCwgMTAwXSBhcyBjb25zdDtcclxuXHJcbnR5cGUgU2VsZWN0aW9uVHlwZXMgPSAnc2luZ2xlJyB8ICdtdWx0aXBsZScgfCBudWxsO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcmlsLXRhYmxlJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IHtcclxuXHRAT3V0cHV0KCkgb25QYWdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QE91dHB1dCgpIHNlbGVjdGlvbkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdEBPdXRwdXQoKSBsYXp5TG9hZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdEBPdXRwdXQoKSByb3dSZW9yZGVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93UmVvcmRlckV2ZW50PigpO1xyXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW5Db21wb25lbnQpIGNvbHVtbnMhOiBUYWJsZUNvbHVtbnM7XHJcblx0QFZpZXdDaGlsZChFeHBvcnRPdmVybGF5UGFuZWxDb21wb25lbnQpIGV4cG9ydE9wITogRXhwb3J0T3ZlcmxheVBhbmVsQ29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoVGFibGUpIHRhYmxlUmVmITogVGFibGU7XHJcblx0QElucHV0KCkga2ViYWJNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHRASW5wdXQoKSBleHBhbmRhYmxlRmllbGRzITogc3RyaW5nO1xyXG5cclxuXHRkYXRhID0gaW5wdXQucmVxdWlyZWQ8YW55W10+KCk7XHJcblx0Y2hlY2tib3hTZWxlY3Rpb24gPSBpbnB1dDxib29sZWFuPigpO1xyXG5cdHJhZGlvQnV0dG9uU2VsZWN0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oKTtcclxuXHRoZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XHJcblx0cGFnZVNpemUgPSBpbnB1dDwodHlwZW9mIHBhZ2VPcHRpb25zKVtudW1iZXJdPigxMCk7XHJcblx0cHJveHkgPSBpbnB1dDxQcm94eVR5cGVzPihQcm94eVR5cGVzLk5hdGl2ZSk7XHJcblx0c2hvd0Zvb3RlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHR0QWxpZ24gPSBpbnB1dDxBbGlnblR5cGVzPignbGVmdCcpO1xyXG5cdHNlbGVjdGlvbk1vZGUgPSBpbnB1dDxTZWxlY3Rpb25UeXBlcz4oJ3NpbmdsZScpO1xyXG5cdGV4cG9ydEZpbGVOYW1lID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0bm9EYXRhRm91bmRMYWJlbCA9IGlucHV0PHN0cmluZz4oJ05vIERhdGEgRm91bmQnKTtcclxuXHR0YWJsZUhlYWRlciA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cdHNob3dUYWJsZUhlYWRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRpc0ZpcnN0Um93U2VsZWN0ZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0ZGF0YUtleSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cdHNlbGVjdGVkUm93c0lucHV0ID0gaW5wdXQ8YW55PihbXSk7XHJcblx0aXNMYXp5ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblx0dG90YWxSZWNvcmRzID0gaW5wdXQ8bnVtYmVyPigwKTtcclxuXHRwYWdpbmF0b3IgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHRwYWdpbmF0b3JEcm9wZG93bkFwcGVuZFRvID0gaW5wdXQ8c3RyaW5nPignYm9keScpOyAvLyAnYm9keSd8ICdteURpdidcclxuXHRpc0NvbHVtbkV4cGFuZE1vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0aXNSZXNpemFibGVDb2x1bW5zID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdGlzU29ydGFibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0ZWZmZWN0aXZlU2VsZWN0aW9uTW9kZSE6IFNpZ25hbDxTZWxlY3Rpb25UeXBlcz47XHJcblx0c2Nyb2xsYWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cdHNjcm9sbEhlaWdodCA9IGlucHV0PHN0cmluZz4oJzQ2MHB4Jyk7XHJcblx0c29ydE1vZGUgPSBpbnB1dDwnc2luZ2xlJyB8ICdtdWx0aXBsZSc+KCdtdWx0aXBsZScpO1xyXG5cdHNob3dGaXJzdExhc3RJY29uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblx0cm93U2VsZWN0YWJsZSA9IGlucHV0PChyb3dEYXRhOiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cdHJlb3JkZXJhYmxlQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRyZW9yZGVyRmllbGQgPSBpbnB1dDxzdHJpbmc+KCk7XHJcblx0c2hvd0NvbHVtbkZpbHRlcnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0c2VsZWN0aW9uUGFnZU9ubHkgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0b3BlblNlbGVjdGlvbk9uU2lkZWJhciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRnbG9iYWxGaWx0ZXJGaWVsZHMgPSBpbnB1dDxzdHJpbmdbXT4oKTtcclxuXHJcblx0Ly8gS2VlcHMgbGFzdCBjbGlja2VkIHNvcnQgZmllbGQgYW5kIGl0cyBjeWNsZXMgdG8gZW5hYmxlIEFTQyAtPiBERVNDIC0+IE5PTkVcclxuXHRwcml2YXRlIGxhc3RTb3J0ZWRGaWVsZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBsYXN0U29ydE9yZGVyOiAxIHwgLTEgfCAwID0gMDsgLy8gMTogYXNjLCAtMTogZGVzYywgMDogbm9uZSAvIHdlIHNlbmQgMiBmb3IgZGVzYyB0byBiYWNrZW5kIGJ1dCBwcmltZW5nIGtlZXBzIC0xXHJcblxyXG5cdC8qKlxyXG5cdCAqIEBzZWUge0BsaW5rIEV4cG9ydE9wdGlvbnN9XHJcblx0ICovXHJcblx0ZXhwb3J0Q29uZmlnID0gaW5wdXQ8RXhwb3J0T3B0aW9ucz4oKTtcclxuXHJcblx0ZmlsdGVyVGV4dCE6IHN0cmluZztcclxuXHRnbG9iYWxTZWFyY2hWYWx1ZT86IHN0cmluZztcclxuXHRpc0FsbFNlbGVjdGVkID0gdHJ1ZTtcclxuXHRzZWxlY3RlZFJvd3M6IGFueTtcclxuXHRwYWdlT3B0aW9ucyA9IHBhZ2VPcHRpb25zO1xyXG5cdGV4cG9ydENvbHVtbnM6IEFycmF5PHsgdGl0bGU6IHN0cmluZzsgZGF0YUtleTogc3RyaW5nIH0+ID0gW107XHJcblx0ZmlsdGVyVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB8IG51bGwgfSA9IHt9O1xyXG5cdHByaXZhdGUgcmVxdWVzdGVkRW51bUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHRDb2x1bW5GaWx0ZXJUeXBlRW51bSA9IENvbHVtbkZpbHRlclR5cGVFbnVtO1xyXG5cdHNpZGViYXJWaXNpYmxlID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHNlbGVjdGlvbkdyb3VwU2VydmljZTogU2VsZWN0aW9uR3JvdXBTZXJ2aWNlXHJcblx0KSB7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5pc0ZpcnN0Um93U2VsZWN0ZWQoKSAmJiB0aGlzLmRhdGEoKSkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5kYXRhKClbMF07XHJcblx0XHRcdFx0dGhpcy5zZWxlY3Rpb25FdmVudC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRSb3dzSW5wdXQoKSkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZWxlY3RlZFJvd3NJbnB1dCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmVmZmVjdGl2ZVNlbGVjdGlvbk1vZGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLmNoZWNrYm94U2VsZWN0aW9uKCkpIHJldHVybiAnbXVsdGlwbGUnO1xyXG5cdFx0XHRpZiAodGhpcy5yYWRpb0J1dHRvblNlbGVjdGlvbigpKSByZXR1cm4gbnVsbDtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSgpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuZGF0YSgpPy5sZW5ndGggPT0gMTApIHRoaXMudGFibGVSZWYucm93cyA9IDEwO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuaXNMYXp5KCkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMoKT8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0YWxlcnQoXHJcblx0XHRcdFx0XHQnR2xvYmFsIGZpbHRlciBpcyBub3Qgc3VwcG9ydGVkIGluIGxhenkgbG9hZGluZyBtb2RlLiBQbGVhc2Ugc2V0IGlzTGF6eSBpbnB1dCB0byBmYWxzZSB0byB1c2UgZ2xvYmFsIGZpbHRlci4nXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGlzSW5pdGlhbExvYWQgPSB0cnVlO1xyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHRpZiAoY2hhbmdlc1snZGF0YSddICYmIGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2RhdGEnXS5wcmV2aW91c1ZhbHVlKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzSW5pdGlhbExvYWQpIHtcclxuXHRcdFx0XHR0aGlzLmlzSW5pdGlhbExvYWQgPSBmYWxzZTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldCBjdXJyZW50UGFnZVJlcG9ydFRleHQoKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IHRvdGFsID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUudG90YWwnKTtcclxuXHRcdGNvbnN0IHJlY29yZCA9IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3RhYmxlLnJlY29yZHMnKTtcclxuXHRcdGNvbnN0IHBhZ2UgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCd0YWJsZS5wYWdlJyk7XHJcblx0XHRyZXR1cm4gYCR7dG90YWx9IDoge3RvdGFsUmVjb3Jkc30gJHtyZWNvcmR9IHwgJHtwYWdlfSA6IHtjdXJyZW50UGFnZX0gLyB7dG90YWxQYWdlc31gO1xyXG5cdH1cclxuXHJcblx0dG9nZ2xlRXhwb3J0ID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4gdGhpcy5leHBvcnRPcC5vcC50b2dnbGUoZXZlbnQpO1xyXG5cclxuXHRoYW5kbGVMYXp5TG9hZEV2ZW50KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHNvcnRGaWVsZCA9IGV2ZW50Lm11bHRpU29ydE1ldGE/Lmxlbmd0aCA/IGV2ZW50Lm11bHRpU29ydE1ldGFbMF0gOiBudWxsO1xyXG5cdFx0Y29uc3QgYXJpbEZpbHRlcnMgPSB0aGlzLmNvbnZlcnRQcmltZU5nRmlsdGVyc1RvU3RhbmRhcmQoZXZlbnQuZmlsdGVycyk7XHJcblxyXG5cdFx0Y29uc3QgbmV3RXZlbnREYXRhID0ge1xyXG5cdFx0XHRwYWdlcjoge1xyXG5cdFx0XHRcdHBhZ2VTaXplOiBldmVudC5yb3dzLFxyXG5cdFx0XHRcdHBhZ2VOdW1iZXI6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDFcclxuXHRcdFx0fSxcclxuXHRcdFx0c29ydDpcclxuXHRcdFx0XHRzb3J0RmllbGQ/LmZpZWxkID9cclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0ZmllbGRJZDogc29ydEZpZWxkPy5maWVsZCxcclxuXHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBzb3J0RmllbGQ/Lm9yZGVyID09PSAxID8gMSA6IDIgLy8gMSBmb3IgYXNjLCAyIGZvciBkZXNjXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0Olx0bnVsbCxcclxuXHRcdFx0ZmlsdGVyczogYXJpbEZpbHRlcnNcclxuXHRcdH07XHJcblx0XHR0aGlzLmxhenlMb2FkRXZlbnQuZW1pdChuZXdFdmVudERhdGEpO1xyXG5cdH1cclxuXHJcblx0ZmlsdGVyR2xvYmFsKGU6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy50YWJsZVJlZi5maWx0ZXJHbG9iYWwoZT8udGFyZ2V0Py52YWx1ZSwgJ2NvbnRhaW5zJyk7XHJcblx0fVxyXG5cclxuXHRjbGVhcigpOiB2b2lkIHtcclxuXHRcdHRoaXMudGFibGVSZWYudmFsdWUgPSBbXTtcclxuXHRcdHRoaXMudGFibGVSZWYuY2xlYXIoKTtcclxuXHRcdHRoaXMuZXhwb3J0T3Aub3A/LmhpZGUoKTtcclxuXHRcdHRoaXMuZ2xvYmFsU2VhcmNoVmFsdWUgPSAnJztcclxuXHR9XHJcblxyXG5cdHJvd1Jlb3JkZXIoZXZlbnQ6IFRhYmxlUm93UmVvcmRlckV2ZW50KTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMucmVvcmRlckZpZWxkKCkpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignUmVvcmRlciBmaWVsZCBpcyBub3QgZGVmaW5lZC4gUGxlYXNlIHNldCB0aGUgcmVvcmRlckZpZWxkIGlucHV0LicpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2UgaWYgKCEoKHRoaXMucmVvcmRlckZpZWxkKCkgYXMgc3RyaW5nKSBpbiB0aGlzLmRhdGEoKVswXSkpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihgUmVvcmRlciBmaWVsZCBcIiR7dGhpcy5yZW9yZGVyRmllbGQoKX1cIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YSBpdGVtcy5gKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGF0YSgpLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcblx0XHRcdGl0ZW1bdGhpcy5yZW9yZGVyRmllbGQoKSBhcyBzdHJpbmddID0gaW5kZXggKyAxO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5yb3dSZW9yZGVyRXZlbnQuZW1pdChldmVudCk7XHJcblx0fVxyXG5cclxuXHRnZXRGaWx0ZXJWYWx1ZShmaWVsZDogc3RyaW5nKTogYW55IHtcclxuXHRcdHJldHVybiB0aGlzLmZpbHRlclZhbHVlc1tmaWVsZF0gfHwgbnVsbDtcclxuXHR9XHJcblxyXG5cdG9uRmlsdGVyQ2hhbmdlKHZhbHVlOiBvYmplY3QsIF9maWx0ZXJDYWxsYmFjazogYW55LCBmaWVsZDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmZpbHRlclZhbHVlc1tmaWVsZF0gPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGFwcGx5RmlsdGVyKGZpbHRlckNhbGxiYWNrOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgZmllbGQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZpbHRlclZhbHVlc1tmaWVsZF07XHJcblx0XHRmaWx0ZXJDYWxsYmFjayh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRjbGVhckZpbHRlcihmaWx0ZXJDYWxsYmFjazogKHZhbHVlOiBhbnkpID0+IHZvaWQsIGZpZWxkOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuZmlsdGVyVmFsdWVzW2ZpZWxkXSA9IG51bGw7XHJcblx0XHRmaWx0ZXJDYWxsYmFjayhudWxsKTtcclxuXHR9XHJcblxyXG5cdGdldEVudW1PcHRpb25zKGdyb3VwTmFtZTogc3RyaW5nLCBwYXJlbnRTZWxlY3Rpb25LZXkgPSAnQUxMJyk6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiB7XHJcblx0XHRjb25zdCBrZXkgPSBgJHtncm91cE5hbWV9fiR7cGFyZW50U2VsZWN0aW9uS2V5fWA7XHJcblx0XHRjb25zdCBncm91cCA9IHRoaXMuc2VsZWN0aW9uR3JvdXBTZXJ2aWNlLnNlbGVjdGlvbkdyb3VwcygpW2tleV07XHJcblxyXG5cdFx0aWYgKCFncm91cCAmJiAhdGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2UuaXNMb2FkaW5nKGtleSkgJiYgIXRoaXMucmVxdWVzdGVkRW51bUtleXMuaGFzKGtleSkpIHtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0ZWRFbnVtS2V5cy5hZGQoa2V5KTtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2UuZmV0Y2hFbnVtKGdyb3VwTmFtZSwgcGFyZW50U2VsZWN0aW9uS2V5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRncm91cD8uc2VsZWN0aW9uSXRlbXM/Lm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG5cdFx0XHRcdGxhYmVsOiBpdGVtLnNlbGVjdGlvbkRpc3BsYXksXHJcblx0XHRcdFx0dmFsdWU6IGl0ZW0uc2VsZWN0aW9uS2V5XHJcblx0XHRcdH0pKSA/PyBbXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29udmVydFByaW1lTmdGaWx0ZXJzVG9TdGFuZGFyZChwcmltZU5nRmlsdGVyczogYW55KTogQXJpbGZpZWxkRmlsdGVyW10ge1xyXG5cdFx0Y29uc3QgZmlsdGVyczogQXJpbGZpZWxkRmlsdGVyW10gPSBbXTtcclxuXHJcblx0XHRpZiAoIXByaW1lTmdGaWx0ZXJzKSB7XHJcblx0XHRcdHJldHVybiBmaWx0ZXJzO1xyXG5cdFx0fVxyXG5cclxuXHRcdE9iamVjdC5rZXlzKHByaW1lTmdGaWx0ZXJzKS5mb3JFYWNoKChmaWVsZElkKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkRmlsdGVycyA9IHByaW1lTmdGaWx0ZXJzW2ZpZWxkSWRdO1xyXG5cclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZmllbGRGaWx0ZXJzKSAmJiBmaWVsZEZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGZpZWxkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmlzVmFsaWRGaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0aGlzLm1hcE1hdGNoTW9kZVRvT3BlcmFuZChmaWx0ZXIubWF0Y2hNb2RlKTtcclxuXHRcdFx0XHRcdFx0aWYgKG9wZXJhbmQpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgdmFsdWVzIGZvciBJTi9OT1RfSU4gb3BlcmF0aW9uc1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBvcGVyYW5kKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0ZmlsdGVycy5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkSWQ6IGlzTmFOKHBhcnNlSW50KGZpZWxkSWQpKSA/IGZpZWxkSWQgOiBwYXJzZUludChmaWVsZElkKSxcclxuXHRcdFx0XHRcdFx0XHRcdG9wZXJhbmQ6IG9wZXJhbmQsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogcHJvY2Vzc2VkVmFsdWVcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gZmlsdGVycztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaXNWYWxpZEZpbHRlclZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUuc29tZSgoaXRlbSkgPT4gaXRlbSAhPT0gbnVsbCAmJiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gJycpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCkgIT09ICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXBNYXRjaE1vZGVUb09wZXJhbmQobWF0Y2hNb2RlOiBzdHJpbmcpOiBGaWx0ZXJPcGVyYW5kIHwgbnVsbCB7XHJcblx0XHRjb25zdCBtb2RlTWFwOiB7IFtrZXk6IHN0cmluZ106IEZpbHRlck9wZXJhbmQgfSA9IHtcclxuXHRcdFx0ZXF1YWxzOiBGaWx0ZXJPcGVyYW5kLkVRLFxyXG5cdFx0XHRub3RFcXVhbHM6IEZpbHRlck9wZXJhbmQuTk9UX0VRLFxyXG5cdFx0XHRjb250YWluczogRmlsdGVyT3BlcmFuZC5MSUtFLFxyXG5cdFx0XHRub3RDb250YWluczogRmlsdGVyT3BlcmFuZC5OT1RfTElLRSxcclxuXHRcdFx0c3RhcnRzV2l0aDogRmlsdGVyT3BlcmFuZC5TVEFSVFMsXHJcblx0XHRcdGVuZHNXaXRoOiBGaWx0ZXJPcGVyYW5kLkVORFMsXHJcblx0XHRcdGx0OiBGaWx0ZXJPcGVyYW5kLkxULFxyXG5cdFx0XHRsdGU6IEZpbHRlck9wZXJhbmQuTFRFLFxyXG5cdFx0XHRndDogRmlsdGVyT3BlcmFuZC5HVCxcclxuXHRcdFx0Z3RlOiBGaWx0ZXJPcGVyYW5kLkdURSxcclxuXHRcdFx0aW46IEZpbHRlck9wZXJhbmQuSU4sXHJcblx0XHRcdG5vdEluOiBGaWx0ZXJPcGVyYW5kLk5PVF9JTixcclxuXHRcdFx0aXM6IEZpbHRlck9wZXJhbmQuRVEsXHJcblx0XHRcdGlzTm90OiBGaWx0ZXJPcGVyYW5kLk5PVF9FUSxcclxuXHRcdFx0YmVmb3JlOiBGaWx0ZXJPcGVyYW5kLkxULFxyXG5cdFx0XHRhZnRlcjogRmlsdGVyT3BlcmFuZC5HVCxcclxuXHRcdFx0ZGF0ZUlzOiBGaWx0ZXJPcGVyYW5kLkVRLFxyXG5cdFx0XHRkYXRlSXNOb3Q6IEZpbHRlck9wZXJhbmQuTk9UX0VRLFxyXG5cdFx0XHRkYXRlQmVmb3JlOiBGaWx0ZXJPcGVyYW5kLkxULFxyXG5cdFx0XHRkYXRlQWZ0ZXI6IEZpbHRlck9wZXJhbmQuR1RcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIG1vZGVNYXBbbWF0Y2hNb2RlXSB8fCBudWxsO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzRmlsdGVyVmFsdWUodmFsdWU6IGFueSwgb3BlcmFuZDogRmlsdGVyT3BlcmFuZCkge1xyXG5cdFx0aWYgKG9wZXJhbmQgPT09IEZpbHRlck9wZXJhbmQuSU4gfHwgb3BlcmFuZCA9PT0gRmlsdGVyT3BlcmFuZC5OT1RfSU4pIHtcclxuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG5cdFx0XHRcdHJldHVybiBbdmFsdWVdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRvblRhYmxlU29ydChldmVudDogYW55KTogdm9pZCB7XHJcblx0XHRjb25zdCBmaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZXZlbnQ/LmZpZWxkID8/IGV2ZW50Py5tdWx0aXNvcnRtZXRhPy5bMF0/LmZpZWxkO1xyXG5cdFx0Y29uc3Qgb3JkZXI6IDEgfCAtMSB8IHVuZGVmaW5lZCA9IGV2ZW50Py5vcmRlciA/PyBldmVudD8ubXVsdGlzb3J0bWV0YT8uWzBdPy5vcmRlcjtcclxuXHRcdGlmICghZmllbGQgfHwgKG9yZGVyICE9PSAxICYmIG9yZGVyICE9PSAtMSkpIHJldHVybjtcclxuXHRcdGlmICh0aGlzLmxhc3RTb3J0ZWRGaWVsZCA9PT0gZmllbGQgJiYgdGhpcy5sYXN0U29ydE9yZGVyID09PSAtMSAmJiBvcmRlciA9PT0gMSkge1xyXG5cdFx0XHR0aGlzLmNsZWFyU29ydCgpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmxhc3RTb3J0ZWRGaWVsZCA9IGZpZWxkO1xyXG5cdFx0dGhpcy5sYXN0U29ydE9yZGVyID0gb3JkZXI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNsZWFyU29ydCgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy50YWJsZVJlZikgcmV0dXJuO1xyXG5cdFx0dGhpcy50YWJsZVJlZi5zb3J0RmllbGQgPSBudWxsO1xyXG5cdFx0dGhpcy50YWJsZVJlZi5zb3J0T3JkZXIgPSAxO1xyXG5cdFx0dGhpcy50YWJsZVJlZi5tdWx0aVNvcnRNZXRhID0gW107XHJcblx0XHRpZiAodGhpcy5pc0xhenkoKSkge1xyXG5cdFx0XHRjb25zdCBtZXRhID0gdGhpcy50YWJsZVJlZi5jcmVhdGVMYXp5TG9hZE1ldGFkYXRhKCk7XHJcblx0XHRcdG1ldGEubXVsdGlTb3J0TWV0YSA9IFtdO1xyXG5cdFx0XHRtZXRhLnNvcnRGaWVsZCA9IG51bGw7XHJcblx0XHRcdHRoaXMudGFibGVSZWYub25MYXp5TG9hZC5lbWl0KG1ldGEpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sYXN0U29ydGVkRmllbGQgPSBudWxsO1xyXG5cdFx0dGhpcy5sYXN0U29ydE9yZGVyID0gMDtcclxuXHR9XHJcblxyXG5cdG5leHRSZWNvcmQoKSB7XHJcblx0XHRjb25zdCBpZHggPSB0aGlzLmRhdGEoKS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuXHRcdGNvbnN0IG5leHRSZWNvcmQgPSB0aGlzLmRhdGEoKVtpZHggKyAxXTtcclxuXHRcdGlmIChuZXh0UmVjb3JkKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gbmV4dFJlY29yZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByZXZSZWNvcmQoKSB7XHJcblx0XHRjb25zdCBpZHggPSB0aGlzLmRhdGEoKS5pbmRleE9mKHRoaXMuc2VsZWN0ZWRSb3dzKTtcclxuXHRcdGNvbnN0IHByZXZSZWNvcmQgPSB0aGlzLmRhdGEoKVtpZHggLSAxXTtcclxuXHRcdGlmIChwcmV2UmVjb3JkKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gcHJldlJlY29yZDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiPHAtdGFibGVcclxuXHQjcmVmXHJcblx0W3ZhbHVlXT1cImRhdGEoKVwiXHJcblx0W2RhdGFLZXldPVwiZGF0YUtleSgpXCJcclxuXHRbY29sdW1uc109XCJjb2x1bW5zLl9yZXN1bHRzXCJcclxuXHRbcm93c109XCJwYWdlU2l6ZSgpXCJcclxuXHRbcm93SG92ZXJdPVwidHJ1ZVwiXHJcblx0W3BhZ2luYXRvcl09XCIhdGhpcy5pc0xhenkoKSB8fCB0aGlzLnRvdGFsUmVjb3JkcygpID4gMTAgPyB0aGlzLnBhZ2luYXRvcigpIDogZmFsc2VcIlxyXG5cdFtsYXp5XT1cImlzTGF6eSgpXCJcclxuXHRbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxyXG5cdFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzKClcIlxyXG5cdFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzUsIDEwLCAyMCwgNTAsIDEwMF1cIlxyXG5cdFtyb3dTZWxlY3RhYmxlXT1cInJvd1NlbGVjdGFibGUoKVwiXHJcblx0W2ZpbHRlckRlbGF5XT1cIjBcIlxyXG5cdFtzb3J0TW9kZV09XCJzb3J0TW9kZSgpXCJcclxuXHRbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRSb3dzXCJcclxuXHQob25QYWdlKT1cIm9uUGFnZUV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcblx0KG9uU29ydCk9XCJvblRhYmxlU29ydCgkZXZlbnQpXCJcclxuXHQob25MYXp5TG9hZCk9XCJoYW5kbGVMYXp5TG9hZEV2ZW50KCRldmVudClcIlxyXG5cdChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uRXZlbnQuZW1pdChzZWxlY3RlZFJvd3MpXCJcclxuXHQob25Sb3dTZWxlY3QpPVwic2lkZWJhclZpc2libGUgPSB0cnVlXCJcclxuXHQob25Sb3dVbnNlbGVjdCk9XCJzaWRlYmFyVmlzaWJsZSA9IGZhbHNlXCJcclxuXHRbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG5cdFtzZWxlY3Rpb25Nb2RlXT1cImVmZmVjdGl2ZVNlbGVjdGlvbk1vZGUoKVwiXHJcblx0W3NlbGVjdGlvblBhZ2VPbmx5XT1cInNlbGVjdGlvblBhZ2VPbmx5KClcIlxyXG5cdFtjb2x1bW5SZXNpemVNb2RlXT1cImlzQ29sdW1uRXhwYW5kTW9kZSgpID8gJ2V4cGFuZCcgOiAnJ1wiXHJcblx0W3Jlc2l6YWJsZUNvbHVtbnNdPVwiaXNSZXNpemFibGVDb2x1bW5zKClcIlxyXG5cdFtjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlXT1cImN1cnJlbnRQYWdlUmVwb3J0VGV4dFwiXHJcblx0c3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtXCJcclxuXHRbcGFnaW5hdG9yRHJvcGRvd25BcHBlbmRUb109XCJwYWdpbmF0b3JEcm9wZG93bkFwcGVuZFRvKClcIlxyXG5cdFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGUoKVwiXHJcblx0W3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHQoKVwiXHJcblx0W3Nob3dGaXJzdExhc3RJY29uXT1cInNob3dGaXJzdExhc3RJY29uKClcIlxyXG5cdFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwicmVvcmRlcmFibGVDb2x1bW5zKClcIlxyXG5cdChvblJvd1Jlb3JkZXIpPVwicm93UmVvcmRlcigkZXZlbnQpXCJcclxuXHRbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkcygpXCI+XHJcblx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImdyb3VwaGVhZGVyXCIgbGV0LWl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiPlxyXG5cdFx0PHRyIHBSb3dHcm91cEhlYWRlciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmOGZhZmNcIj5cclxuXHRcdFx0PHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5fcmVzdWx0cy5sZW5ndGhcIj5cclxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCBtbC0yXCIgc3R5bGU9XCJjb2xvcjogIzZiNzI4MFwiPnt7IGl0ZW0uZ3JvdXBOYW1lIH19PC9zcGFuPlxyXG5cdFx0XHQ8L3RkPlxyXG5cdFx0PC90cj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHRAaWYgKGdsb2JhbEZpbHRlckZpZWxkcygpPy5sZW5ndGgpIHtcclxuXHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJncmlkIHAtZmx1aWRcIj5cclxuXHRcdFx0XHQ8YXJpbC10ZXh0XHJcblx0XHRcdFx0XHRjbGFzcz1cImxnOmNvbC0zIG1kOmNvbC00IHNtOmNvbC02IGNvbC0xMlwiXHJcblx0XHRcdFx0XHRbKG5nTW9kZWwpXT1cImdsb2JhbFNlYXJjaFZhbHVlXCJcclxuXHRcdFx0XHRcdChpbnB1dCk9XCJmaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXHJcblx0XHRcdFx0XHRpY29uPVwiU0VBUkNIXCJcclxuXHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwidHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3NlYXJjaCcpXCIgLz5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdH1cclxuXHJcblx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHRAaWYgKHJlb3JkZXJhYmxlQ29sdW1ucygpIHx8IHJhZGlvQnV0dG9uU2VsZWN0aW9uKCkpIHtcclxuXHRcdFx0XHQ8dGggc3R5bGU9XCJ3aWR0aDogM3JlbSAhaW1wb3J0YW50XCI+PC90aD5cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0QGlmIChjaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0PHRoPlxyXG5cdFx0XHRcdFx0QGlmIChoZWFkZXJDaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHRcdDxwLXRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0PC90aD5cclxuXHRcdFx0fVxyXG5cdFx0XHRAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcblx0XHRcdFx0QGlmIChjb2x1bW4udHlwZSgpID09PSAnb3BlcmF0aW9ucycpIHtcclxuXHRcdFx0XHRcdDx0aD5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPsSwxZ9sZW1sZXI8L2Rpdj5cclxuXHRcdFx0XHRcdDwvdGg+XHJcblx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRAaWYgKGlzUmVzaXphYmxlQ29sdW1ucygpKSB7XHJcblx0XHRcdFx0XHRcdDx0aCBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjb2x1bW4ud2lkdGgoKSA/IGNvbHVtbi53aWR0aCgpIDogJ2F1dG8nIH1cIiBwUmVzaXphYmxlQ29sdW1uPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJuby13cmFwLXdvcmRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gY29sdW1uLmhlYWRlcigpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0e3sgY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gKGNvbHVtbi5oZWFkZXIoKSB8IHNsaWNlOiAwIDogNTApICsgJy4uLicgOiBjb2x1bW4uaGVhZGVyKCkgfX1cclxuXHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoY29sdW1uLmlzU2hvd0hlYWRlclRvb2x0aXAoKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cImNvbG9yOiBncmVlbjsgcGFkZGluZy10b3A6IDRweDsgcGFkZGluZy1sZWZ0OiA0cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXBUZW1wbGF0ZSgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvdGg+XHJcblx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0QGlmIChpc0xhenkoKSAmJiBpc1NvcnRhYmxlKCkpIHtcclxuXHRcdFx0XHRcdFx0XHQ8dGhcclxuXHRcdFx0XHRcdFx0XHRcdFtwU29ydGFibGVDb2x1bW5dPVwiY29sdW1uLmZpZWxkKClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0W25nU3R5bGVdPVwieyB3aWR0aDogY29sdW1uLndpZHRoKCkgPyBjb2x1bW4ud2lkdGgoKSA6ICdhdXRvJyB9XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWluLXdpZHRoOiAxNzBweFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJuby13cmFwLXdvcmRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCJjb2x1bW4uaGVhZGVyKCkubGVuZ3RoID4gNTAgPyBjb2x1bW4uaGVhZGVyKCkgOiAnJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3sgY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gKGNvbHVtbi5oZWFkZXIoKSB8IHNsaWNlOiAwIDogNTApICsgJy4uLicgOiBjb2x1bW4uaGVhZGVyKCkgfX1cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoY29sdW1uLnR5cGUoKSAhPT0gJ29wZXJhdGlvbnMnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sdW1uLmZpZWxkKClcIj48L3Atc29ydEljb24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoc2hvd0NvbHVtbkZpbHRlcnMoKSAmJiBjb2x1bW4uc2hvd0ZpbHRlcigpICYmIGNvbHVtbi50eXBlKCkgIT09ICdvcGVyYXRpb25zJykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QHN3aXRjaCAoY29sdW1uLmZpbHRlclR5cGUoKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2FzZSAoQ29sdW1uRmlsdGVyVHlwZUVudW0uVEVYVCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxwLWNvbHVtbkZpbHRlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ZpZWxkXT1cImNvbHVtbi5maWVsZCgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc3BsYXk9XCJtZW51XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFttYXhDb25zdHJhaW50c109XCIxXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibXQtMlwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNhc2UgKENvbHVtbkZpbHRlclR5cGVFbnVtLk5VTUVSSUMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1lcmljXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtmaWVsZF09XCJjb2x1bW4uZmllbGQoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbc2hvd0FwcGx5QnV0dG9uXT1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W21heENvbnN0cmFpbnRzXT1cIjFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtdC0yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCIgbGV0LXZhbHVlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1udW1iZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbWF4RGlnaXRzXT1cIjZcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtuZ01vZGVsXT1cImdldEZpbHRlclZhbHVlKGNvbHVtbi5maWVsZCgpKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50LCBmaWx0ZXIsIGNvbHVtbi5maWVsZCgpKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LWZ1bGxcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1lbmQgbXQtNVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yPVwic2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtsYWJlbF09XCInVGVtaXpsZSdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrRXZlbnQpPVwiY2xlYXJGaWx0ZXIoZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbGFiZWxdPVwiJ1V5Z3VsYSdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrRXZlbnQpPVwiYXBwbHlGaWx0ZXIoZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9wLWNvbHVtbkZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2FzZSAoQ29sdW1uRmlsdGVyVHlwZUVudW0uREFURSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZiAoY29sdW1uLnNob3dUaW1lSW5EYXRlRmlsdGVycygpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ZpZWxkXT1cImNvbHVtbi5maWVsZCgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFttYXhDb25zdHJhaW50c109XCIxXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3Nob3dBcHBseUJ1dHRvbl09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm10LTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiIGxldC12YWx1ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1jYWxlbmRhclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nTW9kZWxdPVwiZ2V0RmlsdGVyVmFsdWUoY29sdW1uLmZpZWxkKCkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKCRldmVudCwgZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LTZcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3Nob3dUaW1lXT1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2FwcGVuZFRvXT1cIm51bGxcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWVuZCBtdC01XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sb3I9XCJzZWNvbmRhcnlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbGFiZWxdPVwiJ1RlbWl6bGUnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrRXZlbnQpPVwiY2xlYXJGaWx0ZXIoZmlsdGVyLCBjb2x1bW4uZmllbGQoKSlcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGFyaWwtYnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtsYWJlbF09XCInVXlndWxhJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImFwcGx5RmlsdGVyKGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvcC1jb2x1bW5GaWx0ZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbZmllbGRdPVwiY29sdW1uLmZpZWxkKClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFttYXhDb25zdHJhaW50c109XCIxXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtdC0yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1jYWxlbmRhciBbKG5nTW9kZWwpXT1cImZpbHRlci52YWx1ZVwiIGNsYXNzPVwidy02XCIgW2FwcGVuZFRvXT1cIm51bGxcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9wLWNvbHVtbkZpbHRlcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNhc2UgKENvbHVtbkZpbHRlclR5cGVFbnVtLkJPT0xFQU4pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZCgpXCIgdHlwZT1cImJvb2xlYW5cIiBkaXNwbGF5PVwibWVudVwiIGNsYXNzPVwibXQtMlwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGNhc2UgKENvbHVtbkZpbHRlclR5cGVFbnVtLkVOVU0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC1jb2x1bW5GaWx0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtmaWVsZF09XCJjb2x1bW4uZmllbGQoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5PVwibWVudVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93QXBwbHlCdXR0b25dPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W21heENvbnN0cmFpbnRzXT1cIjFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W21hdGNoTW9kZU9wdGlvbnNdPVwiW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiAnRcWfaXR0aXInLCB2YWx1ZTogJ2VxdWFscycgfSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogJ0XFn2l0IERlxJ9pbGRpcicsIHZhbHVlOiAnbm90RXF1YWxzJyB9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiAnxLDDp2VyaXInLCB2YWx1ZTogJ2NvbnRhaW5zJyB9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiAnxLDDp2VybWV6JywgdmFsdWU6ICdub3RDb250YWlucycgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm10LTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIiBsZXQtdmFsdWU+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxwLWRyb3Bkb3duXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W29wdGlvbnNdPVwiZ2V0RW51bU9wdGlvbnMoY29sdW1uLmVudW1Hcm91cE5hbWUoKSwgJ0FMTCcpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdNb2RlbF09XCJnZXRGaWx0ZXJWYWx1ZShjb2x1bW4uZmllbGQoKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvbkNoYW5nZSk9XCJvbkZpbHRlckNoYW5nZSgkZXZlbnQudmFsdWUsIGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcHBlbmRUbz1cInNlbGZcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzaG93Q2xlYXJdPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1kcm9wZG93bj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtZW5kIG10LTVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2xvcj1cInNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbGFiZWxdPVwiJ1RlbWl6bGUnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImNsZWFyRmlsdGVyKGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2xvcj1cInByaW1hcnlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2xhYmVsXT1cIidVeWd1bGEnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImFwcGx5RmlsdGVyKGZpbHRlciwgY29sdW1uLmZpZWxkKCkpXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvcC1jb2x1bW5GaWx0ZXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QGlmIChjb2x1bW4uaXNTaG93SGVhZGVyVG9vbHRpcCgpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cImNvbG9yOiBncmVlblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGUgbXQtMVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcFRlbXBsYXRlKClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvdGg+XHJcblx0XHRcdFx0XHRcdH0gQGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdDx0aCBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjb2x1bW4ud2lkdGgoKSA/IGNvbHVtbi53aWR0aCgpIDogJ2F1dG8nIH1cIiBzdHlsZT1cIm1pbi13aWR0aDogMTcwcHhcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibm8td3JhcC13b3JkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiY29sdW1uLmhlYWRlcigpLmxlbmd0aCA+IDUwID8gY29sdW1uLmhlYWRlcigpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7IGNvbHVtbi5oZWFkZXIoKS5sZW5ndGggPiA1MCA/IChjb2x1bW4uaGVhZGVyKCkgfCBzbGljZTogMCA6IDUwKSArICcuLi4nIDogY29sdW1uLmhlYWRlcigpIH19XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYgKGNvbHVtbi5pc1Nob3dIZWFkZXJUb29sdGlwKCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwiY29sb3I6IGdyZWVuXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSBtdC0xXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cImNvbHVtbi50b29sdGlwVGVtcGxhdGUoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC90aD5cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0PC90cj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiIGxldC1pbmRleD1cInJvd0luZGV4XCI+XHJcblx0XHRAaWYgKGVmZmVjdGl2ZVNlbGVjdGlvbk1vZGUoKSkge1xyXG5cdFx0XHQ8dHJcclxuXHRcdFx0XHRbcFNlbGVjdGFibGVSb3ddPVwiaXRlbVwiXHJcblx0XHRcdFx0W25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0/LnJvd0NvbG9yID8gaXRlbT8ucm93Q29sb3IgOiBudWxsIH1cIlxyXG5cdFx0XHRcdFtwUmVvcmRlcmFibGVSb3ddPVwiaW5kZXhcIj5cclxuXHRcdFx0XHRAaWYgKHJlb3JkZXJhYmxlQ29sdW1ucygpKSB7XHJcblx0XHRcdFx0XHQ8dGQ+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwicGkgcGktYmFyc1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT48L3NwYW4+XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0QGlmIChjaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHQ8dGQgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG5cdFx0XHRcdFx0XHQ8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0QGlmIChyYWRpb0J1dHRvblNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHQ8dGQ+XHJcblx0XHRcdFx0XHRcdDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcblx0XHRcdFx0XHQ8dGQgW25nU3R5bGVdPVwieyAndGV4dC1hbGlnbic6IGNvbHVtbi50eXBlKCkgPT09ICdvcGVyYXRpb25zJyA/ICdjZW50ZXInIDogY29sdW1uLnRBbGlnbigpIHx8IHRBbGlnbigpIH1cIj5cclxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cIltpdGVtXVwiIFtuZ0ZvclRlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC90cj5cclxuXHRcdH0gQGVsc2Uge1xyXG5cdFx0XHQ8dHIgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGl0ZW0/LnJvd0NvbG9yID8gaXRlbT8ucm93Q29sb3IgOiBudWxsIH1cIiBbcFJlb3JkZXJhYmxlUm93XT1cImluZGV4XCI+XHJcblx0XHRcdFx0QGlmIChyZW9yZGVyYWJsZUNvbHVtbnMoKSkge1xyXG5cdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInBpIHBpLWJhcnNcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+PC9zcGFuPlxyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0QGlmIChjaGVja2JveFNlbGVjdGlvbigpKSB7XHJcblx0XHRcdFx0XHQ8dGQ+XHJcblx0XHRcdFx0XHRcdDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVDaGVja2JveD5cclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRAaWYgKHJhZGlvQnV0dG9uU2VsZWN0aW9uKCkpIHtcclxuXHRcdFx0XHRcdDx0ZD5cclxuXHRcdFx0XHRcdFx0PHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuXHRcdFx0XHRcdDx0ZCBbbmdTdHlsZV09XCJ7ICd0ZXh0LWFsaWduJzogY29sdW1uLnR5cGUoKSA9PT0gJ29wZXJhdGlvbnMnID8gJ2NlbnRlcicgOiBjb2x1bW4udEFsaWduKCkgfHwgdEFsaWduKCkgfVwiPlxyXG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgbmdGb3IgW25nRm9yT2ZdPVwiW2l0ZW1dXCIgW25nRm9yVGVtcGxhdGVdPVwiY29sdW1uLnRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L3RyPlxyXG5cdFx0fVxyXG5cdDwvbmctdGVtcGxhdGU+XHJcblxyXG5cdEBpZiAoc2hvd0Zvb3RlcigpKSB7XHJcblx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic3VtbWFyeVwiPlxyXG5cdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbZm9vdGVyXVwiPjwvbmctY29udGVudD5cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0fVxyXG5cclxuXHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMuX3Jlc3VsdHMubGVuZ3RoXCI+e3sgbm9EYXRhRm91bmRMYWJlbCgpIH19PC90ZD5cclxuXHRcdDwvdHI+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuPC9wLXRhYmxlPlxyXG5cclxuPGFyaWwtZXhwb3J0LW92ZXJsYXktcGFuZWwgW2V4cG9ydENvbmZpZ109XCJleHBvcnRDb25maWcoKSFcIiBbY29sdW1uc109XCJjb2x1bW5zXCIgLz5cclxuXHJcbjxwLXRvYXN0IGtleT1cImV4cG9ydC10b2FzdFwiPlxyXG5cdDxuZy10ZW1wbGF0ZSBsZXQtbWVzc2FnZSBwVGVtcGxhdGU9XCJtZXNzYWdlXCI+XHJcblx0XHQ8c3BhbiBjbGFzcz1cInAtdG9hc3QtbWVzc2FnZS1pY29uXCI+XHJcblx0XHRcdDxDaGVja0ljb24gLz5cclxuXHRcdDwvc3Bhbj5cclxuXHRcdDxkaXYgY2xhc3M9XCJwLXRvYXN0LW1lc3NhZ2UtdGV4dFwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwicC10b2FzdC1zdW1tYXJ5XCI+e3sgbWVzc2FnZS5zdW1tYXJ5IH19PC9kaXY+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJwLXRvYXN0LWRldGFpbFwiIFtpbm5lckhUTUxdPVwibWVzc2FnZS5kZXRhaWwgfCBzYWZlOiAnaHRtbCdcIj48L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcbjwvcC10b2FzdD5cclxuXHJcbkBpZiAob3BlblNlbGVjdGlvbk9uU2lkZWJhcigpICYmIHNlbGVjdGlvbk1vZGUoKSA9PT0gJ3NpbmdsZScpIHtcclxuXHQ8cC1zaWRlYmFyXHJcblx0XHRbKHZpc2libGUpXT1cInNpZGViYXJWaXNpYmxlXCJcclxuXHRcdHBvc2l0aW9uPVwicmlnaHRcIlxyXG5cdFx0W3N0eWxlXT1cInsgJ21heC13aWR0aCc6ICc4MDBweCcsIHdpZHRoOiAnMTAwJScgfVwiXHJcblx0XHQob25IaWRlKT1cInNlbGVjdGVkUm93cyA9IHVuZGVmaW5lZFwiXHJcblx0XHRbbW9kYWxdPVwiZmFsc2VcIj5cclxuXHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuXHRcdFx0PHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQteGxcIj57eyB0cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUuc2lkZWJhckRldGFpbEhlYWRlcicpIH19PC9zcGFuPlxyXG5cdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0XHRAaWYgKHNpZGViYXJWaXNpYmxlKSB7XHJcblx0XHRcdDxwLXRhYmxlIFt2YWx1ZV09XCJzZWxlY3RlZFJvd3MgfCBrZXl2YWx1ZVwiIFtwYWdpbmF0b3JdPVwiZmFsc2VcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc21cIj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcblx0XHRcdFx0XHQ8dHI+XHJcblx0XHRcdFx0XHRcdDx0aD57eyB0cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUuZmllbGQnKSB9fTwvdGg+XHJcblx0XHRcdFx0XHRcdDx0aD57eyB0cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndGFibGUudmFsdWUnKSB9fTwvdGg+XHJcblx0XHRcdFx0XHQ8L3RyPlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblxyXG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0gbGV0LWluZGV4PVwicm93SW5kZXhcIj5cclxuXHRcdFx0XHRcdDx0cj5cclxuXHRcdFx0XHRcdFx0QGlmIChjb2x1bW5zIHwgZ2V0Q29sdW1uQnlGaWVsZDogaXRlbS5rZXk7IGFzIGNvbHVtbikge1xyXG5cdFx0XHRcdFx0XHRcdDx0ZCBbd2lkdGhdPVwiJzEyMHB4J1wiPnt7IGNvbHVtbi5oZWFkZXIoKSB9fTwvdGQ+XHJcblx0XHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdFx0QGlmIChjb2x1bW4udHlwZSgpID09PSAnanNvbicgJiYgaXRlbS52YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IFtuZ1N0eWxlXT1cInsgZGlzcGxheTogJ2dyaWQnIH1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cHJlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm92ZXJmbG93LXktYXV0byBtYXgtaC0zMHJlbSBib3JkZXItMzAwIGJvcmRlci0xIGJvcmRlci1yb3VuZCBteS0yIHAtM1wiPjxjb2RlPnt7aXRlbS52YWx1ZSB8IHBhcnNlIHwganNvbn19PC9jb2RlPjwvcHJlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdH0gQGVsc2UgaWYgKGNvbHVtbi50eXBlKCkgPT09ICdsb25nLXRleHQnICYmIGl0ZW0udmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0PGFyaWwtdmFsdWUgdHlwZT1cInRleHRcIiBbbW9kZWxdPVwiaXRlbS52YWx1ZVwiIFtpc1RleHRDbGFtcF09XCJmYWxzZVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIFtuZ0Zvck9mXT1cIltzZWxlY3RlZFJvd3NdXCIgW25nRm9yVGVtcGxhdGVdPVwiY29sdW1uLnRlbXBsYXRlXCIgLz5cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQ8L3RyPlxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdDwvcC10YWJsZT5cclxuXHRcdH1cclxuXHJcblx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG5cdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdGljb249XCJBUlJPV19MRUZUXCJcclxuXHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRbbGFiZWxdPVwidHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3RhYmxlLnByZXZSZWNvcmQnKVwiXHJcblx0XHRcdFx0XHQoY2xpY2tFdmVudCk9XCJwcmV2UmVjb3JkKClcIiAvPlxyXG5cclxuXHRcdFx0XHQ8YXJpbC1idXR0b25cclxuXHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHRpY29uPVwiQVJST1dfUklHSFRcIlxyXG5cdFx0XHRcdFx0aWNvblBvcz1cInJpZ2h0XCJcclxuXHRcdFx0XHRcdGNvbG9yPVwicHJpbWFyeVwiXHJcblx0XHRcdFx0XHRbbGFiZWxdPVwidHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3RhYmxlLm5leHRSZWNvcmQnKVwiXHJcblx0XHRcdFx0XHQoY2xpY2tFdmVudCk9XCJuZXh0UmVjb3JkKClcIiAvPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0PC9wLXNpZGViYXI+XHJcbn1cclxuIl19