@sumaris-net/ngx-components 2.5.16 → 2.6.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 (329) hide show
  1. package/doc/changelog.md +86 -0
  2. package/esm2020/public_api.mjs +13 -3
  3. package/esm2020/src/app/admin/admin-routing.module.mjs +5 -5
  4. package/esm2020/src/app/admin/admin.module.mjs +5 -5
  5. package/esm2020/src/app/admin/services/person.service.mjs +4 -4
  6. package/esm2020/src/app/admin/services/validator/person.validator.mjs +4 -4
  7. package/esm2020/src/app/admin/users/users.mjs +6 -6
  8. package/esm2020/src/app/admin/users/users.module.mjs +5 -5
  9. package/esm2020/src/app/core/about/about.modal.mjs +4 -4
  10. package/esm2020/src/app/core/about/about.module.mjs +5 -5
  11. package/esm2020/src/app/core/account/account.module.mjs +5 -5
  12. package/esm2020/src/app/core/account/account.page.mjs +25 -26
  13. package/esm2020/src/app/core/account/new-token.modal.mjs +4 -4
  14. package/esm2020/src/app/core/account/token.table.mjs +5 -5
  15. package/esm2020/src/app/core/auth/auth.form.mjs +4 -4
  16. package/esm2020/src/app/core/auth/auth.modal.mjs +4 -4
  17. package/esm2020/src/app/core/auth/auth.module.mjs +5 -5
  18. package/esm2020/src/app/core/core.module.mjs +14 -14
  19. package/esm2020/src/app/core/core.testing.module.mjs +5 -5
  20. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +4 -4
  21. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +5 -5
  22. package/esm2020/src/app/core/form/entity/editor.class.mjs +19 -15
  23. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +11 -9
  24. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +87 -68
  25. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +4 -4
  26. package/esm2020/src/app/core/form/entity/entity.module.mjs +5 -5
  27. package/esm2020/src/app/core/form/form.class.mjs +6 -6
  28. package/esm2020/src/app/core/form/form.module.mjs +5 -5
  29. package/esm2020/src/app/core/form/form.utils.mjs +2 -2
  30. package/esm2020/src/app/core/form/list/list.form.mjs +4 -4
  31. package/esm2020/src/app/core/form/list/list.module.mjs +5 -5
  32. package/esm2020/src/app/core/form/properties/properties.form.mjs +9 -6
  33. package/esm2020/src/app/core/form/properties/properties.module.mjs +5 -5
  34. package/esm2020/src/app/core/form/properties/properties.table.mjs +8 -8
  35. package/esm2020/src/app/core/form/properties/property.validator.mjs +4 -4
  36. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +4 -4
  37. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +5 -5
  38. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +40 -7
  39. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +5 -5
  40. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +5 -5
  41. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +46 -5
  42. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +5 -5
  43. package/esm2020/src/app/core/graphql/graphql.module.mjs +5 -5
  44. package/esm2020/src/app/core/graphql/graphql.service.mjs +20 -7
  45. package/esm2020/src/app/core/graphql/graphql.utils.mjs +1 -1
  46. package/esm2020/src/app/core/home/home.mjs +5 -5
  47. package/esm2020/src/app/core/home/home.module.mjs +5 -5
  48. package/esm2020/src/app/core/icon/icon.component.mjs +4 -4
  49. package/esm2020/src/app/core/icon/icon.module.mjs +5 -5
  50. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +17 -11
  51. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +5 -5
  52. package/esm2020/src/app/core/menu/menu.component.mjs +18 -19
  53. package/esm2020/src/app/core/menu/menu.module.mjs +5 -5
  54. package/esm2020/src/app/core/menu/menu.service.mjs +4 -4
  55. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +4 -4
  56. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +5 -5
  57. package/esm2020/src/app/core/peer/select-peer.modal.mjs +17 -9
  58. package/esm2020/src/app/core/peer/select-peer.module.mjs +5 -5
  59. package/esm2020/src/app/core/register/register-confirm.page.mjs +5 -5
  60. package/esm2020/src/app/core/register/register.form.mjs +4 -4
  61. package/esm2020/src/app/core/register/register.modal.mjs +4 -4
  62. package/esm2020/src/app/core/register/register.module.mjs +5 -5
  63. package/esm2020/src/app/core/services/account.service.mjs +28 -8
  64. package/esm2020/src/app/core/services/auth-guard.service.mjs +8 -8
  65. package/esm2020/src/app/core/services/base-entity-service.class.mjs +7 -4
  66. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +4 -4
  67. package/esm2020/src/app/core/services/config.service.mjs +4 -4
  68. package/esm2020/src/app/core/services/crypto.service.mjs +4 -4
  69. package/esm2020/src/app/core/services/errors.mjs +2 -1
  70. package/esm2020/src/app/core/services/local-settings.service.mjs +15 -11
  71. package/esm2020/src/app/core/services/model/config.model.mjs +3 -3
  72. package/esm2020/src/app/core/services/model/entity.model.mjs +15 -4
  73. package/esm2020/src/app/core/services/model/referential.model.mjs +14 -3
  74. package/esm2020/src/app/core/services/network.service.mjs +35 -20
  75. package/esm2020/src/app/core/services/network.utils.mjs +10 -11
  76. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +9 -9
  77. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  78. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  79. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +12 -12
  80. package/esm2020/src/app/core/services/platform.service.mjs +37 -10
  81. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +8 -7
  82. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +1 -1
  83. package/esm2020/src/app/core/services/testing/referential.validator.mjs +4 -4
  84. package/esm2020/src/app/core/services/validator/account.validator.mjs +4 -4
  85. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +4 -4
  86. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +4 -4
  87. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +4 -4
  88. package/esm2020/src/app/core/services/validator/user-token.validator.mjs +4 -4
  89. package/esm2020/src/app/core/settings/settings.module.mjs +5 -5
  90. package/esm2020/src/app/core/settings/settings.page.mjs +46 -27
  91. package/esm2020/src/app/core/table/actions-column.component.mjs +11 -5
  92. package/esm2020/src/app/core/table/async-table.class.mjs +10 -6
  93. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +4 -4
  94. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +4 -4
  95. package/esm2020/src/app/core/table/memory-table.class.mjs +4 -4
  96. package/esm2020/src/app/core/table/table-select-columns.component.mjs +4 -4
  97. package/esm2020/src/app/core/table/table.class.mjs +79 -32
  98. package/esm2020/src/app/core/table/table.module.mjs +5 -5
  99. package/esm2020/src/app/core/table/table.utils.mjs +18 -1
  100. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +27 -0
  101. package/esm2020/src/app/core/table/testing/table.testing.mjs +29 -14
  102. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +5 -5
  103. package/esm2020/src/app/shared/alerts.mjs +3 -2
  104. package/esm2020/src/app/shared/audio/audio.mjs +62 -15
  105. package/esm2020/src/app/shared/audio/audio.testing.mjs +4 -4
  106. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +5 -5
  107. package/esm2020/src/app/shared/capacitor/keyboard.mjs +4 -4
  108. package/esm2020/src/app/shared/dates.mjs +1 -1
  109. package/esm2020/src/app/shared/debug/debug-service.class.mjs +3 -0
  110. package/esm2020/src/app/shared/debug/debug.component.mjs +5 -5
  111. package/esm2020/src/app/shared/debug/debug.module.mjs +5 -5
  112. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +4 -4
  113. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +4 -4
  114. package/esm2020/src/app/shared/directives/directives.module.mjs +5 -5
  115. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  116. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +4 -4
  117. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
  118. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  119. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  120. package/esm2020/src/app/shared/file/file.service.mjs +4 -4
  121. package/esm2020/src/app/shared/file/json.utils.mjs +21 -3
  122. package/esm2020/src/app/shared/form/field.component.mjs +103 -40
  123. package/esm2020/src/app/shared/form/field.model.mjs +1 -1
  124. package/esm2020/src/app/shared/form/loading-spinner.mjs +4 -4
  125. package/esm2020/src/app/shared/functions.mjs +27 -12
  126. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +46 -7
  127. package/esm2020/src/app/shared/gesture/gesture-config.mjs +4 -4
  128. package/esm2020/src/app/shared/graph/graph-colors.mjs +5 -1
  129. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  130. package/esm2020/src/app/shared/help/help.modal.mjs +4 -4
  131. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +4 -4
  132. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +4 -4
  133. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +5 -5
  134. package/esm2020/src/app/shared/http/http.utils.mjs +4 -4
  135. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +43 -33
  136. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +7 -6
  137. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +4 -4
  138. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +4 -4
  139. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +5 -5
  140. package/esm2020/src/app/shared/image/image.module.mjs +5 -5
  141. package/esm2020/src/app/shared/image/image.service.mjs +4 -4
  142. package/esm2020/src/app/shared/logging/log-level.model.mjs +48 -0
  143. package/esm2020/src/app/shared/logging/logger.model.mjs +47 -0
  144. package/esm2020/src/app/shared/logging/logging-service.class.mjs +121 -0
  145. package/esm2020/src/app/shared/logging/logging-service.config.mjs +2 -0
  146. package/esm2020/src/app/shared/logging/logging-service.module.mjs +30 -0
  147. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +15 -14
  148. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +5 -5
  149. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +5 -5
  150. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +130 -112
  151. package/esm2020/src/app/shared/material/badge/badge.module.mjs +5 -5
  152. package/esm2020/src/app/shared/material/badge/badge.test.mjs +27 -14
  153. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +5 -5
  154. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +6 -6
  155. package/esm2020/src/app/shared/material/chips/chips.module.mjs +5 -5
  156. package/esm2020/src/app/shared/material/chips/material.chips.mjs +4 -4
  157. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +4 -4
  158. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +5 -5
  159. package/esm2020/src/app/shared/material/datetime/material.date.mjs +6 -6
  160. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +6 -6
  161. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +96 -33
  162. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +4 -4
  163. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +4 -4
  164. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +4 -4
  165. package/esm2020/src/app/shared/material/duration/duration.module.mjs +5 -5
  166. package/esm2020/src/app/shared/material/duration/material.duration.mjs +4 -4
  167. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +4 -4
  168. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
  169. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +4 -4
  170. package/esm2020/src/app/shared/material/material.module.mjs +5 -5
  171. package/esm2020/src/app/shared/material/material.testing.module.mjs +5 -5
  172. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +4 -4
  173. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +4 -4
  174. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +4 -4
  175. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +4 -4
  176. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +4 -4
  177. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +4 -4
  178. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +5 -5
  179. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +4 -4
  180. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +4 -4
  181. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  182. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +45 -35
  183. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +7 -6
  184. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +4 -4
  185. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +47 -41
  186. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +4 -4
  187. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +5 -5
  188. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +7 -7
  189. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +5 -5
  190. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +6 -6
  191. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +4 -4
  192. package/esm2020/src/app/shared/pipes/form.pipes.mjs +19 -19
  193. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  194. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +10 -10
  195. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +13 -13
  196. package/esm2020/src/app/shared/pipes/math.pipes.mjs +13 -13
  197. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +4 -4
  198. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  199. package/esm2020/src/app/shared/pipes/pipes.module.mjs +22 -9
  200. package/esm2020/src/app/shared/pipes/property.pipes.mjs +8 -8
  201. package/esm2020/src/app/shared/pipes/string.pipes.mjs +28 -28
  202. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +9 -9
  203. package/esm2020/src/app/shared/pipes/types.pipes.mjs +45 -0
  204. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +4 -4
  205. package/esm2020/src/app/shared/services/progress-bar.service.mjs +4 -4
  206. package/esm2020/src/app/shared/services/startable-service.class.mjs +6 -1
  207. package/esm2020/src/app/shared/services/translate-context.service.mjs +28 -4
  208. package/esm2020/src/app/shared/shared-routing.module.mjs +8 -8
  209. package/esm2020/src/app/shared/shared.module.mjs +7 -7
  210. package/esm2020/src/app/shared/shared.testing.module.mjs +20 -12
  211. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +268 -0
  212. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +60 -0
  213. package/esm2020/src/app/shared/storage/storage.service.mjs +132 -0
  214. package/esm2020/src/app/shared/storage/storage.utils.mjs +13 -0
  215. package/esm2020/src/app/shared/testing/observable.test.mjs +4 -4
  216. package/esm2020/src/app/shared/testing/tests.page.mjs +4 -4
  217. package/esm2020/src/app/shared/toast/toast.testing.mjs +6 -6
  218. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +5 -5
  219. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +4 -4
  220. package/esm2020/src/app/shared/toolbar/toolbar.mjs +14 -13
  221. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +5 -5
  222. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +4 -4
  223. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +5 -5
  224. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +4 -4
  225. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +4 -4
  226. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +4 -4
  227. package/esm2020/src/app/shared/validator/validators.mjs +32 -2
  228. package/esm2020/src/app/social/job/job.module.mjs +5 -5
  229. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +4 -4
  230. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +4 -4
  231. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +4 -4
  232. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +4 -4
  233. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +4 -4
  234. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +4 -4
  235. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +5 -5
  236. package/esm2020/src/app/social/message/message.form.mjs +4 -4
  237. package/esm2020/src/app/social/message/message.modal.mjs +4 -4
  238. package/esm2020/src/app/social/message/message.module.mjs +5 -5
  239. package/esm2020/src/app/social/message/message.service.mjs +4 -4
  240. package/esm2020/src/app/social/social.module.mjs +5 -5
  241. package/esm2020/src/app/social/social.testing.module.mjs +5 -5
  242. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +5 -5
  243. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +4 -4
  244. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +4 -6
  245. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +5 -5
  246. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +4 -4
  247. package/esm2020/src/app/social/user-event/user-event.module.mjs +5 -5
  248. package/esm2020/src/app/social/user-event/user-event.service.mjs +4 -4
  249. package/esm2020/src/environments/environment.class.mjs +1 -1
  250. package/esm2020/src/environments/environment.mjs +15 -7
  251. package/fesm2015/sumaris-net.ngx-components.mjs +2892 -1561
  252. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  253. package/fesm2020/sumaris-net.ngx-components.mjs +2815 -1526
  254. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  255. package/package.json +10 -10
  256. package/public_api.d.ts +12 -2
  257. package/src/app/core/account/account.page.d.ts +3 -3
  258. package/src/app/core/core.module.d.ts +1 -1
  259. package/src/app/core/form/entity/editor.class.d.ts +6 -4
  260. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -1
  261. package/src/app/core/form/entity/entity-editor.class.d.ts +37 -31
  262. package/src/app/core/form/form.class.d.ts +1 -1
  263. package/src/app/core/form/properties/properties.form.d.ts +1 -0
  264. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +6 -2
  265. package/src/app/core/form/text-popover/text-popover.component.d.ts +27 -2
  266. package/src/app/core/graphql/graphql.service.d.ts +1 -1
  267. package/src/app/core/graphql/graphql.utils.d.ts +1 -1
  268. package/src/app/core/menu/menu.component.d.ts +3 -4
  269. package/src/app/core/peer/select-peer.modal.d.ts +5 -2
  270. package/src/app/core/services/account.service.d.ts +5 -0
  271. package/src/app/core/services/base-entity-service.class.d.ts +1 -0
  272. package/src/app/core/services/errors.d.ts +1 -0
  273. package/src/app/core/services/local-settings.service.d.ts +5 -2
  274. package/src/app/core/services/model/entity.model.d.ts +3 -0
  275. package/src/app/core/services/model/referential.model.d.ts +6 -1
  276. package/src/app/core/services/network.service.d.ts +5 -2
  277. package/src/app/core/services/network.utils.d.ts +6 -7
  278. package/src/app/core/services/pipes/usage-mode.pipes.d.ts +8 -8
  279. package/src/app/core/services/platform.service.d.ts +9 -5
  280. package/src/app/core/services/storage/entities-storage.service.d.ts +1 -1
  281. package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
  282. package/src/app/core/settings/settings.page.d.ts +9 -6
  283. package/src/app/core/table/actions-column.component.d.ts +6 -1
  284. package/src/app/core/table/table.class.d.ts +11 -11
  285. package/src/app/core/table/table.utils.d.ts +4 -0
  286. package/src/app/core/table/testing/table-validator.service.d.ts +17 -0
  287. package/src/app/core/table/testing/table.testing.d.ts +2 -0
  288. package/src/app/shared/alerts.d.ts +2 -1
  289. package/src/app/shared/audio/audio.d.ts +1 -0
  290. package/src/app/shared/dates.d.ts +1 -1
  291. package/src/app/shared/debug/debug-service.class.d.ts +5 -0
  292. package/src/app/shared/file/file.utils.d.ts +1 -1
  293. package/src/app/shared/file/json.utils.d.ts +5 -0
  294. package/src/app/shared/form/field.component.d.ts +16 -4
  295. package/src/app/shared/form/field.model.d.ts +1 -1
  296. package/src/app/shared/functions.d.ts +10 -8
  297. package/src/app/shared/geolocation/geolocation.utils.d.ts +9 -1
  298. package/src/app/shared/image/gallery/image-gallery.component.d.ts +14 -17
  299. package/src/app/shared/logging/log-level.model.d.ts +38 -0
  300. package/src/app/shared/logging/logger.model.d.ts +68 -0
  301. package/src/app/shared/logging/logging-service.class.d.ts +39 -0
  302. package/src/app/shared/logging/logging-service.config.d.ts +25 -0
  303. package/src/app/shared/logging/logging-service.module.d.ts +9 -0
  304. package/src/app/shared/material/badge/badge.directive.d.ts +25 -18
  305. package/src/app/shared/material/badge/badge.test.d.ts +8 -0
  306. package/src/app/shared/material/datetime/material.datetime.d.ts +15 -5
  307. package/src/app/shared/material/swipe/material.swipe.d.ts +12 -12
  308. package/src/app/shared/pipes/arrays.pipe.d.ts +9 -9
  309. package/src/app/shared/pipes/duration.pipe.d.ts +2 -1
  310. package/src/app/shared/pipes/pipes.module.d.ts +5 -4
  311. package/src/app/shared/pipes/types.pipes.d.ts +18 -0
  312. package/src/app/shared/services/startable-service.class.d.ts +1 -0
  313. package/src/app/shared/services/translate-context.service.d.ts +2 -2
  314. package/src/app/shared/shared.testing.module.d.ts +2 -1
  315. package/src/app/shared/storage/storage-explorer.component.d.ts +58 -0
  316. package/src/app/shared/storage/storage-explorer.module.d.ts +16 -0
  317. package/src/app/shared/{services/storage → storage}/storage.service.d.ts +2 -2
  318. package/src/app/shared/toolbar/toolbar.d.ts +5 -4
  319. package/src/app/shared/validator/validators.d.ts +6 -0
  320. package/src/assets/i18n/en-US.json +23 -3
  321. package/src/assets/i18n/en.json +23 -3
  322. package/src/assets/i18n/fr.json +22 -8
  323. package/src/assets/manifest.json +1 -1
  324. package/src/environments/environment.class.d.ts +4 -0
  325. package/src/theme/_ionic.globals.scss +7 -2
  326. package/src/theme/_ngx-components.scss +13 -3
  327. package/esm2020/src/app/shared/services/storage/storage.service.mjs +0 -132
  328. package/esm2020/src/app/shared/services/storage/storage.utils.mjs +0 -13
  329. /package/src/app/shared/{services/storage → storage}/storage.utils.d.ts +0 -0
@@ -22,4 +22,4 @@ export class FormFieldValuesHolder {
22
22
  return isNotNil(data[definition.key]) ? data[definition.key] : (definition.defaultValue || undefined);
23
23
  }
24
24
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFxQ3RDLE1BQU0sT0FBZ0IscUJBQXFCO0lBQ3pDLFlBQVksQ0FBQyxJQUFlLEVBQUUsVUFBK0I7UUFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUyxFQUFFLFVBQStCO1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVMsRUFBRSxVQUErQjtRQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNwRixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUyxFQUFFLFVBQStCO1FBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFFRCxHQUFHLENBQWEsSUFBUyxFQUFFLFVBQStCO1FBQ3hELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JqZWN0TWFwLCBQcm9wZXJ0eX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtpc05vdE5pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZ30gZnJvbSAnLi4vbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHtVc2VyUHJvZmlsZUxhYmVsfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbCc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRGlzcGxheUZuID0gKG9iajogYW55KSA9PiBzdHJpbmc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRXF1YWxzRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBDb21wYXJlRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4gbnVtYmVyO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZvcm1GaWVsZFR5cGUgPSAnaW50ZWdlcicgfCAnZG91YmxlJyB8ICdib29sZWFuJyB8ICdzdHJpbmcnIHwgJ2VudW0nIHwgJ2NvbG9yJyB8ICdwZWVyJyB8ICdlbnRpdHknIHwgJ2VudGl0aWVzJyB8ICdkYXRlJyB8ICdkYXRlVGltZSc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBGb3JtRmllbGREZWZpbml0aW9uPEsgPSBzdHJpbmcsIFQgPSBGb3JtRmllbGRUeXBlLCBFID0gYW55PiB7XG4gIGtleTogSztcbiAgdHlwZTogVDtcbiAgbGFiZWw6IHN0cmluZztcbiAgbWluVmFsdWU/OiBudW1iZXI7XG4gIG1heFZhbHVlPzogbnVtYmVyO1xuICBtYXhpbXVtTnVtYmVyRGVjaW1hbHM/OiBudW1iZXI7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgaXNUcmFuc2llbnQ/OiBib29sZWFuOyAvLyBVc2VmdWwgb25seSBmb3IgcmVtb3RlIGNvbmZpZ3VyYXRpb25cbiAgdmFsdWVzPzogKHN0cmluZ3xQcm9wZXJ0eSlbXSB8IEluamVjdGlvblRva2VuPChzdHJpbmd8UHJvcGVydHkpW10+O1xuICBhdXRvY29tcGxldGU/OiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZzxFPjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGV4dHJhPzoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgIH07XG4gIH07XG4gIG1pblByb2ZpbGU/OiBVc2VyUHJvZmlsZUxhYmVsO1xufVxuZXhwb3J0IGRlY2xhcmUgdHlwZSBGb3JtRmllbGREZWZpbml0aW9uTWFwID0gT2JqZWN0TWFwPEZvcm1GaWVsZERlZmluaXRpb24+O1xuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb3JtRmllbGRWYWx1ZXNIb2xkZXIge1xuICBnZXRBc0Jvb2xlYW4oZGF0YTogT2JqZWN0TWFwLCBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChkYXRhLCBkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gKHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFzSW50KGRhdGE6IGFueSwgZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChkYXRhLCBkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gcGFyc2VJbnQodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QXNOdW1iZXJzKGRhdGE6IGFueSwgZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IG51bWJlcltdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KGRhdGEsIGRlZmluaXRpb24pO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocGFyc2VGbG9hdCkgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBbcGFyc2VGbG9hdCh2YWx1ZSldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QXNTdHJpbmdzKGRhdGE6IGFueSwgZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KGRhdGEsIGRlZmluaXRpb24pO1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5zcGxpdCgnLCcpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldDxUID0gc3RyaW5nPihkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBUIHtcbiAgICByZXR1cm4gaXNOb3ROaWwoZGF0YVtkZWZpbml0aW9uLmtleV0pID8gZGF0YVtkZWZpbml0aW9uLmtleV0gOiAoZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgfHwgdW5kZWZpbmVkKTtcbiAgfVxufVxuIl19
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFxQ3RDLE1BQU0sT0FBZ0IscUJBQXFCO0lBQ3pDLFlBQVksQ0FBQyxJQUFlLEVBQUUsVUFBK0I7UUFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUyxFQUFFLFVBQStCO1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVMsRUFBRSxVQUErQjtRQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNwRixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUyxFQUFFLFVBQStCO1FBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFFRCxHQUFHLENBQWEsSUFBUyxFQUFFLFVBQStCO1FBQ3hELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JqZWN0TWFwLCBQcm9wZXJ0eX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtpc05vdE5pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZ30gZnJvbSAnLi4vbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHtVc2VyUHJvZmlsZUxhYmVsfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbCc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRGlzcGxheUZuID0gKG9iajogYW55KSA9PiBzdHJpbmc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRXF1YWxzRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBDb21wYXJlRm4gPSAobzE6IGFueSwgbzI6IGFueSkgPT4gbnVtYmVyO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIEZvcm1GaWVsZFR5cGUgPSAnaW50ZWdlcicgfCAnZG91YmxlJyB8ICdib29sZWFuJyB8ICdzdHJpbmcnIHwgJ2VudW0nIHwgJ2VudW1zJyB8ICdjb2xvcicgfCAncGVlcicgfCAnZW50aXR5JyB8ICdlbnRpdGllcycgfCAnZGF0ZScgfCAnZGF0ZVRpbWUnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRm9ybUZpZWxkRGVmaW5pdGlvbjxLID0gc3RyaW5nLCBUID0gRm9ybUZpZWxkVHlwZSwgRSA9IGFueT4ge1xuICBrZXk6IEs7XG4gIHR5cGU6IFQ7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG1pblZhbHVlPzogbnVtYmVyO1xuICBtYXhWYWx1ZT86IG51bWJlcjtcbiAgbWF4aW11bU51bWJlckRlY2ltYWxzPzogbnVtYmVyO1xuICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gIGlzVHJhbnNpZW50PzogYm9vbGVhbjsgLy8gVXNlZnVsIG9ubHkgZm9yIHJlbW90ZSBjb25maWd1cmF0aW9uXG4gIHZhbHVlcz86IChzdHJpbmd8UHJvcGVydHkpW10gfCBJbmplY3Rpb25Ub2tlbjwoc3RyaW5nfFByb3BlcnR5KVtdPjtcbiAgYXV0b2NvbXBsZXRlPzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8RT47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBleHRyYT86IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuICBtaW5Qcm9maWxlPzogVXNlclByb2ZpbGVMYWJlbDtcbn1cbmV4cG9ydCBkZWNsYXJlIHR5cGUgRm9ybUZpZWxkRGVmaW5pdGlvbk1hcCA9IE9iamVjdE1hcDxGb3JtRmllbGREZWZpbml0aW9uPjtcblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRm9ybUZpZWxkVmFsdWVzSG9sZGVyIHtcbiAgZ2V0QXNCb29sZWFuKGRhdGE6IE9iamVjdE1hcCwgZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoZGF0YSwgZGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/ICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBc0ludChkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoZGF0YSwgZGVmaW5pdGlvbik7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHBhcnNlSW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFzTnVtYmVycyhkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChkYXRhLCBkZWZpbml0aW9uKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKHBhcnNlRmxvYXQpIHx8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gW3BhcnNlRmxvYXQodmFsdWUpXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFzU3RyaW5ncyhkYXRhOiBhbnksIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChkYXRhLCBkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuc3BsaXQoJywnKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQ8VCA9IHN0cmluZz4oZGF0YTogYW55LCBkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uKTogVCB7XG4gICAgcmV0dXJuIGlzTm90TmlsKGRhdGFbZGVmaW5pdGlvbi5rZXldKSA/IGRhdGFbZGVmaW5pdGlvbi5rZXldIDogKGRlZmluaXRpb24uZGVmYXVsdFZhbHVlIHx8IHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==
@@ -8,14 +8,14 @@ export class AppLoadingSpinner {
8
8
  this.color = 'secondary';
9
9
  }
