@sumaris-net/ngx-components 2.6.17 → 4.0.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 (721) hide show
  1. package/esm2022/public_api.mjs +337 -0
  2. package/{esm2020 → esm2022}/src/app/admin/admin-routing.module.mjs +8 -8
  3. package/{esm2020 → esm2022}/src/app/admin/admin.module.mjs +11 -11
  4. package/esm2022/src/app/admin/services/filter/person.filter.mjs +68 -0
  5. package/esm2022/src/app/admin/services/person.service.mjs +174 -0
  6. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  7. package/esm2022/src/app/admin/users/users.mjs +273 -0
  8. package/esm2022/src/app/admin/users/users.module.mjs +58 -0
  9. package/esm2022/src/app/core/about/about.modal.mjs +84 -0
  10. package/{esm2020 → esm2022}/src/app/core/about/about.module.mjs +9 -9
  11. package/{esm2020 → esm2022}/src/app/core/account/account.module.mjs +22 -22
  12. package/esm2022/src/app/core/account/account.page.mjs +335 -0
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +125 -0
  14. package/esm2022/src/app/core/account/token.table.mjs +141 -0
  15. package/esm2022/src/app/core/auth/auth.form.mjs +140 -0
  16. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  17. package/{esm2020 → esm2022}/src/app/core/auth/auth.module.mjs +16 -16
  18. package/{esm2020 → esm2022}/src/app/core/core.module.mjs +87 -87
  19. package/esm2022/src/app/core/core.testing.module.mjs +93 -0
  20. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +109 -0
  21. package/{esm2020 → esm2022}/src/app/core/form/buttons/form-buttons-bar.module.mjs +10 -10
  22. package/esm2022/src/app/core/form/entity/editor.class.mjs +713 -0
  23. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +436 -0
  24. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +724 -0
  25. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  26. package/{esm2020 → esm2022}/src/app/core/form/entity/entity.module.mjs +11 -11
  27. package/esm2022/src/app/core/form/form.class.mjs +353 -0
  28. package/{esm2020 → esm2022}/src/app/core/form/form.module.mjs +30 -30
  29. package/{esm2020 → esm2022}/src/app/core/form/form.utils.mjs +69 -60
  30. package/esm2022/src/app/core/form/list/list.form.mjs +233 -0
  31. package/{esm2020 → esm2022}/src/app/core/form/list/list.module.mjs +10 -10
  32. package/esm2022/src/app/core/form/properties/properties.form.mjs +143 -0
  33. package/{esm2020 → esm2022}/src/app/core/form/properties/properties.module.mjs +13 -13
  34. package/esm2022/src/app/core/form/properties/properties.table.mjs +269 -0
  35. package/esm2022/src/app/core/form/properties/property.validator.mjs +24 -0
  36. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +95 -0
  37. package/{esm2020 → esm2022}/src/app/core/form/properties/testing/properties-form.testing.module.mjs +11 -11
  38. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  39. package/{esm2020 → esm2022}/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -10
  40. package/esm2022/src/app/core/form/text-popover/text-form.component.mjs +97 -0
  41. package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.component.mjs +26 -20
  42. package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.module.mjs +12 -12
  43. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.module.mjs +5 -5
  44. package/esm2022/src/app/core/graphql/graphql.service.mjs +787 -0
  45. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.utils.mjs +2 -1
  46. package/esm2022/src/app/core/home/home.mjs +283 -0
  47. package/esm2022/src/app/core/home/home.module.mjs +51 -0
  48. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  49. package/{esm2020 → esm2022}/src/app/core/icon/icon.module.mjs +7 -7
  50. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +358 -0
  51. package/{esm2020 → esm2022}/src/app/core/install/install-upgrade-card.module.mjs +10 -10
  52. package/esm2022/src/app/core/menu/menu.component.mjs +260 -0
  53. package/esm2022/src/app/core/menu/menu.model.mjs +268 -0
  54. package/esm2022/src/app/core/menu/menu.module.mjs +52 -0
  55. package/esm2022/src/app/core/menu/menu.service.mjs +665 -0
  56. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  57. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu-other.testing.mjs +4 -4
  58. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +122 -0
  59. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu.testing.module.mjs +12 -12
  60. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +29 -0
  61. package/{esm2020 → esm2022}/src/app/core/offline/update-offline-mode-card.module.mjs +10 -10
  62. package/esm2022/src/app/core/peer/select-peer.modal.mjs +192 -0
  63. package/{esm2020 → esm2022}/src/app/core/peer/select-peer.module.mjs +13 -13
  64. package/esm2022/src/app/core/register/register-confirm.page.mjs +88 -0
  65. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  66. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  67. package/{esm2020 → esm2022}/src/app/core/register/register.module.mjs +13 -13
  68. package/esm2022/src/app/core/services/account.service.mjs +1217 -0
  69. package/esm2022/src/app/core/services/auth-guard.service.mjs +76 -0
  70. package/esm2022/src/app/core/services/base-entity-service.class.mjs +482 -0
  71. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +224 -0
  72. package/esm2022/src/app/core/services/base58.mjs +79 -0
  73. package/{esm2020 → esm2022}/src/app/core/services/config/core.config.mjs +4 -4
  74. package/esm2022/src/app/core/services/config.service.mjs +365 -0
  75. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  76. package/esm2022/src/app/core/services/local-settings.service.mjs +468 -0
  77. package/esm2022/src/app/core/services/model/account.model.mjs +153 -0
  78. package/esm2022/src/app/core/services/model/config.model.mjs +105 -0
  79. package/esm2022/src/app/core/services/model/department.model.mjs +33 -0
  80. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  81. package/esm2022/src/app/core/services/model/entity.model.mjs +228 -0
  82. package/esm2022/src/app/core/services/model/peer.model.mjs +82 -0
  83. package/esm2022/src/app/core/services/model/person.model.mjs +109 -0
  84. package/esm2022/src/app/core/services/model/referential.model.mjs +185 -0
  85. package/esm2022/src/app/core/services/model/token.model.mjs +52 -0
  86. package/esm2022/src/app/core/services/network.service.mjs +608 -0
  87. package/{esm2020 → esm2022}/src/app/core/services/pipes/account.pipes.mjs +9 -9
  88. package/{esm2020 → esm2022}/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  89. package/{esm2020 → esm2022}/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  90. package/{esm2020 → esm2022}/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  91. package/esm2022/src/app/core/services/platform.service.mjs +546 -0
  92. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +434 -0
  93. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +458 -0
  94. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  95. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  96. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  97. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  98. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +67 -0
  99. package/{esm2020 → esm2022}/src/app/core/services/validator/user-settings.validator.mjs +4 -4
  100. package/{esm2020 → esm2022}/src/app/core/services/validator/user-token.validator.mjs +4 -4
  101. package/{esm2020 → esm2022}/src/app/core/settings/settings.module.mjs +9 -9
  102. package/esm2022/src/app/core/settings/settings.page.mjs +328 -0
  103. package/esm2022/src/app/core/table/actions-column.component.mjs +115 -0
  104. package/esm2022/src/app/core/table/async-table.class.mjs +1735 -0
  105. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +386 -0
  106. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +401 -0
  107. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  108. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  109. package/esm2022/src/app/core/table/table.class.mjs +1771 -0
  110. package/esm2022/src/app/core/table/table.model.mjs +16 -0
  111. package/{esm2020 → esm2022}/src/app/core/table/table.module.mjs +12 -12
  112. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +28 -0
  113. package/esm2022/src/app/core/table/testing/table.testing.mjs +291 -0
  114. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +50 -0
  115. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  116. package/esm2022/src/app/core/table/testing/table2.testing.mjs +250 -0
  117. package/esm2022/src/app/shared/audio/audio.mjs +251 -0
  118. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  119. package/{esm2020 → esm2022}/src/app/shared/audio/audio.testing.module.mjs +10 -10
  120. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  121. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  122. package/esm2022/src/app/shared/dates.mjs +149 -0
  123. package/esm2022/src/app/shared/debug/debug.component.mjs +40 -0
  124. package/{esm2020 → esm2022}/src/app/shared/debug/debug.module.mjs +14 -14
  125. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +98 -0
  126. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +32 -0
  127. package/{esm2020 → esm2022}/src/app/shared/directives/directives.module.mjs +13 -13
  128. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  129. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  130. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  131. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  132. package/{esm2020 → esm2022}/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  133. package/esm2022/src/app/shared/file/file.service.mjs +122 -0
  134. package/{esm2020 → esm2022}/src/app/shared/file/file.utils.mjs +2 -2
  135. package/esm2022/src/app/shared/form/field.component.mjs +353 -0
  136. package/{esm2020 → esm2022}/src/app/shared/form/field.model.mjs +1 -1
  137. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  138. package/{esm2020 → esm2022}/src/app/shared/functions.mjs +5 -4
  139. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +82 -0
  140. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  141. package/esm2022/src/app/shared/graph/graph-colors.mjs +219 -0
  142. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +59 -0
  143. package/esm2022/src/app/shared/help/help.modal.mjs +63 -0
  144. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +24 -0
  145. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +85 -0
  146. package/{esm2020 → esm2022}/src/app/shared/hotkeys/shared-hotkeys.module.mjs +13 -13
  147. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +388 -0
  148. package/{esm2020 → esm2022}/src/app/shared/image/gallery/image-gallery.module.mjs +22 -22
  149. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  150. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
  151. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +41 -0
  152. package/{esm2020 → esm2022}/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +16 -16
  153. package/{esm2020 → esm2022}/src/app/shared/image/image.module.mjs +11 -11
  154. package/esm2022/src/app/shared/image/image.service.mjs +104 -0
  155. package/esm2022/src/app/shared/inputs.mjs +231 -0
  156. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +28 -0
  157. package/esm2022/src/app/shared/logging/logging-service.class.mjs +128 -0
  158. package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.module.mjs +8 -8
  159. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +49 -0
  160. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +961 -0
  161. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +82 -0
  162. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +217 -0
  163. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +209 -0
  164. package/{esm2020 → esm2022}/src/app/shared/material/badge/badge.module.mjs +9 -9
  165. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  166. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +72 -0
  167. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +266 -0
  168. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +271 -0
  169. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +54 -0
  170. package/esm2022/src/app/shared/material/chips/chips.module.mjs +76 -0
  171. package/esm2022/src/app/shared/material/chips/material.chips.mjs +719 -0
  172. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +148 -0
  173. package/{esm2020 → esm2022}/src/app/shared/material/datetime/datetime.module.mjs +38 -38
  174. package/esm2022/src/app/shared/material/datetime/material.date.mjs +396 -0
  175. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +406 -0
  176. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +523 -0
  177. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +125 -0
  178. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +122 -0
  179. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +115 -0
  180. package/esm2022/src/app/shared/material/duration/duration.module.mjs +70 -0
  181. package/{esm2020 → esm2022}/src/app/shared/material/duration/duration.utils.mjs +2 -2
  182. package/esm2022/src/app/shared/material/duration/material.duration.mjs +273 -0
  183. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +79 -0
  184. package/{esm2020 → esm2022}/src/app/shared/material/latlong/latlong.utils.mjs +3 -3
  185. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +415 -0
  186. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +72 -0
  187. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +113 -0
  188. package/esm2022/src/app/shared/material/material.module.mjs +224 -0
  189. package/esm2022/src/app/shared/material/material.testing.module.mjs +210 -0
  190. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +104 -0
  191. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +83 -0
  192. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +203 -0
  193. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +19 -0
  194. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +168 -0
  195. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +36 -0
  196. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +16 -0
  197. package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.module.mjs +21 -21
  198. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +48 -0
  199. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +48 -0
  200. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  201. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +368 -0
  202. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +56 -0
  203. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  204. package/esm2022/src/app/shared/material/testing/common.test.mjs +105 -0
  205. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +212 -0
  206. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  207. package/{esm2020 → esm2022}/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  208. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  209. package/{esm2020 → esm2022}/src/app/shared/pipes/arrays.pipe.mjs +25 -25
  210. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +27 -0
  211. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +51 -0
  212. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  213. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  214. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +36 -0
  215. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +60 -0
  216. package/esm2022/src/app/shared/pipes/form.pipes.mjs +194 -0
  217. package/{esm2020 → esm2022}/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  218. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  219. package/{esm2020 → esm2022}/src/app/shared/pipes/maps.pipe.mjs +13 -13
  220. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +118 -0
  221. package/{esm2020 → esm2022}/src/app/shared/pipes/math.pipes.mjs +13 -13
  222. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  223. package/{esm2020 → esm2022}/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  224. package/esm2022/src/app/shared/pipes/pipes.module.mjs +256 -0
  225. package/esm2022/src/app/shared/pipes/property.pipes.mjs +97 -0
  226. package/esm2022/src/app/shared/pipes/string.pipes.mjs +135 -0
  227. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  228. package/esm2022/src/app/shared/pipes/types.pipes.mjs +58 -0
  229. package/esm2022/src/app/shared/rx-state.module.mjs +23 -0
  230. package/esm2022/src/app/shared/services/entity-service.class.mjs +7 -0
  231. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +347 -0
  232. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  233. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +121 -0
  234. package/esm2022/src/app/shared/services/startable-service.class.mjs +113 -0
  235. package/esm2022/src/app/shared/services/translate-context.service.mjs +104 -0
  236. package/{esm2020 → esm2022}/src/app/shared/shared-routing.module.mjs +11 -11
  237. package/esm2022/src/app/shared/shared.module.mjs +217 -0
  238. package/{esm2020 → esm2022}/src/app/shared/shared.testing.module.mjs +40 -40
  239. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +286 -0
  240. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +46 -0
  241. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +7 -7
  242. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing.module.mjs +6 -6
  243. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  244. package/{esm2020 → esm2022}/src/app/shared/storage/storage.utils.mjs +1 -1
  245. package/esm2022/src/app/shared/testing/observable.test.mjs +96 -0
  246. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  247. package/esm2022/src/app/shared/toast/toast.testing.mjs +52 -0
  248. package/{esm2020 → esm2022}/src/app/shared/toast/toast.testing.module.mjs +10 -10
  249. package/esm2022/src/app/shared/toast/toasts.mjs +144 -0
  250. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +60 -0
  251. package/esm2022/src/app/shared/toolbar/toolbar.mjs +264 -0
  252. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +57 -0
  253. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  254. package/{esm2020 → esm2022}/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -10
  255. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +107 -0
  256. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +211 -0
  257. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +27 -0
  258. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +106 -0
  259. package/esm2022/src/app/shared/validator/validators.mjs +580 -0
  260. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  261. package/esm2022/src/app/social/job/job.module.mjs +42 -0
  262. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  263. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +232 -0
  264. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +50 -0
  265. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +28 -0
  266. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +73 -0
  267. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +43 -0
  268. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +53 -0
  269. package/{esm2020 → esm2022}/src/app/social/job/testing/job.testing.module.mjs +9 -9
  270. package/esm2022/src/app/social/message/message.form.mjs +88 -0
  271. package/esm2022/src/app/social/message/message.modal.mjs +102 -0
  272. package/esm2022/src/app/social/message/message.model.mjs +71 -0
  273. package/esm2022/src/app/social/message/message.module.mjs +35 -0
  274. package/esm2022/src/app/social/message/message.service.mjs +88 -0
  275. package/{esm2020 → esm2022}/src/app/social/social.module.mjs +19 -19
  276. package/{esm2020 → esm2022}/src/app/social/social.testing.module.mjs +10 -10
  277. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +123 -0
  278. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +263 -0
  279. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +233 -0
  280. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +128 -0
  281. package/{esm2020 → esm2022}/src/app/social/user-event/testing/user-event.testing.module.mjs +9 -9
  282. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +116 -0
  283. package/esm2022/src/app/social/user-event/user-event.module.mjs +43 -0
  284. package/esm2022/src/app/social/user-event/user-event.service.mjs +498 -0
  285. package/esm2022/src/environments/environment.class.mjs +47 -0
  286. package/esm2022/src/environments/environment.mjs +94 -0
  287. package/{fesm2020 → fesm2022}/sumaris-net.ngx-components.mjs +12191 -10087
  288. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  289. package/package.json +11 -16
  290. package/public_api.d.ts +12 -5
  291. package/src/app/admin/users/users.d.ts +1 -1
  292. package/src/app/admin/users/users.module.d.ts +2 -1
  293. package/src/app/core/about/about.modal.d.ts +1 -1
  294. package/src/app/core/account/account.page.d.ts +3 -4
  295. package/src/app/core/account/new-token.modal.d.ts +1 -1
  296. package/src/app/core/account/token.table.d.ts +1 -1
  297. package/src/app/core/auth/auth.form.d.ts +1 -1
  298. package/src/app/core/auth/auth.modal.d.ts +1 -1
  299. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -2
  300. package/src/app/core/form/entity/editor.class.d.ts +4 -4
  301. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
  302. package/src/app/core/form/entity/entity-editor.class.d.ts +6 -10
  303. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  304. package/src/app/core/form/form.class.d.ts +1 -1
  305. package/src/app/core/form/list/list.form.d.ts +1 -1
  306. package/src/app/core/form/properties/properties.form.d.ts +1 -1
  307. package/src/app/core/form/properties/properties.table.d.ts +2 -3
  308. package/src/app/core/form/properties/property.validator.d.ts +1 -1
  309. package/src/app/core/form/properties/testing/properties-form.test.d.ts +1 -1
  310. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +1 -1
  311. package/src/app/core/form/text-popover/text-form.component.d.ts +1 -1
  312. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
  313. package/src/app/core/home/home.d.ts +1 -1
  314. package/src/app/core/home/home.module.d.ts +4 -3
  315. package/src/app/core/icon/icon.component.d.ts +1 -1
  316. package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
  317. package/src/app/core/menu/menu.component.d.ts +4 -8
  318. package/src/app/core/menu/menu.model.d.ts +0 -1
  319. package/src/app/core/menu/menu.module.d.ts +3 -5
  320. package/src/app/core/menu/menu.service.d.ts +1 -3
  321. package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
  322. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  323. package/src/app/core/menu/testing/menu.testing.d.ts +1 -1
  324. package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
  325. package/src/app/core/peer/select-peer.modal.d.ts +1 -1
  326. package/src/app/core/register/register-confirm.page.d.ts +1 -1
  327. package/src/app/core/register/register.form.d.ts +1 -1
  328. package/src/app/core/register/register.modal.d.ts +1 -1
  329. package/src/app/core/services/account.service.d.ts +0 -4
  330. package/src/app/core/services/base-entity-service.class.d.ts +2 -2
  331. package/src/app/core/services/base-graphql-service.class.d.ts +1 -1
  332. package/src/app/core/services/config/core.config.d.ts +1 -1
  333. package/src/app/core/services/model/person.model.d.ts +1 -1
  334. package/src/app/core/services/model/referential.model.d.ts +1 -2
  335. package/src/app/core/services/model/settings.model.d.ts +1 -1
  336. package/src/app/core/services/network.types.d.ts +2 -2
  337. package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
  338. package/src/app/core/services/validator/base.validator.class.d.ts +1 -1
  339. package/src/app/core/settings/settings.page.d.ts +1 -1
  340. package/src/app/core/table/actions-column.component.d.ts +2 -2
  341. package/src/app/core/table/async-table.class.d.ts +1 -1
  342. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -1
  343. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -1
  344. package/src/app/core/table/memory-table.class.d.ts +3 -3
  345. package/src/app/core/table/table-select-columns.component.d.ts +1 -1
  346. package/src/app/core/table/table.class.d.ts +3 -3
  347. package/src/app/core/table/table.model.d.ts +1 -1
  348. package/src/app/core/table/testing/table.testing.d.ts +5 -4
  349. package/src/app/core/table/testing/table.testing.module.d.ts +8 -5
  350. package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
  351. package/src/app/core/table/testing/table2.testing.d.ts +45 -0
  352. package/src/app/shared/audio/audio.d.ts +1 -1
  353. package/src/app/shared/audio/audio.testing.d.ts +1 -1
  354. package/src/app/shared/debug/debug.component.d.ts +1 -1
  355. package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
  356. package/src/app/shared/directives/autotitle.directive.d.ts +1 -1
  357. package/src/app/shared/directives/drag-and-drop.directive.d.ts +1 -1
  358. package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
  359. package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
  360. package/src/app/shared/directives/resizable/resizable.directive.d.ts +1 -1
  361. package/src/app/shared/events.d.ts +1 -1
  362. package/src/app/shared/form/field.component.d.ts +4 -5
  363. package/src/app/shared/form/field.model.d.ts +2 -0
  364. package/src/app/shared/form/loading-spinner.d.ts +1 -1
  365. package/src/app/shared/functions.d.ts +2 -2
  366. package/src/app/shared/help/help.modal.d.ts +2 -2
  367. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +1 -1
  368. package/src/app/shared/hotkeys/hotkeys.service.d.ts +3 -3
  369. package/src/app/shared/image/gallery/image-gallery.component.d.ts +3 -3
  370. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +2 -2
  371. package/src/app/shared/inputs.d.ts +1 -1
  372. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +9 -9
  373. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +10 -9
  374. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +1 -1
  375. package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
  376. package/src/app/shared/material/badge/badge.test.d.ts +1 -1
  377. package/src/app/shared/material/boolean/boolean.module.d.ts +12 -11
  378. package/src/app/shared/material/boolean/material-boolean2.d.ts +66 -0
  379. package/src/app/shared/material/boolean/material.boolean.d.ts +5 -4
  380. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +21 -0
  381. package/src/app/shared/material/chips/material.chips.d.ts +8 -9
  382. package/src/app/shared/material/chips/testing/chips.test.d.ts +2 -2
  383. package/src/app/shared/material/datetime/datetime.module.d.ts +2 -2
  384. package/src/app/shared/material/datetime/material.date.d.ts +5 -4
  385. package/src/app/shared/material/datetime/material.dateshort.d.ts +8 -7
  386. package/src/app/shared/material/datetime/material.datetime.d.ts +8 -6
  387. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +7 -1
  388. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +3 -1
  389. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +3 -1
  390. package/src/app/shared/material/duration/duration.module.d.ts +6 -5
  391. package/src/app/shared/material/duration/material.duration.d.ts +6 -5
  392. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +22 -0
  393. package/src/app/shared/material/latlong/material.latlong.d.ts +8 -7
  394. package/src/app/shared/material/latlong/material.latlong.module.d.ts +9 -8
  395. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +3 -1
  396. package/src/app/shared/material/material.testing.module.d.ts +22 -18
  397. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
  398. package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
  399. package/src/app/shared/material/numpad/numpad.container.d.ts +1 -1
  400. package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
  401. package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
  402. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -3
  403. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +1 -1
  404. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -3
  405. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -6
  406. package/src/app/shared/material/swipe/swipe.module.d.ts +2 -1
  407. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -1
  408. package/src/app/shared/material/testing/common.test.d.ts +25 -0
  409. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -1
  410. package/src/app/shared/named-filter/named-filter.service.d.ts +1 -1
  411. package/src/app/shared/pipes/maskito.pipe.d.ts +16 -0
  412. package/src/app/shared/pipes/ng-init.pipe.d.ts +1 -1
  413. package/src/app/shared/pipes/pipes.module.d.ts +5 -4
  414. package/src/app/shared/pipes/string.pipes.d.ts +6 -0
  415. package/src/app/shared/pipes/types.pipes.d.ts +7 -0
  416. package/src/app/shared/rx-state.module.d.ts +10 -0
  417. package/src/app/shared/services/entity-service.class.d.ts +1 -1
  418. package/src/app/shared/services/job.utils.d.ts +1 -1
  419. package/src/app/shared/services/memory-entity-service.class.d.ts +1 -1
  420. package/src/app/shared/services/startable-observable-service.class.d.ts +3 -0
  421. package/src/app/shared/services/startable-service.class.d.ts +3 -0
  422. package/src/app/shared/shared.module.d.ts +7 -9
  423. package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
  424. package/src/app/shared/storage/storage-explorer.module.d.ts +3 -3
  425. package/src/app/shared/storage/storage.service.d.ts +1 -1
  426. package/src/app/shared/storage/storage.utils.d.ts +1 -1
  427. package/src/app/shared/testing/observable.test.d.ts +1 -1
  428. package/src/app/shared/testing/tests.page.d.ts +1 -1
  429. package/src/app/shared/toast/toast.testing.d.ts +1 -1
  430. package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
  431. package/src/app/shared/toolbar/toolbar.d.ts +1 -1
  432. package/src/app/shared/toolbar/toolbar.module.d.ts +4 -3
  433. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -1
  434. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
  435. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
  436. package/src/app/shared/upload-file/upload-file.model.d.ts +2 -2
  437. package/src/app/social/job/progression/job-progression.component.d.ts +17 -3
  438. package/src/app/social/job/progression/job-progression.icon.d.ts +24 -10
  439. package/src/app/social/job/progression/job-progression.list.d.ts +3 -3
  440. package/src/app/social/job/progression/job-progression.model.d.ts +0 -1
  441. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -6
  442. package/src/app/social/message/message.form.d.ts +2 -8
  443. package/src/app/social/message/message.modal.d.ts +1 -5
  444. package/src/app/social/message/message.model.d.ts +0 -2
  445. package/src/app/social/message/message.module.d.ts +1 -2
  446. package/src/app/social/message/message.service.d.ts +3 -8
  447. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -3
  448. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
  449. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -1
  450. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -1
  451. package/src/app/social/user-event/user-event.model.d.ts +2 -2
  452. package/src/app/social/user-event/user-event.module.d.ts +3 -2
  453. package/src/app/social/user-event/user-event.service.d.ts +1 -6
  454. package/src/assets/i18n/en-US.json +17 -15
  455. package/src/assets/i18n/en.json +17 -15
  456. package/src/assets/i18n/fr.json +7 -6
  457. package/src/assets/img/logo/logo-eis.png +0 -0
  458. package/src/assets/manifest.json +1 -1
  459. package/src/environments/environment.class.d.ts +0 -1
  460. package/src/theme/_material.globals.scss +51 -19
  461. package/src/theme/_material.scss +15 -15
  462. package/src/theme/_mixins.scss +3 -3
  463. package/src/theme/_ngx-components.globals.scss +6 -1
  464. package/src/theme/_ngx-components.scss +262 -534
  465. package/src/theme/_ngx-components.table.scss +599 -0
  466. package/src/theme/_theme.scss +1 -0
  467. package/esm2020/public_api.mjs +0 -330
  468. package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
  469. package/esm2020/src/app/admin/services/person.service.mjs +0 -170
  470. package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -71
  471. package/esm2020/src/app/admin/users/users.mjs +0 -250
  472. package/esm2020/src/app/admin/users/users.module.mjs +0 -54
  473. package/esm2020/src/app/core/about/about.modal.mjs +0 -71
  474. package/esm2020/src/app/core/account/account.page.mjs +0 -319
  475. package/esm2020/src/app/core/account/new-token.modal.mjs +0 -115
  476. package/esm2020/src/app/core/account/token.table.mjs +0 -137
  477. package/esm2020/src/app/core/auth/auth.form.mjs +0 -131
  478. package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
  479. package/esm2020/src/app/core/core.testing.module.mjs +0 -86
  480. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -107
  481. package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -683
  482. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -422
  483. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -696
  484. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  485. package/esm2020/src/app/core/form/form.class.mjs +0 -345
  486. package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
  487. package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
  488. package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -267
  489. package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
  490. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
  491. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
  492. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +0 -89
  493. package/esm2020/src/app/core/graphql/graphql.service.mjs +0 -778
  494. package/esm2020/src/app/core/home/home.mjs +0 -257
  495. package/esm2020/src/app/core/home/home.module.mjs +0 -48
  496. package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
  497. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -344
  498. package/esm2020/src/app/core/menu/menu.component.mjs +0 -242
  499. package/esm2020/src/app/core/menu/menu.model.mjs +0 -247
  500. package/esm2020/src/app/core/menu/menu.module.mjs +0 -57
  501. package/esm2020/src/app/core/menu/menu.service.mjs +0 -660
  502. package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +0 -98
  503. package/esm2020/src/app/core/menu/testing/menu.testing.mjs +0 -121
  504. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
  505. package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -183
  506. package/esm2020/src/app/core/register/register-confirm.page.mjs +0 -81
  507. package/esm2020/src/app/core/register/register.form.mjs +0 -183
  508. package/esm2020/src/app/core/register/register.modal.mjs +0 -52
  509. package/esm2020/src/app/core/services/account.service.mjs +0 -1233
  510. package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
  511. package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -468
  512. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -221
  513. package/esm2020/src/app/core/services/base58.mjs +0 -78
  514. package/esm2020/src/app/core/services/config.service.mjs +0 -355
  515. package/esm2020/src/app/core/services/crypto.service.mjs +0 -107
  516. package/esm2020/src/app/core/services/local-settings.service.mjs +0 -460
  517. package/esm2020/src/app/core/services/model/account.model.mjs +0 -147
  518. package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
  519. package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
  520. package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
  521. package/esm2020/src/app/core/services/model/entity.model.mjs +0 -225
  522. package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
  523. package/esm2020/src/app/core/services/model/person.model.mjs +0 -97
  524. package/esm2020/src/app/core/services/model/referential.model.mjs +0 -167
  525. package/esm2020/src/app/core/services/model/token.model.mjs +0 -48
  526. package/esm2020/src/app/core/services/network.service.mjs +0 -590
  527. package/esm2020/src/app/core/services/platform.service.mjs +0 -534
  528. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
  529. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
  530. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
  531. package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
  532. package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -41
  533. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
  534. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
  535. package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
  536. package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
  537. package/esm2020/src/app/core/table/async-table.class.mjs +0 -1698
  538. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
  539. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
  540. package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
  541. package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
  542. package/esm2020/src/app/core/table/table.class.mjs +0 -1733
  543. package/esm2020/src/app/core/table/table.model.mjs +0 -12
  544. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
  545. package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -281
  546. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +0 -38
  547. package/esm2020/src/app/shared/audio/audio.mjs +0 -248
  548. package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
  549. package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
  550. package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
  551. package/esm2020/src/app/shared/dates.mjs +0 -149
  552. package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
  553. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -93
  554. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
  555. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
  556. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
  557. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -59
  558. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
  559. package/esm2020/src/app/shared/file/file.service.mjs +0 -117
  560. package/esm2020/src/app/shared/form/field.component.mjs +0 -332
  561. package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
  562. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
  563. package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
  564. package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
  565. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
  566. package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
  567. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  568. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -84
  569. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -368
  570. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
  571. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
  572. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
  573. package/esm2020/src/app/shared/image/image.service.mjs +0 -98
  574. package/esm2020/src/app/shared/inputs.mjs +0 -231
  575. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  576. package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
  577. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
  578. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -920
  579. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
  580. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
  581. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -199
  582. package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
  583. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -68
  584. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -253
  585. package/esm2020/src/app/shared/material/chips/chips.module.mjs +0 -76
  586. package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -696
  587. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
  588. package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -376
  589. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -385
  590. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -499
  591. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -108
  592. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -110
  593. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -103
  594. package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
  595. package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -257
  596. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -382
  597. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
  598. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
  599. package/esm2020/src/app/shared/material/material.module.mjs +0 -224
  600. package/esm2020/src/app/shared/material/material.testing.module.mjs +0 -168
  601. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
  602. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +0 -80
  603. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
  604. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
  605. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
  606. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -37
  607. package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
  608. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
  609. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
  610. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
  611. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -344
  612. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  613. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
  614. package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -202
  615. package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +0 -45
  616. package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +0 -63
  617. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +0 -25
  618. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
  619. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
  620. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
  621. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
  622. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
  623. package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
  624. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
  625. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
  626. package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -239
  627. package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
  628. package/esm2020/src/app/shared/pipes/string.pipes.mjs +0 -121
  629. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
  630. package/esm2020/src/app/shared/pipes/types.pipes.mjs +0 -45
  631. package/esm2020/src/app/shared/services/entity-service.class.mjs +0 -7
  632. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -339
  633. package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
  634. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -118
  635. package/esm2020/src/app/shared/services/startable-service.class.mjs +0 -110
  636. package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -103
  637. package/esm2020/src/app/shared/shared.module.mjs +0 -231
  638. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
  639. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -47
  640. package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
  641. package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
  642. package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
  643. package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
  644. package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
  645. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
  646. package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
  647. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
  648. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -58
  649. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
  650. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
  651. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
  652. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
  653. package/esm2020/src/app/shared/validator/validators.mjs +0 -580
  654. package/esm2020/src/app/shared/version/versions.mjs +0 -81
  655. package/esm2020/src/app/social/job/job.module.mjs +0 -42
  656. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -20
  657. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -216
  658. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -43
  659. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
  660. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
  661. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -52
  662. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
  663. package/esm2020/src/app/social/message/message.form.mjs +0 -136
  664. package/esm2020/src/app/social/message/message.modal.mjs +0 -99
  665. package/esm2020/src/app/social/message/message.model.mjs +0 -67
  666. package/esm2020/src/app/social/message/message.module.mjs +0 -22
  667. package/esm2020/src/app/social/message/message.service.mjs +0 -105
  668. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
  669. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
  670. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
  671. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
  672. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
  673. package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
  674. package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -501
  675. package/esm2020/src/environments/environment.class.mjs +0 -5
  676. package/esm2020/src/environments/environment.loader.mjs +0 -79
  677. package/esm2020/src/environments/environment.mjs +0 -97
  678. package/fesm2015/sumaris-net.ngx-components.mjs +0 -40966
  679. package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
  680. package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
  681. package/resources/README.md +0 -7
  682. package/src/assets/environments/environment-test.json +0 -6
  683. package/src/environments/environment.loader.d.ts +0 -26
  684. /package/{esm2020 → esm2022}/src/app/core/services/errors.mjs +0 -0
  685. /package/{esm2020 → esm2022}/src/app/core/services/model/filter.model.mjs +0 -0
  686. /package/{esm2020 → esm2022}/src/app/core/services/model/history.model.mjs +0 -0
  687. /package/{esm2020 → esm2022}/src/app/core/services/model/model.enum.mjs +0 -0
  688. /package/{esm2020 → esm2022}/src/app/core/services/model/settings.model.mjs +0 -0
  689. /package/{esm2020 → esm2022}/src/app/core/services/model/tree-item-entity.model.mjs +0 -0
  690. /package/{esm2020 → esm2022}/src/app/core/services/network.types.mjs +0 -0
  691. /package/{esm2020 → esm2022}/src/app/core/services/network.utils.mjs +0 -0
  692. /package/{esm2020 → esm2022}/src/app/core/table/table.utils.mjs +0 -0
  693. /package/{esm2020 → esm2022}/src/app/shared/alerts.mjs +0 -0
  694. /package/{esm2020 → esm2022}/src/app/shared/constants.mjs +0 -0
  695. /package/{esm2020 → esm2022}/src/app/shared/debug/debug-service.class.mjs +0 -0
  696. /package/{esm2020 → esm2022}/src/app/shared/events.mjs +0 -0
  697. /package/{esm2020 → esm2022}/src/app/shared/file/csv.utils.mjs +0 -0
  698. /package/{esm2020 → esm2022}/src/app/shared/file/images.utils.mjs +0 -0
  699. /package/{esm2020 → esm2022}/src/app/shared/file/json.utils.mjs +0 -0
  700. /package/{esm2020 → esm2022}/src/app/shared/file/uri.utils.mjs +0 -0
  701. /package/{esm2020 → esm2022}/src/app/shared/focusable.mjs +0 -0
  702. /package/{esm2020 → esm2022}/src/app/shared/forms.mjs +0 -0
  703. /package/{esm2020 → esm2022}/src/app/shared/gesture/hammer.utils.mjs +0 -0
  704. /package/{esm2020 → esm2022}/src/app/shared/graph/colors.utils.mjs +0 -0
  705. /package/{esm2020 → esm2022}/src/app/shared/http/http.utils.mjs +0 -0
  706. /package/{esm2020 → esm2022}/src/app/shared/image/image.model.mjs +0 -0
  707. /package/{esm2020 → esm2022}/src/app/shared/logging/log-level.model.mjs +0 -0
  708. /package/{esm2020 → esm2022}/src/app/shared/logging/logger.model.mjs +0 -0
  709. /package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.config.mjs +0 -0
  710. /package/{esm2020 → esm2022}/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -0
  711. /package/{esm2020 → esm2022}/src/app/shared/material/material.animations.mjs +0 -0
  712. /package/{esm2020 → esm2022}/src/app/shared/modules.mjs +0 -0
  713. /package/{esm2020 → esm2022}/src/app/shared/observables.mjs +0 -0
  714. /package/{esm2020 → esm2022}/src/app/shared/platforms.mjs +0 -0
  715. /package/{esm2020 → esm2022}/src/app/shared/services/job.utils.mjs +0 -0
  716. /package/{esm2020 → esm2022}/src/app/shared/services/validator-service.class.mjs +0 -0
  717. /package/{esm2020 → esm2022}/src/app/shared/services.mjs +0 -0
  718. /package/{esm2020 → esm2022}/src/app/shared/types.mjs +0 -0
  719. /package/{esm2020 → esm2022}/src/app/social/social.errors.mjs +0 -0
  720. /package/{esm2020 → esm2022}/src/app/social/user-event/user-event.model.mjs +0 -0
  721. /package/{esm2020 → esm2022}/sumaris-net.ngx-components.mjs +0 -0
