@sumaris-net/ngx-components 2.6.8 → 3.0.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/esm2020/public_api.mjs +12 -6
  2. package/esm2020/src/app/admin/admin-routing.module.mjs +5 -5
  3. package/esm2020/src/app/admin/admin.module.mjs +5 -5
  4. package/esm2020/src/app/admin/services/person.service.mjs +4 -4
  5. package/esm2020/src/app/admin/services/validator/person.validator.mjs +4 -4
  6. package/esm2020/src/app/admin/users/users.mjs +5 -5
  7. package/esm2020/src/app/admin/users/users.module.mjs +5 -5
  8. package/esm2020/src/app/core/about/about.modal.mjs +4 -4
  9. package/esm2020/src/app/core/about/about.module.mjs +5 -5
  10. package/esm2020/src/app/core/account/account.module.mjs +5 -5
  11. package/esm2020/src/app/core/account/account.page.mjs +16 -18
  12. package/esm2020/src/app/core/account/new-token.modal.mjs +5 -5
  13. package/esm2020/src/app/core/account/token.table.mjs +5 -5
  14. package/esm2020/src/app/core/auth/auth.form.mjs +6 -5
  15. package/esm2020/src/app/core/auth/auth.modal.mjs +4 -4
  16. package/esm2020/src/app/core/auth/auth.module.mjs +5 -5
  17. package/esm2020/src/app/core/core.module.mjs +5 -5
  18. package/esm2020/src/app/core/core.testing.module.mjs +13 -6
  19. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +5 -5
  20. package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +5 -5
  21. package/esm2020/src/app/core/form/entity/editor.class.mjs +7 -7
  22. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -4
  23. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +4 -4
  24. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +4 -4
  25. package/esm2020/src/app/core/form/entity/entity.module.mjs +5 -5
  26. package/esm2020/src/app/core/form/form.class.mjs +4 -4
  27. package/esm2020/src/app/core/form/form.module.mjs +5 -5
  28. package/esm2020/src/app/core/form/list/list.form.mjs +4 -4
  29. package/esm2020/src/app/core/form/list/list.module.mjs +5 -5
  30. package/esm2020/src/app/core/form/properties/properties.form.mjs +6 -6
  31. package/esm2020/src/app/core/form/properties/properties.module.mjs +5 -5
  32. package/esm2020/src/app/core/form/properties/properties.table.mjs +9 -11
  33. package/esm2020/src/app/core/form/properties/property.validator.mjs +4 -4
  34. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +4 -4
  35. package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +5 -5
  36. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +4 -4
  37. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +5 -5
  38. package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +7 -7
  39. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +4 -4
  40. package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +5 -5
  41. package/esm2020/src/app/core/graphql/graphql.module.mjs +5 -5
  42. package/esm2020/src/app/core/graphql/graphql.service.mjs +4 -9
  43. package/esm2020/src/app/core/home/home.mjs +4 -4
  44. package/esm2020/src/app/core/home/home.module.mjs +5 -5
  45. package/esm2020/src/app/core/icon/icon.component.mjs +4 -4
  46. package/esm2020/src/app/core/icon/icon.module.mjs +5 -5
  47. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +4 -4
  48. package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +5 -5
  49. package/esm2020/src/app/core/menu/menu.component.mjs +14 -13
  50. package/esm2020/src/app/core/menu/menu.model.mjs +1 -1
  51. package/esm2020/src/app/core/menu/menu.module.mjs +5 -5
  52. package/esm2020/src/app/core/menu/menu.service.mjs +4 -4
  53. package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  54. package/esm2020/src/app/core/menu/testing/menu-other.testing.mjs +4 -4
  55. package/esm2020/src/app/core/menu/testing/menu.testing.mjs +4 -4
  56. package/esm2020/src/app/core/menu/testing/menu.testing.module.mjs +5 -5
  57. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +4 -4
  58. package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +5 -5
  59. package/esm2020/src/app/core/peer/select-peer.modal.mjs +4 -4
  60. package/esm2020/src/app/core/peer/select-peer.module.mjs +5 -5
  61. package/esm2020/src/app/core/register/register-confirm.page.mjs +4 -4
  62. package/esm2020/src/app/core/register/register.form.mjs +5 -5
  63. package/esm2020/src/app/core/register/register.modal.mjs +4 -4
  64. package/esm2020/src/app/core/register/register.module.mjs +5 -5
  65. package/esm2020/src/app/core/services/account.service.mjs +23 -50
  66. package/esm2020/src/app/core/services/auth-guard.service.mjs +4 -4
  67. package/esm2020/src/app/core/services/base-entity-service.class.mjs +4 -4
  68. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +4 -4
  69. package/esm2020/src/app/core/services/config/core.config.mjs +4 -4
  70. package/esm2020/src/app/core/services/config.service.mjs +4 -4
  71. package/esm2020/src/app/core/services/crypto.service.mjs +4 -4
  72. package/esm2020/src/app/core/services/local-settings.service.mjs +4 -4
  73. package/esm2020/src/app/core/services/network.service.mjs +4 -4
  74. package/esm2020/src/app/core/services/pipes/account.pipes.mjs +9 -9
  75. package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  76. package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  77. package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  78. package/esm2020/src/app/core/services/platform.service.mjs +10 -20
  79. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +4 -4
  80. package/esm2020/src/app/core/services/testing/referential.validator.mjs +4 -4
  81. package/esm2020/src/app/core/services/validator/account.validator.mjs +4 -4
  82. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +4 -4
  83. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +4 -4
  84. package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +4 -4
  85. package/esm2020/src/app/core/services/validator/user-token.validator.mjs +4 -4
  86. package/esm2020/src/app/core/settings/settings.module.mjs +5 -5
  87. package/esm2020/src/app/core/settings/settings.page.mjs +6 -6
  88. package/esm2020/src/app/core/table/actions-column.component.mjs +5 -5
  89. package/esm2020/src/app/core/table/async-table.class.mjs +4 -4
  90. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +4 -4
  91. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +4 -4
  92. package/esm2020/src/app/core/table/memory-table.class.mjs +4 -4
  93. package/esm2020/src/app/core/table/table-select-columns.component.mjs +5 -5
  94. package/esm2020/src/app/core/table/table.class.mjs +6 -6
  95. package/esm2020/src/app/core/table/table.module.mjs +5 -5
  96. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +4 -4
  97. package/esm2020/src/app/core/table/testing/table.testing.mjs +27 -27
  98. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +21 -9
  99. package/esm2020/src/app/core/table/testing/table2-validator.service.mjs +24 -0
  100. package/esm2020/src/app/core/table/testing/table2.testing.mjs +242 -0
  101. package/esm2020/src/app/shared/audio/audio.mjs +4 -4
  102. package/esm2020/src/app/shared/audio/audio.testing.mjs +4 -4
  103. package/esm2020/src/app/shared/audio/audio.testing.module.mjs +5 -5
  104. package/esm2020/src/app/shared/capacitor/keyboard.mjs +4 -4
  105. package/esm2020/src/app/shared/debug/debug.component.mjs +4 -4
  106. package/esm2020/src/app/shared/debug/debug.module.mjs +5 -5
  107. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +4 -4
  108. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +4 -4
  109. package/esm2020/src/app/shared/directives/directives.module.mjs +5 -5
  110. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  111. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +4 -4
  112. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +5 -4
  113. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  114. package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  115. package/esm2020/src/app/shared/file/file.service.mjs +4 -4
  116. package/esm2020/src/app/shared/form/field.component.mjs +8 -6
  117. package/esm2020/src/app/shared/form/field.model.mjs +1 -1
  118. package/esm2020/src/app/shared/form/loading-spinner.mjs +4 -4
  119. package/esm2020/src/app/shared/functions.mjs +4 -3
  120. package/esm2020/src/app/shared/gesture/gesture-config.mjs +4 -4
  121. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  122. package/esm2020/src/app/shared/help/help.modal.mjs +5 -5
  123. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +4 -4
  124. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +9 -12
  125. package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +6 -6
  126. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +4 -4
  127. package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +5 -5
  128. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +4 -4
  129. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +4 -4
  130. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +5 -5
  131. package/esm2020/src/app/shared/image/image.module.mjs +5 -5
  132. package/esm2020/src/app/shared/image/image.service.mjs +4 -4
  133. package/esm2020/src/app/shared/logging/logging-service.class.mjs +4 -4
  134. package/esm2020/src/app/shared/logging/logging-service.module.mjs +5 -5
  135. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +36 -31
  136. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +5 -5
  137. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +5 -5
  138. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +4 -4
  139. package/esm2020/src/app/shared/material/badge/badge.module.mjs +5 -5
  140. package/esm2020/src/app/shared/material/badge/badge.test.mjs +5 -5
  141. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +20 -12
  142. package/esm2020/src/app/shared/material/boolean/material-boolean2.mjs +248 -0
  143. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +7 -6
  144. package/esm2020/src/app/shared/material/boolean/testing/boolean.test.page.mjs +51 -0
  145. package/esm2020/src/app/shared/material/chips/chips.module.mjs +8 -8
  146. package/esm2020/src/app/shared/material/chips/material.chips.mjs +19 -27
  147. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +6 -6
  148. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +5 -5
  149. package/esm2020/src/app/shared/material/datetime/material.date.mjs +8 -6
  150. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +8 -6
  151. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +8 -6
  152. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +19 -7
  153. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +15 -7
  154. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +15 -7
  155. package/esm2020/src/app/shared/material/duration/duration.module.mjs +7 -7
  156. package/esm2020/src/app/shared/material/duration/material.duration.mjs +7 -6
  157. package/esm2020/src/app/shared/material/duration/testing/mat-duration.test.mjs +76 -0
  158. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +7 -6
  159. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +8 -8
  160. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +4 -4
  161. package/esm2020/src/app/shared/material/material.module.mjs +18 -18
  162. package/esm2020/src/app/shared/material/material.testing.module.mjs +65 -23
  163. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +4 -4
  164. package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +4 -4
  165. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +4 -4
  166. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +4 -4
  167. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +4 -4
  168. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +9 -14
  169. package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +6 -6
  170. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +5 -5
  171. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +5 -5
  172. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  173. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +6 -5
  174. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +13 -9
  175. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +4 -4
  176. package/esm2020/src/app/shared/material/testing/common.test.mjs +95 -0
  177. package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +4 -4
  178. package/esm2020/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  179. package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +4 -4
  180. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +25 -25
  181. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +6 -4
  182. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +5 -5
  183. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +7 -7
  184. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +5 -5
  185. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +5 -5
  186. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +4 -4
  187. package/esm2020/src/app/shared/pipes/form.pipes.mjs +19 -19
  188. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +5 -5
  189. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +10 -10
  190. package/esm2020/src/app/shared/pipes/maps.pipe.mjs +13 -13
  191. package/esm2020/src/app/shared/pipes/math.pipes.mjs +13 -13
  192. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +4 -4
  193. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +5 -5
  194. package/esm2020/src/app/shared/pipes/pipes.module.mjs +19 -11
  195. package/esm2020/src/app/shared/pipes/property.pipes.mjs +8 -8
  196. package/esm2020/src/app/shared/pipes/string.pipes.mjs +42 -28
  197. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +9 -9
  198. package/esm2020/src/app/shared/pipes/types.pipes.mjs +23 -10
  199. package/esm2020/src/app/shared/rx-state.module.mjs +23 -0
  200. package/esm2020/src/app/shared/services/entity-service.class.mjs +1 -1
  201. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +4 -4
  202. package/esm2020/src/app/shared/services/progress-bar.service.mjs +4 -4
  203. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +12 -9
  204. package/esm2020/src/app/shared/services/startable-service.class.mjs +13 -10
  205. package/esm2020/src/app/shared/services/translate-context.service.mjs +4 -4
  206. package/esm2020/src/app/shared/shared-routing.module.mjs +8 -8
  207. package/esm2020/src/app/shared/shared.module.mjs +23 -30
  208. package/esm2020/src/app/shared/shared.testing.module.mjs +5 -5
  209. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +4 -4
  210. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +5 -5
  211. package/esm2020/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +5 -5
  212. package/esm2020/src/app/shared/storage/storage-explorer.testing.module.mjs +5 -5
  213. package/esm2020/src/app/shared/storage/storage.service.mjs +4 -4
  214. package/esm2020/src/app/shared/testing/observable.test.mjs +4 -4
  215. package/esm2020/src/app/shared/testing/tests.page.mjs +4 -4
  216. package/esm2020/src/app/shared/toast/toast.testing.mjs +4 -4
  217. package/esm2020/src/app/shared/toast/toast.testing.module.mjs +5 -5
  218. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +4 -4
  219. package/esm2020/src/app/shared/toolbar/toolbar.mjs +4 -4
  220. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +6 -6
  221. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +4 -4
  222. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +5 -5
  223. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +4 -4
  224. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +5 -5
  225. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +4 -4
  226. package/esm2020/src/app/social/job/job.module.mjs +5 -5
  227. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +23 -9
  228. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +74 -67
  229. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +13 -10
  230. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +1 -1
  231. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +4 -4
  232. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +10 -21
  233. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +4 -4
  234. package/esm2020/src/app/social/job/testing/job.testing.module.mjs +5 -5
  235. package/esm2020/src/app/social/message/message.form.mjs +7 -7
  236. package/esm2020/src/app/social/message/message.modal.mjs +4 -4
  237. package/esm2020/src/app/social/message/message.module.mjs +5 -5
  238. package/esm2020/src/app/social/message/message.service.mjs +4 -4
  239. package/esm2020/src/app/social/social.module.mjs +5 -5
  240. package/esm2020/src/app/social/social.testing.module.mjs +5 -5
  241. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +4 -4
  242. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +4 -4
  243. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +4 -4
  244. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +1 -1
  245. package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +5 -5
  246. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +4 -4
  247. package/esm2020/src/app/social/user-event/user-event.module.mjs +5 -5
  248. package/esm2020/src/app/social/user-event/user-event.service.mjs +4 -4
  249. package/esm2020/src/environments/environment.class.mjs +1 -1
  250. package/esm2020/src/environments/environment.mjs +17 -20
  251. package/fesm2015/sumaris-net.ngx-components.mjs +7689 -7022
  252. package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
  253. package/fesm2020/sumaris-net.ngx-components.mjs +8988 -8329
  254. package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
  255. package/package.json +4 -3
  256. package/public_api.d.ts +11 -5
  257. package/src/app/admin/users/users.d.ts +1 -1
  258. package/src/app/core/about/about.modal.d.ts +1 -1
  259. package/src/app/core/account/account.page.d.ts +3 -4
  260. package/src/app/core/account/new-token.modal.d.ts +1 -1
  261. package/src/app/core/account/token.table.d.ts +1 -1
  262. package/src/app/core/auth/auth.form.d.ts +1 -1
  263. package/src/app/core/auth/auth.modal.d.ts +1 -1
  264. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +1 -1
  265. package/src/app/core/form/entity/editor.class.d.ts +4 -4
  266. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
  267. package/src/app/core/form/entity/entity-editor.class.d.ts +1 -1
  268. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  269. package/src/app/core/form/form.class.d.ts +1 -1
  270. package/src/app/core/form/list/list.form.d.ts +1 -1
  271. package/src/app/core/form/properties/properties.form.d.ts +1 -1
  272. package/src/app/core/form/properties/properties.table.d.ts +2 -3
  273. package/src/app/core/form/properties/property.validator.d.ts +1 -1
  274. package/src/app/core/form/properties/testing/properties-form.test.d.ts +1 -1
  275. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +1 -1
  276. package/src/app/core/form/text-popover/text-form.component.d.ts +1 -1
  277. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
  278. package/src/app/core/home/home.d.ts +1 -1
  279. package/src/app/core/icon/icon.component.d.ts +1 -1
  280. package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
  281. package/src/app/core/menu/menu.component.d.ts +2 -2
  282. package/src/app/core/menu/menu.model.d.ts +0 -1
  283. package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
  284. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  285. package/src/app/core/menu/testing/menu.testing.d.ts +1 -1
  286. package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
  287. package/src/app/core/peer/select-peer.modal.d.ts +1 -1
  288. package/src/app/core/register/register-confirm.page.d.ts +1 -1
  289. package/src/app/core/register/register.form.d.ts +1 -1
  290. package/src/app/core/register/register.modal.d.ts +1 -1
  291. package/src/app/core/services/account.service.d.ts +0 -4
  292. package/src/app/core/services/base-entity-service.class.d.ts +1 -1
  293. package/src/app/core/services/base-graphql-service.class.d.ts +1 -1
  294. package/src/app/core/services/config/core.config.d.ts +1 -1
  295. package/src/app/core/services/validator/base.validator.class.d.ts +1 -1
  296. package/src/app/core/settings/settings.page.d.ts +1 -1
  297. package/src/app/core/table/actions-column.component.d.ts +2 -2
  298. package/src/app/core/table/async-table.class.d.ts +1 -1
  299. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -1
  300. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -1
  301. package/src/app/core/table/memory-table.class.d.ts +3 -3
  302. package/src/app/core/table/table-select-columns.component.d.ts +1 -1
  303. package/src/app/core/table/table.class.d.ts +3 -3
  304. package/src/app/core/table/testing/table.testing.d.ts +5 -4
  305. package/src/app/core/table/testing/table.testing.module.d.ts +8 -5
  306. package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
  307. package/src/app/core/table/testing/table2.testing.d.ts +45 -0
  308. package/src/app/shared/audio/audio.testing.d.ts +1 -1
  309. package/src/app/shared/debug/debug.component.d.ts +1 -1
  310. package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
  311. package/src/app/shared/directives/autotitle.directive.d.ts +1 -1
  312. package/src/app/shared/directives/drag-and-drop.directive.d.ts +1 -1
  313. package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
  314. package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
  315. package/src/app/shared/directives/resizable/resizable.directive.d.ts +1 -1
  316. package/src/app/shared/form/field.component.d.ts +4 -5
  317. package/src/app/shared/form/field.model.d.ts +2 -0
  318. package/src/app/shared/form/loading-spinner.d.ts +1 -1
  319. package/src/app/shared/functions.d.ts +2 -2
  320. package/src/app/shared/help/help.modal.d.ts +2 -2
  321. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +1 -1
  322. package/src/app/shared/hotkeys/hotkeys.service.d.ts +3 -3
  323. package/src/app/shared/image/gallery/image-gallery.component.d.ts +3 -3
  324. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +2 -2
  325. package/src/app/shared/inputs.d.ts +1 -1
  326. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +8 -8
  327. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +1 -1
  328. package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
  329. package/src/app/shared/material/badge/badge.test.d.ts +1 -1
  330. package/src/app/shared/material/boolean/boolean.module.d.ts +15 -13
  331. package/src/app/shared/material/boolean/material-boolean2.d.ts +66 -0
  332. package/src/app/shared/material/boolean/material.boolean.d.ts +5 -4
  333. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +21 -0
  334. package/src/app/shared/material/chips/material.chips.d.ts +8 -9
  335. package/src/app/shared/material/chips/testing/chips.test.d.ts +2 -2
  336. package/src/app/shared/material/datetime/material.date.d.ts +4 -3
  337. package/src/app/shared/material/datetime/material.dateshort.d.ts +6 -5
  338. package/src/app/shared/material/datetime/material.datetime.d.ts +4 -3
  339. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +7 -1
  340. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +3 -1
  341. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +3 -1
  342. package/src/app/shared/material/duration/material.duration.d.ts +5 -4
  343. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +22 -0
  344. package/src/app/shared/material/latlong/material.latlong.d.ts +4 -3
  345. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +1 -1
  346. package/src/app/shared/material/material.testing.module.d.ts +22 -18
  347. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
  348. package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
  349. package/src/app/shared/material/numpad/numpad.container.d.ts +1 -1
  350. package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
  351. package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
  352. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -3
  353. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +1 -1
  354. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -3
  355. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -6
  356. package/src/app/shared/material/swipe/swipe.module.d.ts +2 -1
  357. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -1
  358. package/src/app/shared/material/testing/common.test.d.ts +23 -0
  359. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +1 -1
  360. package/src/app/shared/named-filter/named-filter.service.d.ts +1 -1
  361. package/src/app/shared/pipes/ng-init.pipe.d.ts +1 -1
  362. package/src/app/shared/pipes/pipes.module.d.ts +1 -1
  363. package/src/app/shared/pipes/string.pipes.d.ts +6 -0
  364. package/src/app/shared/pipes/types.pipes.d.ts +7 -0
  365. package/src/app/shared/rx-state.module.d.ts +10 -0
  366. package/src/app/shared/services/entity-service.class.d.ts +1 -1
  367. package/src/app/shared/services/memory-entity-service.class.d.ts +1 -1
  368. package/src/app/shared/services/startable-observable-service.class.d.ts +3 -0
  369. package/src/app/shared/services/startable-service.class.d.ts +3 -0
  370. package/src/app/shared/shared.module.d.ts +12 -13
  371. package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
  372. package/src/app/shared/testing/observable.test.d.ts +1 -1
  373. package/src/app/shared/testing/tests.page.d.ts +1 -1
  374. package/src/app/shared/toast/toast.testing.d.ts +1 -1
  375. package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
  376. package/src/app/shared/toolbar/toolbar.d.ts +1 -1
  377. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -1
  378. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
  379. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
  380. package/src/app/social/job/progression/job-progression.component.d.ts +17 -3
  381. package/src/app/social/job/progression/job-progression.icon.d.ts +24 -10
  382. package/src/app/social/job/progression/job-progression.list.d.ts +3 -3
  383. package/src/app/social/job/progression/job-progression.model.d.ts +0 -1
  384. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -6
  385. package/src/app/social/message/message.form.d.ts +1 -1
  386. package/src/app/social/message/message.modal.d.ts +1 -1
  387. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +1 -1
  388. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
  389. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -1
  390. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -1
  391. package/src/app/social/user-event/user-event.service.d.ts +1 -1
  392. package/src/assets/i18n/en-US.json +4 -7
  393. package/src/assets/i18n/en.json +4 -7
  394. package/src/assets/i18n/fr.json +3 -1
  395. package/src/assets/img/logo/logo-eis.png +0 -0
  396. package/src/assets/manifest.json +1 -1
  397. package/src/environments/environment.class.d.ts +0 -1
  398. package/src/theme/_material.globals.scss +49 -17
  399. package/src/theme/_material.scss +1 -14
  400. package/src/theme/_mixins.scss +1 -1
  401. package/src/theme/_ngx-components.globals.scss +6 -1
  402. package/src/theme/_ngx-components.scss +263 -534
  403. package/src/theme/_ngx-components.table.scss +593 -0
  404. package/src/theme/_theme.scss +1 -0
  405. package/esm2020/src/environments/environment.loader.mjs +0 -79
  406. package/resources/README.md +0 -7
  407. package/src/assets/environments/environment-test.json +0 -6
  408. package/src/environments/environment.loader.d.ts +0 -26
@@ -564,9 +564,9 @@ export class NetworkService extends StartableObservableService {
564
564
  }
565
565
  }
566
566
  }
567
- NetworkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NetworkService, deps: [{ token: i1.Platform }, { token: i1.ModalController }, { token: i2.Storage }, { token: i3.LocalSettingsService }, { token: i4.CacheService }, { token: i5.HttpClient }, { token: DOCUMENT }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }, { token: i6.Network, optional: true }, { token: i7.TranslateService, optional: true }, { token: i1.ToastController, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
568
- NetworkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NetworkService, providedIn: 'root' });
569
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NetworkService, decorators: [{
567
+ NetworkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NetworkService, deps: [{ token: i1.Platform }, { token: i1.ModalController }, { token: i2.Storage }, { token: i3.LocalSettingsService }, { token: i4.CacheService }, { token: i5.HttpClient }, { token: DOCUMENT }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }, { token: i6.Network, optional: true }, { token: i7.TranslateService, optional: true }, { token: i1.ToastController, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
568
+ NetworkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NetworkService, providedIn: 'root' });
569
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NetworkService, decorators: [{
570
570
  type: Injectable,
571
571
  args: [{ providedIn: 'root' }]
572
572
  }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i1.ModalController }, { type: i2.Storage }, { type: i3.LocalSettingsService }, { type: i4.CacheService }, { type: i5.HttpClient }, { type: undefined, decorators: [{
@@ -587,4 +587,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
587
587
  }] }, { type: i1.ToastController, decorators: [{
588
588
  type: Optional
589
589
  }] }]; } });
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQXdCLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztB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QkFDdEMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBJU2VsZWN0UGVlck1vZGFsT3B0aW9ucywgU2VsZWN0UGVlck1vZGFsIH0gZnJvbSAnLi4vcGVlci9zZWxlY3QtcGVlci5tb2RhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWSB9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTcGxhc2hTY3JlZW4gfSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuaywgc2xlZXAsIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9uZXR3b3JrL25neCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE92ZXJsYXlFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IEFwcE1hbmlmZXN0LCBOb2RlSW5mbyB9IGZyb20gJy4vbmV0d29yay51dGlscyc7XG5pbXBvcnQgeyBIdHRwVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvaHR0cC9odHRwLnV0aWxzJztcbmltcG9ydCB7IFZlcnNpb25VdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IENvbm5lY3Rpb25UeXBlLCBnZXRDb25uZWN0aW9uVHlwZSwgTmV0d29ya0V2ZW50VHlwZSB9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBBUFBfTE9HR0lOR19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IElMb2dnZXIsIElMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5cbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gIE1PQklMRTogMTAwMCAqIDYwICogMTAgLyogZXZlcnkgMTAgbWluICovLFxuICBERVNLVE9QOiAxMDAwICogNjAgKiA1IC8qIGV2ZXJ5IDUgbWluICovLFxufTtcblxuZXhwb3J0IGNvbnN0IFBFRVJfVVJMX1JFR0VYUCA9IC9eKGh0dHB8aHR0cHMpOlxcL1xcL1teIFwiPyNAXSskLztcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICAgIE1PQklMRTogIDEwMDAsXG4gICAgREVTS1RPUDogMTAwMFxufSovXG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2U8UGVlciwgUGVlcj4ge1xuXG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcChwZWVyID0+IHBlZXI/LnVybCksXG4gICAgZmlsdGVyKGlzTm90TmlsT3JCbGFuayksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8c3RyaW5nPigpXG4gICk7XG4gIG9uTmV0d29ya1N0YXR1c0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25UeXBlPihudWxsKTtcbiAgb25SZXNldE5ldHdvcmtDYWNoZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW9iaWxlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcms6IE5ldHdvcms7XG4gIHByaXZhdGUgX3RpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaFBlcmlvZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lclJlZnJlc2hDb25kaXRpb246ICgpID0+IGJvb2xlYW47XG4gIHByaXZhdGUgX2RldmljZUNvbm5lY3Rpb25UeXBlOiBDb25uZWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfZm9yY2VPZmZsaW5lOiBib29sZWFuO1xuICBwcml2YXRlIF9saXN0ZW5lcnM6IHtcbiAgIFtrZXk6IHN0cmluZ106ICgoZGF0YT86IGFueSkgPT4gUHJvbWlzZTx2b2lkPilbXTtcbiAgfSA9IHt9O1xuXG4gIGdldCBvbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgIT09ICdub25lJztcbiAgfVxuXG4gIGdldCBvZmZsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25UeXBlID09PSAnbm9uZSc7XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblR5cGUoKTogQ29ubmVjdGlvblR5cGV7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmUgJiYgJ25vbmUnXG4gICAgICAvLyBFbHNlLCByZXR1cm4gZGV2aWNlIGNvbm5lY3Rpb24gdHlwZSAob3IgdW5rbm93bilcbiAgICAgIHx8ICh0aGlzLnN0YXJ0ZWQgJiYgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgfHwgJ3Vua25vd24nKTtcbiAgfVxuXG4gIGdldCBwZWVyKCk6IFBlZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdWJqZWN0LnZhbHVlPy5jbG9uZSgpO1xuICB9XG5cbiAgc2V0IHBlZXIocGVlcjogUGVlcikge1xuICAgIHRoaXMucmVzdGFydChwZWVyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0dHSU5HX1NFUlZJQ0UpIHByaXZhdGUgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBuZXR3b3JrOiBOZXR3b3JrLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXJcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuc2V0dGluZ3MubW9iaWxlO1xuICAgIHRoaXMuX2xvZ2dlciA9IHRoaXMubG9nZ2luZ1NlcnZpY2U/LmdldExvZ2dlcignbmV0d29yaycpO1xuXG4gICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5NT0JJTEU7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0aGlzLm9ubGluZTsgLy8gQ2hlY2sgb25seSB3aGVuIG9ubGluZSwgYW5kIHN0b3Agd2hlbiBvZmZsaW5lXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgLy8gU2F2ZSBuZXR3b3JrIGluc3RhbmNlIG9ubHkgd2hlbiBjb3Jkb3ZhIGlzIHJ1bm5pbmdcbiAgICBpZiAocGxhdGZvcm0uaXMoJ2NvcmRvdmEnKSkge1xuICAgICAgdGhpcy5fbmV0d29yayA9IG5ldHdvcms7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKHBlZXIgPT4gdGhpcy5uZ09uQWZ0ZXJTdGFydChwZWVyKSk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VD0gYW55PihldmVudFR5cGU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8YW55Pik6IFN1YnNjcmlwdGlvbiB7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAncGVlckNoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblBlZXJDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAnc3RhdHVzQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh0eXBlKSA9PiBjYWxsYmFjayh0eXBlIGFzIHVua25vd24gYXMgVCkpO1xuXG4gICAgICBjYXNlICdyZXNldENhY2hlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyeU9ubGluZShvcHRzPzoge1xuICAgIHNob3dPZmZsaW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dPbmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd0xvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgYWZ0ZXJSZXRyeURlbGF5PzogbnVtYmVyO1xuICAgIGFmdGVyUmV0cnlQcm9taXNlPzogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gSWYgb2ZmbGluZSBtb2RlIG5vdCBmb3JjZWQsIGFuZCBkZXZpY2Ugc2F5cyB0aGVyZSBpcyBubyBjb25uZWN0aW9uOiBza2lwXG4gICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUgfHwgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gU0hvdyBsb2FkaW5nIHRvYXN0XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzaG93TG9hZGluZ1RvYXN0ID0gIW9wdHMgfHwgb3B0cy5zaG93TG9hZGluZ1RvYXN0ICE9PSBmYWxzZTtcbiAgICBsZXQgbG9hZGluZ1RvYXN0OiBIVE1MSW9uVG9hc3RFbGVtZW50O1xuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5SRVRSWV9UT19DT05ORUNUJyxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgICBvbldpbGxQcmVzZW50OiB0ID0+IGxvYWRpbmdUb2FzdCA9IHR9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2hlY2tpbmcgY29ubmVjdGlvbiB0byBwb2QuLi4nKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuXG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiBmYWxzZTsgLy8gTm8gcGVlciBkZWZpbmUuIFNraXBcblxuICAgICAgY29uc3QgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgICBjb25zdCBwZWVySW5mbyA9IGF3YWl0IHRoaXMuY2hlY2tQZWVyQWxpdmUocGVlcik7XG4gICAgICBjb25zdCBwZWVyQWxpdmVBbmRDb21wYXRpYmxlID0gcGVlckluZm8gJiYgYXdhaXQgdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgb2ZmbGluZSBtb2RlXG4gICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAvLyBSZXN0YXJ0XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydChwZWVyKTtcblxuICAgICAgICAvLyBXYWl0IGEgcHJvbWlzZSwgYmVmb3JlIHJlY2hlY2tcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCB0aGlzLm9ubGluZSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgbG9hZGluZyB0b2FzdCAod2l0aCBhIG1pbmltYWwgZGlzcGxheSBkdXJhdGlvbiBvZiAycylcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgc2xlZXAoMjAwMCAtIChEYXRlLm5vdygpIC0gbm93KSk7XG4gICAgICBpZiAobG9hZGluZ1RvYXN0KSBhd2FpdCBsb2FkaW5nVG9hc3QuZGlzbWlzcygpO1xuICAgIH1cblxuICAgIC8vIFJlY2hlY2sgbmV0d29yayBzdGF0dXNcbiAgICBjb25zdCBvbmxpbmUgPSB0aGlzLm9ubGluZTtcblxuICAgIC8vIERpc3BsYXkgYSB0b2FzdCB0byB1c2VyXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd09ubGluZVRvYXN0ICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJ30pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcHRzICYmIG9wdHMuc2hvd09mZmxpbmVUb2FzdCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMuc2hvd09mZmxpbmVUb2FzdCh7c2hvd1JldHJ5QnV0dG9uOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQgJiYgb25saW5lO1xuICB9XG5cbiAgYXN5bmMgc2hvd09mZmxpbmVUb2FzdChvcHRzPzoge1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgc2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeVN1Y2Nlc3NUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBvblJldHJ5U3VjY2Vzcz86ICgpID0+IHZvaWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybjsgLy8gU2tpcCBpZiBvbmxpbmVcblxuICAgIC8vIFRvYXN0IHdpdGggYSByZXRyeSBidXR0b25cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93UmV0cnlCdXR0b24gIT09IGZhbHNlKSB7XG5cbiAgICAgIGNvbnN0IHRvYXN0UmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAob3B0cyAmJiBvcHRzLm1lc3NhZ2UgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnKSxcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMDAsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyByZWNvbm5lY3QgYnV0dG9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgcm9sZTogJ3JlZnJlc2gnLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTkVUV09SSy5CVE5fQ0hFQ0tfQUxJVkUnKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVzZXIgZG9uJ3QgY2xpY2sgcmVjb25uZWN0OiByZXR1cm5cbiAgICAgIGlmICghdG9hc3RSZXN1bHQgfHwgdG9hc3RSZXN1bHQucm9sZSAhPT0gJ3JlZnJlc2gnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGlmIG5ldHdvcmsgc3RhdGUgY2hhbmdlZCB0byBvbmxpbmU6IGV4aXQgaGVyZVxuICAgICAgaWYgKHRoaXMub25saW5lKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVHJ5IHRvIHJlY29ubmVjdFxuICAgICAgY29uc3Qgb25saW5lID0gYXdhaXQgdGhpcy50cnlPbmxpbmUoe1xuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0b0Jvb2xlYW4ob3B0cyAmJiBvcHRzLnNob3dSZXRyeVN1Y2Nlc3NUb2FzdCwgdHJ1ZSksXG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5TG9hZGluZ1RvYXN0LCB0cnVlKVxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIHRvYXN0LCB3aXRob3V0ICdhd2FpdCcsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCdzIGRpc21pc3NcbiAgICB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcsXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBjaGVja0NvbXBhdGlibGU/OiBib29sZWFuOyBkaXNwbGF5VG9hc3Q/OiBib29sZWFuIH0gKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlcik7XG4gIH1cblxuICBhc3luYyBjaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvOiBOb2RlSW5mbywgb3B0cz86IHsgc2hvd1RvYXN0PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTsgLy8gU2tpcCBjb21wYXRpYmlsaXR5IGNoZWNrXG5cbiAgICAvLyBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICBjb25zdCBpc0NvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLCBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24pO1xuXG4gICAgLy8gRGlzcGxheSB0b2FzdCwgaWYgbm90IGNvbXBhdGlibGVcbiAgICBpZiAoIWlzQ29tcGF0aWJsZSAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTkVUV09SSy5FUlJPUi5OT1RfQ09NUEFUSUJMRV9QRUVSJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ29tcGF0aWJsZTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vZGVJbmZvKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICcvYXBpL25vZGUvaW5mbycpO1xuICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2NoZWNrUGVlckFsaXZlJywgYEdldHRpbmcgJyR7cGF0aH0nIC4uLmApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGE6IE5vZGVJbmZvID0gYXdhaXQgdGhpcy5nZXQocGF0aCk7XG4gICAgICB0aGlzLl9sb2dnZXI/LmRlYnVnKCdjaGVja1BlZXJBbGl2ZScsIGBSZXNwb25zZSBvZiAnJHtwYXRofSc6XFxuJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIEVycm9yIHdoaWxlIGdldHRpbmcgJyR7cGF0aH0nOiAke2VyciAmJiBlcnIubWVzc2FnZSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZXJyb3IoJ2NoZWNrUGVlckFsaXZlJywgYEVycm9yIHdoaWxlIGdldHRpbmcgJyR7cGF0aH0nOiAke2Vycj8ubWVzc2FnZSB8fCAnJ31gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXBwTWFuaWZlc3QocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7bm9jYWNoZT86IGJvb2xlYW59KTogUHJvbWlzZTxBcHBNYW5pZmVzdHx1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAnbWFuaWZlc3QuanNvbicpO1xuICAgICAgaWYgKG9wdHM/Lm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQocGF0aCwgb3B0cyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ21hbmlmZXN0Lmpzb25cXCcuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2VzcycsIGVycik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ21hbmlmZXN0Lmpzb25cXCcuJywgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXBwVmVyc2lvbihwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cyA9IHtub2NhY2hlOiB0cnVlfSk6IFByb21pc2U8c3RyaW5nfHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICd2ZXJzaW9uLmFwcHVwJyk7XG4gICAgICBpZiAob3B0cy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwVmVyc2lvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRUZXh0KHBhdGgsIG9wdHMpO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhhcHBWZXJzaW9uKSkgcmV0dXJuIGFwcFZlcnNpb247XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ3ZlcnNpb24uYXBwdXBcXCcuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2VzcycpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKCdbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSBcXCd2ZXJzaW9uLmFwcHVwXFwnLicsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIFRyeSBsb2FkaW5nIG1hbmlmZXN0Lmpzb25cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0QXBwTWFuaWZlc3QocGVlciwgb3B0cyk7XG4gICAgcmV0dXJuIG1hbmlmZXN0Py52ZXJzaW9uO1xuICB9XG5cbiAgY29tcHV0ZVBlZXJQYXRoKHBlZXI6IHN0cmluZyB8IFBlZXIgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBwZWVyVXJsID0gKHBlZXIgaW5zdGFuY2VvZiBQZWVyKSA/IHBlZXIudXJsIDogKHBlZXIgYXMgc3RyaW5nKTtcblxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHBlZXJVcmwgPSBwZWVyVXJsLnN1YnN0cigwLCBwZWVyVXJsLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgfVxuXG4gICAgLy8gQ29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgcmV0dXJuIHBlZXJVcmwgKyBwYXRoO1xuICB9XG5cblxuICAvKipcbiAgICogQWxsb3cgdG8gZm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAqL1xuICBzZXRGb3JjZU9mZmxpbmUodmFsdWU/OiBib29sZWFuLCBvcHRzPzoge1xuICAgIHNob3dUb2FzdD86IGJvb2xlYW47IC8vIERpc3BsYXkgYSB0b2FzdCwgd2hlbiBvZmZsaW5lID9cbiAgfSkge1xuICAgIHZhbHVlID0gdG9Cb29sZWFuKHZhbHVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5fZm9yY2VPZmZsaW5lICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3QgcHJldmlvdXNDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG4gICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0Nvbm5lY3Rpb25UeXBlICE9PSBjdXJyZW50Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske2N1cnJlbnRDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KGN1cnJlbnRDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gT2ZmbGluZSBtb2RlOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBpZiAoY3VycmVudENvbm5lY3Rpb25UeXBlID09PSAnbm9uZScgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FX0hFTFAnLCB0eXBlOiAnd2FybmluZyd9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNob3dTZWxlY3RQZWVyTW9kYWwob3B0cz86IFBhcnRpYWw8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+KTogUHJvbWlzZTxQZWVyIHwgdW5kZWZpbmVkPiB7XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0ICRvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIGNvbnN0IHBlZXJzJCA9ICRvblJlZnJlc2gucGlwZShcbiAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLmdldERlZmF1bHRQZWVycygpKSxcbiAgICAgIG1hcChwZWVycyA9PiBwZWVycyB8fCBbXSlcbiAgICApO1xuXG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBTZWxlY3RQZWVyTW9kYWwsXG4gICAgICBjb21wb25lbnRQcm9wczogPElTZWxlY3RQZWVyTW9kYWxPcHRpb25zPntcbiAgICAgICAgb25SZWZyZXNoOiAkb25SZWZyZXNoLFxuICAgICAgICBwZWVyczogcGVlcnMkLFxuICAgICAgICAuLi5vcHRzXG4gICAgICB9LFxuICAgICAga2V5Ym9hcmRDbG9zZTogdHJ1ZSxcbiAgICAgIHNob3dCYWNrZHJvcDogdHJ1ZVxuICAgIH0pO1xuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcbiAgICAkb25SZWZyZXNoLmVtaXQoKTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25XaWxsRGlzbWlzcygpO1xuICAgICRvblJlZnJlc2guY29tcGxldGUoKTtcblxuICAgIHJldHVybiBkYXRhICYmIChkYXRhIGFzIFBlZXIpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2xlYXJpbmcgYWxsIGNhY2hlcy4uLicpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmNsZWFyQWxsKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlICYmIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5lbWl0KCk7XG5cbiAgICAgICAgICAvLyBXYWl0IG9ic2VydmVycyBjbGVhbiB0aGVpciBjYWNoZXMsIGlmIG5lZWRcbiAgICAgICAgICByZXR1cm4gc2xlZXAoNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQWxsIGNhY2hlIGNsZWFyZWQsIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydChwZWVyPzogUGVlcik6IFByb21pc2U8UGVlcj4ge1xuXG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gU3RhcnRpbmcgbmV0d29yay4uLicpO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcGVlciA9IHBlZXIgfHwgKGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKSk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdG8gaGlkZSB0aGUgc3BsYXNoc2NyZWVuLCBiZWZvcmUgb3BlbiB0aGUgbW9kYWxcbiAgICBpZiAoIXBlZXIpIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAvLyBObyBwZWVyIGluIHNldHRpbmdzOiBhc2sgdXNlciB0byBjaG9vc2VcbiAgICB3aGlsZSAoIXBlZXIpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBObyBwZWVyIGRlZmluZWQuIEFza2luZyB1c2VyIHRvIGNob29zZSBhIHBlZXIuJyk7XG4gICAgICBwZWVyID0gYXdhaXQgdGhpcy5zaG93U2VsZWN0UGVlck1vZGFsKHthbGxvd1NlbGVjdERvd25QZWVyOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcblxuICAgIC8vIFdhaXQgc2V0dGluZ3Mgc3RhcnRzLCB0aGVuIHNhdmUgcGVlciBpbiBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoe3BlZXJVcmw6IHBlZXIudXJsfSk7XG5cbiAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yaz8udHlwZSB8fCAndW5rbm93bicpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHJlZnJlc2ggdGltZXJcbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGRldmljZSBuZXR3b3JrIGNoYW5nZXNcbiAgICBpZiAodGhpcy5fbmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uRGlzY29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoJ25vbmUnKSkpO1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uQ29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9ICh0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnKSA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnBlZXJVcmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBVc2UgcGVlciB7JHtzZXR0aW5ncy5wZWVyVXJsfX0gKGZvdW5kIGluIHRoZSBsb2NhbCBzdG9yYWdlKWApO1xuICAgICAgcmV0dXJuIFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdXNlIGRlZmF1bHQgcGVlciBpbiBlbnYsIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIGlmIEFwcCBpcyBob3N0ZWQsIHRyeSB0aGUgd2ViIHNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudCAmJiB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbjtcbiAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpIHtcbiAgICAgICAgcmV0dXJuIGRldGVjdGVkUGVlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVlciBub3QgYWxpdmUsIGJ1dCBzaG91bGQgYmUgYXQgdGhlIHNhbWUgVVJMLCByZXRyeWluZyBlYWNoIDFzXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlcikge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGltZXIoMTAwMCwgMTAwMClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BTdWJqZWN0KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLndhcm4oYFtuZXR3b3JrLXNlcnZpY2VdIFdhaXRpbmcgcGVlciBiZSBiZSBhbGl2ZSwgYXQgeyR7ZGV0ZWN0ZWRQZWVyLnVybH19IC4uLmApKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUoZGV0ZWN0ZWRQZWVyKSksXG4gICAgICAgICAgICBmaWx0ZXIoYWxpdmUgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gZGV0ZWN0ZWRQZWVyKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpe1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKGluZm8gPT4gISFpbmZvICE9PSAhIWxhc3RJbmZvKSxcbiAgICAgICAgdGFwKGluZm8gPT4gbGFzdEluZm8gPSBpbmZvKSxcblxuICAgICAgICAvLyBDaGVjayBjb21wYXRpYmlsaXR5XG4gICAgICAgIG1lcmdlTWFwKChpbmZvKSA9PiB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUoaW5mbywge3Nob3dUb2FzdDogdHJ1ZX0pKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYWxpdmUgPT4ge1xuICAgICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgICAgLy8gUmVzdGFydCB0aGUgc2VydmljZSAodG8gZm9yY2UgcmUgYXV0aClcbiAgICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICghYWxpdmUgJiYgdGhpcy5vbmxpbmUpe1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIFJlZnJlc2ggdGltZXIgc3RvcHBlZCcpKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ3RleHQnO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0VGV4dCh0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQ8VD4ocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG5cbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldEpzb248VD4odGhpcy5odHRwLCB0aGlzLmdldFVyaShwYXRoKSwgb3B0cyk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRVcmkocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJpID0gcGF0aDtcblxuICAgIC8vIElmIHBhdGggaXMgbm90IGFuIFVSSTogcHJlcGVuZCB3aXRoIHBlZXIgVVJMXG4gICAgaWYgKCF1cmkuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICF1cmkuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgbGV0IHBlZXJVcmwgPSAodGhpcy5wZWVyICYmIHRoaXMucGVlci51cmwpO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBVUkk6IGNvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgICAgdXJpID0gcGVlclVybCArIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKTtcbiAgICBpZiAoY29ubmVjdGlvblR5cGUgIT09IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB7XG4gICAgICB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlIGFzIENvbm5lY3Rpb25UeXBlO1xuXG4gICAgICAvLyBJZiBOT1QgIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgZGF0YT86IFQpIHtcbiAgICBjb25zdCBob29rcyA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGhvb2tzKSkge1xuICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29yay1zZXJ2aWNlXSBUcmlnZ2VyICR7bmFtZX0gaG9vazogRXhlY3V0aW5nICR7aG9va3MubGVuZ3RofSBjYWxsYmFja3MuLi5gKTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGhvb2tzLm1hcChjYWxsYmFjayA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHJldHVybiBwcm9taXNlLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59XG4iXX0=
590
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQXdCLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztB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QkFDdEMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmFnZSB9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzIH0gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBJU2VsZWN0UGVlck1vZGFsT3B0aW9ucywgU2VsZWN0UGVlck1vZGFsIH0gZnJvbSAnLi4vcGVlci9zZWxlY3QtcGVlci5tb2RhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWSB9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTcGxhc2hTY3JlZW4gfSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuaywgc2xlZXAsIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9uZXR3b3JrL25neCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE92ZXJsYXlFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IEFwcE1hbmlmZXN0LCBOb2RlSW5mbyB9IGZyb20gJy4vbmV0d29yay51dGlscyc7XG5pbXBvcnQgeyBIdHRwVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvaHR0cC9odHRwLnV0aWxzJztcbmltcG9ydCB7IFZlcnNpb25VdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IENvbm5lY3Rpb25UeXBlLCBnZXRDb25uZWN0aW9uVHlwZSwgTmV0d29ya0V2ZW50VHlwZSB9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBBUFBfTE9HR0lOR19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IElMb2dnZXIsIElMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5cbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gIE1PQklMRTogMTAwMCAqIDYwICogMTAgLyogZXZlcnkgMTAgbWluICovLFxuICBERVNLVE9QOiAxMDAwICogNjAgKiA1IC8qIGV2ZXJ5IDUgbWluICovLFxufTtcblxuZXhwb3J0IGNvbnN0IFBFRVJfVVJMX1JFR0VYUCA9IC9eKGh0dHB8aHR0cHMpOlxcL1xcL1teIFwiPyNAXSskLztcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICAgIE1PQklMRTogIDEwMDAsXG4gICAgREVTS1RPUDogMTAwMFxufSovXG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2U8UGVlciwgUGVlcj4ge1xuXG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcChwZWVyID0+IHBlZXI/LnVybCksXG4gICAgZmlsdGVyKGlzTm90TmlsT3JCbGFuayksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8c3RyaW5nPigpXG4gICk7XG4gIG9uTmV0d29ya1N0YXR1c0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25UeXBlPihudWxsKTtcbiAgb25SZXNldE5ldHdvcmtDYWNoZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbW9iaWxlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcms6IE5ldHdvcms7XG4gIHByaXZhdGUgX3RpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaFBlcmlvZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lclJlZnJlc2hDb25kaXRpb246ICgpID0+IGJvb2xlYW47XG4gIHByaXZhdGUgX2RldmljZUNvbm5lY3Rpb25UeXBlOiBDb25uZWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfZm9yY2VPZmZsaW5lOiBib29sZWFuO1xuICBwcml2YXRlIF9saXN0ZW5lcnM6IHtcbiAgIFtrZXk6IHN0cmluZ106ICgoZGF0YT86IGFueSkgPT4gUHJvbWlzZTx2b2lkPilbXTtcbiAgfSA9IHt9O1xuXG4gIGdldCBvbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgIT09ICdub25lJztcbiAgfVxuXG4gIGdldCBvZmZsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25UeXBlID09PSAnbm9uZSc7XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblR5cGUoKTogQ29ubmVjdGlvblR5cGV7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmUgJiYgJ25vbmUnXG4gICAgICAvLyBFbHNlLCByZXR1cm4gZGV2aWNlIGNvbm5lY3Rpb24gdHlwZSAob3IgdW5rbm93bilcbiAgICAgIHx8ICh0aGlzLnN0YXJ0ZWQgJiYgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgfHwgJ3Vua25vd24nKTtcbiAgfVxuXG4gIGdldCBwZWVyKCk6IFBlZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFTdWJqZWN0LnZhbHVlPy5jbG9uZSgpO1xuICB9XG5cbiAgc2V0IHBlZXIocGVlcjogUGVlcikge1xuICAgIHRoaXMucmVzdGFydChwZWVyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0dHSU5HX1NFUlZJQ0UpIHByaXZhdGUgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBuZXR3b3JrOiBOZXR3b3JrLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXJcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuc2V0dGluZ3MubW9iaWxlO1xuICAgIHRoaXMuX2xvZ2dlciA9IHRoaXMubG9nZ2luZ1NlcnZpY2U/LmdldExvZ2dlcignbmV0d29yaycpO1xuXG4gICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5NT0JJTEU7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0aGlzLm9ubGluZTsgLy8gQ2hlY2sgb25seSB3aGVuIG9ubGluZSwgYW5kIHN0b3Agd2hlbiBvZmZsaW5lXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgLy8gU2F2ZSBuZXR3b3JrIGluc3RhbmNlIG9ubHkgd2hlbiBjb3Jkb3ZhIGlzIHJ1bm5pbmdcbiAgICBpZiAocGxhdGZvcm0uaXMoJ2NvcmRvdmEnKSkge1xuICAgICAgdGhpcy5fbmV0d29yayA9IG5ldHdvcms7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKHBlZXIgPT4gdGhpcy5uZ09uQWZ0ZXJTdGFydChwZWVyKSk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VD0gYW55PihldmVudFR5cGU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8YW55Pik6IFN1YnNjcmlwdGlvbiB7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAncGVlckNoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblBlZXJDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgY2FzZSAnc3RhdHVzQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCh0eXBlKSA9PiBjYWxsYmFjayh0eXBlIGFzIHVua25vd24gYXMgVCkpO1xuXG4gICAgICBjYXNlICdyZXNldENhY2hlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyeU9ubGluZShvcHRzPzoge1xuICAgIHNob3dPZmZsaW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dPbmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd0xvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgYWZ0ZXJSZXRyeURlbGF5PzogbnVtYmVyO1xuICAgIGFmdGVyUmV0cnlQcm9taXNlPzogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gSWYgb2ZmbGluZSBtb2RlIG5vdCBmb3JjZWQsIGFuZCBkZXZpY2Ugc2F5cyB0aGVyZSBpcyBubyBjb25uZWN0aW9uOiBza2lwXG4gICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUgfHwgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gU0hvdyBsb2FkaW5nIHRvYXN0XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzaG93TG9hZGluZ1RvYXN0ID0gIW9wdHMgfHwgb3B0cy5zaG93TG9hZGluZ1RvYXN0ICE9PSBmYWxzZTtcbiAgICBsZXQgbG9hZGluZ1RvYXN0OiBIVE1MSW9uVG9hc3RFbGVtZW50O1xuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5SRVRSWV9UT19DT05ORUNUJyxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgICBvbldpbGxQcmVzZW50OiB0ID0+IGxvYWRpbmdUb2FzdCA9IHR9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2hlY2tpbmcgY29ubmVjdGlvbiB0byBwb2QuLi4nKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuXG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiBmYWxzZTsgLy8gTm8gcGVlciBkZWZpbmUuIFNraXBcblxuICAgICAgY29uc3QgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgICBjb25zdCBwZWVySW5mbyA9IGF3YWl0IHRoaXMuY2hlY2tQZWVyQWxpdmUocGVlcik7XG4gICAgICBjb25zdCBwZWVyQWxpdmVBbmRDb21wYXRpYmxlID0gcGVlckluZm8gJiYgYXdhaXQgdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgb2ZmbGluZSBtb2RlXG4gICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAvLyBSZXN0YXJ0XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydChwZWVyKTtcblxuICAgICAgICAvLyBXYWl0IGEgcHJvbWlzZSwgYmVmb3JlIHJlY2hlY2tcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCB0aGlzLm9ubGluZSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgbG9hZGluZyB0b2FzdCAod2l0aCBhIG1pbmltYWwgZGlzcGxheSBkdXJhdGlvbiBvZiAycylcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgc2xlZXAoMjAwMCAtIChEYXRlLm5vdygpIC0gbm93KSk7XG4gICAgICBpZiAobG9hZGluZ1RvYXN0KSBhd2FpdCBsb2FkaW5nVG9hc3QuZGlzbWlzcygpO1xuICAgIH1cblxuICAgIC8vIFJlY2hlY2sgbmV0d29yayBzdGF0dXNcbiAgICBjb25zdCBvbmxpbmUgPSB0aGlzLm9ubGluZTtcblxuICAgIC8vIERpc3BsYXkgYSB0b2FzdCB0byB1c2VyXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd09ubGluZVRvYXN0ICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJ30pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChvcHRzICYmIG9wdHMuc2hvd09mZmxpbmVUb2FzdCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMuc2hvd09mZmxpbmVUb2FzdCh7c2hvd1JldHJ5QnV0dG9uOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQgJiYgb25saW5lO1xuICB9XG5cbiAgYXN5bmMgc2hvd09mZmxpbmVUb2FzdChvcHRzPzoge1xuICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgc2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeVN1Y2Nlc3NUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBvblJldHJ5U3VjY2Vzcz86ICgpID0+IHZvaWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybjsgLy8gU2tpcCBpZiBvbmxpbmVcblxuICAgIC8vIFRvYXN0IHdpdGggYSByZXRyeSBidXR0b25cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93UmV0cnlCdXR0b24gIT09IGZhbHNlKSB7XG5cbiAgICAgIGNvbnN0IHRvYXN0UmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAob3B0cyAmJiBvcHRzLm1lc3NhZ2UgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnKSxcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMDAsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyByZWNvbm5lY3QgYnV0dG9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgcm9sZTogJ3JlZnJlc2gnLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTkVUV09SSy5CVE5fQ0hFQ0tfQUxJVkUnKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVzZXIgZG9uJ3QgY2xpY2sgcmVjb25uZWN0OiByZXR1cm5cbiAgICAgIGlmICghdG9hc3RSZXN1bHQgfHwgdG9hc3RSZXN1bHQucm9sZSAhPT0gJ3JlZnJlc2gnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGlmIG5ldHdvcmsgc3RhdGUgY2hhbmdlZCB0byBvbmxpbmU6IGV4aXQgaGVyZVxuICAgICAgaWYgKHRoaXMub25saW5lKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVHJ5IHRvIHJlY29ubmVjdFxuICAgICAgY29uc3Qgb25saW5lID0gYXdhaXQgdGhpcy50cnlPbmxpbmUoe1xuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0b0Jvb2xlYW4ob3B0cyAmJiBvcHRzLnNob3dSZXRyeVN1Y2Nlc3NUb2FzdCwgdHJ1ZSksXG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5TG9hZGluZ1RvYXN0LCB0cnVlKVxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU2ltcGxlIHRvYXN0LCB3aXRob3V0ICdhd2FpdCcsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCdzIGRpc21pc3NcbiAgICB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcsXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBjaGVja0NvbXBhdGlibGU/OiBib29sZWFuOyBkaXNwbGF5VG9hc3Q/OiBib29sZWFuIH0gKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlcik7XG4gIH1cblxuICBhc3luYyBjaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvOiBOb2RlSW5mbywgb3B0cz86IHsgc2hvd1RvYXN0PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTsgLy8gU2tpcCBjb21wYXRpYmlsaXR5IGNoZWNrXG5cbiAgICAvLyBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICBjb25zdCBpc0NvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLCBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24pO1xuXG4gICAgLy8gRGlzcGxheSB0b2FzdCwgaWYgbm90IGNvbXBhdGlibGVcbiAgICBpZiAoIWlzQ29tcGF0aWJsZSAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTkVUV09SSy5FUlJPUi5OT1RfQ09NUEFUSUJMRV9QRUVSJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ29tcGF0aWJsZTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vZGVJbmZvKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICcvYXBpL25vZGUvaW5mbycpO1xuICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2NoZWNrUGVlckFsaXZlJywgYEdldHRpbmcgJyR7cGF0aH0nIC4uLmApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGE6IE5vZGVJbmZvID0gYXdhaXQgdGhpcy5nZXQocGF0aCk7XG4gICAgICB0aGlzLl9sb2dnZXI/LmRlYnVnKCdjaGVja1BlZXJBbGl2ZScsIGBSZXNwb25zZSBvZiAnJHtwYXRofSc6XFxuJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIEVycm9yIHdoaWxlIGdldHRpbmcgJyR7cGF0aH0nOiAke2VyciAmJiBlcnIubWVzc2FnZSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZXJyb3IoJ2NoZWNrUGVlckFsaXZlJywgYEVycm9yIHdoaWxlIGdldHRpbmcgJyR7cGF0aH0nOiAke2Vycj8ubWVzc2FnZSB8fCAnJ31gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXBwTWFuaWZlc3QocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7bm9jYWNoZT86IGJvb2xlYW59KTogUHJvbWlzZTxBcHBNYW5pZmVzdHx1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAnbWFuaWZlc3QuanNvbicpO1xuICAgICAgaWYgKG9wdHM/Lm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQocGF0aCwgb3B0cyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ21hbmlmZXN0Lmpzb25cXCcuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2VzcycsIGVycik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ21hbmlmZXN0Lmpzb25cXCcuJywgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXBwVmVyc2lvbihwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cyA9IHtub2NhY2hlOiB0cnVlfSk6IFByb21pc2U8c3RyaW5nfHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICd2ZXJzaW9uLmFwcHVwJyk7XG4gICAgICBpZiAob3B0cy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwVmVyc2lvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRUZXh0KHBhdGgsIG9wdHMpO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhhcHBWZXJzaW9uKSkgcmV0dXJuIGFwcFZlcnNpb247XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ3ZlcnNpb24uYXBwdXBcXCcuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2VzcycpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKCdbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSBcXCd2ZXJzaW9uLmFwcHVwXFwnLicsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIFRyeSBsb2FkaW5nIG1hbmlmZXN0Lmpzb25cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0QXBwTWFuaWZlc3QocGVlciwgb3B0cyk7XG4gICAgcmV0dXJuIG1hbmlmZXN0Py52ZXJzaW9uO1xuICB9XG5cbiAgY29tcHV0ZVBlZXJQYXRoKHBlZXI6IHN0cmluZyB8IFBlZXIgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBwZWVyVXJsID0gKHBlZXIgaW5zdGFuY2VvZiBQZWVyKSA/IHBlZXIudXJsIDogKHBlZXIgYXMgc3RyaW5nKTtcblxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHBlZXJVcmwgPSBwZWVyVXJsLnN1YnN0cigwLCBwZWVyVXJsLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgfVxuXG4gICAgLy8gQ29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgcmV0dXJuIHBlZXJVcmwgKyBwYXRoO1xuICB9XG5cblxuICAvKipcbiAgICogQWxsb3cgdG8gZm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAqL1xuICBzZXRGb3JjZU9mZmxpbmUodmFsdWU/OiBib29sZWFuLCBvcHRzPzoge1xuICAgIHNob3dUb2FzdD86IGJvb2xlYW47IC8vIERpc3BsYXkgYSB0b2FzdCwgd2hlbiBvZmZsaW5lID9cbiAgfSkge1xuICAgIHZhbHVlID0gdG9Cb29sZWFuKHZhbHVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5fZm9yY2VPZmZsaW5lICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3QgcHJldmlvdXNDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG4gICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0Nvbm5lY3Rpb25UeXBlICE9PSBjdXJyZW50Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske2N1cnJlbnRDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KGN1cnJlbnRDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gT2ZmbGluZSBtb2RlOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBpZiAoY3VycmVudENvbm5lY3Rpb25UeXBlID09PSAnbm9uZScgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FX0hFTFAnLCB0eXBlOiAnd2FybmluZyd9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNob3dTZWxlY3RQZWVyTW9kYWwob3B0cz86IFBhcnRpYWw8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+KTogUHJvbWlzZTxQZWVyIHwgdW5kZWZpbmVkPiB7XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0ICRvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIGNvbnN0IHBlZXJzJCA9ICRvblJlZnJlc2gucGlwZShcbiAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLmdldERlZmF1bHRQZWVycygpKSxcbiAgICAgIG1hcChwZWVycyA9PiBwZWVycyB8fCBbXSlcbiAgICApO1xuXG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBTZWxlY3RQZWVyTW9kYWwsXG4gICAgICBjb21wb25lbnRQcm9wczogPElTZWxlY3RQZWVyTW9kYWxPcHRpb25zPntcbiAgICAgICAgb25SZWZyZXNoOiAkb25SZWZyZXNoLFxuICAgICAgICBwZWVyczogcGVlcnMkLFxuICAgICAgICAuLi5vcHRzXG4gICAgICB9LFxuICAgICAga2V5Ym9hcmRDbG9zZTogdHJ1ZSxcbiAgICAgIHNob3dCYWNrZHJvcDogdHJ1ZVxuICAgIH0pO1xuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcbiAgICAkb25SZWZyZXNoLmVtaXQoKTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25XaWxsRGlzbWlzcygpO1xuICAgICRvblJlZnJlc2guY29tcGxldGUoKTtcblxuICAgIHJldHVybiBkYXRhICYmIChkYXRhIGFzIFBlZXIpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuXG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gQ2xlYXJpbmcgYWxsIGNhY2hlcy4uLicpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmNsZWFyQWxsKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlICYmIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5lbWl0KCk7XG5cbiAgICAgICAgICAvLyBXYWl0IG9ic2VydmVycyBjbGVhbiB0aGVpciBjYWNoZXMsIGlmIG5lZWRcbiAgICAgICAgICByZXR1cm4gc2xlZXAoNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQWxsIGNhY2hlIGNsZWFyZWQsIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydChwZWVyPzogUGVlcik6IFByb21pc2U8UGVlcj4ge1xuXG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gU3RhcnRpbmcgbmV0d29yay4uLicpO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcGVlciA9IHBlZXIgfHwgKGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKSk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdG8gaGlkZSB0aGUgc3BsYXNoc2NyZWVuLCBiZWZvcmUgb3BlbiB0aGUgbW9kYWxcbiAgICBpZiAoIXBlZXIpIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAvLyBObyBwZWVyIGluIHNldHRpbmdzOiBhc2sgdXNlciB0byBjaG9vc2VcbiAgICB3aGlsZSAoIXBlZXIpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBObyBwZWVyIGRlZmluZWQuIEFza2luZyB1c2VyIHRvIGNob29zZSBhIHBlZXIuJyk7XG4gICAgICBwZWVyID0gYXdhaXQgdGhpcy5zaG93U2VsZWN0UGVlck1vZGFsKHthbGxvd1NlbGVjdERvd25QZWVyOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcblxuICAgIC8vIFdhaXQgc2V0dGluZ3Mgc3RhcnRzLCB0aGVuIHNhdmUgcGVlciBpbiBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoe3BlZXJVcmw6IHBlZXIudXJsfSk7XG5cbiAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yaz8udHlwZSB8fCAndW5rbm93bicpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHJlZnJlc2ggdGltZXJcbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGRldmljZSBuZXR3b3JrIGNoYW5nZXNcbiAgICBpZiAodGhpcy5fbmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uRGlzY29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoJ25vbmUnKSkpO1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uQ29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9ICh0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnKSA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnBlZXJVcmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBVc2UgcGVlciB7JHtzZXR0aW5ncy5wZWVyVXJsfX0gKGZvdW5kIGluIHRoZSBsb2NhbCBzdG9yYWdlKWApO1xuICAgICAgcmV0dXJuIFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdXNlIGRlZmF1bHQgcGVlciBpbiBlbnYsIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIGlmIEFwcCBpcyBob3N0ZWQsIHRyeSB0aGUgd2ViIHNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudCAmJiB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbjtcbiAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpIHtcbiAgICAgICAgcmV0dXJuIGRldGVjdGVkUGVlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVlciBub3QgYWxpdmUsIGJ1dCBzaG91bGQgYmUgYXQgdGhlIHNhbWUgVVJMLCByZXRyeWluZyBlYWNoIDFzXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlcikge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGltZXIoMTAwMCwgMTAwMClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BTdWJqZWN0KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLndhcm4oYFtuZXR3b3JrLXNlcnZpY2VdIFdhaXRpbmcgcGVlciBiZSBiZSBhbGl2ZSwgYXQgeyR7ZGV0ZWN0ZWRQZWVyLnVybH19IC4uLmApKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUoZGV0ZWN0ZWRQZWVyKSksXG4gICAgICAgICAgICBmaWx0ZXIoYWxpdmUgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gZGV0ZWN0ZWRQZWVyKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpe1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKGluZm8gPT4gISFpbmZvICE9PSAhIWxhc3RJbmZvKSxcbiAgICAgICAgdGFwKGluZm8gPT4gbGFzdEluZm8gPSBpbmZvKSxcblxuICAgICAgICAvLyBDaGVjayBjb21wYXRpYmlsaXR5XG4gICAgICAgIG1lcmdlTWFwKChpbmZvKSA9PiB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUoaW5mbywge3Nob3dUb2FzdDogdHJ1ZX0pKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYWxpdmUgPT4ge1xuICAgICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgICAgLy8gUmVzdGFydCB0aGUgc2VydmljZSAodG8gZm9yY2UgcmUgYXV0aClcbiAgICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICghYWxpdmUgJiYgdGhpcy5vbmxpbmUpe1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIFJlZnJlc2ggdGltZXIgc3RvcHBlZCcpKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ3RleHQnO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0VGV4dCh0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQ8VD4ocGF0aDogc3RyaW5nLCBvcHRzPzoge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG5cbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldEpzb248VD4odGhpcy5odHRwLCB0aGlzLmdldFVyaShwYXRoKSwgb3B0cyk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRVcmkocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJpID0gcGF0aDtcblxuICAgIC8vIElmIHBhdGggaXMgbm90IGFuIFVSSTogcHJlcGVuZCB3aXRoIHBlZXIgVVJMXG4gICAgaWYgKCF1cmkuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICF1cmkuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgbGV0IHBlZXJVcmwgPSAodGhpcy5wZWVyICYmIHRoaXMucGVlci51cmwpO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBVUkk6IGNvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgICAgdXJpID0gcGVlclVybCArIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKTtcbiAgICBpZiAoY29ubmVjdGlvblR5cGUgIT09IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB7XG4gICAgICB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlIGFzIENvbm5lY3Rpb25UeXBlO1xuXG4gICAgICAvLyBJZiBOT1QgIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgZGF0YT86IFQpIHtcbiAgICBjb25zdCBob29rcyA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGhvb2tzKSkge1xuICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29yay1zZXJ2aWNlXSBUcmlnZ2VyICR7bmFtZX0gaG9vazogRXhlY3V0aW5nICR7aG9va3MubGVuZ3RofSBjYWxsYmFja3MuLi5gKTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGhvb2tzLm1hcChjYWxsYmFjayA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHJldHVybiBwcm9taXNlLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -6,10 +6,10 @@ export class IsLoginAccountPipe {
6
6
  return value && value.pubkey && true;
7
7
  }
8
8
  }
9
- IsLoginAccountPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsLoginAccountPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
- IsLoginAccountPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: IsLoginAccountPipe, name: "isLogin" });
11
- IsLoginAccountPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsLoginAccountPipe, providedIn: 'root' });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsLoginAccountPipe, decorators: [{
9
+ IsLoginAccountPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsLoginAccountPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
+ IsLoginAccountPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: IsLoginAccountPipe, name: "isLogin" });
11
+ IsLoginAccountPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsLoginAccountPipe, providedIn: 'root' });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsLoginAccountPipe, decorators: [{
13
13
  type: Pipe,
14
14
  args: [{
15
15
  name: 'isLogin'
@@ -23,10 +23,10 @@ export class AccountToStringPipe {
23
23
  return accountToString(value);
24
24
  }
25
25
  }
26
- AccountToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
27
- AccountToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: AccountToStringPipe, name: "accountToString" });
28
- AccountToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountToStringPipe, providedIn: 'root' });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountToStringPipe, decorators: [{
26
+ AccountToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AccountToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
27
+ AccountToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: AccountToStringPipe, name: "accountToString" });
28
+ AccountToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AccountToStringPipe, providedIn: 'root' });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AccountToStringPipe, decorators: [{
30
30
  type: Pipe,
31
31
  args: [{
32
32
  name: 'accountToString'
@@ -35,4 +35,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
35
35
  type: Injectable,
36
36
  args: [{ providedIn: 'root' }]
37
37
  }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5waXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9hY2NvdW50LnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQVUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBTWhFLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsU0FBUyxDQUFDLEtBQWM7UUFDdEIsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkMsQ0FBQzs7K0dBSlUsa0JBQWtCOzZHQUFsQixrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUROLE1BQU07MkZBQ2xCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztpQkFDaEI7O2tCQUNBLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOztBQVloQyxNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7O2dIQUpVLG1CQUFtQjs4R0FBbkIsbUJBQW1CO29IQUFuQixtQkFBbUIsY0FEUCxNQUFNOzJGQUNsQixtQkFBbUI7a0JBSi9CLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtpQkFDeEI7O2tCQUNBLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWNjb3VudCwgYWNjb3VudFRvU3RyaW5nfSBmcm9tICcuLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcblxuQFBpcGUoe1xuICBuYW1lOiAnaXNMb2dpbidcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBJc0xvZ2luQWNjb3VudFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IEFjY291bnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUucHVia2V5ICYmIHRydWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYWNjb3VudFRvU3RyaW5nJ1xufSlcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEFjY291bnRUb1N0cmluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IEFjY291bnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBhY2NvdW50VG9TdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5waXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9hY2NvdW50LnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQVUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBTWhFLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsU0FBUyxDQUFDLEtBQWM7UUFDdEIsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkMsQ0FBQzs7Z0hBSlUsa0JBQWtCOzhHQUFsQixrQkFBa0I7b0hBQWxCLGtCQUFrQixjQUROLE1BQU07NEZBQ2xCLGtCQUFrQjtrQkFKOUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztpQkFDaEI7O2tCQUNBLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOztBQVloQyxNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLFNBQVMsQ0FBQyxLQUFjO1FBQ3RCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7O2lIQUpVLG1CQUFtQjsrR0FBbkIsbUJBQW1CO3FIQUFuQixtQkFBbUIsY0FEUCxNQUFNOzRGQUNsQixtQkFBbUI7a0JBSi9CLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtpQkFDeEI7O2tCQUNBLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWNjb3VudCwgYWNjb3VudFRvU3RyaW5nfSBmcm9tICcuLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcblxuQFBpcGUoe1xuICBuYW1lOiAnaXNMb2dpbidcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBJc0xvZ2luQWNjb3VudFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IEFjY291bnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUucHVia2V5ICYmIHRydWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYWNjb3VudFRvU3RyaW5nJ1xufSlcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEFjY291bnRUb1N0cmluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IEFjY291bnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBhY2NvdW50VG9TdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbiJdfQ==
@@ -8,10 +8,10 @@ export class DepartmentToStringPipe {
8
8
  return departmentToString(value);
9
9
  }
10
10
  }
11
- DepartmentToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DepartmentToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
- DepartmentToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: DepartmentToStringPipe, name: "departmentToString" });
13
- DepartmentToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DepartmentToStringPipe, providedIn: 'root' });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DepartmentToStringPipe, decorators: [{
11
+ DepartmentToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DepartmentToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
+ DepartmentToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: DepartmentToStringPipe, name: "departmentToString" });
13
+ DepartmentToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DepartmentToStringPipe, providedIn: 'root' });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DepartmentToStringPipe, decorators: [{
15
15
  type: Pipe,
16
16
  args: [{
17
17
  name: 'departmentToString'
@@ -20,4 +20,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
20
20
  type: Injectable,
21
21
  args: [{ providedIn: 'root' }]
22
22
  }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwYXJ0bWVudC10by1zdHJpbmcucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9kZXBhcnRtZW50LXRvLXN0cmluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7QUFNOUYsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQyxTQUFTLENBQUMsS0FBa0MsRUFBRSxTQUFrQjtRQUM5RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkUsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDOzttSEFMVSxzQkFBc0I7aUhBQXRCLHNCQUFzQjt1SEFBdEIsc0JBQXNCLGNBRFYsTUFBTTsyRkFDbEIsc0JBQXNCO2tCQUpsQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxvQkFBb0I7aUJBQzNCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RlcGFydG1lbnQsIGRlcGFydG1lbnRzVG9TdHJpbmcsIGRlcGFydG1lbnRUb1N0cmluZ30gZnJvbSAnLi4vbW9kZWwvZGVwYXJ0bWVudC5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2RlcGFydG1lbnRUb1N0cmluZydcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBEZXBhcnRtZW50VG9TdHJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBEZXBhcnRtZW50IHwgKERlcGFydG1lbnRbXSksIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gZGVwYXJ0bWVudHNUb1N0cmluZyh2YWx1ZSwgc2VwYXJhdG9yKTtcbiAgICByZXR1cm4gZGVwYXJ0bWVudFRvU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwYXJ0bWVudC10by1zdHJpbmcucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9kZXBhcnRtZW50LXRvLXN0cmluZy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7QUFNOUYsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQyxTQUFTLENBQUMsS0FBa0MsRUFBRSxTQUFrQjtRQUM5RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkUsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDOztvSEFMVSxzQkFBc0I7a0hBQXRCLHNCQUFzQjt3SEFBdEIsc0JBQXNCLGNBRFYsTUFBTTs0RkFDbEIsc0JBQXNCO2tCQUpsQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxvQkFBb0I7aUJBQzNCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RlcGFydG1lbnQsIGRlcGFydG1lbnRzVG9TdHJpbmcsIGRlcGFydG1lbnRUb1N0cmluZ30gZnJvbSAnLi4vbW9kZWwvZGVwYXJ0bWVudC5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2RlcGFydG1lbnRUb1N0cmluZydcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBEZXBhcnRtZW50VG9TdHJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBEZXBhcnRtZW50IHwgKERlcGFydG1lbnRbXSksIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gZGVwYXJ0bWVudHNUb1N0cmluZyh2YWx1ZSwgc2VwYXJhdG9yKTtcbiAgICByZXR1cm4gZGVwYXJ0bWVudFRvU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG4iXX0=
@@ -8,10 +8,10 @@ export class PersonToStringPipe {
8
8
  return PersonUtils.personToString(value);
9
9
  }
10
10
  }
11
- PersonToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PersonToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
- PersonToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: PersonToStringPipe, name: "personToString" });
13
- PersonToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PersonToStringPipe, providedIn: 'root' });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PersonToStringPipe, decorators: [{
11
+ PersonToStringPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PersonToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
12
+ PersonToStringPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: PersonToStringPipe, name: "personToString" });
13
+ PersonToStringPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PersonToStringPipe, providedIn: 'root' });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PersonToStringPipe, decorators: [{
15
15
  type: Pipe,
16
16
  args: [{
17
17
  name: 'personToString'
@@ -20,4 +20,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
20
20
  type: Injectable,
21
21
  args: [{ providedIn: 'root' }]
22
22
  }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLXRvLXN0cmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3BpcGVzL3BlcnNvbi10by1zdHJpbmcucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFTLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQU0xRCxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFNBQVMsQ0FBQyxLQUF3QixFQUFFLFNBQWtCO1FBQ3BELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFlLENBQUMsQ0FBQztJQUNyRCxDQUFDOzsrR0FMVSxrQkFBa0I7NkdBQWxCLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRE4sTUFBTTsyRkFDbEIsa0JBQWtCO2tCQUo5QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3ZCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BlcnNvbiwgUGVyc29uVXRpbHN9IGZyb20gJy4uL21vZGVsL3BlcnNvbi5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3BlcnNvblRvU3RyaW5nJ1xufSlcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFBlcnNvblRvU3RyaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHRyYW5zZm9ybSh2YWx1ZTogUGVyc29uIHwgUGVyc29uW10sIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gUGVyc29uVXRpbHMucGVyc29uc1RvU3RyaW5nKHZhbHVlLCBzZXBhcmF0b3IpO1xuICAgIHJldHVybiBQZXJzb25VdGlscy5wZXJzb25Ub1N0cmluZyh2YWx1ZSBhcyBQZXJzb24pO1xuICB9XG59XG5cbiJdfQ==
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLXRvLXN0cmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3BpcGVzL3BlcnNvbi10by1zdHJpbmcucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFTLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQU0xRCxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFNBQVMsQ0FBQyxLQUF3QixFQUFFLFNBQWtCO1FBQ3BELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFlLENBQUMsQ0FBQztJQUNyRCxDQUFDOztnSEFMVSxrQkFBa0I7OEdBQWxCLGtCQUFrQjtvSEFBbEIsa0JBQWtCLGNBRE4sTUFBTTs0RkFDbEIsa0JBQWtCO2tCQUo5QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3ZCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BlcnNvbiwgUGVyc29uVXRpbHN9IGZyb20gJy4uL21vZGVsL3BlcnNvbi5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3BlcnNvblRvU3RyaW5nJ1xufSlcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFBlcnNvblRvU3RyaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHRyYW5zZm9ybSh2YWx1ZTogUGVyc29uIHwgUGVyc29uW10sIHNlcGFyYXRvcj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gUGVyc29uVXRpbHMucGVyc29uc1RvU3RyaW5nKHZhbHVlLCBzZXBhcmF0b3IpO1xuICAgIHJldHVybiBQZXJzb25VdGlscy5wZXJzb25Ub1N0cmluZyh2YWx1ZSBhcyBQZXJzb24pO1xuICB9XG59XG5cbiJdfQ==
@@ -5,10 +5,10 @@ export class IsOnFieldPipe {
5
5
  return value === 'FIELD';
6
6
  }
7
7
  }
8
- IsOnFieldPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsOnFieldPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
- IsOnFieldPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: IsOnFieldPipe, name: "isOnField" });
10
- IsOnFieldPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsOnFieldPipe, providedIn: 'root' });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsOnFieldPipe, decorators: [{
8
+ IsOnFieldPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsOnFieldPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
+ IsOnFieldPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: IsOnFieldPipe, name: "isOnField" });
10
+ IsOnFieldPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsOnFieldPipe, providedIn: 'root' });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsOnFieldPipe, decorators: [{
12
12
  type: Pipe,
13
13
  args: [{
14
14
  name: 'isOnField'
@@ -22,10 +22,10 @@ export class IsOnDeskPipe {
22
22
  return value !== 'FIELD';
23
23
  }
24
24
  }
25
- IsOnDeskPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsOnDeskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
26
- IsOnDeskPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: IsOnDeskPipe, name: "isOnDesk" });
27
- IsOnDeskPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsOnDeskPipe, providedIn: 'root' });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IsOnDeskPipe, decorators: [{
25
+ IsOnDeskPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsOnDeskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
26
+ IsOnDeskPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: IsOnDeskPipe, name: "isOnDesk" });
27
+ IsOnDeskPipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsOnDeskPipe, providedIn: 'root' });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IsOnDeskPipe, decorators: [{
29
29
  type: Pipe,
30
30
  args: [{
31
31
  name: 'isOnDesk'
@@ -34,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
34
34
  type: Injectable,
35
35
  args: [{ providedIn: 'root' }]
36
36
  }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtbW9kZS5waXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy91c2FnZS1tb2RlLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFROUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsU0FBUyxDQUFDLEtBQWdCO1FBQ3hCLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQztJQUMzQixDQUFDOzswR0FKVSxhQUFhO3dHQUFiLGFBQWE7OEdBQWIsYUFBYSxjQURELE1BQU07MkZBQ2xCLGFBQWE7a0JBSnpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFdBQVc7aUJBQ2xCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7QUFhaEMsTUFBTSxPQUFPLFlBQVk7SUFFdkIsU0FBUyxDQUFDLEtBQWdCO1FBQ3hCLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQztJQUMzQixDQUFDOzt5R0FKVSxZQUFZO3VHQUFaLFlBQVk7NkdBQVosWUFBWSxjQURBLE1BQU07MkZBQ2xCLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7aUJBQ2pCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7VXNhZ2VNb2RlfSBmcm9tICcuLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2lzT25GaWVsZCdcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBJc09uRmllbGRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdGSUVMRCc7XG4gIH1cbn1cblxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc09uRGVzaydcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBJc09uRGVza1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gJ0ZJRUxEJztcbiAgfVxufVxuIl19
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtbW9kZS5waXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy91c2FnZS1tb2RlLnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFROUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsU0FBUyxDQUFDLEtBQWdCO1FBQ3hCLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQztJQUMzQixDQUFDOzsyR0FKVSxhQUFhO3lHQUFiLGFBQWE7K0dBQWIsYUFBYSxjQURELE1BQU07NEZBQ2xCLGFBQWE7a0JBSnpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFdBQVc7aUJBQ2xCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7QUFhaEMsTUFBTSxPQUFPLFlBQVk7SUFFdkIsU0FBUyxDQUFDLEtBQWdCO1FBQ3hCLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQztJQUMzQixDQUFDOzswR0FKVSxZQUFZO3dHQUFaLFlBQVk7OEdBQVosWUFBWSxjQURBLE1BQU07NEZBQ2xCLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7aUJBQ2pCOztrQkFDQSxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7VXNhZ2VNb2RlfSBmcm9tICcuLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2lzT25GaWVsZCdcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBJc09uRmllbGRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdGSUVMRCc7XG4gIH1cbn1cblxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc09uRGVzaydcbn0pXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBJc09uRGVza1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gJ0ZJRUxEJztcbiAgfVxufVxuIl19