@sumaris-net/ngx-components 18.24.24 → 21.0.0-rc10

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 (801) hide show
  1. package/README.md +2 -0
  2. package/doc/build.md +2 -2
  3. package/doc/changelog.md +6 -5
  4. package/fesm2022/sumaris-net-ngx-components-testing.mjs +496 -0
  5. package/fesm2022/sumaris-net-ngx-components-testing.mjs.map +1 -0
  6. package/fesm2022/sumaris-net.ngx-components.mjs +2782 -2426
  7. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  8. package/package.json +20 -15
  9. package/src/assets/environments/environment-test.json +2 -2
  10. package/src/assets/i18n/fr.json +6 -5
  11. package/src/assets/manifest.json +1 -1
  12. package/src/theme/_icons.scss +8 -12
  13. package/src/theme/_ionic.globals.scss +15 -1
  14. package/src/theme/_material.globals.scss +4 -1
  15. package/src/theme/_material.scss +16 -13
  16. package/src/theme/_mixins.scss +7 -1
  17. package/src/theme/_ngx-components.forms.scss +87 -84
  18. package/src/theme/_ngx-components.globals.scss +2 -0
  19. package/src/theme/_ngx-components.scss +20 -5
  20. package/src/theme/_ngx-components.table.scss +37 -26
  21. package/src/theme/_ngx-components.tabs.scss +16 -14
  22. package/src/theme/_responsive.scss +2 -0
  23. package/src/theme/_roboto.scss +3 -0
  24. package/src/theme/_theme.scss +11 -14
  25. package/src/theme/_theme.variables.scss +11 -2
  26. package/src/theme/ionic/ionic.functions.color.scss +13 -5
  27. package/src/theme/ionic/ionic.globals.scss +4 -4
  28. package/src/theme/ionic/ionic.theme.default.scss +2 -0
  29. package/types/sumaris-net-ngx-components-testing.d.ts +286 -0
  30. package/types/sumaris-net.ngx-components.d.ts +14216 -0
  31. package/esm2022/public_api.mjs +0 -403
  32. package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
  33. package/esm2022/src/app/admin/admin.module.mjs +0 -32
  34. package/esm2022/src/app/admin/users/person.filter.mjs +0 -157
  35. package/esm2022/src/app/admin/users/person.service.mjs +0 -226
  36. package/esm2022/src/app/admin/users/person.validator.mjs +0 -78
  37. package/esm2022/src/app/admin/users/users-select.modal.mjs +0 -167
  38. package/esm2022/src/app/admin/users/users.mjs +0 -502
  39. package/esm2022/src/app/admin/users/users.module.mjs +0 -59
  40. package/esm2022/src/app/admin/users/users.utils.mjs +0 -29
  41. package/esm2022/src/app/core/about/about.modal.mjs +0 -119
  42. package/esm2022/src/app/core/about/about.module.mjs +0 -22
  43. package/esm2022/src/app/core/account/account.module.mjs +0 -75
  44. package/esm2022/src/app/core/account/account.page.mjs +0 -426
  45. package/esm2022/src/app/core/account/new-token.form.mjs +0 -109
  46. package/esm2022/src/app/core/account/new-token.modal.mjs +0 -66
  47. package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -63
  48. package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
  49. package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -150
  50. package/esm2022/src/app/core/account/token.table.mjs +0 -160
  51. package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
  52. package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
  53. package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
  54. package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -89
  55. package/esm2022/src/app/core/core.module.mjs +0 -157
  56. package/esm2022/src/app/core/core.testing.module.mjs +0 -128
  57. package/esm2022/src/app/core/form/array/form-array.mjs +0 -328
  58. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
  59. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -97
  60. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -111
  61. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
  62. package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -268
  63. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
  64. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -753
  65. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  66. package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -33
  67. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -190
  68. package/esm2022/src/app/core/form/form-container.class.mjs +0 -371
  69. package/esm2022/src/app/core/form/form.class.mjs +0 -342
  70. package/esm2022/src/app/core/form/form.module.mjs +0 -77
  71. package/esm2022/src/app/core/form/form.utils.mjs +0 -238
  72. package/esm2022/src/app/core/form/list/list.form.mjs +0 -243
  73. package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
  74. package/esm2022/src/app/core/form/properties/properties-file.service.mjs +0 -133
  75. package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -397
  76. package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -85
  77. package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -267
  78. package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -304
  79. package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -70
  80. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -103
  81. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
  82. package/esm2022/src/app/core/form/text/testing/text-form.testing.mjs +0 -42
  83. package/esm2022/src/app/core/form/text/testing/text-form.testing.module.mjs +0 -25
  84. package/esm2022/src/app/core/form/text/text-form.component.mjs +0 -205
  85. package/esm2022/src/app/core/form/text/text-form.module.mjs +0 -31
  86. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
  87. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -22
  88. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -164
  89. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -32
  90. package/esm2022/src/app/core/form/username/username.form.mjs +0 -55
  91. package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
  92. package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
  93. package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -781
  94. package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
  95. package/esm2022/src/app/core/home/home.mjs +0 -472
  96. package/esm2022/src/app/core/home/home.module.mjs +0 -54
  97. package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
  98. package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
  99. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -394
  100. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
  101. package/esm2022/src/app/core/menu/menu.component.mjs +0 -273
  102. package/esm2022/src/app/core/menu/menu.model.mjs +0 -327
  103. package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
  104. package/esm2022/src/app/core/menu/menu.service.mjs +0 -666
  105. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -113
  106. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -51
  107. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -165
  108. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
  109. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
  110. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
  111. package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -350
  112. package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -36
  113. package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
  114. package/esm2022/src/app/core/register/register.form.mjs +0 -197
  115. package/esm2022/src/app/core/register/register.modal.mjs +0 -55
  116. package/esm2022/src/app/core/register/register.module.mjs +0 -23
  117. package/esm2022/src/app/core/services/account.service.mjs +0 -1403
  118. package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
  119. package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -499
  120. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -224
  121. package/esm2022/src/app/core/services/base58.mjs +0 -83
  122. package/esm2022/src/app/core/services/config/core.config.mjs +0 -293
  123. package/esm2022/src/app/core/services/config.service.mjs +0 -384
  124. package/esm2022/src/app/core/services/crypto.service.mjs +0 -110
  125. package/esm2022/src/app/core/services/errors.mjs +0 -54
  126. package/esm2022/src/app/core/services/local-settings.service.mjs +0 -540
  127. package/esm2022/src/app/core/services/model/account.model.mjs +0 -192
  128. package/esm2022/src/app/core/services/model/config.model.mjs +0 -111
  129. package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
  130. package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
  131. package/esm2022/src/app/core/services/model/entity.model.mjs +0 -347
  132. package/esm2022/src/app/core/services/model/filter.model.mjs +0 -169
  133. package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
  134. package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
  135. package/esm2022/src/app/core/services/model/node-feature.model.mjs +0 -31
  136. package/esm2022/src/app/core/services/model/peer.model.mjs +0 -114
  137. package/esm2022/src/app/core/services/model/person.model.mjs +0 -118
  138. package/esm2022/src/app/core/services/model/referential.model.mjs +0 -207
  139. package/esm2022/src/app/core/services/model/settings.model.mjs +0 -6
  140. package/esm2022/src/app/core/services/model/token.model.mjs +0 -57
  141. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -234
  142. package/esm2022/src/app/core/services/network.service.mjs +0 -759
  143. package/esm2022/src/app/core/services/network.types.mjs +0 -2
  144. package/esm2022/src/app/core/services/network.utils.mjs +0 -35
  145. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
  146. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  147. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  148. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -58
  149. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -36
  150. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  151. package/esm2022/src/app/core/services/platform.service.mjs +0 -788
  152. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
  153. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -450
  154. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
  155. package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
  156. package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -46
  157. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
  158. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -57
  159. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  160. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
  161. package/esm2022/src/app/core/settings/settings.module.mjs +0 -23
  162. package/esm2022/src/app/core/settings/settings.page.mjs +0 -406
  163. package/esm2022/src/app/core/table/async-table.class.mjs +0 -1888
  164. package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -137
  165. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -120
  166. package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
  167. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -415
  168. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -407
  169. package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
  170. package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
  171. package/esm2022/src/app/core/table/table.class.mjs +0 -1918
  172. package/esm2022/src/app/core/table/table.model.mjs +0 -21
  173. package/esm2022/src/app/core/table/table.module.mjs +0 -51
  174. package/esm2022/src/app/core/table/table.pipes.mjs +0 -76
  175. package/esm2022/src/app/core/table/table.utils.mjs +0 -34
  176. package/esm2022/src/app/core/table/testing/nested-table.testing.mjs +0 -326
  177. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
  178. package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -342
  179. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -47
  180. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
  181. package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -322
  182. package/esm2022/src/app/shared/alerts.mjs +0 -243
  183. package/esm2022/src/app/shared/audio/audio.mjs +0 -255
  184. package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
  185. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
  186. package/esm2022/src/app/shared/base64.utils.mjs +0 -59
  187. package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
  188. package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -10
  189. package/esm2022/src/app/shared/constants.mjs +0 -20
  190. package/esm2022/src/app/shared/dates.mjs +0 -216
  191. package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
  192. package/esm2022/src/app/shared/debug/debug.component.mjs +0 -44
  193. package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
  194. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
  195. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +0 -75
  196. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -30
  197. package/esm2022/src/app/shared/directives/autotooltip.directive.mjs +0 -35
  198. package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +0 -55
  199. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +0 -206
  200. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +0 -204
  201. package/esm2022/src/app/shared/directives/directives.module.mjs +0 -53
  202. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
  203. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
  204. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
  205. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -96
  206. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  207. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +0 -43
  208. package/esm2022/src/app/shared/events.mjs +0 -64
  209. package/esm2022/src/app/shared/file/csv.utils.mjs +0 -97
  210. package/esm2022/src/app/shared/file/file.service.mjs +0 -118
  211. package/esm2022/src/app/shared/file/file.utils.mjs +0 -117
  212. package/esm2022/src/app/shared/file/images.utils.mjs +0 -218
  213. package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
  214. package/esm2022/src/app/shared/file/uri.utils.mjs +0 -29
  215. package/esm2022/src/app/shared/file/url.utils.mjs +0 -213
  216. package/esm2022/src/app/shared/focusable.mjs +0 -6
  217. package/esm2022/src/app/shared/form/field.component.mjs +0 -388
  218. package/esm2022/src/app/shared/form/field.model.mjs +0 -100
  219. package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
  220. package/esm2022/src/app/shared/forms.mjs +0 -593
  221. package/esm2022/src/app/shared/functions.mjs +0 -900
  222. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -94
  223. package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
  224. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
  225. package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -85
  226. package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -214
  227. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -68
  228. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  229. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -147
  230. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
  231. package/esm2022/src/app/shared/html.utils.mjs +0 -35
  232. package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
  233. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -452
  234. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
  235. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
  236. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -92
  237. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
  238. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
  239. package/esm2022/src/app/shared/image/image.model.mjs +0 -2
  240. package/esm2022/src/app/shared/image/image.module.mjs +0 -24
  241. package/esm2022/src/app/shared/image/image.service.mjs +0 -118
  242. package/esm2022/src/app/shared/inputs.mjs +0 -281
  243. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  244. package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
  245. package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
  246. package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
  247. package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
  248. package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
  249. package/esm2022/src/app/shared/markdown/markdown.component.mjs +0 -321
  250. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +0 -34
  251. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +0 -99
  252. package/esm2022/src/app/shared/markdown/markdown.module.mjs +0 -87
  253. package/esm2022/src/app/shared/markdown/markdown.service.mjs +0 -204
  254. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +0 -87
  255. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +0 -55
  256. package/esm2022/src/app/shared/markdown/testing/markdown.testing.module.mjs +0 -30
  257. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
  258. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1373
  259. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -81
  260. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
  261. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -244
  262. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
  263. package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
  264. package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
  265. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -70
  266. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -374
  267. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -83
  268. package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -74
  269. package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -843
  270. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -151
  271. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -79
  272. package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -474
  273. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
  274. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -852
  275. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -140
  276. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
  277. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
  278. package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -61
  279. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -16
  280. package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -283
  281. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -85
  282. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -319
  283. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +0 -471
  284. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -231
  285. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -68
  286. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -138
  287. package/esm2022/src/app/shared/material/material.animations.mjs +0 -200
  288. package/esm2022/src/app/shared/material/material.config.mjs +0 -3
  289. package/esm2022/src/app/shared/material/material.module.mjs +0 -224
  290. package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -234
  291. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
  292. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
  293. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -379
  294. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  295. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
  296. package/esm2022/src/app/shared/material/test/test-component.mjs +0 -264
  297. package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
  298. package/esm2022/src/app/shared/modules.mjs +0 -12
  299. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -306
  300. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
  301. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
  302. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
  303. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
  304. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
  305. package/esm2022/src/app/shared/observables.mjs +0 -104
  306. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -251
  307. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -25
  308. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
  309. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -50
  310. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
  311. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
  312. package/esm2022/src/app/shared/pipes/date-from.pipe.mjs +0 -29
  313. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +0 -18
  314. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +0 -23
  315. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -34
  316. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
  317. package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -258
  318. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -50
  319. package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -102
  320. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
  321. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -65
  322. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
  323. package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -77
  324. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
  325. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -17
  326. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +0 -63
  327. package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -316
  328. package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -148
  329. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -177
  330. package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -196
  331. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
  332. package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
  333. package/esm2022/src/app/shared/pipes/url.pipes.mjs +0 -35
  334. package/esm2022/src/app/shared/platforms.mjs +0 -81
  335. package/esm2022/src/app/shared/print/print.service.mjs +0 -305
  336. package/esm2022/src/app/shared/regexps.mjs +0 -103
  337. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +0 -193
  338. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +0 -19
  339. package/esm2022/src/app/shared/rx-state/rx-state.types.mjs +0 -2
  340. package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -44
  341. package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
  342. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -362
  343. package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
  344. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -144
  345. package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -118
  346. package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
  347. package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
  348. package/esm2022/src/app/shared/services.mjs +0 -85
  349. package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
  350. package/esm2022/src/app/shared/shared.module.mjs +0 -229
  351. package/esm2022/src/app/shared/shared.testing.module.mjs +0 -108
  352. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -281
  353. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
  354. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
  355. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
  356. package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
  357. package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
  358. package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
  359. package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
  360. package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
  361. package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -54
  362. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -31
  363. package/esm2022/src/app/shared/toast/toasts.mjs +0 -134
  364. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
  365. package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -279
  366. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
  367. package/esm2022/src/app/shared/types.mjs +0 -2
  368. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
  369. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
  370. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -114
  371. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -216
  372. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
  373. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -122
  374. package/esm2022/src/app/shared/validator/validators.mjs +0 -658
  375. package/esm2022/src/app/shared/version/versions.mjs +0 -80
  376. package/esm2022/src/app/social/config/social.config.mjs +0 -9
  377. package/esm2022/src/app/social/feed/feed.component.mjs +0 -317
  378. package/esm2022/src/app/social/feed/feed.directive.mjs +0 -151
  379. package/esm2022/src/app/social/feed/feed.model.mjs +0 -60
  380. package/esm2022/src/app/social/feed/feed.module.mjs +0 -24
  381. package/esm2022/src/app/social/feed/feed.page.mjs +0 -67
  382. package/esm2022/src/app/social/feed/feed.service.mjs +0 -222
  383. package/esm2022/src/app/social/feed/testing/feed.testing.mjs +0 -66
  384. package/esm2022/src/app/social/feed/testing/feed.testing.module.mjs +0 -23
  385. package/esm2022/src/app/social/job/job.module.mjs +0 -23
  386. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -38
  387. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -241
  388. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -50
  389. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
  390. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
  391. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
  392. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
  393. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
  394. package/esm2022/src/app/social/message/message.form.mjs +0 -149
  395. package/esm2022/src/app/social/message/message.modal.mjs +0 -116
  396. package/esm2022/src/app/social/message/message.model.mjs +0 -86
  397. package/esm2022/src/app/social/message/message.module.mjs +0 -25
  398. package/esm2022/src/app/social/message/message.service.mjs +0 -198
  399. package/esm2022/src/app/social/social.errors.mjs +0 -11
  400. package/esm2022/src/app/social/social.module.mjs +0 -22
  401. package/esm2022/src/app/social/social.testing.module.mjs +0 -72
  402. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -191
  403. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -280
  404. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +0 -84
  405. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -273
  406. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
  407. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
  408. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
  409. package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
  410. package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -24
  411. package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -512
  412. package/esm2022/src/environments/environment.class.mjs +0 -69
  413. package/esm2022/src/environments/environment.loader.mjs +0 -77
  414. package/esm2022/src/environments/environment.mjs +0 -133
  415. package/esm2022/sumaris-net.ngx-components.mjs +0 -5
  416. package/index.d.ts +0 -5
  417. package/public_api.d.ts +0 -364
  418. package/src/app/admin/admin-routing.module.d.ts +0 -9
  419. package/src/app/admin/admin.module.d.ts +0 -10
  420. package/src/app/admin/users/person.filter.d.ts +0 -37
  421. package/src/app/admin/users/person.service.d.ts +0 -61
  422. package/src/app/admin/users/person.validator.d.ts +0 -23
  423. package/src/app/admin/users/users-select.modal.d.ts +0 -73
  424. package/src/app/admin/users/users.d.ts +0 -89
  425. package/src/app/admin/users/users.module.d.ts +0 -15
  426. package/src/app/admin/users/users.utils.d.ts +0 -6
  427. package/src/app/core/about/about.modal.d.ts +0 -44
  428. package/src/app/core/about/about.module.d.ts +0 -11
  429. package/src/app/core/account/account.module.d.ts +0 -18
  430. package/src/app/core/account/account.page.d.ts +0 -93
  431. package/src/app/core/account/new-token.form.d.ts +0 -30
  432. package/src/app/core/account/new-token.modal.d.ts +0 -29
  433. package/src/app/core/account/password/change-password.form.d.ts +0 -19
  434. package/src/app/core/account/password/change-password.module.d.ts +0 -11
  435. package/src/app/core/account/password/change-password.page.d.ts +0 -36
  436. package/src/app/core/account/token.table.d.ts +0 -28
  437. package/src/app/core/auth/auth.form.d.ts +0 -38
  438. package/src/app/core/auth/auth.modal.d.ts +0 -24
  439. package/src/app/core/auth/auth.module.d.ts +0 -13
  440. package/src/app/core/auth/reset-password.modal.d.ts +0 -29
  441. package/src/app/core/core.module.d.ts +0 -28
  442. package/src/app/core/core.testing.module.d.ts +0 -16
  443. package/src/app/core/form/array/form-array.d.ts +0 -147
  444. package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
  445. package/src/app/core/form/array/testing/form-array.test.d.ts +0 -27
  446. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -38
  447. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  448. package/src/app/core/form/entity/editor.class.d.ts +0 -86
  449. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
  450. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -211
  451. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  452. package/src/app/core/form/entity/entity.module.d.ts +0 -11
  453. package/src/app/core/form/entity/tab-editor.class.d.ts +0 -66
  454. package/src/app/core/form/form-container.class.d.ts +0 -132
  455. package/src/app/core/form/form.class.d.ts +0 -148
  456. package/src/app/core/form/form.module.d.ts +0 -15
  457. package/src/app/core/form/form.utils.d.ts +0 -301
  458. package/src/app/core/form/list/list.form.d.ts +0 -83
  459. package/src/app/core/form/list/list.module.d.ts +0 -9
  460. package/src/app/core/form/properties/properties-file.service.d.ts +0 -26
  461. package/src/app/core/form/properties/properties.form.d.ts +0 -109
  462. package/src/app/core/form/properties/properties.module.d.ts +0 -18
  463. package/src/app/core/form/properties/properties.table.d.ts +0 -73
  464. package/src/app/core/form/properties/properties.utils.d.ts +0 -59
  465. package/src/app/core/form/properties/property.validator.d.ts +0 -27
  466. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -22
  467. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  468. package/src/app/core/form/text/testing/text-form.testing.d.ts +0 -19
  469. package/src/app/core/form/text/testing/text-form.testing.module.d.ts +0 -14
  470. package/src/app/core/form/text/text-form.component.d.ts +0 -66
  471. package/src/app/core/form/text/text-form.module.d.ts +0 -9
  472. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
  473. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  474. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -81
  475. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -10
  476. package/src/app/core/form/username/username.form.d.ts +0 -19
  477. package/src/app/core/form/username/username.module.d.ts +0 -9
  478. package/src/app/core/graphql/graphql.module.d.ts +0 -7
  479. package/src/app/core/graphql/graphql.service.d.ts +0 -138
  480. package/src/app/core/graphql/graphql.utils.d.ts +0 -47
  481. package/src/app/core/home/home.d.ts +0 -135
  482. package/src/app/core/home/home.module.d.ts +0 -16
  483. package/src/app/core/icon/icon.component.d.ts +0 -13
  484. package/src/app/core/icon/icon.module.d.ts +0 -9
  485. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -63
  486. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  487. package/src/app/core/menu/menu.component.d.ts +0 -69
  488. package/src/app/core/menu/menu.model.d.ts +0 -163
  489. package/src/app/core/menu/menu.module.d.ts +0 -12
  490. package/src/app/core/menu/menu.service.d.ts +0 -93
  491. package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
  492. package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
  493. package/src/app/core/menu/testing/menu.testing.d.ts +0 -53
  494. package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
  495. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  496. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  497. package/src/app/core/peer/select-peer.modal.d.ts +0 -108
  498. package/src/app/core/peer/select-peer.module.d.ts +0 -12
  499. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  500. package/src/app/core/register/register.form.d.ts +0 -49
  501. package/src/app/core/register/register.modal.d.ts +0 -14
  502. package/src/app/core/register/register.module.d.ts +0 -12
  503. package/src/app/core/services/account.service.d.ts +0 -236
  504. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  505. package/src/app/core/services/base-entity-service.class.d.ts +0 -134
  506. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  507. package/src/app/core/services/base58.d.ts +0 -7
  508. package/src/app/core/services/config/core.config.d.ts +0 -52
  509. package/src/app/core/services/config.service.d.ts +0 -63
  510. package/src/app/core/services/crypto.service.d.ts +0 -45
  511. package/src/app/core/services/errors.d.ts +0 -65
  512. package/src/app/core/services/local-settings.service.d.ts +0 -130
  513. package/src/app/core/services/model/account.model.d.ts +0 -66
  514. package/src/app/core/services/model/config.model.d.ts +0 -37
  515. package/src/app/core/services/model/department.model.d.ts +0 -11
  516. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  517. package/src/app/core/services/model/entity.model.d.ts +0 -133
  518. package/src/app/core/services/model/filter.model.d.ts +0 -37
  519. package/src/app/core/services/model/history.model.d.ts +0 -20
  520. package/src/app/core/services/model/model.enum.d.ts +0 -7
  521. package/src/app/core/services/model/node-feature.model.d.ts +0 -14
  522. package/src/app/core/services/model/peer.model.d.ts +0 -35
  523. package/src/app/core/services/model/person.model.d.ts +0 -39
  524. package/src/app/core/services/model/referential.model.d.ts +0 -85
  525. package/src/app/core/services/model/settings.model.d.ts +0 -29
  526. package/src/app/core/services/model/token.model.d.ts +0 -22
  527. package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -62
  528. package/src/app/core/services/network.service.d.ts +0 -184
  529. package/src/app/core/services/network.types.d.ts +0 -4
  530. package/src/app/core/services/network.utils.d.ts +0 -39
  531. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  532. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  533. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
  534. package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
  535. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -23
  536. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  537. package/src/app/core/services/platform.service.d.ts +0 -127
  538. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  539. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  540. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  541. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  542. package/src/app/core/services/validator/account.validator.d.ts +0 -24
  543. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  544. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -18
  545. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  546. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  547. package/src/app/core/settings/settings.module.d.ts +0 -12
  548. package/src/app/core/settings/settings.page.d.ts +0 -89
  549. package/src/app/core/table/async-table.class.d.ts +0 -445
  550. package/src/app/core/table/column/actions-column.component.d.ts +0 -65
  551. package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -47
  552. package/src/app/core/table/column/row-field.component.d.ts +0 -41
  553. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -103
  554. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -102
  555. package/src/app/core/table/memory-table.class.d.ts +0 -25
  556. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  557. package/src/app/core/table/table.class.d.ts +0 -427
  558. package/src/app/core/table/table.model.d.ts +0 -31
  559. package/src/app/core/table/table.module.d.ts +0 -14
  560. package/src/app/core/table/table.pipes.d.ts +0 -30
  561. package/src/app/core/table/table.utils.d.ts +0 -13
  562. package/src/app/core/table/testing/nested-table.testing.d.ts +0 -54
  563. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  564. package/src/app/core/table/testing/table.testing.d.ts +0 -55
  565. package/src/app/core/table/testing/table.testing.module.d.ts +0 -17
  566. package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
  567. package/src/app/core/table/testing/table2.testing.d.ts +0 -53
  568. package/src/app/shared/alerts.d.ts +0 -55
  569. package/src/app/shared/audio/audio.d.ts +0 -45
  570. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  571. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  572. package/src/app/shared/base64.utils.d.ts +0 -7
  573. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  574. package/src/app/shared/capacitor/plugins.d.ts +0 -8
  575. package/src/app/shared/constants.d.ts +0 -16
  576. package/src/app/shared/dates.d.ts +0 -85
  577. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  578. package/src/app/shared/debug/debug.component.d.ts +0 -14
  579. package/src/app/shared/debug/debug.module.d.ts +0 -12
  580. package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
  581. package/src/app/shared/directives/autoresize.directive.d.ts +0 -20
  582. package/src/app/shared/directives/autotitle.directive.d.ts +0 -11
  583. package/src/app/shared/directives/autotooltip.directive.d.ts +0 -14
  584. package/src/app/shared/directives/cell-selection/cell-identifier.directive.d.ts +0 -17
  585. package/src/app/shared/directives/cell-selection/cell-selection.directive.d.ts +0 -29
  586. package/src/app/shared/directives/cell-selection/cell-selection.service.d.ts +0 -67
  587. package/src/app/shared/directives/directives.module.d.ts +0 -15
  588. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  589. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  590. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  591. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -24
  592. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  593. package/src/app/shared/directives/throttled-click.directive.d.ts +0 -16
  594. package/src/app/shared/events.d.ts +0 -29
  595. package/src/app/shared/file/csv.utils.d.ts +0 -30
  596. package/src/app/shared/file/file.service.d.ts +0 -23
  597. package/src/app/shared/file/file.utils.d.ts +0 -20
  598. package/src/app/shared/file/images.utils.d.ts +0 -42
  599. package/src/app/shared/file/json.utils.d.ts +0 -19
  600. package/src/app/shared/file/uri.utils.d.ts +0 -8
  601. package/src/app/shared/file/url.utils.d.ts +0 -108
  602. package/src/app/shared/focusable.d.ts +0 -4
  603. package/src/app/shared/form/field.component.d.ts +0 -83
  604. package/src/app/shared/form/field.model.d.ts +0 -88
  605. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  606. package/src/app/shared/forms.d.ts +0 -170
  607. package/src/app/shared/functions.d.ts +0 -325
  608. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -25
  609. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  610. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  611. package/src/app/shared/graph/colors.utils.d.ts +0 -34
  612. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  613. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
  614. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
  615. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -48
  616. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  617. package/src/app/shared/html.utils.d.ts +0 -17
  618. package/src/app/shared/http/http.utils.d.ts +0 -28
  619. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -139
  620. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
  621. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  622. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  623. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  624. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
  625. package/src/app/shared/image/image.model.d.ts +0 -7
  626. package/src/app/shared/image/image.module.d.ts +0 -8
  627. package/src/app/shared/image/image.service.d.ts +0 -39
  628. package/src/app/shared/inputs.d.ts +0 -37
  629. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  630. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  631. package/src/app/shared/logging/logger.model.d.ts +0 -68
  632. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  633. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  634. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  635. package/src/app/shared/markdown/markdown.component.d.ts +0 -86
  636. package/src/app/shared/markdown/markdown.directive.d.ts +0 -13
  637. package/src/app/shared/markdown/markdown.modal.d.ts +0 -49
  638. package/src/app/shared/markdown/markdown.module.d.ts +0 -17
  639. package/src/app/shared/markdown/markdown.service.d.ts +0 -37
  640. package/src/app/shared/markdown/markdown.utils.d.ts +0 -26
  641. package/src/app/shared/markdown/testing/markdown.test.d.ts +0 -18
  642. package/src/app/shared/markdown/testing/markdown.testing.module.d.ts +0 -12
  643. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -74
  644. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -231
  645. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -23
  646. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
  647. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -48
  648. package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
  649. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  650. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  651. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -21
  652. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -94
  653. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -31
  654. package/src/app/shared/material/chips/chips.module.d.ts +0 -22
  655. package/src/app/shared/material/chips/material.chips.d.ts +0 -167
  656. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
  657. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -25
  658. package/src/app/shared/material/datetime/material.date.d.ts +0 -90
  659. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
  660. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -136
  661. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -38
  662. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
  663. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
  664. package/src/app/shared/material/duration/duration.module.d.ts +0 -18
  665. package/src/app/shared/material/duration/duration.utils.d.ts +0 -2
  666. package/src/app/shared/material/duration/material.duration.d.ts +0 -64
  667. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -23
  668. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -59
  669. package/src/app/shared/material/latlong/material.latlong-input.d.ts +0 -93
  670. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -90
  671. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -21
  672. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -30
  673. package/src/app/shared/material/material.animations.d.ts +0 -8
  674. package/src/app/shared/material/material.config.d.ts +0 -3
  675. package/src/app/shared/material/material.module.d.ts +0 -44
  676. package/src/app/shared/material/material.testing.module.d.ts +0 -31
  677. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
  678. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  679. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -89
  680. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
  681. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  682. package/src/app/shared/material/test/test-component.d.ts +0 -75
  683. package/src/app/shared/material/testing/common.test.d.ts +0 -25
  684. package/src/app/shared/modules.d.ts +0 -9
  685. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -63
  686. package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
  687. package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
  688. package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
  689. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
  690. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
  691. package/src/app/shared/observables.d.ts +0 -32
  692. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -93
  693. package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
  694. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  695. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -25
  696. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
  697. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -14
  698. package/src/app/shared/pipes/date-from.pipe.d.ts +0 -14
  699. package/src/app/shared/pipes/dates.pipe.d.ts +0 -10
  700. package/src/app/shared/pipes/display-with.pipe.d.ts +0 -8
  701. package/src/app/shared/pipes/duration.pipe.d.ts +0 -23
  702. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  703. package/src/app/shared/pipes/form.pipes.d.ts +0 -84
  704. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  705. package/src/app/shared/pipes/html.pipes.d.ts +0 -50
  706. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  707. package/src/app/shared/pipes/maps.pipe.d.ts +0 -23
  708. package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
  709. package/src/app/shared/pipes/math.pipes.d.ts +0 -26
  710. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  711. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -9
  712. package/src/app/shared/pipes/observable.pipes.d.ts +0 -25
  713. package/src/app/shared/pipes/pipes.module.d.ts +0 -36
  714. package/src/app/shared/pipes/property.pipes.d.ts +0 -46
  715. package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
  716. package/src/app/shared/pipes/string.pipes.d.ts +0 -72
  717. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  718. package/src/app/shared/pipes/types.pipes.d.ts +0 -30
  719. package/src/app/shared/pipes/url.pipes.d.ts +0 -27
  720. package/src/app/shared/platforms.d.ts +0 -16
  721. package/src/app/shared/print/print.service.d.ts +0 -94
  722. package/src/app/shared/regexps.d.ts +0 -32
  723. package/src/app/shared/rx-state/rx-state.decorators.d.ts +0 -33
  724. package/src/app/shared/rx-state/rx-state.module.d.ts +0 -10
  725. package/src/app/shared/rx-state/rx-state.types.d.ts +0 -5
  726. package/src/app/shared/services/entity-service.class.d.ts +0 -117
  727. package/src/app/shared/services/job.utils.d.ts +0 -20
  728. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -87
  729. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  730. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -51
  731. package/src/app/shared/services/startable-service.class.d.ts +0 -38
  732. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  733. package/src/app/shared/services/validator-service.class.d.ts +0 -11
  734. package/src/app/shared/services.d.ts +0 -17
  735. package/src/app/shared/shared-routing.module.d.ts +0 -23
  736. package/src/app/shared/shared.module.d.ts +0 -33
  737. package/src/app/shared/shared.testing.module.d.ts +0 -20
  738. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -60
  739. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
  740. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
  741. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
  742. package/src/app/shared/storage/storage.service.d.ts +0 -22
  743. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  744. package/src/app/shared/testing/maskito.test.d.ts +0 -10
  745. package/src/app/shared/testing/observable.test.d.ts +0 -25
  746. package/src/app/shared/testing/tests.page.d.ts +0 -20
  747. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  748. package/src/app/shared/toast/toast.testing.module.d.ts +0 -12
  749. package/src/app/shared/toast/toasts.d.ts +0 -16
  750. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  751. package/src/app/shared/toolbar/toolbar.d.ts +0 -72
  752. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
  753. package/src/app/shared/types.d.ts +0 -45
  754. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
  755. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  756. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -49
  757. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -50
  758. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  759. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
  760. package/src/app/shared/validator/validators.d.ts +0 -145
  761. package/src/app/shared/version/versions.d.ts +0 -14
  762. package/src/app/social/config/social.config.d.ts +0 -4
  763. package/src/app/social/feed/feed.component.d.ts +0 -91
  764. package/src/app/social/feed/feed.directive.d.ts +0 -32
  765. package/src/app/social/feed/feed.model.d.ts +0 -69
  766. package/src/app/social/feed/feed.module.d.ts +0 -13
  767. package/src/app/social/feed/feed.page.d.ts +0 -24
  768. package/src/app/social/feed/feed.service.d.ts +0 -85
  769. package/src/app/social/feed/testing/feed.testing.d.ts +0 -23
  770. package/src/app/social/feed/testing/feed.testing.module.d.ts +0 -12
  771. package/src/app/social/job/job.module.d.ts +0 -12
  772. package/src/app/social/job/progression/job-progression.component.d.ts +0 -24
  773. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -63
  774. package/src/app/social/job/progression/job-progression.list.d.ts +0 -20
  775. package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
  776. package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
  777. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
  778. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
  779. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  780. package/src/app/social/message/message.form.d.ts +0 -36
  781. package/src/app/social/message/message.modal.d.ts +0 -47
  782. package/src/app/social/message/message.model.d.ts +0 -36
  783. package/src/app/social/message/message.module.d.ts +0 -14
  784. package/src/app/social/message/message.service.d.ts +0 -44
  785. package/src/app/social/social.errors.d.ts +0 -10
  786. package/src/app/social/social.module.d.ts +0 -20
  787. package/src/app/social/social.testing.module.d.ts +0 -14
  788. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -47
  789. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -77
  790. package/src/app/social/user-event/notification/user-event-notification.modal.d.ts +0 -37
  791. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -44
  792. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
  793. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  794. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -41
  795. package/src/app/social/user-event/user-event.model.d.ts +0 -44
  796. package/src/app/social/user-event/user-event.module.d.ts +0 -14
  797. package/src/app/social/user-event/user-event.service.d.ts +0 -124
  798. package/src/environments/environment.class.d.ts +0 -86
  799. package/src/environments/environment.d.ts +0 -2
  800. package/src/environments/environment.loader.d.ts +0 -24
  801. package/src/theme/_globals.scss +0 -5
@@ -1,74 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { isObservable } from 'rxjs';
3
- import { toBoolean } from '../functions';
4
- import * as i0 from "@angular/core";
5
- export class AsAnyPipe {
6
- transform(value) {
7
- if (value === null || value === undefined)
8
- return null;
9
- return value;
10
- }
11
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsAnyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AsAnyPipe, name: "asAny" });
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsAnyPipe, decorators: [{
15
- type: Pipe,
16
- args: [{
17
- name: 'asAny',
18
- }]
19
- }] });
20
- export class AsArrayPipe {
21
- transform(value) {
22
- return Array.isArray(value) ? value : null;
23
- }
24
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
25
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AsArrayPipe, name: "asArray" });
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsArrayPipe, decorators: [{
28
- type: Pipe,
29
- args: [{
30
- name: 'asArray',
31
- }]
32
- }] });
33
- export class AsObservablePipe {
34
- transform(value) {
35
- return isObservable(value) ? value : null;
36
- }
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsObservablePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
38
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AsObservablePipe, name: "asObservable" });
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsObservablePipe, decorators: [{
41
- type: Pipe,
42
- args: [{
43
- name: 'asObservable',
44
- }]
45
- }] });
46
- export class AsFloatLabelTypePipe {
47
- transform(value) {
48
- return value === 'never' ? null : value;
49
- }
50
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsFloatLabelTypePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
51
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AsFloatLabelTypePipe, name: "asFloatLabelType" });
52
- }
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsFloatLabelTypePipe, decorators: [{
54
- type: Pipe,
55
- args: [{
56
- name: 'asFloatLabelType',
57
- }]
58
- }] });
59
- export class AsBooleanPipe {
60
- transform(value, opts, ...args) {
61
- if (typeof opts === 'function')
62
- return opts(value, ...args);
63
- return toBoolean(value, opts);
64
- }
65
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsBooleanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
66
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AsBooleanPipe, name: "asBoolean" });
67
- }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AsBooleanPipe, decorators: [{
69
- type: Pipe,
70
- args: [{
71
- name: 'asBoolean',
72
- }]
73
- }] });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9waXBlcy90eXBlcy5waXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTXpDLE1BQU0sT0FBTyxTQUFTO0lBQ3BCLFNBQVMsQ0FBVSxLQUFvQjtRQUNyQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2RCxPQUFPLEtBQVUsQ0FBQztJQUNwQixDQUFDO3dHQUpVLFNBQVM7c0dBQVQsU0FBUzs7NEZBQVQsU0FBUztrQkFIckIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsT0FBTztpQkFDZDs7QUFXRCxNQUFNLE9BQU8sV0FBVztJQUN0QixTQUFTLENBQVUsS0FBYztRQUMvQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hELENBQUM7d0dBSFUsV0FBVztzR0FBWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUh2QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxTQUFTO2lCQUNoQjs7QUFVRCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFNBQVMsQ0FBVSxLQUFjO1FBQy9CLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxLQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0QsQ0FBQzt3R0FIVSxnQkFBZ0I7c0dBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFINUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsY0FBYztpQkFDckI7O0FBVUQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixTQUFTLENBQUMsS0FBd0I7UUFDaEMsT0FBTyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxQyxDQUFDO3dHQUhVLG9CQUFvQjtzR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQUhoQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxrQkFBa0I7aUJBQ3pCOztBQVVELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFNBQVMsQ0FBQyxLQUFVLEVBQUUsSUFBMEQsRUFBRSxHQUFHLElBQVc7UUFDOUYsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDNUQsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7d0dBSlUsYUFBYTtzR0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUh6QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxXQUFXO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IHRvQm9vbGVhbiB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuQFBpcGUoe1xuICBuYW1lOiAnYXNBbnknLFxufSlcbmV4cG9ydCBjbGFzcyBBc0FueVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQgPSBhbnk+KHZhbHVlOiB1bmtub3duIHwgYW55KTogVCB8IG51bGwge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdhc0FycmF5Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXNBcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQgPSBhbnk+KHZhbHVlOiB1bmtub3duKTogVFtdIHwgbnVsbCB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gKHZhbHVlIGFzIGFueVtdKSA6IG51bGw7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXNPYnNlcnZhYmxlJyxcbn0pXG5leHBvcnQgY2xhc3MgQXNPYnNlcnZhYmxlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VCA9IGFueT4odmFsdWU6IHVua25vd24pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyAodmFsdWUgYXMgT2JzZXJ2YWJsZTxUPikgOiBudWxsO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FzRmxvYXRMYWJlbFR5cGUnLFxufSlcbmV4cG9ydCBjbGFzcyBBc0Zsb2F0TGFiZWxUeXBlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IEFwcEZsb2F0TGFiZWxUeXBlKTogRmxvYXRMYWJlbFR5cGUgfCBudWxsIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICduZXZlcicgPyBudWxsIDogdmFsdWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXNCb29sZWFuJyxcbn0pXG5leHBvcnQgY2xhc3MgQXNCb29sZWFuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgb3B0cz86IGJvb2xlYW4gfCAoKHZhbHVlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBib29sZWFuKSwgLi4uYXJnczogYW55W10pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHJldHVybiBvcHRzKHZhbHVlLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdG9Cb29sZWFuKHZhbHVlLCBvcHRzKTtcbiAgfVxufVxuIl19
@@ -1,35 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import { UrlUtils } from '../file/url.utils';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Pipe permettant d'ajouter des paramètres de requête à une URL.
6
- *
7
- * Cette pipe prend une URL de base et un objet contenant des paires clé-valeur
8
- * représentant les paramètres de requête à ajouter. Elle encode correctement les
9
- * paramètres et s'assure de les ajouter avec le séparateur approprié ('?' ou '&').
10
- * Les paramètres avec des valeurs nulles ou undefined sont automatiquement filtrés.
11
- *
12
- * @example
13
- * // Dans un template
14
- * <a [href]="'https://example.com' | appendQueryParams:{id: 123, name: 'test'}">Lien</a>
15
- * // Résultat: https://example.com?id=123&name=test
16
- *
17
- * @example
18
- * // Si l'URL contient déjà des paramètres
19
- * <a [href]="'https://example.com?page=1' | appendQueryParams:{sort: 'asc'}">Lien</a>
20
- * // Résultat: https://example.com?page=1&sort=asc
21
- */
22
- export class AppendQueryParamsPipePipe {
23
- transform(url, queryParams) {
24
- return UrlUtils.appendQueryParams(url, queryParams);
25
- }
26
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppendQueryParamsPipePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
27
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AppendQueryParamsPipePipe, name: "appendQueryParams" });
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppendQueryParamsPipePipe, decorators: [{
30
- type: Pipe,
31
- args: [{
32
- name: 'appendQueryParams',
33
- }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnBpcGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvdXJsLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBSUgsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxTQUFTLENBQUMsR0FBVyxFQUFFLFdBQW1DO1FBQ3hELE9BQU8sUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0RCxDQUFDO3dHQUhVLHlCQUF5QjtzR0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUhyQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxtQkFBbUI7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXJsVXRpbHMgfSBmcm9tICcuLi9maWxlL3VybC51dGlscyc7XG5cbi8qKlxuICogUGlwZSBwZXJtZXR0YW50IGQnYWpvdXRlciBkZXMgcGFyYW3DqHRyZXMgZGUgcmVxdcOqdGUgw6AgdW5lIFVSTC5cbiAqXG4gKiBDZXR0ZSBwaXBlIHByZW5kIHVuZSBVUkwgZGUgYmFzZSBldCB1biBvYmpldCBjb250ZW5hbnQgZGVzIHBhaXJlcyBjbMOpLXZhbGV1clxuICogcmVwcsOpc2VudGFudCBsZXMgcGFyYW3DqHRyZXMgZGUgcmVxdcOqdGUgw6AgYWpvdXRlci4gRWxsZSBlbmNvZGUgY29ycmVjdGVtZW50IGxlc1xuICogcGFyYW3DqHRyZXMgZXQgcydhc3N1cmUgZGUgbGVzIGFqb3V0ZXIgYXZlYyBsZSBzw6lwYXJhdGV1ciBhcHByb3ByacOpICgnPycgb3UgJyYnKS5cbiAqIExlcyBwYXJhbcOodHJlcyBhdmVjIGRlcyB2YWxldXJzIG51bGxlcyBvdSB1bmRlZmluZWQgc29udCBhdXRvbWF0aXF1ZW1lbnQgZmlsdHLDqXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERhbnMgdW4gdGVtcGxhdGVcbiAqIDxhIFtocmVmXT1cIidodHRwczovL2V4YW1wbGUuY29tJyB8IGFwcGVuZFF1ZXJ5UGFyYW1zOntpZDogMTIzLCBuYW1lOiAndGVzdCd9XCI+TGllbjwvYT5cbiAqIC8vIFLDqXN1bHRhdDogaHR0cHM6Ly9leGFtcGxlLmNvbT9pZD0xMjMmbmFtZT10ZXN0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpIGwnVVJMIGNvbnRpZW50IGTDqWrDoCBkZXMgcGFyYW3DqHRyZXNcbiAqIDxhIFtocmVmXT1cIidodHRwczovL2V4YW1wbGUuY29tP3BhZ2U9MScgfCBhcHBlbmRRdWVyeVBhcmFtczp7c29ydDogJ2FzYyd9XCI+TGllbjwvYT5cbiAqIC8vIFLDqXN1bHRhdDogaHR0cHM6Ly9leGFtcGxlLmNvbT9wYWdlPTEmc29ydD1hc2NcbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnYXBwZW5kUXVlcnlQYXJhbXMnLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBlbmRRdWVyeVBhcmFtc1BpcGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh1cmw6IHN0cmluZywgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBhbnkge1xuICAgIHJldHVybiBVcmxVdGlscy5hcHBlbmRRdWVyeVBhcmFtcyh1cmwsIHF1ZXJ5UGFyYW1zKTtcbiAgfVxufVxuIl19
@@ -1,81 +0,0 @@
1
- /* ---
2
- * Source: https://github.com/ionic-team/ionic-framework/blob/b0d53ca73619585671d8cf4dc24e47f826495a0a/core/src/utils/platform.ts
3
- * --- */
4
- const _cache = {
5
- userAgent: null,
6
- mobile: null,
7
- cordova: null,
8
- capacitor: null,
9
- };
10
- export function matchMedia(win, query) {
11
- return win.matchMedia(query).matches;
12
- }
13
- export function getUserAgent(win) {
14
- if (!_cache.userAgent) {
15
- _cache.userAgent = win.navigator.userAgent || win.navigator.vendor || window.opera;
16
- }
17
- return _cache.userAgent;
18
- }
19
- export function testUserAgent(win, expr) {
20
- const userAgent = getUserAgent(win);
21
- return expr.test(userAgent);
22
- }
23
- export function isWindows(win) {
24
- return testUserAgent(win, /windows/i);
25
- }
26
- export function isFirefox(win) {
27
- return testUserAgent(win, / firefox\//i);
28
- }
29
- export function isSafari(win) {
30
- return !isChrome(win) /*Exclude chromium*/ && testUserAgent(win, / safari\//i);
31
- }
32
- export function isChrome(win) {
33
- return testUserAgent(win, / chrome\//i);
34
- }
35
- export function isEdge(win) {
36
- return testUserAgent(win, /edge/i);
37
- }
38
- export function isTouchUi(win) {
39
- return matchMedia(win, '(any-pointer:coarse)');
40
- }
41
- export function isIpad(win) {
42
- // iOS 12 and below
43
- if (testUserAgent(win, /iPad/i)) {
44
- return true;
45
- }
46
- // iOS 13+
47
- if (testUserAgent(win, /Macintosh/i) && isTouchUi(win)) {
48
- return true;
49
- }
50
- return false;
51
- }
52
- export function isMacOS(win) {
53
- // iOS (but not iPad)
54
- return testUserAgent(win, /Macintosh/i) && !isTouchUi(win);
55
- }
56
- export function isIOS(win) {
57
- return testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
58
- }
59
- export function isAndroid(win) {
60
- return testUserAgent(win, /android|sink/i);
61
- }
62
- export function isCapacitor(win) {
63
- if (_cache.capacitor === null || _cache.capacitor === undefined) {
64
- _cache.capacitor = !!(win['Capacitor'] || win['capacitor']);
65
- }
66
- return _cache.capacitor;
67
- }
68
- export function isMobile(win) {
69
- if (_cache.mobile === null || _cache.mobile === undefined) {
70
- _cache.mobile =
71
- isAndroid(win) ||
72
- (isIOS(window) && isTouchUi(win)) ||
73
- // Workaround, for MS Windows touch screen (detected as mobile, but forced as desktop)
74
- (isTouchUi(win) && !isWindows(win));
75
- }
76
- return _cache.mobile;
77
- }
78
- export function isPrint(win) {
79
- return matchMedia(win, 'print');
80
- }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGxhdGZvcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztTQUVTO0FBRVQsTUFBTSxNQUFNLEdBQUc7SUFDYixTQUFTLEVBQUUsSUFBSTtJQUNmLE1BQU0sRUFBRSxJQUFJO0lBQ1osT0FBTyxFQUFFLElBQUk7SUFDYixTQUFTLEVBQUUsSUFBSTtDQUNoQixDQUFDO0FBRUYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNuRCxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVc7SUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFLLE1BQWMsQ0FBQyxLQUFLLENBQUM7SUFDOUYsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUNyRCxNQUFNLFNBQVMsR0FBVyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVk7SUFDcEMsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVk7SUFDcEMsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVk7SUFDbkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVk7SUFDbkMsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQVk7SUFDakMsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVk7SUFDcEMsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBVztJQUNoQyxtQkFBbUI7SUFDbkIsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVTtJQUNWLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEdBQVc7SUFDakMscUJBQXFCO0lBQ3JCLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FBQyxHQUFXO0lBQy9CLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBVztJQUNuQyxPQUFPLGFBQWEsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBUTtJQUNsQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDaEUsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFXO0lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxRCxNQUFNLENBQUMsTUFBTTtZQUNYLFNBQVMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2QsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxzRkFBc0Y7Z0JBQ3RGLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN2QixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFZO0lBQ2xDLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogLS0tXG4gKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9pb25pYy10ZWFtL2lvbmljLWZyYW1ld29yay9ibG9iL2IwZDUzY2E3MzYxOTU4NTY3MWQ4Y2Y0ZGMyNGU0N2Y4MjY0OTVhMGEvY29yZS9zcmMvdXRpbHMvcGxhdGZvcm0udHNcbiAqIC0tLSAqL1xuXG5jb25zdCBfY2FjaGUgPSB7XG4gIHVzZXJBZ2VudDogbnVsbCxcbiAgbW9iaWxlOiBudWxsLFxuICBjb3Jkb3ZhOiBudWxsLFxuICBjYXBhY2l0b3I6IG51bGwsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hNZWRpYSh3aW46IFdpbmRvdywgcXVlcnk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gd2luLm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyQWdlbnQod2luOiBXaW5kb3cpOiBzdHJpbmcge1xuICBpZiAoIV9jYWNoZS51c2VyQWdlbnQpIHtcbiAgICBfY2FjaGUudXNlckFnZW50ID0gd2luLm5hdmlnYXRvci51c2VyQWdlbnQgfHwgd2luLm5hdmlnYXRvci52ZW5kb3IgfHwgKHdpbmRvdyBhcyBhbnkpLm9wZXJhO1xuICB9XG4gIHJldHVybiBfY2FjaGUudXNlckFnZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFVzZXJBZ2VudCh3aW46IFdpbmRvdywgZXhwcjogUmVnRXhwKSB7XG4gIGNvbnN0IHVzZXJBZ2VudDogc3RyaW5nID0gZ2V0VXNlckFnZW50KHdpbik7XG4gIHJldHVybiBleHByLnRlc3QodXNlckFnZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93cyh3aW4/OiBXaW5kb3cpIHtcbiAgcmV0dXJuIHRlc3RVc2VyQWdlbnQod2luLCAvd2luZG93cy9pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyZWZveCh3aW4/OiBXaW5kb3cpIHtcbiAgcmV0dXJuIHRlc3RVc2VyQWdlbnQod2luLCAvIGZpcmVmb3hcXC8vaSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmFyaSh3aW4/OiBXaW5kb3cpIHtcbiAgcmV0dXJuICFpc0Nocm9tZSh3aW4pIC8qRXhjbHVkZSBjaHJvbWl1bSovICYmIHRlc3RVc2VyQWdlbnQod2luLCAvIHNhZmFyaVxcLy9pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hyb21lKHdpbj86IFdpbmRvdykge1xuICByZXR1cm4gdGVzdFVzZXJBZ2VudCh3aW4sIC8gY2hyb21lXFwvL2kpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFZGdlKHdpbj86IFdpbmRvdykge1xuICByZXR1cm4gdGVzdFVzZXJBZ2VudCh3aW4sIC9lZGdlL2kpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUb3VjaFVpKHdpbj86IFdpbmRvdykge1xuICByZXR1cm4gbWF0Y2hNZWRpYSh3aW4sICcoYW55LXBvaW50ZXI6Y29hcnNlKScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJcGFkKHdpbjogV2luZG93KSB7XG4gIC8vIGlPUyAxMiBhbmQgYmVsb3dcbiAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvaVBhZC9pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gaU9TIDEzK1xuICBpZiAodGVzdFVzZXJBZ2VudCh3aW4sIC9NYWNpbnRvc2gvaSkgJiYgaXNUb3VjaFVpKHdpbikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFjT1Mod2luOiBXaW5kb3cpIHtcbiAgLy8gaU9TIChidXQgbm90IGlQYWQpXG4gIHJldHVybiB0ZXN0VXNlckFnZW50KHdpbiwgL01hY2ludG9zaC9pKSAmJiAhaXNUb3VjaFVpKHdpbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lPUyh3aW46IFdpbmRvdykge1xuICByZXR1cm4gdGVzdFVzZXJBZ2VudCh3aW4sIC9pUGhvbmV8aVBvZC9pKSB8fCBpc0lwYWQod2luKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQW5kcm9pZCh3aW46IFdpbmRvdykge1xuICByZXR1cm4gdGVzdFVzZXJBZ2VudCh3aW4sIC9hbmRyb2lkfHNpbmsvaSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhcGFjaXRvcih3aW46IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoX2NhY2hlLmNhcGFjaXRvciA9PT0gbnVsbCB8fCBfY2FjaGUuY2FwYWNpdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICBfY2FjaGUuY2FwYWNpdG9yID0gISEod2luWydDYXBhY2l0b3InXSB8fCB3aW5bJ2NhcGFjaXRvciddKTtcbiAgfVxuICByZXR1cm4gX2NhY2hlLmNhcGFjaXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9iaWxlKHdpbjogV2luZG93KSB7XG4gIGlmIChfY2FjaGUubW9iaWxlID09PSBudWxsIHx8IF9jYWNoZS5tb2JpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgIF9jYWNoZS5tb2JpbGUgPVxuICAgICAgaXNBbmRyb2lkKHdpbikgfHxcbiAgICAgIChpc0lPUyh3aW5kb3cpICYmIGlzVG91Y2hVaSh3aW4pKSB8fFxuICAgICAgLy8gV29ya2Fyb3VuZCwgZm9yIE1TIFdpbmRvd3MgdG91Y2ggc2NyZWVuIChkZXRlY3RlZCBhcyBtb2JpbGUsIGJ1dCBmb3JjZWQgYXMgZGVza3RvcClcbiAgICAgIChpc1RvdWNoVWkod2luKSAmJiAhaXNXaW5kb3dzKHdpbikpO1xuICB9XG4gIHJldHVybiBfY2FjaGUubW9iaWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmludCh3aW4/OiBXaW5kb3cpIHtcbiAgcmV0dXJuIG1hdGNoTWVkaWEod2luLCAncHJpbnQnKTtcbn1cbiJdfQ==
@@ -1,305 +0,0 @@
1
- import { Toasts } from '../toast/toasts';
2
- import { Inject, Injectable } from '@angular/core';
3
- import { DOCUMENT } from '@angular/common';
4
- import { isNil, isNilOrBlank, isNotNil, isNotNilOrBlank } from '../functions';
5
- import { waitForTrue } from '../observables';
6
- import { mergeMap, timer } from 'rxjs';
7
- import { isChrome } from '../platforms';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@ionic/angular";
10
- import * as i2 from "@ngx-translate/core";
11
- import * as i3 from "../storage/storage.service";
12
- export const PRINT_LOADING_STORAGE_KEY_PREFIX = 'print-loading-';
13
- export const PRINT_ID_QUERY_PARAM = 'print-id';
14
- export class PrintService {
15
- toastController;
16
- translate;
17
- storage;
18
- document;
19
- _printId = 0;
20
- constructor(toastController, translate, storage, document) {
21
- this.toastController = toastController;
22
- this.translate = translate;
23
- this.storage = storage;
24
- this.document = document;
25
- }
26
- nextJobId() {
27
- return ++this._printId;
28
- }
29
- /**
30
- * Extracts and returns the job ID from a given URL.
31
- *
32
- * @param {string} [url] - The URL from which to extract the job ID. If not provided, `window.location.href` will be used.
33
- * @return {number | undefined} The extracted job ID as a number, or `undefined` if the job ID is not present or invalid.
34
- */
35
- getJobId(url) {
36
- url = url || window.location.href;
37
- const matches = url.match(/print-id=(\d+)/);
38
- return matches?.[1] || undefined;
39
- }
40
- /**
41
- * Determines whether the provided URL or the current page's URL contains
42
- * a specific query parameter, indicating it's a printing-related URL.
43
- *
44
- * @param {string} [url] - The optional URL to check. If not provided, the current page's URL is used.
45
- * @param {string} [queryParam='print-id'] - The query parameter to look for, defaulting to 'print-id'.
46
- * @return {boolean} Returns true if the query parameter is found in the URL; otherwise, false.
47
- */
48
- isPrintingUrl(url, queryParam = 'print-id') {
49
- let query;
50
- if (isNotNilOrBlank(url))
51
- query = new URL(url).search;
52
- query = query || window.location.search || '?';
53
- return query.indexOf(queryParam) !== -1;
54
- }
55
- async printElement(element, opts) {
56
- if (!element)
57
- throw new Error("Missing required 'element' argument");
58
- return this.printHTML(element.innerHTML, opts);
59
- }
60
- async printHTML(html, opts) {
61
- if (!html)
62
- throw new Error("Missing required 'html' argument");
63
- // Create iframe
64
- const iframe = this.createPrintIframeByHtml(html, opts);
65
- return this.printIframe(iframe, opts);
66
- }
67
- /**
68
- * Prints the content of a URL by rendering it in an iframe.
69
- *
70
- * @param {string} url The URL of the content to print. This parameter is required.
71
- * @param {Omit<PrintOptions, 'style'>} [opts] Optional settings for printing, excluding the 'style' option.
72
- * @return {Promise<number>} A promise that resolves to the ID of the print job.
73
- */
74
- async printUrl(url, opts) {
75
- if (isNilOrBlank(url))
76
- throw new Error("Missing required 'url' argument");
77
- const jobId = opts?.id ?? this.nextJobId();
78
- // Create iframe
79
- const iframe = this.createPrintIframeByUrl(url, { id: jobId });
80
- // Launch the print job
81
- return this.printIframe(iframe, opts);
82
- }
83
- /**
84
- * Prints the content of the specified iframe element.
85
- *
86
- * @param {HTMLIFrameElement} iframe - The iframe element whose content needs to be printed. Must be a valid and loaded iframe element.
87
- * @param {PrintOptions} [opts] - Optional parameters for the print operation, which may include options for toast messages and job configuration.
88
- * @return {Promise<number>} A promise that resolves to the unique ID of the print job.
89
- * @throws Will throw an error if the required 'iframe' argument is missing or invalid.
90
- */
91
- async printIframe(iframe, opts) {
92
- if (!iframe)
93
- throw new Error("Missing required 'iframe' argument");
94
- const jobId = opts?.id ?? this.nextJobId();
95
- const toastId = `printing-${jobId}`;
96
- const showLoadingToast = opts?.showToast !== false;
97
- if (showLoadingToast)
98
- await this.showToast({
99
- id: toastId,
100
- message: opts?.toastMessage || 'COMMON.PLEASE_WAIT',
101
- duration: 0,
102
- });
103
- try {
104
- // Wait end of iframe load
105
- await this.waitIdle(iframe, { id: jobId });
106
- // Print (and wait end of print)
107
- await this.print(iframe);
108
- return jobId;
109
- }
110
- catch (err) {
111
- console.error('[print-service] Failed to create hidden iframe', err);
112
- }
113
- finally {
114
- iframe.remove();
115
- if (showLoadingToast)
116
- await this.toastController.dismiss(null, null, toastId);
117
- }
118
- }
119
- async markAsLoading(id) {
120
- console.debug(`[print-service] Mark print job #${id} as loading`);
121
- await this.storage.set(PRINT_LOADING_STORAGE_KEY_PREFIX + id, '1');
122
- }
123
- async markAsLoaded(id) {
124
- console.debug(`[print-service] Mark print job #${id} as loaded`);
125
- await this.storage.remove(PRINT_LOADING_STORAGE_KEY_PREFIX + id);
126
- }
127
- async isLoaded(id) {
128
- const result = await this.storage.get(PRINT_LOADING_STORAGE_KEY_PREFIX + id);
129
- return isNil(result);
130
- }
131
- async isLoading(id) {
132
- return !(await this.isLoaded(id));
133
- }
134
- /* -- protected functions -- */
135
- createPrintIframeByUrl(url, opts) {
136
- // Make sure to add the job id inside the URL (e.g. to allow getJobIdFromUrl() to retrieve it)
137
- if (isNotNil(opts?.id)) {
138
- const newUrl = new URL(url);
139
- newUrl.searchParams.set(PRINT_ID_QUERY_PARAM, '' + opts.id);
140
- url = newUrl.href;
141
- }
142
- // Create a iframe with the given url
143
- const iframe = this.document.createElement('iframe');
144
- iframe.classList.add('cdk-visually-hidden');
145
- iframe.style.width = '100%';
146
- iframe.style.height = '100%';
147
- this.document.body.appendChild(iframe);
148
- iframe.src = url;
149
- return iframe;
150
- }
151
- createPrintIframeByHtml(html, opts) {
152
- if (!html)
153
- throw new Error("Missing required 'html' argument");
154
- const lang = this.document.documentElement?.lang || 'en';
155
- // Create an empty iframe
156
- const iframe = this.document.createElement('iframe');
157
- iframe.classList.add('cdk-visually-hidden');
158
- iframe.style.width = '100%';
159
- iframe.style.height = '100%';
160
- this.document.body.appendChild(iframe);
161
- // Write iframe content
162
- const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
163
- if (iframeDocument) {
164
- iframeDocument.open();
165
- iframeDocument.write(`
166
- <!DOCTYPE html>
167
- <html lang="${lang}" class="print-pdf">
168
- <head>
169
- <title>${opts?.title || ''}</title>
170
- <style>
171
- @media print {
172
- body {
173
- font-family: 'Roboto', Helvetica, Arial, sans-serif;
174
- margin: 0;
175
- padding: 0;
176
- overflow: hidden;
177
- }
178
- img {
179
- max-width: 100%;
180
- height: auto;
181
- page-break-inside: avoid;
182
- }
183
- }
184
- ${opts?.inlineStyle || ''}
185
- </style>
186
- </head>
187
- <body>
188
- ${html}
189
- </body>
190
- </html>
191
- `);
192
- iframeDocument.close();
193
- }
194
- // Set iframe style
195
- // FIXME - Ignore style injection, because it failed in Firefox (e.g. on user manual) and Chrome (e.g. in privacy policy)
196
- // Nothing appear in the print dialog
197
- //this.applyDocumentStyleToIframe(iframe);
198
- return iframe;
199
- }
200
- /**
201
- * Applies the styles from the provided document, including external stylesheets and inline styles,
202
- * to the specified iframe's document.
203
- *
204
- * @param {HTMLIFrameElement} iframe - The iframe to which the styles are applied.
205
- * @return {void} Does not return a value.
206
- */
207
- applyDocumentStyleToIframe(iframe) {
208
- const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
209
- if (iframeDocument) {
210
- // Récupérer tous les styles (liens CSS)
211
- const links = Array.from(this.document.querySelectorAll('style,link[rel="stylesheet"]'));
212
- links.forEach((element) => {
213
- // Insert inline style
214
- if (element.tagName === 'STYLE') {
215
- const newStyle = iframeDocument.createElement('style');
216
- newStyle.innerHTML = element.innerHTML;
217
- iframeDocument.head.appendChild(newStyle);
218
- console.debug('[print-service] Add style to iframe', newStyle);
219
- }
220
- // Insert link to stylesheet file
221
- else if (element.tagName === 'LINK' && element.getAttribute('href')) {
222
- const newLink = iframeDocument.createElement('link');
223
- newLink.rel = 'stylesheet';
224
- newLink.href = element.getAttribute('href');
225
- iframeDocument.head.appendChild(newLink);
226
- console.debug('[print-service] Add stylesheet to iframe: ', newLink.href);
227
- }
228
- });
229
- }
230
- }
231
- async waitIdle(iframe, opts) {
232
- // Wait job finished
233
- const printId = opts?.id ?? this._printId;
234
- await waitForTrue(timer(500, 500).pipe(mergeMap(() => this.isLoaded(printId))), { timeout: opts?.timeout });
235
- // Wait end of iframe load
236
- await new Promise((resolve, reject) => {
237
- const iframeWindow = iframe.contentWindow?.window || iframe.contentWindow;
238
- if (iframeWindow.document.readyState === 'complete') {
239
- resolve();
240
- }
241
- else {
242
- // Stop if timeout reached
243
- if (opts?.timeout > 0) {
244
- setTimeout(() => reject('timeout'), opts.timeout);
245
- }
246
- const readyListener = () => {
247
- if (iframeWindow.document.readyState === 'complete') {
248
- resolve();
249
- iframeWindow.document.removeEventListener('readystatechange', readyListener);
250
- }
251
- };
252
- iframeWindow.document.addEventListener('readystatechange', readyListener);
253
- }
254
- });
255
- }
256
- /**
257
- * Triggers the print functionality of the given iframe and resolves or rejects based on the print completion or timeout.
258
- *
259
- * @param {HTMLIFrameElement} iframe - The iframe element to be printed.
260
- * @param {{timeout?: number}} [opts] - An optional configuration object.
261
- * @param {number} [opts.timeout] - The maximum time in milliseconds to wait for the print to complete before rejecting the promise.
262
- * @return {Promise<void>} A promise that resolves after the print is completed or rejects if a timeout occurs.
263
- */
264
- print(iframe, opts) {
265
- return new Promise((resolve, reject) => {
266
- const iframeWindow = iframe.contentWindow?.window || iframe.contentWindow;
267
- // Stop if timeout reached
268
- if (opts?.timeout > 0) {
269
- setTimeout(() => reject('timeout'), opts.timeout);
270
- }
271
- // On Chrome
272
- if (isChrome(window)) {
273
- // Wait after print event, to resolve the promise
274
- const afterPrintListener = () => {
275
- console.debug('[print-service] After print');
276
- resolve();
277
- // Remove the listener
278
- iframeWindow.removeEventListener('afterprint', afterPrintListener);
279
- };
280
- iframeWindow.addEventListener('afterprint', afterPrintListener);
281
- iframe.contentWindow.window.print();
282
- }
283
- // Otherwise (e.g. Firefox)
284
- else {
285
- iframe.contentWindow.window.print();
286
- resolve();
287
- }
288
- });
289
- }
290
- async showToast(opts) {
291
- if (!this.toastController)
292
- throw new Error("Missing toastController in component's constructor");
293
- return await Toasts.show(this.toastController, this.translate, opts);
294
- }
295
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PrintService, deps: [{ token: i1.ToastController }, { token: i2.TranslateService }, { token: i3.StorageService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
296
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PrintService, providedIn: 'root' });
297
- }
298
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PrintService, decorators: [{
299
- type: Injectable,
300
- args: [{ providedIn: 'root' }]
301
- }], ctorParameters: () => [{ type: i1.ToastController }, { type: i2.TranslateService }, { type: i3.StorageService }, { type: Document, decorators: [{
302
- type: Inject,
303
- args: [DOCUMENT]
304
- }] }] });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ByaW50L3ByaW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUkzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFVeEMsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsZ0JBQWdCLENBQUM7QUFDakUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0FBRy9DLE1BQU0sT0FBTyxZQUFZO0lBSVg7SUFDQTtJQUNBO0lBQ2tCO0lBTnRCLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFckIsWUFDWSxlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixPQUF1QixFQUNMLFFBQWtCO1FBSHBDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNMLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDN0MsQ0FBQztJQUVKLFNBQVM7UUFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsR0FBWTtRQUNuQixHQUFHLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxPQUFPLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGFBQWEsQ0FBQyxHQUFZLEVBQUUsYUFBcUIsVUFBVTtRQUN6RCxJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3RELEtBQUssR0FBRyxLQUFLLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDO1FBQy9DLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFvQixFQUFFLElBQW1CO1FBQzFELElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVksRUFBRSxJQUFtQjtRQUMvQyxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUUvRCxnQkFBZ0I7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV4RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQVcsRUFBRSxJQUFrQztRQUM1RCxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFFMUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFM0MsZ0JBQWdCO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUvRCx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBeUIsRUFBRSxJQUFtQjtRQUM5RCxJQUFJLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUVuRSxNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLFNBQVMsS0FBSyxLQUFLLENBQUM7UUFDbkQsSUFBSSxnQkFBZ0I7WUFDbEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNuQixFQUFFLEVBQUUsT0FBTztnQkFDWCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksSUFBSSxvQkFBb0I7Z0JBQ25ELFFBQVEsRUFBRSxDQUFDO2FBQ1osQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDO1lBQ0gsMEJBQTBCO1lBQzFCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUUzQyxnQ0FBZ0M7WUFDaEMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXpCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLGdCQUFnQjtnQkFBRSxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEYsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQW1CO1FBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBbUI7UUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQW1CO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDN0UsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBbUI7UUFDakMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELCtCQUErQjtJQUVyQixzQkFBc0IsQ0FBQyxHQUFXLEVBQUUsSUFBK0I7UUFDM0UsOEZBQThGO1FBQzlGLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUQsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDcEIsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxJQUFZLEVBQUUsSUFBK0M7UUFDN0YsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFFL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztRQUV6RCx5QkFBeUI7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2Qyx1QkFBdUI7UUFDdkIsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztRQUNoRixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixjQUFjLENBQUMsS0FBSyxDQUFDOztzQkFFTCxJQUFJOztxQkFFTCxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztjQWV4QixJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUU7Ozs7Y0FJdkIsSUFBSTs7O09BR1gsQ0FBQyxDQUFDO1lBQ0gsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxtQkFBbUI7UUFDbkIseUhBQXlIO1FBQ3pILDZDQUE2QztRQUM3QywwQ0FBMEM7UUFFMUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLDBCQUEwQixDQUFDLE1BQXlCO1FBQzVELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7UUFDaEYsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQix3Q0FBd0M7WUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQztZQUN6RixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3hCLHNCQUFzQjtnQkFDdEIsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUNoQyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN2RCxRQUFRLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7b0JBQ3ZDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUUxQyxPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDO2dCQUVELGlDQUFpQztxQkFDNUIsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3BFLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JELE9BQU8sQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO29CQUMzQixPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzVDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUV6QyxPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFUyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQXlCLEVBQUUsSUFBaUQ7UUFDbkcsb0JBQW9CO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMxQyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFNUcsMEJBQTBCO1FBQzFCLE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDMUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUMxRSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7aUJBQU0sQ0FBQztnQkFDTiwwQkFBMEI7Z0JBQzFCLElBQUksSUFBSSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBRUQsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO29CQUN6QixJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNwRCxPQUFPLEVBQUUsQ0FBQzt3QkFFVixZQUFZLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDO29CQUMvRSxDQUFDO2dCQUNILENBQUMsQ0FBQztnQkFDRixZQUFZLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzVFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sS0FBSyxDQUFDLE1BQXlCLEVBQUUsSUFBMkI7UUFDcEUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDO1lBRTFFLDBCQUEwQjtZQUMxQixJQUFJLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxZQUFZO1lBQ1osSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckIsaURBQWlEO2dCQUNqRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtvQkFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUU3QyxPQUFPLEVBQUUsQ0FBQztvQkFFVixzQkFBc0I7b0JBQ3RCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDckUsQ0FBQyxDQUFDO2dCQUNGLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUVELDJCQUEyQjtpQkFDdEIsQ0FBQztnQkFDSixNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBVSxJQUFzQjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDakcsT0FBTyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7d0dBdlRVLFlBQVksK0dBT2IsUUFBUTs0R0FQUCxZQUFZLGNBREMsTUFBTTs7NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFRN0IsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IE92ZXJsYXlFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zdG9yYWdlL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3JUcnVlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0Nocm9tZSB9IGZyb20gJy4uL3BsYXRmb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbnRPcHRpb25zIHtcbiAgaWQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBzaG93VG9hc3Q/OiBib29sZWFuO1xuICB0b2FzdE1lc3NhZ2U/OiBzdHJpbmc7XG4gIHN0eWxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgUFJJTlRfTE9BRElOR19TVE9SQUdFX0tFWV9QUkVGSVggPSAncHJpbnQtbG9hZGluZy0nO1xuZXhwb3J0IGNvbnN0IFBSSU5UX0lEX1FVRVJZX1BBUkFNID0gJ3ByaW50LWlkJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcmludFNlcnZpY2Uge1xuICBwcml2YXRlIF9wcmludElkID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50OiBEb2N1bWVudFxuICApIHt9XG5cbiAgbmV4dEpvYklkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICsrdGhpcy5fcHJpbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgam9iIElEIGZyb20gYSBnaXZlbiBVUkwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBVUkwgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBqb2IgSUQuIElmIG5vdCBwcm92aWRlZCwgYHdpbmRvdy5sb2NhdGlvbi5ocmVmYCB3aWxsIGJlIHVzZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gVGhlIGV4dHJhY3RlZCBqb2IgSUQgYXMgYSBudW1iZXIsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBqb2IgSUQgaXMgbm90IHByZXNlbnQgb3IgaW52YWxpZC5cbiAgICovXG4gIGdldEpvYklkKHVybD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIGNvbnN0IG1hdGNoZXMgPSB1cmwubWF0Y2goL3ByaW50LWlkPShcXGQrKS8pO1xuICAgIHJldHVybiBtYXRjaGVzPy5bMV0gfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgVVJMIG9yIHRoZSBjdXJyZW50IHBhZ2UncyBVUkwgY29udGFpbnNcbiAgICogYSBzcGVjaWZpYyBxdWVyeSBwYXJhbWV0ZXIsIGluZGljYXRpbmcgaXQncyBhIHByaW50aW5nLXJlbGF0ZWQgVVJMLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgb3B0aW9uYWwgVVJMIHRvIGNoZWNrLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IHBhZ2UncyBVUkwgaXMgdXNlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtxdWVyeVBhcmFtPSdwcmludC1pZCddIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlciB0byBsb29rIGZvciwgZGVmYXVsdGluZyB0byAncHJpbnQtaWQnLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXJ5IHBhcmFtZXRlciBpcyBmb3VuZCBpbiB0aGUgVVJMOyBvdGhlcndpc2UsIGZhbHNlLlxuICAgKi9cbiAgaXNQcmludGluZ1VybCh1cmw/OiBzdHJpbmcsIHF1ZXJ5UGFyYW06IHN0cmluZyA9ICdwcmludC1pZCcpOiBib29sZWFuIHtcbiAgICBsZXQgcXVlcnk6IHN0cmluZztcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKHVybCkpIHF1ZXJ5ID0gbmV3IFVSTCh1cmwpLnNlYXJjaDtcbiAgICBxdWVyeSA9IHF1ZXJ5IHx8IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggfHwgJz8nO1xuICAgIHJldHVybiBxdWVyeS5pbmRleE9mKHF1ZXJ5UGFyYW0pICE9PSAtMTtcbiAgfVxuXG4gIGFzeW5jIHByaW50RWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgb3B0cz86IFByaW50T3B0aW9ucyk6IFByb21pc2U8bnVtYmVyIHwgc3RyaW5nPiB7XG4gICAgaWYgKCFlbGVtZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkICdlbGVtZW50JyBhcmd1bWVudFwiKTtcblxuICAgIHJldHVybiB0aGlzLnByaW50SFRNTChlbGVtZW50LmlubmVySFRNTCwgb3B0cyk7XG4gIH1cblxuICBhc3luYyBwcmludEhUTUwoaHRtbDogc3RyaW5nLCBvcHRzPzogUHJpbnRPcHRpb25zKTogUHJvbWlzZTxudW1iZXIgfCBzdHJpbmc+IHtcbiAgICBpZiAoIWh0bWwpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgJ2h0bWwnIGFyZ3VtZW50XCIpO1xuXG4gICAgLy8gQ3JlYXRlIGlmcmFtZVxuICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuY3JlYXRlUHJpbnRJZnJhbWVCeUh0bWwoaHRtbCwgb3B0cyk7XG5cbiAgICByZXR1cm4gdGhpcy5wcmludElmcmFtZShpZnJhbWUsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaW50cyB0aGUgY29udGVudCBvZiBhIFVSTCBieSByZW5kZXJpbmcgaXQgaW4gYW4gaWZyYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgb2YgdGhlIGNvbnRlbnQgdG8gcHJpbnQuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLlxuICAgKiBAcGFyYW0ge09taXQ8UHJpbnRPcHRpb25zLCAnc3R5bGUnPn0gW29wdHNdIE9wdGlvbmFsIHNldHRpbmdzIGZvciBwcmludGluZywgZXhjbHVkaW5nIHRoZSAnc3R5bGUnIG9wdGlvbi5cbiAgICogQHJldHVybiB7UHJvbWlzZTxudW1iZXI+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgSUQgb2YgdGhlIHByaW50IGpvYi5cbiAgICovXG4gIGFzeW5jIHByaW50VXJsKHVybDogc3RyaW5nLCBvcHRzPzogT21pdDxQcmludE9wdGlvbnMsICdzdHlsZSc+KTogUHJvbWlzZTxudW1iZXIgfCBzdHJpbmc+IHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgJ3VybCcgYXJndW1lbnRcIik7XG5cbiAgICBjb25zdCBqb2JJZCA9IG9wdHM/LmlkID8/IHRoaXMubmV4dEpvYklkKCk7XG5cbiAgICAvLyBDcmVhdGUgaWZyYW1lXG4gICAgY29uc3QgaWZyYW1lID0gdGhpcy5jcmVhdGVQcmludElmcmFtZUJ5VXJsKHVybCwgeyBpZDogam9iSWQgfSk7XG5cbiAgICAvLyBMYXVuY2ggdGhlIHByaW50IGpvYlxuICAgIHJldHVybiB0aGlzLnByaW50SWZyYW1lKGlmcmFtZSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogUHJpbnRzIHRoZSBjb250ZW50IG9mIHRoZSBzcGVjaWZpZWQgaWZyYW1lIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTElGcmFtZUVsZW1lbnR9IGlmcmFtZSAtIFRoZSBpZnJhbWUgZWxlbWVudCB3aG9zZSBjb250ZW50IG5lZWRzIHRvIGJlIHByaW50ZWQuIE11c3QgYmUgYSB2YWxpZCBhbmQgbG9hZGVkIGlmcmFtZSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge1ByaW50T3B0aW9uc30gW29wdHNdIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHByaW50IG9wZXJhdGlvbiwgd2hpY2ggbWF5IGluY2x1ZGUgb3B0aW9ucyBmb3IgdG9hc3QgbWVzc2FnZXMgYW5kIGpvYiBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPG51bWJlcj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB1bmlxdWUgSUQgb2YgdGhlIHByaW50IGpvYi5cbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSByZXF1aXJlZCAnaWZyYW1lJyBhcmd1bWVudCBpcyBtaXNzaW5nIG9yIGludmFsaWQuXG4gICAqL1xuICBhc3luYyBwcmludElmcmFtZShpZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50LCBvcHRzPzogUHJpbnRPcHRpb25zKTogUHJvbWlzZTxudW1iZXIgfCBzdHJpbmc+IHtcbiAgICBpZiAoIWlmcmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCAnaWZyYW1lJyBhcmd1bWVudFwiKTtcblxuICAgIGNvbnN0IGpvYklkID0gb3B0cz8uaWQgPz8gdGhpcy5uZXh0Sm9iSWQoKTtcbiAgICBjb25zdCB0b2FzdElkID0gYHByaW50aW5nLSR7am9iSWR9YDtcbiAgICBjb25zdCBzaG93TG9hZGluZ1RvYXN0ID0gb3B0cz8uc2hvd1RvYXN0ICE9PSBmYWxzZTtcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdClcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgaWQ6IHRvYXN0SWQsXG4gICAgICAgIG1lc3NhZ2U6IG9wdHM/LnRvYXN0TWVzc2FnZSB8fCAnQ09NTU9OLlBMRUFTRV9XQUlUJyxcbiAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBXYWl0IGVuZCBvZiBpZnJhbWUgbG9hZFxuICAgICAgYXdhaXQgdGhpcy53YWl0SWRsZShpZnJhbWUsIHsgaWQ6IGpvYklkIH0pO1xuXG4gICAgICAvLyBQcmludCAoYW5kIHdhaXQgZW5kIG9mIHByaW50KVxuICAgICAgYXdhaXQgdGhpcy5wcmludChpZnJhbWUpO1xuXG4gICAgICByZXR1cm4gam9iSWQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbcHJpbnQtc2VydmljZV0gRmFpbGVkIHRvIGNyZWF0ZSBoaWRkZW4gaWZyYW1lJywgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWZyYW1lLnJlbW92ZSgpO1xuICAgICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIGF3YWl0IHRoaXMudG9hc3RDb250cm9sbGVyLmRpc21pc3MobnVsbCwgbnVsbCwgdG9hc3RJZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWFya0FzTG9hZGluZyhpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhgW3ByaW50LXNlcnZpY2VdIE1hcmsgcHJpbnQgam9iICMke2lkfSBhcyBsb2FkaW5nYCk7XG4gICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChQUklOVF9MT0FESU5HX1NUT1JBR0VfS0VZX1BSRUZJWCArIGlkLCAnMScpO1xuICB9XG5cbiAgYXN5bmMgbWFya0FzTG9hZGVkKGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBjb25zb2xlLmRlYnVnKGBbcHJpbnQtc2VydmljZV0gTWFyayBwcmludCBqb2IgIyR7aWR9IGFzIGxvYWRlZGApO1xuICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmUoUFJJTlRfTE9BRElOR19TVE9SQUdFX0tFWV9QUkVGSVggKyBpZCk7XG4gIH1cblxuICBhc3luYyBpc0xvYWRlZChpZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChQUklOVF9MT0FESU5HX1NUT1JBR0VfS0VZX1BSRUZJWCArIGlkKTtcbiAgICByZXR1cm4gaXNOaWwocmVzdWx0KTtcbiAgfVxuXG4gIGFzeW5jIGlzTG9hZGluZyhpZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuICEoYXdhaXQgdGhpcy5pc0xvYWRlZChpZCkpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIHByb3RlY3RlZCBjcmVhdGVQcmludElmcmFtZUJ5VXJsKHVybDogc3RyaW5nLCBvcHRzPzogeyBpZD86IG51bWJlciB8IHN0cmluZyB9KTogSFRNTElGcmFtZUVsZW1lbnQge1xuICAgIC8vIE1ha2Ugc3VyZSB0byBhZGQgdGhlIGpvYiBpZCBpbnNpZGUgdGhlIFVSTCAoZS5nLiB0byBhbGxvdyBnZXRKb2JJZEZyb21VcmwoKSB0byByZXRyaWV2ZSBpdClcbiAgICBpZiAoaXNOb3ROaWwob3B0cz8uaWQpKSB7XG4gICAgICBjb25zdCBuZXdVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgICBuZXdVcmwuc2VhcmNoUGFyYW1zLnNldChQUklOVF9JRF9RVUVSWV9QQVJBTSwgJycgKyBvcHRzLmlkKTtcbiAgICAgIHVybCA9IG5ld1VybC5ocmVmO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIGlmcmFtZSB3aXRoIHRoZSBnaXZlbiB1cmxcbiAgICBjb25zdCBpZnJhbWUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGlmcmFtZS5jbGFzc0xpc3QuYWRkKCdjZGstdmlzdWFsbHktaGlkZGVuJyk7XG4gICAgaWZyYW1lLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgaWZyYW1lLnNyYyA9IHVybDtcbiAgICByZXR1cm4gaWZyYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVByaW50SWZyYW1lQnlIdG1sKGh0bWw6IHN0cmluZywgb3B0cz86IHsgdGl0bGU/OiBzdHJpbmc7IGlubGluZVN0eWxlPzogc3RyaW5nIH0pOiBIVE1MSUZyYW1lRWxlbWVudCB7XG4gICAgaWYgKCFodG1sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkICdodG1sJyBhcmd1bWVudFwiKTtcblxuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8ubGFuZyB8fCAnZW4nO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGlmcmFtZVxuICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgaWZyYW1lLmNsYXNzTGlzdC5hZGQoJ2Nkay12aXN1YWxseS1oaWRkZW4nKTtcbiAgICBpZnJhbWUuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgaWZyYW1lLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcblxuICAgIC8vIFdyaXRlIGlmcmFtZSBjb250ZW50XG4gICAgY29uc3QgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudDtcbiAgICBpZiAoaWZyYW1lRG9jdW1lbnQpIHtcbiAgICAgIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgICAgIGlmcmFtZURvY3VtZW50LndyaXRlKGBcbiAgICAgICAgPCFET0NUWVBFIGh0bWw+XG4gICAgICAgIDxodG1sIGxhbmc9XCIke2xhbmd9XCIgY2xhc3M9XCJwcmludC1wZGZcIj5cbiAgICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDx0aXRsZT4ke29wdHM/LnRpdGxlIHx8ICcnfTwvdGl0bGU+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICAgICAgICBib2R5IHtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAke29wdHM/LmlubGluZVN0eWxlIHx8ICcnfVxuICAgICAgICAgIDwvc3R5bGU+XG4gICAgICAgICAgPC9oZWFkPlxuICAgICAgICAgIDxib2R5PlxuICAgICAgICAgICAgJHtodG1sfVxuICAgICAgICAgIDwvYm9keT5cbiAgICAgICAgPC9odG1sPlxuICAgICAgYCk7XG4gICAgICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIFNldCBpZnJhbWUgc3R5bGVcbiAgICAvLyBGSVhNRSAtIElnbm9yZSBzdHlsZSBpbmplY3Rpb24sIGJlY2F1c2UgaXQgZmFpbGVkIGluIEZpcmVmb3ggKGUuZy4gb24gdXNlciBtYW51YWwpIGFuZCBDaHJvbWUgKGUuZy4gaW4gcHJpdmFjeSBwb2xpY3kpXG4gICAgLy8gICAgICAgICBOb3RoaW5nIGFwcGVhciBpbiB0aGUgcHJpbnQgZGlhbG9nXG4gICAgLy90aGlzLmFwcGx5RG9jdW1lbnRTdHlsZVRvSWZyYW1lKGlmcmFtZSk7XG5cbiAgICByZXR1cm4gaWZyYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHN0eWxlcyBmcm9tIHRoZSBwcm92aWRlZCBkb2N1bWVudCwgaW5jbHVkaW5nIGV4dGVybmFsIHN0eWxlc2hlZXRzIGFuZCBpbmxpbmUgc3R5bGVzLFxuICAgKiB0byB0aGUgc3BlY2lmaWVkIGlmcmFtZSdzIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJRnJhbWVFbGVtZW50fSBpZnJhbWUgLSBUaGUgaWZyYW1lIHRvIHdoaWNoIHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQuXG4gICAqIEByZXR1cm4ge3ZvaWR9IERvZXMgbm90IHJldHVybiBhIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFwcGx5RG9jdW1lbnRTdHlsZVRvSWZyYW1lKGlmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgIGlmIChpZnJhbWVEb2N1bWVudCkge1xuICAgICAgLy8gUsOpY3Vww6lyZXIgdG91cyBsZXMgc3R5bGVzIChsaWVucyBDU1MpXG4gICAgICBjb25zdCBsaW5rcyA9IEFycmF5LmZyb20odGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZSxsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl0nKSk7XG4gICAgICBsaW5rcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIC8vIEluc2VydCBpbmxpbmUgc3R5bGVcbiAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NUWUxFJykge1xuICAgICAgICAgIGNvbnN0IG5ld1N0eWxlID0gaWZyYW1lRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICBuZXdTdHlsZS5pbm5lckhUTUwgPSBlbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICBpZnJhbWVEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5ld1N0eWxlKTtcblxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1twcmludC1zZXJ2aWNlXSBBZGQgc3R5bGUgdG8gaWZyYW1lJywgbmV3U3R5bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5zZXJ0IGxpbmsgdG8gc3R5bGVzaGVldCBmaWxlXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ0xJTksnICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJykpIHtcbiAgICAgICAgICBjb25zdCBuZXdMaW5rID0gaWZyYW1lRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgIG5ld0xpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICAgIG5ld0xpbmsuaHJlZiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgICAgaWZyYW1lRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdMaW5rKTtcblxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1twcmludC1zZXJ2aWNlXSBBZGQgc3R5bGVzaGVldCB0byBpZnJhbWU6ICcsIG5ld0xpbmsuaHJlZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB3YWl0SWRsZShpZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50LCBvcHRzPzogeyBpZD86IG51bWJlciB8IHN0cmluZzsgdGltZW91dD86IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gV2FpdCBqb2IgZmluaXNoZWRcbiAgICBjb25zdCBwcmludElkID0gb3B0cz8uaWQgPz8gdGhpcy5fcHJpbnRJZDtcbiAgICBhd2FpdCB3YWl0Rm9yVHJ1ZSh0aW1lcig1MDAsIDUwMCkucGlwZShtZXJnZU1hcCgoKSA9PiB0aGlzLmlzTG9hZGVkKHByaW50SWQpKSksIHsgdGltZW91dDogb3B0cz8udGltZW91dCB9KTtcblxuICAgIC8vIFdhaXQgZW5kIG9mIGlmcmFtZSBsb2FkXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaWZyYW1lV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c/LndpbmRvdyB8fCBpZnJhbWUuY29udGVudFdpbmRvdztcbiAgICAgIGlmIChpZnJhbWVXaW5kb3cuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdG9wIGlmIHRpbWVvdXQgcmVhY2hlZFxuICAgICAgICBpZiAob3B0cz8udGltZW91dCA+IDApIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdCgndGltZW91dCcpLCBvcHRzLnRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZHlMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoaWZyYW1lV2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICAgICAgaWZyYW1lV2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCByZWFkeUxpc3RlbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmcmFtZVdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgcmVhZHlMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgdGhlIHByaW50IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGdpdmVuIGlmcmFtZSBhbmQgcmVzb2x2ZXMgb3IgcmVqZWN0cyBiYXNlZCBvbiB0aGUgcHJpbnQgY29tcGxldGlvbiBvciB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxJRnJhbWVFbGVtZW50fSBpZnJhbWUgLSBUaGUgaWZyYW1lIGVsZW1lbnQgdG8gYmUgcHJpbnRlZC5cbiAgICogQHBhcmFtIHt7dGltZW91dD86IG51bWJlcn19IFtvcHRzXSAtIEFuIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMudGltZW91dF0gLSBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgcHJpbnQgdG8gY29tcGxldGUgYmVmb3JlIHJlamVjdGluZyB0aGUgcHJvbWlzZS5cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHByaW50IGlzIGNvbXBsZXRlZCBvciByZWplY3RzIGlmIGEgdGltZW91dCBvY2N1cnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcHJpbnQoaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCwgb3B0cz86IHsgdGltZW91dD86IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGlmcmFtZVdpbmRvdyA9IGlmcmFtZS5jb250ZW50V2luZG93Py53aW5kb3cgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3c7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGltZW91dCByZWFjaGVkXG4gICAgICBpZiAob3B0cz8udGltZW91dCA+IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QoJ3RpbWVvdXQnKSwgb3B0cy50aW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gT24gQ2hyb21lXG4gICAgICBpZiAoaXNDaHJvbWUod2luZG93KSkge1xuICAgICAgICAvLyBXYWl0IGFmdGVyIHByaW50IGV2ZW50LCB0byByZXNvbHZlIHRoZSBwcm9taXNlXG4gICAgICAgIGNvbnN0IGFmdGVyUHJpbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbcHJpbnQtc2VydmljZV0gQWZ0ZXIgcHJpbnQnKTtcblxuICAgICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbGlzdGVuZXJcbiAgICAgICAgICBpZnJhbWVXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWZ0ZXJwcmludCcsIGFmdGVyUHJpbnRMaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICAgIGlmcmFtZVdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdhZnRlcnByaW50JywgYWZ0ZXJQcmludExpc3RlbmVyKTtcbiAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cud2luZG93LnByaW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSAoZS5nLiBGaXJlZm94KVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LndpbmRvdy5wcmludCgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dUb2FzdDxUID0gYW55PihvcHRzOiBTaG93VG9hc3RPcHRpb25zKTogUHJvbWlzZTxPdmVybGF5RXZlbnREZXRhaWw8VD4+IHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnQncyBjb25zdHJ1Y3RvclwiKTtcbiAgICByZXR1cm4gYXdhaXQgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxufVxuIl19