@sumaris-net/ngx-components 2.18.0-beta9 → 2.21.0-rc1

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 (715) hide show
  1. package/README.md +3 -0
  2. package/doc/build.md +14 -14
  3. package/doc/changelog.md +1386 -88
  4. package/doc/feed/feed-en.json +26 -0
  5. package/doc/feed/feed-fr.json +28 -0
  6. package/fesm2022/sumaris-net.ngx-components.mjs +32423 -22727
  7. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  8. package/package.json +42 -39
  9. package/src/assets/environments/environment-test.json +2 -2
  10. package/src/assets/i18n/en-US.json +143 -45
  11. package/src/assets/i18n/en.json +142 -43
  12. package/src/assets/i18n/fr.json +147 -47
  13. package/src/assets/manifest.json +1 -1
  14. package/src/theme/_icons.scss +8 -12
  15. package/src/theme/_ionic.globals.scss +8 -1
  16. package/src/theme/_markdown.scss +1 -1
  17. package/src/theme/_material.globals.scss +4 -1
  18. package/src/theme/_material.scss +60 -17
  19. package/src/theme/_mixins.scss +39 -4
  20. package/src/theme/_ngx-components.forms.scss +115 -89
  21. package/src/theme/_ngx-components.globals.scss +4 -1
  22. package/src/theme/_ngx-components.scss +162 -110
  23. package/src/theme/_ngx-components.table.scss +105 -44
  24. package/src/theme/_ngx-components.tabs.scss +46 -14
  25. package/src/theme/_responsive.scss +15 -0
  26. package/src/theme/_roboto.scss +3 -0
  27. package/src/theme/_theme.scss +11 -14
  28. package/src/theme/_theme.variables.scss +7 -3
  29. package/src/theme/ionic/ionic.functions.color.scss +13 -5
  30. package/src/theme/ionic/ionic.globals.scss +4 -4
  31. package/src/theme/ionic/ionic.theme.default.scss +2 -0
  32. package/types/sumaris-net.ngx-components.d.ts +14132 -0
  33. package/esm2022/public_api.mjs +0 -358
  34. package/esm2022/src/app/admin/admin-routing.module.mjs +0 -34
  35. package/esm2022/src/app/admin/admin.module.mjs +0 -32
  36. package/esm2022/src/app/admin/services/filter/person.filter.mjs +0 -69
  37. package/esm2022/src/app/admin/services/person.service.mjs +0 -174
  38. package/esm2022/src/app/admin/services/validator/person.validator.mjs +0 -72
  39. package/esm2022/src/app/admin/users/users.mjs +0 -267
  40. package/esm2022/src/app/admin/users/users.module.mjs +0 -56
  41. package/esm2022/src/app/core/about/about.modal.mjs +0 -84
  42. package/esm2022/src/app/core/about/about.module.mjs +0 -21
  43. package/esm2022/src/app/core/account/account.module.mjs +0 -68
  44. package/esm2022/src/app/core/account/account.page.mjs +0 -351
  45. package/esm2022/src/app/core/account/new-token.modal.mjs +0 -132
  46. package/esm2022/src/app/core/account/password/change-password.form.mjs +0 -60
  47. package/esm2022/src/app/core/account/password/change-password.module.mjs +0 -22
  48. package/esm2022/src/app/core/account/password/change-password.page.mjs +0 -144
  49. package/esm2022/src/app/core/account/token.table.mjs +0 -152
  50. package/esm2022/src/app/core/auth/auth.form.mjs +0 -159
  51. package/esm2022/src/app/core/auth/auth.modal.mjs +0 -76
  52. package/esm2022/src/app/core/auth/auth.module.mjs +0 -56
  53. package/esm2022/src/app/core/auth/reset-password.modal.mjs +0 -77
  54. package/esm2022/src/app/core/core.module.mjs +0 -151
  55. package/esm2022/src/app/core/core.testing.module.mjs +0 -107
  56. package/esm2022/src/app/core/form/array/form-array.mjs +0 -325
  57. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +0 -23
  58. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +0 -94
  59. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -108
  60. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +0 -31
  61. package/esm2022/src/app/core/form/entity/editor.class.mjs +0 -265
  62. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -420
  63. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +0 -731
  64. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +0 -24
  65. package/esm2022/src/app/core/form/entity/entity.module.mjs +0 -32
  66. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +0 -194
  67. package/esm2022/src/app/core/form/form-container.class.mjs +0 -327
  68. package/esm2022/src/app/core/form/form.class.mjs +0 -336
  69. package/esm2022/src/app/core/form/form.module.mjs +0 -70
  70. package/esm2022/src/app/core/form/form.utils.mjs +0 -197
  71. package/esm2022/src/app/core/form/list/list.form.mjs +0 -235
  72. package/esm2022/src/app/core/form/list/list.module.mjs +0 -31
  73. package/esm2022/src/app/core/form/properties/properties.form.mjs +0 -225
  74. package/esm2022/src/app/core/form/properties/properties.module.mjs +0 -37
  75. package/esm2022/src/app/core/form/properties/properties.table.mjs +0 -268
  76. package/esm2022/src/app/core/form/properties/properties.utils.mjs +0 -60
  77. package/esm2022/src/app/core/form/properties/property.validator.mjs +0 -38
  78. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +0 -95
  79. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +0 -23
  80. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -73
  81. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +0 -30
  82. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +0 -152
  83. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +0 -31
  84. package/esm2022/src/app/core/form/username/username.form.mjs +0 -52
  85. package/esm2022/src/app/core/form/username/username.module.mjs +0 -20
  86. package/esm2022/src/app/core/graphql/graphql.module.mjs +0 -14
  87. package/esm2022/src/app/core/graphql/graphql.service.mjs +0 -783
  88. package/esm2022/src/app/core/graphql/graphql.utils.mjs +0 -119
  89. package/esm2022/src/app/core/home/home.mjs +0 -311
  90. package/esm2022/src/app/core/home/home.module.mjs +0 -42
  91. package/esm2022/src/app/core/icon/icon.component.mjs +0 -40
  92. package/esm2022/src/app/core/icon/icon.module.mjs +0 -20
  93. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +0 -354
  94. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +0 -31
  95. package/esm2022/src/app/core/menu/menu.component.mjs +0 -263
  96. package/esm2022/src/app/core/menu/menu.model.mjs +0 -272
  97. package/esm2022/src/app/core/menu/menu.module.mjs +0 -47
  98. package/esm2022/src/app/core/menu/menu.service.mjs +0 -655
  99. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +0 -109
  100. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +0 -49
  101. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +0 -157
  102. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +0 -60
  103. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +0 -28
  104. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +0 -31
  105. package/esm2022/src/app/core/peer/select-peer.modal.mjs +0 -203
  106. package/esm2022/src/app/core/peer/select-peer.module.mjs +0 -30
  107. package/esm2022/src/app/core/register/register-confirm.page.mjs +0 -90
  108. package/esm2022/src/app/core/register/register.form.mjs +0 -194
  109. package/esm2022/src/app/core/register/register.modal.mjs +0 -55
  110. package/esm2022/src/app/core/register/register.module.mjs +0 -23
  111. package/esm2022/src/app/core/services/account.service.mjs +0 -1346
  112. package/esm2022/src/app/core/services/auth-guard.service.mjs +0 -74
  113. package/esm2022/src/app/core/services/base-entity-service.class.mjs +0 -473
  114. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +0 -230
  115. package/esm2022/src/app/core/services/base58.mjs +0 -83
  116. package/esm2022/src/app/core/services/config/core.config.mjs +0 -233
  117. package/esm2022/src/app/core/services/config.service.mjs +0 -384
  118. package/esm2022/src/app/core/services/crypto.service.mjs +0 -107
  119. package/esm2022/src/app/core/services/errors.mjs +0 -52
  120. package/esm2022/src/app/core/services/local-settings.service.mjs +0 -482
  121. package/esm2022/src/app/core/services/model/account.model.mjs +0 -150
  122. package/esm2022/src/app/core/services/model/config.model.mjs +0 -107
  123. package/esm2022/src/app/core/services/model/department.model.mjs +0 -35
  124. package/esm2022/src/app/core/services/model/entity.decorators.mjs +0 -97
  125. package/esm2022/src/app/core/services/model/entity.model.mjs +0 -224
  126. package/esm2022/src/app/core/services/model/filter.model.mjs +0 -93
  127. package/esm2022/src/app/core/services/model/history.model.mjs +0 -2
  128. package/esm2022/src/app/core/services/model/model.enum.mjs +0 -11
  129. package/esm2022/src/app/core/services/model/peer.model.mjs +0 -93
  130. package/esm2022/src/app/core/services/model/person.model.mjs +0 -114
  131. package/esm2022/src/app/core/services/model/referential.model.mjs +0 -202
  132. package/esm2022/src/app/core/services/model/settings.model.mjs +0 -4
  133. package/esm2022/src/app/core/services/model/token.model.mjs +0 -56
  134. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +0 -195
  135. package/esm2022/src/app/core/services/network.service.mjs +0 -631
  136. package/esm2022/src/app/core/services/network.types.mjs +0 -20
  137. package/esm2022/src/app/core/services/network.utils.mjs +0 -15
  138. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +0 -38
  139. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +0 -23
  140. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +0 -23
  141. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +0 -54
  142. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +0 -21
  143. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +0 -37
  144. package/esm2022/src/app/core/services/platform.service.mjs +0 -583
  145. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +0 -427
  146. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +0 -449
  147. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +0 -25
  148. package/esm2022/src/app/core/services/testing/referential.validator.mjs +0 -46
  149. package/esm2022/src/app/core/services/validator/account.validator.mjs +0 -45
  150. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +0 -49
  151. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +0 -81
  152. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +0 -27
  153. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +0 -55
  154. package/esm2022/src/app/core/settings/settings.module.mjs +0 -22
  155. package/esm2022/src/app/core/settings/settings.page.mjs +0 -341
  156. package/esm2022/src/app/core/table/async-table.class.mjs +0 -1753
  157. package/esm2022/src/app/core/table/column/actions-column.component.mjs +0 -127
  158. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +0 -117
  159. package/esm2022/src/app/core/table/column/row-field.component.mjs +0 -116
  160. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
  161. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +0 -401
  162. package/esm2022/src/app/core/table/memory-table.class.mjs +0 -57
  163. package/esm2022/src/app/core/table/table-select-columns.component.mjs +0 -46
  164. package/esm2022/src/app/core/table/table.class.mjs +0 -1816
  165. package/esm2022/src/app/core/table/table.model.mjs +0 -16
  166. package/esm2022/src/app/core/table/table.module.mjs +0 -51
  167. package/esm2022/src/app/core/table/table.pipes.mjs +0 -77
  168. package/esm2022/src/app/core/table/table.utils.mjs +0 -31
  169. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +0 -32
  170. package/esm2022/src/app/core/table/testing/table.testing.mjs +0 -329
  171. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +0 -25
  172. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +0 -25
  173. package/esm2022/src/app/core/table/testing/table2.testing.mjs +0 -273
  174. package/esm2022/src/app/shared/alerts.mjs +0 -243
  175. package/esm2022/src/app/shared/audio/audio.mjs +0 -249
  176. package/esm2022/src/app/shared/audio/audio.testing.mjs +0 -32
  177. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +0 -30
  178. package/esm2022/src/app/shared/capacitor/keyboard.mjs +0 -42
  179. package/esm2022/src/app/shared/capacitor/plugins.mjs +0 -9
  180. package/esm2022/src/app/shared/constants.mjs +0 -16
  181. package/esm2022/src/app/shared/dates.mjs +0 -151
  182. package/esm2022/src/app/shared/debug/debug-service.class.mjs +0 -3
  183. package/esm2022/src/app/shared/debug/debug.component.mjs +0 -40
  184. package/esm2022/src/app/shared/debug/debug.module.mjs +0 -23
  185. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +0 -91
  186. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +0 -32
  187. package/esm2022/src/app/shared/directives/directives.module.mjs +0 -22
  188. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +0 -52
  189. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +0 -33
  190. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +0 -62
  191. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +0 -45
  192. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +0 -17
  193. package/esm2022/src/app/shared/events.mjs +0 -63
  194. package/esm2022/src/app/shared/file/csv.utils.mjs +0 -92
  195. package/esm2022/src/app/shared/file/file.service.mjs +0 -118
  196. package/esm2022/src/app/shared/file/file.utils.mjs +0 -115
  197. package/esm2022/src/app/shared/file/images.utils.mjs +0 -186
  198. package/esm2022/src/app/shared/file/json.utils.mjs +0 -58
  199. package/esm2022/src/app/shared/file/uri.utils.mjs +0 -24
  200. package/esm2022/src/app/shared/focusable.mjs +0 -6
  201. package/esm2022/src/app/shared/form/field.component.mjs +0 -379
  202. package/esm2022/src/app/shared/form/field.model.mjs +0 -25
  203. package/esm2022/src/app/shared/form/loading-spinner.mjs +0 -35
  204. package/esm2022/src/app/shared/forms.mjs +0 -480
  205. package/esm2022/src/app/shared/functions.mjs +0 -551
  206. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +0 -82
  207. package/esm2022/src/app/shared/gesture/gesture-config.mjs +0 -46
  208. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +0 -2
  209. package/esm2022/src/app/shared/graph/colors.utils.mjs +0 -60
  210. package/esm2022/src/app/shared/graph/graph-colors.mjs +0 -213
  211. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +0 -59
  212. package/esm2022/src/app/shared/help/help.modal.mjs +0 -63
  213. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  214. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +0 -112
  215. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +0 -24
  216. package/esm2022/src/app/shared/http/http.utils.mjs +0 -56
  217. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +0 -388
  218. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +0 -62
  219. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -26
  220. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -87
  221. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -37
  222. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +0 -59
  223. package/esm2022/src/app/shared/image/image.model.mjs +0 -2
  224. package/esm2022/src/app/shared/image/image.module.mjs +0 -24
  225. package/esm2022/src/app/shared/image/image.service.mjs +0 -106
  226. package/esm2022/src/app/shared/inputs.mjs +0 -263
  227. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  228. package/esm2022/src/app/shared/logging/log-level.model.mjs +0 -48
  229. package/esm2022/src/app/shared/logging/logger.model.mjs +0 -47
  230. package/esm2022/src/app/shared/logging/logging-service.class.mjs +0 -125
  231. package/esm2022/src/app/shared/logging/logging-service.config.mjs +0 -2
  232. package/esm2022/src/app/shared/logging/logging-service.module.mjs +0 -30
  233. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -46
  234. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -1071
  235. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -79
  236. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -18
  237. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -231
  238. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +0 -251
  239. package/esm2022/src/app/shared/material/badge/badge.module.mjs +0 -20
  240. package/esm2022/src/app/shared/material/badge/badge.test.mjs +0 -42
  241. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +0 -71
  242. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -376
  243. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +0 -61
  244. package/esm2022/src/app/shared/material/chips/chips.module.mjs +0 -75
  245. package/esm2022/src/app/shared/material/chips/material.chips.mjs +0 -779
  246. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +0 -147
  247. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +0 -76
  248. package/esm2022/src/app/shared/material/datetime/material.date.mjs +0 -471
  249. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +0 -457
  250. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +0 -681
  251. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -136
  252. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -127
  253. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -118
  254. package/esm2022/src/app/shared/material/duration/duration.module.mjs +0 -65
  255. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +0 -33
  256. package/esm2022/src/app/shared/material/duration/material.duration.mjs +0 -274
  257. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +0 -80
  258. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +0 -313
  259. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +0 -381
  260. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
  261. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -118
  262. package/esm2022/src/app/shared/material/material.animations.mjs +0 -143
  263. package/esm2022/src/app/shared/material/material.config.mjs +0 -3
  264. package/esm2022/src/app/shared/material/material.module.mjs +0 -229
  265. package/esm2022/src/app/shared/material/material.testing.module.mjs +0 -234
  266. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -51
  267. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -23
  268. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +0 -375
  269. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  270. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -67
  271. package/esm2022/src/app/shared/material/testing/common.test.mjs +0 -111
  272. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +0 -42
  273. package/esm2022/src/app/shared/material/text/text-form.component.mjs +0 -204
  274. package/esm2022/src/app/shared/material/text/text-form.module.mjs +0 -63
  275. package/esm2022/src/app/shared/modules.mjs +0 -12
  276. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -303
  277. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +0 -49
  278. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +0 -24
  279. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +0 -69
  280. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +0 -74
  281. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +0 -28
  282. package/esm2022/src/app/shared/observables.mjs +0 -100
  283. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +0 -156
  284. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +0 -24
  285. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +0 -29
  286. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -49
  287. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +0 -72
  288. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +0 -28
  289. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +0 -36
  290. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +0 -53
  291. package/esm2022/src/app/shared/pipes/form.pipes.mjs +0 -219
  292. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +0 -48
  293. package/esm2022/src/app/shared/pipes/html.pipes.mjs +0 -52
  294. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +0 -42
  295. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +0 -63
  296. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +0 -67
  297. package/esm2022/src/app/shared/pipes/math.pipes.mjs +0 -59
  298. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +0 -19
  299. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +0 -30
  300. package/esm2022/src/app/shared/pipes/pipes.module.mjs +0 -236
  301. package/esm2022/src/app/shared/pipes/property.pipes.mjs +0 -136
  302. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +0 -180
  303. package/esm2022/src/app/shared/pipes/string.pipes.mjs +0 -136
  304. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +0 -44
  305. package/esm2022/src/app/shared/pipes/types.pipes.mjs +0 -74
  306. package/esm2022/src/app/shared/platforms.mjs +0 -45
  307. package/esm2022/src/app/shared/rx-state.module.mjs +0 -19
  308. package/esm2022/src/app/shared/services/entity-service.class.mjs +0 -7
  309. package/esm2022/src/app/shared/services/job.utils.mjs +0 -92
  310. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +0 -349
  311. package/esm2022/src/app/shared/services/progress-bar.service.mjs +0 -31
  312. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +0 -118
  313. package/esm2022/src/app/shared/services/startable-service.class.mjs +0 -107
  314. package/esm2022/src/app/shared/services/translate-context.service.mjs +0 -107
  315. package/esm2022/src/app/shared/services/validator-service.class.mjs +0 -2
  316. package/esm2022/src/app/shared/services.mjs +0 -62
  317. package/esm2022/src/app/shared/shared-routing.module.mjs +0 -72
  318. package/esm2022/src/app/shared/shared.module.mjs +0 -234
  319. package/esm2022/src/app/shared/shared.testing.module.mjs +0 -100
  320. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +0 -279
  321. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +0 -42
  322. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +0 -27
  323. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +0 -25
  324. package/esm2022/src/app/shared/storage/storage.service.mjs +0 -134
  325. package/esm2022/src/app/shared/storage/storage.utils.mjs +0 -13
  326. package/esm2022/src/app/shared/testing/maskito.test.mjs +0 -41
  327. package/esm2022/src/app/shared/testing/observable.test.mjs +0 -94
  328. package/esm2022/src/app/shared/testing/tests.page.mjs +0 -37
  329. package/esm2022/src/app/shared/toast/toast.testing.mjs +0 -52
  330. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +0 -30
  331. package/esm2022/src/app/shared/toast/toasts.mjs +0 -144
  332. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +0 -62
  333. package/esm2022/src/app/shared/toolbar/toolbar.mjs +0 -263
  334. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +0 -26
  335. package/esm2022/src/app/shared/types.mjs +0 -2
  336. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -59
  337. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +0 -30
  338. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -106
  339. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +0 -213
  340. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +0 -26
  341. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +0 -114
  342. package/esm2022/src/app/shared/validator/validators.mjs +0 -601
  343. package/esm2022/src/app/shared/version/versions.mjs +0 -81
  344. package/esm2022/src/app/social/job/job.module.mjs +0 -23
  345. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +0 -35
  346. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +0 -235
  347. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +0 -47
  348. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +0 -29
  349. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +0 -91
  350. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +0 -38
  351. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +0 -34
  352. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +0 -22
  353. package/esm2022/src/app/social/message/message.form.mjs +0 -140
  354. package/esm2022/src/app/social/message/message.modal.mjs +0 -110
  355. package/esm2022/src/app/social/message/message.model.mjs +0 -75
  356. package/esm2022/src/app/social/message/message.module.mjs +0 -22
  357. package/esm2022/src/app/social/message/message.service.mjs +0 -110
  358. package/esm2022/src/app/social/social.errors.mjs +0 -10
  359. package/esm2022/src/app/social/social.module.mjs +0 -22
  360. package/esm2022/src/app/social/social.testing.module.mjs +0 -40
  361. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -127
  362. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -260
  363. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +0 -257
  364. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -129
  365. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +0 -22
  366. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -128
  367. package/esm2022/src/app/social/user-event/user-event.model.mjs +0 -2
  368. package/esm2022/src/app/social/user-event/user-event.module.mjs +0 -23
  369. package/esm2022/src/app/social/user-event/user-event.service.mjs +0 -509
  370. package/esm2022/src/environments/environment.class.mjs +0 -57
  371. package/esm2022/src/environments/environment.loader.mjs +0 -77
  372. package/esm2022/src/environments/environment.mjs +0 -105
  373. package/esm2022/sumaris-net.ngx-components.mjs +0 -5
  374. package/index.d.ts +0 -5
  375. package/public_api.d.ts +0 -322
  376. package/src/app/admin/admin-routing.module.d.ts +0 -9
  377. package/src/app/admin/admin.module.d.ts +0 -10
  378. package/src/app/admin/services/filter/person.filter.d.ts +0 -21
  379. package/src/app/admin/services/person.service.d.ts +0 -49
  380. package/src/app/admin/services/validator/person.validator.d.ts +0 -23
  381. package/src/app/admin/users/users.d.ts +0 -45
  382. package/src/app/admin/users/users.module.d.ts +0 -14
  383. package/src/app/core/about/about.modal.d.ts +0 -32
  384. package/src/app/core/about/about.module.d.ts +0 -10
  385. package/src/app/core/account/account.module.d.ts +0 -16
  386. package/src/app/core/account/account.page.d.ts +0 -80
  387. package/src/app/core/account/new-token.modal.d.ts +0 -41
  388. package/src/app/core/account/password/change-password.form.d.ts +0 -19
  389. package/src/app/core/account/password/change-password.module.d.ts +0 -11
  390. package/src/app/core/account/password/change-password.page.d.ts +0 -36
  391. package/src/app/core/account/token.table.d.ts +0 -27
  392. package/src/app/core/auth/auth.form.d.ts +0 -38
  393. package/src/app/core/auth/auth.modal.d.ts +0 -24
  394. package/src/app/core/auth/auth.module.d.ts +0 -13
  395. package/src/app/core/auth/reset-password.modal.d.ts +0 -26
  396. package/src/app/core/core.module.d.ts +0 -28
  397. package/src/app/core/core.testing.module.d.ts +0 -15
  398. package/src/app/core/form/array/form-array.d.ts +0 -136
  399. package/src/app/core/form/array/testing/form-array-test.module.d.ts +0 -12
  400. package/src/app/core/form/array/testing/form-array.test.d.ts +0 -26
  401. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +0 -37
  402. package/src/app/core/form/buttons/form-buttons-bar.module.d.ts +0 -9
  403. package/src/app/core/form/entity/editor.class.d.ts +0 -83
  404. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -126
  405. package/src/app/core/form/entity/entity-editor.class.d.ts +0 -204
  406. package/src/app/core/form/entity/entity-metadata.component.d.ts +0 -13
  407. package/src/app/core/form/entity/entity.module.d.ts +0 -10
  408. package/src/app/core/form/entity/tab-editor.class.d.ts +0 -70
  409. package/src/app/core/form/form-container.class.d.ts +0 -126
  410. package/src/app/core/form/form.class.d.ts +0 -144
  411. package/src/app/core/form/form.module.d.ts +0 -14
  412. package/src/app/core/form/form.utils.d.ts +0 -251
  413. package/src/app/core/form/list/list.form.d.ts +0 -81
  414. package/src/app/core/form/list/list.module.d.ts +0 -9
  415. package/src/app/core/form/properties/properties.form.d.ts +0 -66
  416. package/src/app/core/form/properties/properties.module.d.ts +0 -11
  417. package/src/app/core/form/properties/properties.table.d.ts +0 -78
  418. package/src/app/core/form/properties/properties.utils.d.ts +0 -27
  419. package/src/app/core/form/properties/property.validator.d.ts +0 -19
  420. package/src/app/core/form/properties/testing/properties-form.test.d.ts +0 -19
  421. package/src/app/core/form/properties/testing/properties-form.testing.module.d.ts +0 -12
  422. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +0 -16
  423. package/src/app/core/form/text-popover/testing/text-popover.testing.module.d.ts +0 -11
  424. package/src/app/core/form/text-popover/text-popover.component.d.ts +0 -71
  425. package/src/app/core/form/text-popover/text-popover.module.d.ts +0 -9
  426. package/src/app/core/form/username/username.form.d.ts +0 -19
  427. package/src/app/core/form/username/username.module.d.ts +0 -9
  428. package/src/app/core/graphql/graphql.module.d.ts +0 -7
  429. package/src/app/core/graphql/graphql.service.d.ts +0 -147
  430. package/src/app/core/graphql/graphql.utils.d.ts +0 -42
  431. package/src/app/core/home/home.d.ts +0 -94
  432. package/src/app/core/home/home.module.d.ts +0 -13
  433. package/src/app/core/icon/icon.component.d.ts +0 -13
  434. package/src/app/core/icon/icon.module.d.ts +0 -9
  435. package/src/app/core/install/install-upgrade-card.component.d.ts +0 -64
  436. package/src/app/core/install/install-upgrade-card.module.d.ts +0 -9
  437. package/src/app/core/menu/menu.component.d.ts +0 -69
  438. package/src/app/core/menu/menu.model.d.ts +0 -144
  439. package/src/app/core/menu/menu.module.d.ts +0 -12
  440. package/src/app/core/menu/menu.service.d.ts +0 -94
  441. package/src/app/core/menu/sub-menu-tab.directive.d.ts +0 -29
  442. package/src/app/core/menu/testing/menu-other.testing.d.ts +0 -15
  443. package/src/app/core/menu/testing/menu.testing.d.ts +0 -51
  444. package/src/app/core/menu/testing/menu.testing.module.d.ts +0 -12
  445. package/src/app/core/offline/update-offline-mode-card.component.d.ts +0 -11
  446. package/src/app/core/offline/update-offline-mode-card.module.d.ts +0 -9
  447. package/src/app/core/peer/select-peer.modal.d.ts +0 -60
  448. package/src/app/core/peer/select-peer.module.d.ts +0 -10
  449. package/src/app/core/register/register-confirm.page.d.ts +0 -24
  450. package/src/app/core/register/register.form.d.ts +0 -49
  451. package/src/app/core/register/register.modal.d.ts +0 -14
  452. package/src/app/core/register/register.module.d.ts +0 -12
  453. package/src/app/core/services/account.service.d.ts +0 -205
  454. package/src/app/core/services/auth-guard.service.d.ts +0 -17
  455. package/src/app/core/services/base-entity-service.class.d.ts +0 -123
  456. package/src/app/core/services/base-graphql-service.class.d.ts +0 -77
  457. package/src/app/core/services/base58.d.ts +0 -7
  458. package/src/app/core/services/config/core.config.d.ts +0 -41
  459. package/src/app/core/services/config.service.d.ts +0 -63
  460. package/src/app/core/services/crypto.service.d.ts +0 -44
  461. package/src/app/core/services/errors.d.ts +0 -63
  462. package/src/app/core/services/local-settings.service.d.ts +0 -95
  463. package/src/app/core/services/model/account.model.d.ts +0 -41
  464. package/src/app/core/services/model/config.model.d.ts +0 -36
  465. package/src/app/core/services/model/department.model.d.ts +0 -11
  466. package/src/app/core/services/model/entity.decorators.d.ts +0 -17
  467. package/src/app/core/services/model/entity.model.d.ts +0 -87
  468. package/src/app/core/services/model/filter.model.d.ts +0 -37
  469. package/src/app/core/services/model/history.model.d.ts +0 -20
  470. package/src/app/core/services/model/model.enum.d.ts +0 -7
  471. package/src/app/core/services/model/peer.model.d.ts +0 -30
  472. package/src/app/core/services/model/person.model.d.ts +0 -37
  473. package/src/app/core/services/model/referential.model.d.ts +0 -83
  474. package/src/app/core/services/model/settings.model.d.ts +0 -28
  475. package/src/app/core/services/model/token.model.d.ts +0 -22
  476. package/src/app/core/services/model/tree-item-entity.model.d.ts +0 -53
  477. package/src/app/core/services/network.service.d.ts +0 -151
  478. package/src/app/core/services/network.types.d.ts +0 -5
  479. package/src/app/core/services/network.utils.d.ts +0 -31
  480. package/src/app/core/services/pipes/account.pipes.d.ts +0 -15
  481. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +0 -9
  482. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +0 -11
  483. package/src/app/core/services/pipes/pipes.module.d.ts +0 -11
  484. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +0 -13
  485. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +0 -15
  486. package/src/app/core/services/platform.service.d.ts +0 -100
  487. package/src/app/core/services/storage/entities-storage.service.d.ts +0 -108
  488. package/src/app/core/services/storage/entity-store.class.d.ts +0 -113
  489. package/src/app/core/services/testing/referential-filter.model.d.ts +0 -9
  490. package/src/app/core/services/testing/referential.validator.d.ts +0 -22
  491. package/src/app/core/services/validator/account.validator.d.ts +0 -24
  492. package/src/app/core/services/validator/base.validator.class.d.ts +0 -21
  493. package/src/app/core/services/validator/local-settings.validator.d.ts +0 -22
  494. package/src/app/core/services/validator/user-settings.validator.d.ts +0 -10
  495. package/src/app/core/services/validator/user-token.validator.d.ts +0 -13
  496. package/src/app/core/settings/settings.module.d.ts +0 -11
  497. package/src/app/core/settings/settings.page.d.ts +0 -81
  498. package/src/app/core/table/async-table.class.d.ts +0 -389
  499. package/src/app/core/table/column/actions-column.component.d.ts +0 -59
  500. package/src/app/core/table/column/nav-actions-column.component.d.ts +0 -46
  501. package/src/app/core/table/column/row-field.component.d.ts +0 -40
  502. package/src/app/core/table/entities-async-table-datasource.class.d.ts +0 -81
  503. package/src/app/core/table/entities-table-datasource.class.d.ts +0 -95
  504. package/src/app/core/table/memory-table.class.d.ts +0 -25
  505. package/src/app/core/table/table-select-columns.component.d.ts +0 -22
  506. package/src/app/core/table/table.class.d.ts +0 -394
  507. package/src/app/core/table/table.model.d.ts +0 -26
  508. package/src/app/core/table/table.module.d.ts +0 -14
  509. package/src/app/core/table/table.pipes.d.ts +0 -28
  510. package/src/app/core/table/table.utils.d.ts +0 -11
  511. package/src/app/core/table/testing/table-validator.service.d.ts +0 -17
  512. package/src/app/core/table/testing/table.testing.d.ts +0 -54
  513. package/src/app/core/table/testing/table.testing.module.d.ts +0 -14
  514. package/src/app/core/table/testing/table2-validator.service.d.ts +0 -15
  515. package/src/app/core/table/testing/table2.testing.d.ts +0 -48
  516. package/src/app/shared/alerts.d.ts +0 -55
  517. package/src/app/shared/audio/audio.d.ts +0 -44
  518. package/src/app/shared/audio/audio.testing.d.ts +0 -13
  519. package/src/app/shared/audio/audio.testing.module.d.ts +0 -11
  520. package/src/app/shared/capacitor/keyboard.d.ts +0 -16
  521. package/src/app/shared/capacitor/plugins.d.ts +0 -7
  522. package/src/app/shared/constants.d.ts +0 -13
  523. package/src/app/shared/dates.d.ts +0 -48
  524. package/src/app/shared/debug/debug-service.class.d.ts +0 -5
  525. package/src/app/shared/debug/debug.component.d.ts +0 -13
  526. package/src/app/shared/debug/debug.module.d.ts +0 -12
  527. package/src/app/shared/directives/autofocus.directive.d.ts +0 -18
  528. package/src/app/shared/directives/autotitle.directive.d.ts +0 -10
  529. package/src/app/shared/directives/directives.module.d.ts +0 -12
  530. package/src/app/shared/directives/drag-and-drop.directive.d.ts +0 -17
  531. package/src/app/shared/directives/ng-var.directive.d.ts +0 -12
  532. package/src/app/shared/directives/resizable/resizable.component.d.ts +0 -21
  533. package/src/app/shared/directives/resizable/resizable.directive.d.ts +0 -12
  534. package/src/app/shared/directives/resizable/resizable.module.d.ts +0 -8
  535. package/src/app/shared/events.d.ts +0 -28
  536. package/src/app/shared/file/csv.utils.d.ts +0 -24
  537. package/src/app/shared/file/file.service.d.ts +0 -23
  538. package/src/app/shared/file/file.utils.d.ts +0 -20
  539. package/src/app/shared/file/images.utils.d.ts +0 -36
  540. package/src/app/shared/file/json.utils.d.ts +0 -19
  541. package/src/app/shared/file/uri.utils.d.ts +0 -8
  542. package/src/app/shared/focusable.d.ts +0 -4
  543. package/src/app/shared/form/field.component.d.ts +0 -74
  544. package/src/app/shared/form/field.model.d.ts +0 -39
  545. package/src/app/shared/form/loading-spinner.d.ts +0 -8
  546. package/src/app/shared/forms.d.ts +0 -118
  547. package/src/app/shared/functions.d.ts +0 -152
  548. package/src/app/shared/geolocation/geolocation.utils.d.ts +0 -19
  549. package/src/app/shared/gesture/gesture-config.d.ts +0 -15
  550. package/src/app/shared/gesture/hammer.utils.d.ts +0 -16
  551. package/src/app/shared/graph/colors.utils.d.ts +0 -17
  552. package/src/app/shared/graph/graph-colors.d.ts +0 -63
  553. package/src/app/shared/guard/component-dirty.guard.d.ts +0 -14
  554. package/src/app/shared/help/help.modal.d.ts +0 -33
  555. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +0 -8
  556. package/src/app/shared/hotkeys/hotkeys.service.d.ts +0 -42
  557. package/src/app/shared/hotkeys/shared-hotkeys.module.d.ts +0 -11
  558. package/src/app/shared/http/http.utils.d.ts +0 -28
  559. package/src/app/shared/image/gallery/image-gallery.component.d.ts +0 -98
  560. package/src/app/shared/image/gallery/image-gallery.module.d.ts +0 -15
  561. package/src/app/shared/image/gallery/testing/gallegry.model.testing.d.ts +0 -12
  562. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +0 -33
  563. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +0 -16
  564. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +0 -13
  565. package/src/app/shared/image/image.model.d.ts +0 -5
  566. package/src/app/shared/image/image.module.d.ts +0 -8
  567. package/src/app/shared/image/image.service.d.ts +0 -32
  568. package/src/app/shared/inputs.d.ts +0 -34
  569. package/src/app/shared/interceptors/progess.interceptor.d.ts +0 -8
  570. package/src/app/shared/logging/log-level.model.d.ts +0 -38
  571. package/src/app/shared/logging/logger.model.d.ts +0 -68
  572. package/src/app/shared/logging/logging-service.class.d.ts +0 -39
  573. package/src/app/shared/logging/logging-service.config.d.ts +0 -25
  574. package/src/app/shared/logging/logging-service.module.d.ts +0 -9
  575. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +0 -55
  576. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +0 -180
  577. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +0 -22
  578. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +0 -5
  579. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +0 -46
  580. package/src/app/shared/material/badge/badge.directive.d.ts +0 -43
  581. package/src/app/shared/material/badge/badge.module.d.ts +0 -10
  582. package/src/app/shared/material/badge/badge.test.d.ts +0 -21
  583. package/src/app/shared/material/boolean/boolean.module.d.ts +0 -21
  584. package/src/app/shared/material/boolean/material.boolean.d.ts +0 -93
  585. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +0 -22
  586. package/src/app/shared/material/chips/chips.module.d.ts +0 -22
  587. package/src/app/shared/material/chips/material.chips.d.ts +0 -150
  588. package/src/app/shared/material/chips/testing/chips.test.d.ts +0 -32
  589. package/src/app/shared/material/datetime/datetime.module.d.ts +0 -24
  590. package/src/app/shared/material/datetime/material.date.d.ts +0 -90
  591. package/src/app/shared/material/datetime/material.dateshort.d.ts +0 -89
  592. package/src/app/shared/material/datetime/material.datetime.d.ts +0 -121
  593. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +0 -37
  594. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +0 -32
  595. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +0 -31
  596. package/src/app/shared/material/duration/duration.module.d.ts +0 -19
  597. package/src/app/shared/material/duration/duration.utils.d.ts +0 -3
  598. package/src/app/shared/material/duration/material.duration.d.ts +0 -58
  599. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +0 -22
  600. package/src/app/shared/material/latlong/latlong.utils.d.ts +0 -21
  601. package/src/app/shared/material/latlong/material.latlong.d.ts +0 -70
  602. package/src/app/shared/material/latlong/material.latlong.module.d.ts +0 -20
  603. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +0 -27
  604. package/src/app/shared/material/material.animations.d.ts +0 -6
  605. package/src/app/shared/material/material.config.d.ts +0 -3
  606. package/src/app/shared/material/material.module.d.ts +0 -45
  607. package/src/app/shared/material/material.testing.module.d.ts +0 -31
  608. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -12
  609. package/src/app/shared/material/stepper/material.stepper-i18n.d.ts +0 -10
  610. package/src/app/shared/material/swipe/material.swipe.d.ts +0 -90
  611. package/src/app/shared/material/swipe/swipe.module.d.ts +0 -16
  612. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +0 -22
  613. package/src/app/shared/material/testing/common.test.d.ts +0 -25
  614. package/src/app/shared/material/text/testing/text-form.testing.d.ts +0 -19
  615. package/src/app/shared/material/text/text-form.component.d.ts +0 -66
  616. package/src/app/shared/material/text/text-form.module.d.ts +0 -16
  617. package/src/app/shared/modules.d.ts +0 -9
  618. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +0 -60
  619. package/src/app/shared/named-filter/named-filter.model.d.ts +0 -32
  620. package/src/app/shared/named-filter/named-filter.module.d.ts +0 -13
  621. package/src/app/shared/named-filter/named-filter.service.d.ts +0 -32
  622. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +0 -34
  623. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +0 -10
  624. package/src/app/shared/observables.d.ts +0 -30
  625. package/src/app/shared/pipes/arrays.pipe.d.ts +0 -59
  626. package/src/app/shared/pipes/badge.pipes.d.ts +0 -7
  627. package/src/app/shared/pipes/colors.pipe.d.ts +0 -9
  628. package/src/app/shared/pipes/date-diff-duration.pipe.d.ts +0 -23
  629. package/src/app/shared/pipes/date-format.pipe.d.ts +0 -35
  630. package/src/app/shared/pipes/date-from-now.pipe.d.ts +0 -12
  631. package/src/app/shared/pipes/duration.pipe.d.ts +0 -13
  632. package/src/app/shared/pipes/file-size.pipe.d.ts +0 -30
  633. package/src/app/shared/pipes/form.pipes.d.ts +0 -69
  634. package/src/app/shared/pipes/highlight.pipe.d.ts +0 -11
  635. package/src/app/shared/pipes/html.pipes.d.ts +0 -15
  636. package/src/app/shared/pipes/latlong-format.pipe.d.ts +0 -20
  637. package/src/app/shared/pipes/maps.pipe.d.ts +0 -22
  638. package/src/app/shared/pipes/maskito.pipe.d.ts +0 -14
  639. package/src/app/shared/pipes/math.pipes.d.ts +0 -20
  640. package/src/app/shared/pipes/ng-init.pipe.d.ts +0 -8
  641. package/src/app/shared/pipes/number-format.pipe.d.ts +0 -10
  642. package/src/app/shared/pipes/pipes.module.d.ts +0 -31
  643. package/src/app/shared/pipes/property.pipes.d.ts +0 -47
  644. package/src/app/shared/pipes/selection.pipes.d.ts +0 -62
  645. package/src/app/shared/pipes/string.pipes.d.ts +0 -53
  646. package/src/app/shared/pipes/translate-context.pipe.d.ts +0 -17
  647. package/src/app/shared/pipes/types.pipes.d.ts +0 -30
  648. package/src/app/shared/platforms.d.ts +0 -8
  649. package/src/app/shared/rx-state.module.d.ts +0 -10
  650. package/src/app/shared/services/entity-service.class.d.ts +0 -71
  651. package/src/app/shared/services/job.utils.d.ts +0 -20
  652. package/src/app/shared/services/memory-entity-service.class.d.ts +0 -78
  653. package/src/app/shared/services/progress-bar.service.d.ts +0 -20
  654. package/src/app/shared/services/startable-observable-service.class.d.ts +0 -36
  655. package/src/app/shared/services/startable-service.class.d.ts +0 -37
  656. package/src/app/shared/services/translate-context.service.d.ts +0 -29
  657. package/src/app/shared/services/validator-service.class.d.ts +0 -11
  658. package/src/app/shared/services.d.ts +0 -10
  659. package/src/app/shared/shared-routing.module.d.ts +0 -23
  660. package/src/app/shared/shared.module.d.ts +0 -34
  661. package/src/app/shared/shared.testing.module.d.ts +0 -19
  662. package/src/app/shared/storage/storage-explorer.component.d.ts +0 -59
  663. package/src/app/shared/storage/storage-explorer.module.d.ts +0 -13
  664. package/src/app/shared/storage/storage-explorer.testing-routing.module.d.ts +0 -9
  665. package/src/app/shared/storage/storage-explorer.testing.module.d.ts +0 -10
  666. package/src/app/shared/storage/storage.service.d.ts +0 -22
  667. package/src/app/shared/storage/storage.utils.d.ts +0 -19
  668. package/src/app/shared/testing/maskito.test.d.ts +0 -10
  669. package/src/app/shared/testing/observable.test.d.ts +0 -25
  670. package/src/app/shared/testing/tests.page.d.ts +0 -20
  671. package/src/app/shared/toast/toast.testing.d.ts +0 -15
  672. package/src/app/shared/toast/toast.testing.module.d.ts +0 -11
  673. package/src/app/shared/toast/toasts.d.ts +0 -17
  674. package/src/app/shared/toolbar/modal-toolbar.d.ts +0 -21
  675. package/src/app/shared/toolbar/toolbar.d.ts +0 -68
  676. package/src/app/shared/toolbar/toolbar.module.d.ts +0 -16
  677. package/src/app/shared/types.d.ts +0 -31
  678. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +0 -21
  679. package/src/app/shared/upload-file/testing/upload-file.testing.module.d.ts +0 -11
  680. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +0 -39
  681. package/src/app/shared/upload-file/upload-file.component.d.ts +0 -49
  682. package/src/app/shared/upload-file/upload-file.model.d.ts +0 -30
  683. package/src/app/shared/validator/form-error-adapter.class.d.ts +0 -33
  684. package/src/app/shared/validator/validators.d.ts +0 -130
  685. package/src/app/shared/version/versions.d.ts +0 -26
  686. package/src/app/social/job/job.module.d.ts +0 -12
  687. package/src/app/social/job/progression/job-progression.component.d.ts +0 -23
  688. package/src/app/social/job/progression/job-progression.icon.d.ts +0 -62
  689. package/src/app/social/job/progression/job-progression.list.d.ts +0 -19
  690. package/src/app/social/job/progression/job-progression.model.d.ts +0 -10
  691. package/src/app/social/job/progression/job-progression.service.d.ts +0 -33
  692. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -13
  693. package/src/app/social/job/testing/job-progression.testing.service.d.ts +0 -9
  694. package/src/app/social/job/testing/job.testing.module.d.ts +0 -11
  695. package/src/app/social/message/message.form.d.ts +0 -36
  696. package/src/app/social/message/message.modal.d.ts +0 -43
  697. package/src/app/social/message/message.model.d.ts +0 -33
  698. package/src/app/social/message/message.module.d.ts +0 -12
  699. package/src/app/social/message/message.service.d.ts +0 -32
  700. package/src/app/social/social.errors.d.ts +0 -9
  701. package/src/app/social/social.module.d.ts +0 -20
  702. package/src/app/social/social.testing.module.d.ts +0 -13
  703. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +0 -32
  704. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +0 -71
  705. package/src/app/social/user-event/testing/user-event.testing.d.ts +0 -35
  706. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -42
  707. package/src/app/social/user-event/testing/user-event.testing.module.d.ts +0 -11
  708. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +0 -42
  709. package/src/app/social/user-event/user-event.model.d.ts +0 -44
  710. package/src/app/social/user-event/user-event.module.d.ts +0 -13
  711. package/src/app/social/user-event/user-event.service.d.ts +0 -129
  712. package/src/environments/environment.class.d.ts +0 -68
  713. package/src/environments/environment.d.ts +0 -2
  714. package/src/environments/environment.loader.d.ts +0 -24
  715. package/src/theme/_globals.scss +0 -5
@@ -1,384 +0,0 @@
1
- import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
- import { gql } from '@apollo/client/core';
3
- import { Configuration } from './model/config.model';
4
- import { BehaviorSubject, Subject } from 'rxjs';
5
- import { ErrorCodes } from './errors';
6
- import { isNotEmptyArray, isNotNil } from '../../shared/functions';
7
- import { CORE_CONFIG_OPTIONS } from './config/core.config';
8
- import { Toasts } from '../../shared/toast/toasts';
9
- import { filter } from 'rxjs/operators';
10
- import { ENVIRONMENT } from '../../../environments/environment.class';
11
- import { BaseGraphqlService } from './base-graphql-service.class';
12
- import { isMobile } from '../../shared/platforms';
13
- import { ImagesUtils } from '../../shared/file/images.utils';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "@ionic/angular";
16
- import * as i2 from "../graphql/graphql.service";
17
- import * as i3 from "@ionic/storage-angular";
18
- import * as i4 from "./network.service";
19
- import * as i5 from "../../shared/file/file.service";
20
- import * as i6 from "@ngx-translate/core";
21
- import * as i7 from "./account.service";
22
- import * as i8 from "../../../environments/environment.class";
23
- const CONFIGURATION_STORAGE_KEY = 'configuration';
24
- /* ------------------------------------
25
- * GraphQL queries
26
- * ------------------------------------*/
27
- export const ConfigFragments = {
28
- config: gql `
29
- fragment ConfigFragment on ConfigurationVO {
30
- id
31
- label
32
- name
33
- description
34
- comments
35
- properties
36
- smallLogo
37
- largeLogo
38
- backgroundImages
39
- partners {
40
- id
41
- label
42
- name
43
- logo
44
- siteUrl
45
- __typename
46
- }
47
- updateDate
48
- creationDate
49
- statusId
50
- __typename
51
- }
52
- `,
53
- };
54
- const ConfigQueries = {
55
- load: gql `
56
- query Configuration {
57
- data: configuration {
58
- ...ConfigFragment
59
- }
60
- }
61
- ${ConfigFragments.config}
62
- `,
63
- };
64
- // Save (create or update) account mutation
65
- const ConfigMutations = {
66
- save: gql `
67
- mutation SaveConfiguration($data: ConfigurationVOInput) {
68
- data: saveConfiguration(config: $data) {
69
- ...ConfigFragment
70
- }
71
- }
72
- ${ConfigFragments.config}
73
- `,
74
- };
75
- const ClearCache = gql `
76
- query ClearCache($name: String) {
77
- clearCache(name: $name)
78
- }
79
- `;
80
- const CacheStatistics = gql `
81
- query CacheStatistics {
82
- cacheStatistics
83
- }
84
- `;
85
- export const APP_CONFIG_OPTIONS = new InjectionToken('defaultOptions');
86
- export class ConfigService extends BaseGraphqlService {
87
- platform;
88
- graphql;
89
- storage;
90
- network;
91
- file;
92
- toastController;
93
- translate;
94
- accountService;
95
- environment;
96
- _optionDefs;
97
- $data = new BehaviorSubject(null);
98
- get config() {
99
- // If first call: start loading
100
- if (!this.started)
101
- this.start();
102
- return this.$data.pipe(filter(isNotNil));
103
- }
104
- constructor(platform, graphql, storage, network, file, toastController, translate, accountService, environment, defaultOptionsMap) {
105
- super(graphql, environment);
106
- this.platform = platform;
107
- this.graphql = graphql;
108
- this.storage = storage;
109
- this.network = network;
110
- this.file = file;
111
- this.toastController = toastController;
112
- this.translate = translate;
113
- this.accountService = accountService;
114
- this.environment = environment;
115
- this._debug = !environment.production;
116
- if (this._debug)
117
- console.debug('[config] Creating service');
118
- this._optionDefs = Object.values({ ...CORE_CONFIG_OPTIONS, ...defaultOptionsMap });
119
- }
120
- async ngOnStart() {
121
- console.info('[config] Starting configuration...');
122
- const data = await this.loadOrRestoreLocally();
123
- this.$data.next(data);
124
- // Restart if graphql service restart
125
- this.registerSubscription(this.graphql.stopSubject.subscribe(() => this.restart()));
126
- return data;
127
- }
128
- async loadDefault(opts) {
129
- const now = Date.now();
130
- console.debug('[config] Loading Pod configuration...');
131
- const query = (opts && opts.query) || ConfigQueries.load;
132
- const variables = (opts && opts.variables) || undefined;
133
- const res = await this.graphql.query({
134
- query,
135
- variables,
136
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
137
- fetchPolicy: (opts && opts.fetchPolicy) || undefined /*default*/,
138
- });
139
- const data = res?.data && opts?.toEntity !== false ? Configuration.fromObject(res.data) : res?.data;
140
- console.info(`[config] Pod configuration loaded in ${Date.now() - now}ms:`, data);
141
- return data;
142
- }
143
- async load(id, opts) {
144
- console.warn('[config] Invalid call of configService.load(id). Please use loadDefault() instead');
145
- return this.loadDefault(opts);
146
- }
147
- canUserWrite(data) {
148
- return this.accountService.isAdmin();
149
- }
150
- /**
151
- * Save a configuration
152
- *
153
- * @param config
154
- */
155
- async save(config) {
156
- console.debug('[config] Saving Pod configuration...', config);
157
- const json = config.asObject();
158
- // Execute mutation
159
- const res = await this.graphql.mutate({
160
- mutation: ConfigMutations.save,
161
- variables: {
162
- data: json,
163
- },
164
- error: {
165
- code: ErrorCodes.SAVE_CONFIG_ERROR,
166
- message: 'ERROR.SAVE_CONFIG_ERROR',
167
- },
168
- });
169
- // Copy update properties
170
- const savedConfig = res?.data;
171
- this.copyIdAndUpdateDate(savedConfig, config);
172
- console.debug('[config] Pod configuration saved!');
173
- // Full reload, to let pod recomputing some fields
174
- const reloadedConfig = await this.loadDefault({ fetchPolicy: 'network-only' });
175
- // Update computed properties, from reloaded item
176
- config.smallLogo = reloadedConfig?.smallLogo;
177
- config.largeLogo = reloadedConfig?.largeLogo;
178
- config.backgroundImages = reloadedConfig?.backgroundImages;
179
- config.partners = reloadedConfig?.partners;
180
- // If this is the default config
181
- const defaultConfig = this.$data.value;
182
- if (isNotNil(defaultConfig) && reloadedConfig?.label === defaultConfig.label) {
183
- // Emit update event when is default config
184
- this.$data.next(reloadedConfig);
185
- }
186
- // return the original entity
187
- return config;
188
- }
189
- async getCacheStatistics() {
190
- const now = Date.now();
191
- console.debug('[config] Loading server cache statistics...');
192
- const res = await this.graphql.query({
193
- query: CacheStatistics,
194
- variables: null,
195
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
196
- fetchPolicy: 'network-only',
197
- });
198
- const data = (res && res.cacheStatistics) || undefined;
199
- console.info(`[config] Server cache statistics loaded in ${Date.now() - now}ms:`, data);
200
- return data;
201
- }
202
- async clearCache(opts) {
203
- const now = Date.now();
204
- console.debug('[config] Clear server cache...');
205
- const variables = (opts && opts.cacheName && { name: opts.cacheName }) || undefined;
206
- const res = await this.graphql.query({
207
- query: ClearCache,
208
- variables,
209
- error: { code: ErrorCodes.LOAD_CONFIG_ERROR, message: 'ERROR.LOAD_CONFIG_ERROR' },
210
- fetchPolicy: 'no-cache',
211
- });
212
- const data = (res && res.clearCache) || undefined;
213
- console.info(`[config] Clear server cache in ${Date.now() - now}ms:`, data);
214
- return data;
215
- }
216
- delete(data) {
217
- throw new Error('Not implemented yet!');
218
- }
219
- listenChanges(id) {
220
- return new Subject(); // TODO
221
- }
222
- get optionDefs() {
223
- return this._optionDefs;
224
- }
225
- /* -- protected method -- */
226
- copyIdAndUpdateDate(source, target) {
227
- if (!source)
228
- return;
229
- target.id = source.id || target.id;
230
- target.updateDate = source.updateDate || target.updateDate;
231
- }
232
- async loadOrRestoreLocally() {
233
- let data;
234
- let wasJustLoaded = false;
235
- if (this.network.online) {
236
- try {
237
- data = await this.loadDefault({ fetchPolicy: 'network-only' });
238
- wasJustLoaded = true;
239
- }
240
- catch (err) {
241
- // Log, then continue
242
- console.error((err && err.message) || err, err);
243
- }
244
- }
245
- // Save it into local storage, for next startup
246
- if (data) {
247
- setTimeout(() => this.storeLocally(data), 2000);
248
- }
249
- // If not loaded remotely: try to restore it
250
- else {
251
- data = await this.restoreLocally();
252
- }
253
- // Make sure label has been filled
254
- data.label = data.label || this.environment.name;
255
- // Reset name (if same as label)
256
- data.name = data.name !== data.label ? data.name : undefined;
257
- // Check compatible version
258
- if (wasJustLoaded) {
259
- // TODO
260
- }
261
- return data;
262
- }
263
- async restoreLocally() {
264
- let data;
265
- // Try to load from local storage
266
- const value = await this.storage.get(CONFIGURATION_STORAGE_KEY);
267
- if (value) {
268
- console.debug('[config] Restoring configuration from local storage...');
269
- if (typeof value === 'string') {
270
- try {
271
- data = Configuration.fromObject(JSON.parse(value));
272
- }
273
- catch (err) {
274
- console.error(`Failed to parse config found in local storage: ${(err && err.message) || err}`, err);
275
- }
276
- }
277
- else if (typeof value === 'object') {
278
- data = Configuration.fromObject(value);
279
- }
280
- console.debug('[config] Restoring configuration [OK]');
281
- }
282
- // Or load default value, from the environment
283
- if (!data) {
284
- console.debug('[config] No configuration found. Using environment...');
285
- data = Configuration.fromObject(this.environment);
286
- }
287
- return data;
288
- }
289
- async storeLocally(data) {
290
- // Nothing to store : reset
291
- if (!data) {
292
- await this.storage.remove(CONFIGURATION_STORAGE_KEY);
293
- }
294
- // Config exists: store it in the local storage
295
- else {
296
- let now = this._debug && Date.now();
297
- // Convert images, for offline usage
298
- if (this.network.online && isMobile(window)) {
299
- const jobs = [];
300
- // Download logos
301
- if (data.largeLogo && data.largeLogo.startsWith('http')) {
302
- const largeLogo = ImagesUtils.getImageAndCredit(data.largeLogo)?.image; // Remove credit
303
- jobs.push(this.file.getImage(largeLogo).then((imgUrl) => (data.largeLogo = imgUrl)));
304
- }
305
- if (data.smallLogo && data.smallLogo.startsWith('http')) {
306
- const smallLogo = ImagesUtils.getImageAndCredit(data.smallLogo)?.image; // Remove credit
307
- jobs.push(this.file.getImage(smallLogo).then((imgUrl) => (data.smallLogo = imgUrl)));
308
- }
309
- // Background images
310
- if (isNotEmptyArray(data.backgroundImages)) {
311
- const options = {
312
- maxWidth: this.platform.width(),
313
- maxHeight: this.platform.height(),
314
- };
315
- // Convert the FIRST image found
316
- // WARN: it's NOT necessary to convert ALL image, but only one, for smaller memory footprint
317
- const index = data.backgroundImages.findIndex((img) => img?.startsWith('http'));
318
- if (index !== -1) {
319
- const image = ImagesUtils.getImageAndCredit(data.backgroundImages[index])?.image; // Remove credit
320
- jobs.push(this.file.getImage(image, options).then((dataUrl) => (data.backgroundImages = [dataUrl])));
321
- }
322
- }
323
- // Partners
324
- if (isNotEmptyArray(data.partners)) {
325
- data.partners.forEach((dep) => {
326
- if (dep?.logo && dep.logo.startsWith('http')) {
327
- jobs.push(this.file
328
- .getImage(dep.logo, {
329
- maxHeight: 50 /*see home page CSS */,
330
- })
331
- .then((img) => (dep.logo = img))
332
- .catch((err) => {
333
- console.error((err && err.message) || err);
334
- delete dep.logo;
335
- }));
336
- }
337
- });
338
- }
339
- if (jobs.length) {
340
- if (this._debug)
341
- console.debug(`[config] Fetching ${jobs.length} images...`);
342
- try {
343
- await Promise.all(jobs);
344
- if (this._debug)
345
- console.debug(`[config] Fetching ${jobs.length} images [OK] in ${Date.now() - now}ms`);
346
- }
347
- catch (err) {
348
- console.error(`[config] Failed to fetch image(s): ${(err && err.message) || err}`, err);
349
- }
350
- }
351
- }
352
- // Saving config to storage
353
- {
354
- now = this._debug && Date.now();
355
- if (this._debug)
356
- console.debug('[config] Saving config into local storage...');
357
- await this.storage.set(CONFIGURATION_STORAGE_KEY, data.asObject());
358
- if (this._debug)
359
- console.debug(`[config] Saving config into local storage [OK] in ${Date.now() - now}ms`);
360
- }
361
- }
362
- }
363
- async showToast(opts) {
364
- await Toasts.show(this.toastController, this.translate, opts);
365
- }
366
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfigService, deps: [{ token: i1.Platform }, { token: i2.GraphqlService }, { token: i3.Storage }, { token: i4.NetworkService }, { token: i5.FileService }, { token: i1.ToastController }, { token: i6.TranslateService }, { token: i7.AccountService }, { token: ENVIRONMENT }, { token: APP_CONFIG_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
367
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfigService, providedIn: 'root' });
368
- }
369
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfigService, decorators: [{
370
- type: Injectable,
371
- args: [{
372
- providedIn: 'root',
373
- deps: [APP_CONFIG_OPTIONS],
374
- }]
375
- }], ctorParameters: () => [{ type: i1.Platform }, { type: i2.GraphqlService }, { type: i3.Storage }, { type: i4.NetworkService }, { type: i5.FileService }, { type: i1.ToastController }, { type: i6.TranslateService }, { type: i7.AccountService }, { type: i8.Environment, decorators: [{
376
- type: Inject,
377
- args: [ENVIRONMENT]
378
- }] }, { type: undefined, decorators: [{
379
- type: Optional
380
- }, {
381
- type: Inject,
382
- args: [APP_CONFIG_OPTIONS]
383
- }] }] });
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUduRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7OztBQUU3RCxNQUFNLHlCQUF5QixHQUFHLGVBQWUsQ0FBQztBQUVsRDs7eUNBRXlDO0FBQ3pDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixNQUFNLEVBQUUsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlY7Q0FDRixDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQWtCO0lBQ25DLElBQUksRUFBRSxHQUFHLENBQUE7Ozs7OztNQU1MLGVBQWUsQ0FBQyxNQUFNO0dBQ3pCO0NBQ0YsQ0FBQztBQUVGLDJDQUEyQztBQUMzQyxNQUFNLGVBQWUsR0FBK0I7SUFDbEQsSUFBSSxFQUFFLEdBQUcsQ0FBQTs7Ozs7O01BTUwsZUFBZSxDQUFDLE1BQU07R0FDekI7Q0FDRixDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQVEsR0FBRyxDQUFBOzs7O0NBSTFCLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBUSxHQUFHLENBQUE7Ozs7Q0FJL0IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUF5QixnQkFBZ0IsQ0FBQyxDQUFDO0FBTS9GLE1BQU0sT0FBTyxhQUNYLFNBQVEsa0JBQTZEO0lBYXpEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDcUI7SUFsQnpCLFdBQVcsQ0FBd0I7SUFDbkMsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUV6RCxJQUFJLE1BQU07UUFDUiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQ1ksUUFBa0IsRUFDbEIsT0FBdUIsRUFDdkIsT0FBZ0IsRUFDaEIsT0FBdUIsRUFDdkIsSUFBaUIsRUFDakIsZUFBZ0MsRUFDaEMsU0FBMkIsRUFDM0IsY0FBOEIsRUFDVCxXQUF3QixFQUNmLGlCQUF5QztRQUVqRixLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBWGxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDVCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUt2RCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUVuRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUErQjtRQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBRXZELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBZ0I7WUFDbEQsS0FBSztZQUNMLFNBQVM7WUFDVCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRTtZQUNqRixXQUFXLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxXQUFXO1NBQ2pFLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ3BHLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQVUsRUFBRSxJQUFrRTtRQUN2RixPQUFPLENBQUMsSUFBSSxDQUFDLG1GQUFtRixDQUFDLENBQUM7UUFFbEcsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBbUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFxQjtRQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUvQixtQkFBbUI7UUFDbkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBZ0I7WUFDbkQsUUFBUSxFQUFFLGVBQWUsQ0FBQyxJQUFJO1lBQzlCLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsSUFBSTthQUNYO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxVQUFVLENBQUMsaUJBQWlCO2dCQUNsQyxPQUFPLEVBQUUseUJBQXlCO2FBQ25DO1NBQ0YsQ0FBQyxDQUFDO1FBRUgseUJBQXlCO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5QyxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFFbkQsa0RBQWtEO1FBQ2xELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRS9FLGlEQUFpRDtRQUNqRCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsRUFBRSxTQUFTLENBQUM7UUFDN0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxjQUFjLEVBQUUsU0FBUyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxjQUFjLEVBQUUsZ0JBQWdCLENBQUM7UUFDM0QsTUFBTSxDQUFDLFFBQVEsR0FBRyxjQUFjLEVBQUUsUUFBUSxDQUFDO1FBRTNDLGdDQUFnQztRQUNoQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN2QyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxjQUFjLEVBQUUsS0FBSyxLQUFLLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3RSwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQjtRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBRTdELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQTJCO1lBQzdELEtBQUssRUFBRSxlQUFlO1lBQ3RCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUU7WUFDakYsV0FBVyxFQUFFLGNBQWM7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUE2QjtRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDO1FBRXBGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQTBCO1lBQzVELEtBQUssRUFBRSxVQUFVO1lBQ2pCLFNBQVM7WUFDVCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRTtZQUNqRixXQUFXLEVBQUUsVUFBVTtTQUN4QixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBbUI7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBVTtRQUN0QixPQUFPLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO0lBQy9CLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELDRCQUE0QjtJQUVsQixtQkFBbUIsQ0FBQyxNQUFpQyxFQUFFLE1BQXFCO1FBQ3BGLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVwQixNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUM3RCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxJQUFJLElBQW1CLENBQUM7UUFDeEIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLHFCQUFxQjtnQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO1FBRUQsK0NBQStDO1FBQy9DLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsNENBQTRDO2FBQ3ZDLENBQUM7WUFDSixJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFFakQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFN0QsMkJBQTJCO1FBQzNCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYztRQUMxQixJQUFJLElBQW1CLENBQUM7UUFFeEIsaUNBQWlDO1FBQ2pDLE1BQU0sS0FBSyxHQUFRLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNyRSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1lBQ3hFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQztvQkFDSCxJQUFJLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RHLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7WUFDdkUsSUFBSSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQWtCLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFvQjtRQUM3QywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCwrQ0FBK0M7YUFDMUMsQ0FBQztZQUNKLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXBDLG9DQUFvQztZQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBRWhCLGlCQUFpQjtnQkFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3hELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsZ0JBQWdCO29CQUN4RixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDeEQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxnQkFBZ0I7b0JBQ3hGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixDQUFDO2dCQUVELG9CQUFvQjtnQkFDcEIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxPQUFPLEdBQUc7d0JBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO3dCQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7cUJBQ2xDLENBQUM7b0JBRUYsZ0NBQWdDO29CQUNoQyw0RkFBNEY7b0JBQzVGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLGdCQUFnQjt3QkFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2RyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsV0FBVztnQkFDWCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDNUIsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7NEJBQzdDLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxDQUFDLElBQUk7aUNBQ04sUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0NBQ2xCLFNBQVMsRUFBRSxFQUFFLENBQUMsc0JBQXNCOzZCQUNyQyxDQUFDO2lDQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2lDQUMvQixLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQ0FDYixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQ0FDM0MsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDOzRCQUNsQixDQUFDLENBQUMsQ0FDTCxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTTt3QkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsQ0FBQztvQkFDN0UsSUFBSSxDQUFDO3dCQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTTs0QkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixJQUFJLENBQUMsTUFBTSxtQkFBbUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQzFHLENBQUM7b0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzFGLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCwyQkFBMkI7WUFDM0IsQ0FBQztnQkFDQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscURBQXFELElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVHLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBc0I7UUFDOUMsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO3VHQW5VVSxhQUFhLHFQQXNCZCxXQUFXLGFBQ0Msa0JBQWtCOzJHQXZCN0IsYUFBYSxjQUhaLE1BQU07OzJGQUdQLGFBQWE7a0JBSnpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUMzQjs7MEJBdUJJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdxbCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IEdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiwgRm9ybUZpZWxkRGVmaW5pdGlvbk1hcCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4vY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7IFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IEJhc2VHcmFwaHFsU2VydmljZSB9IGZyb20gJy4vYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgSVN0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuaW1wb3J0IHsgQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgfSBmcm9tICcuL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5pbXBvcnQgeyBJbWFnZXNVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ltYWdlcy51dGlscyc7XG5cbmNvbnN0IENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkgPSAnY29uZmlndXJhdGlvbic7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogR3JhcGhRTCBxdWVyaWVzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGNvbnN0IENvbmZpZ0ZyYWdtZW50cyA9IHtcbiAgY29uZmlnOiBncWxgXG4gICAgZnJhZ21lbnQgQ29uZmlnRnJhZ21lbnQgb24gQ29uZmlndXJhdGlvblZPIHtcbiAgICAgIGlkXG4gICAgICBsYWJlbFxuICAgICAgbmFtZVxuICAgICAgZGVzY3JpcHRpb25cbiAgICAgIGNvbW1lbnRzXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgICBzbWFsbExvZ29cbiAgICAgIGxhcmdlTG9nb1xuICAgICAgYmFja2dyb3VuZEltYWdlc1xuICAgICAgcGFydG5lcnMge1xuICAgICAgICBpZFxuICAgICAgICBsYWJlbFxuICAgICAgICBuYW1lXG4gICAgICAgIGxvZ29cbiAgICAgICAgc2l0ZVVybFxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHN0YXR1c0lkXG4gICAgICBfX3R5cGVuYW1lXG4gICAgfVxuICBgLFxufTtcblxuY29uc3QgQ29uZmlnUXVlcmllczogeyBsb2FkOiBhbnkgfSA9IHtcbiAgbG9hZDogZ3FsYFxuICAgIHF1ZXJ5IENvbmZpZ3VyYXRpb24ge1xuICAgICAgZGF0YTogY29uZmlndXJhdGlvbiB7XG4gICAgICAgIC4uLkNvbmZpZ0ZyYWdtZW50XG4gICAgICB9XG4gICAgfVxuICAgICR7Q29uZmlnRnJhZ21lbnRzLmNvbmZpZ31cbiAgYCxcbn07XG5cbi8vIFNhdmUgKGNyZWF0ZSBvciB1cGRhdGUpIGFjY291bnQgbXV0YXRpb25cbmNvbnN0IENvbmZpZ011dGF0aW9uczogQmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnMgPSB7XG4gIHNhdmU6IGdxbGBcbiAgICBtdXRhdGlvbiBTYXZlQ29uZmlndXJhdGlvbigkZGF0YTogQ29uZmlndXJhdGlvblZPSW5wdXQpIHtcbiAgICAgIGRhdGE6IHNhdmVDb25maWd1cmF0aW9uKGNvbmZpZzogJGRhdGEpIHtcbiAgICAgICAgLi4uQ29uZmlnRnJhZ21lbnRcbiAgICAgIH1cbiAgICB9XG4gICAgJHtDb25maWdGcmFnbWVudHMuY29uZmlnfVxuICBgLFxufTtcblxuY29uc3QgQ2xlYXJDYWNoZTogYW55ID0gZ3FsYFxuICBxdWVyeSBDbGVhckNhY2hlKCRuYW1lOiBTdHJpbmcpIHtcbiAgICBjbGVhckNhY2hlKG5hbWU6ICRuYW1lKVxuICB9XG5gO1xuXG5jb25zdCBDYWNoZVN0YXRpc3RpY3M6IGFueSA9IGdxbGBcbiAgcXVlcnkgQ2FjaGVTdGF0aXN0aWNzIHtcbiAgICBjYWNoZVN0YXRpc3RpY3NcbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IEFQUF9DT05GSUdfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGb3JtRmllbGREZWZpbml0aW9uTWFwPignZGVmYXVsdE9wdGlvbnMnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGRlcHM6IFtBUFBfQ09ORklHX09QVElPTlNdLFxufSlcbmV4cG9ydCBjbGFzcyBDb25maWdTZXJ2aWNlXG4gIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPENvbmZpZ3VyYXRpb24sIGFueSwgbnVtYmVyLCBDb25maWd1cmF0aW9uPlxuICBpbXBsZW1lbnRzIElFbnRpdHlTZXJ2aWNlPENvbmZpZ3VyYXRpb24+LCBJU3RhcnRhYmxlU2VydmljZTxDb25maWd1cmF0aW9uPlxue1xuICBwcml2YXRlIF9vcHRpb25EZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByaXZhdGUgJGRhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbmZpZ3VyYXRpb24+KG51bGwpO1xuXG4gIGdldCBjb25maWcoKTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uPiB7XG4gICAgLy8gSWYgZmlyc3QgY2FsbDogc3RhcnQgbG9hZGluZ1xuICAgIGlmICghdGhpcy5zdGFydGVkKSB0aGlzLnN0YXJ0KCk7XG4gICAgcmV0dXJuIHRoaXMuJGRhdGEucGlwZShmaWx0ZXIoaXNOb3ROaWwpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZmlsZTogRmlsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0NPTkZJR19PUFRJT05TKSBkZWZhdWx0T3B0aW9uc01hcDogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcFxuICApIHtcbiAgICBzdXBlcihncmFwaHFsLCBlbnZpcm9ubWVudCk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gQ3JlYXRpbmcgc2VydmljZScpO1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMoeyAuLi5DT1JFX0NPTkZJR19PUFRJT05TLCAuLi5kZWZhdWx0T3B0aW9uc01hcCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgY29uc29sZS5pbmZvKCdbY29uZmlnXSBTdGFydGluZyBjb25maWd1cmF0aW9uLi4uJyk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5sb2FkT3JSZXN0b3JlTG9jYWxseSgpO1xuICAgIHRoaXMuJGRhdGEubmV4dChkYXRhKTtcblxuICAgIC8vIFJlc3RhcnQgaWYgZ3JhcGhxbCBzZXJ2aWNlIHJlc3RhcnRcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuZ3JhcGhxbC5zdG9wU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXN0YXJ0KCkpKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbG9hZERlZmF1bHQob3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTG9hZGluZyBQb2QgY29uZmlndXJhdGlvbi4uLicpO1xuXG4gICAgY29uc3QgcXVlcnkgPSAob3B0cyAmJiBvcHRzLnF1ZXJ5KSB8fCBDb25maWdRdWVyaWVzLmxvYWQ7XG4gICAgY29uc3QgdmFyaWFibGVzID0gKG9wdHMgJiYgb3B0cy52YXJpYWJsZXMpIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgcXVlcnksXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfQ09ORklHX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuTE9BRF9DT05GSUdfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogKG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSkgfHwgdW5kZWZpbmVkIC8qZGVmYXVsdCovLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YSA9IHJlcz8uZGF0YSAmJiBvcHRzPy50b0VudGl0eSAhPT0gZmFsc2UgPyBDb25maWd1cmF0aW9uLmZyb21PYmplY3QocmVzLmRhdGEpIDogcmVzPy5kYXRhO1xuICAgIGNvbnNvbGUuaW5mbyhgW2NvbmZpZ10gUG9kIGNvbmZpZ3VyYXRpb24gbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tczpgLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoaWQ6IG51bWJlciwgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyAmIHsgcXVlcnk/OiBhbnk7IHZhcmlhYmxlcz86IGFueSB9KTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgY29uc29sZS53YXJuKCdbY29uZmlnXSBJbnZhbGlkIGNhbGwgb2YgY29uZmlnU2VydmljZS5sb2FkKGlkKS4gUGxlYXNlIHVzZSBsb2FkRGVmYXVsdCgpIGluc3RlYWQnKTtcblxuICAgIHJldHVybiB0aGlzLmxvYWREZWZhdWx0KG9wdHMpO1xuICB9XG5cbiAgY2FuVXNlcldyaXRlKGRhdGE6IENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50U2VydmljZS5pc0FkbWluKCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgYXN5bmMgc2F2ZShjb25maWc6IENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBTYXZpbmcgUG9kIGNvbmZpZ3VyYXRpb24uLi4nLCBjb25maWcpO1xuXG4gICAgY29uc3QganNvbiA9IGNvbmZpZy5hc09iamVjdCgpO1xuXG4gICAgLy8gRXhlY3V0ZSBtdXRhdGlvblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgbXV0YXRpb246IENvbmZpZ011dGF0aW9ucy5zYXZlLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGRhdGE6IGpzb24sXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TQVZFX0NPTkZJR19FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNBVkVfQ09ORklHX0VSUk9SJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgY29uc3Qgc2F2ZWRDb25maWcgPSByZXM/LmRhdGE7XG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKHNhdmVkQ29uZmlnLCBjb25maWcpO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUG9kIGNvbmZpZ3VyYXRpb24gc2F2ZWQhJyk7XG5cbiAgICAvLyBGdWxsIHJlbG9hZCwgdG8gbGV0IHBvZCByZWNvbXB1dGluZyBzb21lIGZpZWxkc1xuICAgIGNvbnN0IHJlbG9hZGVkQ29uZmlnID0gYXdhaXQgdGhpcy5sb2FkRGVmYXVsdCh7IGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyB9KTtcblxuICAgIC8vIFVwZGF0ZSBjb21wdXRlZCBwcm9wZXJ0aWVzLCBmcm9tIHJlbG9hZGVkIGl0ZW1cbiAgICBjb25maWcuc21hbGxMb2dvID0gcmVsb2FkZWRDb25maWc/LnNtYWxsTG9nbztcbiAgICBjb25maWcubGFyZ2VMb2dvID0gcmVsb2FkZWRDb25maWc/LmxhcmdlTG9nbztcbiAgICBjb25maWcuYmFja2dyb3VuZEltYWdlcyA9IHJlbG9hZGVkQ29uZmlnPy5iYWNrZ3JvdW5kSW1hZ2VzO1xuICAgIGNvbmZpZy5wYXJ0bmVycyA9IHJlbG9hZGVkQ29uZmlnPy5wYXJ0bmVycztcblxuICAgIC8vIElmIHRoaXMgaXMgdGhlIGRlZmF1bHQgY29uZmlnXG4gICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHRoaXMuJGRhdGEudmFsdWU7XG4gICAgaWYgKGlzTm90TmlsKGRlZmF1bHRDb25maWcpICYmIHJlbG9hZGVkQ29uZmlnPy5sYWJlbCA9PT0gZGVmYXVsdENvbmZpZy5sYWJlbCkge1xuICAgICAgLy8gRW1pdCB1cGRhdGUgZXZlbnQgd2hlbiBpcyBkZWZhdWx0IGNvbmZpZ1xuICAgICAgdGhpcy4kZGF0YS5uZXh0KHJlbG9hZGVkQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdGhlIG9yaWdpbmFsIGVudGl0eVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBhc3luYyBnZXRDYWNoZVN0YXRpc3RpY3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIExvYWRpbmcgc2VydmVyIGNhY2hlIHN0YXRpc3RpY3MuLi4nKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGNhY2hlU3RhdGlzdGljczogYW55IH0+KHtcbiAgICAgIHF1ZXJ5OiBDYWNoZVN0YXRpc3RpY3MsXG4gICAgICB2YXJpYWJsZXM6IG51bGwsXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfQ09ORklHX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuTE9BRF9DT05GSUdfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gKHJlcyAmJiByZXMuY2FjaGVTdGF0aXN0aWNzKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKGBbY29uZmlnXSBTZXJ2ZXIgY2FjaGUgc3RhdGlzdGljcyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zOmAsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzogeyBjYWNoZU5hbWU/OiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gQ2xlYXIgc2VydmVyIGNhY2hlLi4uJyk7XG5cbiAgICBjb25zdCB2YXJpYWJsZXMgPSAob3B0cyAmJiBvcHRzLmNhY2hlTmFtZSAmJiB7IG5hbWU6IG9wdHMuY2FjaGVOYW1lIH0pIHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGNsZWFyQ2FjaGU6IGJvb2xlYW4gfT4oe1xuICAgICAgcXVlcnk6IENsZWFyQ2FjaGUsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfQ09ORklHX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuTE9BRF9DT05GSUdfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSAocmVzICYmIHJlcy5jbGVhckNhY2hlKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKGBbY29uZmlnXSBDbGVhciBzZXJ2ZXIgY2FjaGUgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zOmAsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZGVsZXRlKGRhdGE6IENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPGFueT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCEnKTtcbiAgfVxuXG4gIGxpc3RlbkNoYW5nZXMoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBuZXcgU3ViamVjdCgpOyAvLyBUT0RPXG4gIH1cblxuICBnZXQgb3B0aW9uRGVmcygpOiBGb3JtRmllbGREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25EZWZzO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlKHNvdXJjZTogQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCwgdGFyZ2V0OiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZCB8fCB0YXJnZXQuaWQ7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSBzb3VyY2UudXBkYXRlRGF0ZSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE9yUmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgbGV0IGRhdGE6IENvbmZpZ3VyYXRpb247XG4gICAgbGV0IHdhc0p1c3RMb2FkZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMubG9hZERlZmF1bHQoeyBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScgfSk7XG4gICAgICAgIHdhc0p1c3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIExvZywgdGhlbiBjb250aW51ZVxuICAgICAgICBjb25zb2xlLmVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVyciwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTYXZlIGl0IGludG8gbG9jYWwgc3RvcmFnZSwgZm9yIG5leHQgc3RhcnR1cFxuICAgIGlmIChkYXRhKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcmVMb2NhbGx5KGRhdGEpLCAyMDAwKTtcbiAgICB9XG5cbiAgICAvLyBJZiBub3QgbG9hZGVkIHJlbW90ZWx5OiB0cnkgdG8gcmVzdG9yZSBpdFxuICAgIGVsc2Uge1xuICAgICAgZGF0YSA9IGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgbGFiZWwgaGFzIGJlZW4gZmlsbGVkXG4gICAgZGF0YS5sYWJlbCA9IGRhdGEubGFiZWwgfHwgdGhpcy5lbnZpcm9ubWVudC5uYW1lO1xuXG4gICAgLy8gUmVzZXQgbmFtZSAoaWYgc2FtZSBhcyBsYWJlbClcbiAgICBkYXRhLm5hbWUgPSBkYXRhLm5hbWUgIT09IGRhdGEubGFiZWwgPyBkYXRhLm5hbWUgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDaGVjayBjb21wYXRpYmxlIHZlcnNpb25cbiAgICBpZiAod2FzSnVzdExvYWRlZCkge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcbiAgICBsZXQgZGF0YTogQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIFRyeSB0byBsb2FkIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLi4uJyk7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRhdGEgPSBDb25maWd1cmF0aW9uLmZyb21PYmplY3QoSlNPTi5wYXJzZSh2YWx1ZSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcGFyc2UgY29uZmlnIGZvdW5kIGluIGxvY2FsIHN0b3JhZ2U6ICR7KGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyfWAsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBkYXRhID0gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gW09LXScpO1xuICAgIH1cblxuICAgIC8vIE9yIGxvYWQgZGVmYXVsdCB2YWx1ZSwgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIE5vIGNvbmZpZ3VyYXRpb24gZm91bmQuIFVzaW5nIGVudmlyb25tZW50Li4uJyk7XG4gICAgICBkYXRhID0gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQgYXMgYW55KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RvcmVMb2NhbGx5KGRhdGE/OiBDb25maWd1cmF0aW9uKSB7XG4gICAgLy8gTm90aGluZyB0byBzdG9yZSA6IHJlc2V0XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlKENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkpO1xuICAgIH1cbiAgICAvLyBDb25maWcgZXhpc3RzOiBzdG9yZSBpdCBpbiB0aGUgbG9jYWwgc3RvcmFnZVxuICAgIGVsc2Uge1xuICAgICAgbGV0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICAgIC8vIENvbnZlcnQgaW1hZ2VzLCBmb3Igb2ZmbGluZSB1c2FnZVxuICAgICAgaWYgKHRoaXMubmV0d29yay5vbmxpbmUgJiYgaXNNb2JpbGUod2luZG93KSkge1xuICAgICAgICBjb25zdCBqb2JzID0gW107XG5cbiAgICAgICAgLy8gRG93bmxvYWQgbG9nb3NcbiAgICAgICAgaWYgKGRhdGEubGFyZ2VMb2dvICYmIGRhdGEubGFyZ2VMb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgIGNvbnN0IGxhcmdlTG9nbyA9IEltYWdlc1V0aWxzLmdldEltYWdlQW5kQ3JlZGl0KGRhdGEubGFyZ2VMb2dvKT8uaW1hZ2U7IC8vIFJlbW92ZSBjcmVkaXRcbiAgICAgICAgICBqb2JzLnB1c2godGhpcy5maWxlLmdldEltYWdlKGxhcmdlTG9nbykudGhlbigoaW1nVXJsKSA9PiAoZGF0YS5sYXJnZUxvZ28gPSBpbWdVcmwpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuc21hbGxMb2dvICYmIGRhdGEuc21hbGxMb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgIGNvbnN0IHNtYWxsTG9nbyA9IEltYWdlc1V0aWxzLmdldEltYWdlQW5kQ3JlZGl0KGRhdGEuc21hbGxMb2dvKT8uaW1hZ2U7IC8vIFJlbW92ZSBjcmVkaXRcbiAgICAgICAgICBqb2JzLnB1c2godGhpcy5maWxlLmdldEltYWdlKHNtYWxsTG9nbykudGhlbigoaW1nVXJsKSA9PiAoZGF0YS5zbWFsbExvZ28gPSBpbWdVcmwpKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCYWNrZ3JvdW5kIGltYWdlc1xuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRhdGEuYmFja2dyb3VuZEltYWdlcykpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgbWF4V2lkdGg6IHRoaXMucGxhdGZvcm0ud2lkdGgoKSxcbiAgICAgICAgICAgIG1heEhlaWdodDogdGhpcy5wbGF0Zm9ybS5oZWlnaHQoKSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gQ29udmVydCB0aGUgRklSU1QgaW1hZ2UgZm91bmRcbiAgICAgICAgICAvLyBXQVJOOiBpdCdzIE5PVCBuZWNlc3NhcnkgdG8gY29udmVydCBBTEwgaW1hZ2UsIGJ1dCBvbmx5IG9uZSwgZm9yIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludFxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzLmZpbmRJbmRleCgoaW1nKSA9PiBpbWc/LnN0YXJ0c1dpdGgoJ2h0dHAnKSk7XG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBJbWFnZXNVdGlscy5nZXRJbWFnZUFuZENyZWRpdChkYXRhLmJhY2tncm91bmRJbWFnZXNbaW5kZXhdKT8uaW1hZ2U7IC8vIFJlbW92ZSBjcmVkaXRcbiAgICAgICAgICAgIGpvYnMucHVzaCh0aGlzLmZpbGUuZ2V0SW1hZ2UoaW1hZ2UsIG9wdGlvbnMpLnRoZW4oKGRhdGFVcmwpID0+IChkYXRhLmJhY2tncm91bmRJbWFnZXMgPSBbZGF0YVVybF0pKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFydG5lcnNcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShkYXRhLnBhcnRuZXJzKSkge1xuICAgICAgICAgIGRhdGEucGFydG5lcnMuZm9yRWFjaCgoZGVwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVwPy5sb2dvICYmIGRlcC5sb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBqb2JzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlXG4gICAgICAgICAgICAgICAgICAuZ2V0SW1hZ2UoZGVwLmxvZ28sIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiA1MCAvKnNlZSBob21lIHBhZ2UgQ1NTICovLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC50aGVuKChpbWcpID0+IChkZXAubG9nbyA9IGltZykpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycik7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkZXAubG9nbztcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoam9icy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtjb25maWddIEZldGNoaW5nICR7am9icy5sZW5ndGh9IGltYWdlcy4uLmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChqb2JzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2NvbmZpZ10gRmV0Y2hpbmcgJHtqb2JzLmxlbmd0aH0gaW1hZ2VzIFtPS10gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbY29uZmlnXSBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2Uocyk6ICR7KGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyfWAsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNhdmluZyBjb25maWcgdG8gc3RvcmFnZVxuICAgICAge1xuICAgICAgICBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIFNhdmluZyBjb25maWcgaW50byBsb2NhbCBzdG9yYWdlLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoQ09ORklHVVJBVElPTl9TVE9SQUdFX0tFWSwgZGF0YS5hc09iamVjdCgpKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbY29uZmlnXSBTYXZpbmcgY29uZmlnIGludG8gbG9jYWwgc3RvcmFnZSBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucykge1xuICAgIGF3YWl0IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,107 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { scryptEncode } from '@polkadot/util-crypto/scrypt/encode';
3
- import { base58Decode, base64Decode, base64Encode, cryptoWaitReady, ed25519PairFromSeed, ed25519Sign, ed25519Verify, sha256AsU8a, sha512AsU8a, } from '@polkadot/util-crypto';
4
- import { bytesToHex as toHex } from '@noble/hashes/utils';
5
- import { stringToU8a } from '@polkadot/util';
6
- import * as i0 from "@angular/core";
7
- export const ED25519_SEED_LENGTH = 32; // Length of a ED25519 seed
8
- export const SCRYPT_PARAMS = {
9
- SIMPLE: {
10
- N: 2048,
11
- r: 8,
12
- p: 1,
13
- },
14
- DEFAULT: {
15
- N: 4096,
16
- r: 16,
17
- p: 1,
18
- },
19
- SECURE: {
20
- N: 16384,
21
- r: 32,
22
- p: 2,
23
- },
24
- HARDEST: {
25
- N: 65536,
26
- r: 32,
27
- p: 4,
28
- },
29
- EXTREME: {
30
- N: 262144,
31
- r: 64,
32
- p: 8,
33
- },
34
- };
35
- export class CryptoService {
36
- static _ready = false;
37
- static get started() {
38
- return this._ready;
39
- }
40
- static async ready() {
41
- if (this._ready)
42
- return; // OK
43
- await cryptoWaitReady();
44
- this._ready = true;
45
- }
46
- /**
47
- * Generate a sign keypair, using scrypt, from a salt and a password
48
- *
49
- * @param salt
50
- * @param password
51
- * @param scryptParams
52
- */
53
- static async scryptKeypair(salt, password, scryptParams) {
54
- if (!this.started)
55
- await this.ready();
56
- const saltU8a = stringToU8a(salt);
57
- const result = scryptEncode(password, saltU8a, scryptParams || SCRYPT_PARAMS.DEFAULT);
58
- const seed = result.password.slice(0, ED25519_SEED_LENGTH);
59
- return ed25519PairFromSeed(seed);
60
- }
61
- /**
62
- * Sign a message, from a key pair
63
- */
64
- static async sign(message, keypair) {
65
- if (!this.started)
66
- await this.ready();
67
- const m = stringToU8a(message);
68
- const sig = ed25519Sign(m, keypair);
69
- return base64Encode(sig);
70
- }
71
- /**
72
- * Sign a message, from a key pair
73
- */
74
- static async verify(message, signature, publicKey) {
75
- if (!this.started)
76
- await this.ready();
77
- const m = stringToU8a(message);
78
- const sig = base64Decode(signature);
79
- const pub = base58Decode(publicKey);
80
- return ed25519Verify(m, sig, pub);
81
- }
82
- /**
83
- * Hash (using SHA256) a message, as Hex
84
- */
85
- static sha256(message) {
86
- const bytes = sha256AsU8a(message);
87
- return toHex(bytes);
88
- }
89
- /**
90
- * Hash (using SHA512) a message, as Hex
91
- */
92
- static sha512(message) {
93
- const bytes = sha512AsU8a(message);
94
- return toHex(bytes);
95
- }
96
- static encodeBase64(message) {
97
- const m = stringToU8a(message);
98
- return base64Encode(m);
99
- }
100
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CryptoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
101
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CryptoService, providedIn: 'root' });
102
- }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CryptoService, decorators: [{
104
- type: Injectable,
105
- args: [{ providedIn: 'root' }]
106
- }] });
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFbkUsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osWUFBWSxFQUNaLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLGFBQWEsRUFDYixXQUFXLEVBQ1gsV0FBVyxHQUNaLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUFFLFVBQVUsSUFBSSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTdDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxDQUFDLDJCQUEyQjtBQUVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7SUFDM0IsTUFBTSxFQUFnQjtRQUNwQixDQUFDLEVBQUUsSUFBSTtRQUNQLENBQUMsRUFBRSxDQUFDO1FBQ0osQ0FBQyxFQUFFLENBQUM7S0FDTDtJQUNELE9BQU8sRUFBZ0I7UUFDckIsQ0FBQyxFQUFFLElBQUk7UUFDUCxDQUFDLEVBQUUsRUFBRTtRQUNMLENBQUMsRUFBRSxDQUFDO0tBQ0w7SUFDRCxNQUFNLEVBQWdCO1FBQ3BCLENBQUMsRUFBRSxLQUFLO1FBQ1IsQ0FBQyxFQUFFLEVBQUU7UUFDTCxDQUFDLEVBQUUsQ0FBQztLQUNMO0lBQ0QsT0FBTyxFQUFnQjtRQUNyQixDQUFDLEVBQUUsS0FBSztRQUNSLENBQUMsRUFBRSxFQUFFO1FBQ0wsQ0FBQyxFQUFFLENBQUM7S0FDTDtJQUNELE9BQU8sRUFBZ0I7UUFDckIsQ0FBQyxF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QUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgc2NyeXB0RW5jb2RlIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3NjcnlwdC9lbmNvZGUnO1xuaW1wb3J0IHsgU2NyeXB0UGFyYW1zIH0gZnJvbSAnQHBvbGthZG90L3V0aWwtY3J5cHRvL3NjcnlwdC90eXBlcyc7XG5pbXBvcnQge1xuICBiYXNlNThEZWNvZGUsXG4gIGJhc2U2NERlY29kZSxcbiAgYmFzZTY0RW5jb2RlLFxuICBjcnlwdG9XYWl0UmVhZHksXG4gIGVkMjU1MTlQYWlyRnJvbVNlZWQsXG4gIGVkMjU1MTlTaWduLFxuICBlZDI1NTE5VmVyaWZ5LFxuICBzaGEyNTZBc1U4YSxcbiAgc2hhNTEyQXNVOGEsXG59IGZyb20gJ0Bwb2xrYWRvdC91dGlsLWNyeXB0byc7XG5cbmltcG9ydCB7IGJ5dGVzVG9IZXggYXMgdG9IZXggfSBmcm9tICdAbm9ibGUvaGFzaGVzL3V0aWxzJztcbmltcG9ydCB7IEtleXBhaXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8vdHlwZXMnO1xuaW1wb3J0IHsgc3RyaW5nVG9VOGEgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBFRDI1NTE5X1NFRURfTEVOR1RIID0gMzI7IC8vIExlbmd0aCBvZiBhIEVEMjU1MTkgc2VlZFxuXG5leHBvcnQgY29uc3QgU0NSWVBUX1BBUkFNUyA9IHtcbiAgU0lNUExFOiA8U2NyeXB0UGFyYW1zPntcbiAgICBOOiAyMDQ4LFxuICAgIHI6IDgsXG4gICAgcDogMSxcbiAgfSxcbiAgREVGQVVMVDogPFNjcnlwdFBhcmFtcz57XG4gICAgTjogNDA5NixcbiAgICByOiAxNixcbiAgICBwOiAxLFxuICB9LFxuICBTRUNVUkU6IDxTY3J5cHRQYXJhbXM+e1xuICAgIE46IDE2Mzg0LFxuICAgIHI6IDMyLFxuICAgIHA6IDIsXG4gIH0sXG4gIEhBUkRFU1Q6IDxTY3J5cHRQYXJhbXM+e1xuICAgIE46IDY1NTM2LFxuICAgIHI6IDMyLFxuICAgIHA6IDQsXG4gIH0sXG4gIEVYVFJFTUU6IDxTY3J5cHRQYXJhbXM+e1xuICAgIE46IDI2MjE0NCxcbiAgICByOiA2NCxcbiAgICBwOiA4LFxuICB9LFxufTtcblxuZXhwb3J0IHsgS2V5cGFpciB9O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENyeXB0b1NlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfcmVhZHkgPSBmYWxzZTtcblxuICBwcml2YXRlIHN0YXRpYyBnZXQgc3RhcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZHk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcmVhZHkpIHJldHVybjsgLy8gT0tcblxuICAgIGF3YWl0IGNyeXB0b1dhaXRSZWFkeSgpO1xuICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHNpZ24ga2V5cGFpciwgdXNpbmcgc2NyeXB0LCBmcm9tIGEgc2FsdCBhbmQgYSBwYXNzd29yZFxuICAgKlxuICAgKiBAcGFyYW0gc2FsdFxuICAgKiBAcGFyYW0gcGFzc3dvcmRcbiAgICogQHBhcmFtIHNjcnlwdFBhcmFtc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNjcnlwdEtleXBhaXIoc2FsdDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBzY3J5cHRQYXJhbXM/OiBTY3J5cHRQYXJhbXMpOiBQcm9taXNlPEtleXBhaXI+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGNvbnN0IHNhbHRVOGEgPSBzdHJpbmdUb1U4YShzYWx0KTtcbiAgICBjb25zdCByZXN1bHQgPSBzY3J5cHRFbmNvZGUocGFzc3dvcmQsIHNhbHRVOGEsIHNjcnlwdFBhcmFtcyB8fCBTQ1JZUFRfUEFSQU1TLkRFRkFVTFQpO1xuICAgIGNvbnN0IHNlZWQgPSByZXN1bHQucGFzc3dvcmQuc2xpY2UoMCwgRUQyNTUxOV9TRUVEX0xFTkdUSCk7XG4gICAgcmV0dXJuIGVkMjU1MTlQYWlyRnJvbVNlZWQoc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIG1lc3NhZ2UsIGZyb20gYSBrZXkgcGFpclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNpZ24obWVzc2FnZTogc3RyaW5nLCBrZXlwYWlyOiBLZXlwYWlyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgbSA9IHN0cmluZ1RvVThhKG1lc3NhZ2UpO1xuICAgIGNvbnN0IHNpZyA9IGVkMjU1MTlTaWduKG0sIGtleXBhaXIpO1xuICAgIHJldHVybiBiYXNlNjRFbmNvZGUoc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgbWVzc2FnZSwgZnJvbSBhIGtleSBwYWlyXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgdmVyaWZ5KG1lc3NhZ2U6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIHB1YmxpY0tleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IG0gPSBzdHJpbmdUb1U4YShtZXNzYWdlKTtcbiAgICBjb25zdCBzaWcgPSBiYXNlNjREZWNvZGUoc2lnbmF0dXJlKTtcbiAgICBjb25zdCBwdWIgPSBiYXNlNThEZWNvZGUocHVibGljS2V5KTtcbiAgICByZXR1cm4gZWQyNTUxOVZlcmlmeShtLCBzaWcsIHB1Yik7XG4gIH1cblxuICAvKipcbiAgICogSGFzaCAodXNpbmcgU0hBMjU2KSBhIG1lc3NhZ2UsIGFzIEhleFxuICAgKi9cbiAgc3RhdGljIHNoYTI1NihtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVzID0gc2hhMjU2QXNVOGEobWVzc2FnZSk7XG4gICAgcmV0dXJuIHRvSGV4KGJ5dGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXNoICh1c2luZyBTSEE1MTIpIGEgbWVzc2FnZSwgYXMgSGV4XG4gICAqL1xuICBzdGF0aWMgc2hhNTEyKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYnl0ZXMgPSBzaGE1MTJBc1U4YShtZXNzYWdlKTtcbiAgICByZXR1cm4gdG9IZXgoYnl0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGVuY29kZUJhc2U2NChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG0gPSBzdHJpbmdUb1U4YShtZXNzYWdlKTtcbiAgICByZXR1cm4gYmFzZTY0RW5jb2RlKG0pO1xuICB9XG59XG4iXX0=
@@ -1,52 +0,0 @@
1
- export const ErrorCodes = {
2
- UNKNOWN_ERROR: 0,
3
- LOAD_ACCOUNT_ERROR: 1,
4
- BAD_PASSWORD: 2,
5
- UNKNOWN_ACCOUNT_EMAIL: 3,
6
- EMAIL_ALREADY_REGISTERED: 4,
7
- UNREACHABLE_NETWORK_ERROR: 4,
8
- UNKNOWN_NETWORK_ERROR: 5,
9
- SENT_CONFIRMATION_EMAIL_FAILED: 6,
10
- CONFIRM_EMAIL_FAILED: 7,
11
- SAVE_ACCOUNT_ERROR: 8,
12
- ACCOUNT_NOT_EXISTS: 9,
13
- SAVE_SETTINGS_ERROR: 8,
14
- SUBSCRIBE_ACCOUNT_ERROR: 10,
15
- ENTITY_STORAGE_MIGRATION_FAILED: 11,
16
- LOAD_DATA_ERROR: 12,
17
- SAVE_DATA_ERROR: 13,
18
- DELETE_DATA_ERROR: 14,
19
- SUBSCRIBE_DATA_ERROR: 15,
20
- // DATA errors (load error)
21
- LOAD_PERSONS_ERROR: 100,
22
- DATA_NOT_FOUND_ERROR: 104,
23
- TABLE_INVALID_ROW_ERROR: 350,
24
- TABLE_READ_ONLY: 351,
25
- UNAUTHORIZED: 401,
26
- INTERNAL_SERVER_ERROR: 500,
27
- AUTH_CHALLENGE_ERROR: 601,
28
- AUTH_SERVER_ERROR: 602,
29
- AUTH_UPDATE_PUBKEY_ERROR: 603,
30
- LOAD_CONFIG_ERROR: 700,
31
- SAVE_CONFIG_ERROR: 701,
32
- LOAD_TRASH_ENTITY_ERROR: 800,
33
- DELETE_TRASH_ENTITY_ERROR: 801,
34
- };
35
- export const ServerErrorCodes = {
36
- BAD_REQUEST: 400,
37
- UNAUTHORIZED: 401, // not authenticated
38
- FORBIDDEN: 403, // authenticated but no access right
39
- NOT_FOUND: 404,
40
- // sumaris-core-shared errors
41
- INTERNAL_SERVER_ERROR: 500,
42
- DATA_LOCKED: 520,
43
- BAD_UPDATE_DATE: 521,
44
- DENY_DELETION: 522,
45
- DATA_NOT_UNIQUE: 523,
46
- // sumaris-server errors
47
- INVALID_EMAIL_CONFIRMATION: 550,
48
- INVALID_QUERY_VARIABLES: 551,
49
- ACCOUNT_ALREADY_EXISTS: 552,
50
- BAD_APP_VERSION: 553,
51
- };
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLGFBQWEsRUFBRSxDQUFDO0lBRWhCLGtCQUFrQixFQUFFLENBQUM7SUFDckIsWUFBWSxFQUFFLENBQUM7SUFDZixxQkFBcUIsRUFBRSxDQUFDO0lBQ3hCLHdCQUF3QixFQUFFLENBQUM7SUFDM0IseUJBQXlCLEVBQUUsQ0FBQztJQUM1QixxQkFBcUIsRUFBRSxDQUFDO0lBQ3hCLDhCQUE4QixFQUFFLENBQUM7SUFDakMsb0JBQW9CLEVBQUUsQ0FBQztJQUN2QixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLGtCQUFrQixFQUFFLENBQUM7SUFDckIsbUJBQW1CLEVBQUUsQ0FBQztJQUN0Qix1QkFBdUIsRUFBRSxFQUFFO0lBQzNCLCtCQUErQixFQUFFLEVBQUU7SUFFbkMsZUFBZSxFQUFFLEVBQUU7SUFDbkIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQixvQkFBb0IsRUFBRSxFQUFFO0lBRXhCLDJCQUEyQjtJQUMzQixrQkFBa0IsRUFBRSxHQUFHO0lBQ3ZCLG9CQUFvQixFQUFFLEdBQUc7SUFFekIsdUJBQXVCLEVBQUUsR0FBRztJQUM1QixlQUFlLEVBQUUsR0FBRztJQUVwQixZQUFZLEVBQUUsR0FBRztJQUNqQixxQkFBcUIsRUFBRSxHQUFHO0lBQzFCLG9CQUFvQixFQUFFLEdBQUc7SUFDekIsaUJBQWlCLEVBQUUsR0FBRztJQUN0Qix3QkFBd0IsRUFBRSxHQUFHO0lBRTdCLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsaUJBQWlCLEVBQUUsR0FBRztJQUV0Qix1QkFBdUIsRUFBRSxHQUFHO0lBQzVCLHlCQUF5QixFQUFFLEdBQUc7Q0FDL0IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFlBQVksRUFBRSxHQUFHLEVBQUUsb0JBQW9CO0lBQ3ZDLFNBQVMsRUFBRSxHQUFHLEVBQUUsb0NBQW9DO0lBQ3BELFNBQVMsRUFBRSxHQUFHO0lBRWQsNkJBQTZCO0lBQzdCLHFCQUFxQixFQUFFLEdBQUc7SUFDMUIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsZUFBZSxFQUFFLEdBQUc7SUFDcEIsYUFBYSxFQUFFLEdBQUc7SUFDbEIsZUFBZSxFQUFFLEdBQUc7SUFFcEIsd0JBQXdCO0lBQ3hCLDBCQUEwQixFQUFFLEdBQUc7SUFDL0IsdUJBQXVCLEVBQUUsR0FBRztJQUM1QixzQkFBc0IsRUFBRSxHQUFHO0lBQzNCLGVBQWUsRUFBRSxHQUFHO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtRXJyb3JzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBFcnJvciB7XG4gIGNvZGU/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwRXJyb3JXaXRoRGV0YWlscyBleHRlbmRzIEFwcEVycm9yIHtcbiAgZGV0YWlsczogQXBwRXJyb3IgJiB7IGVycm9ycz86IEZvcm1FcnJvcnMgfTtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNlcnZpY2VFcnJvciB7XG4gIGNvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICByZWplY3Q/OiAoZXJyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgRXJyb3JDb2RlcyA9IHtcbiAgVU5LTk9XTl9FUlJPUjogMCxcblxuICBMT0FEX0FDQ09VTlRfRVJST1I6IDEsXG4gIEJBRF9QQVNTV09SRDogMixcbiAgVU5LTk9XTl9BQ0NPVU5UX0VNQUlMOiAzLFxuICBFTUFJTF9BTFJFQURZX1JFR0lTVEVSRUQ6IDQsXG4gIFVOUkVBQ0hBQkxFX05FVFdPUktfRVJST1I6IDQsXG4gIFVOS05PV05fTkVUV09SS19FUlJPUjogNSxcbiAgU0VOVF9DT05GSVJNQVRJT05fRU1BSUxfRkFJTEVEOiA2LFxuICBDT05GSVJNX0VNQUlMX0ZBSUxFRDogNyxcbiAgU0FWRV9BQ0NPVU5UX0VSUk9SOiA4LFxuICBBQ0NPVU5UX05PVF9FWElTVFM6IDksXG4gIFNBVkVfU0VUVElOR1NfRVJST1I6IDgsXG4gIFNVQlNDUklCRV9BQ0NPVU5UX0VSUk9SOiAxMCxcbiAgRU5USVRZX1NUT1JBR0VfTUlHUkFUSU9OX0ZBSUxFRDogMTEsXG5cbiAgTE9BRF9EQVRBX0VSUk9SOiAxMixcbiAgU0FWRV9EQVRBX0VSUk9SOiAxMyxcbiAgREVMRVRFX0RBVEFfRVJST1I6IDE0LFxuICBTVUJTQ1JJQkVfREFUQV9FUlJPUjogMTUsXG5cbiAgLy8gREFUQSBlcnJvcnMgKGxvYWQgZXJyb3IpXG4gIExPQURfUEVSU09OU19FUlJPUjogMTAwLFxuICBEQVRBX05PVF9GT1VORF9FUlJPUjogMTA0LFxuXG4gIFRBQkxFX0lOVkFMSURfUk9XX0VSUk9SOiAzNTAsXG4gIFRBQkxFX1JFQURfT05MWTogMzUxLFxuXG4gIFVOQVVUSE9SSVpFRDogNDAxLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1I6IDUwMCxcbiAgQVVUSF9DSEFMTEVOR0VfRVJST1I6IDYwMSxcbiAgQVVUSF9TRVJWRVJfRVJST1I6IDYwMixcbiAgQVVUSF9VUERBVEVfUFVCS0VZX0VSUk9SOiA2MDMsXG5cbiAgTE9BRF9DT05GSUdfRVJST1I6IDcwMCxcbiAgU0FWRV9DT05GSUdfRVJST1I6IDcwMSxcblxuICBMT0FEX1RSQVNIX0VOVElUWV9FUlJPUjogODAwLFxuICBERUxFVEVfVFJBU0hfRU5USVRZX0VSUk9SOiA4MDEsXG59O1xuXG5leHBvcnQgY29uc3QgU2VydmVyRXJyb3JDb2RlcyA9IHtcbiAgQkFEX1JFUVVFU1Q6IDQwMCxcbiAgVU5BVVRIT1JJWkVEOiA0MDEsIC8vIG5vdCBhdXRoZW50aWNhdGVkXG4gIEZPUkJJRERFTjogNDAzLCAvLyBhdXRoZW50aWNhdGVkIGJ1dCBubyBhY2Nlc3MgcmlnaHRcbiAgTk9UX0ZPVU5EOiA0MDQsXG5cbiAgLy8gc3VtYXJpcy1jb3JlLXNoYXJlZCBlcnJvcnNcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SOiA1MDAsXG4gIERBVEFfTE9DS0VEOiA1MjAsXG4gIEJBRF9VUERBVEVfREFURTogNTIxLFxuICBERU5ZX0RFTEVUSU9OOiA1MjIsXG4gIERBVEFfTk9UX1VOSVFVRTogNTIzLFxuXG4gIC8vIHN1bWFyaXMtc2VydmVyIGVycm9yc1xuICBJTlZBTElEX0VNQUlMX0NPTkZJUk1BVElPTjogNTUwLFxuICBJTlZBTElEX1FVRVJZX1ZBUklBQkxFUzogNTUxLFxuICBBQ0NPVU5UX0FMUkVBRFlfRVhJU1RTOiA1NTIsXG4gIEJBRF9BUFBfVkVSU0lPTjogNTUzLFxufTtcbiJdfQ==