@@ -396,11 +396,11 @@ export function equals(o1, o2) {
396
396
  let length;
397
397
  let key;
398
398
  let keySet;
399
- if (t1 == t2 && t1 == 'object') {
399
+ if (t1 === t2 && t1 === 'object') {
400
400
  if (Array.isArray(o1)) {
401
401
  if (!Array.isArray(o2))
402
402
  return false;
403
- if ((length = o1.length) == o2.length) {
403
+ if ((length = o1.length) === o2.length) {
404
404
  for (key = 0; key < length; key++) {
405
405
  if (!equals(o1[key], o2[key]))
406
406
  return false;
@@ -413,6 +413,7 @@ export function equals(o1, o2) {
413
413
  return false;
414
414
  }
415
415
  keySet = Object.create(null);
416
+ // eslint-disable-next-line guard-for-in
416
417
  for (key in o1) {
417
418
  if (!equals(o1[key], o2[key])) {
418
419
  return false;
@@ -466,8 +467,8 @@ export class Beans {
466
467
  static collectById(array) {
467
468
  return collectByProperty(array, 'id');
468
469
  }
470
+ static collectByProperty = collectByProperty;
469
471
  }
470
- Beans.collectByProperty = collectByProperty;
471
472
  export function findParentWithClass(elem, className) {
472
473
  if (!className)
473
474
  return undefined;
@@ -479,4 +480,4 @@ export function findParentWithClass(elem, className) {
479
480
  }
480
481
  return undefined;
481
482
  }
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxLQUFLLENBQUksR0FBeUI7SUFDaEQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUksR0FBeUI7SUFDdkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEdBQXlCO0lBQ25ELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFJLEdBQXlCO0lBQzFELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBSSxHQUF5QjtJQUN4RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQXlCO0lBQ3JELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtB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LENBQUMsQ0FBQztZQUN4QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3pGLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFJLEtBQVU7UUFDOUIsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBZSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7QUFFTSx1QkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUcvQyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBaUIsRUFBRSxTQUFpQjtJQUN0RSxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pDLElBQUksY0FBYyxHQUFHLElBQUksRUFBRSxhQUFhLENBQUM7SUFDekMsT0FBTyxjQUFjLEVBQUU7UUFDckIsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLGNBQWMsQ0FBQztRQUN4RSxjQUFjLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQztLQUMvQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0tleXNFbnVtLCBLZXlWYWx1ZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOaWw8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsT3JCbGFuazxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnICYmIG9iai50cmltKCkgPT09ICcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxPckJsYW5rPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiAodHlwZW9mIG9iaiAhPT0gJ3N0cmluZycgfHwgb2JqLnRyaW0oKSAhPT0gJycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsT3JOYU48VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmICh0eXBlb2Ygb2JqICE9PSAnbnVtYmVyJyB8fCAhaXNOYU4ob2JqKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOaWxPck5hTjxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgKHR5cGVvZiBvYmogPT09ICdudW1iZXInICYmIGlzTmFOKG9iaikpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90RW1wdHlBcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiBvYmoubGVuZ3RoID4gMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEFycmF5VmFsdWU8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogVCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpc05vdEVtcHR5QXJyYXkob2JqKSA/IG9ialswXSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5QXJyYXk8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgIW9iai5sZW5ndGg7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxCb29sZWFuKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgfHwgZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxTdHJpbmcob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIHN0cmluZyB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgfHwgZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua1N0cmluZyhvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgc3RyaW5nIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykgJiYgb2JqLnRyaW0oKS5sZW5ndGggPT09IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gbm90TmlsT3JEZWZhdWx0PFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogVCk6IFQge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBvYmogOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJyYXlTaXplPFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gIHJldHVybiBpc05vdEVtcHR5QXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoIHx8IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gYXJyYXlHcm91cEJ5PFxuICBUID0gYW55LFxuICBLIGV4dGVuZHMga2V5b2YgVCA9IGFueSxcbiAgTSBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogVFtdO1xufSA9IHsgW2tleTogc3RyaW5nXTogVFtdIH0+KG9iajogVFtdLCBrZXk6IGtleW9mIFQpOiBNIHtcbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiBudWxsO1xuICByZXR1cm4gb2JqLnJlZHVjZSgocnY6IGFueSwgeCkgPT4ge1xuICAgIChydlt4W2tleV1dID0gcnZbeFtrZXldXSB8fCBbXSkucHVzaCh4KTtcbiAgICByZXR1cm4gcnY7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZHVwbGljYXRlZCB2YWx1ZSwgaW4gYXJyYXkuIFdpbGwgY29tcHV0ZSBhIHVuaXF1ZSBrZXkgKGZyb20gZ2l2ZW4gcHJvcGVydGllcywgb3IgZ2l2ZW4gZnVuY3Rpb24pLlxuICogSWYgcHJvcGVydGllc09yS2V5Rm4gaXMgbmlsIG9yIHVuZGVmaW5lZCwgd2lsbCB1c2UgYWxsIG9iamVjdCBwcm9wZXJ0aWVzXG4gKlxuICogQHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIHByb3BlcnRpZXNPcktleUZuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheURpc3RpbmN0PFQgPSBhbnk+KHZhbHVlczogVFtdLCBwcm9wZXJ0aWVzT3JLZXlGbj86IHN0cmluZyB8IHN0cmluZ1tdIHwgKChvYmo6IFQpID0+IHN0cmluZykgKTogVFtdIHtcbiAgaWYgKGlzRW1wdHlBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICBjb25zdCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSA9ICghcHJvcGVydGllc09yS2V5Rm4gJiYgT2JqZWN0LmtleXModmFsdWVzWzBdKSkgfHwgKEFycmF5LmlzQXJyYXkocHJvcGVydGllc09yS2V5Rm4pICYmIHByb3BlcnRpZXNPcktleUZuKTtcbiAgY29uc3QgZ2V0S2V5OiAob2JqOiBUKSA9PiBzdHJpbmcgPVxuICAgICh0eXBlb2YgcHJvcGVydGllc09yS2V5Rm4gPT09ICdmdW5jdGlvbicgJiYgcHJvcGVydGllc09yS2V5Rm4pXG4gICAgfHwgKHR5cGVvZiBwcm9wZXJ0aWVzT3JLZXlGbiA9PT0gJ3N0cmluZycgJiYgKChvYmopID0+IGdldFByb3BlcnR5QnlQYXRoQXNTdHJpbmcob2JqLCBwcm9wZXJ0aWVzT3JLZXlGbikpKVxuICAgIHx8IChpc0VtcHR5QXJyYXkocHJvcGVydGllcykgJiYgKChvYmopID0+IG9iaj8udG9TdHJpbmcoKSkpXG4gICAgfHwgKChvYmopID0+IGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHByb3BlcnRpZXMsICd8JykpO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZXR1cm4gdmFsdWVzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgY29uc3QgdW5pcXVlS2V5ID0gZ2V0S2V5KGl0ZW0pO1xuICAgIGlmIChleGlzdGluZ0lkcy5oYXModW5pcXVlS2V5KSkgcmV0dXJuIHJlczsgLy8gU2tpcCBpZiBkdXBsaWNhdGVcbiAgICBleGlzdGluZ0lkcy5hZGQodW5pcXVlS2V5KTtcbiAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgfSwgW10pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bGxJZlVuZGVmaW5lZDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogVCB8IG51bGwge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgPyBudWxsIDogb2JqO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVuZGVmaW5lZElmTnVsbDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogVCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmo7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJpbUVtcHR5VG9OdWxsPFQ+KHN0cjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHN0ciAmJiBzdHIudHJpbSgpIHx8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmxlbmd0aCAmJiB2YWx1ZSB8fCBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbihvYmo6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IChvYmogIT09ICdmYWxzZScgPyAhIW9iaiA6IGZhbHNlKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcihvYmo6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/ICtvYmogOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9GbG9hdChvYmo6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBwYXJzZUZsb2F0KG9iaikgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9JbnQob2JqOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gcGFyc2VJbnQob2JqLCAwKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b05vdE5pbDxUID0gYW55PihvYmo6IFQsIGRlZmF1bHRWYWx1ZT86IFQpOiBhbnkgfCBudWxsIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gb2JqIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXk8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCBwcm9wZXJ0eT86IHN0cmluZyk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQge1xuICBpZiAoaXNFbXB0eUFycmF5KG9iaikpIHJldHVybiBvYmo7XG4gIGlmIChwcm9wZXJ0eSkge1xuICAgIHJldHVybiBvYmouZmlsdGVyKChpdGVtLCBpLCBhcnJheSkgPT4gYXJyYXkuZmluZEluZGV4KHQgPT4gdCAmJiBpdGVtICYmIHRbcHJvcGVydHldID09PSBpdGVtW3Byb3BlcnR5XSkgPT09IGkpO1xuICB9XG4gIHJldHVybiBvYmouZmlsdGVyKChpdGVtLCBpLCBhcnJheSkgPT4gYXJyYXkuZmluZEluZGV4KHQgPT4gdCAmJiBpdGVtICYmIHQgPT09IGl0ZW0pID09PSBpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoVXBwZXJDYXNlKGlucHV0OiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbnB1dCAmJiBpbnB1dC50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFVwcGVyQ2FzZShpbnB1dDogc3RyaW5nLCByZWdleHA6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQgJiYgISFpbnB1dC50b1VwcGVyQ2FzZSgpLm1hdGNoKHJlZ2V4cCk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIGFueS4gRXhhbXBsZXMgOlxuICogLSAnL3Rlc3QvJyAtPiAnL3Rlc3QnXG4gKiAtICcvJyAtPiB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vVHJhaWxpbmdTbGFzaChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXBhdGggfHwgcGF0aC50cmltKCkgPT09ICcvJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHBhdGgudHJpbSgpLmxhc3RJbmRleE9mKCcvJykgPT09IHBhdGgubGVuZ3RoIC0gMSkgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbCh2YWx1ZTogc3RyaW5nLCBzZWFyY2hTdHJpbmc6IGFueSwgcmVwbGFjZW1lbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB3aGlsZSAodmFsdWUgJiYgdmFsdWUuaW5kZXhPZihzZWFyY2hTdHJpbmcpICE9PSAtMSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShzZWFyY2hTdHJpbmcsIHJlcGxhY2VtZW50KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbmQodmFsdWU6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWU/LmVuZHNXaXRoKGVuZCB8fCAnJykgPyB2YWx1ZS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gZW5kLmxlbmd0aCkgOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGNhc2UgY2hhbmdlIGJ5IGFuIHVuZGVyc2NvcmUgKC5lLmcgJ215U3RyaW5nJyBiZWNvbWVzICdteV9zdHJpbmcnKVxuICpcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMV8kMicpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEaWFjcml0aWNzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0Lm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VnZ2VzdEZyb21TdHJpbmdBcnJheSh2YWx1ZXM6IHN0cmluZ1tdLCB2YWx1ZTogYW55LCBvcHRpb25zPzoge1xuICBzZWFyY2hBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHNlYXJjaEF0dHJpYnV0ZXM/OiBzdHJpbmdbXTtcbn0pOiBzdHJpbmdbXSB7XG4gIHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcqJykgJiYgdmFsdWUudG9VcHBlckNhc2UoKSB8fCB1bmRlZmluZWQ7XG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gdmFsdWVzO1xuXG4gIC8vIElmIHdpbGRjYXJkLCBzZWFyY2ggdXNpbmcgcmVnZXhwXG4gIGlmICgodmFsdWUgYXMgc3RyaW5nKS5pbmRleE9mKCcqJykgIT09IC0xKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgYXMgc3RyaW5nKS5yZXBsYWNlKCcqJywgJy4qJyk7XG4gICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIodiA9PiBtYXRjaFVwcGVyQ2FzZSh2LCB2YWx1ZSkpO1xuICB9XG5cbiAgLy8gSWYgbm8gd2lsZGNhcmQsIHNlYXJjaCB1c2luZyBzdGFydHNXaXRoXG4gIHJldHVybiB2YWx1ZXMuZmlsdGVyKHYgPT4gc3RhcnRzV2l0aFVwcGVyQ2FzZSh2LCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pblByb3BlcnRpZXNQYXRoPFQgPSBhbnk+KG9iajogVCwgcHJvcGVydGllczogc3RyaW5nW10sIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghb2JqKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkaXNwbGF5IGFuIHVuZGVmaW5lZCBlbnRpdHkuJyk7XG4gIGlmIChpc0VtcHR5QXJyYXkocHJvcGVydGllcykpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBvciBlbXB0eSBcXCdwcm9wZXJ0aWVzXFwnIGFyZ3VtZW50Jyk7XG4gIHJldHVybiBwcm9wZXJ0aWVzXG4gICAgLm1hcChwYXRoID0+IGdldFByb3BlcnR5QnlQYXRoKG9iaiwgcGF0aCkpXG4gICAgLmZpbHRlcihpc05vdE5pbE9yQmxhbmspXG4gICAgLmpvaW4oc2VwYXJhdG9yIHx8ICcgLSAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Qcm9wZXJ0aWVzPFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihvYmo6IFQsIGtleXM6IEtbXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvYmopIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRpc3BsYXkgYW4gdW5kZWZpbmVkIGVudGl0eS4nKTtcbiAgcmV0dXJuIGtleXNcbiAgICAubWFwKGtleSA9PiBnZXRQcm9wZXJ0eShvYmosIGtleSkpXG4gICAgLmZpbHRlcihpc05vdE5pbE9yQmxhbmspXG4gICAgLmpvaW4oc2VwYXJhdG9yIHx8ICcgLSAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UGF0aENvbXBhcmF0b3I8VCA9IGFueT4ocGF0aDogc3RyaW5nfHN0cmluZ1tdKTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gIHJldHVybiAoYTogVCwgYjogVCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlQSA9IGdldFByb3BlcnR5QnlQYXRoKGEsIHBhdGgpO1xuICAgIGNvbnN0IHZhbHVlQiA9IGdldFByb3BlcnR5QnlQYXRoKGIsIHBhdGgpO1xuICAgIHJldHVybiB2YWx1ZUEgPT09IHZhbHVlQiA/IDAgOiAodmFsdWVBID4gdmFsdWVCID8gMSA6IC0xKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5Q29tcGFyYXRvcjxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGFueT4oa2V5OiBLLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PiB7XG4gICAgY29uc3QgdmFsdWVBID0gYVtrZXldICE9PSB1bmRlZmluZWQgPyBhW2tleV0gOiBkZWZhdWx0VmFsdWU7XG4gICAgY29uc3QgdmFsdWVCID0gYltrZXldID8gYltrZXldIDogZGVmYXVsdFZhbHVlO1xuICAgIHJldHVybiB2YWx1ZUEgPT09IHZhbHVlQiA/IDAgOiAodmFsdWVBID4gdmFsdWVCID8gMSA6IC0xKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNQYXRoQ29tcGFyYXRvcjxUID0gYW55PihrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlcz86IGFueVtdKTogKGE6IFQsIGI6IFQpID0+IG51bWJlciB7XG4gIGlmICgha2V5cyB8fCAha2V5cy5sZW5ndGggfHwgKGRlZmF1bHRWYWx1ZXMgJiYga2V5cy5sZW5ndGggPiBkZWZhdWx0VmFsdWVzLmxlbmd0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnRzOiBtaXNzaW5nIFxcJ2tleXNcXCcgb3IgYXJyYXkgXFwnZGVmYXVsdFZhbHVlc1xcJyBoYXMgYSBiYWQgbGVuZ3RoJyk7XG4gIH1cbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PiBrZXlzLm1hcCgoa2V5LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVBID0gZ2V0UHJvcGVydHlCeVBhdGgoYSwga2V5LCBkZWZhdWx0VmFsdWVzICYmIGRlZmF1bHRWYWx1ZXNbaW5kZXhdKTtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IGdldFByb3BlcnR5QnlQYXRoKGIsIGtleSwgZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzW2luZGV4XSk7XG4gICAgICByZXR1cm4gdmFsdWVBID09PSB2YWx1ZUIgPyAwIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAtMSk7XG4gICAgfSlcbiAgICAgIC8vIFN0b3AgaWYgbm90IGVxdWFscywgb3RoZXJ3aXNlIGNvbnRpbnVlIHdpdGggdGhlIG5leHQga2V5XG4gICAgICAuZmluZChyZXMgPT4gcmVzICE9PSAwKSB8fCAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydDxUPihhcnJheTogVFtdLCBhdHRyaWJ1dGU/OiBzdHJpbmcsIG9wdHM/OiBJbnRsLkNvbGxhdG9yT3B0aW9ucyk6IFRbXSB7XG4gIGlmIChpc0VtcHR5QXJyYXkoYXJyYXkpKSByZXR1cm4gYXJyYXk7XG4gIGNvbnN0IGNvbXBhcmVGbjogKGE6IGFueSwgYjogYW55KSA9PiBudW1iZXIgPSBvcHRzXG4gICAgPyBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIG9wdHMpLmNvbXBhcmVcbiAgICA6ICh2MSwgdjIpID0+IHYxID09PSB2MiA/IDAgOiB2MSA+IHYyID8gMSA6IC0xO1xuICByZXR1cm4gYXJyYXlcbiAgICAuc2xpY2UoKSAvLyBjb3B5XG4gICAgLnNvcnQoYXR0cmlidXRlXG4gICAgICA/IChhLCBiKSA9PiBjb21wYXJlRm4oYVthdHRyaWJ1dGVdLCBiW2F0dHJpYnV0ZV0pXG4gICAgICA6IGNvbXBhcmVGbik7XG59XG5jb25zdCBJTlRFR0VSX1JFR0VYUCA9IC9eWy1dP1xcZCskLztcbmV4cG9ydCBmdW5jdGlvbiBpc0ludCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgSU5URUdFUl9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5jb25zdCBOVU1CRVJfUkVHRVhQID0gL15bLV0/XFxkKyhcXC5cXGQrKT8kLztcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgTlVNQkVSX1JFR0VYUC50ZXN0KHZhbHVlKTtcbn1cblxuY29uc3QgTlVNQkVSX1JBTkdFX1JFR0VYUCA9IC9eKFxcZCstXFxkKyl8KFs+PD1dKlxcZCspJC87XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJSYW5nZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgJiYgTlVNQkVSX1JBTkdFX1JFR0VYUC50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5QnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmd8c3RyaW5nW10sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gIC8vIFBhdGggaXMgYW4gYXJyYXk6IGNvbnZlcnQgcGF0aCB0byBzdHJpbmdcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoLmpvaW4oJy4nKSwgZGVmYXVsdFZhbHVlKTtcbiAgfVxuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgaWYgKGlzTmlsT3JCbGFuayhwYXRoKSkgcmV0dXJuIG9iajtcbiAgY29uc3QgaSA9IHBhdGguaW5kZXhPZignLicpO1xuICAvLyBTaW1wbGUgcHJvcGVydHkgcGF0aFxuICBpZiAoaSA9PT0gLTEpIHtcbiAgICBjb25zdCByZXMgPSBvYmpbcGF0aF07XG4gICAgcmV0dXJuIChpc05vdE5pbChyZXMpIHx8IGlzTmlsKGRlZmF1bHRWYWx1ZSkpID8gcmVzIDogZGVmYXVsdFZhbHVlO1xuICB9XG4gIC8vIENvbXBsZXggcHJvcGVydHkgcGF0aFxuICBjb25zdCBrZXkgPSBwYXRoLnN1YnN0cmluZygwLCBpKTtcbiAgaWYgKGlzTmlsKG9ialtrZXldKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHsgLy8gT2JqZWN0IG9yIEFycmF5XG4gICAgLy8gUmVjdXJzaXZlIGNhbGxcbiAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqW2tleV0sIHBhdGguc3Vic3RyaW5nKGkgKyAxKSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHByb3BlcnR5IHBhdGg6ICcke2tleX0nIGlzIG5vdCBhbiB2YWxpZCBvYmplY3QuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eTxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGFueT4ob2JqOiBULCBrZXk6IEspOiBUW0tdIHtcbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBvYmpba2V5XTsgLy8gSW5mZXJyZWQgdHlwZSBpcyBUW0tdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUJ5UGF0aEFzU3RyaW5nKG9iajogYW55LCBwYXRoOiBzdHJpbmd8c3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXMgPSBnZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGgpO1xuICByZXR1cm4gKHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSA/IHJlcyA6ICgnJyArIHJlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nfHN0cmluZ1tdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgLy8gUGF0aCBpcyBhbiBhcnJheTogY29udmVydCBwYXRoIHRvIHN0cmluZ1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIHJldHVybiBzZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGguam9pbignLicpLCB2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybjsgLy8gU2tpcFxuICBjb25zdCBpID0gcGF0aC5pbmRleE9mKCcuJyk7XG4gIC8vIFNpbXBsZSBwcm9wZXJ0eSBwYXRoXG4gIGlmIChpID09PSAtMSkge1xuICAgIG9ialtwYXRoXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBrZXkgPSBwYXRoLnN1YnN0cmluZygwLCBpKTtcbiAgaWYgKGlzTmlsKG9ialtrZXldKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gc2V0UHJvcGVydHlCeVBhdGgob2JqW2tleV0sIHBhdGguc3Vic3RyaW5nKGkgKyAxKSwgdmFsdWUpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHBhdGg6ICcke2tleX0nIGlzIG5vdCBhbiB2YWxpZCBvYmplY3QuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChtcyA8PSAwKSByZXR1cm47XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKTogbnVtYmVyIHtcbiAgaWYgKGlzTm90TmlsT3JOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoKHZhbHVlICsgTnVtYmVyLkVQU0lMT04pICogMTAwKSAvIDEwMDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHNPck5pbCh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpIHtcbiAgcmV0dXJuICh2YWx1ZTEgPT09IHZhbHVlMikgfHwgKGlzTmlsKHZhbHVlMSkgJiYgaXNOaWwodmFsdWUyKSk7XG59XG5cbi8qKlxuICogcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHRoZSByZW1vdmVkIGVsZW1lbnRzXG4gKiBAcGFyYW0gYXJyYXkgdGhlIGFycmF5IG9uIHdoaWNoIGVsZW1lbnRzIHdpbGwgYmUgcmVtb3ZlZFxuICogQHBhcmFtIHByZWRpY2F0ZSB0aGUgc2VsZWN0aW9uIHByZWRpY2F0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWxsPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogKHBtZm06IFQpID0+IGJvb2xlYW4pOiBUW10ge1xuICBsZXQgbmJSZW1vdmUgPSAwO1xuICByZXR1cm4gYXJyYXkuc2xpY2UoKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBuYlJlbW92ZSsrOyAvLyBnbGl0Y2ggY291bnRlciB0byBhdm9pZCBpbmRleCBnYXBcbiAgICAgIHJldHVybiBhcnJheS5zcGxpY2UoaW5kZXggLSBuYlJlbW92ZSArIDEsIDEpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSkuZmlsdGVyKGlzTm90TmlsKTtcbn1cblxuLyoqXG4gKiByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhbiBhcnJheVxuICpcbiAqIEByZXR1cm4gdGhlIHJlbW92ZWQgZWxlbWVudFxuICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvbiB3aGljaCB0aGUgZWxlbWVudCB3aWxsIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBwcmVkaWNhdGUgdGhlIHNlbGVjdGlvbiBwcmVkaWNhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZTxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IChwbWZtOiBUKSA9PiBib29sZWFuKTogVCB7XG4gIHJldHVybiBhcnJheS5zbGljZSgpLmZpbmQoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5UHJvcGVydHk8VCwgTSBleHRlbmRzIEtleVZhbHVlVHlwZTxUPiA9IEtleVZhbHVlVHlwZTxUPj4oYXJyYXk6IFRbXSB8IHJlYWRvbmx5IFRbXSwgcHJvcGVydHlOYW1lOiBrZXlvZiBUIHwgc3RyaW5nKTogTSB7XG4gIHJldHVybiAoYXJyYXkgfHwgW10pLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9ICh2YWx1ZSBhcyB1bmtub3duIGFzIGFueSk/Lltwcm9wZXJ0eU5hbWVdO1xuICAgIGlmIChpc05vdE5pbChrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCB7fSkgYXMgTTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QnlJZDxULCBNIGV4dGVuZHMgS2V5VmFsdWVUeXBlPFQ+ID0gS2V5VmFsdWVUeXBlPFQ+PihhcnJheTogVFtdIHwgcmVhZG9ubHkgVFtdKTogTSB7XG4gIHJldHVybiAoYXJyYXkgfHwgW10pLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHZhbHVlPy5bJ2lkJ107XG4gICAgaWYgKGlzTm90TmlsKGtleSkpIHtcbiAgICAgIHJlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIDxNPnt9KTtcbn1cblxuLyoqXG4gKiBTcGxpdCBhbiBhcnJheSwgaW50byBhIG1hcCBvZiBhcnJheSwgZ3JvdXAgYnkgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RCeVByb3BlcnR5PFQ+KHZhbHVlczogVFtdLCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiBLZXlWYWx1ZVR5cGU8VFtdPiB7XG4gIHJldHVybiAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGl0ZW0gJiYgaXRlbVtwcm9wZXJ0eU5hbWVdO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzW2tleV0gPSByZXNba2V5XSB8fCBbXTtcbiAgICAgIHJlc1trZXldLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIDxLZXlWYWx1ZVR5cGU8VFtdPj57fSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBvciB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIFR3byBvYmplY3RzIG9yIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKlxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBhc3MgYD09PWAgY29tcGFyaXNvbi5cbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgYWxsIG9mIHRoZWlyIHByb3BlcnRpZXMgYXJlIGVxdWFsIGJ5XG4gKiAgIGNvbXBhcmluZyB0aGVtIHdpdGggYGVxdWFsc2AuXG4gKlxuICogQHBhcmFtIG8xIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIG8yIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudHMgYXJlIGVxdWFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKG8xID09PSBvMikgcmV0dXJuIHRydWU7XG4gIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG4gIGNvbnN0IHQxID0gdHlwZW9mIG8xOyBjb25zdCB0MiA9IHR5cGVvZiBvMjsgbGV0IGxlbmd0aDogbnVtYmVyOyBsZXQga2V5OiBhbnk7IGxldCBrZXlTZXQ6IGFueTtcbiAgaWYgKHQxID09IHQyICYmIHQxID09ICdvYmplY3QnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobzEpKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobzIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoKGxlbmd0aCA9IG8xLmxlbmd0aCkgPT0gbzIubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xuICAgICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBrZXlTZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChrZXkgaW4gbzEpIHtcbiAgICAgICAgaWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChrZXkgaW4gbzIpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIGtleVNldCkgJiYgdHlwZW9mIG8yW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIEJlYW5zIHtcbiAgLyoqXG4gICAqIENvcHkgYSBzb3VyY2Ugb2JqZWN0LCBieSBpbmNsdWRpbmcgb25seSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBkYXRhVHlwZS5cbiAgICogSU1QT1JUQU5UOiBleHRyYSBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBpbiB0aGUgdGFyZ2V0Q2xhc3MgYXJlIE5PVCBjb3BpZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgdG8gY29weVxuICAgKiBAcGFyYW0gZGF0YVR5cGUgdGhlIGNsYXNzIHRvIHVzZSBhcyB0YXJnZXQgY2xhc3NcbiAgICogQHBhcmFtIGtleXMgVGhlIGtleXMgdG8gY29weS4gSWYgZW1wdHksIHdpbGwgY29weSBvbmx5IE5PVCBvcHRpb25hbCBwcm9wZXJ0aWVzIGZyb20gdGhlIGRhdGFUeXBlXG4gICAqL1xuICBzdGF0aWMgY29weTxUPihzb3VyY2U6IFQsIGRhdGFUeXBlOiBuZXcgKCkgPT4gVCwga2V5cz86IEtleXNFbnVtPFQ+KTogVCB7XG4gICAgaWYgKGlzTmlsKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IGRhdGFUeXBlKCk7XG4gICAgT2JqZWN0LmtleXMoa2V5cyB8fCB0YXJnZXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXlzIGlmIGFuIG9iamVjdCBhbGwgYWxsIHByb3BlcnRpZXMgdG8gbmlsXG4gICAqL1xuICBzdGF0aWMgaXNFbXB0eTxUPihkYXRhOiBULCBrZXlzPzogS2V5c0VudW08VD58c3RyaW5nW10sIG9wdHM/OiB7XG4gICAgYmxhbmtTdHJpbmdMaWtlRW1wdHk/OiBib29sZWFuO1xuICB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKGRhdGEpIHx8IChBcnJheS5pc0FycmF5KGtleXMpID8ga2V5cyA6IE9iamVjdC5rZXlzKGtleXMgfHwgZGF0YSkpXG4gICAgICAvLyBGaW5kIGluZGV4IG9mIHRoZSBmaXJzdCBOT1QgbmlsIHZhbHVlXG4gICAgICAuZmluZEluZGV4KGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuICFCZWFucy5pc0VtcHR5KHZhbHVlLCBudWxsLCBvcHRzKTsgLy8gTG9vcFxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmJsYW5rU3RyaW5nTGlrZUVtcHR5ID09PSB0cnVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBpc05vdE5pbE9yQmxhbmsodmFsdWUpO1xuICAgICAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpO1xuICAgICAgfSkgPT09IC0xO1xuICB9XG5cbiAgc3RhdGljIGNvbGxlY3RCeUlkPFQ+KGFycmF5OiBUW10pOiBLZXlWYWx1ZVR5cGU8VFtdPiB7XG4gICAgcmV0dXJuIGNvbGxlY3RCeVByb3BlcnR5KGFycmF5LCAnaWQnIGFzIGtleW9mIFQpO1xuICB9XG5cbiAgc3RhdGljIGNvbGxlY3RCeVByb3BlcnR5ID0gY29sbGVjdEJ5UHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50V2l0aENsYXNzKGVsZW06IEhUTUxFbGVtZW50LCBjbGFzc05hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFjbGFzc05hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW0/LnBhcmVudEVsZW1lbnQ7XG4gIHdoaWxlIChjdXJyZW50RWxlbWVudCkge1xuICAgIGlmIChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkgcmV0dXJuIGN1cnJlbnRFbGVtZW50O1xuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxLQUFLLENBQUksR0FBeUI7SUFDaEQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUksR0FBeUI7SUFDdkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEdBQXlCO0lBQ25ELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFJLEdBQXlCO0lBQzFELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBSSxHQUF5QjtJQUN4RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQXlCO0lBQ3JELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtB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QUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTztZQUN6RixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0csT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFVO1FBQzlCLE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQWUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7O0FBRy9DLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFpQixFQUFFLFNBQWlCO0lBQ3RFLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDakMsSUFBSSxjQUFjLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQztJQUN6QyxPQUFPLGNBQWMsRUFBRTtRQUNyQixJQUFJLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sY0FBYyxDQUFDO1FBQ3hFLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO0tBQy9DO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7S2V5c0VudW0sIEtleVZhbHVlVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05pbDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOaWxPckJsYW5rPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgb2JqLnRyaW0oKSA9PT0gJycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbE9yQmxhbms8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmICh0eXBlb2Ygb2JqICE9PSAnc3RyaW5nJyB8fCBvYmoudHJpbSgpICE9PSAnJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxPck5hTjxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogIT09ICdudW1iZXInIHx8ICFpc05hTihvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05pbE9yTmFOPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicgJiYgaXNOYU4ob2JqKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbXB0eUFycmF5PFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIG9iai5sZW5ndGggPiAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0QXJyYXlWYWx1ZTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlzTm90RW1wdHlBcnJheShvYmopID8gb2JqWzBdIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlBcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAhb2JqLmxlbmd0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbEJvb2xlYW4ob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdib29sZWFuJyB8fCBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbFN0cmluZyhvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgc3RyaW5nIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rU3RyaW5nKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBzdHJpbmcge1xuICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSAmJiBvYmoudHJpbSgpLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3ROaWxPckRlZmF1bHQ8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBUKTogVCB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IG9iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVNpemU8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIGlzTm90RW1wdHlBcnJheShvYmopICYmIG9iai5sZW5ndGggfHwgMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUdyb3VwQnk8XG4gIFQgPSBhbnksXG4gIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55LFxuICBNIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBUW107XG59ID0geyBba2V5OiBzdHJpbmddOiBUW10gfT4ob2JqOiBUW10sIGtleToga2V5b2YgVCk6IE0ge1xuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBvYmoucmVkdWNlKChydjogYW55LCB4KSA9PiB7XG4gICAgKHJ2W3hba2V5XV0gPSBydlt4W2tleV1dIHx8IFtdKS5wdXNoKHgpO1xuICAgIHJldHVybiBydjtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFJlbW92ZSBkdXBsaWNhdGVkIHZhbHVlLCBpbiBhcnJheS4gV2lsbCBjb21wdXRlIGEgdW5pcXVlIGtleSAoZnJvbSBnaXZlbiBwcm9wZXJ0aWVzLCBvciBnaXZlbiBmdW5jdGlvbikuXG4gKiBJZiBwcm9wZXJ0aWVzT3JLZXlGbiBpcyBuaWwgb3IgdW5kZWZpbmVkLCB3aWxsIHVzZSBhbGwgb2JqZWN0IHByb3BlcnRpZXNcbiAqXG4gKiBAcGFyYW0gdmFsdWVzXG4gKiBAcGFyYW0gcHJvcGVydGllc09yS2V5Rm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5RGlzdGluY3Q8VCA9IGFueT4odmFsdWVzOiBUW10sIHByb3BlcnRpZXNPcktleUZuPzogc3RyaW5nIHwgc3RyaW5nW10gfCAoKG9iajogVCkgPT4gc3RyaW5nKSApOiBUW10ge1xuICBpZiAoaXNFbXB0eUFycmF5KHZhbHVlcykpIHJldHVybiB2YWx1ZXM7XG4gIGNvbnN0IHByb3BlcnRpZXM6IHN0cmluZ1tdID0gKCFwcm9wZXJ0aWVzT3JLZXlGbiAmJiBPYmplY3Qua2V5cyh2YWx1ZXNbMF0pKSB8fCAoQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzT3JLZXlGbikgJiYgcHJvcGVydGllc09yS2V5Rm4pO1xuICBjb25zdCBnZXRLZXk6IChvYmo6IFQpID0+IHN0cmluZyA9XG4gICAgKHR5cGVvZiBwcm9wZXJ0aWVzT3JLZXlGbiA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wZXJ0aWVzT3JLZXlGbilcbiAgICB8fCAodHlwZW9mIHByb3BlcnRpZXNPcktleUZuID09PSAnc3RyaW5nJyAmJiAoKG9iaikgPT4gZ2V0UHJvcGVydHlCeVBhdGhBc1N0cmluZyhvYmosIHByb3BlcnRpZXNPcktleUZuKSkpXG4gICAgfHwgKGlzRW1wdHlBcnJheShwcm9wZXJ0aWVzKSAmJiAoKG9iaikgPT4gb2JqPy50b1N0cmluZygpKSlcbiAgICB8fCAoKG9iaikgPT4gam9pblByb3BlcnRpZXNQYXRoKG9iaiwgcHJvcGVydGllcywgJ3wnKSk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJldHVybiB2YWx1ZXMucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSBnZXRLZXkoaXRlbSk7XG4gICAgaWYgKGV4aXN0aW5nSWRzLmhhcyh1bmlxdWVLZXkpKSByZXR1cm4gcmVzOyAvLyBTa2lwIGlmIGR1cGxpY2F0ZVxuICAgIGV4aXN0aW5nSWRzLmFkZCh1bmlxdWVLZXkpO1xuICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICB9LCBbXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbnVsbElmVW5kZWZpbmVkPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgbnVsbCB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvYmo7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5kZWZpbmVkSWZOdWxsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iajtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmltRW1wdHlUb051bGw8VD4oc3RyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZhbHVlID0gc3RyICYmIHN0ci50cmltKCkgfHwgdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUubGVuZ3RoICYmIHZhbHVlIHx8IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKG9iajogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gKG9iaiAhPT0gJ2ZhbHNlJyA/ICEhb2JqIDogZmFsc2UpIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKG9iajogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gK29iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0Zsb2F0KG9iajogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IHBhcnNlRmxvYXQob2JqKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0ludChvYmo6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBwYXJzZUludChvYmosIDApIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvTm90TmlsPFQgPSBhbnk+KG9iajogVCwgZGVmYXVsdFZhbHVlPzogVCk6IGFueSB8IG51bGwge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBvYmogOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlc0Zyb21BcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIHByb3BlcnR5Pzogc3RyaW5nKTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc0VtcHR5QXJyYXkob2JqKSkgcmV0dXJuIG9iajtcbiAgaWYgKHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIG9iai5maWx0ZXIoKGl0ZW0sIGksIGFycmF5KSA9PiBhcnJheS5maW5kSW5kZXgodCA9PiB0ICYmIGl0ZW0gJiYgdFtwcm9wZXJ0eV0gPT09IGl0ZW1bcHJvcGVydHldKSA9PT0gaSk7XG4gIH1cbiAgcmV0dXJuIG9iai5maWx0ZXIoKGl0ZW0sIGksIGFycmF5KSA9PiBhcnJheS5maW5kSW5kZXgodCA9PiB0ICYmIGl0ZW0gJiYgdCA9PT0gaXRlbSkgPT09IGkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGhVcHBlckNhc2UoaW5wdXQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlucHV0ICYmIGlucHV0LnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChzZWFyY2gpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoVXBwZXJDYXNlKGlucHV0OiBzdHJpbmcsIHJlZ2V4cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbnB1dCAmJiAhIWlucHV0LnRvVXBwZXJDYXNlKCkubWF0Y2gocmVnZXhwKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2ggaWYgYW55LiBFeGFtcGxlcyA6XG4gKiAtICcvdGVzdC8nIC0+ICcvdGVzdCdcbiAqIC0gJy8nIC0+IHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9UcmFpbGluZ1NsYXNoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghcGF0aCB8fCBwYXRoLnRyaW0oKSA9PT0gJy8nKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAocGF0aC50cmltKCkubGFzdEluZGV4T2YoJy8nKSA9PT0gcGF0aC5sZW5ndGggLSAxKSByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAxKTtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQWxsKHZhbHVlOiBzdHJpbmcsIHNlYXJjaFN0cmluZzogYW55LCByZXBsYWNlbWVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHdoaWxlICh2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKHNlYXJjaFN0cmluZykgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHNlYXJjaFN0cmluZywgcmVwbGFjZW1lbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVuZCh2YWx1ZTogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZT8uZW5kc1dpdGgoZW5kIHx8ICcnKSA/IHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5sZW5ndGggLSBlbmQubGVuZ3RoKSA6IHZhbHVlO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgY2FzZSBjaGFuZ2UgYnkgYW4gdW5kZXJzY29yZSAoLmUuZyAnbXlTdHJpbmcnIGJlY29tZXMgJ215X3N0cmluZycpXG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxXyQyJykudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURpYWNyaXRpY3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWdnZXN0RnJvbVN0cmluZ0FycmF5KHZhbHVlczogc3RyaW5nW10sIHZhbHVlOiBhbnksIG9wdGlvbnM/OiB7XG4gIHNlYXJjaEF0dHJpYnV0ZT86IHN0cmluZztcbiAgc2VhcmNoQXR0cmlidXRlcz86IHN0cmluZ1tdO1xufSk6IHN0cmluZ1tdIHtcbiAgdmFsdWUgPSAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJyonKSAmJiB2YWx1ZS50b1VwcGVyQ2FzZSgpIHx8IHVuZGVmaW5lZDtcbiAgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkpIHJldHVybiB2YWx1ZXM7XG5cbiAgLy8gSWYgd2lsZGNhcmQsIHNlYXJjaCB1c2luZyByZWdleHBcbiAgaWYgKCh2YWx1ZSBhcyBzdHJpbmcpLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSBhcyBzdHJpbmcpLnJlcGxhY2UoJyonLCAnLionKTtcbiAgICByZXR1cm4gdmFsdWVzLmZpbHRlcih2ID0+IG1hdGNoVXBwZXJDYXNlKHYsIHZhbHVlKSk7XG4gIH1cblxuICAvLyBJZiBubyB3aWxkY2FyZCwgc2VhcmNoIHVzaW5nIHN0YXJ0c1dpdGhcbiAgcmV0dXJuIHZhbHVlcy5maWx0ZXIodiA9PiBzdGFydHNXaXRoVXBwZXJDYXNlKHYsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luUHJvcGVydGllc1BhdGg8VCA9IGFueT4ob2JqOiBULCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvYmopIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRpc3BsYXkgYW4gdW5kZWZpbmVkIGVudGl0eS4nKTtcbiAgaWYgKGlzRW1wdHlBcnJheShwcm9wZXJ0aWVzKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGVtcHR5IFxcJ3Byb3BlcnRpZXNcXCcgYXJndW1lbnQnKTtcbiAgcmV0dXJuIHByb3BlcnRpZXNcbiAgICAubWFwKHBhdGggPT4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoKSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgJyAtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pblByb3BlcnRpZXM8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KG9iajogVCwga2V5czogS1tdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW9iaikgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGlzcGxheSBhbiB1bmRlZmluZWQgZW50aXR5LicpO1xuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoa2V5ID0+IGdldFByb3BlcnR5KG9iaiwga2V5KSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgJyAtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlQYXRoQ29tcGFyYXRvcjxUID0gYW55PihwYXRoOiBzdHJpbmd8c3RyaW5nW10pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PiB7XG4gICAgY29uc3QgdmFsdWVBID0gZ2V0UHJvcGVydHlCeVBhdGgoYSwgcGF0aCk7XG4gICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwgcGF0aCk7XG4gICAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlDb21wYXJhdG9yPFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihrZXk6IEssIGRlZmF1bHRWYWx1ZT86IGFueSk6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IHtcbiAgICBjb25zdCB2YWx1ZUEgPSBhW2tleV0gIT09IHVuZGVmaW5lZCA/IGFba2V5XSA6IGRlZmF1bHRWYWx1ZTtcbiAgICBjb25zdCB2YWx1ZUIgPSBiW2tleV0gPyBiW2tleV0gOiBkZWZhdWx0VmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc1BhdGhDb21wYXJhdG9yPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWVzPzogYW55W10pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgaWYgKCFrZXlzIHx8ICFrZXlzLmxlbmd0aCB8fCAoZGVmYXVsdFZhbHVlcyAmJiBrZXlzLmxlbmd0aCA+IGRlZmF1bHRWYWx1ZXMubGVuZ3RoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IG1pc3NpbmcgXFwna2V5c1xcJyBvciBhcnJheSBcXCdkZWZhdWx0VmFsdWVzXFwnIGhhcyBhIGJhZCBsZW5ndGgnKTtcbiAgfVxuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IGtleXMubWFwKChrZXksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZUEgPSBnZXRQcm9wZXJ0eUJ5UGF0aChhLCBrZXksIGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlc1tpbmRleF0pO1xuICAgICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwga2V5LCBkZWZhdWx0VmFsdWVzICYmIGRlZmF1bHRWYWx1ZXNbaW5kZXhdKTtcbiAgICAgIHJldHVybiB2YWx1ZUEgPT09IHZhbHVlQiA/IDAgOiAodmFsdWVBID4gdmFsdWVCID8gMSA6IC0xKTtcbiAgICB9KVxuICAgICAgLy8gU3RvcCBpZiBub3QgZXF1YWxzLCBvdGhlcndpc2UgY29udGludWUgd2l0aCB0aGUgbmV4dCBrZXlcbiAgICAgIC5maW5kKHJlcyA9PiByZXMgIT09IDApIHx8IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0PFQ+KGFycmF5OiBUW10sIGF0dHJpYnV0ZT86IHN0cmluZywgb3B0cz86IEludGwuQ29sbGF0b3JPcHRpb25zKTogVFtdIHtcbiAgaWYgKGlzRW1wdHlBcnJheShhcnJheSkpIHJldHVybiBhcnJheTtcbiAgY29uc3QgY29tcGFyZUZuOiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlciA9IG9wdHNcbiAgICA/IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgb3B0cykuY29tcGFyZVxuICAgIDogKHYxLCB2MikgPT4gdjEgPT09IHYyID8gMCA6IHYxID4gdjIgPyAxIDogLTE7XG4gIHJldHVybiBhcnJheVxuICAgIC5zbGljZSgpIC8vIGNvcHlcbiAgICAuc29ydChhdHRyaWJ1dGVcbiAgICAgID8gKGEsIGIpID0+IGNvbXBhcmVGbihhW2F0dHJpYnV0ZV0sIGJbYXR0cmlidXRlXSlcbiAgICAgIDogY29tcGFyZUZuKTtcbn1cbmNvbnN0IElOVEVHRVJfUkVHRVhQID0gL15bLV0/XFxkKyQvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSAmJiBJTlRFR0VSX1JFR0VYUC50ZXN0KHZhbHVlKTtcbn1cbmNvbnN0IE5VTUJFUl9SRUdFWFAgPSAvXlstXT9cXGQrKFxcLlxcZCspPyQvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSAmJiBOVU1CRVJfUkVHRVhQLnRlc3QodmFsdWUpO1xufVxuXG5jb25zdCBOVU1CRVJfUkFOR0VfUkVHRVhQID0gL14oXFxkKy1cXGQrKXwoWz48PV0qXFxkKykkLztcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclJhbmdlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSAmJiBOVU1CRVJfUkFOR0VfUkVHRVhQLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHlCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgLy8gUGF0aCBpcyBhbiBhcnJheTogY29udmVydCBwYXRoIHRvIHN0cmluZ1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmosIHBhdGguam9pbignLicpLCBkZWZhdWx0VmFsdWUpO1xuICB9XG4gIGlmIChpc05pbChvYmopKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICBpZiAoaXNOaWxPckJsYW5rKHBhdGgpKSByZXR1cm4gb2JqO1xuICBjb25zdCBpID0gcGF0aC5pbmRleE9mKCcuJyk7XG4gIC8vIFNpbXBsZSBwcm9wZXJ0eSBwYXRoXG4gIGlmIChpID09PSAtMSkge1xuICAgIGNvbnN0IHJlcyA9IG9ialtwYXRoXTtcbiAgICByZXR1cm4gKGlzTm90TmlsKHJlcykgfHwgaXNOaWwoZGVmYXVsdFZhbHVlKSkgPyByZXMgOiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgLy8gQ29tcGxleCBwcm9wZXJ0eSBwYXRoXG4gIGNvbnN0IGtleSA9IHBhdGguc3Vic3RyaW5nKDAsIGkpO1xuICBpZiAoaXNOaWwob2JqW2tleV0pKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0JykgeyAvLyBPYmplY3Qgb3IgQXJyYXlcbiAgICAvLyBSZWN1cnNpdmUgY2FsbFxuICAgIHJldHVybiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmpba2V5XSwgcGF0aC5zdWJzdHJpbmcoaSArIDEpKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHJvcGVydHkgcGF0aDogJyR7a2V5fScgaXMgbm90IGFuIHZhbGlkIG9iamVjdC5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5PFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihvYmo6IFQsIGtleTogSyk6IFRbS10ge1xuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9ialtrZXldOyAvLyBJbmZlcnJlZCB0eXBlIGlzIFRbS11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5QnlQYXRoQXNTdHJpbmcob2JqOiBhbnksIHBhdGg6IHN0cmluZ3xzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlcyA9IGdldFByb3BlcnR5QnlQYXRoKG9iaiwgcGF0aCk7XG4gIHJldHVybiAodHlwZW9mIHJlcyA9PT0gJ3N0cmluZycpID8gcmVzIDogKCcnICsgcmVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5QnlQYXRoKG9iajogYW55LCBwYXRoOiBzdHJpbmd8c3RyaW5nW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAvLyBQYXRoIGlzIGFuIGFycmF5OiBjb252ZXJ0IHBhdGggdG8gc3RyaW5nXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIHNldFByb3BlcnR5QnlQYXRoKG9iaiwgcGF0aC5qb2luKCcuJyksIHZhbHVlKTtcbiAgfVxuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuOyAvLyBTa2lwXG4gIGNvbnN0IGkgPSBwYXRoLmluZGV4T2YoJy4nKTtcbiAgLy8gU2ltcGxlIHByb3BlcnR5IHBhdGhcbiAgaWYgKGkgPT09IC0xKSB7XG4gICAgb2JqW3BhdGhdID0gdmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGtleSA9IHBhdGguc3Vic3RyaW5nKDAsIGkpO1xuICBpZiAoaXNOaWwob2JqW2tleV0pKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAob2JqW2tleV0gJiYgdHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBzZXRQcm9wZXJ0eUJ5UGF0aChvYmpba2V5XSwgcGF0aC5zdWJzdHJpbmcoaSArIDEpLCB2YWx1ZSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gcGF0aDogJyR7a2V5fScgaXMgbm90IGFuIHZhbGlkIG9iamVjdC5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG1zIDw9IDApIHJldHVybjtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpOiBudW1iZXIge1xuICBpZiAoaXNOb3ROaWxPck5hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCgodmFsdWUgKyBOdW1iZXIuRVBTSUxPTikgKiAxMDApIC8gMTAwO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsc09yTmlsKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkge1xuICByZXR1cm4gKHZhbHVlMSA9PT0gdmFsdWUyKSB8fCAoaXNOaWwodmFsdWUxKSAmJiBpc05pbCh2YWx1ZTIpKTtcbn1cblxuLyoqXG4gKiByZW1vdmUgZWxlbWVudHMgZnJvbSBhbiBhcnJheVxuICpcbiAqIEByZXR1cm4gdGhlIHJlbW92ZWQgZWxlbWVudHNcbiAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgb24gd2hpY2ggZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkXG4gKiBAcGFyYW0gcHJlZGljYXRlIHRoZSBzZWxlY3Rpb24gcHJlZGljYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBbGw8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4pOiBUW10ge1xuICBsZXQgbmJSZW1vdmUgPSAwO1xuICByZXR1cm4gYXJyYXkuc2xpY2UoKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBuYlJlbW92ZSsrOyAvLyBnbGl0Y2ggY291bnRlciB0byBhdm9pZCBpbmRleCBnYXBcbiAgICAgIHJldHVybiBhcnJheS5zcGxpY2UoaW5kZXggLSBuYlJlbW92ZSArIDEsIDEpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSkuZmlsdGVyKGlzTm90TmlsKTtcbn1cblxuLyoqXG4gKiByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBhbiBhcnJheVxuICpcbiAqIEByZXR1cm4gdGhlIHJlbW92ZWQgZWxlbWVudFxuICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvbiB3aGljaCB0aGUgZWxlbWVudCB3aWxsIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBwcmVkaWNhdGUgdGhlIHNlbGVjdGlvbiBwcmVkaWNhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZTxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbik6IFQge1xuICByZXR1cm4gYXJyYXkuc2xpY2UoKS5maW5kKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRCeVByb3BlcnR5PFQsIE0gZXh0ZW5kcyBLZXlWYWx1ZVR5cGU8VD4gPSBLZXlWYWx1ZVR5cGU8VD4+KGFycmF5OiBUW10gfCByZWFkb25seSBUW10sIHByb3BlcnR5TmFtZToga2V5b2YgVCB8IHN0cmluZyk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICBjb25zdCBrZXkgPSAodmFsdWUgYXMgdW5rbm93biBhcyBhbnkpPy5bcHJvcGVydHlOYW1lXTtcbiAgICBpZiAoaXNOb3ROaWwoa2V5KSkge1xuICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pIGFzIE07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5SWQ8VCwgTSBleHRlbmRzIEtleVZhbHVlVHlwZTxUPiA9IEtleVZhbHVlVHlwZTxUPj4oYXJyYXk6IFRbXSB8IHJlYWRvbmx5IFRbXSk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICBjb25zdCBrZXkgPSB2YWx1ZT8uWydpZCddO1xuICAgIGlmIChpc05vdE5pbChrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCA8TT57fSk7XG59XG5cbi8qKlxuICogU3BsaXQgYW4gYXJyYXksIGludG8gYSBtYXAgb2YgYXJyYXksIGdyb3VwIGJ5IHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0QnlQcm9wZXJ0eTxUPih2YWx1ZXM6IFRbXSwgcHJvcGVydHlOYW1lOiBrZXlvZiBUKTogS2V5VmFsdWVUeXBlPFRbXT4ge1xuICByZXR1cm4gKHZhbHVlcyB8fCBbXSkucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICBjb25zdCBrZXkgPSBpdGVtICYmIGl0ZW1bcHJvcGVydHlOYW1lXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc1trZXldID0gcmVzW2tleV0gfHwgW107XG4gICAgICByZXNba2V5XS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCA8S2V5VmFsdWVUeXBlPFRbXT4+e30pO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgb3IgdHdvIHZhbHVlcyBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBUd28gb2JqZWN0cyBvciB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICpcbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBwYXNzIGA9PT1gIGNvbXBhcmlzb24uXG4gKiAqIEJvdGggb2JqZWN0cyBvciB2YWx1ZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGFsbCBvZiB0aGVpciBwcm9wZXJ0aWVzIGFyZSBlcXVhbCBieVxuICogICBjb21wYXJpbmcgdGhlbSB3aXRoIGBlcXVhbHNgLlxuICpcbiAqIEBwYXJhbSBvMSBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBvMiBPYmplY3Qgb3IgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHRydWUgaWYgYXJndW1lbnRzIGFyZSBlcXVhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhvMTogYW55LCBvMjogYW55KTogYm9vbGVhbiB7XG4gIGlmIChvMSA9PT0gbzIpIHJldHVybiB0cnVlO1xuICBpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpIHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxuICBjb25zdCB0MSA9IHR5cGVvZiBvMTsgY29uc3QgdDIgPSB0eXBlb2YgbzI7IGxldCBsZW5ndGg6IG51bWJlcjsgbGV0IGtleTogYW55OyBsZXQga2V5U2V0OiBhbnk7XG4gIGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobzEpKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobzIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoKGxlbmd0aCA9IG8xLmxlbmd0aCkgPT09IG8yLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcbiAgICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgIGZvciAoa2V5IGluIG8xKSB7XG4gICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG8yKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBCZWFucyB7XG4gIC8qKlxuICAgKiBDb3B5IGEgc291cmNlIG9iamVjdCwgYnkgaW5jbHVkaW5nIG9ubHkgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gZGF0YVR5cGUuXG4gICAqIElNUE9SVEFOVDogZXh0cmEgcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgaW4gdGhlIHRhcmdldENsYXNzIGFyZSBOT1QgY29waWVkLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGNvcHlcbiAgICogQHBhcmFtIGRhdGFUeXBlIHRoZSBjbGFzcyB0byB1c2UgYXMgdGFyZ2V0IGNsYXNzXG4gICAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGNvcHkuIElmIGVtcHR5LCB3aWxsIGNvcHkgb25seSBOT1Qgb3B0aW9uYWwgcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhVHlwZVxuICAgKi9cbiAgc3RhdGljIGNvcHk8VD4oc291cmNlOiBULCBkYXRhVHlwZTogbmV3ICgpID0+IFQsIGtleXM/OiBLZXlzRW51bTxUPik6IFQge1xuICAgIGlmIChpc05pbChzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBkYXRhVHlwZSgpO1xuICAgIE9iamVjdC5rZXlzKGtleXMgfHwgdGFyZ2V0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyBpZiBhbiBvYmplY3QgYWxsIGFsbCBwcm9wZXJ0aWVzIHRvIG5pbFxuICAgKi9cbiAgc3RhdGljIGlzRW1wdHk8VD4oZGF0YTogVCwga2V5cz86IEtleXNFbnVtPFQ+fHN0cmluZ1tdLCBvcHRzPzoge1xuICAgIGJsYW5rU3RyaW5nTGlrZUVtcHR5PzogYm9vbGVhbjtcbiAgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbChkYXRhKSB8fCAoQXJyYXkuaXNBcnJheShrZXlzKSA/IGtleXMgOiBPYmplY3Qua2V5cyhrZXlzIHx8IGRhdGEpKVxuICAgICAgLy8gRmluZCBpbmRleCBvZiB0aGUgZmlyc3QgTk9UIG5pbCB2YWx1ZVxuICAgICAgLmZpbmRJbmRleChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiAhQmVhbnMuaXNFbXB0eSh2YWx1ZSwgbnVsbCwgb3B0cyk7IC8vIExvb3BcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5ibGFua1N0cmluZ0xpa2VFbXB0eSA9PT0gdHJ1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gaXNOb3ROaWxPckJsYW5rKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIH0pID09PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlJZDxUPihhcnJheTogVFtdKTogS2V5VmFsdWVUeXBlPFRbXT4ge1xuICAgIHJldHVybiBjb2xsZWN0QnlQcm9wZXJ0eShhcnJheSwgJ2lkJyBhcyBrZXlvZiBUKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlQcm9wZXJ0eSA9IGNvbGxlY3RCeVByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudFdpdGhDbGFzcyhlbGVtOiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghY2xhc3NOYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtPy5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -0,0 +1,82 @@
1
+ import { Geolocation } from '@capacitor/geolocation';
2
+ import { isNil } from '../functions';
3
+ export class IPosition {
4
+ latitude;
5
+ longitude;
6
+ }
7
+ export class GeolocationUtils {
8
+ static isNotNilAndValid(position, opts) {
9
+ if (!position || isNil(position.latitude) || isNil(position.longitude))
10
+ return false;
11
+ // Invalid lat/lon
12
+ if (position.latitude < -90 || position.latitude > 90
13
+ || position.longitude < -180 || position.longitude > 180) {
14
+ // /!\ Log in console, because should never occur
15
+ if (opts?.debug)
16
+ console.warn('Invalid lat/long position: ', position);
17
+ return false;
18
+ }
19
+ // OK: valid
20
+ return true;
21
+ }
22
+ static isNilOrInvalid(position, opts) {
23
+ return !GeolocationUtils.isNotNilAndValid(position, opts);
24
+ }
25
+ static computeDistanceInMiles(position1, position2) {
26
+ // Invalid position(s): skip
27
+ if (GeolocationUtils.isNilOrInvalid(position1, { debug: true })
28
+ || GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
29
+ return;
30
+ const latitude1Rad = Math.PI * position1.latitude / 180;
31
+ const longitude1Rad = Math.PI * position1.longitude / 180;
32
+ const latitude2Rad = Math.PI * position2.latitude / 180;
33
+ const longitude2Rad = Math.PI * position2.longitude / 180;
34
+ let distance = 2 * 6371 * Math.asin(Math.sqrt(Math.pow(Math.sin((latitude1Rad - latitude2Rad) / 2), 2)
35
+ + Math.cos(latitude1Rad) * Math.cos(latitude2Rad) * Math.pow(Math.sin((longitude2Rad - longitude1Rad) / 2), 2)));
36
+ distance = Math.round((((distance / 1.852) + Number.EPSILON) * 100)) / 100;
37
+ return distance;
38
+ }
39
+ /**
40
+ * Get the position by geo loc sensor
41
+ */
42
+ static async getCurrentPosition(platform, options) {
43
+ // Use Capacitor plugin
44
+ try {
45
+ console.info(`[geolocation-utils] Get current geo location, using Capacitor...(timeout: ${options?.timeout})`);
46
+ const pos = await Geolocation.getCurrentPosition(options);
47
+ return {
48
+ latitude: pos.coords.latitude,
49
+ longitude: pos.coords.longitude
50
+ };
51
+ }
52
+ catch (err) {
53
+ // If capacitor : throw error (cannot fallback to browser geolocation, because of browser security limitation)
54
+ if (platform.is('capacitor')) {
55
+ console.error(`[geolocation-utils] Cannot get current geo location, using Capacitor: ${err?.message || ''}`);
56
+ // Detect a permission error, to add code
57
+ // FIXME - Capacitor use hardcoded strings! (see https://github.com/ionic-team/capacitor-plugins)
58
+ const message = (err?.message || '').toLowerCase();
59
+ if (message.includes('location permission was denied') || message.includes('location disabled')) {
60
+ throw { ...err, code: GeolocationPositionError.PERMISSION_DENIED };
61
+ }
62
+ throw err;
63
+ }
64
+ }
65
+ // Or fallback to navigator
66
+ console.info('[geolocation-utils] Get current geo location, using browser...');
67
+ return new Promise((resolve, reject) => {
68
+ navigator.geolocation.getCurrentPosition((res) => {
69
+ resolve({
70
+ latitude: res.coords.latitude,
71
+ longitude: res.coords.longitude
72
+ });
73
+ }, (err) => {
74
+ let message = err?.message || err;
75
+ message = typeof message === 'string' ? message : JSON.stringify(message);
76
+ console.error('[geolocation-utils] Cannot get current geo location, using browser:' + message);
77
+ reject(err);
78
+ }, options);
79
+ });
80
+ }
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVuQyxNQUFNLE9BQU8sU0FBUztJQUNwQixRQUFRLENBQVM7SUFDakIsU0FBUyxDQUFTO0NBQ25CO0FBRUQsTUFBTSxPQUFnQixnQkFBZ0I7SUFFcEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQW1CLEVBQUUsSUFBd0I7UUFFbkUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFckYsa0JBQWtCO1FBQ2xCLElBQUksUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxHQUFHLEVBQUU7ZUFDaEQsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtZQUUxRCxpREFBaUQ7WUFDakQsSUFBSSxJQUFJLEVBQUUsS0FBSztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFtQixFQUFFLElBQXdCO1FBQ2pFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENB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YUFDWDtTQUNGO1FBRUQsMkJBQTJCO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztRQUMvRSxPQUFPLElBQUksT0FBTyxDQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2hELFNBQVMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDN0MsT0FBTyxDQUFZO29CQUNqQixRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRO29CQUM3QixTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2lCQUNoQyxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDTixJQUFJLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQztnQkFDbEMsT0FBTyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFFQUFxRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZCxDQUFDLEVBQ0QsT0FBTyxDQUNSLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdlb2xvY2F0aW9uLCBQb3NpdGlvbiB9IGZyb20gJ0BjYXBhY2l0b3IvZ2VvbG9jYXRpb24nO1xuaW1wb3J0IHtQbGF0Zm9ybVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge2lzTmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgSVBvc2l0aW9uIHtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW9sb2NhdGlvblV0aWxzIHtcblxuICBzdGF0aWMgaXNOb3ROaWxBbmRWYWxpZChwb3NpdGlvbjogSVBvc2l0aW9uLCBvcHRzPzoge2RlYnVnPzogYm9vbGVhbn0pIHtcblxuICAgIGlmICghcG9zaXRpb24gfHwgaXNOaWwocG9zaXRpb24ubGF0aXR1ZGUpIHx8IGlzTmlsKHBvc2l0aW9uLmxvbmdpdHVkZSkpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIEludmFsaWQgbGF0L2xvblxuICAgIGlmIChwb3NpdGlvbi5sYXRpdHVkZSA8IC05MCB8fCBwb3NpdGlvbi5sYXRpdHVkZSA+IDkwXG4gICAgICB8fCBwb3NpdGlvbi5sb25naXR1ZGUgPCAtMTgwIHx8IHBvc2l0aW9uLmxvbmdpdHVkZSA+IDE4MCkge1xuXG4gICAgICAvLyAvIVxcIExvZyBpbiBjb25zb2xlLCBiZWNhdXNlIHNob3VsZCBuZXZlciBvY2N1clxuICAgICAgaWYgKG9wdHM/LmRlYnVnKSBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGF0L2xvbmcgcG9zaXRpb246ICAnLCBwb3NpdGlvbik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT0s6IHZhbGlkXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgaXNOaWxPckludmFsaWQocG9zaXRpb246IElQb3NpdGlvbiwgb3B0cz86IHtkZWJ1Zz86IGJvb2xlYW59KSB7XG4gICAgcmV0dXJuICFHZW9sb2NhdGlvblV0aWxzLmlzTm90TmlsQW5kVmFsaWQocG9zaXRpb24sIG9wdHMpO1xuICB9XG5cbiAgc3RhdGljIGNvbXB1dGVEaXN0YW5jZUluTWlsZXMocG9zaXRpb24xOiBJUG9zaXRpb24sIHBvc2l0aW9uMjogSVBvc2l0aW9uKTogbnVtYmVyIHtcbiAgICAvLyBJbnZhbGlkIHBvc2l0aW9uKHMpOiBza2lwXG4gICAgaWYgKEdlb2xvY2F0aW9uVXRpbHMuaXNOaWxPckludmFsaWQocG9zaXRpb24xLCB7ZGVidWc6IHRydWV9KVxuICAgICAgfHwgR2VvbG9jYXRpb25VdGlscy5pc05pbE9ySW52YWxpZChwb3NpdGlvbjIsIHtkZWJ1ZzogdHJ1ZX0pKSByZXR1cm47XG5cbiAgICBjb25zdCBsYXRpdHVkZTFSYWQgPSBNYXRoLlBJICogcG9zaXRpb24xLmxhdGl0dWRlIC8gMTgwO1xuICAgIGNvbnN0IGxvbmdpdHVkZTFSYWQgPSBNYXRoLlBJICogcG9zaXRpb24xLmxvbmdpdHVkZSAvIDE4MDtcbiAgICBjb25zdCBsYXRpdHVkZTJSYWQgPSBNYXRoLlBJICogcG9zaXRpb24yLmxhdGl0dWRlIC8gMTgwO1xuICAgIGNvbnN0IGxvbmdpdHVkZTJSYWQgPSBNYXRoLlBJICogcG9zaXRpb24yLmxvbmdpdHVkZSAvIDE4MDtcblxuICAgIGxldCBkaXN0YW5jZSA9IDIgKiA2MzcxICogTWF0aC5hc2luKFxuICAgICAgTWF0aC5zcXJ0KFxuICAgICAgICBNYXRoLnBvdyhNYXRoLnNpbigobGF0aXR1ZGUxUmFkIC0gbGF0aXR1ZGUyUmFkKSAvIDIpLCAyKVxuICAgICAgICArIE1hdGguY29zKGxhdGl0dWRlMVJhZCkgKiBNYXRoLmNvcyhsYXRpdHVkZTJSYWQpICogTWF0aC5wb3coTWF0aC5zaW4oKGxvbmdpdHVkZTJSYWQgLSBsb25naXR1ZGUxUmFkKSAvIDIpLCAyKVxuICAgICAgKSk7XG4gICAgZGlzdGFuY2UgPSBNYXRoLnJvdW5kKCgoKGRpc3RhbmNlIC8gMS44NTIpICsgTnVtYmVyLkVQU0lMT04pICogMTAwKSkgLyAxMDA7XG4gICAgcmV0dXJuIGRpc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9zaXRpb24gYnkgZ2VvIGxvYyBzZW5zb3JcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRDdXJyZW50UG9zaXRpb24ocGxhdGZvcm06IFBsYXRmb3JtU2VydmljZXxQbGF0Zm9ybSwgb3B0aW9ucz86IFBvc2l0aW9uT3B0aW9ucyk6IFByb21pc2U8SVBvc2l0aW9uPiB7XG5cbiAgICAvLyBVc2UgQ2FwYWNpdG9yIHBsdWdpblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtnZW9sb2NhdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBDYXBhY2l0b3IuLi4odGltZW91dDogJHtvcHRpb25zPy50aW1lb3V0fSlgKTtcbiAgICAgIGNvbnN0IHBvczogUG9zaXRpb24gPSBhd2FpdCBHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ob3B0aW9ucyk7XG4gICAgICByZXR1cm4gPElQb3NpdGlvbj57XG4gICAgICAgIGxhdGl0dWRlOiBwb3MuY29vcmRzLmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGU6IHBvcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSWYgY2FwYWNpdG9yIDogdGhyb3cgZXJyb3IgKGNhbm5vdCBmYWxsYmFjayB0byBicm93c2VyIGdlb2xvY2F0aW9uLCBiZWNhdXNlIG9mIGJyb3dzZXIgc2VjdXJpdHkgbGltaXRhdGlvbilcbiAgICAgIGlmIChwbGF0Zm9ybS5pcygnY2FwYWNpdG9yJykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2dlb2xvY2F0aW9uLXV0aWxzXSBDYW5ub3QgZ2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBDYXBhY2l0b3I6ICR7ZXJyPy5tZXNzYWdlfHwnJ31gKTtcblxuICAgICAgICAvLyBEZXRlY3QgYSBwZXJtaXNzaW9uIGVycm9yLCB0byBhZGQgY29kZVxuICAgICAgICAvLyBGSVhNRSAtIENhcGFjaXRvciB1c2UgaGFyZGNvZGVkIHN0cmluZ3MhIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2lvbmljLXRlYW0vY2FwYWNpdG9yLXBsdWdpbnMpXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoKGVycj8ubWVzc2FnZSB8fCAnJykgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygnbG9jYXRpb24gcGVybWlzc2lvbiB3YXMgZGVuaWVkJykgfHwgbWVzc2FnZS5pbmNsdWRlcygnbG9jYXRpb24gZGlzYWJsZWQnKSkge1xuICAgICAgICAgIHRocm93IHsuLi5lcnIsIGNvZGU6IEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvci5QRVJNSVNTSU9OX0RFTklFRH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9yIGZhbGxiYWNrIHRvIG5hdmlnYXRvclxuICAgIGNvbnNvbGUuaW5mbygnW2dlb2xvY2F0aW9uLXV0aWxzXSBHZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIGJyb3dzZXIuLi4nKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8SVBvc2l0aW9uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChyZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKDxJUG9zaXRpb24+e1xuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlcy5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgbWVzc2FnZSA9IGVycj8ubWVzc2FnZSB8fCBlcnI7XG4gICAgICAgICAgbWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZ2VvbG9jYXRpb24tdXRpbHNdIENhbm5vdCBnZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIGJyb3dzZXI6JyArIG1lc3NhZ2UpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,46 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HammerGestureConfig } from '@angular/platform-browser';
3
+ import * as i0 from "@angular/core";
4
+ export const HAMMER_TAP_TIME = 250;
5
+ export const HAMMER_PRESS_TIME = 400; // Increase need for double tap (default: 251 ms)
6
+ /**
7
+ * @hidden
8
+ * This class overrides the default Angular gesture config.
9
+ *
10
+ */
11
+ export class AppGestureConfig extends HammerGestureConfig {
12
+ // Override HammerJS default settings
13
+ overrides = {
14
+ press: {
15
+ time: HAMMER_PRESS_TIME
16
+ },
17
+ pinch: {
18
+ enable: false
19
+ },
20
+ rotate: {
21
+ enable: false
22
+ },
23
+ // see https://hammerjs.github.io/recognizer-swipe/
24
+ swipe: {
25
+ threshold: 30,
26
+ velocity: 0.4 //Minimal velocity required before recognizing, unit is in px per ms.
27
+ }
28
+ };
29
+ buildHammer(element) {
30
+ // DEBUG
31
+ console.debug('[gesture] Applying HammerJS config to ', element.tagName);
32
+ const mc = new window.Hammer(element);
33
+ for (const eventName in this.overrides) {
34
+ if (eventName)
35
+ mc.get(eventName).set(this.overrides[eventName]);
36
+ }
37
+ return mc;
38
+ }
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppGestureConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
40
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppGestureConfig, providedIn: 'root' });
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppGestureConfig, decorators: [{
43
+ type: Injectable,
44
+ args: [{ providedIn: 'root' }]
45
+ }] });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZXN0dXJlL2dlc3R1cmUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRTlELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMsaURBQWlEO0FBQ3ZGOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBRXZELHFDQUFxQztJQUNyQyxTQUFTLEdBQVE7UUFDZixLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsaUJBQWlCO1NBQ3hCO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFLEtBQUs7U0FDZDtRQUNELE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSxLQUFLO1NBQ2Q7UUFDRCxtREFBbUQ7UUFDbkQsS0FBSyxFQUFFO1lBQ0wsU0FBUyxFQUFFLEVBQUU7WUFDYixRQUFRLEVBQUUsR0FBRyxDQUFFLHFFQUFxRTtTQUNyRjtLQUNGLENBQUM7SUFFRixXQUFXLENBQUMsT0FBb0I7UUFFOUIsUUFBUTtRQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpFLE1BQU0sRUFBRSxHQUFHLElBQVUsTUFBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QyxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEMsSUFBSSxTQUFTO2dCQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNqRTtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzt3R0FoQ1UsZ0JBQWdCOzRHQUFoQixnQkFBZ0IsY0FESixNQUFNOzs0RkFDbEIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0hhbW1lckdlc3R1cmVDb25maWd9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5leHBvcnQgY29uc3QgSEFNTUVSX1RBUF9USU1FID0gMjUwO1xuZXhwb3J0IGNvbnN0IEhBTU1FUl9QUkVTU19USU1FID0gNDAwOyAvLyBJbmNyZWFzZSBuZWVkIGZvciBkb3VibGUgdGFwIChkZWZhdWx0OiAyNTEgbXMpXG4vKipcbiAqIEBoaWRkZW5cbiAqIFRoaXMgY2xhc3Mgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IEFuZ3VsYXIgZ2VzdHVyZSBjb25maWcuXG4gKlxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBBcHBHZXN0dXJlQ29uZmlnIGV4dGVuZHMgSGFtbWVyR2VzdHVyZUNvbmZpZyB7XG5cbiAgLy8gT3ZlcnJpZGUgSGFtbWVySlMgZGVmYXVsdCBzZXR0aW5nc1xuICBvdmVycmlkZXMgPSA8YW55PntcbiAgICBwcmVzczoge1xuICAgICAgdGltZTogSEFNTUVSX1BSRVNTX1RJTUVcbiAgICB9LFxuICAgIHBpbmNoOiB7XG4gICAgICBlbmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICByb3RhdGU6IHtcbiAgICAgIGVuYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIC8vIHNlZSBodHRwczovL2hhbW1lcmpzLmdpdGh1Yi5pby9yZWNvZ25pemVyLXN3aXBlL1xuICAgIHN3aXBlOiB7XG4gICAgICB0aHJlc2hvbGQ6IDMwLCAgLy8gTWluaW1hbCBkaXN0YW5jZSByZXF1aXJlZCBiZWZvcmUgcmVjb2duaXppbmcuXG4gICAgICB2ZWxvY2l0eTogMC40ICAvL01pbmltYWwgdmVsb2NpdHkgcmVxdWlyZWQgYmVmb3JlIHJlY29nbml6aW5nLCB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAgICB9XG4gIH07XG5cbiAgYnVpbGRIYW1tZXIoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcblxuICAgIC8vIERFQlVHXG4gICAgY29uc29sZS5kZWJ1ZygnW2dlc3R1cmVdIEFwcGx5aW5nIEhhbW1lckpTIGNvbmZpZyB0byAnLCBlbGVtZW50LnRhZ05hbWUpO1xuXG4gICAgY29uc3QgbWMgPSBuZXcgKDxhbnk+d2luZG93KS5IYW1tZXIoZWxlbWVudCk7XG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBpbiB0aGlzLm92ZXJyaWRlcykge1xuICAgICAgaWYgKGV2ZW50TmFtZSkgbWMuZ2V0KGV2ZW50TmFtZSkuc2V0KHRoaXMub3ZlcnJpZGVzW2V2ZW50TmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYztcbiAgfVxufVxuIl19