@sumaris-net/ngx-components 18.0.10 → 18.1.0

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 (263) hide show
  1. package/doc/changelog.md +4 -0
  2. package/esm2022/src/app/admin/admin-routing.module.mjs +5 -5
  3. package/esm2022/src/app/admin/admin.module.mjs +5 -5
  4. package/esm2022/src/app/admin/services/person.service.mjs +4 -4
  5. package/esm2022/src/app/admin/services/validator/person.validator.mjs +4 -4
  6. package/esm2022/src/app/admin/users/users.mjs +4 -4
  7. package/esm2022/src/app/admin/users/users.module.mjs +5 -5
  8. package/esm2022/src/app/core/about/about.modal.mjs +4 -4
  9. package/esm2022/src/app/core/about/about.module.mjs +5 -5
  10. package/esm2022/src/app/core/account/account.module.mjs +5 -5
  11. package/esm2022/src/app/core/account/account.page.mjs +4 -4
  12. package/esm2022/src/app/core/account/new-token.form.mjs +4 -4
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +4 -4
  14. package/esm2022/src/app/core/account/password/change-password.form.mjs +4 -4
  15. package/esm2022/src/app/core/account/password/change-password.module.mjs +5 -5
  16. package/esm2022/src/app/core/account/password/change-password.page.mjs +4 -4
  17. package/esm2022/src/app/core/account/token.table.mjs +4 -4
  18. package/esm2022/src/app/core/auth/auth.form.mjs +4 -4
  19. package/esm2022/src/app/core/auth/auth.modal.mjs +4 -4
  20. package/esm2022/src/app/core/auth/auth.module.mjs +5 -5
  21. package/esm2022/src/app/core/auth/reset-password.modal.mjs +4 -4
  22. package/esm2022/src/app/core/core.module.mjs +5 -5
  23. package/esm2022/src/app/core/core.testing.module.mjs +5 -5
  24. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +5 -5
  25. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +4 -4
  26. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +4 -4
  27. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +5 -5
  28. package/esm2022/src/app/core/form/entity/editor.class.mjs +4 -4
  29. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -4
  30. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +4 -4
  31. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +4 -4
  32. package/esm2022/src/app/core/form/entity/entity.module.mjs +5 -5
  33. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +4 -4
  34. package/esm2022/src/app/core/form/form-container.class.mjs +4 -4
  35. package/esm2022/src/app/core/form/form.class.mjs +4 -4
  36. package/esm2022/src/app/core/form/form.module.mjs +5 -5
  37. package/esm2022/src/app/core/form/list/list.form.mjs +4 -4
  38. package/esm2022/src/app/core/form/list/list.module.mjs +5 -5
  39. package/esm2022/src/app/core/form/properties/properties.form.mjs +4 -4
  40. package/esm2022/src/app/core/form/properties/properties.module.mjs +5 -5
  41. package/esm2022/src/app/core/form/properties/properties.table.mjs +7 -7
  42. package/esm2022/src/app/core/form/properties/property.validator.mjs +4 -4
  43. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +4 -4
  44. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +5 -5
  45. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +4 -4
  46. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +5 -5
  47. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +4 -4
  48. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +5 -5
  49. package/esm2022/src/app/core/form/username/username.form.mjs +4 -4
  50. package/esm2022/src/app/core/form/username/username.module.mjs +5 -5
  51. package/esm2022/src/app/core/graphql/graphql.module.mjs +5 -5
  52. package/esm2022/src/app/core/graphql/graphql.service.mjs +4 -4
  53. package/esm2022/src/app/core/home/home.mjs +5 -5
  54. package/esm2022/src/app/core/home/home.module.mjs +5 -5
  55. package/esm2022/src/app/core/icon/icon.component.mjs +4 -4
  56. package/esm2022/src/app/core/icon/icon.module.mjs +5 -5
  57. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +4 -4
  58. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +5 -5
  59. package/esm2022/src/app/core/menu/menu.component.mjs +4 -4
  60. package/esm2022/src/app/core/menu/menu.module.mjs +5 -5
  61. package/esm2022/src/app/core/menu/menu.service.mjs +4 -4
  62. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  63. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +4 -4
  64. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +4 -4
  65. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +5 -5
  66. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +4 -4
  67. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +5 -5
  68. package/esm2022/src/app/core/peer/select-peer.modal.mjs +4 -4
  69. package/esm2022/src/app/core/peer/select-peer.module.mjs +5 -5
  70. package/esm2022/src/app/core/register/register-confirm.page.mjs +4 -4
  71. package/esm2022/src/app/core/register/register.form.mjs +4 -4
  72. package/esm2022/src/app/core/register/register.modal.mjs +4 -4
  73. package/esm2022/src/app/core/register/register.module.mjs +5 -5
  74. package/esm2022/src/app/core/services/account.service.mjs +4 -4
  75. package/esm2022/src/app/core/services/auth-guard.service.mjs +4 -4
  76. package/esm2022/src/app/core/services/base-entity-service.class.mjs +4 -4
  77. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +4 -4
  78. package/esm2022/src/app/core/services/config.service.mjs +4 -4
  79. package/esm2022/src/app/core/services/crypto.service.mjs +4 -4
  80. package/esm2022/src/app/core/services/local-settings.service.mjs +4 -4
  81. package/esm2022/src/app/core/services/network.service.mjs +4 -4
  82. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +9 -9
  83. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  84. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  85. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +5 -5
  86. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +4 -4
  87. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  88. package/esm2022/src/app/core/services/platform.service.mjs +4 -4
  89. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +4 -4
  90. package/esm2022/src/app/core/services/testing/referential.validator.mjs +4 -4
  91. package/esm2022/src/app/core/services/validator/account.validator.mjs +4 -4
  92. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +4 -4
  93. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +4 -4
  94. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +4 -4
  95. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +4 -4
  96. package/esm2022/src/app/core/settings/settings.module.mjs +5 -5
  97. package/esm2022/src/app/core/settings/settings.page.mjs +4 -4
  98. package/esm2022/src/app/core/table/async-table.class.mjs +4 -4
  99. package/esm2022/src/app/core/table/column/actions-column.component.mjs +4 -4
  100. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +4 -4
  101. package/esm2022/src/app/core/table/column/row-field.component.mjs +4 -4
  102. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +4 -4
  103. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +4 -4
  104. package/esm2022/src/app/core/table/memory-table.class.mjs +4 -4
  105. package/esm2022/src/app/core/table/table-select-columns.component.mjs +4 -4
  106. package/esm2022/src/app/core/table/table.class.mjs +4 -4
  107. package/esm2022/src/app/core/table/table.module.mjs +5 -5
  108. package/esm2022/src/app/core/table/table.pipes.mjs +10 -10
  109. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +4 -4
  110. package/esm2022/src/app/core/table/testing/table.testing.mjs +4 -4
  111. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +5 -5
  112. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
  113. package/esm2022/src/app/core/table/testing/table2.testing.mjs +4 -4
  114. package/esm2022/src/app/shared/audio/audio.mjs +4 -4
  115. package/esm2022/src/app/shared/audio/audio.testing.mjs +4 -4
  116. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +5 -5
  117. package/esm2022/src/app/shared/capacitor/keyboard.mjs +4 -4
  118. package/esm2022/src/app/shared/debug/debug.component.mjs +4 -4
  119. package/esm2022/src/app/shared/debug/debug.module.mjs +5 -5
  120. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +4 -4
  121. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +4 -4
  122. package/esm2022/src/app/shared/directives/directives.module.mjs +5 -5
  123. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  124. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
  125. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
  126. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  127. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  128. package/esm2022/src/app/shared/file/file.service.mjs +4 -4
  129. package/esm2022/src/app/shared/form/field.component.mjs +4 -4
  130. package/esm2022/src/app/shared/form/loading-spinner.mjs +4 -4
  131. package/esm2022/src/app/shared/gesture/gesture-config.mjs +4 -4
  132. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  133. package/esm2022/src/app/shared/help/help.modal.mjs +4 -4
  134. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +4 -4
  135. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +4 -4
  136. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +5 -5
  137. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +4 -4
  138. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +5 -5
  139. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +4 -4
  140. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +4 -4
  141. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +5 -5
  142. package/esm2022/src/app/shared/image/image.module.mjs +5 -5
  143. package/esm2022/src/app/shared/image/image.service.mjs +4 -4
  144. package/esm2022/src/app/shared/logging/logging-service.class.mjs +4 -4
  145. package/esm2022/src/app/shared/logging/logging-service.module.mjs +5 -5
  146. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +4 -4
  147. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +5 -5
  148. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +4 -4
  149. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +4 -4
  150. package/esm2022/src/app/shared/material/badge/badge.module.mjs +5 -5
  151. package/esm2022/src/app/shared/material/badge/badge.test.mjs +4 -4
  152. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +5 -5
  153. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +4 -4
  154. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +4 -4
  155. package/esm2022/src/app/shared/material/chips/chips.module.mjs +5 -5
  156. package/esm2022/src/app/shared/material/chips/material.chips.mjs +4 -4
  157. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +4 -4
  158. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +5 -5
  159. package/esm2022/src/app/shared/material/datetime/material.date.mjs +4 -4
  160. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +4 -4
  161. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +4 -4
  162. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +4 -4
  163. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +4 -4
  164. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +4 -4
  165. package/esm2022/src/app/shared/material/duration/duration.module.mjs +5 -5
  166. package/esm2022/src/app/shared/material/duration/material.duration.mjs +4 -4
  167. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +4 -4
  168. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +4 -4
  169. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
  170. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +4 -4
  171. package/esm2022/src/app/shared/material/material.module.mjs +5 -5
  172. package/esm2022/src/app/shared/material/material.testing.module.mjs +5 -5
  173. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +4 -4
  174. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  175. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +4 -4
  176. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +5 -5
  177. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +4 -4
  178. package/esm2022/src/app/shared/material/testing/common.test.mjs +4 -4
  179. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +4 -4
  180. package/esm2022/src/app/shared/material/text/text-form.component.mjs +4 -4
  181. package/esm2022/src/app/shared/material/text/text-form.module.mjs +5 -5
  182. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +4 -4
  183. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  184. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +4 -4
  185. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +4 -4
  186. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +5 -5
  187. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +28 -28
  188. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +4 -4
  189. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +4 -4
  190. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +5 -5
  191. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +7 -7
  192. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +5 -5
  193. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +5 -5
  194. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +5 -5
  195. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +4 -4
  196. package/esm2022/src/app/shared/pipes/form.pipes.mjs +22 -22
  197. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  198. package/esm2022/src/app/shared/pipes/html.pipes.mjs +7 -7
  199. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +10 -10
  200. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +13 -13
  201. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +4 -4
  202. package/esm2022/src/app/shared/pipes/math.pipes.mjs +13 -13
  203. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +4 -4
  204. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  205. package/esm2022/src/app/shared/pipes/pipes.module.mjs +5 -5
  206. package/esm2022/src/app/shared/pipes/property.pipes.mjs +15 -15
  207. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +22 -22
  208. package/esm2022/src/app/shared/pipes/string.pipes.mjs +31 -31
  209. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +9 -9
  210. package/esm2022/src/app/shared/pipes/types.pipes.mjs +16 -16
  211. package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +5 -5
  212. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +4 -4
  213. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  214. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +4 -4
  215. package/esm2022/src/app/shared/services/startable-service.class.mjs +4 -4
  216. package/esm2022/src/app/shared/services/translate-context.service.mjs +4 -4
  217. package/esm2022/src/app/shared/shared-routing.module.mjs +8 -8
  218. package/esm2022/src/app/shared/shared.module.mjs +5 -5
  219. package/esm2022/src/app/shared/shared.testing.module.mjs +5 -5
  220. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +4 -4
  221. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +5 -5
  222. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +5 -5
  223. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +5 -5
  224. package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
  225. package/esm2022/src/app/shared/testing/maskito.test.mjs +4 -4
  226. package/esm2022/src/app/shared/testing/observable.test.mjs +4 -4
  227. package/esm2022/src/app/shared/testing/tests.page.mjs +4 -4
  228. package/esm2022/src/app/shared/toast/toast.testing.mjs +4 -4
  229. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +5 -5
  230. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +4 -4
  231. package/esm2022/src/app/shared/toolbar/toolbar.mjs +4 -4
  232. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +5 -5
  233. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +4 -4
  234. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +5 -5
  235. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +4 -4
  236. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +4 -4
  237. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +4 -4
  238. package/esm2022/src/app/social/job/job.module.mjs +5 -5
  239. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +4 -4
  240. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +4 -4
  241. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +4 -4
  242. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +4 -4
  243. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +4 -4
  244. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +4 -4
  245. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +5 -5
  246. package/esm2022/src/app/social/message/message.form.mjs +4 -4
  247. package/esm2022/src/app/social/message/message.modal.mjs +4 -4
  248. package/esm2022/src/app/social/message/message.module.mjs +5 -5
  249. package/esm2022/src/app/social/message/message.service.mjs +4 -4
  250. package/esm2022/src/app/social/social.module.mjs +5 -5
  251. package/esm2022/src/app/social/social.testing.module.mjs +5 -5
  252. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +4 -4
  253. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +4 -4
  254. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +4 -4
  255. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +5 -5
  256. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +4 -4
  257. package/esm2022/src/app/social/user-event/user-event.module.mjs +5 -5
  258. package/esm2022/src/app/social/user-event/user-event.service.mjs +4 -4
  259. package/esm2022/src/environments/environment.loader.mjs +4 -4
  260. package/fesm2022/sumaris-net.ngx-components.mjs +1022 -1022
  261. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  262. package/package.json +10 -11
  263. package/src/assets/manifest.json +1 -1
@@ -129,10 +129,10 @@ export class Hotkeys {
129
129
  closeHelpModal() {
130
130
  this._dialogRef?.close(true);
131
131
  }
132
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: Hotkeys, deps: [{ token: i1.Platform }, { token: i2.EventManager }, { token: i3.MatDialog }, { token: i1.ModalController }, { token: i1.PopoverController }, { token: APP_HOTKEYS_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
133
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: Hotkeys, providedIn: 'root' });
132
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: Hotkeys, deps: [{ token: i1.Platform }, { token: i2.EventManager }, { token: i3.MatDialog }, { token: i1.ModalController }, { token: i1.PopoverController }, { token: APP_HOTKEYS_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
133
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: Hotkeys, providedIn: 'root' });
134
134
  }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: Hotkeys, decorators: [{
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: Hotkeys, decorators: [{
136
136
  type: Injectable,
137
137
  args: [{
138
138
  providedIn: 'root',
@@ -143,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
143
143
  type: Inject,
144
144
  args: [APP_HOTKEYS_CONFIG]
145
145
  }] }] });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9ob3RrZXlzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5HLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBc0J2QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsZUFBZSxDQUFDLENBQUM7QUFLOUYsTUFBTSxPQUFPLE9BQU87SUFzQlI7SUFDQTtJQUNBO0lBQ0E7SUF4QkYsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFDaEIsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ3RDLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0IsU0FBUyxHQUFxQjtRQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDdkIsY0FBYyxFQUFFLElBQUk7S0FDckIsQ0FBQztJQUNNLFVBQVUsQ0FBb0I7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixPQUFPLENBQXlCO0lBRS9CLGlCQUFpQixDQUFTO0lBQzFCLHFCQUFxQixDQUFTO0lBRXZDLElBQUksaUJBQWlCO1FBQ25CLE9B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ZXIsIEluamVjdCwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZGVsYXksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEhvdGtleXNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RpYWxvZy9ob3RrZXlzLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOaWxPckJsYW5rLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBlbGVtZW50OiBhbnk7XG4gIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGtleXM6IHN0cmluZztcbiAgcHJldmVudERlZmF1bHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90S2V5c0NvbmZpZyB7XG4gIC8qKlxuICAgKiBTaG9ydGN1dCB0byBvcGVuIHRoZSBob3RrZXlzIGhlbHAgbW9kYWxcbiAgICovXG4gIG9wZW5IZWxwTW9kYWxTaG9ydGN1dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIGhvdGtleXMgaGVscCBtb2RhbFxuICAgKi9cbiAgZW5hYmxlSGVscE1vZGFsOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0hPVEtFWVNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8SG90S2V5c0NvbmZpZz4+KCdIb3RLZXlzQ29uZmlnJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBIb3RrZXlzIHtcbiAgcHJpdmF0ZSBfZGVidWcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2hvdGtleXMgPSBuZXcgTWFwPG51bWJlciwgT3B0aW9ucz4oKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIF9kZWZhdWx0czogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICBlbGVtZW50OiB0aGlzLl9kb2N1bWVudCxcbiAgICBwcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgfTtcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8YW55PjtcbiAgcHJpdmF0ZSBfZGlhbG9nSXNPcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBQYXJ0aWFsPEhvdEtleXNDb25maWc+O1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRDb250cm9sS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlZmF1bHRDb250cm9sS2V5TmFtZTogc3RyaW5nO1xuXG4gIGdldCBpc0hlbHBNb2RhbE9wZW5lZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9kaWFsb2dSZWY7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEV2ZW50TWFuYWdlcixcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgbW9kYWxDb250cm9sbGVyOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfSE9US0VZU19DT05GSUcpIGNvbmZpZz86IFBhcnRpYWw8SG90S2V5c0NvbmZpZz5cbiAgKSB7XG4gICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgZW5hYmxlSGVscE1vZGFsOiB0cnVlLFxuICAgICAgb3BlbkhlbHBNb2RhbFNob3J0Y3V0OiAnRjEnLFxuICAgICAgLi4uY29uZmlnLFxuICAgIH07XG5cbiAgICAvLyBBZGQgc2hvcnRjdXQgdG8gb3BlbiBoZWxwIG1vZGFsXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5lbmFibGVIZWxwTW9kYWwpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2hvdGtleXNdIFN0YXJ0aW5nIGhvdGtleXMgc2VydmljZS4uLiBQcmVzcyAke3RoaXMuX2NvbmZpZy5vcGVuSGVscE1vZGFsU2hvcnRjdXR9IHRvIGdldCBoZWxwIG1vZGFsLmApO1xuXG4gICAgICB0aGlzLmFkZFNob3J0Y3V0KHsga2V5czogdGhpcy5fY29uZmlnLm9wZW5IZWxwTW9kYWxTaG9ydGN1dCB9KS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVIZWxwTW9kYWwoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNJT1MgPSBwbGF0Zm9ybS5pcygnaW9zJyk7XG4gICAgdGhpcy5kZWZhdWx0Q29udHJvbEtleSA9IGlzSU9TID8gJ21ldGEnIDogJ2NvbnRyb2wnO1xuICAgIHRoaXMuZGVmYXVsdENvbnRyb2xLZXlOYW1lID0gaXNJT1MgPyAn4oyYJyA6ICdDdHJsJztcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIC8vdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIGFkZFNob3J0Y3V0KG9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4pOiBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+IHtcbiAgICBjb25zdCBtZXJnZWQgPSA8T3B0aW9ucz57IC4uLnRoaXMuX2RlZmF1bHRzLCAuLi5vcHRpb25zIH07XG4gICAgaWYgKCFtZXJnZWQua2V5cykgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAna2V5cycgb3IgJ2Rlc2NyaXB0aW9uJyBhdHRyaWJ1dGVcIik7XG4gICAgY29uc3QgZXZlbnQgPSBga2V5ZG93bi4ke21lcmdlZC5rZXlzfWA7XG4gICAgY29uc3QgaWQgPSB0aGlzLl9pZCsrO1xuXG4gICAgdGhpcy5faG90a2V5cy5zZXQoaWQsIG1lcmdlZCk7XG5cbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKG1lcmdlZC5kZXNjcmlwdGlvbikpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2hvdGtleXNdIEFkZCBzaG9ydGN1dCB7JHtvcHRpb25zLmtleXN9fTogJHttZXJnZWQuZGVzY3JpcHRpb259YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2hvdGtleXNdIEFkZCBzaG9ydGN1dCB7JHtvcHRpb25zLmtleXN9fWApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAvLyBHZXQgdG9wIGNvbXBvbmVudCBmcm9tIE1vZGFsQ29udHJvbGxlclxuICAgICAgICBjb25zdCB0b3AgPSAoYXdhaXQgdGhpcy5tb2RhbENvbnRyb2xsZXIuZ2V0VG9wKCkpIHx8IChhd2FpdCB0aGlzLnBvcG92ZXJDb250cm9sbGVyLmdldFRvcCgpKTtcbiAgICAgICAgLy8gSWYgbW9kYWwgcHJlc2VudCwgY2hlY2sgaXRzIGNvbXBvbmVudCBuYW1lIGFnYWluc3QgaG90a2V5IGVsZW1lbnQgbmFtZSAoZml4ICMxODEpXG4gICAgICAgIGlmICh0b3AgJiYgdG9wLmNvbXBvbmVudFsnbmFtZSddICE9PSBtZXJnZWQuZWxlbWVudE5hbWUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBlLnJlcGVhdCkgcmV0dXJuOyAvLyBza2lwIHdoZW4gcmVwZWF0ZWRcbiAgICAgICAgaWYgKG1lcmdlZC5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtob3RrZXlzXSBTaG9ydGN1dCB7JHtvcHRpb25zLmtleXN9fSBkZXRlY3RlZC4uLmApO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGUpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZGlzcG9zZSA9IHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobWVyZ2VkLmVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLl9ob3RrZXlzLmRlbGV0ZShpZCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlSGVscE1vZGFsKCkge1xuICAgIGlmICh0aGlzLmlzSGVscE1vZGFsT3BlbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlSGVscE1vZGFsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbkhlbHBNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5IZWxwTW9kYWwoKSB7XG4gICAgaWYgKHRoaXMuaXNIZWxwTW9kYWxPcGVuZWQpIHJldHVybjsgLy8gU2tpcCBpZiBhbHJlYWR5IG9wZW5lZFxuXG4gICAgLy8gR2V0IGtleXMgd2l0aCBhIG5vdCBibGFuayBkZXNjcmlwdGlvblxuICAgIGNvbnN0IGhvdGtleXMgPSBBcnJheS5mcm9tKHRoaXMuX2hvdGtleXMudmFsdWVzKCkpLnJlZHVjZSgobWFwLCBpdGVtOiBPcHRpb25zKSA9PiB7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGl0ZW0/LmRlc2NyaXB0aW9uKSkge1xuICAgICAgICBtYXAuc2V0KGl0ZW0ua2V5cywgaXRlbS5kZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sIG5ldyBNYXAoKSk7XG5cbiAgICBpZiAoaG90a2V5cy5zaXplID09PSAwKSByZXR1cm47IC8vIE5vdGhpbmcgdG8gZGlzcGxheVxuXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihIb3RrZXlzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGRhdGE6IGhvdGtleXMsXG4gICAgfSk7XG4gICAgdGhpcy5fZGlhbG9nUmVmXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIC8vIEF2b2lkIHRvbyBtYW55IGNhbGwgKGUuZy4gaW4gU2FmYXJpKVxuICAgICAgICBkZWxheSgyNTApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gRm9yZ2V0IHRoZSBkaWFsb2cgcmVmXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IG51bGw7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tob3RrZXlzXSBDbG9zaW5nIGhlbHAgbW9kYWwnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgY2xvc2VIZWxwTW9kYWwoKSB7XG4gICAgdGhpcy5fZGlhbG9nUmVmPy5jbG9zZSh0cnVlKTtcbiAgfVxufVxuIl19
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9ob3RrZXlzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5HLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBc0J2QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsZUFBZSxDQUFDLENBQUM7QUFLOUYsTUFBTSxPQUFPLE9BQU87SUFzQlI7SUFDQTtJQUNBO0lBQ0E7SUF4QkYsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFDaEIsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ3RDLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0IsU0FBUyxHQUFxQjtRQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDdkIsY0FBYyxFQUFFLElBQUk7S0FDckIsQ0FBQztJQUNNLFVBQVUsQ0FBb0I7SUFDOUIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixPQUFPLENBQXlCO0lBRS9CLGlCQUFpQixDQUFTO0lBQzFCLHFCQUFxQixDQUFTO0lBRXZDLElBQUksaUJBQWlCO1FBQ25CLE9B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ZXIsIEluamVjdCwgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZGVsYXksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEhvdGtleXNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RpYWxvZy9ob3RrZXlzLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOaWxPckJsYW5rLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBlbGVtZW50OiBhbnk7XG4gIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGtleXM6IHN0cmluZztcbiAgcHJldmVudERlZmF1bHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90S2V5c0NvbmZpZyB7XG4gIC8qKlxuICAgKiBTaG9ydGN1dCB0byBvcGVuIHRoZSBob3RrZXlzIGhlbHAgbW9kYWxcbiAgICovXG4gIG9wZW5IZWxwTW9kYWxTaG9ydGN1dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIGhvdGtleXMgaGVscCBtb2RhbFxuICAgKi9cbiAgZW5hYmxlSGVscE1vZGFsOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0hPVEtFWVNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFBhcnRpYWw8SG90S2V5c0NvbmZpZz4+KCdIb3RLZXlzQ29uZmlnJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBIb3RrZXlzIHtcbiAgcHJpdmF0ZSBfZGVidWcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2hvdGtleXMgPSBuZXcgTWFwPG51bWJlciwgT3B0aW9ucz4oKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIF9kZWZhdWx0czogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICBlbGVtZW50OiB0aGlzLl9kb2N1bWVudCxcbiAgICBwcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgfTtcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8YW55PjtcbiAgcHJpdmF0ZSBfZGlhbG9nSXNPcGVuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBQYXJ0aWFsPEhvdEtleXNDb25maWc+O1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRDb250cm9sS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlZmF1bHRDb250cm9sS2V5TmFtZTogc3RyaW5nO1xuXG4gIGdldCBpc0hlbHBNb2RhbE9wZW5lZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9kaWFsb2dSZWY7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEV2ZW50TWFuYWdlcixcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgbW9kYWxDb250cm9sbGVyOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfSE9US0VZU19DT05GSUcpIGNvbmZpZz86IFBhcnRpYWw8SG90S2V5c0NvbmZpZz5cbiAgKSB7XG4gICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgZW5hYmxlSGVscE1vZGFsOiB0cnVlLFxuICAgICAgb3BlbkhlbHBNb2RhbFNob3J0Y3V0OiAnRjEnLFxuICAgICAgLi4uY29uZmlnLFxuICAgIH07XG5cbiAgICAvLyBBZGQgc2hvcnRjdXQgdG8gb3BlbiBoZWxwIG1vZGFsXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5lbmFibGVIZWxwTW9kYWwpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2hvdGtleXNdIFN0YXJ0aW5nIGhvdGtleXMgc2VydmljZS4uLiBQcmVzcyAke3RoaXMuX2NvbmZpZy5vcGVuSGVscE1vZGFsU2hvcnRjdXR9IHRvIGdldCBoZWxwIG1vZGFsLmApO1xuXG4gICAgICB0aGlzLmFkZFNob3J0Y3V0KHsga2V5czogdGhpcy5fY29uZmlnLm9wZW5IZWxwTW9kYWxTaG9ydGN1dCB9KS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVIZWxwTW9kYWwoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNJT1MgPSBwbGF0Zm9ybS5pcygnaW9zJyk7XG4gICAgdGhpcy5kZWZhdWx0Q29udHJvbEtleSA9IGlzSU9TID8gJ21ldGEnIDogJ2NvbnRyb2wnO1xuICAgIHRoaXMuZGVmYXVsdENvbnRyb2xLZXlOYW1lID0gaXNJT1MgPyAn4oyYJyA6ICdDdHJsJztcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIC8vdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIGFkZFNob3J0Y3V0KG9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4pOiBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+IHtcbiAgICBjb25zdCBtZXJnZWQgPSA8T3B0aW9ucz57IC4uLnRoaXMuX2RlZmF1bHRzLCAuLi5vcHRpb25zIH07XG4gICAgaWYgKCFtZXJnZWQua2V5cykgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAna2V5cycgb3IgJ2Rlc2NyaXB0aW9uJyBhdHRyaWJ1dGVcIik7XG4gICAgY29uc3QgZXZlbnQgPSBga2V5ZG93bi4ke21lcmdlZC5rZXlzfWA7XG4gICAgY29uc3QgaWQgPSB0aGlzLl9pZCsrO1xuXG4gICAgdGhpcy5faG90a2V5cy5zZXQoaWQsIG1lcmdlZCk7XG5cbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKG1lcmdlZC5kZXNjcmlwdGlvbikpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2hvdGtleXNdIEFkZCBzaG9ydGN1dCB7JHtvcHRpb25zLmtleXN9fTogJHttZXJnZWQuZGVzY3JpcHRpb259YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2hvdGtleXNdIEFkZCBzaG9ydGN1dCB7JHtvcHRpb25zLmtleXN9fWApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAvLyBHZXQgdG9wIGNvbXBvbmVudCBmcm9tIE1vZGFsQ29udHJvbGxlclxuICAgICAgICBjb25zdCB0b3AgPSAoYXdhaXQgdGhpcy5tb2RhbENvbnRyb2xsZXIuZ2V0VG9wKCkpIHx8IChhd2FpdCB0aGlzLnBvcG92ZXJDb250cm9sbGVyLmdldFRvcCgpKTtcbiAgICAgICAgLy8gSWYgbW9kYWwgcHJlc2VudCwgY2hlY2sgaXRzIGNvbXBvbmVudCBuYW1lIGFnYWluc3QgaG90a2V5IGVsZW1lbnQgbmFtZSAoZml4ICMxODEpXG4gICAgICAgIGlmICh0b3AgJiYgdG9wLmNvbXBvbmVudFsnbmFtZSddICE9PSBtZXJnZWQuZWxlbWVudE5hbWUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBlLnJlcGVhdCkgcmV0dXJuOyAvLyBza2lwIHdoZW4gcmVwZWF0ZWRcbiAgICAgICAgaWYgKG1lcmdlZC5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtob3RrZXlzXSBTaG9ydGN1dCB7JHtvcHRpb25zLmtleXN9fSBkZXRlY3RlZC4uLmApO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGUpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZGlzcG9zZSA9IHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobWVyZ2VkLmVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLl9ob3RrZXlzLmRlbGV0ZShpZCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlSGVscE1vZGFsKCkge1xuICAgIGlmICh0aGlzLmlzSGVscE1vZGFsT3BlbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlSGVscE1vZGFsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbkhlbHBNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5IZWxwTW9kYWwoKSB7XG4gICAgaWYgKHRoaXMuaXNIZWxwTW9kYWxPcGVuZWQpIHJldHVybjsgLy8gU2tpcCBpZiBhbHJlYWR5IG9wZW5lZFxuXG4gICAgLy8gR2V0IGtleXMgd2l0aCBhIG5vdCBibGFuayBkZXNjcmlwdGlvblxuICAgIGNvbnN0IGhvdGtleXMgPSBBcnJheS5mcm9tKHRoaXMuX2hvdGtleXMudmFsdWVzKCkpLnJlZHVjZSgobWFwLCBpdGVtOiBPcHRpb25zKSA9PiB7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGl0ZW0/LmRlc2NyaXB0aW9uKSkge1xuICAgICAgICBtYXAuc2V0KGl0ZW0ua2V5cywgaXRlbS5kZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sIG5ldyBNYXAoKSk7XG5cbiAgICBpZiAoaG90a2V5cy5zaXplID09PSAwKSByZXR1cm47IC8vIE5vdGhpbmcgdG8gZGlzcGxheVxuXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihIb3RrZXlzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGRhdGE6IGhvdGtleXMsXG4gICAgfSk7XG4gICAgdGhpcy5fZGlhbG9nUmVmXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIC8vIEF2b2lkIHRvbyBtYW55IGNhbGwgKGUuZy4gaW4gU2FmYXJpKVxuICAgICAgICBkZWxheSgyNTApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gRm9yZ2V0IHRoZSBkaWFsb2cgcmVmXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IG51bGw7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tob3RrZXlzXSBDbG9zaW5nIGhlbHAgbW9kYWwnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgY2xvc2VIZWxwTW9kYWwoKSB7XG4gICAgdGhpcy5fZGlhbG9nUmVmPy5jbG9zZSh0cnVlKTtcbiAgfVxufVxuIl19
@@ -8,11 +8,11 @@ import { MatDialogModule } from '@angular/material/dialog';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@ngx-translate/core";
10
10
  export class SharedHotkeysModule {
11
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SharedHotkeysModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: SharedHotkeysModule, declarations: [HotkeysDialogComponent], imports: [CommonModule, MatCommonModule, MatDialogModule, i1.TranslateModule], exports: [HotkeysDialogComponent] });
13
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SharedHotkeysModule, providers: [Hotkeys], imports: [CommonModule, MatCommonModule, MatDialogModule, TranslateModule.forChild()] });
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: SharedHotkeysModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: SharedHotkeysModule, declarations: [HotkeysDialogComponent], imports: [CommonModule, MatCommonModule, MatDialogModule, i1.TranslateModule], exports: [HotkeysDialogComponent] });
13
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: SharedHotkeysModule, providers: [Hotkeys], imports: [CommonModule, MatCommonModule, MatDialogModule, TranslateModule.forChild()] });
14
14
  }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SharedHotkeysModule, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: SharedHotkeysModule, decorators: [{
16
16
  type: NgModule,
17
17
  args: [{
18
18
  imports: [CommonModule, MatCommonModule, MatDialogModule, TranslateModule.forChild()],
@@ -21,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
21
21
  providers: [Hotkeys],
22
22
  }]
23
23
  }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWhvdGtleXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9zaGFyZWQtaG90a2V5cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFRM0QsTUFBTSxPQUFPLG1CQUFtQjt1R0FBbkIsbUJBQW1CO3dHQUFuQixtQkFBbUIsaUJBSGYsc0JBQXNCLGFBRjNCLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxpQ0FDOUMsc0JBQXNCO3dHQUlyQixtQkFBbUIsYUFGbkIsQ0FBQyxPQUFPLENBQUMsWUFIVixZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFOzsyRkFLekUsbUJBQW1CO2tCQU4vQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDckYsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUN0QyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhvdGtleXMgfSBmcm9tICcuL2hvdGtleXMuc2VydmljZSc7XG5pbXBvcnQgeyBIb3RrZXlzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2cvaG90a2V5cy1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0Q29tbW9uTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpXSxcbiAgZXhwb3J0czogW0hvdGtleXNEaWFsb2dDb21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtIb3RrZXlzRGlhbG9nQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbSG90a2V5c10sXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZEhvdGtleXNNb2R1bGUge31cbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWhvdGtleXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9zaGFyZWQtaG90a2V5cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFRM0QsTUFBTSxPQUFPLG1CQUFtQjt3R0FBbkIsbUJBQW1CO3lHQUFuQixtQkFBbUIsaUJBSGYsc0JBQXNCLGFBRjNCLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxpQ0FDOUMsc0JBQXNCO3lHQUlyQixtQkFBbUIsYUFGbkIsQ0FBQyxPQUFPLENBQUMsWUFIVixZQUFZLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFOzs0RkFLekUsbUJBQW1CO2tCQU4vQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDckYsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUN0QyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhvdGtleXMgfSBmcm9tICcuL2hvdGtleXMuc2VydmljZSc7XG5pbXBvcnQgeyBIb3RrZXlzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2cvaG90a2V5cy1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0Q29tbW9uTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpXSxcbiAgZXhwb3J0czogW0hvdGtleXNEaWFsb2dDb21wb25lbnRdLFxuICBkZWNsYXJhdGlvbnM6IFtIb3RrZXlzRGlhbG9nQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbSG90a2V5c10sXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZEhvdGtleXNNb2R1bGUge31cbiJdfQ==
@@ -332,10 +332,10 @@ export class AppImageGalleryComponent {
332
332
  markForCheck() {
333
333
  this.cd.markForCheck();
334
334
  }
335
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AppImageGalleryComponent, deps: [{ token: i1.ImageService }, { token: i2.Platform }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
336
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: AppImageGalleryComponent, selector: "app-image-gallery", inputs: { cardColor: "cardColor", debug: "debug", disabled: "disabled", readOnly: "readOnly", mobile: "mobile", mode: "mode", confirmBeforeDelete: "confirmBeforeDelete", showToolbar: "showToolbar", showFabButton: "showFabButton", showTitle: "showTitle", showAddCardButton: "showAddCardButton", addButtonColor: "addButtonColor", dataSource: "dataSource" }, outputs: { onBeforeDeleteRows: "onBeforeDeleteRows", onAfterAddRows: "onAfterAddRows", onAfterEditRow: "onAfterEditRow" }, viewQueries: [{ propertyName: "zoomModal", first: true, predicate: ["zoomModal"], descendants: true }, { propertyName: "titlePopover", first: true, predicate: ["titlePopover"], descendants: true }, { propertyName: "swiperRef", first: true, predicate: ["modalSwiper"], descendants: true }], ngImport: i0, template: "<ion-toolbar color=\"light\" *ngIf=\"showToolbar\">\n <!-- Add -->\n <button\n mat-icon-button\n *ngIf=\"!readOnly && !mobile && enabled\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"add()\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <ion-buttons slot=\"end\">\n <!-- Toggle view mode -->\n <ion-segment (ionChange)=\"toggleViewMode($event)\" color=\"accent\" [value]=\"_colSize\">\n <ion-segment-button [value]=\"4\">\n <mat-icon>view_module</mat-icon>\n </ion-segment-button>\n <ion-segment-button [value]=\"12\">\n <mat-icon>view_list</mat-icon>\n </ion-segment-button>\n </ion-segment>\n </ion-buttons>\n</ion-toolbar>\n\n<div class=\"gallery-container {{ this.mode }}\">\n <div *ngIf=\"mobile && zoomActive\" class=\"backdrop\" [style.opacity]=\"zoomScale\"></div>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col *rxFor=\"let row of _data$; index as index; trackBy: trackByFn\" [size]=\"_colSize\">\n @let image = row | propertyGet: 'currentData';\n <ion-card\n #card\n class=\"image-card\"\n [class.zoom-hover]=\"!mobile\"\n [color]=\"cardColor\"\n (click)=\"clickRow(row, index)\"\n tappable\n @fadeInAnimation\n >\n <figure class=\"card-thumbnail\">\n <ion-img [src]=\"image.url || image.dataUrl\" />\n </figure>\n\n <!-- toolbar for title (when not hover) -->\n <ion-toolbar color=\"transparent\" class=\"title\" *ngIf=\"image.title\">\n <ion-label class=\"card-title\">{{ image.title }}</ion-label>\n </ion-toolbar>\n\n <!-- action toolbar (desktop only) shown when hover image -->\n <ion-toolbar #cardToolbar *ngIf=\"!mobile && !readOnly\" color=\"light\" class=\"buttons\">\n <!-- edit title button -->\n <button\n mat-button\n *ngIf=\"showTitle\"\n slot=\"start\"\n [disabled]=\"disabled\"\n (click)=\"editTitle($event, row, cardToolbar)\"\n (focusin)=\"showCardToolbar(cardToolbar)\"\n >\n <mat-icon>edit</mat-icon>\n <mat-label>\n <span *ngIf=\"row.currentData.title | isNotNilOrBlank; else editLabel\" translate>\n IMAGE.GALLERY.BTN_EDIT_TITLE\n </span>\n <ng-template #editLabel>\n <span translate>IMAGE.GALLERY.BTN_ADD_TITLE</span>\n </ng-template>\n </mat-label>\n </button>\n\n <div class=\"flex-spacer\"></div>\n\n <!-- delete button -->\n <button\n mat-icon-button\n slot=\"end\"\n class=\"ion-float-end\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n [disabled]=\"disabled\"\n (click)=\"delete($event, row)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </ion-toolbar>\n </ion-card>\n </ion-col>\n\n <ion-col *ngIf=\"showAddCardButton && !readOnly\" [size]=\"_colSize\" @fadeInAnimation>\n <ion-card class=\"image-card-button\" color=\"light\" (click)=\"add($event)\" [disabled]=\"disabled\" tappable>\n <ion-card-content>\n <div class=\"icon-container\">\n <ion-icon name=\"camera\" [color]=\"addButtonColor\"></ion-icon>\n <ion-icon name=\"add\" [color]=\"addButtonColor\" class=\"icon-secondary\"></ion-icon>\n </div>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n</div>\n\n<!-- FAB button: add -->\n<ion-fab\n slot=\"fixed\"\n vertical=\"bottom\"\n horizontal=\"end\"\n *ngIf=\"showFabButton && !readOnly\"\n [class.cdk-visually-hidden]=\"disabled\"\n @fadeInOutAnimation\n>\n <ion-fab-button color=\"tertiary\" (click)=\"add($event)\">\n <ion-icon name=\"camera\"></ion-icon>\n <ion-icon name=\"add\" class=\"icon-secondary\" style=\"left: 33px; top: 9px; font-size: 20px\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n\n<!-- Zoom modal -->\n<ion-modal #zoomModal class=\"stack-modal zoom-modal\" [class.modal-fullscreen]=\"mobile\" [class.modal-large]=\"!mobile\">\n <ng-template>\n <ion-content class=\"ion-no-padding ion-no-margin\">\n @let count = rows?.length || 0;\n <!-- Counter -->\n <div class=\"top-left\">\n <ion-label color=\"light\">{{ activeSlideIndex + 1 }} / {{ count }}</ion-label>\n </div>\n\n <!-- zoom button -->\n <div class=\"top-right\">\n @if (!mobile) {\n <ion-button (click)=\"zoom(modalSwiper, true)\" color=\"light\">\n <ion-icon slot=\"icon-only\" name=\"add\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"zoom(modalSwiper, false)\" color=\"light\">\n <ion-icon name=\"remove\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </div>\n\n <!-- navigation side buttons next/back -->\n <ng-container *ngIf=\"!mobile && (rows | isArrayLength: { greaterThan: 1 })\">\n <div class=\"side-buttons prev\" (click)=\"slidePrev(modalSwiper)\">\n <ion-icon name=\"chevron-back\"></ion-icon>\n </div>\n <div class=\"side-buttons next\" (click)=\"slideNext(modalSwiper)\">\n <ion-icon name=\"chevron-forward\"></ion-icon>\n </div>\n </ng-container>\n\n <!-- image slides -->\n <swiper-container #modalSwiper [modules]=\"swiperModules\" [zoom]=\"true\">\n <swiper-slide *ngFor=\"let row of rows; last as last\">\n <div\n class=\"swiper-zoom-container\"\n *ngIf=\"row | propertyGet: 'currentData'; let image\"\n (ngInit)=\"last && initModalSlides(modalSwiper)\"\n >\n <ion-img [src]=\"image.url || image.dataUrl\" />\n </div>\n </swiper-slide>\n </swiper-container>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-row>\n <ion-col size=\"4\" class=\"ion-text-start\">\n <ion-button\n *ngIf=\"!readOnly\"\n (click)=\"deleteFromModal($event, modalSwiper)\"\n [disabled]=\"disabled\"\n fill=\"clear\"\n color=\"danger\"\n >\n <mat-icon slot=\"start\">delete</mat-icon>\n {{ 'COMMON.BTN_DELETE' | translate }}\n </ion-button>\n </ion-col>\n <ion-col size=\"4\"></ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\" fill=\"clear\" *ngIf=\"mobile; else desktop\">\n <ion-icon slot=\"start\" name=\"close\"></ion-icon>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n <ng-template #desktop>\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\">\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-modal>\n\n<ion-popover #titlePopover>\n <ng-template>\n <ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <form [formGroup]=\"_titleForm\">\n <mat-form-field floatLabel=\"auto\">\n <mat-label translate>IMAGE.GALLERY.TITLE</mat-label>\n <input\n matInput\n formControlName=\"title\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"_titleAutofocus\"\n (keydown.control.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n />\n </mat-form-field>\n </form>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"titlePopover.dismiss(null, 'CANCEL')\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n (keyup.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-popover>\n", styles: [":host{--image-margin-inline: 10px}mat-toolbar,.mat-toolbar-single-row{padding:0;height:42px}ion-card{margin-left:unset;margin-right:unset;margin-inline:var(--image-margin-inline, 10px)}.image-slide{overflow:visible}.image-card{height:calc(100% - 23px);background-color:var(--ion-color-base);z-index:9;--img-scale: 1}.image-card .card-thumbnail{position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:100%;height:100%}.image-card .card-thumbnail>ion-img{min-height:100%;transition:scale .2s ease-in-out;scale:var(--img-scale);max-height:var(--img-max-height)}.image-card.zoom-hover:hover{--img-scale: 1.2}.image-card ion-toolbar{--top-offset: calc(-1 * var(--ion-toolbar-height));position:absolute}.image-card ion-toolbar.title{--padding-start: 16px;--padding-end: 16px;--ion-color-base: rgba(0, 0, 0, .45) !important;position:absolute;top:calc(100% + var(--top-offset));transition:opacity .2s ease-in-out}.image-card ion-toolbar.title ion-label{color:#fff}.image-card ion-toolbar.buttons{--padding-start: 4px;--padding-end: 4px;--ion-color-base: var(--ion-color-light) !important;position:absolute;top:100%;transition:transform .2s ease-in-out}.image-card:hover ion-toolbar.buttons,.image-card ion-toolbar.buttons.focused{transform:translateY(var(--top-offset))}.image-card-button{height:calc(100% - var(--image-margin-inline, 0px) * 2 - 3px);transition:.2s ease-in-out;max-width:250px}.image-card-button ion-card-content{height:100%}.image-card-button .icon-container{height:auto;position:relative;top:calc(50% - 75px);display:flex;align-items:center;justify-content:center}.image-card-button ion-icon:first-of-type{font-size:150px;height:150px;position:relative;top:0}.image-card-button ion-icon.icon-secondary{font-size:50px;position:absolute;top:0;left:max(min(50% + 25px,100% - 50px),0px)}.image-card-button ion-button{float:right}.image-card-button:hover{--ion-color-base: var(--ion-color-shade) !important}.image-card-button:hover ion-icon{--ion-color-base: var(--ion-color-shade) !important}.backdrop{height:100vh;width:100vw;background:#000;position:absolute;z-index:10}.zoom-modal{-webkit-user-select:none;user-select:none}.zoom-modal .top-left{z-index:14;position:absolute;display:inline-grid;left:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .top-right{z-index:14;position:absolute;display:inline-grid;right:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .side-buttons{--side-buttons-width: 120px;--side-buttons-margin: calc(var(--side-buttons-width) / 3);z-index:13;position:absolute;top:0;bottom:0;width:var(--side-buttons-width)}.zoom-modal .side-buttons ion-icon{top:50%;color:#fff;font-size:2.5rem;position:absolute;opacity:0;transition-duration:.15s;transition-timing-function:ease-in}.zoom-modal .side-buttons:hover{cursor:pointer}.zoom-modal .side-buttons:hover ion-icon{opacity:1}.zoom-modal .side-buttons.prev{left:0}.zoom-modal .side-buttons.prev ion-icon{left:var(--side-buttons-margin)}.zoom-modal .side-buttons.next{right:0}.zoom-modal .side-buttons.next ion-icon{right:var(--side-buttons-margin)}.zoom-modal ion-slides{height:100%;background:#000}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i2.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: i2.IonSegmentButton, selector: "ion-segment-button", inputs: ["disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "component", type: i2.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i2.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i10.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i11.NgInitDirective, selector: "[ngInit]", outputs: ["ngInit"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "directive", type: i13.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i14.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i15.ArrayLengthPipe, name: "isArrayLength" }, { kind: "pipe", type: i16.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }], animations: [fadeInAnimation, fadeInOutAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
335
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppImageGalleryComponent, deps: [{ token: i1.ImageService }, { token: i2.Platform }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
336
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: AppImageGalleryComponent, selector: "app-image-gallery", inputs: { cardColor: "cardColor", debug: "debug", disabled: "disabled", readOnly: "readOnly", mobile: "mobile", mode: "mode", confirmBeforeDelete: "confirmBeforeDelete", showToolbar: "showToolbar", showFabButton: "showFabButton", showTitle: "showTitle", showAddCardButton: "showAddCardButton", addButtonColor: "addButtonColor", dataSource: "dataSource" }, outputs: { onBeforeDeleteRows: "onBeforeDeleteRows", onAfterAddRows: "onAfterAddRows", onAfterEditRow: "onAfterEditRow" }, viewQueries: [{ propertyName: "zoomModal", first: true, predicate: ["zoomModal"], descendants: true }, { propertyName: "titlePopover", first: true, predicate: ["titlePopover"], descendants: true }, { propertyName: "swiperRef", first: true, predicate: ["modalSwiper"], descendants: true }], ngImport: i0, template: "<ion-toolbar color=\"light\" *ngIf=\"showToolbar\">\n <!-- Add -->\n <button\n mat-icon-button\n *ngIf=\"!readOnly && !mobile && enabled\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"add()\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <ion-buttons slot=\"end\">\n <!-- Toggle view mode -->\n <ion-segment (ionChange)=\"toggleViewMode($event)\" color=\"accent\" [value]=\"_colSize\">\n <ion-segment-button [value]=\"4\">\n <mat-icon>view_module</mat-icon>\n </ion-segment-button>\n <ion-segment-button [value]=\"12\">\n <mat-icon>view_list</mat-icon>\n </ion-segment-button>\n </ion-segment>\n </ion-buttons>\n</ion-toolbar>\n\n<div class=\"gallery-container {{ this.mode }}\">\n <div *ngIf=\"mobile && zoomActive\" class=\"backdrop\" [style.opacity]=\"zoomScale\"></div>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col *rxFor=\"let row of _data$; index as index; trackBy: trackByFn\" [size]=\"_colSize\">\n @let image = row | propertyGet: 'currentData';\n <ion-card\n #card\n class=\"image-card\"\n [class.zoom-hover]=\"!mobile\"\n [color]=\"cardColor\"\n (click)=\"clickRow(row, index)\"\n tappable\n @fadeInAnimation\n >\n <figure class=\"card-thumbnail\">\n <ion-img [src]=\"image.url || image.dataUrl\" />\n </figure>\n\n <!-- toolbar for title (when not hover) -->\n <ion-toolbar color=\"transparent\" class=\"title\" *ngIf=\"image.title\">\n <ion-label class=\"card-title\">{{ image.title }}</ion-label>\n </ion-toolbar>\n\n <!-- action toolbar (desktop only) shown when hover image -->\n <ion-toolbar #cardToolbar *ngIf=\"!mobile && !readOnly\" color=\"light\" class=\"buttons\">\n <!-- edit title button -->\n <button\n mat-button\n *ngIf=\"showTitle\"\n slot=\"start\"\n [disabled]=\"disabled\"\n (click)=\"editTitle($event, row, cardToolbar)\"\n (focusin)=\"showCardToolbar(cardToolbar)\"\n >\n <mat-icon>edit</mat-icon>\n <mat-label>\n <span *ngIf=\"row.currentData.title | isNotNilOrBlank; else editLabel\" translate>\n IMAGE.GALLERY.BTN_EDIT_TITLE\n </span>\n <ng-template #editLabel>\n <span translate>IMAGE.GALLERY.BTN_ADD_TITLE</span>\n </ng-template>\n </mat-label>\n </button>\n\n <div class=\"flex-spacer\"></div>\n\n <!-- delete button -->\n <button\n mat-icon-button\n slot=\"end\"\n class=\"ion-float-end\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n [disabled]=\"disabled\"\n (click)=\"delete($event, row)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </ion-toolbar>\n </ion-card>\n </ion-col>\n\n <ion-col *ngIf=\"showAddCardButton && !readOnly\" [size]=\"_colSize\" @fadeInAnimation>\n <ion-card class=\"image-card-button\" color=\"light\" (click)=\"add($event)\" [disabled]=\"disabled\" tappable>\n <ion-card-content>\n <div class=\"icon-container\">\n <ion-icon name=\"camera\" [color]=\"addButtonColor\"></ion-icon>\n <ion-icon name=\"add\" [color]=\"addButtonColor\" class=\"icon-secondary\"></ion-icon>\n </div>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n</div>\n\n<!-- FAB button: add -->\n<ion-fab\n slot=\"fixed\"\n vertical=\"bottom\"\n horizontal=\"end\"\n *ngIf=\"showFabButton && !readOnly\"\n [class.cdk-visually-hidden]=\"disabled\"\n @fadeInOutAnimation\n>\n <ion-fab-button color=\"tertiary\" (click)=\"add($event)\">\n <ion-icon name=\"camera\"></ion-icon>\n <ion-icon name=\"add\" class=\"icon-secondary\" style=\"left: 33px; top: 9px; font-size: 20px\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n\n<!-- Zoom modal -->\n<ion-modal #zoomModal class=\"stack-modal zoom-modal\" [class.modal-fullscreen]=\"mobile\" [class.modal-large]=\"!mobile\">\n <ng-template>\n <ion-content class=\"ion-no-padding ion-no-margin\">\n @let count = rows?.length || 0;\n <!-- Counter -->\n <div class=\"top-left\">\n <ion-label color=\"light\">{{ activeSlideIndex + 1 }} / {{ count }}</ion-label>\n </div>\n\n <!-- zoom button -->\n <div class=\"top-right\">\n @if (!mobile) {\n <ion-button (click)=\"zoom(modalSwiper, true)\" color=\"light\">\n <ion-icon slot=\"icon-only\" name=\"add\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"zoom(modalSwiper, false)\" color=\"light\">\n <ion-icon name=\"remove\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </div>\n\n <!-- navigation side buttons next/back -->\n <ng-container *ngIf=\"!mobile && (rows | isArrayLength: { greaterThan: 1 })\">\n <div class=\"side-buttons prev\" (click)=\"slidePrev(modalSwiper)\">\n <ion-icon name=\"chevron-back\"></ion-icon>\n </div>\n <div class=\"side-buttons next\" (click)=\"slideNext(modalSwiper)\">\n <ion-icon name=\"chevron-forward\"></ion-icon>\n </div>\n </ng-container>\n\n <!-- image slides -->\n <swiper-container #modalSwiper [modules]=\"swiperModules\" [zoom]=\"true\">\n <swiper-slide *ngFor=\"let row of rows; last as last\">\n <div\n class=\"swiper-zoom-container\"\n *ngIf=\"row | propertyGet: 'currentData'; let image\"\n (ngInit)=\"last && initModalSlides(modalSwiper)\"\n >\n <ion-img [src]=\"image.url || image.dataUrl\" />\n </div>\n </swiper-slide>\n </swiper-container>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-row>\n <ion-col size=\"4\" class=\"ion-text-start\">\n <ion-button\n *ngIf=\"!readOnly\"\n (click)=\"deleteFromModal($event, modalSwiper)\"\n [disabled]=\"disabled\"\n fill=\"clear\"\n color=\"danger\"\n >\n <mat-icon slot=\"start\">delete</mat-icon>\n {{ 'COMMON.BTN_DELETE' | translate }}\n </ion-button>\n </ion-col>\n <ion-col size=\"4\"></ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\" fill=\"clear\" *ngIf=\"mobile; else desktop\">\n <ion-icon slot=\"start\" name=\"close\"></ion-icon>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n <ng-template #desktop>\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\">\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-modal>\n\n<ion-popover #titlePopover>\n <ng-template>\n <ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <form [formGroup]=\"_titleForm\">\n <mat-form-field floatLabel=\"auto\">\n <mat-label translate>IMAGE.GALLERY.TITLE</mat-label>\n <input\n matInput\n formControlName=\"title\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"_titleAutofocus\"\n (keydown.control.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n />\n </mat-form-field>\n </form>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"titlePopover.dismiss(null, 'CANCEL')\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n (keyup.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-popover>\n", styles: [":host{--image-margin-inline: 10px}mat-toolbar,.mat-toolbar-single-row{padding:0;height:42px}ion-card{margin-left:unset;margin-right:unset;margin-inline:var(--image-margin-inline, 10px)}.image-slide{overflow:visible}.image-card{height:calc(100% - 23px);background-color:var(--ion-color-base);z-index:9;--img-scale: 1}.image-card .card-thumbnail{position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:100%;height:100%}.image-card .card-thumbnail>ion-img{min-height:100%;transition:scale .2s ease-in-out;scale:var(--img-scale);max-height:var(--img-max-height)}.image-card.zoom-hover:hover{--img-scale: 1.2}.image-card ion-toolbar{--top-offset: calc(-1 * var(--ion-toolbar-height));position:absolute}.image-card ion-toolbar.title{--padding-start: 16px;--padding-end: 16px;--ion-color-base: rgba(0, 0, 0, .45) !important;position:absolute;top:calc(100% + var(--top-offset));transition:opacity .2s ease-in-out}.image-card ion-toolbar.title ion-label{color:#fff}.image-card ion-toolbar.buttons{--padding-start: 4px;--padding-end: 4px;--ion-color-base: var(--ion-color-light) !important;position:absolute;top:100%;transition:transform .2s ease-in-out}.image-card:hover ion-toolbar.buttons,.image-card ion-toolbar.buttons.focused{transform:translateY(var(--top-offset))}.image-card-button{height:calc(100% - var(--image-margin-inline, 0px) * 2 - 3px);transition:.2s ease-in-out;max-width:250px}.image-card-button ion-card-content{height:100%}.image-card-button .icon-container{height:auto;position:relative;top:calc(50% - 75px);display:flex;align-items:center;justify-content:center}.image-card-button ion-icon:first-of-type{font-size:150px;height:150px;position:relative;top:0}.image-card-button ion-icon.icon-secondary{font-size:50px;position:absolute;top:0;left:max(min(50% + 25px,100% - 50px),0px)}.image-card-button ion-button{float:right}.image-card-button:hover{--ion-color-base: var(--ion-color-shade) !important}.image-card-button:hover ion-icon{--ion-color-base: var(--ion-color-shade) !important}.backdrop{height:100vh;width:100vw;background:#000;position:absolute;z-index:10}.zoom-modal{-webkit-user-select:none;user-select:none}.zoom-modal .top-left{z-index:14;position:absolute;display:inline-grid;left:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .top-right{z-index:14;position:absolute;display:inline-grid;right:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .side-buttons{--side-buttons-width: 120px;--side-buttons-margin: calc(var(--side-buttons-width) / 3);z-index:13;position:absolute;top:0;bottom:0;width:var(--side-buttons-width)}.zoom-modal .side-buttons ion-icon{top:50%;color:#fff;font-size:2.5rem;position:absolute;opacity:0;transition-duration:.15s;transition-timing-function:ease-in}.zoom-modal .side-buttons:hover{cursor:pointer}.zoom-modal .side-buttons:hover ion-icon{opacity:1}.zoom-modal .side-buttons.prev{left:0}.zoom-modal .side-buttons.prev ion-icon{left:var(--side-buttons-margin)}.zoom-modal .side-buttons.next{right:0}.zoom-modal .side-buttons.next ion-icon{right:var(--side-buttons-margin)}.zoom-modal ion-slides{height:100%;background:#000}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i2.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: i2.IonSegmentButton, selector: "ion-segment-button", inputs: ["contentId", "disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonModal, selector: "ion-modal" }, { kind: "component", type: i2.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i2.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i10.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i11.NgInitDirective, selector: "[ngInit]", outputs: ["ngInit"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "directive", type: i13.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i14.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i15.ArrayLengthPipe, name: "isArrayLength" }, { kind: "pipe", type: i16.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }], animations: [fadeInAnimation, fadeInOutAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
337
337
  }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AppImageGalleryComponent, decorators: [{
338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppImageGalleryComponent, decorators: [{
339
339
  type: Component,
340
340
  args: [{ selector: 'app-image-gallery', animations: [fadeInAnimation, fadeInOutAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-toolbar color=\"light\" *ngIf=\"showToolbar\">\n <!-- Add -->\n <button\n mat-icon-button\n *ngIf=\"!readOnly && !mobile && enabled\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"add()\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <ion-buttons slot=\"end\">\n <!-- Toggle view mode -->\n <ion-segment (ionChange)=\"toggleViewMode($event)\" color=\"accent\" [value]=\"_colSize\">\n <ion-segment-button [value]=\"4\">\n <mat-icon>view_module</mat-icon>\n </ion-segment-button>\n <ion-segment-button [value]=\"12\">\n <mat-icon>view_list</mat-icon>\n </ion-segment-button>\n </ion-segment>\n </ion-buttons>\n</ion-toolbar>\n\n<div class=\"gallery-container {{ this.mode }}\">\n <div *ngIf=\"mobile && zoomActive\" class=\"backdrop\" [style.opacity]=\"zoomScale\"></div>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col *rxFor=\"let row of _data$; index as index; trackBy: trackByFn\" [size]=\"_colSize\">\n @let image = row | propertyGet: 'currentData';\n <ion-card\n #card\n class=\"image-card\"\n [class.zoom-hover]=\"!mobile\"\n [color]=\"cardColor\"\n (click)=\"clickRow(row, index)\"\n tappable\n @fadeInAnimation\n >\n <figure class=\"card-thumbnail\">\n <ion-img [src]=\"image.url || image.dataUrl\" />\n </figure>\n\n <!-- toolbar for title (when not hover) -->\n <ion-toolbar color=\"transparent\" class=\"title\" *ngIf=\"image.title\">\n <ion-label class=\"card-title\">{{ image.title }}</ion-label>\n </ion-toolbar>\n\n <!-- action toolbar (desktop only) shown when hover image -->\n <ion-toolbar #cardToolbar *ngIf=\"!mobile && !readOnly\" color=\"light\" class=\"buttons\">\n <!-- edit title button -->\n <button\n mat-button\n *ngIf=\"showTitle\"\n slot=\"start\"\n [disabled]=\"disabled\"\n (click)=\"editTitle($event, row, cardToolbar)\"\n (focusin)=\"showCardToolbar(cardToolbar)\"\n >\n <mat-icon>edit</mat-icon>\n <mat-label>\n <span *ngIf=\"row.currentData.title | isNotNilOrBlank; else editLabel\" translate>\n IMAGE.GALLERY.BTN_EDIT_TITLE\n </span>\n <ng-template #editLabel>\n <span translate>IMAGE.GALLERY.BTN_ADD_TITLE</span>\n </ng-template>\n </mat-label>\n </button>\n\n <div class=\"flex-spacer\"></div>\n\n <!-- delete button -->\n <button\n mat-icon-button\n slot=\"end\"\n class=\"ion-float-end\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n [disabled]=\"disabled\"\n (click)=\"delete($event, row)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </ion-toolbar>\n </ion-card>\n </ion-col>\n\n <ion-col *ngIf=\"showAddCardButton && !readOnly\" [size]=\"_colSize\" @fadeInAnimation>\n <ion-card class=\"image-card-button\" color=\"light\" (click)=\"add($event)\" [disabled]=\"disabled\" tappable>\n <ion-card-content>\n <div class=\"icon-container\">\n <ion-icon name=\"camera\" [color]=\"addButtonColor\"></ion-icon>\n <ion-icon name=\"add\" [color]=\"addButtonColor\" class=\"icon-secondary\"></ion-icon>\n </div>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n</div>\n\n<!-- FAB button: add -->\n<ion-fab\n slot=\"fixed\"\n vertical=\"bottom\"\n horizontal=\"end\"\n *ngIf=\"showFabButton && !readOnly\"\n [class.cdk-visually-hidden]=\"disabled\"\n @fadeInOutAnimation\n>\n <ion-fab-button color=\"tertiary\" (click)=\"add($event)\">\n <ion-icon name=\"camera\"></ion-icon>\n <ion-icon name=\"add\" class=\"icon-secondary\" style=\"left: 33px; top: 9px; font-size: 20px\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n\n<!-- Zoom modal -->\n<ion-modal #zoomModal class=\"stack-modal zoom-modal\" [class.modal-fullscreen]=\"mobile\" [class.modal-large]=\"!mobile\">\n <ng-template>\n <ion-content class=\"ion-no-padding ion-no-margin\">\n @let count = rows?.length || 0;\n <!-- Counter -->\n <div class=\"top-left\">\n <ion-label color=\"light\">{{ activeSlideIndex + 1 }} / {{ count }}</ion-label>\n </div>\n\n <!-- zoom button -->\n <div class=\"top-right\">\n @if (!mobile) {\n <ion-button (click)=\"zoom(modalSwiper, true)\" color=\"light\">\n <ion-icon slot=\"icon-only\" name=\"add\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"zoom(modalSwiper, false)\" color=\"light\">\n <ion-icon name=\"remove\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </div>\n\n <!-- navigation side buttons next/back -->\n <ng-container *ngIf=\"!mobile && (rows | isArrayLength: { greaterThan: 1 })\">\n <div class=\"side-buttons prev\" (click)=\"slidePrev(modalSwiper)\">\n <ion-icon name=\"chevron-back\"></ion-icon>\n </div>\n <div class=\"side-buttons next\" (click)=\"slideNext(modalSwiper)\">\n <ion-icon name=\"chevron-forward\"></ion-icon>\n </div>\n </ng-container>\n\n <!-- image slides -->\n <swiper-container #modalSwiper [modules]=\"swiperModules\" [zoom]=\"true\">\n <swiper-slide *ngFor=\"let row of rows; last as last\">\n <div\n class=\"swiper-zoom-container\"\n *ngIf=\"row | propertyGet: 'currentData'; let image\"\n (ngInit)=\"last && initModalSlides(modalSwiper)\"\n >\n <ion-img [src]=\"image.url || image.dataUrl\" />\n </div>\n </swiper-slide>\n </swiper-container>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar color=\"light\">\n <ion-row>\n <ion-col size=\"4\" class=\"ion-text-start\">\n <ion-button\n *ngIf=\"!readOnly\"\n (click)=\"deleteFromModal($event, modalSwiper)\"\n [disabled]=\"disabled\"\n fill=\"clear\"\n color=\"danger\"\n >\n <mat-icon slot=\"start\">delete</mat-icon>\n {{ 'COMMON.BTN_DELETE' | translate }}\n </ion-button>\n </ion-col>\n <ion-col size=\"4\"></ion-col>\n <ion-col size=\"4\" class=\"ion-text-end\">\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\" fill=\"clear\" *ngIf=\"mobile; else desktop\">\n <ion-icon slot=\"start\" name=\"close\"></ion-icon>\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n <ng-template #desktop>\n <ion-button (click)=\"zoomModal.dismiss()\" color=\"tertiary\">\n {{ 'COMMON.BTN_CLOSE' | translate }}\n </ion-button>\n </ng-template>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-modal>\n\n<ion-popover #titlePopover>\n <ng-template>\n <ion-content class=\"ion-padding\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <form [formGroup]=\"_titleForm\">\n <mat-form-field floatLabel=\"auto\">\n <mat-label translate>IMAGE.GALLERY.TITLE</mat-label>\n <input\n matInput\n formControlName=\"title\"\n [readonly]=\"disabled\"\n [appAutofocus]=\"_titleAutofocus\"\n (keydown.control.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n />\n </mat-form-field>\n </form>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"titlePopover.dismiss(null, 'CANCEL')\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button\n [fill]=\"disabled ? 'clear' : 'solid'\"\n (click)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n (keyup.enter)=\"titlePopover.dismiss(_titleForm.controls.title.value)\"\n color=\"tertiary\"\n [disabled]=\"disabled\"\n [title]=\"'COMMON.BTN_VALIDATE_WITH_SHORTCUT_HELP' | translate\"\n >\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n</ion-popover>\n", styles: [":host{--image-margin-inline: 10px}mat-toolbar,.mat-toolbar-single-row{padding:0;height:42px}ion-card{margin-left:unset;margin-right:unset;margin-inline:var(--image-margin-inline, 10px)}.image-slide{overflow:visible}.image-card{height:calc(100% - 23px);background-color:var(--ion-color-base);z-index:9;--img-scale: 1}.image-card .card-thumbnail{position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:100%;height:100%}.image-card .card-thumbnail>ion-img{min-height:100%;transition:scale .2s ease-in-out;scale:var(--img-scale);max-height:var(--img-max-height)}.image-card.zoom-hover:hover{--img-scale: 1.2}.image-card ion-toolbar{--top-offset: calc(-1 * var(--ion-toolbar-height));position:absolute}.image-card ion-toolbar.title{--padding-start: 16px;--padding-end: 16px;--ion-color-base: rgba(0, 0, 0, .45) !important;position:absolute;top:calc(100% + var(--top-offset));transition:opacity .2s ease-in-out}.image-card ion-toolbar.title ion-label{color:#fff}.image-card ion-toolbar.buttons{--padding-start: 4px;--padding-end: 4px;--ion-color-base: var(--ion-color-light) !important;position:absolute;top:100%;transition:transform .2s ease-in-out}.image-card:hover ion-toolbar.buttons,.image-card ion-toolbar.buttons.focused{transform:translateY(var(--top-offset))}.image-card-button{height:calc(100% - var(--image-margin-inline, 0px) * 2 - 3px);transition:.2s ease-in-out;max-width:250px}.image-card-button ion-card-content{height:100%}.image-card-button .icon-container{height:auto;position:relative;top:calc(50% - 75px);display:flex;align-items:center;justify-content:center}.image-card-button ion-icon:first-of-type{font-size:150px;height:150px;position:relative;top:0}.image-card-button ion-icon.icon-secondary{font-size:50px;position:absolute;top:0;left:max(min(50% + 25px,100% - 50px),0px)}.image-card-button ion-button{float:right}.image-card-button:hover{--ion-color-base: var(--ion-color-shade) !important}.image-card-button:hover ion-icon{--ion-color-base: var(--ion-color-shade) !important}.backdrop{height:100vh;width:100vw;background:#000;position:absolute;z-index:10}.zoom-modal{-webkit-user-select:none;user-select:none}.zoom-modal .top-left{z-index:14;position:absolute;display:inline-grid;left:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .top-right{z-index:14;position:absolute;display:inline-grid;right:var(--ion-padding-start, 8px);top:var(--ion-padding-start, 8px)}.zoom-modal .side-buttons{--side-buttons-width: 120px;--side-buttons-margin: calc(var(--side-buttons-width) / 3);z-index:13;position:absolute;top:0;bottom:0;width:var(--side-buttons-width)}.zoom-modal .side-buttons ion-icon{top:50%;color:#fff;font-size:2.5rem;position:absolute;opacity:0;transition-duration:.15s;transition-timing-function:ease-in}.zoom-modal .side-buttons:hover{cursor:pointer}.zoom-modal .side-buttons:hover ion-icon{opacity:1}.zoom-modal .side-buttons.prev{left:0}.zoom-modal .side-buttons.prev ion-icon{left:var(--side-buttons-margin)}.zoom-modal .side-buttons.next{right:0}.zoom-modal .side-buttons.next ion-icon{right:var(--side-buttons-margin)}.zoom-modal ion-slides{height:100%;background:#000}\n"] }]
341
341
  }], ctorParameters: () => [{ type: i1.ImageService }, { type: i2.Platform }, { type: i2.AlertController }, { type: i3.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i17.Environment, decorators: [{
@@ -385,4 +385,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
385
385
  }], onAfterEditRow: [{
386
386
  type: Output
387
387
  }] } });
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L2ltYWdlLWdhbGxlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvZ2FsbGVyeS9pbWFnZS1nYWxsZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RixPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sNENBQTRDLENBQUM7QUFHdEYsT0FBTyxFQUFtQixXQUFXLEVBQWtDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBb0IsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHlCQUF5QixF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U0FBUzt1QkFBQyxhQUFhO2dCQUVkLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50UGF0dGVybiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJsZURhdGFTb3VyY2UsIFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vaW1hZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJy4uL2ltYWdlLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgSW9uaWNTbGlkZXMsIElvbk1vZGFsLCBJb25Qb3BvdmVyLCBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IGZhZGVJbkFuaW1hdGlvbiwgZmFkZUluT3V0QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBpc0RhdGFTb3VyY2UsIExpc3RSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGVydHMgfSBmcm9tICcuLi8uLi9hbGVydHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQXBwQ29sb3JzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXIsIGVtaXRQcm9taXNlRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMnO1xuaW1wb3J0IHsgUHJlZGVmaW5lZENvbG9ycyB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IFN3aXBlciB9IGZyb20gJ3N3aXBlci90eXBlcyc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgR2FsbGVyeU1vZGUgPSAnbW9zYWljJyB8ICdsaXN0JztcblxuY29uc3QgR2FsbGVyeU1vZGVDb2xTaXplID0gT2JqZWN0LmZyZWV6ZSh7XG4gIG1vc2FpYzogNCxcbiAgbGlzdDogMTIsXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBJU3dpcGVyIGV4dGVuZHMgU3dpcGVyIHtcbiAgYWN0aXZlSW5kZXg6IG51bWJlcjtcbiAgaW1hZ2VzTG9hZGVkOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbWFnZS1nYWxsZXJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWdhbGxlcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5BbmltYXRpb24sIGZhZGVJbk91dEFuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBJbWFnZUdhbGxlcnlDb21wb25lbnQ8VCBleHRlbmRzIEltYWdlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb2xsZWN0aW9uVmlld2VyLCBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgcHJvdGVjdGVkIF9kZXN0cm95U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBfcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IFRhYmxlRGF0YVNvdXJjZTxUPjtcbiAgcHJvdGVjdGVkIF9kYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVFbGVtZW50PFQ+W10gfCBSZWFkb25seUFycmF5PFRhYmxlRWxlbWVudDxUPj4+KG51bGwpO1xuXG4gIHByb3RlY3RlZCBfY29sU2l6ZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3NlbGVjdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9wcmVzZW50aW5nRWxlbWVudDogRWxlbWVudCA9IG51bGw7XG4gIHByb3RlY3RlZCBfdGl0bGVGb3JtOiBGb3JtR3JvdXA7XG4gIHByb3RlY3RlZCBfdGl0bGVBdXRvZm9jdXMgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9zbGlkZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIF9zd2lwZXI6IFN3aXBlcjtcblxuICBwcm90ZWN0ZWQgc3dpcGVyTW9kdWxlcyA9IFtJb25pY1NsaWRlc107XG4gIHByb3RlY3RlZCB6b29tQWN0aXZlID0gZmFsc2U7XG4gIHByb3RlY3RlZCB6b29tU2NhbGUgPSAxO1xuXG4gIHZpZXdDaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDxMaXN0UmFuZ2U+O1xuXG4gIEBJbnB1dCgpIGNhcmRDb2xvcjogc3RyaW5nIHwgUHJlZGVmaW5lZENvbG9ycztcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW4gPSBudWxsO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW4gPSBudWxsO1xuICBASW5wdXQoKSBtb2RlOiBHYWxsZXJ5TW9kZSA9IG51bGw7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVEZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93VG9vbGJhciA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dGYWJCdXR0b246IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBZGRDYXJkQnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkQnV0dG9uQ29sb3I6IEFwcENvbG9ycyA9ICd0ZXJ0aWFyeSc7XG5cbiAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UoZGF0YVNvdXJjZTogVGFibGVEYXRhU291cmNlPFQsIGFueSwgYW55LCBhbnk+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UgIT09IGRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuX3N3aXRjaERhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XG4gICAgfVxuICB9XG4gIGdldCBkYXRhU291cmNlKCk6IFRhYmxlRGF0YVNvdXJjZTxULCBhbnksIGFueSwgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gIH1cbiAgZ2V0IGVuYWJsZWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IHJvd3MoKTogVGFibGVFbGVtZW50PFQ+W10gfCBSZWFkb25seUFycmF5PFRhYmxlRWxlbWVudDxUPj4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhJC52YWx1ZTtcbiAgfVxuXG4gIGdldCByb3dDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIGdldCBhY3RpdmVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFN3aXBlcigpPy5hY3RpdmVJbmRleCB8fCAwO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnem9vbU1vZGFsJykgem9vbU1vZGFsOiBJb25Nb2RhbDtcbiAgQFZpZXdDaGlsZCgndGl0bGVQb3BvdmVyJykgdGl0bGVQb3BvdmVyOiBJb25Qb3BvdmVyO1xuICBAVmlld0NoaWxkKCdtb2RhbFN3aXBlcicpIHN3aXBlclJlZjogRWxlbWVudFJlZjtcblxuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkFmdGVyQWRkUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+W10+KCk7XG4gIEBPdXRwdXQoKSBvbkFmdGVyRWRpdFJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbWFnZTogSW1hZ2VTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJvdGVjdGVkIGFsdGVyQ3RybDogQWxlcnRDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBlbnZpcm9ubWVudD86IEVudmlyb25tZW50XG4gICkge1xuICAgIHRoaXMudmlld0NoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoeyBzdGFydDogMCwgZW5kOiBOdW1iZXIuTUFYX1ZBTFVFIH0pO1xuXG4gICAgLy8gREVWIGxvZ1xuICAgIHRoaXMuZGVidWcgPSBlbnZpcm9ubWVudCAmJiAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubW9iaWxlID0gdG9Cb29sZWFuKHRoaXMubW9iaWxlLCBpc01vYmlsZSh3aW5kb3cpKTtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLm1vYmlsZSA/ICdsaXN0JyA6ICdtb3NhaWMnO1xuICAgIHRoaXMuX2NvbFNpemUgPSBHYWxsZXJ5TW9kZUNvbFNpemVbdGhpcy5tb2RlXTtcbiAgICB0aGlzLnNob3dUb29sYmFyID0gdG9Cb29sZWFuKHRoaXMuc2hvd1Rvb2xiYXIsICF0aGlzLm1vYmlsZSk7XG4gICAgdGhpcy5zaG93QWRkQ2FyZEJ1dHRvbiA9IHRvQm9vbGVhbih0aGlzLnNob3dBZGRDYXJkQnV0dG9uLCB0aGlzLm1vYmlsZSk7XG4gICAgdGhpcy5zaG93RmFiQnV0dG9uID0gdG9Cb29sZWFuKHRoaXMuc2hvd0ZhYkJ1dHRvbiwgdGhpcy5tb2JpbGUgJiYgIXRoaXMuc2hvd0FkZENhcmRCdXR0b24pO1xuXG4gICAgLy8gR2V0IG1vZGFsIHByZXNlbnRpbmcgZWxlbWVudCAoaU9TIG9ubHkpXG4gICAgdGhpcy5fcHJlc2VudGluZ0VsZW1lbnQgPSB0aGlzLm1vYmlsZSA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pb24tcGFnZScpIDogbnVsbDtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlICYmICF0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29ic2VydmVSZW5kZXJDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zbGlkZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kaXNjb25uZWN0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW1hZ2VzID0gYXdhaXQgdGhpcy5pbWFnZS5hZGQoZXZlbnQpO1xuXG4gICAgaWYgKGlzRW1wdHlBcnJheShpbWFnZXMpKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmluZm8oYFtpbWFnZS1nYWxsZXJ5XSBBZGRpbmcgbmV3ICR7aW1hZ2VzLmxlbmd0aH0gaW1hZ2UocylgLCBpbWFnZXMpO1xuXG4gICAgY29uc3Qgcm93czogVGFibGVFbGVtZW50PFQ+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5jcmVhdGVOZXcoKTtcbiAgICAgIHJvdy5jdXJyZW50RGF0YSA9IGltYWdlIGFzIHVua25vd24gYXMgVDtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgY29uc3QgYWRkZWQgPSBhd2FpdCByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbaW1hZ2UtZ2FsbGVyeV0gQ2Fubm90IGNvbmZpcm0gbmV3IGltYWdlIScpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9uQWZ0ZXJBZGRSb3dzLmVtaXQocm93cyk7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZXZlbnQ6IEV2ZW50LCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQgfHwgdGhpcy5yZWFkT25seSkgcmV0dXJuIGZhbHNlO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLmNhbkRlbGV0ZVJvd3MoW3Jvd10pO1xuICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgZGVsZXRlZDogYm9vbGVhbjtcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbaW1hZ2UtZ2FsbGVyeV0gUmVtb3ZpbmcgbmV3IGltYWdlJyk7XG4gICAgICBkZWxldGVkID0gYXdhaXQgcm93LmNhbmNlbE9yRGVsZXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW2ltYWdlLWdhbGxlcnldIFJlbW92aW5nIGltYWdlIChhdCAjJyArIHJvdy5pZCArICcpJyk7XG4gICAgICBkZWxldGVkID0gYXdhaXQgcm93LmRlbGV0ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgdG9nZ2xlVmlld01vZGUoXz86IEV2ZW50KSB7XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICB0aGlzLm1vZGUgPSAnbW9zYWljJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLm1vZGUgPSAnbGlzdCc7XG4gICAgfVxuICAgIHRoaXMuX2NvbFNpemUgPSBHYWxsZXJ5TW9kZUNvbFNpemVbdGhpcy5tb2RlXTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfVxuXG4gIGFzeW5jIGVkaXRUaXRsZShldmVudDogTW91c2VFdmVudCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIGNhcmRUb29sYmFyOiBhbnkpIHtcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQ/LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zaG93Q2FyZFRvb2xiYXIoY2FyZFRvb2xiYXIpO1xuXG4gICAgY29uc3QgdGl0bGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKHJvdy5jdXJyZW50RGF0YS50aXRsZSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpXSkpO1xuICAgIHRoaXMuX3RpdGxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoeyB0aXRsZTogdGl0bGVDb250cm9sIH0pO1xuICAgIHRoaXMuX3RpdGxlQXV0b2ZvY3VzID0gdGhpcy5tb2JpbGUgJiYgdGhpcy5lbmFibGVkICYmICF0aGlzLnJlYWRPbmx5O1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgYXdhaXQgdGhpcy50aXRsZVBvcG92ZXIucHJlc2VudCgpO1xuXG4gICAgY29uc3QgeyBkYXRhLCByb2xlIH0gPSBhd2FpdCB0aGlzLnRpdGxlUG9wb3Zlci5vbkRpZERpc21pc3MoKTtcblxuICAgIGlmICghcm9sZSB8fCByb2xlICE9PSAnQ0FOQ0VMJykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2ltYWdlLWdhbGxlcnldIFVzZXIgc2V0IHRpdGxlOiAnICsgZGF0YSk7XG4gICAgICByb3cuY3VycmVudERhdGEudGl0bGUgPSBkYXRhO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMub25BZnRlckVkaXRSb3cuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIC8vIEhpZGUgdGhlIHRvb2xiYXIsIGJlY2F1c2UgdGhlIGZvY3VzIGhhdmUgYmVlbiBnaXZlbiB0byB0aGUgZXZlbnQncyBvcmlnaW4gKHRoZSBlZGl0IGJ1dHRvbilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGlkZUNhcmRUb29sYmFyKGNhcmRUb29sYmFyKSwgNzUwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93Q2FyZFRvb2xiYXIoY2FyZFRvb2xiYXI6IGFueSkge1xuICAgIGNvbnN0IGVsID0gY2FyZFRvb2xiYXJbJ2VsJ10gYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZm9jdXNlZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhpZGVDYXJkVG9vbGJhcihjYXJkVG9vbGJhcjogYW55KSB7XG4gICAgY29uc3QgZWwgPSBjYXJkVG9vbGJhclsnZWwnXSBhcyBIVE1MRWxlbWVudDtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1c2VkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3N3aXRjaERhdGFTb3VyY2UoZGF0YVNvdXJjZTogVGFibGVEYXRhU291cmNlPFQ+KSB7XG4gICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLl9kYXRhU291cmNlKSkge1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kaXNjb25uZWN0KHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfb2JzZXJ2ZVJlbmRlckNoYW5nZXMoKSB7XG4gICAgLy8gSWYgbm8gZGF0YSBzb3VyY2UgaGFzIGJlZW4gc2V0LCB0aGVyZSBpcyBub3RoaW5nIHRvIG9ic2VydmUgZm9yIGNoYW5nZXMuXG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRhdGFTdHJlYW06IE9ic2VydmFibGU8VGFibGVFbGVtZW50PFQ+W10gfCBSZWFkb25seUFycmF5PFRhYmxlRWxlbWVudDxUPj4+O1xuICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgZGF0YVN0cmVhbSA9IHRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpO1xuICAgIH1cbiAgICBpZiAoZGF0YVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyB0aGlzLmdldFRhYmxlVW5rbm93bkRhdGFTb3VyY2VFcnJvcigpO1xuICAgIH1cbiAgICB0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uID0gZGF0YVN0cmVhbS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95U3ViamVjdCkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2ltYWdlLWdhbGxlcnldIFJlY2VpdmVkIG5ldyByb3dzJywgZGF0YSk7XG4gICAgICB0aGlzLl9kYXRhJC5uZXh0KGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRhYmxlVW5rbm93bkRhdGFTb3VyY2VFcnJvcigpIHtcbiAgICByZXR1cm4gRXJyb3IoYFByb3ZpZGVkIGRhdGEgc291cmNlIGRpZCBub3QgbWF0Y2ggYW4gYXJyYXksIE9ic2VydmFibGUsIG9yIERhdGFTb3VyY2VgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjbGlja1Jvdyhyb3c6IFRhYmxlRWxlbWVudDxUPiwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcbiAgICBhd2FpdCB0aGlzLnpvb21Nb2RhbC5wcmVzZW50KCk7XG4gICAgYXdhaXQgdGhpcy56b29tTW9kYWwub25EaWREaXNtaXNzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZlU2xpZGVJbmRleCA9IDA7XG5cbiAgcHJvdGVjdGVkIGdldFN3aXBlcihzd2lwZXJFbGVtZW50PzogYW55KTogU3dpcGVyIHtcbiAgICB0aGlzLl9zd2lwZXIgPSAoc3dpcGVyRWxlbWVudCB8fCB0aGlzLnN3aXBlclJlZj8ubmF0aXZlRWxlbWVudCk/LnN3aXBlciB8fCB0aGlzLl9zd2lwZXI7XG4gICAgcmV0dXJuIHRoaXMuX3N3aXBlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBpbml0TW9kYWxTbGlkZXMoc3dpcGVyRWxlbWVudDogYW55KSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcy5nZXRTd2lwZXIoc3dpcGVyRWxlbWVudCk7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkUm93SW5kZXggPiAwKSB7XG4gICAgICBhd2FpdCBzd2lwZXIuc2xpZGVUbyh0aGlzLl9zZWxlY3RlZFJvd0luZGV4LCAwKTtcbiAgICB9XG4gICAgdGhpcy5fc2xpZGVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3NsaWRlc1N1YnNjcmlwdGlvbiA9IGZyb21FdmVudFBhdHRlcm4oKGhhbmRsZXIpID0+IHN3aXBlci5vbignc2xpZGVDaGFuZ2VUcmFuc2l0aW9uU3RhcnQnLCBoYW5kbGVyKSkuc3Vic2NyaWJlKChhcmcpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlU2xpZGVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgem9vbShzd2lwZXJFbGVtZW50OiBhbnksIHpvb21JbjogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbaW1hZ2UtZ2FsbGVyeV0gem9vbSAnICsgKHpvb21JbiA/ICdpbicgOiAnb3V0JyksIHN3aXBlckVsZW1lbnQpO1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXMuZ2V0U3dpcGVyKHN3aXBlckVsZW1lbnQpO1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBpZiAoem9vbUluKSB6b29tLmluKCk7XG4gICAgZWxzZSB6b29tLm91dCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlbGV0ZUZyb21Nb2RhbChldmVudCwgc3dpcGVyRWxlbWVudDogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcy5nZXRTd2lwZXIoc3dpcGVyRWxlbWVudCk7XG4gICAgY29uc3QgY3VycmVudFJvdyA9IHRoaXMucm93cy5maW5kKChyb3csIGluZGV4KSA9PiBpbmRleCA9PT0gc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICBpZiAoIWN1cnJlbnRSb3cpIHJldHVybiBmYWxzZTsgLy8gUm93IG5vdCBmb3VuZFxuXG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMuZGVsZXRlKGV2ZW50LCBjdXJyZW50Um93KTtcblxuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLnpvb21Nb2RhbC5kaXNtaXNzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlc2V0IHRoZSB6b29tXG4gICAgICBzd2lwZXIuem9vbS5vdXQoKTtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNsaWRlUHJldihzd2lwZXJFbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzLmdldFN3aXBlcihzd2lwZXJFbGVtZW50KTtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IDApIHtcbiAgICAgIC8vIExvb3AgdG8gbGFzdFxuICAgICAgYXdhaXQgc3dpcGVyLnNsaWRlVG8odGhpcy5yb3dzLmxlbmd0aCAtIDEsIDAgLypubyB0cmFuc2l0aW9uLCB0byBhdm9pZCBhIFwicmV2ZXJ0XCIgZWZmZWN0Ki8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNsaWRlTmV4dChzd2lwZXJFbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzLmdldFN3aXBlcihzd2lwZXJFbGVtZW50KTtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IHRoaXMucm93cy5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBMb29wIHRvIGZpcnN0XG4gICAgICBhd2FpdCBzd2lwZXIuc2xpZGVUbygwLCAwIC8qbm8gdHJhbnNpdGlvbiwgdG8gYXZvaWQgYSBcInJldmVydFwiIGVmZmVjdCovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5EZWxldGVSb3dzKHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MsICdjYW5EZWxldGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7IHJvd3MgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IEFsZXJ0cy5hc2tEZWxldGVDb25maXJtYXRpb24odGhpcy5hbHRlckN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gICAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuIGZhbHNlOyAvLyBDYW5jZWxsZWRcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIiAqbmdJZj1cInNob3dUb29sYmFyXCI+XG4gIDwhLS0gQWRkIC0tPlxuICA8YnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgKm5nSWY9XCIhcmVhZE9ubHkgJiYgIW1vYmlsZSAmJiBlbmFibGVkXCJcbiAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQUREJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cImFkZCgpXCJcbiAgPlxuICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cblxuICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgIDwhLS0gVG9nZ2xlIHZpZXcgbW9kZSAtLT5cbiAgICA8aW9uLXNlZ21lbnQgKGlvbkNoYW5nZSk9XCJ0b2dnbGVWaWV3TW9kZSgkZXZlbnQpXCIgY29sb3I9XCJhY2NlbnRcIiBbdmFsdWVdPVwiX2NvbFNpemVcIj5cbiAgICAgIDxpb24tc2VnbWVudC1idXR0b24gW3ZhbHVlXT1cIjRcIj5cbiAgICAgICAgPG1hdC1pY29uPnZpZXdfbW9kdWxlPC9tYXQtaWNvbj5cbiAgICAgIDwvaW9uLXNlZ21lbnQtYnV0dG9uPlxuICAgICAgPGlvbi1zZWdtZW50LWJ1dHRvbiBbdmFsdWVdPVwiMTJcIj5cbiAgICAgICAgPG1hdC1pY29uPnZpZXdfbGlzdDwvbWF0LWljb24+XG4gICAgICA8L2lvbi1zZWdtZW50LWJ1dHRvbj5cbiAgICA8L2lvbi1zZWdtZW50PlxuICA8L2lvbi1idXR0b25zPlxuPC9pb24tdG9vbGJhcj5cblxuPGRpdiBjbGFzcz1cImdhbGxlcnktY29udGFpbmVyIHt7IHRoaXMubW9kZSB9fVwiPlxuICA8ZGl2ICpuZ0lmPVwibW9iaWxlICYmIHpvb21BY3RpdmVcIiBjbGFzcz1cImJhY2tkcm9wXCIgW3N0eWxlLm9wYWNpdHldPVwiem9vbVNjYWxlXCI+PC9kaXY+XG5cbiAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICA8aW9uLXJvdz5cbiAgICAgIDxpb24tY29sICpyeEZvcj1cImxldCByb3cgb2YgX2RhdGEkOyBpbmRleCBhcyBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCIgW3NpemVdPVwiX2NvbFNpemVcIj5cbiAgICAgICAgQGxldCBpbWFnZSA9IHJvdyB8IHByb3BlcnR5R2V0OiAnY3VycmVudERhdGEnO1xuICAgICAgICA8aW9uLWNhcmRcbiAgICAgICAgICAjY2FyZFxuICAgICAgICAgIGNsYXNzPVwiaW1hZ2UtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnpvb20taG92ZXJdPVwiIW1vYmlsZVwiXG4gICAgICAgICAgW2NvbG9yXT1cImNhcmRDb2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsaWNrUm93KHJvdywgaW5kZXgpXCJcbiAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgIEBmYWRlSW5BbmltYXRpb25cbiAgICAgICAgPlxuICAgICAgICAgIDxmaWd1cmUgY2xhc3M9XCJjYXJkLXRodW1ibmFpbFwiPlxuICAgICAgICAgICAgPGlvbi1pbWcgW3NyY109XCJpbWFnZS51cmwgfHwgaW1hZ2UuZGF0YVVybFwiIC8+XG4gICAgICAgICAgPC9maWd1cmU+XG5cbiAgICAgICAgICA8IS0tIHRvb2xiYXIgZm9yIHRpdGxlICh3aGVuIG5vdCBob3ZlcikgLS0+XG4gICAgICAgICAgPGlvbi10b29sYmFyIGNvbG9yPVwidHJhbnNwYXJlbnRcIiBjbGFzcz1cInRpdGxlXCIgKm5nSWY9XCJpbWFnZS50aXRsZVwiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBpbWFnZS50aXRsZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgIDwvaW9uLXRvb2xiYXI+XG5cbiAgICAgICAgICA8IS0tIGFjdGlvbiB0b29sYmFyIChkZXNrdG9wIG9ubHkpIHNob3duIHdoZW4gaG92ZXIgaW1hZ2UgLS0+XG4gICAgICAgICAgPGlvbi10b29sYmFyICNjYXJkVG9vbGJhciAqbmdJZj1cIiFtb2JpbGUgJiYgIXJlYWRPbmx5XCIgY29sb3I9XCJsaWdodFwiIGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPCEtLSBlZGl0IHRpdGxlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInNob3dUaXRsZVwiXG4gICAgICAgICAgICAgIHNsb3Q9XCJzdGFydFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJlZGl0VGl0bGUoJGV2ZW50LCByb3csIGNhcmRUb29sYmFyKVwiXG4gICAgICAgICAgICAgIChmb2N1c2luKT1cInNob3dDYXJkVG9vbGJhcihjYXJkVG9vbGJhcilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cuY3VycmVudERhdGEudGl0bGUgfCBpc05vdE5pbE9yQmxhbms7IGVsc2UgZWRpdExhYmVsXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgSU1BR0UuR0FMTEVSWS5CVE5fRURJVF9USVRMRVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5JTUFHRS5HQUxMRVJZLkJUTl9BRERfVElUTEU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2lvbi10b29sYmFyPlxuICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgPC9pb24tY29sPlxuXG4gICAgICA8aW9uLWNvbCAqbmdJZj1cInNob3dBZGRDYXJkQnV0dG9uICYmICFyZWFkT25seVwiIFtzaXplXT1cIl9jb2xTaXplXCIgQGZhZGVJbkFuaW1hdGlvbj5cbiAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiaW1hZ2UtY2FyZC1idXR0b25cIiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImFkZCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgdGFwcGFibGU+XG4gICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjYW1lcmFcIiBbY29sb3JdPVwiYWRkQnV0dG9uQ29sb3JcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFkZFwiIFtjb2xvcl09XCJhZGRCdXR0b25Db2xvclwiIGNsYXNzPVwiaWNvbi1zZWNvbmRhcnlcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tZ3JpZD5cbjwvZGl2PlxuXG48IS0tIEZBQiBidXR0b246IGFkZCAtLT5cbjxpb24tZmFiXG4gIHNsb3Q9XCJmaXhlZFwiXG4gIHZlcnRpY2FsPVwiYm90dG9tXCJcbiAgaG9yaXpvbnRhbD1cImVuZFwiXG4gICpuZ0lmPVwic2hvd0ZhYkJ1dHRvbiAmJiAhcmVhZE9ubHlcIlxuICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJkaXNhYmxlZFwiXG4gIEBmYWRlSW5PdXRBbmltYXRpb25cbj5cbiAgPGlvbi1mYWItYnV0dG9uIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwiYWRkKCRldmVudClcIj5cbiAgICA8aW9uLWljb24gbmFtZT1cImNhbWVyYVwiPjwvaW9uLWljb24+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJhZGRcIiBjbGFzcz1cImljb24tc2Vjb25kYXJ5XCIgc3R5bGU9XCJsZWZ0OiAzM3B4OyB0b3A6IDlweDsgZm9udC1zaXplOiAyMHB4XCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvaW9uLWZhYj5cblxuPCEtLSBab29tIG1vZGFsIC0tPlxuPGlvbi1tb2RhbCAjem9vbU1vZGFsIGNsYXNzPVwic3RhY2stbW9kYWwgem9vbS1tb2RhbFwiIFtjbGFzcy5tb2RhbC1mdWxsc2NyZWVuXT1cIm1vYmlsZVwiIFtjbGFzcy5tb2RhbC1sYXJnZV09XCIhbW9iaWxlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBpb24tbm8tbWFyZ2luXCI+XG4gICAgICBAbGV0IGNvdW50ID0gcm93cz8ubGVuZ3RoIHx8IDA7XG4gICAgICA8IS0tIENvdW50ZXIgIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRvcC1sZWZ0XCI+XG4gICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJsaWdodFwiPnt7IGFjdGl2ZVNsaWRlSW5kZXggKyAxIH19IC8ge3sgY291bnQgfX08L2lvbi1sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIHpvb20gYnV0dG9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRvcC1yaWdodFwiPlxuICAgICAgICBAaWYgKCFtb2JpbGUpIHtcbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiem9vbShtb2RhbFN3aXBlciwgdHJ1ZSlcIiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhZGRcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiem9vbShtb2RhbFN3aXBlciwgZmFsc2UpXCIgY29sb3I9XCJsaWdodFwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJyZW1vdmVcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIG5hdmlnYXRpb24gc2lkZSBidXR0b25zIG5leHQvYmFjayAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbW9iaWxlICYmIChyb3dzIHwgaXNBcnJheUxlbmd0aDogeyBncmVhdGVyVGhhbjogMSB9KVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1idXR0b25zIHByZXZcIiAoY2xpY2spPVwic2xpZGVQcmV2KG1vZGFsU3dpcGVyKVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLWJ1dHRvbnMgbmV4dFwiIChjbGljayk9XCJzbGlkZU5leHQobW9kYWxTd2lwZXIpXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmRcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGltYWdlIHNsaWRlcyAtLT5cbiAgICAgIDxzd2lwZXItY29udGFpbmVyICNtb2RhbFN3aXBlciBbbW9kdWxlc109XCJzd2lwZXJNb2R1bGVzXCIgW3pvb21dPVwidHJ1ZVwiPlxuICAgICAgICA8c3dpcGVyLXNsaWRlICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGFzdCBhcyBsYXN0XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzd2lwZXItem9vbS1jb250YWluZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJyb3cgfCBwcm9wZXJ0eUdldDogJ2N1cnJlbnREYXRhJzsgbGV0IGltYWdlXCJcbiAgICAgICAgICAgIChuZ0luaXQpPVwibGFzdCAmJiBpbml0TW9kYWxTbGlkZXMobW9kYWxTd2lwZXIpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW9uLWltZyBbc3JjXT1cImltYWdlLnVybCB8fCBpbWFnZS5kYXRhVXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zd2lwZXItc2xpZGU+XG4gICAgICA8L3N3aXBlci1jb250YWluZXI+XG4gICAgPC9pb24tY29udGVudD5cblxuICAgIDxpb24tZm9vdGVyPlxuICAgICAgPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIj5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIiBjbGFzcz1cImlvbi10ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGcm9tTW9kYWwoJGV2ZW50LCBtb2RhbFN3aXBlcilcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICB7eyAnQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+PC9pb24tY29sPlxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCIgY2xhc3M9XCJpb24tdGV4dC1lbmRcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJ6b29tTW9kYWwuZGlzbWlzcygpXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIGZpbGw9XCJjbGVhclwiICpuZ0lmPVwibW9iaWxlOyBlbHNlIGRlc2t0b3BcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7ICdDT01NT04uQlROX0NMT1NFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZXNrdG9wPlxuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiem9vbU1vZGFsLmRpc21pc3MoKVwiIGNvbG9yPVwidGVydGlhcnlcIj5cbiAgICAgICAgICAgICAgICB7eyAnQ09NTU9OLkJUTl9DTE9TRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24tZm9vdGVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjxpb24tcG9wb3ZlciAjdGl0bGVQb3BvdmVyPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiX3RpdGxlRm9ybVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cImF1dG9cIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5JTUFHRS5HQUxMRVJZLlRJVExFPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwiX3RpdGxlQXV0b2ZvY3VzXCJcbiAgICAgICAgICAgIChrZXlkb3duLmNvbnRyb2wuZW50ZXIpPVwidGl0bGVQb3BvdmVyLmRpc21pc3MoX3RpdGxlRm9ybS5jb250cm9scy50aXRsZS52YWx1ZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9pb24tY29udGVudD5cblxuICAgIDxpb24tZm9vdGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgICAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cblxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwidGl0bGVQb3BvdmVyLmRpc21pc3MobnVsbCwgJ0NBTkNFTCcpXCI+XG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0FOQ0VMPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBbZmlsbF09XCJkaXNhYmxlZCA/ICdjbGVhcicgOiAnc29saWQnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRpdGxlUG9wb3Zlci5kaXNtaXNzKF90aXRsZUZvcm0uY29udHJvbHMudGl0bGUudmFsdWUpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInRpdGxlUG9wb3Zlci5kaXNtaXNzKF90aXRsZUZvcm0uY29udHJvbHMudGl0bGUudmFsdWUpXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9WQUxJREFURV9XSVRIX1NIT1JUQ1VUX0hFTFAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9WQUxJREFURTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPC9pb24tcm93PlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1mb290ZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1wb3BvdmVyPlxuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L2ltYWdlLWdhbGxlcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvZ2FsbGVyeS9pbWFnZS1nYWxsZXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1RixPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sNENBQTRDLENBQUM7QUFHdEYsT0FBTyxFQUFtQixXQUFXLEVBQWtDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBb0IsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHlCQUF5QixF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U0FBUzt1QkFBQyxhQUFhO2dCQUVkLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50UGF0dGVybiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJsZURhdGFTb3VyY2UsIFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vaW1hZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJy4uL2ltYWdlLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgSW9uaWNTbGlkZXMsIElvbk1vZGFsLCBJb25Qb3BvdmVyLCBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IGZhZGVJbkFuaW1hdGlvbiwgZmFkZUluT3V0QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBpc0RhdGFTb3VyY2UsIExpc3RSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGVydHMgfSBmcm9tICcuLi8uLi9hbGVydHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQXBwQ29sb3JzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXIsIGVtaXRQcm9taXNlRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMnO1xuaW1wb3J0IHsgUHJlZGVmaW5lZENvbG9ycyB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IFN3aXBlciB9IGZyb20gJ3N3aXBlci90eXBlcyc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgR2FsbGVyeU1vZGUgPSAnbW9zYWljJyB8ICdsaXN0JztcblxuY29uc3QgR2FsbGVyeU1vZGVDb2xTaXplID0gT2JqZWN0LmZyZWV6ZSh7XG4gIG1vc2FpYzogNCxcbiAgbGlzdDogMTIsXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBJU3dpcGVyIGV4dGVuZHMgU3dpcGVyIHtcbiAgYWN0aXZlSW5kZXg6IG51bWJlcjtcbiAgaW1hZ2VzTG9hZGVkOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbWFnZS1nYWxsZXJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWdhbGxlcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5BbmltYXRpb24sIGZhZGVJbk91dEFuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBJbWFnZUdhbGxlcnlDb21wb25lbnQ8VCBleHRlbmRzIEltYWdlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb2xsZWN0aW9uVmlld2VyLCBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgcHJvdGVjdGVkIF9kZXN0cm95U3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBfcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IFRhYmxlRGF0YVNvdXJjZTxUPjtcbiAgcHJvdGVjdGVkIF9kYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVFbGVtZW50PFQ+W10gfCBSZWFkb25seUFycmF5PFRhYmxlRWxlbWVudDxUPj4+KG51bGwpO1xuXG4gIHByb3RlY3RlZCBfY29sU2l6ZTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3NlbGVjdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9wcmVzZW50aW5nRWxlbWVudDogRWxlbWVudCA9IG51bGw7XG4gIHByb3RlY3RlZCBfdGl0bGVGb3JtOiBGb3JtR3JvdXA7XG4gIHByb3RlY3RlZCBfdGl0bGVBdXRvZm9jdXMgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9zbGlkZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIF9zd2lwZXI6IFN3aXBlcjtcblxuICBwcm90ZWN0ZWQgc3dpcGVyTW9kdWxlcyA9IFtJb25pY1NsaWRlc107XG4gIHByb3RlY3RlZCB6b29tQWN0aXZlID0gZmFsc2U7XG4gIHByb3RlY3RlZCB6b29tU2NhbGUgPSAxO1xuXG4gIHZpZXdDaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDxMaXN0UmFuZ2U+O1xuXG4gIEBJbnB1dCgpIGNhcmRDb2xvcjogc3RyaW5nIHwgUHJlZGVmaW5lZENvbG9ycztcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW4gPSBudWxsO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW4gPSBudWxsO1xuICBASW5wdXQoKSBtb2RlOiBHYWxsZXJ5TW9kZSA9IG51bGw7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVEZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93VG9vbGJhciA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dGYWJCdXR0b246IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBZGRDYXJkQnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkQnV0dG9uQ29sb3I6IEFwcENvbG9ycyA9ICd0ZXJ0aWFyeSc7XG5cbiAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UoZGF0YVNvdXJjZTogVGFibGVEYXRhU291cmNlPFQsIGFueSwgYW55LCBhbnk+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UgIT09IGRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuX3N3aXRjaERhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XG4gICAgfVxuICB9XG4gIGdldCBkYXRhU291cmNlKCk6IFRhYmxlRGF0YVNvdXJjZTxULCBhbnksIGFueSwgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gIH1cbiAgZ2V0IGVuYWJsZWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IHJvd3MoKTogVGFibGVFbGVtZW50PFQ+W10gfCBSZWFkb25seUFycmF5PFRhYmxlRWxlbWVudDxUPj4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhJC52YWx1ZTtcbiAgfVxuXG4gIGdldCByb3dDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIGdldCBhY3RpdmVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFN3aXBlcigpPy5hY3RpdmVJbmRleCB8fCAwO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnem9vbU1vZGFsJykgem9vbU1vZGFsOiBJb25Nb2RhbDtcbiAgQFZpZXdDaGlsZCgndGl0bGVQb3BvdmVyJykgdGl0bGVQb3BvdmVyOiBJb25Qb3BvdmVyO1xuICBAVmlld0NoaWxkKCdtb2RhbFN3aXBlcicpIHN3aXBlclJlZjogRWxlbWVudFJlZjtcblxuICBAT3V0cHV0KCkgb25CZWZvcmVEZWxldGVSb3dzID0gY3JlYXRlUHJvbWlzZUV2ZW50RW1pdHRlcjxib29sZWFuLCB7IHJvd3M6IFRhYmxlRWxlbWVudDxUPltdIH0+KCk7XG4gIEBPdXRwdXQoKSBvbkFmdGVyQWRkUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+W10+KCk7XG4gIEBPdXRwdXQoKSBvbkFmdGVyRWRpdFJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFbGVtZW50PFQ+PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbWFnZTogSW1hZ2VTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJvdGVjdGVkIGFsdGVyQ3RybDogQWxlcnRDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBlbnZpcm9ubWVudD86IEVudmlyb25tZW50XG4gICkge1xuICAgIHRoaXMudmlld0NoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoeyBzdGFydDogMCwgZW5kOiBOdW1iZXIuTUFYX1ZBTFVFIH0pO1xuXG4gICAgLy8gREVWIGxvZ1xuICAgIHRoaXMuZGVidWcgPSBlbnZpcm9ubWVudCAmJiAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubW9iaWxlID0gdG9Cb29sZWFuKHRoaXMubW9iaWxlLCBpc01vYmlsZSh3aW5kb3cpKTtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLm1vYmlsZSA/ICdsaXN0JyA6ICdtb3NhaWMnO1xuICAgIHRoaXMuX2NvbFNpemUgPSBHYWxsZXJ5TW9kZUNvbFNpemVbdGhpcy5tb2RlXTtcbiAgICB0aGlzLnNob3dUb29sYmFyID0gdG9Cb29sZWFuKHRoaXMuc2hvd1Rvb2xiYXIsICF0aGlzLm1vYmlsZSk7XG4gICAgdGhpcy5zaG93QWRkQ2FyZEJ1dHRvbiA9IHRvQm9vbGVhbih0aGlzLnNob3dBZGRDYXJkQnV0dG9uLCB0aGlzLm1vYmlsZSk7XG4gICAgdGhpcy5zaG93RmFiQnV0dG9uID0gdG9Cb29sZWFuKHRoaXMuc2hvd0ZhYkJ1dHRvbiwgdGhpcy5tb2JpbGUgJiYgIXRoaXMuc2hvd0FkZENhcmRCdXR0b24pO1xuXG4gICAgLy8gR2V0IG1vZGFsIHByZXNlbnRpbmcgZWxlbWVudCAoaU9TIG9ubHkpXG4gICAgdGhpcy5fcHJlc2VudGluZ0VsZW1lbnQgPSB0aGlzLm1vYmlsZSA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pb24tcGFnZScpIDogbnVsbDtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlICYmICF0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29ic2VydmVSZW5kZXJDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zbGlkZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kaXNjb25uZWN0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW1hZ2VzID0gYXdhaXQgdGhpcy5pbWFnZS5hZGQoZXZlbnQpO1xuXG4gICAgaWYgKGlzRW1wdHlBcnJheShpbWFnZXMpKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmluZm8oYFtpbWFnZS1nYWxsZXJ5XSBBZGRpbmcgbmV3ICR7aW1hZ2VzLmxlbmd0aH0gaW1hZ2UocylgLCBpbWFnZXMpO1xuXG4gICAgY29uc3Qgcm93czogVGFibGVFbGVtZW50PFQ+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5jcmVhdGVOZXcoKTtcbiAgICAgIHJvdy5jdXJyZW50RGF0YSA9IGltYWdlIGFzIHVua25vd24gYXMgVDtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgY29uc3QgYWRkZWQgPSBhd2FpdCByb3cuY29uZmlybUVkaXRDcmVhdGUoKTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbaW1hZ2UtZ2FsbGVyeV0gQ2Fubm90IGNvbmZpcm0gbmV3IGltYWdlIScpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9uQWZ0ZXJBZGRSb3dzLmVtaXQocm93cyk7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZXZlbnQ6IEV2ZW50LCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQgfHwgdGhpcy5yZWFkT25seSkgcmV0dXJuIGZhbHNlO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLmNhbkRlbGV0ZVJvd3MoW3Jvd10pO1xuICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgZGVsZXRlZDogYm9vbGVhbjtcbiAgICBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgY29uc29sZS5pbmZvKCdbaW1hZ2UtZ2FsbGVyeV0gUmVtb3ZpbmcgbmV3IGltYWdlJyk7XG4gICAgICBkZWxldGVkID0gYXdhaXQgcm93LmNhbmNlbE9yRGVsZXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW2ltYWdlLWdhbGxlcnldIFJlbW92aW5nIGltYWdlIChhdCAjJyArIHJvdy5pZCArICcpJyk7XG4gICAgICBkZWxldGVkID0gYXdhaXQgcm93LmRlbGV0ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgdG9nZ2xlVmlld01vZGUoXz86IEV2ZW50KSB7XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICB0aGlzLm1vZGUgPSAnbW9zYWljJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLm1vZGUgPSAnbGlzdCc7XG4gICAgfVxuICAgIHRoaXMuX2NvbFNpemUgPSBHYWxsZXJ5TW9kZUNvbFNpemVbdGhpcy5tb2RlXTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfVxuXG4gIGFzeW5jIGVkaXRUaXRsZShldmVudDogTW91c2VFdmVudCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIGNhcmRUb29sYmFyOiBhbnkpIHtcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQ/LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zaG93Q2FyZFRvb2xiYXIoY2FyZFRvb2xiYXIpO1xuXG4gICAgY29uc3QgdGl0bGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKHJvdy5jdXJyZW50RGF0YS50aXRsZSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpXSkpO1xuICAgIHRoaXMuX3RpdGxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoeyB0aXRsZTogdGl0bGVDb250cm9sIH0pO1xuICAgIHRoaXMuX3RpdGxlQXV0b2ZvY3VzID0gdGhpcy5tb2JpbGUgJiYgdGhpcy5lbmFibGVkICYmICF0aGlzLnJlYWRPbmx5O1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgYXdhaXQgdGhpcy50aXRsZVBvcG92ZXIucHJlc2VudCgpO1xuXG4gICAgY29uc3QgeyBkYXRhLCByb2xlIH0gPSBhd2FpdCB0aGlzLnRpdGxlUG9wb3Zlci5vbkRpZERpc21pc3MoKTtcblxuICAgIGlmICghcm9sZSB8fCByb2xlICE9PSAnQ0FOQ0VMJykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2ltYWdlLWdhbGxlcnldIFVzZXIgc2V0IHRpdGxlOiAnICsgZGF0YSk7XG4gICAgICByb3cuY3VycmVudERhdGEudGl0bGUgPSBkYXRhO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMub25BZnRlckVkaXRSb3cuZW1pdChyb3cpO1xuICAgIH1cblxuICAgIC8vIEhpZGUgdGhlIHRvb2xiYXIsIGJlY2F1c2UgdGhlIGZvY3VzIGhhdmUgYmVlbiBnaXZlbiB0byB0aGUgZXZlbnQncyBvcmlnaW4gKHRoZSBlZGl0IGJ1dHRvbilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGlkZUNhcmRUb29sYmFyKGNhcmRUb29sYmFyKSwgNzUwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93Q2FyZFRvb2xiYXIoY2FyZFRvb2xiYXI6IGFueSkge1xuICAgIGNvbnN0IGVsID0gY2FyZFRvb2xiYXJbJ2VsJ10gYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZm9jdXNlZCcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhpZGVDYXJkVG9vbGJhcihjYXJkVG9vbGJhcjogYW55KSB7XG4gICAgY29uc3QgZWwgPSBjYXJkVG9vbGJhclsnZWwnXSBhcyBIVE1MRWxlbWVudDtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1c2VkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3N3aXRjaERhdGFTb3VyY2UoZGF0YVNvdXJjZTogVGFibGVEYXRhU291cmNlPFQ+KSB7XG4gICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLl9kYXRhU291cmNlKSkge1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kaXNjb25uZWN0KHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfb2JzZXJ2ZVJlbmRlckNoYW5nZXMoKSB7XG4gICAgLy8gSWYgbm8gZGF0YSBzb3VyY2UgaGFzIGJlZW4gc2V0LCB0aGVyZSBpcyBub3RoaW5nIHRvIG9ic2VydmUgZm9yIGNoYW5nZXMuXG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGRhdGFTdHJlYW06IE9ic2VydmFibGU8VGFibGVFbGVtZW50PFQ+W10gfCBSZWFkb25seUFycmF5PFRhYmxlRWxlbWVudDxUPj4+O1xuICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgZGF0YVN0cmVhbSA9IHRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpO1xuICAgIH1cbiAgICBpZiAoZGF0YVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyB0aGlzLmdldFRhYmxlVW5rbm93bkRhdGFTb3VyY2VFcnJvcigpO1xuICAgIH1cbiAgICB0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uID0gZGF0YVN0cmVhbS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95U3ViamVjdCkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2ltYWdlLWdhbGxlcnldIFJlY2VpdmVkIG5ldyByb3dzJywgZGF0YSk7XG4gICAgICB0aGlzLl9kYXRhJC5uZXh0KGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRhYmxlVW5rbm93bkRhdGFTb3VyY2VFcnJvcigpIHtcbiAgICByZXR1cm4gRXJyb3IoYFByb3ZpZGVkIGRhdGEgc291cmNlIGRpZCBub3QgbWF0Y2ggYW4gYXJyYXksIE9ic2VydmFibGUsIG9yIERhdGFTb3VyY2VgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjbGlja1Jvdyhyb3c6IFRhYmxlRWxlbWVudDxUPiwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcbiAgICBhd2FpdCB0aGlzLnpvb21Nb2RhbC5wcmVzZW50KCk7XG4gICAgYXdhaXQgdGhpcy56b29tTW9kYWwub25EaWREaXNtaXNzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZlU2xpZGVJbmRleCA9IDA7XG5cbiAgcHJvdGVjdGVkIGdldFN3aXBlcihzd2lwZXJFbGVtZW50PzogYW55KTogU3dpcGVyIHtcbiAgICB0aGlzLl9zd2lwZXIgPSAoc3dpcGVyRWxlbWVudCB8fCB0aGlzLnN3aXBlclJlZj8ubmF0aXZlRWxlbWVudCk/LnN3aXBlciB8fCB0aGlzLl9zd2lwZXI7XG4gICAgcmV0dXJuIHRoaXMuX3N3aXBlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBpbml0TW9kYWxTbGlkZXMoc3dpcGVyRWxlbWVudDogYW55KSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcy5nZXRTd2lwZXIoc3dpcGVyRWxlbWVudCk7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkUm93SW5kZXggPiAwKSB7XG4gICAgICBhd2FpdCBzd2lwZXIuc2xpZGVUbyh0aGlzLl9zZWxlY3RlZFJvd0luZGV4LCAwKTtcbiAgICB9XG4gICAgdGhpcy5fc2xpZGVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3NsaWRlc1N1YnNjcmlwdGlvbiA9IGZyb21FdmVudFBhdHRlcm4oKGhhbmRsZXIpID0+IHN3aXBlci5vbignc2xpZGVDaGFuZ2VUcmFuc2l0aW9uU3RhcnQnLCBoYW5kbGVyKSkuc3Vic2NyaWJlKChhcmcpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlU2xpZGVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgem9vbShzd2lwZXJFbGVtZW50OiBhbnksIHpvb21JbjogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbaW1hZ2UtZ2FsbGVyeV0gem9vbSAnICsgKHpvb21JbiA/ICdpbicgOiAnb3V0JyksIHN3aXBlckVsZW1lbnQpO1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXMuZ2V0U3dpcGVyKHN3aXBlckVsZW1lbnQpO1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBpZiAoem9vbUluKSB6b29tLmluKCk7XG4gICAgZWxzZSB6b29tLm91dCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRlbGV0ZUZyb21Nb2RhbChldmVudCwgc3dpcGVyRWxlbWVudDogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcy5nZXRTd2lwZXIoc3dpcGVyRWxlbWVudCk7XG4gICAgY29uc3QgY3VycmVudFJvdyA9IHRoaXMucm93cy5maW5kKChyb3csIGluZGV4KSA9PiBpbmRleCA9PT0gc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICBpZiAoIWN1cnJlbnRSb3cpIHJldHVybiBmYWxzZTsgLy8gUm93IG5vdCBmb3VuZFxuXG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMuZGVsZXRlKGV2ZW50LCBjdXJyZW50Um93KTtcblxuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLnpvb21Nb2RhbC5kaXNtaXNzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlc2V0IHRoZSB6b29tXG4gICAgICBzd2lwZXIuem9vbS5vdXQoKTtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNsaWRlUHJldihzd2lwZXJFbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzLmdldFN3aXBlcihzd2lwZXJFbGVtZW50KTtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IDApIHtcbiAgICAgIC8vIExvb3AgdG8gbGFzdFxuICAgICAgYXdhaXQgc3dpcGVyLnNsaWRlVG8odGhpcy5yb3dzLmxlbmd0aCAtIDEsIDAgLypubyB0cmFuc2l0aW9uLCB0byBhdm9pZCBhIFwicmV2ZXJ0XCIgZWZmZWN0Ki8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNsaWRlTmV4dChzd2lwZXJFbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzLmdldFN3aXBlcihzd2lwZXJFbGVtZW50KTtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IHRoaXMucm93cy5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBMb29wIHRvIGZpcnN0XG4gICAgICBhd2FpdCBzd2lwZXIuc2xpZGVUbygwLCAwIC8qbm8gdHJhbnNpdGlvbiwgdG8gYXZvaWQgYSBcInJldmVydFwiIGVmZmVjdCovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5EZWxldGVSb3dzKHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3Mub2JzZXJ2ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9IGF3YWl0IGVtaXRQcm9taXNlRXZlbnQodGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MsICdjYW5EZWxldGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7IHJvd3MgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IEFsZXJ0cy5hc2tEZWxldGVDb25maXJtYXRpb24odGhpcy5hbHRlckN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gICAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuIGZhbHNlOyAvLyBDYW5jZWxsZWRcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIiAqbmdJZj1cInNob3dUb29sYmFyXCI+XG4gIDwhLS0gQWRkIC0tPlxuICA8YnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgKm5nSWY9XCIhcmVhZE9ubHkgJiYgIW1vYmlsZSAmJiBlbmFibGVkXCJcbiAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQUREJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cImFkZCgpXCJcbiAgPlxuICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cblxuICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgIDwhLS0gVG9nZ2xlIHZpZXcgbW9kZSAtLT5cbiAgICA8aW9uLXNlZ21lbnQgKGlvbkNoYW5nZSk9XCJ0b2dnbGVWaWV3TW9kZSgkZXZlbnQpXCIgY29sb3I9XCJhY2NlbnRcIiBbdmFsdWVdPVwiX2NvbFNpemVcIj5cbiAgICAgIDxpb24tc2VnbWVudC1idXR0b24gW3ZhbHVlXT1cIjRcIj5cbiAgICAgICAgPG1hdC1pY29uPnZpZXdfbW9kdWxlPC9tYXQtaWNvbj5cbiAgICAgIDwvaW9uLXNlZ21lbnQtYnV0dG9uPlxuICAgICAgPGlvbi1zZWdtZW50LWJ1dHRvbiBbdmFsdWVdPVwiMTJcIj5cbiAgICAgICAgPG1hdC1pY29uPnZpZXdfbGlzdDwvbWF0LWljb24+XG4gICAgICA8L2lvbi1zZWdtZW50LWJ1dHRvbj5cbiAgICA8L2lvbi1zZWdtZW50PlxuICA8L2lvbi1idXR0b25zPlxuPC9pb24tdG9vbGJhcj5cblxuPGRpdiBjbGFzcz1cImdhbGxlcnktY29udGFpbmVyIHt7IHRoaXMubW9kZSB9fVwiPlxuICA8ZGl2ICpuZ0lmPVwibW9iaWxlICYmIHpvb21BY3RpdmVcIiBjbGFzcz1cImJhY2tkcm9wXCIgW3N0eWxlLm9wYWNpdHldPVwiem9vbVNjYWxlXCI+PC9kaXY+XG5cbiAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICA8aW9uLXJvdz5cbiAgICAgIDxpb24tY29sICpyeEZvcj1cImxldCByb3cgb2YgX2RhdGEkOyBpbmRleCBhcyBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCIgW3NpemVdPVwiX2NvbFNpemVcIj5cbiAgICAgICAgQGxldCBpbWFnZSA9IHJvdyB8IHByb3BlcnR5R2V0OiAnY3VycmVudERhdGEnO1xuICAgICAgICA8aW9uLWNhcmRcbiAgICAgICAgICAjY2FyZFxuICAgICAgICAgIGNsYXNzPVwiaW1hZ2UtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnpvb20taG92ZXJdPVwiIW1vYmlsZVwiXG4gICAgICAgICAgW2NvbG9yXT1cImNhcmRDb2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsaWNrUm93KHJvdywgaW5kZXgpXCJcbiAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgIEBmYWRlSW5BbmltYXRpb25cbiAgICAgICAgPlxuICAgICAgICAgIDxmaWd1cmUgY2xhc3M9XCJjYXJkLXRodW1ibmFpbFwiPlxuICAgICAgICAgICAgPGlvbi1pbWcgW3NyY109XCJpbWFnZS51cmwgfHwgaW1hZ2UuZGF0YVVybFwiIC8+XG4gICAgICAgICAgPC9maWd1cmU+XG5cbiAgICAgICAgICA8IS0tIHRvb2xiYXIgZm9yIHRpdGxlICh3aGVuIG5vdCBob3ZlcikgLS0+XG4gICAgICAgICAgPGlvbi10b29sYmFyIGNvbG9yPVwidHJhbnNwYXJlbnRcIiBjbGFzcz1cInRpdGxlXCIgKm5nSWY9XCJpbWFnZS50aXRsZVwiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBpbWFnZS50aXRsZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgIDwvaW9uLXRvb2xiYXI+XG5cbiAgICAgICAgICA8IS0tIGFjdGlvbiB0b29sYmFyIChkZXNrdG9wIG9ubHkpIHNob3duIHdoZW4gaG92ZXIgaW1hZ2UgLS0+XG4gICAgICAgICAgPGlvbi10b29sYmFyICNjYXJkVG9vbGJhciAqbmdJZj1cIiFtb2JpbGUgJiYgIXJlYWRPbmx5XCIgY29sb3I9XCJsaWdodFwiIGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPCEtLSBlZGl0IHRpdGxlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInNob3dUaXRsZVwiXG4gICAgICAgICAgICAgIHNsb3Q9XCJzdGFydFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJlZGl0VGl0bGUoJGV2ZW50LCByb3csIGNhcmRUb29sYmFyKVwiXG4gICAgICAgICAgICAgIChmb2N1c2luKT1cInNob3dDYXJkVG9vbGJhcihjYXJkVG9vbGJhcilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cuY3VycmVudERhdGEudGl0bGUgfCBpc05vdE5pbE9yQmxhbms7IGVsc2UgZWRpdExhYmVsXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgSU1BR0UuR0FMTEVSWS5CVE5fRURJVF9USVRMRVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5JTUFHRS5HQUxMRVJZLkJUTl9BRERfVElUTEU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2lvbi10b29sYmFyPlxuICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgPC9pb24tY29sPlxuXG4gICAgICA8aW9uLWNvbCAqbmdJZj1cInNob3dBZGRDYXJkQnV0dG9uICYmICFyZWFkT25seVwiIFtzaXplXT1cIl9jb2xTaXplXCIgQGZhZGVJbkFuaW1hdGlvbj5cbiAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiaW1hZ2UtY2FyZC1idXR0b25cIiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImFkZCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgdGFwcGFibGU+XG4gICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjYW1lcmFcIiBbY29sb3JdPVwiYWRkQnV0dG9uQ29sb3JcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFkZFwiIFtjb2xvcl09XCJhZGRCdXR0b25Db2xvclwiIGNsYXNzPVwiaWNvbi1zZWNvbmRhcnlcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tZ3JpZD5cbjwvZGl2PlxuXG48IS0tIEZBQiBidXR0b246IGFkZCAtLT5cbjxpb24tZmFiXG4gIHNsb3Q9XCJmaXhlZFwiXG4gIHZlcnRpY2FsPVwiYm90dG9tXCJcbiAgaG9yaXpvbnRhbD1cImVuZFwiXG4gICpuZ0lmPVwic2hvd0ZhYkJ1dHRvbiAmJiAhcmVhZE9ubHlcIlxuICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJkaXNhYmxlZFwiXG4gIEBmYWRlSW5PdXRBbmltYXRpb25cbj5cbiAgPGlvbi1mYWItYnV0dG9uIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwiYWRkKCRldmVudClcIj5cbiAgICA8aW9uLWljb24gbmFtZT1cImNhbWVyYVwiPjwvaW9uLWljb24+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJhZGRcIiBjbGFzcz1cImljb24tc2Vjb25kYXJ5XCIgc3R5bGU9XCJsZWZ0OiAzM3B4OyB0b3A6IDlweDsgZm9udC1zaXplOiAyMHB4XCI+PC9pb24taWNvbj5cbiAgPC9pb24tZmFiLWJ1dHRvbj5cbjwvaW9uLWZhYj5cblxuPCEtLSBab29tIG1vZGFsIC0tPlxuPGlvbi1tb2RhbCAjem9vbU1vZGFsIGNsYXNzPVwic3RhY2stbW9kYWwgem9vbS1tb2RhbFwiIFtjbGFzcy5tb2RhbC1mdWxsc2NyZWVuXT1cIm1vYmlsZVwiIFtjbGFzcy5tb2RhbC1sYXJnZV09XCIhbW9iaWxlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBpb24tbm8tbWFyZ2luXCI+XG4gICAgICBAbGV0IGNvdW50ID0gcm93cz8ubGVuZ3RoIHx8IDA7XG4gICAgICA8IS0tIENvdW50ZXIgIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRvcC1sZWZ0XCI+XG4gICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJsaWdodFwiPnt7IGFjdGl2ZVNsaWRlSW5kZXggKyAxIH19IC8ge3sgY291bnQgfX08L2lvbi1sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIHpvb20gYnV0dG9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRvcC1yaWdodFwiPlxuICAgICAgICBAaWYgKCFtb2JpbGUpIHtcbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiem9vbShtb2RhbFN3aXBlciwgdHJ1ZSlcIiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhZGRcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiem9vbShtb2RhbFN3aXBlciwgZmFsc2UpXCIgY29sb3I9XCJsaWdodFwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJyZW1vdmVcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIG5hdmlnYXRpb24gc2lkZSBidXR0b25zIG5leHQvYmFjayAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbW9iaWxlICYmIChyb3dzIHwgaXNBcnJheUxlbmd0aDogeyBncmVhdGVyVGhhbjogMSB9KVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1idXR0b25zIHByZXZcIiAoY2xpY2spPVwic2xpZGVQcmV2KG1vZGFsU3dpcGVyKVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLWJ1dHRvbnMgbmV4dFwiIChjbGljayk9XCJzbGlkZU5leHQobW9kYWxTd2lwZXIpXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmRcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIGltYWdlIHNsaWRlcyAtLT5cbiAgICAgIDxzd2lwZXItY29udGFpbmVyICNtb2RhbFN3aXBlciBbbW9kdWxlc109XCJzd2lwZXJNb2R1bGVzXCIgW3pvb21dPVwidHJ1ZVwiPlxuICAgICAgICA8c3dpcGVyLXNsaWRlICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGFzdCBhcyBsYXN0XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzd2lwZXItem9vbS1jb250YWluZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJyb3cgfCBwcm9wZXJ0eUdldDogJ2N1cnJlbnREYXRhJzsgbGV0IGltYWdlXCJcbiAgICAgICAgICAgIChuZ0luaXQpPVwibGFzdCAmJiBpbml0TW9kYWxTbGlkZXMobW9kYWxTd2lwZXIpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW9uLWltZyBbc3JjXT1cImltYWdlLnVybCB8fCBpbWFnZS5kYXRhVXJsXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zd2lwZXItc2xpZGU+XG4gICAgICA8L3N3aXBlci1jb250YWluZXI+XG4gICAgPC9pb24tY29udGVudD5cblxuICAgIDxpb24tZm9vdGVyPlxuICAgICAgPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIj5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIiBjbGFzcz1cImlvbi10ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIiFyZWFkT25seVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGcm9tTW9kYWwoJGV2ZW50LCBtb2RhbFN3aXBlcilcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICB7eyAnQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+PC9pb24tY29sPlxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCIgY2xhc3M9XCJpb24tdGV4dC1lbmRcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJ6b29tTW9kYWwuZGlzbWlzcygpXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIGZpbGw9XCJjbGVhclwiICpuZ0lmPVwibW9iaWxlOyBlbHNlIGRlc2t0b3BcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJjbG9zZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7ICdDT01NT04uQlROX0NMT1NFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZXNrdG9wPlxuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiem9vbU1vZGFsLmRpc21pc3MoKVwiIGNvbG9yPVwidGVydGlhcnlcIj5cbiAgICAgICAgICAgICAgICB7eyAnQ09NTU9OLkJUTl9DTE9TRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24tZm9vdGVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjxpb24tcG9wb3ZlciAjdGl0bGVQb3BvdmVyPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiX3RpdGxlRm9ybVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cImF1dG9cIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5JTUFHRS5HQUxMRVJZLlRJVExFPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwiX3RpdGxlQXV0b2ZvY3VzXCJcbiAgICAgICAgICAgIChrZXlkb3duLmNvbnRyb2wuZW50ZXIpPVwidGl0bGVQb3BvdmVyLmRpc21pc3MoX3RpdGxlRm9ybS5jb250cm9scy50aXRsZS52YWx1ZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9pb24tY29udGVudD5cblxuICAgIDxpb24tZm9vdGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgICAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cblxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwidGl0bGVQb3BvdmVyLmRpc21pc3MobnVsbCwgJ0NBTkNFTCcpXCI+XG4gICAgICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0FOQ0VMPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBbZmlsbF09XCJkaXNhYmxlZCA/ICdjbGVhcicgOiAnc29saWQnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRpdGxlUG9wb3Zlci5kaXNtaXNzKF90aXRsZUZvcm0uY29udHJvbHMudGl0bGUudmFsdWUpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInRpdGxlUG9wb3Zlci5kaXNtaXNzKF90aXRsZUZvcm0uY29udHJvbHMudGl0bGUudmFsdWUpXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9WQUxJREFURV9XSVRIX1NIT1JUQ1VUX0hFTFAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9WQUxJREFURTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPC9pb24tcm93PlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1mb290ZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1wb3BvdmVyPlxuIl19
@@ -11,8 +11,8 @@ import { RxStateModule } from '../../rx-state/rx-state.module';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@ngx-translate/core";
13
13
  export class ImageGalleryModule {
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ImageGalleryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: ImageGalleryModule, declarations: [
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ImageGalleryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: ImageGalleryModule, declarations: [
16
16
  // Components
17
17
  AppImageGalleryComponent], imports: [CommonModule,
18
18
  IonicModule,
@@ -23,7 +23,7 @@ export class ImageGalleryModule {
23
23
  TranslateModule,
24
24
  // Components
25
25
  AppImageGalleryComponent] });
26
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ImageGalleryModule, imports: [CommonModule,
26
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ImageGalleryModule, imports: [CommonModule,
27
27
  IonicModule,
28
28
  ReactiveFormsModule,
29
29
  SharedMaterialModule,
@@ -33,7 +33,7 @@ export class ImageGalleryModule {
33
33
  RxStateModule, IonicModule,
34
34
  TranslateModule] });
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ImageGalleryModule, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ImageGalleryModule, decorators: [{
37
37
  type: NgModule,
38
38
  args: [{
39
39
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
@@ -59,4 +59,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
59
59
  ],
60
60
  }]
61
61
  }] });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZ2FsbGVyeS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L2ltYWdlLWdhbGxlcnkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7QUF5Qi9ELE1BQU0sT0FBTyxrQkFBa0I7dUdBQWxCLGtCQUFrQjt3R0FBbEIsa0JBQWtCO1lBVjNCLGFBQWE7WUFDYix3QkFBd0IsYUFYeEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixzQkFBc0Isc0JBRXRCLGFBQWEsYUFPYixXQUFXO1lBQ1gsZUFBZTtZQUNmLGFBQWE7WUFDYix3QkFBd0I7d0dBR2Ysa0JBQWtCLFlBcEIzQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsaUJBQWlCO1lBQ2pCLHNCQUFzQjtZQUN0QixlQUFlLENBQUMsUUFBUSxFQUFFO1lBQzFCLGFBQWEsRUFPYixXQUFXO1lBQ1gsZUFBZTs7MkZBS04sa0JBQWtCO2tCQXZCOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixzQkFBc0I7d0JBQ3RCLGVBQWUsQ0FBQyxRQUFRLEVBQUU7d0JBQzFCLGFBQWE7cUJBQ2Q7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLGFBQWE7d0JBQ2Isd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFwcEltYWdlR2FsbGVyeUNvbXBvbmVudCB9IGZyb20gJy4vaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2hhcmVkUGlwZXNNb2R1bGUgfSBmcm9tICcuLi8uLi9waXBlcy9waXBlcy5tb2R1bGUnO1xuaW1wb3J0IHsgU2hhcmVkTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuLi8uLi9tYXRlcmlhbC9tYXRlcmlhbC5tb2R1bGUnO1xuaW1wb3J0IHsgU2hhcmVkRGlyZWN0aXZlc01vZHVsZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZGlyZWN0aXZlcy5tb2R1bGUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJ4U3RhdGVNb2R1bGUgfSBmcm9tICcuLi8uLi9yeC1zdGF0ZS9yeC1zdGF0ZS5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTaGFyZWRNYXRlcmlhbE1vZHVsZSxcbiAgICBTaGFyZWRQaXBlc01vZHVsZSxcbiAgICBTaGFyZWREaXJlY3RpdmVzTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLFxuICAgIFJ4U3RhdGVNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIC8vIENvbXBvbmVudHNcbiAgICBBcHBJbWFnZUdhbGxlcnlDb21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEFwcEltYWdlR2FsbGVyeUNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VHYWxsZXJ5TW9kdWxlIHt9XG4iXX0=
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZ2FsbGVyeS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L2ltYWdlLWdhbGxlcnkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7QUF5Qi9ELE1BQU0sT0FBTyxrQkFBa0I7d0dBQWxCLGtCQUFrQjt5R0FBbEIsa0JBQWtCO1lBVjNCLGFBQWE7WUFDYix3QkFBd0IsYUFYeEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixzQkFBc0Isc0JBRXRCLGFBQWEsYUFPYixXQUFXO1lBQ1gsZUFBZTtZQUNmLGFBQWE7WUFDYix3QkFBd0I7eUdBR2Ysa0JBQWtCLFlBcEIzQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsaUJBQWlCO1lBQ2pCLHNCQUFzQjtZQUN0QixlQUFlLENBQUMsUUFBUSxFQUFFO1lBQzFCLGFBQWEsRUFPYixXQUFXO1lBQ1gsZUFBZTs7NEZBS04sa0JBQWtCO2tCQXZCOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixzQkFBc0I7d0JBQ3RCLGVBQWUsQ0FBQyxRQUFRLEVBQUU7d0JBQzFCLGFBQWE7cUJBQ2Q7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLGFBQWE7d0JBQ2Isd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFwcEltYWdlR2FsbGVyeUNvbXBvbmVudCB9IGZyb20gJy4vaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2hhcmVkUGlwZXNNb2R1bGUgfSBmcm9tICcuLi8uLi9waXBlcy9waXBlcy5tb2R1bGUnO1xuaW1wb3J0IHsgU2hhcmVkTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuLi8uLi9tYXRlcmlhbC9tYXRlcmlhbC5tb2R1bGUnO1xuaW1wb3J0IHsgU2hhcmVkRGlyZWN0aXZlc01vZHVsZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZGlyZWN0aXZlcy5tb2R1bGUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJ4U3RhdGVNb2R1bGUgfSBmcm9tICcuLi8uLi9yeC1zdGF0ZS9yeC1zdGF0ZS5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTaGFyZWRNYXRlcmlhbE1vZHVsZSxcbiAgICBTaGFyZWRQaXBlc01vZHVsZSxcbiAgICBTaGFyZWREaXJlY3RpdmVzTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLFxuICAgIFJ4U3RhdGVNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIC8vIENvbXBvbmVudHNcbiAgICBBcHBJbWFnZUdhbGxlcnlDb21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgLy8gQ29tcG9uZW50c1xuICAgIEFwcEltYWdlR2FsbGVyeUNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VHYWxsZXJ5TW9kdWxlIHt9XG4iXX0=