@sumaris-net/ngx-components 2.6.26 → 2.7.0-rc10

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 (738) hide show
  1. package/esm2022/public_api.mjs +339 -0
  2. package/{esm2020 → esm2022}/src/app/admin/admin-routing.module.mjs +8 -8
  3. package/{esm2020 → esm2022}/src/app/admin/admin.module.mjs +12 -12
  4. package/esm2022/src/app/admin/services/filter/person.filter.mjs +69 -0
  5. package/esm2022/src/app/admin/services/person.service.mjs +174 -0
  6. package/esm2022/src/app/admin/services/validator/person.validator.mjs +72 -0
  7. package/esm2022/src/app/admin/users/users.mjs +264 -0
  8. package/esm2022/src/app/admin/users/users.module.mjs +58 -0
  9. package/{esm2020 → esm2022}/src/app/core/about/about.modal.mjs +20 -7
  10. package/{esm2020 → esm2022}/src/app/core/about/about.module.mjs +9 -9
  11. package/{esm2020 → esm2022}/src/app/core/account/account.module.mjs +22 -22
  12. package/esm2022/src/app/core/account/account.page.mjs +337 -0
  13. package/esm2022/src/app/core/account/new-token.modal.mjs +130 -0
  14. package/esm2022/src/app/core/account/token.table.mjs +146 -0
  15. package/esm2022/src/app/core/auth/auth.form.mjs +140 -0
  16. package/esm2022/src/app/core/auth/auth.modal.mjs +76 -0
  17. package/{esm2020 → esm2022}/src/app/core/auth/auth.module.mjs +16 -16
  18. package/{esm2020 → esm2022}/src/app/core/core.module.mjs +87 -87
  19. package/esm2022/src/app/core/core.testing.module.mjs +93 -0
  20. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +109 -0
  21. package/{esm2020 → esm2022}/src/app/core/form/buttons/form-buttons-bar.module.mjs +10 -10
  22. package/esm2022/src/app/core/form/entity/editor.class.mjs +718 -0
  23. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +436 -0
  24. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +730 -0
  25. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +24 -0
  26. package/{esm2020 → esm2022}/src/app/core/form/entity/entity.module.mjs +11 -11
  27. package/esm2022/src/app/core/form/form.class.mjs +353 -0
  28. package/{esm2020 → esm2022}/src/app/core/form/form.module.mjs +30 -30
  29. package/esm2022/src/app/core/form/form.utils.mjs +485 -0
  30. package/esm2022/src/app/core/form/list/list.form.mjs +233 -0
  31. package/{esm2020 → esm2022}/src/app/core/form/list/list.module.mjs +10 -10
  32. package/esm2022/src/app/core/form/properties/properties.form.mjs +143 -0
  33. package/{esm2020 → esm2022}/src/app/core/form/properties/properties.module.mjs +13 -13
  34. package/esm2022/src/app/core/form/properties/properties.table.mjs +269 -0
  35. package/esm2022/src/app/core/form/properties/property.validator.mjs +24 -0
  36. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +95 -0
  37. package/{esm2020 → esm2022}/src/app/core/form/properties/testing/properties-form.testing.module.mjs +11 -11
  38. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +73 -0
  39. package/{esm2020 → esm2022}/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -10
  40. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +152 -0
  41. package/{esm2020 → esm2022}/src/app/core/form/text-popover/text-popover.module.mjs +10 -10
  42. package/{esm2020 → esm2022}/src/app/core/graphql/graphql.module.mjs +6 -6
  43. package/esm2022/src/app/core/graphql/graphql.service.mjs +788 -0
  44. package/esm2022/src/app/core/graphql/graphql.utils.mjs +118 -0
  45. package/esm2022/src/app/core/home/home.mjs +282 -0
  46. package/esm2022/src/app/core/home/home.module.mjs +51 -0
  47. package/esm2022/src/app/core/icon/icon.component.mjs +40 -0
  48. package/{esm2020 → esm2022}/src/app/core/icon/icon.module.mjs +7 -7
  49. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +358 -0
  50. package/{esm2020 → esm2022}/src/app/core/install/install-upgrade-card.module.mjs +10 -10
  51. package/esm2022/src/app/core/menu/menu.component.mjs +264 -0
  52. package/esm2022/src/app/core/menu/menu.model.mjs +269 -0
  53. package/esm2022/src/app/core/menu/menu.module.mjs +52 -0
  54. package/esm2022/src/app/core/menu/menu.service.mjs +671 -0
  55. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +109 -0
  56. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu-other.testing.mjs +5 -5
  57. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +122 -0
  58. package/{esm2020 → esm2022}/src/app/core/menu/testing/menu.testing.module.mjs +12 -12
  59. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +29 -0
  60. package/{esm2020 → esm2022}/src/app/core/offline/update-offline-mode-card.module.mjs +10 -10
  61. package/esm2022/src/app/core/peer/select-peer.modal.mjs +193 -0
  62. package/{esm2020 → esm2022}/src/app/core/peer/select-peer.module.mjs +13 -13
  63. package/{esm2020 → esm2022}/src/app/core/register/register-confirm.page.mjs +16 -9
  64. package/esm2022/src/app/core/register/register.form.mjs +194 -0
  65. package/esm2022/src/app/core/register/register.modal.mjs +55 -0
  66. package/{esm2020 → esm2022}/src/app/core/register/register.module.mjs +13 -13
  67. package/esm2022/src/app/core/services/account.service.mjs +1243 -0
  68. package/esm2022/src/app/core/services/auth-guard.service.mjs +76 -0
  69. package/esm2022/src/app/core/services/base-entity-service.class.mjs +482 -0
  70. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +224 -0
  71. package/esm2022/src/app/core/services/base58.mjs +79 -0
  72. package/esm2022/src/app/core/services/config.service.mjs +367 -0
  73. package/esm2022/src/app/core/services/crypto.service.mjs +107 -0
  74. package/{esm2020 → esm2022}/src/app/core/services/errors.mjs +3 -3
  75. package/esm2022/src/app/core/services/local-settings.service.mjs +468 -0
  76. package/esm2022/src/app/core/services/model/account.model.mjs +155 -0
  77. package/esm2022/src/app/core/services/model/config.model.mjs +107 -0
  78. package/esm2022/src/app/core/services/model/department.model.mjs +34 -0
  79. package/esm2022/src/app/core/services/model/entity.decorators.mjs +97 -0
  80. package/esm2022/src/app/core/services/model/entity.model.mjs +228 -0
  81. package/{esm2020 → esm2022}/src/app/core/services/model/filter.model.mjs +1 -1
  82. package/esm2022/src/app/core/services/model/peer.model.mjs +83 -0
  83. package/esm2022/src/app/core/services/model/person.model.mjs +110 -0
  84. package/esm2022/src/app/core/services/model/referential.model.mjs +189 -0
  85. package/esm2022/src/app/core/services/model/token.model.mjs +57 -0
  86. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +199 -0
  87. package/esm2022/src/app/core/services/network.service.mjs +626 -0
  88. package/esm2022/src/app/core/services/network.types.mjs +20 -0
  89. package/esm2022/src/app/core/services/network.utils.mjs +15 -0
  90. package/{esm2020 → esm2022}/src/app/core/services/pipes/account.pipes.mjs +9 -9
  91. package/{esm2020 → esm2022}/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
  92. package/{esm2020 → esm2022}/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
  93. package/{esm2020 → esm2022}/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
  94. package/esm2022/src/app/core/services/platform.service.mjs +557 -0
  95. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +434 -0
  96. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +458 -0
  97. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +25 -0
  98. package/esm2022/src/app/core/services/testing/referential.validator.mjs +46 -0
  99. package/esm2022/src/app/core/services/validator/account.validator.mjs +45 -0
  100. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +49 -0
  101. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +67 -0
  102. package/{esm2020 → esm2022}/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  103. package/{esm2020 → esm2022}/src/app/core/services/validator/user-token.validator.mjs +5 -5
  104. package/{esm2020 → esm2022}/src/app/core/settings/settings.module.mjs +9 -9
  105. package/esm2022/src/app/core/settings/settings.page.mjs +328 -0
  106. package/esm2022/src/app/core/table/actions-column.component.mjs +115 -0
  107. package/esm2022/src/app/core/table/async-table.class.mjs +1740 -0
  108. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +386 -0
  109. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +401 -0
  110. package/esm2022/src/app/core/table/memory-table.class.mjs +57 -0
  111. package/esm2022/src/app/core/table/table-select-columns.component.mjs +46 -0
  112. package/esm2022/src/app/core/table/table.class.mjs +1781 -0
  113. package/esm2022/src/app/core/table/table.model.mjs +16 -0
  114. package/{esm2020 → esm2022}/src/app/core/table/table.module.mjs +12 -12
  115. package/esm2022/src/app/core/table/table.utils.mjs +33 -0
  116. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +28 -0
  117. package/esm2022/src/app/core/table/testing/table.testing.mjs +291 -0
  118. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +50 -0
  119. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +25 -0
  120. package/esm2022/src/app/core/table/testing/table2.testing.mjs +250 -0
  121. package/esm2022/src/app/shared/alerts.mjs +239 -0
  122. package/esm2022/src/app/shared/audio/audio.mjs +251 -0
  123. package/esm2022/src/app/shared/audio/audio.testing.mjs +32 -0
  124. package/{esm2020 → esm2022}/src/app/shared/audio/audio.testing.module.mjs +10 -10
  125. package/esm2022/src/app/shared/capacitor/keyboard.mjs +42 -0
  126. package/esm2022/src/app/shared/capacitor/plugins.mjs +9 -0
  127. package/esm2022/src/app/shared/dates.mjs +149 -0
  128. package/esm2022/src/app/shared/debug/debug.component.mjs +40 -0
  129. package/{esm2020 → esm2022}/src/app/shared/debug/debug.module.mjs +14 -14
  130. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +98 -0
  131. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +32 -0
  132. package/{esm2020 → esm2022}/src/app/shared/directives/directives.module.mjs +13 -13
  133. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +52 -0
  134. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +33 -0
  135. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +62 -0
  136. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +45 -0
  137. package/{esm2020 → esm2022}/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
  138. package/esm2022/src/app/shared/events.mjs +65 -0
  139. package/esm2022/src/app/shared/file/csv.utils.mjs +72 -0
  140. package/esm2022/src/app/shared/file/file.service.mjs +122 -0
  141. package/esm2022/src/app/shared/file/file.utils.mjs +113 -0
  142. package/esm2022/src/app/shared/file/images.utils.mjs +161 -0
  143. package/{esm2020 → esm2022}/src/app/shared/file/json.utils.mjs +1 -1
  144. package/esm2022/src/app/shared/file/uri.utils.mjs +24 -0
  145. package/esm2022/src/app/shared/form/field.component.mjs +353 -0
  146. package/{esm2020 → esm2022}/src/app/shared/form/field.model.mjs +1 -1
  147. package/esm2022/src/app/shared/form/loading-spinner.mjs +35 -0
  148. package/esm2022/src/app/shared/forms.mjs +414 -0
  149. package/esm2022/src/app/shared/functions.mjs +483 -0
  150. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +82 -0
  151. package/esm2022/src/app/shared/gesture/gesture-config.mjs +46 -0
  152. package/{esm2020 → esm2022}/src/app/shared/graph/colors.utils.mjs +1 -1
  153. package/esm2022/src/app/shared/graph/graph-colors.mjs +219 -0
  154. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +59 -0
  155. package/esm2022/src/app/shared/help/help.modal.mjs +63 -0
  156. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +23 -0
  157. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +85 -0
  158. package/{esm2020 → esm2022}/src/app/shared/hotkeys/shared-hotkeys.module.mjs +13 -13
  159. package/esm2022/src/app/shared/http/http.utils.mjs +56 -0
  160. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +388 -0
  161. package/{esm2020 → esm2022}/src/app/shared/image/gallery/image-gallery.module.mjs +22 -22
  162. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +26 -0
  163. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +90 -0
  164. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +41 -0
  165. package/{esm2020 → esm2022}/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +16 -16
  166. package/{esm2020 → esm2022}/src/app/shared/image/image.module.mjs +11 -11
  167. package/esm2022/src/app/shared/image/image.service.mjs +104 -0
  168. package/esm2022/src/app/shared/inputs.mjs +231 -0
  169. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +28 -0
  170. package/esm2022/src/app/shared/logging/logger.model.mjs +47 -0
  171. package/esm2022/src/app/shared/logging/logging-service.class.mjs +128 -0
  172. package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.module.mjs +8 -8
  173. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +49 -0
  174. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +967 -0
  175. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +82 -0
  176. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +17 -0
  177. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +217 -0
  178. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +209 -0
  179. package/{esm2020 → esm2022}/src/app/shared/material/badge/badge.module.mjs +9 -9
  180. package/esm2022/src/app/shared/material/badge/badge.test.mjs +42 -0
  181. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +67 -0
  182. package/esm2022/src/app/shared/material/boolean/material-boolean.mjs +262 -0
  183. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +53 -0
  184. package/esm2022/src/app/shared/material/chips/chips.module.mjs +76 -0
  185. package/esm2022/src/app/shared/material/chips/material.chips.mjs +719 -0
  186. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +148 -0
  187. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +90 -0
  188. package/esm2022/src/app/shared/material/datetime/material.date.mjs +424 -0
  189. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +432 -0
  190. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +612 -0
  191. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +132 -0
  192. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +123 -0
  193. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +115 -0
  194. package/esm2022/src/app/shared/material/duration/duration.module.mjs +70 -0
  195. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +36 -0
  196. package/esm2022/src/app/shared/material/duration/material.duration.mjs +273 -0
  197. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +79 -0
  198. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +266 -0
  199. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +440 -0
  200. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +72 -0
  201. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +113 -0
  202. package/esm2022/src/app/shared/material/material.module.mjs +229 -0
  203. package/esm2022/src/app/shared/material/material.testing.module.mjs +221 -0
  204. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +104 -0
  205. package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.component.mjs +19 -16
  206. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +203 -0
  207. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +19 -0
  208. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +168 -0
  209. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +36 -0
  210. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +16 -0
  211. package/{esm2020 → esm2022}/src/app/shared/material/numpad/numpad.module.mjs +21 -21
  212. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +48 -0
  213. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +48 -0
  214. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +23 -0
  215. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +368 -0
  216. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +56 -0
  217. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +67 -0
  218. package/esm2022/src/app/shared/material/testing/common.test.mjs +105 -0
  219. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +31 -0
  220. package/esm2022/src/app/shared/material/text/text-form.component.mjs +97 -0
  221. package/{esm2020 → esm2022}/src/app/shared/material/text/text-form.module.mjs +24 -24
  222. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +246 -0
  223. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +49 -0
  224. package/{esm2020 → esm2022}/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  225. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +69 -0
  226. package/esm2022/src/app/shared/observables.mjs +104 -0
  227. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +141 -0
  228. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +27 -0
  229. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +51 -0
  230. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +72 -0
  231. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +28 -0
  232. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +36 -0
  233. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +60 -0
  234. package/esm2022/src/app/shared/pipes/form.pipes.mjs +194 -0
  235. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +48 -0
  236. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +42 -0
  237. package/{esm2020 → esm2022}/src/app/shared/pipes/maps.pipe.mjs +13 -13
  238. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +69 -0
  239. package/esm2022/src/app/shared/pipes/math.pipes.mjs +59 -0
  240. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +19 -0
  241. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +30 -0
  242. package/esm2022/src/app/shared/pipes/pipes.module.mjs +252 -0
  243. package/esm2022/src/app/shared/pipes/property.pipes.mjs +97 -0
  244. package/esm2022/src/app/shared/pipes/string.pipes.mjs +135 -0
  245. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +44 -0
  246. package/esm2022/src/app/shared/pipes/types.pipes.mjs +58 -0
  247. package/esm2022/src/app/shared/platforms.mjs +43 -0
  248. package/esm2022/src/app/shared/rx-state.module.mjs +23 -0
  249. package/esm2022/src/app/shared/services/job.utils.mjs +92 -0
  250. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +347 -0
  251. package/esm2022/src/app/shared/services/progress-bar.service.mjs +31 -0
  252. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +121 -0
  253. package/esm2022/src/app/shared/services/startable-service.class.mjs +113 -0
  254. package/esm2022/src/app/shared/services/translate-context.service.mjs +104 -0
  255. package/esm2022/src/app/shared/services.mjs +62 -0
  256. package/esm2022/src/app/shared/shared-routing.module.mjs +71 -0
  257. package/esm2022/src/app/shared/shared.module.mjs +231 -0
  258. package/{esm2020 → esm2022}/src/app/shared/shared.testing.module.mjs +40 -40
  259. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +286 -0
  260. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +46 -0
  261. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +7 -7
  262. package/{esm2020 → esm2022}/src/app/shared/storage/storage-explorer.testing.module.mjs +6 -6
  263. package/esm2022/src/app/shared/storage/storage.service.mjs +134 -0
  264. package/{esm2020 → esm2022}/src/app/shared/storage/storage.utils.mjs +1 -1
  265. package/esm2022/src/app/shared/testing/observable.test.mjs +96 -0
  266. package/esm2022/src/app/shared/testing/tests.page.mjs +37 -0
  267. package/esm2022/src/app/shared/toast/toast.testing.mjs +52 -0
  268. package/{esm2020 → esm2022}/src/app/shared/toast/toast.testing.module.mjs +10 -10
  269. package/esm2022/src/app/shared/toast/toasts.mjs +144 -0
  270. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +60 -0
  271. package/esm2022/src/app/shared/toolbar/toolbar.mjs +263 -0
  272. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +57 -0
  273. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +59 -0
  274. package/{esm2020 → esm2022}/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -10
  275. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +107 -0
  276. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +211 -0
  277. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +27 -0
  278. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +106 -0
  279. package/esm2022/src/app/shared/validator/validators.mjs +580 -0
  280. package/esm2022/src/app/shared/version/versions.mjs +81 -0
  281. package/esm2022/src/app/social/job/job.module.mjs +42 -0
  282. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +35 -0
  283. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +232 -0
  284. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +50 -0
  285. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +29 -0
  286. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +73 -0
  287. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +43 -0
  288. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +53 -0
  289. package/{esm2020 → esm2022}/src/app/social/job/testing/job.testing.module.mjs +9 -9
  290. package/esm2022/src/app/social/message/message.form.mjs +140 -0
  291. package/esm2022/src/app/social/message/message.modal.mjs +110 -0
  292. package/esm2022/src/app/social/message/message.model.mjs +75 -0
  293. package/{esm2020 → esm2022}/src/app/social/message/message.module.mjs +5 -5
  294. package/esm2022/src/app/social/message/message.service.mjs +110 -0
  295. package/{esm2020 → esm2022}/src/app/social/social.module.mjs +19 -19
  296. package/{esm2020 → esm2022}/src/app/social/social.testing.module.mjs +10 -10
  297. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +123 -0
  298. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +263 -0
  299. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +233 -0
  300. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +129 -0
  301. package/{esm2020 → esm2022}/src/app/social/user-event/testing/user-event.testing.module.mjs +9 -9
  302. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +116 -0
  303. package/esm2022/src/app/social/user-event/user-event.module.mjs +43 -0
  304. package/esm2022/src/app/social/user-event/user-event.service.mjs +512 -0
  305. package/esm2022/src/environments/environment.class.mjs +50 -0
  306. package/esm2022/src/environments/environment.loader.mjs +83 -0
  307. package/esm2022/src/environments/environment.mjs +97 -0
  308. package/{fesm2020 → fesm2022}/sumaris-net.ngx-components.mjs +13100 -10864
  309. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -0
  310. package/package.json +37 -17
  311. package/public_api.d.ts +12 -5
  312. package/src/app/admin/users/users.d.ts +1 -1
  313. package/src/app/admin/users/users.module.d.ts +2 -1
  314. package/src/app/core/about/about.modal.d.ts +1 -1
  315. package/src/app/core/account/account.page.d.ts +1 -1
  316. package/src/app/core/account/new-token.modal.d.ts +1 -1
  317. package/src/app/core/account/token.table.d.ts +1 -1
  318. package/src/app/core/auth/auth.form.d.ts +1 -1
  319. package/src/app/core/auth/auth.modal.d.ts +1 -1
  320. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +1 -1
  321. package/src/app/core/form/entity/editor.class.d.ts +3 -3
  322. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +1 -1
  323. package/src/app/core/form/entity/entity-editor.class.d.ts +1 -1
  324. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  325. package/src/app/core/form/form.class.d.ts +1 -1
  326. package/src/app/core/form/list/list.form.d.ts +1 -1
  327. package/src/app/core/form/properties/properties.form.d.ts +1 -1
  328. package/src/app/core/form/properties/properties.table.d.ts +2 -3
  329. package/src/app/core/form/properties/property.validator.d.ts +1 -1
  330. package/src/app/core/form/properties/testing/properties-form.test.d.ts +1 -1
  331. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +1 -1
  332. package/src/app/core/form/text-popover/text-popover.component.d.ts +1 -1
  333. package/src/app/core/graphql/graphql.utils.d.ts +1 -1
  334. package/src/app/core/home/home.d.ts +1 -1
  335. package/src/app/core/home/home.module.d.ts +4 -3
  336. package/src/app/core/icon/icon.component.d.ts +1 -1
  337. package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
  338. package/src/app/core/menu/menu.component.d.ts +2 -2
  339. package/src/app/core/menu/menu.model.d.ts +0 -1
  340. package/src/app/core/menu/menu.module.d.ts +3 -5
  341. package/src/app/core/menu/menu.service.d.ts +1 -1
  342. package/src/app/core/menu/sub-menu-tab.directive.d.ts +1 -1
  343. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  344. package/src/app/core/menu/testing/menu.testing.d.ts +1 -1
  345. package/src/app/core/offline/update-offline-mode-card.component.d.ts +1 -1
  346. package/src/app/core/peer/select-peer.modal.d.ts +1 -1
  347. package/src/app/core/register/register-confirm.page.d.ts +1 -1
  348. package/src/app/core/register/register.form.d.ts +1 -1
  349. package/src/app/core/register/register.modal.d.ts +1 -1
  350. package/src/app/core/services/base-entity-service.class.d.ts +2 -2
  351. package/src/app/core/services/base-graphql-service.class.d.ts +1 -1
  352. package/src/app/core/services/model/person.model.d.ts +1 -1
  353. package/src/app/core/services/model/settings.model.d.ts +1 -1
  354. package/src/app/core/services/network.types.d.ts +2 -2
  355. package/src/app/core/services/storage/entity-store.class.d.ts +1 -1
  356. package/src/app/core/services/validator/base.validator.class.d.ts +1 -1
  357. package/src/app/core/settings/settings.page.d.ts +1 -1
  358. package/src/app/core/table/actions-column.component.d.ts +2 -2
  359. package/src/app/core/table/async-table.class.d.ts +1 -1
  360. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -1
  361. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -1
  362. package/src/app/core/table/memory-table.class.d.ts +3 -3
  363. package/src/app/core/table/table-select-columns.component.d.ts +1 -1
  364. package/src/app/core/table/table.class.d.ts +4 -3
  365. package/src/app/core/table/table.model.d.ts +1 -1
  366. package/src/app/core/table/testing/table.testing.d.ts +5 -4
  367. package/src/app/core/table/testing/table.testing.module.d.ts +8 -5
  368. package/src/app/core/table/testing/table2-validator.service.d.ts +15 -0
  369. package/src/app/core/table/testing/table2.testing.d.ts +45 -0
  370. package/src/app/shared/audio/audio.d.ts +1 -1
  371. package/src/app/shared/audio/audio.testing.d.ts +1 -1
  372. package/src/app/shared/debug/debug.component.d.ts +1 -1
  373. package/src/app/shared/directives/autofocus.directive.d.ts +1 -1
  374. package/src/app/shared/directives/autotitle.directive.d.ts +1 -1
  375. package/src/app/shared/directives/drag-and-drop.directive.d.ts +1 -1
  376. package/src/app/shared/directives/ng-var.directive.d.ts +1 -1
  377. package/src/app/shared/directives/resizable/resizable.component.d.ts +1 -1
  378. package/src/app/shared/directives/resizable/resizable.directive.d.ts +1 -1
  379. package/src/app/shared/events.d.ts +1 -1
  380. package/src/app/shared/form/field.component.d.ts +4 -5
  381. package/src/app/shared/form/field.model.d.ts +2 -0
  382. package/src/app/shared/form/loading-spinner.d.ts +1 -1
  383. package/src/app/shared/functions.d.ts +2 -2
  384. package/src/app/shared/help/help.modal.d.ts +2 -2
  385. package/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.d.ts +3 -5
  386. package/src/app/shared/hotkeys/hotkeys.service.d.ts +3 -3
  387. package/src/app/shared/image/gallery/image-gallery.component.d.ts +3 -3
  388. package/src/app/shared/image/gallery/testing/gallery.testing.d.ts +2 -2
  389. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +10 -8
  390. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +10 -9
  391. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +1 -1
  392. package/src/app/shared/material/badge/badge.directive.d.ts +1 -1
  393. package/src/app/shared/material/badge/badge.test.d.ts +1 -1
  394. package/src/app/shared/material/boolean/boolean.module.d.ts +5 -5
  395. package/src/app/shared/material/boolean/{material.boolean.d.ts → material-boolean.d.ts} +20 -23
  396. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +21 -0
  397. package/src/app/shared/material/chips/material.chips.d.ts +8 -9
  398. package/src/app/shared/material/chips/testing/chips.test.d.ts +2 -2
  399. package/src/app/shared/material/datetime/datetime.module.d.ts +2 -2
  400. package/src/app/shared/material/datetime/material.date.d.ts +8 -5
  401. package/src/app/shared/material/datetime/material.dateshort.d.ts +11 -8
  402. package/src/app/shared/material/datetime/material.datetime.d.ts +24 -12
  403. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +7 -1
  404. package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +3 -1
  405. package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +3 -1
  406. package/src/app/shared/material/duration/duration.module.d.ts +6 -5
  407. package/src/app/shared/material/duration/material.duration.d.ts +6 -5
  408. package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +22 -0
  409. package/src/app/shared/material/latlong/material.latlong.d.ts +16 -9
  410. package/src/app/shared/material/latlong/material.latlong.module.d.ts +9 -8
  411. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +3 -1
  412. package/src/app/shared/material/material.testing.module.d.ts +23 -19
  413. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +1 -1
  414. package/src/app/shared/material/numpad/numpad.component.d.ts +1 -1
  415. package/src/app/shared/material/numpad/numpad.container.d.ts +1 -1
  416. package/src/app/shared/material/numpad/numpad.content.d.ts +1 -1
  417. package/src/app/shared/material/numpad/numpad.directive.d.ts +1 -1
  418. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +3 -3
  419. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +1 -1
  420. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +0 -3
  421. package/src/app/shared/material/swipe/material.swipe.d.ts +6 -6
  422. package/src/app/shared/material/swipe/swipe.module.d.ts +2 -1
  423. package/src/app/shared/material/swipe/testing/swipe.test.d.ts +1 -1
  424. package/src/app/shared/material/testing/common.test.d.ts +25 -0
  425. package/src/app/shared/material/text/testing/text-form.testing.d.ts +1 -1
  426. package/src/app/shared/material/text/text-form.component.d.ts +1 -1
  427. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +4 -1
  428. package/src/app/shared/named-filter/named-filter.service.d.ts +1 -1
  429. package/src/app/shared/pipes/maskito.pipe.d.ts +9 -0
  430. package/src/app/shared/pipes/ng-init.pipe.d.ts +1 -1
  431. package/src/app/shared/pipes/pipes.module.d.ts +5 -4
  432. package/src/app/shared/pipes/string.pipes.d.ts +6 -0
  433. package/src/app/shared/pipes/types.pipes.d.ts +7 -0
  434. package/src/app/shared/rx-state.module.d.ts +10 -0
  435. package/src/app/shared/services/job.utils.d.ts +1 -1
  436. package/src/app/shared/services/memory-entity-service.class.d.ts +1 -1
  437. package/src/app/shared/services/startable-observable-service.class.d.ts +3 -0
  438. package/src/app/shared/services/startable-service.class.d.ts +3 -0
  439. package/src/app/shared/shared.module.d.ts +4 -4
  440. package/src/app/shared/storage/storage-explorer.component.d.ts +1 -1
  441. package/src/app/shared/storage/storage-explorer.module.d.ts +3 -3
  442. package/src/app/shared/storage/storage.service.d.ts +1 -1
  443. package/src/app/shared/storage/storage.utils.d.ts +1 -1
  444. package/src/app/shared/testing/observable.test.d.ts +1 -1
  445. package/src/app/shared/testing/tests.page.d.ts +1 -1
  446. package/src/app/shared/toast/toast.testing.d.ts +1 -1
  447. package/src/app/shared/toolbar/modal-toolbar.d.ts +1 -1
  448. package/src/app/shared/toolbar/toolbar.d.ts +1 -1
  449. package/src/app/shared/toolbar/toolbar.module.d.ts +4 -3
  450. package/src/app/shared/upload-file/testing/upload-file.testing.d.ts +1 -1
  451. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +1 -1
  452. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -1
  453. package/src/app/shared/upload-file/upload-file.model.d.ts +2 -2
  454. package/src/app/social/job/progression/job-progression.component.d.ts +17 -3
  455. package/src/app/social/job/progression/job-progression.icon.d.ts +24 -10
  456. package/src/app/social/job/progression/job-progression.list.d.ts +3 -3
  457. package/src/app/social/job/progression/job-progression.model.d.ts +0 -1
  458. package/src/app/social/job/testing/job-progression.testing.d.ts +3 -6
  459. package/src/app/social/message/message.form.d.ts +1 -1
  460. package/src/app/social/message/message.modal.d.ts +1 -1
  461. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -3
  462. package/src/app/social/user-event/notification/user-event-notification.list.d.ts +1 -1
  463. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -1
  464. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +0 -1
  465. package/src/app/social/user-event/user-event.model.d.ts +2 -2
  466. package/src/app/social/user-event/user-event.module.d.ts +3 -2
  467. package/src/app/social/user-event/user-event.service.d.ts +1 -1
  468. package/src/assets/i18n/fr.json +2 -2
  469. package/src/assets/img/logo/logo-eis.png +0 -0
  470. package/src/assets/manifest.json +1 -1
  471. package/src/environments/environment.loader.d.ts +1 -1
  472. package/src/theme/_material.globals.scss +51 -19
  473. package/src/theme/_material.scss +35 -19
  474. package/src/theme/_mixins.scss +4 -4
  475. package/src/theme/_ngx-components.globals.scss +6 -1
  476. package/src/theme/_ngx-components.scss +262 -538
  477. package/src/theme/_ngx-components.table.scss +597 -0
  478. package/src/theme/_theme.scss +1 -0
  479. package/esm2020/public_api.mjs +0 -332
  480. package/esm2020/src/app/admin/services/filter/person.filter.mjs +0 -59
  481. package/esm2020/src/app/admin/services/person.service.mjs +0 -170
  482. package/esm2020/src/app/admin/services/validator/person.validator.mjs +0 -71
  483. package/esm2020/src/app/admin/users/users.mjs +0 -250
  484. package/esm2020/src/app/admin/users/users.module.mjs +0 -54
  485. package/esm2020/src/app/core/account/account.page.mjs +0 -319
  486. package/esm2020/src/app/core/account/new-token.modal.mjs +0 -121
  487. package/esm2020/src/app/core/account/token.table.mjs +0 -141
  488. package/esm2020/src/app/core/auth/auth.form.mjs +0 -131
  489. package/esm2020/src/app/core/auth/auth.modal.mjs +0 -72
  490. package/esm2020/src/app/core/core.testing.module.mjs +0 -86
  491. package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +0 -107
  492. package/esm2020/src/app/core/form/entity/editor.class.mjs +0 -685
  493. package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +0 -422
  494. package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +0 -696
  495. package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +0 -25
  496. package/esm2020/src/app/core/form/form.class.mjs +0 -345
  497. package/esm2020/src/app/core/form/form.utils.mjs +0 -476
  498. package/esm2020/src/app/core/form/list/list.form.mjs +0 -222
  499. package/esm2020/src/app/core/form/properties/properties.form.mjs +0 -132
  500. package/esm2020/src/app/core/form/properties/properties.table.mjs +0 -267
  501. package/esm2020/src/app/core/form/properties/property.validator.mjs +0 -23
  502. package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +0 -90
  503. package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +0 -70
  504. package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +0 -146
  505. package/esm2020/src/app/core/graphql/graphql.service.mjs +0 -776
  506. package/esm2020/src/app/core/graphql/graphql.utils.mjs +0 -117
  507. package/esm2020/src/app/core/home/home.mjs +0 -257
  508. package/esm2020/src/app/core/home/home.module.mjs +0 -48
  509. package/esm2020/src/app/core/icon/icon.component.mjs +0 -41
  510. package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +0 -344
  511. package/esm2020/src/app/core/menu/menu.component.mjs +0 -242
  512. package/esm2020/src/app/core/menu/menu.model.mjs +0 -247
  513. package/esm2020/src/app/core/menu/menu.module.mjs +0 -57
  514. package/esm2020/src/app/core/menu/menu.service.mjs +0 -660
  515. package/esm2020/src/app/core/menu/sub-menu-tab.directive.mjs +0 -98
  516. package/esm2020/src/app/core/menu/testing/menu.testing.mjs +0 -121
  517. package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +0 -27
  518. package/esm2020/src/app/core/peer/select-peer.modal.mjs +0 -183
  519. package/esm2020/src/app/core/register/register.form.mjs +0 -183
  520. package/esm2020/src/app/core/register/register.modal.mjs +0 -52
  521. package/esm2020/src/app/core/services/account.service.mjs +0 -1235
  522. package/esm2020/src/app/core/services/auth-guard.service.mjs +0 -71
  523. package/esm2020/src/app/core/services/base-entity-service.class.mjs +0 -468
  524. package/esm2020/src/app/core/services/base-graphql-service.class.mjs +0 -221
  525. package/esm2020/src/app/core/services/base58.mjs +0 -78
  526. package/esm2020/src/app/core/services/config.service.mjs +0 -357
  527. package/esm2020/src/app/core/services/crypto.service.mjs +0 -107
  528. package/esm2020/src/app/core/services/local-settings.service.mjs +0 -460
  529. package/esm2020/src/app/core/services/model/account.model.mjs +0 -147
  530. package/esm2020/src/app/core/services/model/config.model.mjs +0 -92
  531. package/esm2020/src/app/core/services/model/department.model.mjs +0 -30
  532. package/esm2020/src/app/core/services/model/entity.decorators.mjs +0 -97
  533. package/esm2020/src/app/core/services/model/entity.model.mjs +0 -225
  534. package/esm2020/src/app/core/services/model/peer.model.mjs +0 -68
  535. package/esm2020/src/app/core/services/model/person.model.mjs +0 -97
  536. package/esm2020/src/app/core/services/model/referential.model.mjs +0 -167
  537. package/esm2020/src/app/core/services/model/token.model.mjs +0 -52
  538. package/esm2020/src/app/core/services/model/tree-item-entity.model.mjs +0 -199
  539. package/esm2020/src/app/core/services/network.service.mjs +0 -607
  540. package/esm2020/src/app/core/services/network.types.mjs +0 -20
  541. package/esm2020/src/app/core/services/network.utils.mjs +0 -15
  542. package/esm2020/src/app/core/services/platform.service.mjs +0 -535
  543. package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +0 -428
  544. package/esm2020/src/app/core/services/storage/entity-store.class.mjs +0 -449
  545. package/esm2020/src/app/core/services/testing/referential-filter.model.mjs +0 -23
  546. package/esm2020/src/app/core/services/testing/referential.validator.mjs +0 -45
  547. package/esm2020/src/app/core/services/validator/account.validator.mjs +0 -41
  548. package/esm2020/src/app/core/services/validator/base.validator.class.mjs +0 -47
  549. package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +0 -66
  550. package/esm2020/src/app/core/settings/settings.page.mjs +0 -312
  551. package/esm2020/src/app/core/table/actions-column.component.mjs +0 -102
  552. package/esm2020/src/app/core/table/async-table.class.mjs +0 -1698
  553. package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +0 -384
  554. package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +0 -399
  555. package/esm2020/src/app/core/table/memory-table.class.mjs +0 -53
  556. package/esm2020/src/app/core/table/table-select-columns.component.mjs +0 -43
  557. package/esm2020/src/app/core/table/table.class.mjs +0 -1733
  558. package/esm2020/src/app/core/table/table.model.mjs +0 -12
  559. package/esm2020/src/app/core/table/table.utils.mjs +0 -33
  560. package/esm2020/src/app/core/table/testing/table-validator.service.mjs +0 -27
  561. package/esm2020/src/app/core/table/testing/table.testing.mjs +0 -281
  562. package/esm2020/src/app/core/table/testing/table.testing.module.mjs +0 -38
  563. package/esm2020/src/app/shared/alerts.mjs +0 -239
  564. package/esm2020/src/app/shared/audio/audio.mjs +0 -248
  565. package/esm2020/src/app/shared/audio/audio.testing.mjs +0 -31
  566. package/esm2020/src/app/shared/capacitor/keyboard.mjs +0 -40
  567. package/esm2020/src/app/shared/capacitor/plugins.mjs +0 -9
  568. package/esm2020/src/app/shared/dates.mjs +0 -149
  569. package/esm2020/src/app/shared/debug/debug.component.mjs +0 -39
  570. package/esm2020/src/app/shared/directives/autofocus.directive.mjs +0 -93
  571. package/esm2020/src/app/shared/directives/autotitle.directive.mjs +0 -30
  572. package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +0 -53
  573. package/esm2020/src/app/shared/directives/ng-var.directive.mjs +0 -31
  574. package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +0 -59
  575. package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +0 -40
  576. package/esm2020/src/app/shared/events.mjs +0 -65
  577. package/esm2020/src/app/shared/file/csv.utils.mjs +0 -72
  578. package/esm2020/src/app/shared/file/file.service.mjs +0 -117
  579. package/esm2020/src/app/shared/file/file.utils.mjs +0 -113
  580. package/esm2020/src/app/shared/file/images.utils.mjs +0 -161
  581. package/esm2020/src/app/shared/file/uri.utils.mjs +0 -24
  582. package/esm2020/src/app/shared/form/field.component.mjs +0 -332
  583. package/esm2020/src/app/shared/form/loading-spinner.mjs +0 -36
  584. package/esm2020/src/app/shared/forms.mjs +0 -414
  585. package/esm2020/src/app/shared/functions.mjs +0 -482
  586. package/esm2020/src/app/shared/geolocation/geolocation.utils.mjs +0 -80
  587. package/esm2020/src/app/shared/gesture/gesture-config.mjs +0 -49
  588. package/esm2020/src/app/shared/graph/graph-colors.mjs +0 -212
  589. package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +0 -57
  590. package/esm2020/src/app/shared/help/help.modal.mjs +0 -53
  591. package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +0 -23
  592. package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +0 -84
  593. package/esm2020/src/app/shared/http/http.utils.mjs +0 -56
  594. package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +0 -368
  595. package/esm2020/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +0 -27
  596. package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +0 -90
  597. package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +0 -39
  598. package/esm2020/src/app/shared/image/image.service.mjs +0 -98
  599. package/esm2020/src/app/shared/inputs.mjs +0 -231
  600. package/esm2020/src/app/shared/interceptors/progess.interceptor.mjs +0 -27
  601. package/esm2020/src/app/shared/logging/logger.model.mjs +0 -47
  602. package/esm2020/src/app/shared/logging/logging-service.class.mjs +0 -121
  603. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +0 -47
  604. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +0 -920
  605. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +0 -78
  606. package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +0 -17
  607. package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +0 -209
  608. package/esm2020/src/app/shared/material/badge/badge.directive.mjs +0 -199
  609. package/esm2020/src/app/shared/material/badge/badge.test.mjs +0 -41
  610. package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +0 -68
  611. package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +0 -253
  612. package/esm2020/src/app/shared/material/chips/chips.module.mjs +0 -76
  613. package/esm2020/src/app/shared/material/chips/material.chips.mjs +0 -696
  614. package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +0 -143
  615. package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +0 -91
  616. package/esm2020/src/app/shared/material/datetime/material.date.mjs +0 -376
  617. package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +0 -385
  618. package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +0 -499
  619. package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +0 -109
  620. package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +0 -111
  621. package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +0 -103
  622. package/esm2020/src/app/shared/material/duration/duration.module.mjs +0 -67
  623. package/esm2020/src/app/shared/material/duration/duration.utils.mjs +0 -36
  624. package/esm2020/src/app/shared/material/duration/material.duration.mjs +0 -257
  625. package/esm2020/src/app/shared/material/latlong/latlong.utils.mjs +0 -266
  626. package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +0 -382
  627. package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +0 -67
  628. package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +0 -102
  629. package/esm2020/src/app/shared/material/material.module.mjs +0 -229
  630. package/esm2020/src/app/shared/material/material.testing.module.mjs +0 -179
  631. package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -98
  632. package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +0 -190
  633. package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +0 -17
  634. package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +0 -162
  635. package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -37
  636. package/esm2020/src/app/shared/material/numpad/numpad.model.mjs +0 -15
  637. package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -46
  638. package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +0 -46
  639. package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +0 -22
  640. package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +0 -344
  641. package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +0 -52
  642. package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +0 -64
  643. package/esm2020/src/app/shared/material/text/testing/text-form.testing.mjs +0 -29
  644. package/esm2020/src/app/shared/material/text/text-form.component.mjs +0 -89
  645. package/esm2020/src/app/shared/named-filter/named-filter-selector.component.mjs +0 -224
  646. package/esm2020/src/app/shared/named-filter/named-filter.model.mjs +0 -45
  647. package/esm2020/src/app/shared/named-filter/named-filter.service.mjs +0 -63
  648. package/esm2020/src/app/shared/observables.mjs +0 -104
  649. package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +0 -141
  650. package/esm2020/src/app/shared/pipes/colors.pipe.mjs +0 -25
  651. package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +0 -48
  652. package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +0 -66
  653. package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +0 -27
  654. package/esm2020/src/app/shared/pipes/duration.pipe.mjs +0 -34
  655. package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +0 -62
  656. package/esm2020/src/app/shared/pipes/form.pipes.mjs +0 -187
  657. package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +0 -48
  658. package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +0 -46
  659. package/esm2020/src/app/shared/pipes/math.pipes.mjs +0 -59
  660. package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +0 -21
  661. package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +0 -30
  662. package/esm2020/src/app/shared/pipes/pipes.module.mjs +0 -239
  663. package/esm2020/src/app/shared/pipes/property.pipes.mjs +0 -93
  664. package/esm2020/src/app/shared/pipes/string.pipes.mjs +0 -121
  665. package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +0 -43
  666. package/esm2020/src/app/shared/pipes/types.pipes.mjs +0 -45
  667. package/esm2020/src/app/shared/platforms.mjs +0 -43
  668. package/esm2020/src/app/shared/services/job.utils.mjs +0 -92
  669. package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +0 -339
  670. package/esm2020/src/app/shared/services/progress-bar.service.mjs +0 -33
  671. package/esm2020/src/app/shared/services/startable-observable-service.class.mjs +0 -118
  672. package/esm2020/src/app/shared/services/startable-service.class.mjs +0 -110
  673. package/esm2020/src/app/shared/services/translate-context.service.mjs +0 -103
  674. package/esm2020/src/app/shared/services.mjs +0 -62
  675. package/esm2020/src/app/shared/shared-routing.module.mjs +0 -71
  676. package/esm2020/src/app/shared/shared.module.mjs +0 -229
  677. package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +0 -268
  678. package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +0 -47
  679. package/esm2020/src/app/shared/storage/storage.service.mjs +0 -132
  680. package/esm2020/src/app/shared/testing/observable.test.mjs +0 -95
  681. package/esm2020/src/app/shared/testing/tests.page.mjs +0 -33
  682. package/esm2020/src/app/shared/toast/toast.testing.mjs +0 -51
  683. package/esm2020/src/app/shared/toast/toasts.mjs +0 -144
  684. package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +0 -58
  685. package/esm2020/src/app/shared/toolbar/toolbar.mjs +0 -251
  686. package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +0 -53
  687. package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +0 -58
  688. package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +0 -97
  689. package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +0 -204
  690. package/esm2020/src/app/shared/upload-file/upload-file.model.mjs +0 -20
  691. package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +0 -104
  692. package/esm2020/src/app/shared/validator/validators.mjs +0 -580
  693. package/esm2020/src/app/shared/version/versions.mjs +0 -81
  694. package/esm2020/src/app/social/job/job.module.mjs +0 -42
  695. package/esm2020/src/app/social/job/progression/job-progression.component.mjs +0 -20
  696. package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +0 -216
  697. package/esm2020/src/app/social/job/progression/job-progression.list.mjs +0 -43
  698. package/esm2020/src/app/social/job/progression/job-progression.model.mjs +0 -23
  699. package/esm2020/src/app/social/job/progression/job-progression.service.mjs +0 -71
  700. package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +0 -52
  701. package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +0 -55
  702. package/esm2020/src/app/social/message/message.form.mjs +0 -136
  703. package/esm2020/src/app/social/message/message.modal.mjs +0 -99
  704. package/esm2020/src/app/social/message/message.model.mjs +0 -67
  705. package/esm2020/src/app/social/message/message.service.mjs +0 -105
  706. package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +0 -114
  707. package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +0 -246
  708. package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +0 -227
  709. package/esm2020/src/app/social/user-event/testing/user-event.testing.model.mjs +0 -112
  710. package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +0 -111
  711. package/esm2020/src/app/social/user-event/user-event.module.mjs +0 -39
  712. package/esm2020/src/app/social/user-event/user-event.service.mjs +0 -501
  713. package/esm2020/src/environments/environment.class.mjs +0 -5
  714. package/esm2020/src/environments/environment.loader.mjs +0 -79
  715. package/esm2020/src/environments/environment.mjs +0 -97
  716. package/fesm2015/sumaris-net.ngx-components.mjs +0 -41105
  717. package/fesm2015/sumaris-net.ngx-components.mjs.map +0 -1
  718. package/fesm2020/sumaris-net.ngx-components.mjs.map +0 -1
  719. package/resources/README.md +0 -7
  720. /package/{esm2020 → esm2022}/src/app/core/services/config/core.config.mjs +0 -0
  721. /package/{esm2020 → esm2022}/src/app/core/services/model/history.model.mjs +0 -0
  722. /package/{esm2020 → esm2022}/src/app/core/services/model/model.enum.mjs +0 -0
  723. /package/{esm2020 → esm2022}/src/app/core/services/model/settings.model.mjs +0 -0
  724. /package/{esm2020 → esm2022}/src/app/shared/constants.mjs +0 -0
  725. /package/{esm2020 → esm2022}/src/app/shared/debug/debug-service.class.mjs +0 -0
  726. /package/{esm2020 → esm2022}/src/app/shared/focusable.mjs +0 -0
  727. /package/{esm2020 → esm2022}/src/app/shared/gesture/hammer.utils.mjs +0 -0
  728. /package/{esm2020 → esm2022}/src/app/shared/image/image.model.mjs +0 -0
  729. /package/{esm2020 → esm2022}/src/app/shared/logging/log-level.model.mjs +0 -0
  730. /package/{esm2020 → esm2022}/src/app/shared/logging/logging-service.config.mjs +0 -0
  731. /package/{esm2020 → esm2022}/src/app/shared/material/material.animations.mjs +0 -0
  732. /package/{esm2020 → esm2022}/src/app/shared/modules.mjs +0 -0
  733. /package/{esm2020 → esm2022}/src/app/shared/services/entity-service.class.mjs +0 -0
  734. /package/{esm2020 → esm2022}/src/app/shared/services/validator-service.class.mjs +0 -0
  735. /package/{esm2020 → esm2022}/src/app/shared/types.mjs +0 -0
  736. /package/{esm2020 → esm2022}/src/app/social/social.errors.mjs +0 -0
  737. /package/{esm2020 → esm2022}/src/app/social/user-event/user-event.model.mjs +0 -0
  738. /package/{esm2020 → esm2022}/sumaris-net.ngx-components.mjs +0 -0