10
10
  }
11
- AppLoadingSpinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppLoadingSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
- AppLoadingSpinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AppLoadingSpinner, selector: "app-loading-spinner", inputs: { loading: "loading", color: "color", name: "name" }, ngImport: i0, template: `
11
+ AppLoadingSpinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppLoadingSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ AppLoadingSpinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AppLoadingSpinner, selector: "app-loading-spinner", inputs: { loading: "loading", color: "color", name: "name" }, ngImport: i0, template: `
13
13
  <ion-spinner *ngIf="loading; else content" [color]="color" [name]="name"></ion-spinner>
14
14
  <ng-template #content>
15
15
  <ng-content></ng-content>
16
16
  </ng-template>
17
17
  `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppLoadingSpinner, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppLoadingSpinner, decorators: [{
19
19
  type: Component,
20
20
  args: [{
21
21
  selector: 'app-loading-spinner',
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
33
33
  }], name: [{
34
34
  type: Input
35
35
  }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1zcGlubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZm9ybS9sb2FkaW5nLXNwaW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFXL0MsTUFBTSxPQUFPLGlCQUFpQjtJQVQ5QjtRQVVXLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUF1QixXQUFXLENBQUM7S0FFbEQ7OytHQUpZLGlCQUFpQjttR0FBakIsaUJBQWlCLHlIQVBsQjs7Ozs7R0FLVDs0RkFFVSxpQkFBaUI7a0JBVDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFOzs7OztHQUtUO2lCQUNGOzhCQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvYWRpbmctc3Bpbm5lcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1zcGlubmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50XCIgW2NvbG9yXT1cImNvbG9yXCIgW25hbWVdPVwibmFtZVwiPjwvaW9uLXNwaW5uZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgQXBwTG9hZGluZ1NwaW5uZXIgIHtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3NlY29uZGFyeSc7XG4gIEBJbnB1dCgpIG5hbWU6ICdidWJibGVzJyB8ICdjaXJjbGVzJyB8ICdjaXJjdWxhcicgfCAnY3Jlc2NlbnQnIHwgJ2RvdHMnIHwgJ2xpbmVzJyB8ICdsaW5lcy1zbWFsbCcgfCB1bmRlZmluZWQ7XG59XG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1zcGlubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZm9ybS9sb2FkaW5nLXNwaW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFXL0MsTUFBTSxPQUFPLGlCQUFpQjtJQVQ5QjtRQVVXLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUF1QixXQUFXLENBQUM7S0FFbEQ7OzhHQUpZLGlCQUFpQjtrR0FBakIsaUJBQWlCLHlIQVBsQjs7Ozs7R0FLVDsyRkFFVSxpQkFBaUI7a0JBVDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFOzs7OztHQUtUO2lCQUNGOzhCQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvYWRpbmctc3Bpbm5lcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1zcGlubmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50XCIgW2NvbG9yXT1cImNvbG9yXCIgW25hbWVdPVwibmFtZVwiPjwvaW9uLXNwaW5uZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgQXBwTG9hZGluZ1NwaW5uZXIgIHtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3NlY29uZGFyeSc7XG4gIEBJbnB1dCgpIG5hbWU6ICdidWJibGVzJyB8ICdjaXJjbGVzJyB8ICdjaXJjdWxhcicgfCAnY3Jlc2NlbnQnIHwgJ2RvdHMnIHwgJ2xpbmVzJyB8ICdsaW5lcy1zbWFsbCcgfCB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -49,7 +49,8 @@ export function arrayGroupBy(obj, key) {
49
49
  }, {});
50
50
  }
51
51
  /**
52
- * Remove duplicated value, in array. Will compute a unique key (from given properties, or given function)
52
+ * Remove duplicated value, in array. Will compute a unique key (from given properties, or given function).
53
+ * If propertiesOrKeyFn is nil or undefined, will use all object properties
53
54
  * @param values
54
55
  * @param propertiesOrKeyFn
55
56
  */
@@ -59,6 +60,7 @@ export function arrayDistinct(values, propertiesOrKeyFn) {
59
60
  const properties = (!propertiesOrKeyFn && Object.keys(values[0])) || (Array.isArray(propertiesOrKeyFn) && propertiesOrKeyFn);
60
61
  const getKey = (typeof propertiesOrKeyFn === 'function' && propertiesOrKeyFn)
61
62
  || (typeof propertiesOrKeyFn === 'string' && ((obj) => getPropertyByPathAsString(obj, propertiesOrKeyFn)))
63
+ || (isEmptyArray(properties) && ((obj) => obj?.toString()))
62
64
  || ((obj) => joinPropertiesPath(obj, properties, '|'));
63
65
  const existingIds = new Set();
64
66
  return values.reduce((res, item) => {
@@ -72,6 +74,9 @@ export function arrayDistinct(values, propertiesOrKeyFn) {
72
74
  export function nullIfUndefined(obj) {
73
75
  return obj === undefined ? null : obj;
74
76
  }
77
+ export function undefinedIfNull(obj) {
78
+ return obj === null ? undefined : obj;
79
+ }
75
80
  export function trimEmptyToNull(str) {
76
81
  const value = str && str.trim() || undefined;
77
82
  return value && value.length && value || null;
@@ -157,8 +162,8 @@ export function suggestFromStringArray(values, value, options) {
157
162
  export function joinPropertiesPath(obj, properties, separator) {
158
163
  if (!obj)
159
164
  throw new Error('Could not display an undefined entity.');
160
- if (!properties)
161
- throw new Error('Missing \'properties\' argument');
165
+ if (isEmptyArray(properties))
166
+ throw new Error('Missing or empty \'properties\' argument');
162
167
  return properties
163
168
  .map(path => getPropertyByPath(obj, path))
164
169
  .filter(isNotNilOrBlank)
@@ -206,7 +211,9 @@ export function sort(array, attribute, opts) {
206
211
  : (v1, v2) => v1 === v2 ? 0 : v1 > v2 ? 1 : -1;
207
212
  return array
208
213
  .slice() // copy
209
- .sort((a, b) => compareFn(a[attribute], b[attribute]));
214
+ .sort(attribute
215
+ ? (a, b) => compareFn(a[attribute], b[attribute])
216
+ : compareFn);
210
217
  }
211
218
  const INTEGER_REGEXP = /^[-]?\d+$/;
212
219
  export function isInt(value) {
@@ -350,6 +357,19 @@ export function splitById(array) {
350
357
  return res;
351
358
  }, {});
352
359
  }
360
+ /**
361
+ * Split an array, into a map of array, group by property
362
+ */
363
+ export function collectByProperty(values, propertyName) {
364
+ return (values || []).reduce((res, item) => {
365
+ const key = item && item[propertyName];
366
+ if (typeof key === 'number' || typeof key === 'string') {
367
+ res[key] = res[key] || [];
368
+ res[key].push(item);
369
+ }
370
+ return res;
371
+ }, {});
372
+ }
353
373
  /**
354
374
  * Determines if two objects or two values are equivalent.
355
375
  *
@@ -439,15 +459,10 @@ export class Beans {
439
459
  }) === -1;
440
460
  }
441
461
  static collectById(array) {
442
- return this.collectByProperty(array, 'id');
443
- }
444
- static collectByProperty(array, propertyName) {
445
- return (array || []).reduce((res, item) => {
446
- res['' + propertyName] = item;
447
- return res;
448
- }, {});
462
+ return collectByProperty(array, 'id');
449
463
  }
450
464
  }
465
+ Beans.collectByProperty = collectByProperty;
451
466
  export function findParentWithClass(elem, className) {
452
467
  if (!className)
453
468
  return undefined;
@@ -459,4 +474,4 @@ export function findParentWithClass(elem, className) {
459
474
  }
460
475
  return undefined;
461
476
  }
462
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sVUFBVSxLQUFLLENBQUksR0FBeUI7SUFDaEQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUksR0FBeUI7SUFDdkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEdBQXlCO0lBQ25ELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFJLEdBQXlCO0lBQzFELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBSSxHQUF5QjtJQUN4RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQXlCO0lBQ3JELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtB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QUFDO0lBQ2pDLElBQUksY0FBYyxHQUFHLElBQUksRUFBRSxhQUFhLENBQUM7SUFDekMsT0FBTyxjQUFjLEVBQUU7UUFDckIsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLGNBQWMsQ0FBQztRQUN4RSxjQUFjLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQztLQUMvQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0tleXNFbnVtLCBLZXlWYWx1ZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtJRW50aXR5fSBmcm9tICcuLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05pbDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOaWxPckJsYW5rPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgb2JqLnRyaW0oKSA9PT0gJycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbE9yQmxhbms8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmICh0eXBlb2Ygb2JqICE9PSAnc3RyaW5nJyB8fCBvYmoudHJpbSgpICE9PSAnJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWxPck5hTjxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogIT09ICdudW1iZXInIHx8ICFpc05hTihvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05pbE9yTmFOPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicgJiYgaXNOYU4ob2JqKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbXB0eUFycmF5PFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIG9iai5sZW5ndGggPiAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0QXJyYXlWYWx1ZTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlzTm90RW1wdHlBcnJheShvYmopID8gb2JqWzBdIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlBcnJheTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCAhb2JqLmxlbmd0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbEJvb2xlYW4ob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdib29sZWFuJyB8fCBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbFN0cmluZyhvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgc3RyaW5nIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rU3RyaW5nKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBzdHJpbmcge1xuICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSAmJiBvYmoudHJpbSgpLmxlbmd0aCA9PT0gMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3ROaWxPckRlZmF1bHQ8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBUKTogVCB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IG9iaiA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVNpemU8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIGlzTm90RW1wdHlBcnJheShvYmopICYmIG9iai5sZW5ndGggfHwgMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUdyb3VwQnk8XG4gIFQgPSBhbnksXG4gIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55LFxuICBNIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBUW107XG59ID0geyBba2V5OiBzdHJpbmddOiBUW10gfT4ob2JqOiBUW10sIGtleToga2V5b2YgVCk6IE0ge1xuICBpZiAoaXNOaWwob2JqKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBvYmoucmVkdWNlKChydjogYW55LCB4KSA9PiB7XG4gICAgKHJ2W3hba2V5XV0gPSBydlt4W2tleV1dIHx8IFtdKS5wdXNoKHgpO1xuICAgIHJldHVybiBydjtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFJlbW92ZSBkdXBsaWNhdGVkIHZhbHVlLCBpbiBhcnJheS4gV2lsbCBjb21wdXRlIGEgdW5pcXVlIGtleSAoZnJvbSBnaXZlbiBwcm9wZXJ0aWVzLCBvciBnaXZlbiBmdW5jdGlvbilcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzT3JLZXlGblxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlEaXN0aW5jdDxUID0gYW55Pih2YWx1ZXM6IFRbXSwgcHJvcGVydGllc09yS2V5Rm4/OiBzdHJpbmcgfCBzdHJpbmdbXSB8ICgob2JqOiBUKSA9PiBzdHJpbmcpICk6IFRbXSB7XG4gIGlmIChpc0VtcHR5QXJyYXkodmFsdWVzKSkgcmV0dXJuIHZhbHVlcztcbiAgY29uc3QgcHJvcGVydGllczogc3RyaW5nW10gPSAoIXByb3BlcnRpZXNPcktleUZuICYmIE9iamVjdC5rZXlzKHZhbHVlc1swXSkpIHx8IChBcnJheS5pc0FycmF5KHByb3BlcnRpZXNPcktleUZuKSAmJiBwcm9wZXJ0aWVzT3JLZXlGbik7XG4gIGNvbnN0IGdldEtleTogKG9iajogVCkgPT4gc3RyaW5nID1cbiAgICAodHlwZW9mIHByb3BlcnRpZXNPcktleUZuID09PSAnZnVuY3Rpb24nICYmIHByb3BlcnRpZXNPcktleUZuKVxuICAgIHx8ICh0eXBlb2YgcHJvcGVydGllc09yS2V5Rm4gPT09ICdzdHJpbmcnICYmICgob2JqKSA9PiBnZXRQcm9wZXJ0eUJ5UGF0aEFzU3RyaW5nKG9iaiwgcHJvcGVydGllc09yS2V5Rm4pKSlcbiAgICB8fCAoKG9iaikgPT4gam9pblByb3BlcnRpZXNQYXRoKG9iaiwgcHJvcGVydGllcywgJ3wnKSk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJldHVybiB2YWx1ZXMucmVkdWNlKChyZXMsIGl0ZW0pID0+IHtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSBnZXRLZXkoaXRlbSk7XG4gICAgaWYgKGV4aXN0aW5nSWRzLmhhcyh1bmlxdWVLZXkpKSByZXR1cm4gcmVzOyAvLyBTa2lwIGlmIGR1cGxpY2F0ZVxuICAgIGV4aXN0aW5nSWRzLmFkZCh1bmlxdWVLZXkpO1xuICAgIHJldHVybiByZXMuY29uY2F0KGl0ZW0pO1xuICB9LCBbXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbnVsbElmVW5kZWZpbmVkPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBUIHwgbnVsbCB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCA/IG51bGwgOiBvYmo7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJpbUVtcHR5VG9OdWxsPFQ+KHN0cjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHN0ciAmJiBzdHIudHJpbSgpIHx8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmxlbmd0aCAmJiB2YWx1ZSB8fCBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbihvYmo6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/IChvYmogIT09ICdmYWxzZScgPyAhIW9iaiA6IGZhbHNlKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcihvYmo6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAob2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsKSA/ICtvYmogOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9GbG9hdChvYmo6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICByZXR1cm4gKG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCkgPyBwYXJzZUZsb2F0KG9iaikgOiBkZWZhdWx0VmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9JbnQob2JqOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gcGFyc2VJbnQob2JqLCAwKSA6IGRlZmF1bHRWYWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b05vdE5pbDxUID0gYW55PihvYmo6IFQsIGRlZmF1bHRWYWx1ZT86IFQpOiBhbnkgfCBudWxsIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gb2JqIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUR1cGxpY2F0ZXNGcm9tQXJyYXk8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCBwcm9wZXJ0eT86IHN0cmluZyk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQge1xuICBpZiAoaXNFbXB0eUFycmF5KG9iaikpIHJldHVybiBvYmo7XG4gIGlmIChwcm9wZXJ0eSkge1xuICAgIHJldHVybiBvYmouZmlsdGVyKChpdGVtLCBpLCBhcnJheSkgPT4gYXJyYXkuZmluZEluZGV4KHQgPT4gdCAmJiBpdGVtICYmIHRbcHJvcGVydHldID09PSBpdGVtW3Byb3BlcnR5XSkgPT09IGkpO1xuICB9XG4gIHJldHVybiBvYmouZmlsdGVyKChpdGVtLCBpLCBhcnJheSkgPT4gYXJyYXkuZmluZEluZGV4KHQgPT4gdCAmJiBpdGVtICYmIHQgPT09IGl0ZW0pID09PSBpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoVXBwZXJDYXNlKGlucHV0OiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbnB1dCAmJiBpbnB1dC50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFVwcGVyQ2FzZShpbnB1dDogc3RyaW5nLCByZWdleHA6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQgJiYgISFpbnB1dC50b1VwcGVyQ2FzZSgpLm1hdGNoKHJlZ2V4cCk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIGFueS4gRXhhbXBsZXMgOlxuICogLSAnL3Rlc3QvJyAtPiAnL3Rlc3QnXG4gKiAtICcvJyAtPiB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vVHJhaWxpbmdTbGFzaChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXBhdGggfHwgcGF0aC50cmltKCkgPT09ICcvJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHBhdGgudHJpbSgpLmxhc3RJbmRleE9mKCcvJykgPT09IHBhdGgubGVuZ3RoIC0gMSkgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbCh2YWx1ZTogc3RyaW5nLCBzZWFyY2hTdHJpbmc6IGFueSwgcmVwbGFjZW1lbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB3aGlsZSAodmFsdWUgJiYgdmFsdWUuaW5kZXhPZihzZWFyY2hTdHJpbmcpICE9PSAtMSkge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShzZWFyY2hTdHJpbmcsIHJlcGxhY2VtZW50KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbmQodmFsdWU6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWU/LmVuZHNXaXRoKGVuZCB8fCAnJykgPyB2YWx1ZS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gZW5kLmxlbmd0aCkgOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIGNhc2UgY2hhbmdlIGJ5IGFuIHVuZGVyc2NvcmUgKC5lLmcgJ215U3RyaW5nJyBiZWNvbWVzICdteV9zdHJpbmcnKVxuICpcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMV8kMicpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEaWFjcml0aWNzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0Lm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VnZ2VzdEZyb21TdHJpbmdBcnJheSh2YWx1ZXM6IHN0cmluZ1tdLCB2YWx1ZTogYW55LCBvcHRpb25zPzoge1xuICBzZWFyY2hBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHNlYXJjaEF0dHJpYnV0ZXM/OiBzdHJpbmdbXTtcbn0pOiBzdHJpbmdbXSB7XG4gIHZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcqJykgJiYgdmFsdWUudG9VcHBlckNhc2UoKSB8fCB1bmRlZmluZWQ7XG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gdmFsdWVzO1xuXG4gIC8vIElmIHdpbGRjYXJkLCBzZWFyY2ggdXNpbmcgcmVnZXhwXG4gIGlmICgodmFsdWUgYXMgc3RyaW5nKS5pbmRleE9mKCcqJykgIT09IC0xKSB7XG4gICAgdmFsdWUgPSAodmFsdWUgYXMgc3RyaW5nKS5yZXBsYWNlKCcqJywgJy4qJyk7XG4gICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIodiA9PiBtYXRjaFVwcGVyQ2FzZSh2LCB2YWx1ZSkpO1xuICB9XG5cbiAgLy8gSWYgbm8gd2lsZGNhcmQsIHNlYXJjaCB1c2luZyBzdGFydHNXaXRoXG4gIHJldHVybiB2YWx1ZXMuZmlsdGVyKHYgPT4gc3RhcnRzV2l0aFVwcGVyQ2FzZSh2LCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pblByb3BlcnRpZXNQYXRoPFQgPSBhbnk+KG9iajogVCwgcHJvcGVydGllczogc3RyaW5nW10sIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghb2JqKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkaXNwbGF5IGFuIHVuZGVmaW5lZCBlbnRpdHkuJyk7XG4gIGlmICghcHJvcGVydGllcykgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIFxcJ3Byb3BlcnRpZXNcXCcgYXJndW1lbnQnKTtcbiAgcmV0dXJuIHByb3BlcnRpZXNcbiAgICAubWFwKHBhdGggPT4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoKSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgJyAtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pblByb3BlcnRpZXM8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KG9iajogVCwga2V5czogS1tdLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW9iaikgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGlzcGxheSBhbiB1bmRlZmluZWQgZW50aXR5LicpO1xuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoa2V5ID0+IGdldFByb3BlcnR5KG9iaiwga2V5KSlcbiAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuaylcbiAgICAuam9pbihzZXBhcmF0b3IgfHwgJyAtICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlQYXRoQ29tcGFyYXRvcjxUID0gYW55PihwYXRoOiBzdHJpbmd8c3RyaW5nW10pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIChhOiBULCBiOiBUKSA9PiB7XG4gICAgY29uc3QgdmFsdWVBID0gZ2V0UHJvcGVydHlCeVBhdGgoYSwgcGF0aCk7XG4gICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwgcGF0aCk7XG4gICAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlDb21wYXJhdG9yPFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55PihrZXk6IEssIGRlZmF1bHRWYWx1ZT86IGFueSk6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IHtcbiAgICBjb25zdCB2YWx1ZUEgPSBhW2tleV0gIT09IHVuZGVmaW5lZCA/IGFba2V5XSA6IGRlZmF1bHRWYWx1ZTtcbiAgICBjb25zdCB2YWx1ZUIgPSBiW2tleV0gPyBiW2tleV0gOiBkZWZhdWx0VmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc1BhdGhDb21wYXJhdG9yPFQgPSBhbnk+KGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWVzPzogYW55W10pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgaWYgKCFrZXlzIHx8ICFrZXlzLmxlbmd0aCB8fCAoZGVmYXVsdFZhbHVlcyAmJiBrZXlzLmxlbmd0aCA+IGRlZmF1bHRWYWx1ZXMubGVuZ3RoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudHM6IG1pc3NpbmcgXFwna2V5c1xcJyBvciBhcnJheSBcXCdkZWZhdWx0VmFsdWVzXFwnIGhhcyBhIGJhZCBsZW5ndGgnKTtcbiAgfVxuICByZXR1cm4gKGE6IFQsIGI6IFQpID0+IGtleXMubWFwKChrZXksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZUEgPSBnZXRQcm9wZXJ0eUJ5UGF0aChhLCBrZXksIGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlc1tpbmRleF0pO1xuICAgICAgY29uc3QgdmFsdWVCID0gZ2V0UHJvcGVydHlCeVBhdGgoYiwga2V5LCBkZWZhdWx0VmFsdWVzICYmIGRlZmF1bHRWYWx1ZXNbaW5kZXhdKTtcbiAgICAgIHJldHVybiB2YWx1ZUEgPT09IHZhbHVlQiA/IDAgOiAodmFsdWVBID4gdmFsdWVCID8gMSA6IC0xKTtcbiAgICB9KVxuICAgICAgLy8gU3RvcCBpZiBub3QgZXF1YWxzLCBvdGhlcndpc2UgY29udGludWUgd2l0aCB0aGUgbmV4dCBrZXlcbiAgICAgIC5maW5kKHJlcyA9PiByZXMgIT09IDApIHx8IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0PFQ+KGFycmF5OiBUW10sIGF0dHJpYnV0ZTogc3RyaW5nLCBvcHRzPzogSW50bC5Db2xsYXRvck9wdGlvbnMpOiBUW10ge1xuICBpZiAoaXNFbXB0eUFycmF5KGFycmF5KSkgcmV0dXJuIGFycmF5O1xuICBjb25zdCBjb21wYXJlRm4gPSBvcHRzXG4gICAgPyBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIG9wdHMpLmNvbXBhcmVcbiAgICA6ICh2MSwgdjIpID0+IHYxID09PSB2MiA/IDAgOiB2MSA+IHYyID8gMSA6IC0xO1xuICByZXR1cm4gYXJyYXlcbiAgICAuc2xpY2UoKSAvLyBjb3B5XG4gICAgLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVGbihhW2F0dHJpYnV0ZV0sIGJbYXR0cmlidXRlXSkpO1xufVxuY29uc3QgSU5URUdFUl9SRUdFWFAgPSAvXlstXT9cXGQrJC87XG5leHBvcnQgZnVuY3Rpb24gaXNJbnQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIElOVEVHRVJfUkVHRVhQLnRlc3QodmFsdWUpO1xufVxuY29uc3QgTlVNQkVSX1JFR0VYUCA9IC9eWy1dP1xcZCsoXFwuXFxkKyk/JC87XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIE5VTUJFUl9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5cbmNvbnN0IE5VTUJFUl9SQU5HRV9SRUdFWFAgPSAvXihcXGQrLVxcZCspfChbPjw9XSpcXGQrKSQvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyUmFuZ2UodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNOb3ROaWwodmFsdWUpICYmIE5VTUJFUl9SQU5HRV9SRUdFWFAudGVzdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nfHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBhbnkge1xuICAvLyBQYXRoIGlzIGFuIGFycmF5OiBjb252ZXJ0IHBhdGggdG8gc3RyaW5nXG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKG9iaiwgcGF0aC5qb2luKCcuJyksIGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgaWYgKGlzTmlsKG9iaikpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGlmIChpc05pbE9yQmxhbmsocGF0aCkpIHJldHVybiBvYmo7XG4gIGNvbnN0IGkgPSBwYXRoLmluZGV4T2YoJy4nKTtcbiAgLy8gU2ltcGxlIHByb3BlcnR5IHBhdGhcbiAgaWYgKGkgPT09IC0xKSB7XG4gICAgY29uc3QgcmVzID0gb2JqW3BhdGhdO1xuICAgIHJldHVybiAoaXNOb3ROaWwocmVzKSB8fCBpc05pbChkZWZhdWx0VmFsdWUpKSA/IHJlcyA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuICAvLyBDb21wbGV4IHByb3BlcnR5IHBhdGhcbiAgY29uc3Qga2V5ID0gcGF0aC5zdWJzdHJpbmcoMCwgaSk7XG4gIGlmIChpc05pbChvYmpba2V5XSkpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7IC8vIE9iamVjdCBvciBBcnJheVxuICAgIC8vIFJlY3Vyc2l2ZSBjYWxsXG4gICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKG9ialtrZXldLCBwYXRoLnN1YnN0cmluZyhpICsgMSkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wZXJ0eSBwYXRoOiAnJHtrZXl9JyBpcyBub3QgYW4gdmFsaWQgb2JqZWN0LmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHk8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnk+KG9iajogVCwga2V5OiBLKTogVFtLXSB7XG4gIGlmIChpc05pbChvYmopKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gb2JqW2tleV07IC8vIEluZmVycmVkIHR5cGUgaXMgVFtLXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHlCeVBhdGhBc1N0cmluZyhvYmo6IGFueSwgcGF0aDogc3RyaW5nfHN0cmluZ1tdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzID0gZ2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoKTtcbiAgcmV0dXJuICh0eXBlb2YgcmVzID09PSAnc3RyaW5nJykgPyByZXMgOiAoJycgKyByZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHlCeVBhdGgob2JqOiBhbnksIHBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgdmFsdWU6IGFueSk6IGFueSB7XG4gIC8vIFBhdGggaXMgYW4gYXJyYXk6IGNvbnZlcnQgcGF0aCB0byBzdHJpbmdcbiAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gc2V0UHJvcGVydHlCeVBhdGgob2JqLCBwYXRoLmpvaW4oJy4nKSwgdmFsdWUpO1xuICB9XG4gIGlmIChpc05pbChvYmopKSByZXR1cm47IC8vIFNraXBcbiAgY29uc3QgaSA9IHBhdGguaW5kZXhPZignLicpO1xuICAvLyBTaW1wbGUgcHJvcGVydHkgcGF0aFxuICBpZiAoaSA9PT0gLTEpIHtcbiAgICBvYmpbcGF0aF0gPSB2YWx1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qga2V5ID0gcGF0aC5zdWJzdHJpbmcoMCwgaSk7XG4gIGlmIChpc05pbChvYmpba2V5XSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHNldFByb3BlcnR5QnlQYXRoKG9ialtrZXldLCBwYXRoLnN1YnN0cmluZyhpICsgMSksIHZhbHVlKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBwYXRoOiAnJHtrZXl9JyBpcyBub3QgYW4gdmFsaWQgb2JqZWN0LmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobXMgPD0gMCkgcmV0dXJuO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCk6IG51bWJlciB7XG4gIGlmIChpc05vdE5pbE9yTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkgLyAxMDA7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzT3JOaWwodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSB7XG4gIHJldHVybiAodmFsdWUxID09PSB2YWx1ZTIpIHx8IChpc05pbCh2YWx1ZTEpICYmIGlzTmlsKHZhbHVlMikpO1xufVxuXG4vKipcbiAqIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5XG4gKlxuICogQHJldHVybiB0aGUgcmVtb3ZlZCBlbGVtZW50c1xuICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvbiB3aGljaCBlbGVtZW50cyB3aWxsIGJlIHJlbW92ZWRcbiAqIEBwYXJhbSBwcmVkaWNhdGUgdGhlIHNlbGVjdGlvbiBwcmVkaWNhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbDxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IChwbWZtOiBUKSA9PiBib29sZWFuKTogVFtdIHtcbiAgbGV0IG5iUmVtb3ZlID0gMDtcbiAgcmV0dXJuIGFycmF5LnNsaWNlKCkubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgbmJSZW1vdmUrKzsgLy8gZ2xpdGNoIGNvdW50ZXIgdG8gYXZvaWQgaW5kZXggZ2FwXG4gICAgICByZXR1cm4gYXJyYXkuc3BsaWNlKGluZGV4IC0gbmJSZW1vdmUgKyAxLCAxKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLmZpbHRlcihpc05vdE5pbCk7XG59XG5cbi8qKlxuICogcmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IGZyb20gYW4gYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHRoZSByZW1vdmVkIGVsZW1lbnRcbiAqIEBwYXJhbSBhcnJheSB0aGUgYXJyYXkgb24gd2hpY2ggdGhlIGVsZW1lbnQgd2lsbCBiZSByZW1vdmVkXG4gKiBAcGFyYW0gcHJlZGljYXRlIHRoZSBzZWxlY3Rpb24gcHJlZGljYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmU8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiAocG1mbTogVCkgPT4gYm9vbGVhbik6IFQge1xuICByZXR1cm4gYXJyYXkuc2xpY2UoKS5maW5kKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRCeVByb3BlcnR5PFQsIE0gZXh0ZW5kcyBLZXlWYWx1ZVR5cGU8VD4gPSBLZXlWYWx1ZVR5cGU8VD4+KGFycmF5OiBUW10gfCByZWFkb25seSBUW10sIHByb3BlcnR5TmFtZToga2V5b2YgVCB8IHN0cmluZyk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICBjb25zdCBrZXkgPSAodmFsdWUgYXMgdW5rbm93biBhcyBhbnkpPy5bcHJvcGVydHlOYW1lXTtcbiAgICBpZiAoaXNOb3ROaWwoa2V5KSkge1xuICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pIGFzIE07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5SWQ8VCwgTSBleHRlbmRzIEtleVZhbHVlVHlwZTxUPiA9IEtleVZhbHVlVHlwZTxUPj4oYXJyYXk6IFRbXSB8IHJlYWRvbmx5IFRbXSk6IE0ge1xuICByZXR1cm4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHJlcywgdmFsdWUpID0+IHtcbiAgICBjb25zdCBrZXkgPSB2YWx1ZT8uWydpZCddO1xuICAgIGlmIChpc05vdE5pbChrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9LCA8TT57fSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBvciB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIFR3byBvYmplY3RzIG9yIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKlxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBhc3MgYD09PWAgY29tcGFyaXNvbi5cbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgYWxsIG9mIHRoZWlyIHByb3BlcnRpZXMgYXJlIGVxdWFsIGJ5XG4gKiAgIGNvbXBhcmluZyB0aGVtIHdpdGggYGVxdWFsc2AuXG4gKlxuICogQHBhcmFtIG8xIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIG8yIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudHMgYXJlIGVxdWFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKG8xID09PSBvMikgcmV0dXJuIHRydWU7XG4gIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG4gIGxldCB0MSA9IHR5cGVvZiBvMSwgdDIgPSB0eXBlb2YgbzIsIGxlbmd0aDogbnVtYmVyLCBrZXk6IGFueSwga2V5U2V0OiBhbnk7XG4gIGlmICh0MSA9PSB0MiAmJiB0MSA9PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8xKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKChsZW5ndGggPSBvMS5sZW5ndGgpID09IG8yLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcbiAgICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoa2V5IGluIG8xKSB7XG4gICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG8yKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBCZWFucyB7XG4gIC8qKlxuICAgKiBDb3B5IGEgc291cmNlIG9iamVjdCwgYnkgaW5jbHVkaW5nIG9ubHkgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gZGF0YVR5cGUuXG4gICAqIElNUE9SVEFOVDogZXh0cmEgcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgaW4gdGhlIHRhcmdldENsYXNzIGFyZSBOT1QgY29waWVkLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGNvcHlcbiAgICogQHBhcmFtIGRhdGFUeXBlIHRoZSBjbGFzcyB0byB1c2UgYXMgdGFyZ2V0IGNsYXNzXG4gICAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGNvcHkuIElmIGVtcHR5LCB3aWxsIGNvcHkgb25seSBOT1Qgb3B0aW9uYWwgcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhVHlwZVxuICAgKi9cbiAgc3RhdGljIGNvcHk8VD4oc291cmNlOiBULCBkYXRhVHlwZTogbmV3ICgpID0+IFQsIGtleXM/OiBLZXlzRW51bTxUPik6IFQge1xuICAgIGlmIChpc05pbChzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBkYXRhVHlwZSgpO1xuICAgIE9iamVjdC5rZXlzKGtleXMgfHwgdGFyZ2V0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyBpZiBhbiBvYmplY3QgYWxsIGFsbCBwcm9wZXJ0aWVzIHRvIG5pbFxuICAgKi9cbiAgc3RhdGljIGlzRW1wdHk8VD4oZGF0YTogVCwga2V5cz86IEtleXNFbnVtPFQ+fHN0cmluZ1tdLCBvcHRzPzoge1xuICAgIGJsYW5rU3RyaW5nTGlrZUVtcHR5PzogYm9vbGVhbjtcbiAgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbChkYXRhKSB8fCAoQXJyYXkuaXNBcnJheShrZXlzKSA/IGtleXMgOiBPYmplY3Qua2V5cyhrZXlzIHx8IGRhdGEpKVxuICAgICAgLy8gRmluZCBpbmRleCBvZiB0aGUgZmlyc3QgTk9UIG5pbCB2YWx1ZVxuICAgICAgLmZpbmRJbmRleChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiAhQmVhbnMuaXNFbXB0eSh2YWx1ZSwgbnVsbCwgb3B0cyk7IC8vIExvb3BcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5ibGFua1N0cmluZ0xpa2VFbXB0eSA9PT0gdHJ1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gaXNOb3ROaWxPckJsYW5rKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIH0pID09PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlJZDxUPihhcnJheTogVFtdKToge1trZXk6IHN0cmluZ106IFR9IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0QnlQcm9wZXJ0eShhcnJheSwgJ2lkJyBhcyBrZXlvZiBUKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlQcm9wZXJ0eTxUPihhcnJheTogVFtdLCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiB7W2tleTogc3RyaW5nXTogVH0ge1xuICAgIHJldHVybiAoYXJyYXkgfHwgW10pLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICByZXNbJycrcHJvcGVydHlOYW1lXSA9IGl0ZW07XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudFdpdGhDbGFzcyhlbGVtOiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghY2xhc3NOYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtPy5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxLQUFLLENBQUksR0FBeUI7SUFDaEQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDM0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUksR0FBeUI7SUFDdkQsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdGLENBQUM7QUFDRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEdBQXlCO0lBQ25ELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFDRCxNQUFNLFVBQVUsZUFBZSxDQUFJLEdBQXlCO0lBQzFELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBSSxHQUF5QjtJQUN4RCxPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFJLEdBQXlCO0lBQ3JELE9BQU8sR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtB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LEtBQUssUUFBUTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTztZQUN6RixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0csT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFVO1FBQzlCLE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQWUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7O0FBRU0sdUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFHL0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQWlCLEVBQUUsU0FBaUI7SUFDdEUsSUFBSSxDQUFDLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNqQyxJQUFJLGNBQWMsR0FBRyxJQUFJLEVBQUUsYUFBYSxDQUFDO0lBQ3pDLE9BQU8sY0FBYyxFQUFFO1FBQ3JCLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFDeEUsY0FBYyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7S0FDL0M7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtLZXlzRW51bSwgS2V5VmFsdWVUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05pbE9yQmxhbms8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyAmJiBvYmoudHJpbSgpID09PSAnJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROaWw8VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsT3JCbGFuazxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnIHx8IG9iai50cmltKCkgIT09ICcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE5pbE9yTmFOPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCAmJiAodHlwZW9mIG9iaiAhPT0gJ251bWJlcicgfHwgIWlzTmFOKG9iaikpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTmlsT3JOYU48VD4ob2JqOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyAmJiBpc05hTihvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc05vdEVtcHR5QXJyYXk8VD4ob2JqOiBUW10gfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgb2JqLmxlbmd0aCA+IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RBcnJheVZhbHVlPFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KG9iaikgPyBvYmpbMF0gOiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eUFycmF5PFQ+KG9iajogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8ICFvYmoubGVuZ3RoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsQm9vbGVhbihvYmo6IGFueSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmogaXMgYm9vbGVhbiB7XG4gIHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nIHx8IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TmlsU3RyaW5nKG9iajogYW55IHwgbnVsbCB8IHVuZGVmaW5lZCk6IG9iaiBpcyBzdHJpbmcge1xuICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtTdHJpbmcob2JqOiBhbnkgfCBudWxsIHwgdW5kZWZpbmVkKTogb2JqIGlzIHN0cmluZyB7XG4gIHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpICYmIG9iai50cmltKCkubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vdE5pbE9yRGVmYXVsdDxUPihvYmo6IFQgfCBudWxsIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IFQpOiBUIHtcbiAgcmV0dXJuIChvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpID8gb2JqIDogZGVmYXVsdFZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5U2l6ZTxUPihvYmo6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICByZXR1cm4gaXNOb3RFbXB0eUFycmF5KG9iaikgJiYgb2JqLmxlbmd0aCB8fCAwO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5R3JvdXBCeTxcbiAgVCA9IGFueSxcbiAgSyBleHRlbmRzIGtleW9mIFQgPSBhbnksXG4gIE0gZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IFRbXTtcbn0gPSB7IFtrZXk6IHN0cmluZ106IFRbXSB9PihvYmo6IFRbXSwga2V5OiBrZXlvZiBUKTogTSB7XG4gIGlmIChpc05pbChvYmopKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIG9iai5yZWR1Y2UoKHJ2OiBhbnksIHgpID0+IHtcbiAgICAocnZbeFtrZXldXSA9IHJ2W3hba2V5XV0gfHwgW10pLnB1c2goeCk7XG4gICAgcmV0dXJuIHJ2O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZWQgdmFsdWUsIGluIGFycmF5LiBXaWxsIGNvbXB1dGUgYSB1bmlxdWUga2V5IChmcm9tIGdpdmVuIHByb3BlcnRpZXMsIG9yIGdpdmVuIGZ1bmN0aW9uKS5cbiAqIElmIHByb3BlcnRpZXNPcktleUZuIGlzIG5pbCBvciB1bmRlZmluZWQsIHdpbGwgdXNlIGFsbCBvYmplY3QgcHJvcGVydGllc1xuICogQHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIHByb3BlcnRpZXNPcktleUZuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheURpc3RpbmN0PFQgPSBhbnk+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+KHZhbHVlczogVFtdLCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiBLZXlWYWx1ZVR5cGU8VFtdPiB7XG4gIHJldHVybiAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGl0ZW0gJiYgaXRlbVtwcm9wZXJ0eU5hbWVdO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzW2tleV0gPSByZXNba2V5XSB8fCBbXTtcbiAgICAgIHJlc1trZXldLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIDxLZXlWYWx1ZVR5cGU8VFtdPj57fSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBvciB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIFR3byBvYmplY3RzIG9yIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKlxuICogKiBCb3RoIG9iamVjdHMgb3IgdmFsdWVzIHBhc3MgYD09PWAgY29tcGFyaXNvbi5cbiAqICogQm90aCBvYmplY3RzIG9yIHZhbHVlcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgYWxsIG9mIHRoZWlyIHByb3BlcnRpZXMgYXJlIGVxdWFsIGJ5XG4gKiAgIGNvbXBhcmluZyB0aGVtIHdpdGggYGVxdWFsc2AuXG4gKlxuICogQHBhcmFtIG8xIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIG8yIE9iamVjdCBvciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMgdHJ1ZSBpZiBhcmd1bWVudHMgYXJlIGVxdWFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKG8xID09PSBvMikgcmV0dXJuIHRydWU7XG4gIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikgcmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG4gIGxldCB0MSA9IHR5cGVvZiBvMSwgdDIgPSB0eXBlb2YgbzIsIGxlbmd0aDogbnVtYmVyLCBrZXk6IGFueSwga2V5U2V0OiBhbnk7XG4gIGlmICh0MSA9PSB0MiAmJiB0MSA9PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8xKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKChsZW5ndGggPSBvMS5sZW5ndGgpID09IG8yLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcbiAgICAgICAgICBpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAga2V5U2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoa2V5IGluIG8xKSB7XG4gICAgICAgIGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGtleVNldFtrZXldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG8yKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBrZXlTZXQpICYmIHR5cGVvZiBvMltrZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBCZWFucyB7XG4gIC8qKlxuICAgKiBDb3B5IGEgc291cmNlIG9iamVjdCwgYnkgaW5jbHVkaW5nIG9ubHkgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gZGF0YVR5cGUuXG4gICAqIElNUE9SVEFOVDogZXh0cmEgcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgaW4gdGhlIHRhcmdldENsYXNzIGFyZSBOT1QgY29waWVkLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGNvcHlcbiAgICogQHBhcmFtIGRhdGFUeXBlIHRoZSBjbGFzcyB0byB1c2UgYXMgdGFyZ2V0IGNsYXNzXG4gICAqIEBwYXJhbSBrZXlzIFRoZSBrZXlzIHRvIGNvcHkuIElmIGVtcHR5LCB3aWxsIGNvcHkgb25seSBOT1Qgb3B0aW9uYWwgcHJvcGVydGllcyBmcm9tIHRoZSBkYXRhVHlwZVxuICAgKi9cbiAgc3RhdGljIGNvcHk8VD4oc291cmNlOiBULCBkYXRhVHlwZTogbmV3ICgpID0+IFQsIGtleXM/OiBLZXlzRW51bTxUPik6IFQge1xuICAgIGlmIChpc05pbChzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBkYXRhVHlwZSgpO1xuICAgIE9iamVjdC5rZXlzKGtleXMgfHwgdGFyZ2V0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyBpZiBhbiBvYmplY3QgYWxsIGFsbCBwcm9wZXJ0aWVzIHRvIG5pbFxuICAgKi9cbiAgc3RhdGljIGlzRW1wdHk8VD4oZGF0YTogVCwga2V5cz86IEtleXNFbnVtPFQ+fHN0cmluZ1tdLCBvcHRzPzoge1xuICAgIGJsYW5rU3RyaW5nTGlrZUVtcHR5PzogYm9vbGVhbjtcbiAgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbChkYXRhKSB8fCAoQXJyYXkuaXNBcnJheShrZXlzKSA/IGtleXMgOiBPYmplY3Qua2V5cyhrZXlzIHx8IGRhdGEpKVxuICAgICAgLy8gRmluZCBpbmRleCBvZiB0aGUgZmlyc3QgTk9UIG5pbCB2YWx1ZVxuICAgICAgLmZpbmRJbmRleChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiAhQmVhbnMuaXNFbXB0eSh2YWx1ZSwgbnVsbCwgb3B0cyk7IC8vIExvb3BcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5ibGFua1N0cmluZ0xpa2VFbXB0eSA9PT0gdHJ1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gaXNOb3ROaWxPckJsYW5rKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIH0pID09PSAtMTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlJZDxUPihhcnJheTogVFtdKTogS2V5VmFsdWVUeXBlPFRbXT4ge1xuICAgIHJldHVybiBjb2xsZWN0QnlQcm9wZXJ0eShhcnJheSwgJ2lkJyBhcyBrZXlvZiBUKTtcbiAgfVxuXG4gIHN0YXRpYyBjb2xsZWN0QnlQcm9wZXJ0eSA9IGNvbGxlY3RCeVByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudFdpdGhDbGFzcyhlbGVtOiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gIGlmICghY2xhc3NOYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtPy5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHJldHVybiBjdXJyZW50RWxlbWVudDtcbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -1,14 +1,46 @@
1
1
  import { Geolocation } from '@capacitor/geolocation';
2
+ import { isNil } from '../functions';
2
3
  export class IPosition {
3
4
  }
4
5
  export class GeolocationUtils {
6
+ static isNotNilAndValid(position, opts) {
7
+ if (!position || isNil(position.latitude) || isNil(position.longitude))
8
+ return false;
9
+ // Invalid lat/lon
10
+ if (position.latitude < -90 || position.latitude > 90
11
+ || position.longitude < -180 || position.longitude > 180) {
12
+ // /!\ Log in console, because should never occur
13
+ if (opts?.debug)
14
+ console.warn('Invalid lat/long position: ', position);
15
+ return false;
16
+ }
17
+ // OK: valid
18
+ return true;
19
+ }
20
+ static isNilOrInvalid(position, opts) {
21
+ return !GeolocationUtils.isNotNilAndValid(position, opts);
22
+ }
23
+ static computeDistanceInMiles(position1, position2) {
24
+ // Invalid position(s): skip
25
+ if (GeolocationUtils.isNilOrInvalid(position1, { debug: true })
26
+ || GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
27
+ return;
28
+ const latitude1Rad = Math.PI * position1.latitude / 180;
29
+ const longitude1Rad = Math.PI * position1.longitude / 180;
30
+ const latitude2Rad = Math.PI * position2.latitude / 180;
31
+ const longitude2Rad = Math.PI * position2.longitude / 180;
32
+ let distance = 2 * 6371 * Math.asin(Math.sqrt(Math.pow(Math.sin((latitude1Rad - latitude2Rad) / 2), 2)
33
+ + Math.cos(latitude1Rad) * Math.cos(latitude2Rad) * Math.pow(Math.sin((longitude2Rad - longitude1Rad) / 2), 2)));
34
+ distance = Math.round((((distance / 1.852) + Number.EPSILON) * 100)) / 100;
35
+ return distance;
36
+ }
5
37
  /**
6
38
  * Get the position by geo loc sensor
7
39
  */
8
40
  static async getCurrentPosition(platform, options) {
9
41
  // Use Capacitor plugin
10
42
  try {
11
- console.info(`[position-utils] Get current geo position, using Capacitor...(timeout: ${options?.timeout})`);
43
+ console.info(`[geolocation-utils] Get current geo location, using Capacitor...(timeout: ${options?.timeout})`);
12
44
  const pos = await Geolocation.getCurrentPosition(options);
13
45
  return {
14
46
  latitude: pos.coords.latitude,
@@ -16,13 +48,20 @@ export class GeolocationUtils {
16
48
  };
17
49
  }
18
50
  catch (err) {
19
- console.error('[position-utils] Cannot get current geo position, using Capacitor:', err);
20
- // Stop if capacitor (cannot use browser geolocation, because of browser security limitation)
21
- if (platform.is('capacitor'))
51
+ // If capacitor : throw error (cannot fallback to browser geolocation, because of browser security limitation)
52
+ if (platform.is('capacitor')) {
53
+ console.error(`[geolocation-utils] Cannot get current geo location, using Capacitor: ${err?.message || ''}`);
54
+ // Detect a permission error, to add code
55
+ // FIXME - Capacitor use hardcoded strings! (see https://github.com/ionic-team/capacitor-plugins)
56
+ const message = (err?.message || '').toLowerCase();
57
+ if (message.includes('location permission was denied') || message.includes('location disabled')) {
58
+ throw { ...err, code: GeolocationPositionError.PERMISSION_DENIED };
59
+ }
22
60
  throw err;
61
+ }
23
62
  }
24
63
  // Or fallback to navigator
25
- console.info('[position-utils] Get current geo position, using browser...');
64
+ console.info('[geolocation-utils] Get current geo location, using browser...');
26
65
  return new Promise((resolve, reject) => {
27
66
  navigator.geolocation.getCurrentPosition((res) => {
28
67
  resolve({
@@ -32,10 +71,10 @@ export class GeolocationUtils {
32
71
  }, (err) => {
33
72
  let message = err?.message || err;
34
73
  message = typeof message === 'string' ? message : JSON.stringify(message);
35
- console.error('[position-utils] Cannot get current geo position, using browser:' + message);
74
+ console.error('[geolocation-utils] Cannot get current geo location, using browser:' + message);
36
75
  reject(err);
37
76
  }, options);
38
77
  });
39
78
  }
40
79
  }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsTUFBTSxPQUFPLFNBQVM7Q0FHckI7QUFFRCxNQUFNLE9BQWdCLGdCQUFnQjtJQUVwQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBeUIsRUFBRSxPQUF5QjtRQUNsRix1QkFBdUI7UUFDdkIsSUFBSTtZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEVBQTBFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQzVHLE1BQU0sR0FBRyxHQUFhLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BFLE9BQWtCO2dCQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRO2dCQUM3QixTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2FBQ2hDLENBQUM7U0FDSDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6Riw2RkFBNkY7WUFDN0YsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztnQkFBRSxNQUFNLEdBQUcsQ0FBQztTQUN6QztRQUVELDJCQUEyQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLDZEQUE2RCxDQUFDLENBQUE7UUFDM0UsT0FBTyxJQUFJLE9BQU8sQ0FBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoRCxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLE9BQU8sQ0FBWTtvQkFDakIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUztpQkFDaEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQ2xDLE9BQU8sR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxrRUFBa0UsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDNUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxFQUNELE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9sb2NhdGlvbiwgUG9zaXRpb24gfSBmcm9tICdAY2FwYWNpdG9yL2dlb2xvY2F0aW9uJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgSVBvc2l0aW9uIHtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW9sb2NhdGlvblV0aWxzIHtcblxuICAvKipcbiAgICogR2V0IHRoZSBwb3NpdGlvbiBieSBnZW8gbG9jIHNlbnNvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldEN1cnJlbnRQb3NpdGlvbihwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLCBvcHRpb25zPzogUG9zaXRpb25PcHRpb25zKTogUHJvbWlzZTxJUG9zaXRpb24+IHtcbiAgICAvLyBVc2UgQ2FwYWNpdG9yIHBsdWdpblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtwb3NpdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIHBvc2l0aW9uLCB1c2luZyBDYXBhY2l0b3IuLi4odGltZW91dDogJHtvcHRpb25zPy50aW1lb3V0fSlgKTtcbiAgICAgIGNvbnN0IHBvczogUG9zaXRpb24gPSBhd2FpdCBHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ob3B0aW9ucyk7XG4gICAgICByZXR1cm4gPElQb3NpdGlvbj57XG4gICAgICAgIGxhdGl0dWRlOiBwb3MuY29vcmRzLmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGU6IHBvcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW3Bvc2l0aW9uLXV0aWxzXSBDYW5ub3QgZ2V0IGN1cnJlbnQgZ2VvIHBvc2l0aW9uLCB1c2luZyBDYXBhY2l0b3I6JywgZXJyKTtcbiAgICAgIC8vIFN0b3AgaWYgY2FwYWNpdG9yIChjYW5ub3QgdXNlIGJyb3dzZXIgZ2VvbG9jYXRpb24sIGJlY2F1c2Ugb2YgYnJvd3NlciBzZWN1cml0eSBsaW1pdGF0aW9uKVxuICAgICAgaWYgKHBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIE9yIGZhbGxiYWNrIHRvIG5hdmlnYXRvclxuICAgIGNvbnNvbGUuaW5mbygnW3Bvc2l0aW9uLXV0aWxzXSBHZXQgY3VycmVudCBnZW8gcG9zaXRpb24sIHVzaW5nIGJyb3dzZXIuLi4nKVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJUG9zaXRpb24+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHJlcykgPT4ge1xuICAgICAgICAgIHJlc29sdmUoPElQb3NpdGlvbj57XG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzLmNvb3Jkcy5sYXRpdHVkZSxcbiAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzLmNvb3Jkcy5sb25naXR1ZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGxldCBtZXNzYWdlID0gZXJyPy5tZXNzYWdlIHx8IGVycjtcbiAgICAgICAgICBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gbWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1twb3NpdGlvbi11dGlsc10gQ2Fubm90IGdldCBjdXJyZW50IGdlbyBwb3NpdGlvbiwgdXNpbmcgYnJvd3NlcjonICsgbWVzc2FnZSk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVuQyxNQUFNLE9BQU8sU0FBUztDQUdyQjtBQUVELE1BQU0sT0FBZ0IsZ0JBQWdCO0lBRXBDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFtQixFQUFFLElBQXdCO1FBRW5FLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXJGLGtCQUFrQjtRQUNsQixJQUFJLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFO2VBQ2hELFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFFMUQsaURBQWlEO1lBQ2pELElBQUksSUFBSSxFQUFFLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4RSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBbUIsRUFBRSxJQUF3QjtRQUNqRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLENBQUMsc0JB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LENBQUMsSUFBSSxDQUFDLGdFQUFnRSxDQUFDLENBQUE7UUFDOUUsT0FBTyxJQUFJLE9BQU8sQ0FBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoRCxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLE9BQU8sQ0FBWTtvQkFDakIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUztpQkFDaEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQ2xDLE9BQU8sR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxRUFBcUUsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDL0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxFQUNELE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9sb2NhdGlvbiwgUG9zaXRpb24gfSBmcm9tICdAY2FwYWNpdG9yL2dlb2xvY2F0aW9uJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtpc05pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGNsYXNzIElQb3NpdGlvbiB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VvbG9jYXRpb25VdGlscyB7XG5cbiAgc3RhdGljIGlzTm90TmlsQW5kVmFsaWQocG9zaXRpb246IElQb3NpdGlvbiwgb3B0cz86IHtkZWJ1Zz86IGJvb2xlYW59KSB7XG5cbiAgICBpZiAoIXBvc2l0aW9uIHx8IGlzTmlsKHBvc2l0aW9uLmxhdGl0dWRlKSB8fCBpc05pbChwb3NpdGlvbi5sb25naXR1ZGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBJbnZhbGlkIGxhdC9sb25cbiAgICBpZiAocG9zaXRpb24ubGF0aXR1ZGUgPCAtOTAgfHwgcG9zaXRpb24ubGF0aXR1ZGUgPiA5MFxuICAgICAgfHwgcG9zaXRpb24ubG9uZ2l0dWRlIDwgLTE4MCB8fCBwb3NpdGlvbi5sb25naXR1ZGUgPiAxODApIHtcblxuICAgICAgLy8gLyFcXCBMb2cgaW4gY29uc29sZSwgYmVjYXVzZSBzaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgIGlmIChvcHRzPy5kZWJ1ZykgY29uc29sZS53YXJuKCdJbnZhbGlkIGxhdC9sb25nIHBvc2l0aW9uOiAgJywgcG9zaXRpb24pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9LOiB2YWxpZFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGlzTmlsT3JJbnZhbGlkKHBvc2l0aW9uOiBJUG9zaXRpb24sIG9wdHM/OiB7ZGVidWc/OiBib29sZWFufSkge1xuICAgIHJldHVybiAhR2VvbG9jYXRpb25VdGlscy5pc05vdE5pbEFuZFZhbGlkKHBvc2l0aW9uLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wdXRlRGlzdGFuY2VJbk1pbGVzKHBvc2l0aW9uMTogSVBvc2l0aW9uLCBwb3NpdGlvbjI6IElQb3NpdGlvbik6IG51bWJlciB7XG4gICAgLy8gSW52YWxpZCBwb3NpdGlvbihzKTogc2tpcFxuICAgIGlmIChHZW9sb2NhdGlvblV0aWxzLmlzTmlsT3JJbnZhbGlkKHBvc2l0aW9uMSwge2RlYnVnOiB0cnVlfSlcbiAgICAgIHx8IEdlb2xvY2F0aW9uVXRpbHMuaXNOaWxPckludmFsaWQocG9zaXRpb24yLCB7ZGVidWc6IHRydWV9KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbGF0aXR1ZGUxUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMS5sYXRpdHVkZSAvIDE4MDtcbiAgICBjb25zdCBsb25naXR1ZGUxUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMS5sb25naXR1ZGUgLyAxODA7XG4gICAgY29uc3QgbGF0aXR1ZGUyUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMi5sYXRpdHVkZSAvIDE4MDtcbiAgICBjb25zdCBsb25naXR1ZGUyUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMi5sb25naXR1ZGUgLyAxODA7XG5cbiAgICBsZXQgZGlzdGFuY2UgPSAyICogNjM3MSAqIE1hdGguYXNpbihcbiAgICAgIE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3coTWF0aC5zaW4oKGxhdGl0dWRlMVJhZCAtIGxhdGl0dWRlMlJhZCkgLyAyKSwgMilcbiAgICAgICAgKyBNYXRoLmNvcyhsYXRpdHVkZTFSYWQpICogTWF0aC5jb3MobGF0aXR1ZGUyUmFkKSAqIE1hdGgucG93KE1hdGguc2luKChsb25naXR1ZGUyUmFkIC0gbG9uZ2l0dWRlMVJhZCkgLyAyKSwgMilcbiAgICAgICkpO1xuICAgIGRpc3RhbmNlID0gTWF0aC5yb3VuZCgoKChkaXN0YW5jZSAvIDEuODUyKSArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkpIC8gMTAwO1xuICAgIHJldHVybiBkaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvc2l0aW9uIGJ5IGdlbyBsb2Mgc2Vuc29yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0Q3VycmVudFBvc2l0aW9uKHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2V8UGxhdGZvcm0sIG9wdGlvbnM/OiBQb3NpdGlvbk9wdGlvbnMpOiBQcm9taXNlPElQb3NpdGlvbj4ge1xuXG4gICAgLy8gVXNlIENhcGFjaXRvciBwbHVnaW5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKGBbZ2VvbG9jYXRpb24tdXRpbHNdIEdldCBjdXJyZW50IGdlbyBsb2NhdGlvbiwgdXNpbmcgQ2FwYWNpdG9yLi4uKHRpbWVvdXQ6ICR7b3B0aW9ucz8udGltZW91dH0pYCk7XG4gICAgICBjb25zdCBwb3M6IFBvc2l0aW9uID0gYXdhaXQgR2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIDxJUG9zaXRpb24+e1xuICAgICAgICBsYXRpdHVkZTogcG9zLmNvb3Jkcy5sYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlOiBwb3MuY29vcmRzLmxvbmdpdHVkZVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGNhcGFjaXRvciA6IHRocm93IGVycm9yIChjYW5ub3QgZmFsbGJhY2sgdG8gYnJvd3NlciBnZW9sb2NhdGlvbiwgYmVjYXVzZSBvZiBicm93c2VyIHNlY3VyaXR5IGxpbWl0YXRpb24pXG4gICAgICBpZiAocGxhdGZvcm0uaXMoJ2NhcGFjaXRvcicpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtnZW9sb2NhdGlvbi11dGlsc10gQ2Fubm90IGdldCBjdXJyZW50IGdlbyBsb2NhdGlvbiwgdXNpbmcgQ2FwYWNpdG9yOiAke2Vycj8ubWVzc2FnZXx8Jyd9YCk7XG5cbiAgICAgICAgLy8gRGV0ZWN0IGEgcGVybWlzc2lvbiBlcnJvciwgdG8gYWRkIGNvZGVcbiAgICAgICAgLy8gRklYTUUgLSBDYXBhY2l0b3IgdXNlIGhhcmRjb2RlZCBzdHJpbmdzISAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pb25pYy10ZWFtL2NhcGFjaXRvci1wbHVnaW5zKVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gKChlcnI/Lm1lc3NhZ2UgfHwgJycpIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ2xvY2F0aW9uIHBlcm1pc3Npb24gd2FzIGRlbmllZCcpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ2xvY2F0aW9uIGRpc2FibGVkJykpIHtcbiAgICAgICAgICB0aHJvdyB7Li4uZXJyLCBjb2RlOiBHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3IuUEVSTUlTU0lPTl9ERU5JRUR9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBmYWxsYmFjayB0byBuYXZpZ2F0b3JcbiAgICBjb25zb2xlLmluZm8oJ1tnZW9sb2NhdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBicm93c2VyLi4uJylcbiAgICByZXR1cm4gbmV3IFByb21pc2U8SVBvc2l0aW9uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChyZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKDxJUG9zaXRpb24+e1xuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlcy5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgbWVzc2FnZSA9IGVycj8ubWVzc2FnZSB8fCBlcnI7XG4gICAgICAgICAgbWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZ2VvbG9jYXRpb24tdXRpbHNdIENhbm5vdCBnZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIGJyb3dzZXI6JyArIG1lc3NhZ2UpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
@@ -40,10 +40,10 @@ export class AppGestureConfig extends HammerGestureConfig {
40
40
  return mc;
41
41
  }
42
42
  }
43
- AppGestureConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppGestureConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
44
- AppGestureConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppGestureConfig, providedIn: 'root' });
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AppGestureConfig, decorators: [{
43
+ AppGestureConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppGestureConfig, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
44
+ AppGestureConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppGestureConfig, providedIn: 'root' });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AppGestureConfig, decorators: [{
46
46
  type: Injectable,
47
47
  args: [{ providedIn: 'root' }]
48
48
  }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZXN0dXJlL2dlc3R1cmUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRTlELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMsaURBQWlEO0FBQ3ZGOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBRHpEOztRQUdFLHFDQUFxQztRQUNyQyxjQUFTLEdBQVE7WUFDZixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLGlCQUFpQjthQUN4QjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsS0FBSzthQUNkO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSxLQUFLO2FBQ2Q7WUFDRCxtREFBbUQ7WUFDbkQsS0FBSyxFQUFFO2dCQUNMLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxHQUFHLENBQUUscUVBQXFFO2FBQ3JGO1NBQ0YsQ0FBQztLQWVIO0lBYkMsV0FBVyxDQUFDLE9BQW9CO1FBRTlCLFFBQVE7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RSxNQUFNLEVBQUUsR0FBRyxJQUFVLE1BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3RDLElBQUksU0FBUztnQkFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzhHQWhDVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQURKLE1BQU07NEZBQ2xCLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIYW1tZXJHZXN0dXJlQ29uZmlnfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuZXhwb3J0IGNvbnN0IEhBTU1FUl9UQVBfVElNRSA9IDI1MDtcbmV4cG9ydCBjb25zdCBIQU1NRVJfUFJFU1NfVElNRSA9IDQwMDsgLy8gSW5jcmVhc2UgbmVlZCBmb3IgZG91YmxlIHRhcCAoZGVmYXVsdDogMjUxIG1zKVxuLyoqXG4gKiBAaGlkZGVuXG4gKiBUaGlzIGNsYXNzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBBbmd1bGFyIGdlc3R1cmUgY29uZmlnLlxuICpcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQXBwR2VzdHVyZUNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuXG4gIC8vIE92ZXJyaWRlIEhhbW1lckpTIGRlZmF1bHQgc2V0dGluZ3NcbiAgb3ZlcnJpZGVzID0gPGFueT57XG4gICAgcHJlc3M6IHtcbiAgICAgIHRpbWU6IEhBTU1FUl9QUkVTU19USU1FXG4gICAgfSxcbiAgICBwaW5jaDoge1xuICAgICAgZW5hYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgcm90YXRlOiB7XG4gICAgICBlbmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICAvLyBzZWUgaHR0cHM6Ly9oYW1tZXJqcy5naXRodWIuaW8vcmVjb2duaXplci1zd2lwZS9cbiAgICBzd2lwZToge1xuICAgICAgdGhyZXNob2xkOiAzMCwgIC8vIE1pbmltYWwgZGlzdGFuY2UgcmVxdWlyZWQgYmVmb3JlIHJlY29nbml6aW5nLlxuICAgICAgdmVsb2NpdHk6IDAuNCAgLy9NaW5pbWFsIHZlbG9jaXR5IHJlcXVpcmVkIGJlZm9yZSByZWNvZ25pemluZywgdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gICAgfVxuICB9O1xuXG4gIGJ1aWxkSGFtbWVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cbiAgICAvLyBERUJVR1xuICAgIGNvbnNvbGUuZGVidWcoJ1tnZXN0dXJlXSBBcHBseWluZyBIYW1tZXJKUyBjb25maWcgdG8gJywgZWxlbWVudC50YWdOYW1lKTtcblxuICAgIGNvbnN0IG1jID0gbmV3ICg8YW55PndpbmRvdykuSGFtbWVyKGVsZW1lbnQpO1xuXG4gICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gdGhpcy5vdmVycmlkZXMpIHtcbiAgICAgIGlmIChldmVudE5hbWUpIG1jLmdldChldmVudE5hbWUpLnNldCh0aGlzLm92ZXJyaWRlc1tldmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWM7XG4gIH1cbn1cbiJdfQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZXN0dXJlL2dlc3R1cmUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBRTlELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMsaURBQWlEO0FBQ3ZGOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBRHpEOztRQUdFLHFDQUFxQztRQUNyQyxjQUFTLEdBQVE7WUFDZixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLGlCQUFpQjthQUN4QjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsS0FBSzthQUNkO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSxLQUFLO2FBQ2Q7WUFDRCxtREFBbUQ7WUFDbkQsS0FBSyxFQUFFO2dCQUNMLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxHQUFHLENBQUUscUVBQXFFO2FBQ3JGO1NBQ0YsQ0FBQztLQWVIO0lBYkMsV0FBVyxDQUFDLE9BQW9CO1FBRTlCLFFBQVE7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RSxNQUFNLEVBQUUsR0FBRyxJQUFVLE1BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3RDLElBQUksU0FBUztnQkFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7OzZHQWhDVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQURKLE1BQU07MkZBQ2xCLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIYW1tZXJHZXN0dXJlQ29uZmlnfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuZXhwb3J0IGNvbnN0IEhBTU1FUl9UQVBfVElNRSA9IDI1MDtcbmV4cG9ydCBjb25zdCBIQU1NRVJfUFJFU1NfVElNRSA9IDQwMDsgLy8gSW5jcmVhc2UgbmVlZCBmb3IgZG91YmxlIHRhcCAoZGVmYXVsdDogMjUxIG1zKVxuLyoqXG4gKiBAaGlkZGVuXG4gKiBUaGlzIGNsYXNzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBBbmd1bGFyIGdlc3R1cmUgY29uZmlnLlxuICpcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQXBwR2VzdHVyZUNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuXG4gIC8vIE92ZXJyaWRlIEhhbW1lckpTIGRlZmF1bHQgc2V0dGluZ3NcbiAgb3ZlcnJpZGVzID0gPGFueT57XG4gICAgcHJlc3M6IHtcbiAgICAgIHRpbWU6IEhBTU1FUl9QUkVTU19USU1FXG4gICAgfSxcbiAgICBwaW5jaDoge1xuICAgICAgZW5hYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgcm90YXRlOiB7XG4gICAgICBlbmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICAvLyBzZWUgaHR0cHM6Ly9oYW1tZXJqcy5naXRodWIuaW8vcmVjb2duaXplci1zd2lwZS9cbiAgICBzd2lwZToge1xuICAgICAgdGhyZXNob2xkOiAzMCwgIC8vIE1pbmltYWwgZGlzdGFuY2UgcmVxdWlyZWQgYmVmb3JlIHJlY29nbml6aW5nLlxuICAgICAgdmVsb2NpdHk6IDAuNCAgLy9NaW5pbWFsIHZlbG9jaXR5IHJlcXVpcmVkIGJlZm9yZSByZWNvZ25pemluZywgdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gICAgfVxuICB9O1xuXG4gIGJ1aWxkSGFtbWVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG5cbiAgICAvLyBERUJVR1xuICAgIGNvbnNvbGUuZGVidWcoJ1tnZXN0dXJlXSBBcHBseWluZyBIYW1tZXJKUyBjb25maWcgdG8gJywgZWxlbWVudC50YWdOYW1lKTtcblxuICAgIGNvbnN0IG1jID0gbmV3ICg8YW55PndpbmRvdykuSGFtbWVyKGVsZW1lbnQpO1xuXG4gICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gdGhpcy5vdmVycmlkZXMpIHtcbiAgICAgIGlmIChldmVudE5hbWUpIG1jLmdldChldmVudE5hbWUpLnNldCh0aGlzLm92ZXJyaWRlc1tldmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWM7XG4gIH1cbn1cbiJdfQ==