@@ -0,0 +1,132 @@
1
+ import { Component } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import { SharedFormGroupValidators } from '../../../validator/validators';
5
+ import { AppFormUtils } from '../../../../core/form/form.utils';
6
+ import { DateUtils, MOMENT_NO_TIME_PROPERTY, toDateISOString } from '../../../dates';
7
+ import { isMobile } from '../../../platforms';
8
+ import { timer } from 'rxjs';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@ionic/angular";
11
+ import * as i2 from "@angular/forms";
12
+ import * as i3 from "@angular/common";
13
+ import * as i4 from "@angular/material/form-field";
14
+ import * as i5 from "@angular/material/input";
15
+ import * as i6 from "@angular/material/checkbox";
16
+ import * as i7 from "@angular/material/tabs";
17
+ import * as i8 from "../material.datetime";
18
+ import * as i9 from "@ngx-translate/core";
19
+ import * as i10 from "../../../pipes/date-diff-duration.pipe";
20
+ export class DateTimeTestPage {
21
+ platform;
22
+ formBuilder;
23
+ cd;
24
+ showLogPanel = true;
25
+ logContent = '';
26
+ memoryHide = false;
27
+ memoryMobile = true;
28
+ memoryTimer;
29
+ form;
30
+ mode = 'mobile';
31
+ mobileApparence = 'fill';
32
+ noTimeProperty = MOMENT_NO_TIME_PROPERTY;
33
+ constructor(platform, formBuilder, cd) {
34
+ this.platform = platform;
35
+ this.formBuilder = formBuilder;
36
+ this.cd = cd;
37
+ this.form = formBuilder.group({
38
+ empty: [null],
39
+ emptyRequired: [null, Validators.required],
40
+ enable: [null, Validators.required],
41
+ disable: [null, Validators.required],
42
+ noTime: [null, Validators.required],
43
+ readonly: [null],
44
+ startDateTime: [null, Validators.required],
45
+ endDateTime: [null, Validators.required],
46
+ hint: [null]
47
+ }, {
48
+ validators: SharedFormGroupValidators.dateRange('empty', 'enable')
49
+ });
50
+ const disableControl = this.form.get('disable');
51
+ disableControl.disable();
52
+ // Copy the 'enable' value, into the disable control
53
+ this.form.get('enable').valueChanges.subscribe(value => disableControl.setValue(value));
54
+ this.showLogPanel = this.showLogPanel || isMobile(window);
55
+ }
56
+ ngOnInit() {
57
+ setTimeout(() => this.loadData(), 250);
58
+ }
59
+ toggleMode(value) {
60
+ if (this.mode !== value) {
61
+ this.mode = value;
62
+ this.stopMemoryTimer();
63
+ }
64
+ }
65
+ toggleMobileApparence(event) {
66
+ this.mobileApparence = event.checked ? 'outline' : 'fill';
67
+ }
68
+ // Load the form with data
69
+ async loadData() {
70
+ const now = DateUtils.moment();
71
+ const data = {
72
+ empty: null, // toDateISOString(now.clone().add(2, 'hours'))
73
+ emptyRequired: null,
74
+ enable: toDateISOString(now),
75
+ disable: now,
76
+ noTime: DateUtils.markNoTime(DateUtils.resetTime(now)),
77
+ readonly: now,
78
+ startDateTime: toDateISOString(now),
79
+ endDateTime: toDateISOString(now.add(1, 'd')),
80
+ };
81
+ this.form.setValue(data);
82
+ this.log('[test-page] Data loaded: ' + JSON.stringify(data));
83
+ this.form.get('empty').valueChanges
84
+ .pipe(debounceTime(300))
85
+ .subscribe(value => this.log('[test-page] Value n°1: ' + JSON.stringify(value)));
86
+ this.form.get('enable').valueChanges
87
+ .pipe(debounceTime(300))
88
+ .subscribe(value => this.log('[test-page] Value n°2: ' + JSON.stringify(value)));
89
+ this.form.get('noTime').valueChanges
90
+ .pipe(debounceTime(300))
91
+ .subscribe(value => this.log('[test-page] Value n°3: ' + JSON.stringify(value)));
92
+ }
93
+ doSubmit(event) {
94
+ this.form.markAllAsTouched();
95
+ this.log('[test-page] Form content: ' + JSON.stringify(this.form.value));
96
+ this.log('[test-page] Form status: ' + this.form.status);
97
+ if (this.form.invalid) {
98
+ this.log('[test-page] Form errors: ' + JSON.stringify(this.form.errors));
99
+ // DEBUG
100
+ AppFormUtils.logFormErrors(this.form);
101
+ }
102
+ }
103
+ log(message) {
104
+ console.debug(message);
105
+ if (this.showLogPanel) {
106
+ this.logContent += message + '<br/>';
107
+ this.cd.markForCheck();
108
+ }
109
+ }
110
+ clearLogPanel() {
111
+ this.logContent = '';
112
+ this.cd.markForCheck();
113
+ }
114
+ startMemoryTimer() {
115
+ this.memoryTimer = timer(50, 50).subscribe(() => {
116
+ this.memoryHide = !this.memoryHide;
117
+ });
118
+ }
119
+ stopMemoryTimer() {
120
+ this.memoryTimer?.unsubscribe();
121
+ this.memoryTimer = null;
122
+ this.memoryHide = false;
123
+ }
124
+ stringify = JSON.stringify;
125
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: DateTimeTestPage, deps: [{ token: i1.Platform }, { token: i2.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
126
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: DateTimeTestPage, selector: "app-data-time-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Date/Time field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form #tabPanel class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!-- debugging memory leak -->\n <ion-grid *ngIf=\"mode==='memory'\">\n\n <ion-row>\n <ion-col>\n <ion-text><h4>Debug memory leak</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"auto\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"4\">\n <mat-form-field floatLabel=\"auto\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-time-field formControlName=\"emptyRequired\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode=='mobile'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Mobile mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-checkbox (change)=\"toggleMobileApparence($event)\">\n Change apparence\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.empty.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"empty\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Empty value + required -->\n <ion-col>\n\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value + required\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.emptyRequired.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"emptyRequired\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.enable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"enable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.disable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"disable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <!-- Date diff -->\n <ion-row>\n <ion-col>\n <ion-text><h5>Date diff</h5></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Start date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.startDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"startDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [required]=\"true\"\n [appearance]=\"mobileApparence\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n End date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.endDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"endDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [required]=\"true\"\n [appearance]=\"mobileApparence\"\n [subscriptSizing]=\"'fixed'\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <!-- duration -->\n <mat-hint align=\"end\" *ngIf=\"form.controls.startDateTime.valid && form.controls.endDateTime.value as value\">\n <span translate>COMMON.DURATION_DOTS</span>\n &nbsp;{{\n {\n startValue: form.controls.startDateTime.value,\n endValue: value\n } | dateDiffDuration\n }}\n </mat-hint>\n </mat-date-time-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Hint -->\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Hint\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.hint.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"hint\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <mat-hint>Some hint</mat-hint>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode==='desktop'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Desktop mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.empty.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"empty\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Empty required value -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value + required\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.emptyRequired.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"emptyRequired\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.enable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"enable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.disable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"disable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- NoTime -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value (No time)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.noTime.value) + ' noTime:' + (form.controls.noTime.value && form.controls.noTime.value[noTimeProperty])}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"noTime\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.readonly.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-time-field #readonlyField formControlName=\"readonly\"\n placeholder=\"Date/Time\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n <!-- Date diff -->\n <ion-row>\n <ion-col>\n <ion-text><h5>Date diff</h5></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Start date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.startDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"startDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [required]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n End date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.endDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"endDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [clearable]=\"true\"\n [required]=\"true\"\n [subscriptSizing]=\"'fixed'\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <!-- duration -->\n <mat-hint align=\"end\" *ngIf=\"form.controls.startDateTime.valid && form.controls.endDateTime.value as value\">\n <span translate>COMMON.DURATION_DOTS</span>\n &nbsp;{{\n {\n startValue: form.controls.startDateTime.value,\n endValue: value\n } | dateDiffDuration\n }}\n </mat-hint>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Hint -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Hint\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.hint.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"hint\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <mat-hint>Some hint</mat-hint>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n </form>\n\n</ion-content>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i1.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i1.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i7.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex", "active", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i8.MatDateTime, selector: "mat-date-time-field", inputs: ["subscriptSizing", "formControl", "formControlName", "required", "placeholder", "floatLabel", "appearance", "mobile", "compact", "autofocus", "startDate", "clearable", "datePickerFilter", "readonly", "tabindex"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i10.DateDiffDurationPipe, name: "dateDiffDuration" }] });
127
+ }
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: DateTimeTestPage, decorators: [{
129
+ type: Component,
130
+ args: [{ selector: 'app-data-time-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Date/Time field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form #tabPanel class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!-- debugging memory leak -->\n <ion-grid *ngIf=\"mode==='memory'\">\n\n <ion-row>\n <ion-col>\n <ion-text><h4>Debug memory leak</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"auto\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\">Start timer</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\">Stop timer</ion-button>\n </ion-col>\n <ion-col size=\"4\">\n <mat-form-field floatLabel=\"auto\">\n <input matInput type=\"text\" hidden>\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n Mobile ?\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n <ion-col>\n <mat-date-time-field formControlName=\"emptyRequired\"\n *ngIf=\"!memoryHide\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"memoryMobile\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode=='mobile'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Mobile mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-checkbox (change)=\"toggleMobileApparence($event)\">\n Change apparence\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.empty.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"empty\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Empty value + required -->\n <ion-col>\n\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value + required\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.emptyRequired.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"emptyRequired\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.enable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"enable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.disable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"disable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"true\"\n [appearance]=\"mobileApparence\"\n >\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <!-- Date diff -->\n <ion-row>\n <ion-col>\n <ion-text><h5>Date diff</h5></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Start date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.startDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"startDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [required]=\"true\"\n [appearance]=\"mobileApparence\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n End date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.endDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"endDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\"\n [required]=\"true\"\n [appearance]=\"mobileApparence\"\n [subscriptSizing]=\"'fixed'\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <!-- duration -->\n <mat-hint align=\"end\" *ngIf=\"form.controls.startDateTime.valid && form.controls.endDateTime.value as value\">\n <span translate>COMMON.DURATION_DOTS</span>\n &nbsp;{{\n {\n startValue: form.controls.startDateTime.value,\n endValue: value\n } | dateDiffDuration\n }}\n </mat-hint>\n </mat-date-time-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Hint -->\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Hint\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.hint.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"hint\"\n placeholder=\"Date/Time\"\n [mobile]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <mat-hint>Some hint</mat-hint>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <!-- debug console -->\n <ion-row>\n <!-- buttons -->\n <ion-col size=\"2\">\n <!-- submit form -->\n <ion-button (click)=\"doSubmit($event)\"\n fill=\"outline\">\n <ion-icon name=\"checkmark\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <!-- clear log -->\n <ion-button (click)=\"clearLogPanel()\"\n fill=\"outline\">\n <ion-icon name=\"trash\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"10\" *ngIf=\"showLogPanel\">\n <ion-text color=\"primary\">Log:<br/></ion-text>\n <div class=\"ion-padding-start\">\n <ion-text color=\"medium\">\n <small [innerHTML]=\"logContent\"></small>\n </ion-text>\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode==='desktop'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Desktop mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n\n <!-- Empty value -->\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.empty.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"empty\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Empty required value -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Empty value + required\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.emptyRequired.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"emptyRequired\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Enable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.enable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"enable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Disable -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.disable.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"disable\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- NoTime -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n With value (No time)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.noTime.value) + ' noTime:' + (form.controls.noTime.value && form.controls.noTime.value[noTimeProperty])}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"noTime\"\n placeholder=\"Date/Time\"\n [required]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Readonly -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly toggle\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.readonly.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n </mat-checkbox>\n\n <mat-date-time-field #readonlyField formControlName=\"readonly\"\n placeholder=\"Date/Time\"\n [readonly]=\"true\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n <!-- Date diff -->\n <ion-row>\n <ion-col>\n <ion-text><h5>Date diff</h5></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Start date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.startDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"startDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [required]=\"true\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n End date time\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{stringify(form.controls.endDateTime.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"endDateTime\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [clearable]=\"true\"\n [required]=\"true\"\n [subscriptSizing]=\"'fixed'\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <!-- duration -->\n <mat-hint align=\"end\" *ngIf=\"form.controls.startDateTime.valid && form.controls.endDateTime.value as value\">\n <span translate>COMMON.DURATION_DOTS</span>\n &nbsp;{{\n {\n startValue: form.controls.startDateTime.value,\n endValue: value\n } | dateDiffDuration\n }}\n </mat-hint>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- Hint -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Hint\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>{{stringify(form.controls.hint.value)}}</pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-date-time-field formControlName=\"hint\"\n placeholder=\"Date/Time\"\n [mobile]=\"false\"\n [clearable]=\"true\">\n <ion-icon matPrefix name=\"calendar-outline\"></ion-icon>\n <mat-hint>Some hint</mat-hint>\n </mat-date-time-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n </form>\n\n</ion-content>\n" }]
131
+ }], ctorParameters: () => [{ type: i1.Platform }, { type: i2.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }] });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWRhdGUtdGltZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvdGVzdGluZy9tYXQtZGF0ZS10aW1lLnRlc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS90ZXN0aW5nL21hdC1kYXRlLXRpbWUudGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBdUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQWUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFRekMsTUFBTSxPQUFPLGdCQUFnQjtJQWlCZjtJQUNBO0lBQ0E7SUFoQlosWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRWhCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixXQUFXLENBQWU7SUFFMUIsSUFBSSxDQUFtQjtJQUN2QixJQUFJLEdBQXVDLFFBQVEsQ0FBQztJQUNwRCxlQUFlLEdBQTJCLE1BQU0sQ0FBQztJQUVqRCxjQUFjLEdBQUcsdUJBQXVCLENBQUM7SUFFekMsWUFDWSxRQUFrQixFQUNsQixXQUErQixFQUMvQixFQUFxQjtRQUZyQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUUvQixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2IsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDMUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDcEMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2hCLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQzFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQztTQUNiLEVBQUU7WUFDRCxVQUFVLEVBQUUseUJBQXlCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7U0FDbkUsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEQsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXpCLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVE7UUFDTixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUF3QjtRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlELENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUc7WUFDWCxLQUFLLEVBQUUsSUFBSSxFQUFFLCtDQUErQztZQUM1RCxhQUFhLEVBQUUsSUFBSTtZQUNuQixNQUFNLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUM1QixPQUFPLEVBQUUsR0FBRztZQUNaLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEQsUUFBUSxFQUFFLEdBQUc7WUFDYixhQUFhLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUNuQyxXQUFXLEVBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlDLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZO2FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZO2FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZO2FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQUs7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFekUsUUFBUTtZQUNSLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsR0FBRyxDQUFDLE9BQWU7UUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDckMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7dUdBaEloQixnQkFBZ0I7MkZBQWhCLGdCQUFnQiwwRENoQjdCLDQ0dEJBMm5CQTs7MkZEM21CYSxnQkFBZ0I7a0JBSjVCLFNBQVM7K0JBQ0Usb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtTaGFyZWRGb3JtR3JvdXBWYWxpZGF0b3JzfSBmcm9tICcuLi8uLi8uLi92YWxpZGF0b3IvdmFsaWRhdG9ycyc7XG5pbXBvcnQge0FwcEZvcm1VdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9mb3JtL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHtEYXRlVXRpbHMsIE1PTUVOVF9OT19USU1FX1BST1BFUlRZLCB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi8uLi9kYXRlcyc7XG5pbXBvcnQge2lzTW9iaWxlfSBmcm9tICcuLi8uLi8uLi9wbGF0Zm9ybXMnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb24sIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQXBwZWFyYW5jZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge01hdENoZWNrYm94Q2hhbmdlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kYXRhLXRpbWUtdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXQtZGF0ZS10aW1lLnRlc3QuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVUZXN0UGFnZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblxuICBzaG93TG9nUGFuZWwgPSB0cnVlO1xuICBsb2dDb250ZW50ID0gJyc7XG5cbiAgbWVtb3J5SGlkZSA9IGZhbHNlO1xuICBtZW1vcnlNb2JpbGUgPSB0cnVlO1xuICBtZW1vcnlUaW1lcjogU3Vic2NyaXB0aW9uO1xuXG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIG1vZGU6ICdtb2JpbGUnfCdkZXNrdG9wJ3wnbWVtb3J5J3wndGVtcCcgPSAnbW9iaWxlJztcbiAgbW9iaWxlQXBwYXJlbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ2ZpbGwnO1xuXG4gIG5vVGltZVByb3BlcnR5ID0gTU9NRU5UX05PX1RJTUVfUFJPUEVSVFk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGVtcHR5OiBbbnVsbF0sXG4gICAgICBlbXB0eVJlcXVpcmVkOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBlbmFibGU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGRpc2FibGU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG5vVGltZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmVhZG9ubHk6IFtudWxsXSxcbiAgICAgIHN0YXJ0RGF0ZVRpbWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVuZERhdGVUaW1lOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBoaW50OiBbbnVsbF1cbiAgICB9LCB7XG4gICAgICB2YWxpZGF0b3JzOiBTaGFyZWRGb3JtR3JvdXBWYWxpZGF0b3JzLmRhdGVSYW5nZSgnZW1wdHknLCAnZW5hYmxlJylcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc2FibGVDb250cm9sID0gdGhpcy5mb3JtLmdldCgnZGlzYWJsZScpO1xuICAgIGRpc2FibGVDb250cm9sLmRpc2FibGUoKTtcblxuICAgIC8vIENvcHkgdGhlICdlbmFibGUnIHZhbHVlLCBpbnRvIHRoZSBkaXNhYmxlIGNvbnRyb2xcbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGUnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IGRpc2FibGVDb250cm9sLnNldFZhbHVlKHZhbHVlKSk7XG5cbiAgICB0aGlzLnNob3dMb2dQYW5lbCA9IHRoaXMuc2hvd0xvZ1BhbmVsIHx8IGlzTW9iaWxlKHdpbmRvdyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZERhdGEoKSwgMjUwKTtcbiAgfVxuXG4gIHRvZ2dsZU1vZGUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5tb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5tb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLnN0b3BNZW1vcnlUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZU1vYmlsZUFwcGFyZW5jZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICAgIHRoaXMubW9iaWxlQXBwYXJlbmNlID0gZXZlbnQuY2hlY2tlZCA/ICdvdXRsaW5lJyA6ICdmaWxsJztcbiAgfVxuXG4gIC8vIExvYWQgdGhlIGZvcm0gd2l0aCBkYXRhXG4gIGFzeW5jIGxvYWREYXRhKCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGVVdGlscy5tb21lbnQoKTtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZW1wdHk6IG51bGwsIC8vIHRvRGF0ZUlTT1N0cmluZyhub3cuY2xvbmUoKS5hZGQoMiwgJ2hvdXJzJykpXG4gICAgICBlbXB0eVJlcXVpcmVkOiBudWxsLFxuICAgICAgZW5hYmxlOiB0b0RhdGVJU09TdHJpbmcobm93KSxcbiAgICAgIGRpc2FibGU6IG5vdyxcbiAgICAgIG5vVGltZTogRGF0ZVV0aWxzLm1hcmtOb1RpbWUoRGF0ZVV0aWxzLnJlc2V0VGltZShub3cpKSxcbiAgICAgIHJlYWRvbmx5OiBub3csXG4gICAgICBzdGFydERhdGVUaW1lOiB0b0RhdGVJU09TdHJpbmcobm93KSxcbiAgICAgIGVuZERhdGVUaW1lOiAgdG9EYXRlSVNPU3RyaW5nKG5vdy5hZGQoMSwnZCcpKSxcbiAgICB9O1xuXG4gICAgdGhpcy5mb3JtLnNldFZhbHVlKGRhdGEpO1xuXG4gICAgdGhpcy5sb2coJ1t0ZXN0LXBhZ2VdIERhdGEgbG9hZGVkOiAnICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXG4gICAgdGhpcy5mb3JtLmdldCgnZW1wdHknKS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApKVxuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLmxvZygnW3Rlc3QtcGFnZV0gVmFsdWUgbsKwMTogJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuXG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlJykudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5sb2coJ1t0ZXN0LXBhZ2VdIFZhbHVlIG7CsDI6ICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKTtcblxuICAgIHRoaXMuZm9ybS5nZXQoJ25vVGltZScpLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMubG9nKCdbdGVzdC1wYWdlXSBWYWx1ZSBuwrAzOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpKSk7XG4gIH1cblxuICBkb1N1Ym1pdChldmVudCkge1xuICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5sb2coJ1t0ZXN0LXBhZ2VdIEZvcm0gY29udGVudDogJyArIEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS52YWx1ZSkpO1xuICAgIHRoaXMubG9nKCdbdGVzdC1wYWdlXSBGb3JtIHN0YXR1czogJyArIHRoaXMuZm9ybS5zdGF0dXMpO1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5sb2coJ1t0ZXN0LXBhZ2VdIEZvcm0gZXJyb3JzOiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLmVycm9ycykpO1xuXG4gICAgICAvLyBERUJVR1xuICAgICAgQXBwRm9ybVV0aWxzLmxvZ0Zvcm1FcnJvcnModGhpcy5mb3JtKTtcbiAgICB9XG4gIH1cblxuICBsb2cobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlKTtcblxuICAgIGlmICh0aGlzLnNob3dMb2dQYW5lbCkge1xuICAgICAgdGhpcy5sb2dDb250ZW50ICs9IG1lc3NhZ2UgKyAnPGJyLz4nO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckxvZ1BhbmVsKCkge1xuICAgIHRoaXMubG9nQ29udGVudCA9ICcnO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzdGFydE1lbW9yeVRpbWVyKCkge1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSB0aW1lcig1MCw1MCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubWVtb3J5SGlkZSA9ICF0aGlzLm1lbW9yeUhpZGU7XG4gICAgfSk7XG4gIH1cblxuICBzdG9wTWVtb3J5VGltZXIoKSB7XG4gICAgdGhpcy5tZW1vcnlUaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm1lbW9yeVRpbWVyID0gbnVsbDtcbiAgICB0aGlzLm1lbW9yeUhpZGUgPSBmYWxzZTtcbiAgfVxuXG4gIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5O1xuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbn1cblxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cInByaW1hcnlcIj5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYmFjay1idXR0b24+PC9pb24tYmFjay1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICAgIDxpb24tdGl0bGU+RGF0ZS9UaW1lIGZpZWxkIHRlc3QgcGFnZTwvaW9uLXRpdGxlPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuXG4gIDwhLS0gVGFiIG5hdiAtIG1vYmlsZS9kZXNrdG9wIG1vZGUgLS0+XG4gIDxuYXYgbWF0LXRhYi1uYXYtYmFyIFt0YWJQYW5lbF09XCJ0YWJQYW5lbFwiPlxuICAgIDxhIG1hdC10YWItbGlua1xuICAgICAgIFthY3RpdmVdPVwibW9kZT09PSdtb2JpbGUnXCJcbiAgICAgICAoY2xpY2spPVwidG9nZ2xlTW9kZSgnbW9iaWxlJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+TW9iaWxlPC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGU9PT0nZGVza3RvcCdcIlxuICAgICAgIChjbGljayk9XCJ0b2dnbGVNb2RlKCdkZXNrdG9wJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+RGVza3RvcDwvbWF0LWxhYmVsPlxuICAgIDwvYT5cbiAgICA8YSBtYXQtdGFiLWxpbmsgW2FjdGl2ZV09XCJtb2RlPT09J21lbW9yeSdcIlxuICAgICAgIChjbGljayk9XCJ0b2dnbGVNb2RlKCdtZW1vcnknKVwiPlxuICAgICAgPG1hdC1sYWJlbD5NZW1vcnkgbGVhayBkZWJ1ZzwvbWF0LWxhYmVsPlxuICAgIDwvYT5cbiAgICA8YSBtYXQtdGFiLWxpbmtcbiAgICAgICBbYWN0aXZlXT1cIm1vZGU9PT0ndGVtcCdcIlxuICAgICAgIChjbGljayk9XCJ0b2dnbGVNb2RlKCd0ZW1wJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+VGVtcG9yYXJ5PC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICA8L25hdj5cblxuICA8Zm9ybSAjdGFiUGFuZWwgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJkb1N1Ym1pdCgkZXZlbnQpXCI+XG5cbiAgICA8IS0tIGRlYnVnZ2luZyBtZW1vcnkgbGVhayAtLT5cbiAgICA8aW9uLWdyaWQgKm5nSWY9XCJtb2RlPT09J21lbW9yeSdcIj5cblxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tdGV4dD48aDQ+RGVidWcgbWVtb3J5IGxlYWs8L2g0PjwvaW9uLXRleHQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiIW1lbW9yeVRpbWVyXCIgKGNsaWNrKT1cInN0YXJ0TWVtb3J5VGltZXIoKVwiPlN0YXJ0IHRpbWVyPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwibWVtb3J5VGltZXJcIiAoY2xpY2spPVwic3RvcE1lbW9yeVRpbWVyKClcIj5TdG9wIHRpbWVyPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0TGFiZWw9XCJhdXRvXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBoaWRkZW4+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwibWVtb3J5TW9iaWxlPSRldmVudC5jaGVja2VkXCIgW2NoZWNrZWRdPVwibWVtb3J5TW9iaWxlXCI+XG4gICAgICAgICAgICAgIE1vYmlsZSA/XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImVtcHR5UmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW1lbW9yeUhpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZS9UaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtZW1vcnlNb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtZGF0ZS10aW1lLWZpZWxkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG5cbiAgICA8L2lvbi1ncmlkPlxuXG4gICAgPCEtLSBNb2JpbGUgbW9kZSAtLT5cbiAgICA8aW9uLWdyaWQgKm5nSWY9XCJtb2RlPT0nbW9iaWxlJ1wiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tdGV4dD48aDQ+TW9iaWxlIG1vZGU8L2g0PjwvaW9uLXRleHQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwidG9nZ2xlTW9iaWxlQXBwYXJlbmNlKCRldmVudClcIj5cbiAgICAgICAgICAgIENoYW5nZSBhcHBhcmVuY2VcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuXG4gICAgICAgICAgPCEtLSBFbXB0eSB2YWx1ZSAtLT5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIEVtcHR5IHZhbHVlXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVtcHR5LnZhbHVlKX19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWRhdGUtdGltZS1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJlbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZS9UaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwibW9iaWxlQXBwYXJlbmNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRW1wdHkgdmFsdWUgKyByZXF1aXJlZCAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIEVtcHR5IHZhbHVlICsgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW1wdHlSZXF1aXJlZC52YWx1ZSl9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXRpbWUtZmllbGQgZm9ybUNvbnRyb2xOYW1lPVwiZW1wdHlSZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZS9UaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJtb2JpbGVBcHBhcmVuY2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtdGltZS1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPCEtLSBFbmFibGUgIC0tPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIFdpdGggdmFsdWVcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5hYmxlLnZhbHVlKX19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWRhdGUtdGltZS1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGUvVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwibW9iaWxlQXBwYXJlbmNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRGlzYWJsZSAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBEaXNhYmxlXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmRpc2FibGUudmFsdWUpfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImRpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGUvVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwibW9iaWxlQXBwYXJlbmNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG5cbiAgICAgIDwhLS0gRGF0ZSBkaWZmIC0tPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tdGV4dD48aDU+RGF0ZSBkaWZmPC9oNT48L2lvbi10ZXh0PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBTdGFydCBkYXRlIHRpbWVcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuc3RhcnREYXRlVGltZS52YWx1ZSl9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXRpbWUtZmllbGQgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZS9UaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJtb2JpbGVBcHBhcmVuY2VcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS10aW1lLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBFbmQgZGF0ZSB0aW1lXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVuZERhdGVUaW1lLnZhbHVlKX19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWRhdGUtdGltZS1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZS9UaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJtb2JpbGVBcHBhcmVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cIidmaXhlZCdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICA8IS0tIGR1cmF0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxtYXQtaGludCBhbGlnbj1cImVuZFwiICpuZ0lmPVwiZm9ybS5jb250cm9scy5zdGFydERhdGVUaW1lLnZhbGlkICYmIGZvcm0uY29udHJvbHMuZW5kRGF0ZVRpbWUudmFsdWUgYXMgdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5DT01NT04uRFVSQVRJT05fRE9UUzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICZuYnNwO3t7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0VmFsdWU6IGZvcm0uY29udHJvbHMuc3RhcnREYXRlVGltZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kVmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgICB9IHwgZGF0ZURpZmZEdXJhdGlvblxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPCEtLSBIaW50IC0tPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiM1wiPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgSGludFxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+PHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmhpbnQudmFsdWUpfX08L3ByZT48L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWRhdGUtdGltZS1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJoaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlL1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+U29tZSBoaW50PC9tYXQtaGludD5cbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS10aW1lLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgPCEtLSBkZWJ1ZyBjb25zb2xlIC0tPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjJcIj5cbiAgICAgICAgICA8IS0tIHN1Ym1pdCBmb3JtIC0tPlxuICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJkb1N1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGVja21hcmtcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgICA8IS0tIGNsZWFyIGxvZyAgLS0+XG4gICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImNsZWFyTG9nUGFuZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2hcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEwXCIgKm5nSWY9XCJzaG93TG9nUGFuZWxcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJwcmltYXJ5XCI+TG9nOjxici8+PC9pb24tdGV4dD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW9uLXBhZGRpbmctc3RhcnRcIj5cbiAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICA8c21hbGwgW2lubmVySFRNTF09XCJsb2dDb250ZW50XCI+PC9zbWFsbD5cbiAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuXG4gICAgPCEtLSBEZXNrdG9wIG1vZGUgLS0+XG4gICAgPGlvbi1ncmlkICpuZ0lmPVwibW9kZT09PSdkZXNrdG9wJ1wiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tdGV4dD48aDQ+RGVza3RvcCBtb2RlPC9oND48L2lvbi10ZXh0PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2w+XG5cbiAgICAgICAgICA8IS0tIEVtcHR5IHZhbHVlIC0tPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgRW1wdHkgdmFsdWVcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW1wdHkudmFsdWUpfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlL1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtdGltZS1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPCEtLSBFbXB0eSByZXF1aXJlZCB2YWx1ZSAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBFbXB0eSB2YWx1ZSArIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVtcHR5UmVxdWlyZWQudmFsdWUpfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImVtcHR5UmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGUvVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRW5hYmxlICAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBXaXRoIHZhbHVlXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLmVuYWJsZS52YWx1ZSl9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXRpbWUtZmllbGQgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlL1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS10aW1lLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8IS0tIERpc2FibGUgLS0+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgRGlzYWJsZVxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3tzdHJpbmdpZnkoZm9ybS5jb250cm9scy5kaXNhYmxlLnZhbHVlKX19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWRhdGUtdGltZS1maWVsZCBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlL1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS10aW1lLWZpZWxkPlxuXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gTm9UaW1lICAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBXaXRoIHZhbHVlIChObyB0aW1lKVxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3tzdHJpbmdpZnkoZm9ybS5jb250cm9scy5ub1RpbWUudmFsdWUpICsgJyBub1RpbWU6JyArIChmb3JtLmNvbnRyb2xzLm5vVGltZS52YWx1ZSAmJiBmb3JtLmNvbnRyb2xzLm5vVGltZS52YWx1ZVtub1RpbWVQcm9wZXJ0eV0pfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cIm5vVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGF0ZS9UaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG1hdFByZWZpeCBuYW1lPVwiY2FsZW5kYXItb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtdGltZS1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPCEtLSBSZWFkb25seSAgLS0+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgUmVhZG9ubHkgdG9nZ2xlXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLnJlYWRvbmx5LnZhbHVlKX19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwicmVhZG9ubHlGaWVsZC5yZWFkb25seT0kZXZlbnQuY2hlY2tlZFwiIFtjaGVja2VkXT1cInJlYWRvbmx5RmllbGQucmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXRpbWUtZmllbGQgI3JlYWRvbmx5RmllbGQgZm9ybUNvbnRyb2xOYW1lPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGUvVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8IS0tIERhdGUgZGlmZiAtLT5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLXRleHQ+PGg1PkRhdGUgZGlmZjwvaDU+PC9pb24tdGV4dD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgU3RhcnQgZGF0ZSB0aW1lXG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57e3N0cmluZ2lmeShmb3JtLmNvbnRyb2xzLnN0YXJ0RGF0ZVRpbWUudmFsdWUpfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0RGF0ZVRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGUvVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBtYXRQcmVmaXggbmFtZT1cImNhbGVuZGFyLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIEVuZCBkYXRlIHRpbWVcbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuZW5kRGF0ZVRpbWUudmFsdWUpfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImVuZERhdGVUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEYXRlL1RpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cIidmaXhlZCdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICA8IS0tIGR1cmF0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxtYXQtaGludCBhbGlnbj1cImVuZFwiICpuZ0lmPVwiZm9ybS5jb250cm9scy5zdGFydERhdGVUaW1lLnZhbGlkICYmIGZvcm0uY29udHJvbHMuZW5kRGF0ZVRpbWUudmFsdWUgYXMgdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5DT01NT04uRFVSQVRJT05fRE9UUzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICZuYnNwO3t7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0VmFsdWU6IGZvcm0uY29udHJvbHMuc3RhcnREYXRlVGltZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kVmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgICB9IHwgZGF0ZURpZmZEdXJhdGlvblxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgICA8L21hdC1kYXRlLXRpbWUtZmllbGQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gSGludCAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICBIaW50XG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD48cHJlPnt7c3RyaW5naWZ5KGZvcm0uY29udHJvbHMuaGludC52YWx1ZSl9fTwvcHJlPjwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS10aW1lLWZpZWxkIGZvcm1Db250cm9sTmFtZT1cImhpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGUvVGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbWF0UHJlZml4IG5hbWU9XCJjYWxlbmRhci1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+U29tZSBoaW50PC9tYXQtaGludD5cbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS10aW1lLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cblxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvZm9ybT5cblxuPC9pb24tY29udGVudD5cbiJdfQ==