@igo2/geo 16.3.0 → 17.0.0-next.10

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 (663) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/assets/images/north-direction.png +0 -0
  7. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +32 -14
  8. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +38 -19
  9. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +19 -11
  10. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +8 -62
  11. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +49 -20
  12. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +23 -11
  13. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +48 -16
  14. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +12 -71
  15. package/esm2022/lib/catalog/catalog-library/index.mjs +4 -0
  16. package/esm2022/lib/catalog/catalog.module.mjs +18 -39
  17. package/esm2022/lib/catalog/index.mjs +2 -1
  18. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  19. package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
  20. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  21. package/esm2022/lib/catalog/shared/catalog.service.mjs +16 -9
  22. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +1 -1
  24. package/esm2022/lib/datasource/shared/capabilities.service.mjs +5 -5
  25. package/esm2022/lib/datasource/shared/datasource.service.mjs +11 -13
  26. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  29. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  31. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  32. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
  33. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  38. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  39. package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  41. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  42. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  43. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  45. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  47. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  49. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +5 -5
  50. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  52. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  53. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  55. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  57. package/esm2022/lib/datasource/shared/index.mjs +1 -1
  58. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
  59. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +6 -6
  60. package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
  61. package/esm2022/lib/datasource/utils/tilegrid.mjs +1 -1
  62. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +28 -13
  63. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +44 -19
  64. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +36 -16
  65. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +5 -2
  66. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  67. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +9 -2
  68. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +72 -41
  69. package/esm2022/lib/directions/directions.component.mjs +83 -21
  70. package/esm2022/lib/directions/directions.module.mjs +14 -73
  71. package/esm2022/lib/directions/directions.provider.mjs +16 -0
  72. package/esm2022/lib/directions/index.mjs +2 -1
  73. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  74. package/esm2022/lib/directions/shared/directions.service.mjs +37 -27
  75. package/esm2022/lib/directions/shared/directions.utils.mjs +22 -22
  76. package/esm2022/lib/directions/shared/store.mjs +2 -2
  77. package/esm2022/lib/download/download-button/download-button.component.mjs +21 -11
  78. package/esm2022/lib/download/download.module.mjs +10 -27
  79. package/esm2022/lib/download/shared/download.service.mjs +7 -7
  80. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +21 -10
  81. package/esm2022/lib/draw/draw/draw-popup.component.mjs +41 -18
  82. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +22 -9
  83. package/esm2022/lib/draw/draw/draw.component.mjs +55 -25
  84. package/esm2022/lib/draw/draw/draw.module.mjs +7 -104
  85. package/esm2022/lib/draw/drawingTool.module.mjs +8 -7
  86. package/esm2022/lib/draw/shared/draw-icon.service.mjs +7 -7
  87. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  88. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  89. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  90. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  91. package/esm2022/lib/environment/index.mjs +1 -1
  92. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +29 -13
  93. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +8 -7
  94. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +14 -27
  95. package/esm2022/lib/feature/feature-details/index.mjs +4 -0
  96. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +9 -9
  97. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +8 -11
  98. package/esm2022/lib/feature/feature.module.mjs +18 -12
  99. package/esm2022/lib/feature/index.mjs +3 -2
  100. package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
  101. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  102. package/esm2022/lib/feature/shared/feature.utils.mjs +2 -2
  103. package/esm2022/lib/feature/shared/index.mjs +1 -1
  104. package/esm2022/lib/feature/shared/store.mjs +2 -2
  105. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
  106. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +2 -2
  107. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +2 -2
  108. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -2
  109. package/esm2022/lib/feature/shared/strategies/loading.mjs +2 -2
  110. package/esm2022/lib/feature/shared/strategies/search.mjs +5 -5
  111. package/esm2022/lib/feature/shared/strategies/selection.mjs +2 -2
  112. package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
  113. package/esm2022/lib/filter/filter.module.mjs +47 -177
  114. package/esm2022/lib/filter/index.mjs +2 -1
  115. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +29 -15
  116. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +46 -20
  117. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +56 -25
  118. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +17 -14
  119. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +59 -34
  120. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +18 -12
  121. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +42 -18
  122. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +8 -7
  123. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +21 -12
  124. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +6 -5
  125. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +5 -5
  126. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  127. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  128. package/esm2022/lib/filter/shared/ogc-filter.mjs +46 -3
  129. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +5 -5
  130. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  131. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -7
  132. package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
  133. package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
  134. package/esm2022/lib/filter/shared/time-filter.service.mjs +5 -5
  135. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +66 -28
  136. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +35 -18
  137. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +35 -16
  138. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +28 -14
  139. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +51 -24
  140. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +31 -13
  141. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +8 -7
  142. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +16 -10
  143. package/esm2022/lib/geo.module.mjs +5 -43
  144. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +7 -7
  145. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +34 -17
  146. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +12 -43
  147. package/esm2022/lib/geometry/geometry-form-field/index.mjs +4 -0
  148. package/esm2022/lib/geometry/geometry.module.mjs +9 -10
  149. package/esm2022/lib/geometry/index.mjs +2 -3
  150. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  151. package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
  152. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  153. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  154. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  155. package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
  156. package/esm2022/lib/import-export/export-button/export-button.component.mjs +20 -10
  157. package/esm2022/lib/import-export/import-export/import-export.component.mjs +58 -22
  158. package/esm2022/lib/import-export/import-export.module.mjs +15 -81
  159. package/esm2022/lib/import-export/index.mjs +2 -1
  160. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +19 -66
  161. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  162. package/esm2022/lib/import-export/shared/export.service.mjs +14 -8
  163. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  164. package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
  165. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  166. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  167. package/esm2022/lib/import-export/shared/import.service.mjs +7 -7
  168. package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
  169. package/esm2022/lib/layer/index.mjs +2 -1
  170. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +35 -16
  171. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +45 -17
  172. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +13 -11
  173. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +8 -7
  174. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +28 -13
  175. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +10 -9
  176. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +49 -18
  177. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  178. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +33 -14
  179. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +5 -5
  180. package/esm2022/lib/layer/layer.module.mjs +27 -93
  181. package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
  182. package/esm2022/lib/layer/shared/layer.service.mjs +13 -13
  183. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  184. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  185. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  186. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  187. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
  188. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  189. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  190. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  191. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  192. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  193. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  194. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  195. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  196. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +21 -11
  197. package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
  198. package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
  199. package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
  200. package/esm2022/lib/layer/utils/tile-watcher.mjs +1 -1
  201. package/esm2022/lib/layer/utils/vector-watcher.mjs +1 -1
  202. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  203. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +27 -14
  204. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -8
  205. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +28 -17
  206. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +15 -11
  207. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +1 -1
  208. package/esm2022/lib/map/home-extent-button/index.mjs +1 -1
  209. package/esm2022/lib/map/index.mjs +1 -1
  210. package/esm2022/lib/map/info-section/info-section.component.mjs +7 -7
  211. package/esm2022/lib/map/map-browser/map-browser.component.mjs +8 -8
  212. package/esm2022/lib/map/map-center/map-center.component.mjs +6 -6
  213. package/esm2022/lib/map/map.module.mjs +51 -81
  214. package/esm2022/lib/map/menu-button/menu-button.component.mjs +23 -13
  215. package/esm2022/lib/map/offline-button/offline-button.component.mjs +21 -11
  216. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +23 -11
  217. package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
  218. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  219. package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
  220. package/esm2022/lib/map/shared/controllers/index.mjs +1 -1
  221. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  222. package/esm2022/lib/map/shared/hover-feature.directive.mjs +11 -10
  223. package/esm2022/lib/map/shared/index.mjs +1 -1
  224. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +3 -3
  225. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +10 -9
  226. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  227. package/esm2022/lib/map/shared/map.interface.mjs +1 -1
  228. package/esm2022/lib/map/shared/map.mjs +1 -1
  229. package/esm2022/lib/map/shared/map.service.mjs +5 -5
  230. package/esm2022/lib/map/shared/map.utils.mjs +1 -1
  231. package/esm2022/lib/map/shared/mapOffline.directive.mjs +11 -8
  232. package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
  233. package/esm2022/lib/map/shared/projection.service.mjs +7 -7
  234. package/esm2022/lib/map/shared/projection.utils.mjs +60 -1
  235. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +6 -6
  236. package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
  237. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +26 -16
  238. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +13 -9
  239. package/esm2022/lib/measure/index.mjs +2 -3
  240. package/esm2022/lib/measure/measure.module.mjs +8 -5
  241. package/esm2022/lib/measure/measurer/index.mjs +6 -0
  242. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +6 -5
  243. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +18 -11
  244. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +27 -13
  245. package/esm2022/lib/measure/measurer/measurer.component.mjs +40 -20
  246. package/esm2022/lib/measure/measurer/measurer.module.mjs +7 -69
  247. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  248. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  249. package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
  250. package/esm2022/lib/metadata/index.mjs +2 -1
  251. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +35 -18
  252. package/esm2022/lib/metadata/metadata.module.mjs +14 -31
  253. package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
  254. package/esm2022/lib/metadata/shared/metadata.service.mjs +5 -5
  255. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +7 -7
  256. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  257. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  258. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +8 -10
  259. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  260. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  261. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +5 -5
  262. package/esm2022/lib/offline/shared/geo-network.service.mjs +7 -7
  263. package/esm2022/lib/overlay/overlay.module.mjs +10 -8
  264. package/esm2022/lib/overlay/shared/overlay.directive.mjs +8 -7
  265. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  266. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  267. package/esm2022/lib/overlay/shared/overlay.service.mjs +5 -5
  268. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  269. package/esm2022/lib/print/print/print.component.mjs +8 -8
  270. package/esm2022/lib/print/print-form/print-form.component.mjs +49 -17
  271. package/esm2022/lib/print/print.module.mjs +10 -54
  272. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  273. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  274. package/esm2022/lib/print/shared/print.service.mjs +180 -127
  275. package/esm2022/lib/print/shared/print.type.mjs +1 -1
  276. package/esm2022/lib/query/query.module.mjs +7 -8
  277. package/esm2022/lib/query/shared/index.mjs +2 -1
  278. package/esm2022/lib/query/shared/query-search-source.mjs +6 -6
  279. package/esm2022/lib/query/shared/query-search-source.providers.mjs +2 -2
  280. package/esm2022/lib/query/shared/query.directive.mjs +8 -7
  281. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  282. package/esm2022/lib/query/shared/query.service.mjs +8 -10
  283. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  284. package/esm2022/lib/search/index.mjs +3 -5
  285. package/esm2022/lib/search/search-bar/search-bar.component.mjs +42 -19
  286. package/esm2022/lib/search/search-bar/search-bar.module.mjs +8 -61
  287. package/esm2022/lib/search/search-results/index.mjs +5 -0
  288. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +44 -19
  289. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +34 -18
  290. package/esm2022/lib/search/search-results/search-results-item.component.mjs +23 -12
  291. package/esm2022/lib/search/search-results/search-results.component.mjs +28 -14
  292. package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
  293. package/esm2022/lib/search/search-results/search-results.module.mjs +8 -91
  294. package/esm2022/lib/search/search-selector/search-selector.component.mjs +27 -12
  295. package/esm2022/lib/search/search-selector/search-selector.module.mjs +8 -44
  296. package/esm2022/lib/search/search-settings/search-settings.component.mjs +40 -15
  297. package/esm2022/lib/search/search-settings/search-settings.module.mjs +7 -47
  298. package/esm2022/lib/search/search.module.mjs +24 -13
  299. package/esm2022/lib/search/shared/index.mjs +2 -1
  300. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +11 -10
  301. package/esm2022/lib/search/shared/search-source-service.providers.mjs +1 -1
  302. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  303. package/esm2022/lib/search/shared/search.enums.mjs +1 -1
  304. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  305. package/esm2022/lib/search/shared/search.provider.mjs +20 -0
  306. package/esm2022/lib/search/shared/search.service.mjs +32 -13
  307. package/esm2022/lib/search/shared/search.utils.mjs +2 -2
  308. package/esm2022/lib/search/shared/sources/cadastre.mjs +13 -10
  309. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +11 -2
  310. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  311. package/esm2022/lib/search/shared/sources/coordinates.mjs +16 -14
  312. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +14 -2
  313. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
  314. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  315. package/esm2022/lib/search/shared/sources/icherche.mjs +28 -21
  316. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +23 -2
  317. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  318. package/esm2022/lib/search/shared/sources/ilayer.mjs +14 -12
  319. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +14 -2
  320. package/esm2022/lib/search/shared/sources/index.mjs +1 -1
  321. package/esm2022/lib/search/shared/sources/nominatim.mjs +10 -10
  322. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +10 -2
  323. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +13 -2
  324. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  325. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  326. package/esm2022/lib/search/shared/sources/storedqueries.mjs +17 -15
  327. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +17 -2
  328. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  329. package/esm2022/lib/search/shared/sources/workspace.mjs +12 -11
  330. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +11 -2
  331. package/esm2022/lib/style/index.mjs +1 -1
  332. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
  333. package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -2
  334. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  335. package/esm2022/lib/style/shared/index.mjs +1 -1
  336. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
  337. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
  338. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
  339. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  340. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  341. package/esm2022/lib/style/style-list/style-list.module.mjs +5 -5
  342. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  343. package/esm2022/lib/style/style-list/style-list.service.mjs +5 -5
  344. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +40 -17
  345. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +28 -14
  346. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +13 -9
  347. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  348. package/esm2022/lib/style/style-service/draw-style.service.mjs +5 -5
  349. package/esm2022/lib/style/style-service/style.service.mjs +4 -4
  350. package/esm2022/lib/style/style.module.mjs +12 -57
  351. package/esm2022/lib/toast/toast.component.mjs +21 -11
  352. package/esm2022/lib/toast/toast.module.mjs +10 -30
  353. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  354. package/esm2022/lib/utils/id-generator.mjs +1 -1
  355. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  356. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  357. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +7 -7
  358. package/esm2022/lib/wkt/shared/wkt.service.mjs +19 -19
  359. package/esm2022/lib/wkt/wkt.module.mjs +8 -5
  360. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +11 -10
  361. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +8 -24
  362. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  363. package/esm2022/lib/workspace/shared/edition-workspace.mjs +2 -2
  364. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +19 -14
  365. package/esm2022/lib/workspace/shared/feature-workspace.mjs +2 -2
  366. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +14 -11
  367. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +2 -2
  368. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +14 -11
  369. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +12 -9
  370. package/esm2022/lib/workspace/shared/workspace.utils.mjs +4 -4
  371. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +7 -7
  372. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +8 -13
  373. package/esm2022/lib/workspace/widgets/widgets.mjs +2 -2
  374. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +9 -8
  375. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +8 -10
  376. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +7 -6
  377. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +8 -10
  378. package/esm2022/lib/workspace/workspace.module.mjs +11 -36
  379. package/esm2022/public_api.mjs +11 -12
  380. package/fesm2022/igo2-geo.mjs +23027 -22793
  381. package/fesm2022/igo2-geo.mjs.map +1 -1
  382. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +3 -3
  383. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +2 -2
  384. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +2 -2
  385. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +2 -14
  386. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -3
  387. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  388. package/lib/catalog/catalog-library/catalog-library.component.d.ts +6 -3
  389. package/lib/catalog/catalog-library/catalog-library.module.d.ts +6 -18
  390. package/lib/catalog/catalog-library/index.d.ts +3 -0
  391. package/lib/catalog/catalog.module.d.ts +9 -9
  392. package/lib/catalog/index.d.ts +1 -0
  393. package/lib/catalog/shared/catalog.interface.d.ts +1 -1
  394. package/lib/catalog/shared/catalog.service.d.ts +3 -1
  395. package/lib/datasource/shared/datasource.service.d.ts +4 -5
  396. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -3
  397. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -3
  398. package/lib/datasource/shared/datasources/datasource.d.ts +1 -2
  399. package/lib/datasource/shared/datasources/feature-datasource.d.ts +2 -3
  400. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -3
  401. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -2
  402. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +2 -3
  403. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +1 -2
  404. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -2
  405. package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
  406. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +4 -2
  407. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +2 -2
  408. package/lib/directions/directions-results/directions-results.component.d.ts +2 -2
  409. package/lib/directions/directions-sources/directions-source.d.ts +7 -3
  410. package/lib/directions/directions-sources/directions-source.interface.d.ts +19 -6
  411. package/lib/directions/directions-sources/directions-source.provider.d.ts +3 -1
  412. package/lib/directions/directions-sources/osrm-directions-source.d.ts +20 -11
  413. package/lib/directions/directions.component.d.ts +16 -4
  414. package/lib/directions/directions.module.d.ts +4 -16
  415. package/lib/directions/directions.provider.d.ts +3 -0
  416. package/lib/directions/index.d.ts +1 -0
  417. package/lib/directions/shared/directions.interface.d.ts +2 -9
  418. package/lib/directions/shared/directions.service.d.ts +7 -3
  419. package/lib/directions/shared/directions.utils.d.ts +2 -2
  420. package/lib/directions/shared/store.d.ts +1 -1
  421. package/lib/download/download-button/download-button.component.d.ts +1 -1
  422. package/lib/download/download.module.d.ts +4 -6
  423. package/lib/download/shared/download.service.d.ts +1 -1
  424. package/lib/draw/draw/draw-layer-popup.component.d.ts +1 -1
  425. package/lib/draw/draw/draw-popup.component.d.ts +5 -5
  426. package/lib/draw/draw/draw-shorcuts.component.d.ts +3 -1
  427. package/lib/draw/draw/draw.component.d.ts +3 -3
  428. package/lib/draw/draw/draw.module.d.ts +2 -25
  429. package/lib/draw/drawingTool.module.d.ts +3 -0
  430. package/lib/draw/shared/draw-icon.service.d.ts +1 -1
  431. package/lib/environment/environment.interface.d.ts +2 -1
  432. package/lib/feature/feature-details/feature-details.component.d.ts +8 -5
  433. package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
  434. package/lib/feature/feature-details/feature-details.module.d.ts +5 -6
  435. package/lib/feature/feature-details/index.d.ts +3 -0
  436. package/lib/feature/feature-form/feature-form.component.d.ts +2 -3
  437. package/lib/feature/feature-form/feature-form.module.d.ts +2 -4
  438. package/lib/feature/feature.module.d.ts +9 -4
  439. package/lib/feature/index.d.ts +2 -1
  440. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  441. package/lib/feature/shared/feature.utils.d.ts +1 -1
  442. package/lib/feature/shared/store.d.ts +1 -1
  443. package/lib/feature/shared/strategies/geo-properties.d.ts +1 -1
  444. package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
  445. package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
  446. package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
  447. package/lib/feature/shared/strategies/loading.d.ts +1 -1
  448. package/lib/feature/shared/strategies/search.d.ts +1 -1
  449. package/lib/feature/shared/strategies/selection.d.ts +1 -1
  450. package/lib/filter/filter.module.d.ts +23 -28
  451. package/lib/filter/index.d.ts +1 -0
  452. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +3 -3
  453. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +3 -3
  454. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +5 -5
  455. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  456. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
  457. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +3 -3
  458. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +3 -3
  459. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  460. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +3 -3
  461. package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
  462. package/lib/filter/shared/ogc-filter.d.ts +7 -0
  463. package/lib/filter/shared/ogc-filter.interface.d.ts +2 -3
  464. package/lib/filter/shared/spatial-filter.service.d.ts +2 -1
  465. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +7 -6
  466. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
  467. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
  468. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  469. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +3 -3
  470. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  471. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  472. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
  473. package/lib/geo.module.d.ts +14 -24
  474. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +2 -3
  475. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
  476. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +5 -10
  477. package/lib/geometry/geometry-form-field/index.d.ts +3 -0
  478. package/lib/geometry/geometry.module.d.ts +5 -3
  479. package/lib/geometry/index.d.ts +1 -2
  480. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  481. package/lib/geometry/shared/controls/slice.d.ts +4 -4
  482. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  483. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  484. package/lib/import-export/import-export/import-export.component.d.ts +7 -4
  485. package/lib/import-export/import-export.module.d.ts +8 -15
  486. package/lib/import-export/index.d.ts +1 -0
  487. package/lib/import-export/shared/drop-geo-file.directive.d.ts +5 -5
  488. package/lib/import-export/shared/export.service.d.ts +1 -1
  489. package/lib/import-export/shared/export.utils.d.ts +2 -2
  490. package/lib/import-export/shared/import.service.d.ts +1 -1
  491. package/lib/import-export/shared/import.utils.d.ts +2 -2
  492. package/lib/layer/index.d.ts +1 -0
  493. package/lib/layer/layer-item/layer-item.component.d.ts +2 -2
  494. package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -2
  495. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +2 -2
  496. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  497. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  498. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +2 -2
  499. package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
  500. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  501. package/lib/layer/layer.module.d.ts +14 -18
  502. package/lib/layer/shared/layer.service.d.ts +1 -1
  503. package/lib/layer/shared/layers/image-layer.d.ts +1 -1
  504. package/lib/layer/shared/layers/layer.d.ts +1 -1
  505. package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
  506. package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
  507. package/lib/layer/shared/layers/vector-layer.d.ts +4 -5
  508. package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -2
  509. package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
  510. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  511. package/lib/layer/utils/image-watcher.d.ts +1 -1
  512. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +2 -2
  513. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  514. package/lib/map/geolocate-button/geolocate-button.component.d.ts +2 -2
  515. package/lib/map/home-extent-button/home-extent-button.component.d.ts +2 -2
  516. package/lib/map/info-section/info-section.component.d.ts +1 -1
  517. package/lib/map/map-browser/map-browser.component.d.ts +2 -2
  518. package/lib/map/map-center/map-center.component.d.ts +1 -1
  519. package/lib/map/map.module.d.ts +35 -21
  520. package/lib/map/menu-button/menu-button.component.d.ts +2 -2
  521. package/lib/map/offline-button/offline-button.component.d.ts +2 -2
  522. package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
  523. package/lib/map/shared/controllers/geolocation.d.ts +2 -1
  524. package/lib/map/shared/hover-feature.directive.d.ts +2 -2
  525. package/lib/map/shared/map-pointer-position.directive.d.ts +2 -2
  526. package/lib/map/shared/map.d.ts +2 -1
  527. package/lib/map/shared/mapOffline.directive.d.ts +3 -2
  528. package/lib/map/shared/projection.service.d.ts +1 -1
  529. package/lib/map/shared/projection.utils.d.ts +11 -0
  530. package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
  531. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +2 -2
  532. package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
  533. package/lib/measure/index.d.ts +1 -2
  534. package/lib/measure/measure.module.d.ts +3 -0
  535. package/lib/measure/measurer/index.d.ts +5 -0
  536. package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
  537. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  538. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  539. package/lib/measure/measurer/measurer.component.d.ts +4 -4
  540. package/lib/measure/measurer/measurer.module.d.ts +3 -18
  541. package/lib/measure/shared/measure.utils.d.ts +1 -1
  542. package/lib/metadata/index.d.ts +1 -0
  543. package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
  544. package/lib/metadata/metadata.module.d.ts +6 -7
  545. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
  546. package/lib/offline/geoDB/geoDB.service.d.ts +2 -3
  547. package/lib/offline/shared/geo-network.service.d.ts +1 -1
  548. package/lib/overlay/overlay.module.d.ts +4 -1
  549. package/lib/overlay/shared/overlay.directive.d.ts +1 -1
  550. package/lib/print/print/print.component.d.ts +1 -1
  551. package/lib/print/print-form/print-form.component.d.ts +5 -2
  552. package/lib/print/print.module.d.ts +4 -12
  553. package/lib/print/shared/print.interface.d.ts +1 -0
  554. package/lib/print/shared/print.service.d.ts +31 -18
  555. package/lib/query/query.module.d.ts +4 -4
  556. package/lib/query/shared/index.d.ts +1 -0
  557. package/lib/query/shared/query-search-source.providers.d.ts +1 -1
  558. package/lib/query/shared/query.directive.d.ts +1 -1
  559. package/lib/query/shared/query.interfaces.d.ts +1 -2
  560. package/lib/query/shared/query.service.d.ts +2 -3
  561. package/lib/search/index.d.ts +2 -4
  562. package/lib/search/search-bar/search-bar.component.d.ts +4 -3
  563. package/lib/search/search-bar/search-bar.module.d.ts +2 -16
  564. package/lib/search/search-results/index.d.ts +4 -0
  565. package/lib/search/search-results/save-feature-dialog.component.d.ts +2 -2
  566. package/lib/search/search-results/search-results-add-button.component.d.ts +4 -4
  567. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  568. package/lib/search/search-results/search-results.component.d.ts +3 -3
  569. package/lib/search/search-results/search-results.directive.d.ts +3 -0
  570. package/lib/search/search-results/search-results.module.d.ts +3 -21
  571. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  572. package/lib/search/search-selector/search-selector.module.d.ts +2 -11
  573. package/lib/search/search-settings/search-settings.component.d.ts +3 -2
  574. package/lib/search/search-settings/search-settings.module.d.ts +2 -12
  575. package/lib/search/search.module.d.ts +14 -7
  576. package/lib/search/shared/index.d.ts +1 -0
  577. package/lib/search/shared/search-pointer-summary.directive.d.ts +2 -2
  578. package/lib/search/shared/search-source.service.d.ts +1 -1
  579. package/lib/search/shared/search.interfaces.d.ts +12 -10
  580. package/lib/search/shared/search.provider.d.ts +8 -0
  581. package/lib/search/shared/search.service.d.ts +8 -3
  582. package/lib/search/shared/sources/cadastre.d.ts +2 -1
  583. package/lib/search/shared/sources/cadastre.providers.d.ts +6 -2
  584. package/lib/search/shared/sources/coordinates.d.ts +2 -1
  585. package/lib/search/shared/sources/coordinates.providers.d.ts +6 -2
  586. package/lib/search/shared/sources/icherche-icons.d.ts +7 -0
  587. package/lib/search/shared/sources/icherche.d.ts +2 -1
  588. package/lib/search/shared/sources/icherche.providers.d.ts +10 -14
  589. package/lib/search/shared/sources/ilayer.d.ts +2 -1
  590. package/lib/search/shared/sources/ilayer.providers.d.ts +6 -2
  591. package/lib/search/shared/sources/nominatim.d.ts +1 -1
  592. package/lib/search/shared/sources/nominatim.providers.d.ts +5 -2
  593. package/lib/search/shared/sources/source.d.ts +2 -2
  594. package/lib/search/shared/sources/source.interfaces.d.ts +16 -0
  595. package/lib/search/shared/sources/storedqueries.d.ts +2 -1
  596. package/lib/search/shared/sources/storedqueries.providers.d.ts +8 -3
  597. package/lib/search/shared/sources/workspace.d.ts +2 -1
  598. package/lib/search/shared/sources/workspace.providers.d.ts +6 -2
  599. package/lib/style/shared/vector/conversion.utils.d.ts +2 -3
  600. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +1 -1
  601. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +1 -1
  602. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +1 -1
  603. package/lib/style/style.module.d.ts +5 -16
  604. package/lib/toast/toast.component.d.ts +2 -2
  605. package/lib/toast/toast.module.d.ts +4 -6
  606. package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +1 -1
  607. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  608. package/lib/wkt/wkt.module.d.ts +3 -0
  609. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +2 -2
  610. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +2 -6
  611. package/lib/workspace/shared/edition-workspace.d.ts +2 -2
  612. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
  613. package/lib/workspace/shared/feature-workspace.d.ts +1 -1
  614. package/lib/workspace/shared/feature-workspace.service.d.ts +2 -1
  615. package/lib/workspace/shared/wfs-workspace.d.ts +1 -1
  616. package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -1
  617. package/lib/workspace/shared/wms-workspace.service.d.ts +2 -1
  618. package/lib/workspace/shared/workspace.utils.d.ts +2 -1
  619. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +3 -2
  620. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +2 -6
  621. package/lib/workspace/widgets/widgets.d.ts +1 -1
  622. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +2 -2
  623. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +2 -3
  624. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +2 -2
  625. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +2 -3
  626. package/lib/workspace/workspace.module.d.ts +5 -9
  627. package/locale/en.geo.json +824 -818
  628. package/locale/fr.geo.json +825 -819
  629. package/package.json +14 -12
  630. package/public_api.d.ts +10 -11
  631. package/src/_index.scss +2 -2
  632. package/src/geo-theme.scss +23 -23
  633. package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -22
  634. package/src/lib/catalog/catalog.theming.scss +5 -5
  635. package/src/lib/directions/directions-results/directions-results.theming.scss +10 -10
  636. package/src/lib/directions/directions.theming.scss +6 -6
  637. package/src/lib/draw/draw.theming.scss +32 -32
  638. package/src/lib/feature/feature-details/feature-details.theming.scss +16 -16
  639. package/src/lib/feature/feature.theming.scss +4 -4
  640. package/src/lib/filter/filter.theming.scss +13 -13
  641. package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
  642. package/src/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
  643. package/src/lib/layer/layer-item/layer-item.theme.scss +33 -33
  644. package/src/lib/layer/layer-legend/layer-legend.theming.scss +10 -10
  645. package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +34 -34
  646. package/src/lib/layer/layer.theming.scss +10 -10
  647. package/src/lib/map/map-browser/map-browser.theming.scss +46 -46
  648. package/src/lib/map/map.theming.scss +9 -9
  649. package/src/lib/map/menu-button/menu-button.theming.scss +20 -20
  650. package/src/lib/map/zoom-button/zoom-button.theming.scss +32 -32
  651. package/src/lib/measure/measure.theming.scss +5 -5
  652. package/src/lib/measure/measurer/measurer.theming.scss +26 -26
  653. package/src/lib/search/search-bar/search-bar.theming.scss +33 -33
  654. package/src/lib/search/search-results/search-results-item.theme.scss +20 -20
  655. package/src/lib/search/search.theming.scss +7 -7
  656. package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  657. package/src/lib/workspace/workspace.theming.scss +6 -6
  658. package/src/style/style.scss +1 -1
  659. package/style/style.css +2 -1
  660. package/esm2022/lib/datasource/datasource.module.mjs +0 -22
  661. package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +0 -40
  662. package/lib/datasource/datasource.module.d.ts +0 -8
  663. package/lib/search/search-bar/search-url-param.directive.d.ts +0 -13
@@ -1,23 +1,33 @@
1
+ import { NgFor, NgIf } from '@angular/common';
1
2
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { DateAdapter } from '@angular/material/core';
3
- import { MatSlider } from '@angular/material/slider';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { DateAdapter, MatNativeDateModule, MatOptionModule } from '@angular/material/core';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { MatInputModule } from '@angular/material/input';
9
+ import { MatSelectModule } from '@angular/material/select';
10
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
11
+ import { MatSlider, MatSliderModule } from '@angular/material/slider';
12
+ import { MatTooltipModule } from '@angular/material/tooltip';
13
+ import { IgoLanguageModule } from '@igo2/core/language';
14
+ import { MatDatetimepickerModule } from '@mat-datetimepicker/core';
4
15
  import { default as moment } from 'moment';
5
16
  import { Layer } from '../../layer/shared/layers/layer';
6
17
  import { TimeFilterStyle, TimeFilterType } from '../shared/time-filter.enum';
7
18
  import * as i0 from "@angular/core";
8
19
  import * as i1 from "@angular/material/core";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@angular/forms";
11
- import * as i4 from "@angular/material/icon";
12
- import * as i5 from "@angular/material/button";
13
- import * as i6 from "@angular/material/slider";
14
- import * as i7 from "@angular/material/slide-toggle";
15
- import * as i8 from "@angular/material/form-field";
16
- import * as i9 from "@angular/material/input";
17
- import * as i10 from "@angular/material/select";
18
- import * as i11 from "@angular/material/tooltip";
19
- import * as i12 from "@mat-datetimepicker/core";
20
- import * as i13 from "@ngx-translate/core";
20
+ import * as i2 from "@angular/material/form-field";
21
+ import * as i3 from "@mat-datetimepicker/core";
22
+ import * as i4 from "@angular/material/input";
23
+ import * as i5 from "@angular/forms";
24
+ import * as i6 from "@angular/material/select";
25
+ import * as i7 from "@angular/material/slider";
26
+ import * as i8 from "@angular/material/slide-toggle";
27
+ import * as i9 from "@angular/material/tooltip";
28
+ import * as i10 from "@angular/material/button";
29
+ import * as i11 from "@angular/material/icon";
30
+ import * as i12 from "@ngx-translate/core";
21
31
  export class TimeFilterFormComponent {
22
32
  dateAdapter;
23
33
  layer;
@@ -52,7 +62,7 @@ export class TimeFilterFormComponent {
52
62
  }
53
63
  }
54
64
  interval;
55
- playIcon = 'play-circle';
65
+ playIcon = 'play_circle';
56
66
  resetIcon = 'replay';
57
67
  change = new EventEmitter();
58
68
  yearChange = new EventEmitter();
@@ -305,7 +315,7 @@ export class TimeFilterFormComponent {
305
315
  this.stopFilter();
306
316
  }
307
317
  else {
308
- this.playIcon = 'pause-circle';
318
+ this.playIcon = 'pause_circle';
309
319
  this.interval = setInterval((that) => {
310
320
  let newMinDateNumber;
311
321
  const maxDateNumber = new Date(that.max);
@@ -330,7 +340,7 @@ export class TimeFilterFormComponent {
330
340
  this.stopFilter();
331
341
  }
332
342
  else {
333
- this.playIcon = 'pause-circle';
343
+ this.playIcon = 'pause_circle';
334
344
  this.interval = setInterval(() => {
335
345
  if (this.year + this.mySlider.step > this.max.getFullYear()) {
336
346
  this.stopFilter();
@@ -347,7 +357,7 @@ export class TimeFilterFormComponent {
347
357
  clearInterval(this.interval);
348
358
  }
349
359
  this.interval = undefined;
350
- this.playIcon = 'play-circle';
360
+ this.playIcon = 'play_circle';
351
361
  }
352
362
  handleSliderDateChange(event) {
353
363
  this.date = new Date(event.value);
@@ -484,13 +494,30 @@ export class TimeFilterFormComponent {
484
494
  getStepDefinition(step) {
485
495
  return moment.duration(step).asMilliseconds();
486
496
  }
487
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TimeFilterFormComponent, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Component });
488
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TimeFilterFormComponent, selector: "igo-time-filter-form", inputs: { layer: "layer", options: "options", currentValue: "currentValue" }, outputs: { change: "change", yearChange: "yearChange" }, viewQueries: [{ propertyName: "mySlider", first: true, predicate: MatSlider, descendants: true }], ngImport: i0, template: "<div *ngIf=\"style === 'calendar' && type !== 'year'\">\r\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\r\n <mat-form-field>\r\n <mat-datetimepicker-toggle\r\n class=\"time-filter-mat-datetimepicker-toggle\"\r\n [for]=\"datetimePicker\"\r\n matSuffix\r\n ></mat-datetimepicker-toggle>\r\n <mat-datetimepicker\r\n #datetimePicker\r\n type=\"{{ type }}\"\r\n openOnFocus=\"true\"\r\n timeInterval=\"5\"\r\n ></mat-datetimepicker>\r\n <input\r\n matInput\r\n autocomplete=\"false\"\r\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\r\n [matDatetimepicker]=\"datetimePicker\"\r\n [(ngModel)]=\"date\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n readonly=\"readonly\"\r\n (dateChange)=\"handleDateChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"isRange\">\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-datetimepicker-toggle\r\n class=\"time-filter-mat-datetimepicker-toggle\"\r\n [for]=\"minDatetimePicker\"\r\n matSuffix\r\n ></mat-datetimepicker-toggle>\r\n <mat-datetimepicker\r\n #minDatetimePicker\r\n type=\"{{ type }}\"\r\n openOnFocus=\"true\"\r\n timeInterval=\"5\"\r\n ></mat-datetimepicker>\r\n <input\r\n matInput\r\n autocomplete=\"false\"\r\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\r\n [matDatetimepicker]=\"minDatetimePicker\"\r\n [(ngModel)]=\"startDate\"\r\n [min]=\"min\"\r\n [max]=\"getRangeMaxDate()\"\r\n readonly=\"readonly\"\r\n (input)=\"(startDate)\"\r\n (dateChange)=\"handleDateChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-datetimepicker-toggle\r\n class=\"time-filter-mat-datetimepicker-toggle\"\r\n [for]=\"maxDatetimePicker\"\r\n matSuffix\r\n ></mat-datetimepicker-toggle>\r\n <mat-datetimepicker\r\n #maxDatetimePicker\r\n type=\"{{ type }}\"\r\n openOnFocus=\"true\"\r\n timeInterval=\"5\"\r\n ></mat-datetimepicker>\r\n <input\r\n matInput\r\n autocomplete=\"false\"\r\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\r\n [matDatetimepicker]=\"maxDatetimePicker\"\r\n [(ngModel)]=\"endDate\"\r\n [min]=\"getRangeMinDate()\"\r\n [max]=\"max\"\r\n readonly=\"readonly\"\r\n (dateChange)=\"handleDateChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"style === 'calendar' && type === 'year'\">\r\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\r\n <mat-form-field>\r\n <mat-select\r\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\r\n [(ngModel)]=\"year\"\r\n (selectionChange)=\"handleYearChange($event)\"\r\n >\r\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{\r\n year\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"isRange\">\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-select\r\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\r\n [(ngModel)]=\"startYear\"\r\n (selectionChange)=\"handleYearChange($event)\"\r\n >\r\n <mat-option\r\n [value]=\"startYear\"\r\n *ngFor=\"let startYear of startListYears\"\r\n >{{ startYear }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-select\r\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\r\n [(ngModel)]=\"endYear\"\r\n (selectionChange)=\"handleYearChange($event)\"\r\n >\r\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{\r\n endYear\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<br />\r\n<div\r\n *ngIf=\"!isRange && style === 'slider' && type === 'year'\"\r\n class=\"igo-col igo-col-100 igo-col-100-m mat-typography\"\r\n>\r\n <span>{{ startYear }}</span>\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n id=\"time-slider\"\r\n step=\"{{ step }}\"\r\n [min]=\"startYear\"\r\n [max]=\"endYear\"\r\n [color]=\"color\"\r\n thumbLabel\r\n [disabled]=\"!options.enabled || !layer.visible\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"handleSliderValue()\"\r\n (input)=\"\r\n handleSliderYearChange({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n (change)=\"\r\n handleSliderYearChange({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n />\r\n </mat-slider>\r\n <span>{{ endYear }}</span>\r\n <p *ngIf=\"options.enabled\" class=\"date-below\">{{ year }}</p>\r\n <div #actions class=\"igo-layer-actions-container\">\r\n <mat-slide-toggle\r\n (change)=\"toggleFilterState()\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\r\n [color]=\"color\"\r\n [checked]=\"options.enabled\"\r\n [disabled]=\"!layer.visible\"\r\n >\r\n </mat-slide-toggle>\r\n <button\r\n [disabled]=\"!options.enabled || !layer.visible\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"playYear($event)\"\r\n >\r\n <mat-icon svgIcon=\"{{ playIcon }}\"></mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"!options.enabled || !layer.visible\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"resetFilter($event)\"\r\n >\r\n <mat-icon svgIcon=\"{{ resetIcon }}\"></mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div\r\n *ngIf=\"style === 'slider' && type !== 'year'\"\r\n class=\"igo-col igo-col-100 igo-col-100-m\"\r\n>\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n id=\"time-slider\"\r\n step=\"{{ step }}\"\r\n [min]=\"dateToNumber(min)\"\r\n [max]=\"dateToNumber(max)\"\r\n thumbLabel\r\n (selectionChange)=\"handleSliderDateChange($event)\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"handleSliderValue()\"\r\n (input)=\"\r\n handleSliderDateChange({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n />\r\n </mat-slider>\r\n <p class=\"date-below\">{{ handleSliderTooltip() }}</p>\r\n <button mat-icon-button color=\"primary\" (click)=\"playFilter($event)\">\r\n <mat-icon svgIcon=\"{{ playIcon }}\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [":host .igo-layer-filters-container{padding-left:5px}:host #time-slider{width:70%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host #time-slider{width:60%}}:host .date-below{margin:0}:host .igo-layer-actions-container{display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i6.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i9.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: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i12.MatDatetimepickerComponent, selector: "mat-datetimepicker", inputs: ["multiYearSelector", "twelvehour", "startView", "mode", "timeInterval", "ariaNextMonthLabel", "ariaPrevMonthLabel", "ariaNextYearLabel", "ariaPrevYearLabel", "preventSameDateTimeSelection", "panelClass", "startAt", "openOnFocus", "type", "touchUi", "disabled"], outputs: ["selectedChanged", "opened", "closed", "viewChanged"], exportAs: ["matDatetimepicker"] }, { kind: "component", type: i12.MatDatetimepickerToggleComponent, selector: "mat-datetimepicker-toggle", inputs: ["for", "disabled"], exportAs: ["matDatetimepickerToggle"] }, { kind: "directive", type: i12.MatDatetimepickerInputDirective, selector: "input[matDatetimepicker]", inputs: ["matDatetimepicker", "matDatepickerFilter", "value", "min", "max", "disabled"], outputs: ["dateChange", "dateInput"], exportAs: ["matDatepickerInput"] }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }] });
497
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TimeFilterFormComponent, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Component });
498
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: TimeFilterFormComponent, isStandalone: true, selector: "igo-time-filter-form", inputs: { layer: "layer", options: "options", currentValue: "currentValue" }, outputs: { change: "change", yearChange: "yearChange" }, viewQueries: [{ propertyName: "mySlider", first: true, predicate: MatSlider, descendants: true }], ngImport: i0, template: "<div *ngIf=\"style === 'calendar' && type !== 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"datetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #datetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [matDatetimepicker]=\"datetimePicker\"\n [(ngModel)]=\"date\"\n [min]=\"min\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\"\n />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"minDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #minDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [matDatetimepicker]=\"minDatetimePicker\"\n [(ngModel)]=\"startDate\"\n [min]=\"min\"\n [max]=\"getRangeMaxDate()\"\n readonly=\"readonly\"\n (input)=\"(startDate)\"\n (dateChange)=\"handleDateChange($event)\"\n />\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"maxDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #maxDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [matDatetimepicker]=\"maxDatetimePicker\"\n [(ngModel)]=\"endDate\"\n [min]=\"getRangeMinDate()\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"style === 'calendar' && type === 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [(ngModel)]=\"year\"\n (selectionChange)=\"handleYearChange($event)\"\n >\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{\n year\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [(ngModel)]=\"startYear\"\n (selectionChange)=\"handleYearChange($event)\"\n >\n <mat-option\n [value]=\"startYear\"\n *ngFor=\"let startYear of startListYears\"\n >{{ startYear }}</mat-option\n >\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [(ngModel)]=\"endYear\"\n (selectionChange)=\"handleYearChange($event)\"\n >\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{\n endYear\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<br />\n<div\n *ngIf=\"!isRange && style === 'slider' && type === 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m mat-typography\"\n>\n <span>{{ startYear }}</span>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"startYear\"\n [max]=\"endYear\"\n [color]=\"color\"\n thumbLabel\n [disabled]=\"!options.enabled || !layer.visible\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n (change)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n />\n </mat-slider>\n <span>{{ endYear }}</span>\n <p *ngIf=\"options.enabled\" class=\"date-below\">{{ year }}</p>\n <div #actions class=\"igo-layer-actions-container\">\n <mat-slide-toggle\n (change)=\"toggleFilterState()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n [color]=\"color\"\n [checked]=\"options.enabled\"\n [disabled]=\"!layer.visible\"\n >\n </mat-slide-toggle>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"playYear($event)\"\n >\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter($event)\"\n >\n <mat-icon>{{ resetIcon }}</mat-icon>\n </button>\n </div>\n</div>\n\n<div\n *ngIf=\"style === 'slider' && type !== 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m\"\n>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"dateToNumber(min)\"\n [max]=\"dateToNumber(max)\"\n thumbLabel\n (selectionChange)=\"handleSliderDateChange($event)\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderDateChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n <p class=\"date-below\">{{ handleSliderTooltip() }}</p>\n <button mat-icon-button color=\"primary\" (click)=\"playFilter($event)\">\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n</div>\n", styles: [":host .igo-layer-filters-container{padding-left:5px}:host #time-slider{width:70%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host #time-slider{width:60%}}:host .date-below{margin:0}:host .igo-layer-actions-container{display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatetimepickerModule }, { kind: "component", type: i3.MatDatetimepickerComponent, selector: "mat-datetimepicker", inputs: ["multiYearSelector", "twelvehour", "startView", "mode", "timeInterval", "ariaNextMonthLabel", "ariaPrevMonthLabel", "ariaNextYearLabel", "ariaPrevYearLabel", "preventSameDateTimeSelection", "panelClass", "startAt", "openOnFocus", "type", "touchUi", "disabled"], outputs: ["selectedChanged", "opened", "closed", "viewChanged"], exportAs: ["matDatetimepicker"] }, { kind: "component", type: i3.MatDatetimepickerToggleComponent, selector: "mat-datetimepicker-toggle", inputs: ["for", "disabled"], exportAs: ["matDatetimepickerToggle"] }, { kind: "directive", type: i3.MatDatetimepickerInputDirective, selector: "input[matDatetimepicker]", inputs: ["matDatetimepicker", "matDatepickerFilter", "value", "min", "max", "disabled"], outputs: ["dateChange", "dateInput"], exportAs: ["matDatepickerInput"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: // For the DateAdapter provider
499
+ MatInputModule }, { kind: "directive", type: i4.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: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i7.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i7.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i8.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] });
489
500
  }
490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TimeFilterFormComponent, decorators: [{
501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: TimeFilterFormComponent, decorators: [{
491
502
  type: Component,
492
- args: [{ selector: 'igo-time-filter-form', template: "<div *ngIf=\"style === 'calendar' && type !== 'year'\">\r\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\r\n <mat-form-field>\r\n <mat-datetimepicker-toggle\r\n class=\"time-filter-mat-datetimepicker-toggle\"\r\n [for]=\"datetimePicker\"\r\n matSuffix\r\n ></mat-datetimepicker-toggle>\r\n <mat-datetimepicker\r\n #datetimePicker\r\n type=\"{{ type }}\"\r\n openOnFocus=\"true\"\r\n timeInterval=\"5\"\r\n ></mat-datetimepicker>\r\n <input\r\n matInput\r\n autocomplete=\"false\"\r\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\r\n [matDatetimepicker]=\"datetimePicker\"\r\n [(ngModel)]=\"date\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n readonly=\"readonly\"\r\n (dateChange)=\"handleDateChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"isRange\">\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-datetimepicker-toggle\r\n class=\"time-filter-mat-datetimepicker-toggle\"\r\n [for]=\"minDatetimePicker\"\r\n matSuffix\r\n ></mat-datetimepicker-toggle>\r\n <mat-datetimepicker\r\n #minDatetimePicker\r\n type=\"{{ type }}\"\r\n openOnFocus=\"true\"\r\n timeInterval=\"5\"\r\n ></mat-datetimepicker>\r\n <input\r\n matInput\r\n autocomplete=\"false\"\r\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\r\n [matDatetimepicker]=\"minDatetimePicker\"\r\n [(ngModel)]=\"startDate\"\r\n [min]=\"min\"\r\n [max]=\"getRangeMaxDate()\"\r\n readonly=\"readonly\"\r\n (input)=\"(startDate)\"\r\n (dateChange)=\"handleDateChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-datetimepicker-toggle\r\n class=\"time-filter-mat-datetimepicker-toggle\"\r\n [for]=\"maxDatetimePicker\"\r\n matSuffix\r\n ></mat-datetimepicker-toggle>\r\n <mat-datetimepicker\r\n #maxDatetimePicker\r\n type=\"{{ type }}\"\r\n openOnFocus=\"true\"\r\n timeInterval=\"5\"\r\n ></mat-datetimepicker>\r\n <input\r\n matInput\r\n autocomplete=\"false\"\r\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\r\n [matDatetimepicker]=\"maxDatetimePicker\"\r\n [(ngModel)]=\"endDate\"\r\n [min]=\"getRangeMinDate()\"\r\n [max]=\"max\"\r\n readonly=\"readonly\"\r\n (dateChange)=\"handleDateChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"style === 'calendar' && type === 'year'\">\r\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\r\n <mat-form-field>\r\n <mat-select\r\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\r\n [(ngModel)]=\"year\"\r\n (selectionChange)=\"handleYearChange($event)\"\r\n >\r\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{\r\n year\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngIf=\"isRange\">\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-select\r\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\r\n [(ngModel)]=\"startYear\"\r\n (selectionChange)=\"handleYearChange($event)\"\r\n >\r\n <mat-option\r\n [value]=\"startYear\"\r\n *ngFor=\"let startYear of startListYears\"\r\n >{{ startYear }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-col igo-col-100\">\r\n <mat-form-field>\r\n <mat-select\r\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\r\n [(ngModel)]=\"endYear\"\r\n (selectionChange)=\"handleYearChange($event)\"\r\n >\r\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{\r\n endYear\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<br />\r\n<div\r\n *ngIf=\"!isRange && style === 'slider' && type === 'year'\"\r\n class=\"igo-col igo-col-100 igo-col-100-m mat-typography\"\r\n>\r\n <span>{{ startYear }}</span>\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n id=\"time-slider\"\r\n step=\"{{ step }}\"\r\n [min]=\"startYear\"\r\n [max]=\"endYear\"\r\n [color]=\"color\"\r\n thumbLabel\r\n [disabled]=\"!options.enabled || !layer.visible\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"handleSliderValue()\"\r\n (input)=\"\r\n handleSliderYearChange({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n (change)=\"\r\n handleSliderYearChange({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n />\r\n </mat-slider>\r\n <span>{{ endYear }}</span>\r\n <p *ngIf=\"options.enabled\" class=\"date-below\">{{ year }}</p>\r\n <div #actions class=\"igo-layer-actions-container\">\r\n <mat-slide-toggle\r\n (change)=\"toggleFilterState()\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\r\n [color]=\"color\"\r\n [checked]=\"options.enabled\"\r\n [disabled]=\"!layer.visible\"\r\n >\r\n </mat-slide-toggle>\r\n <button\r\n [disabled]=\"!options.enabled || !layer.visible\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"playYear($event)\"\r\n >\r\n <mat-icon svgIcon=\"{{ playIcon }}\"></mat-icon>\r\n </button>\r\n <button\r\n [disabled]=\"!options.enabled || !layer.visible\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"resetFilter($event)\"\r\n >\r\n <mat-icon svgIcon=\"{{ resetIcon }}\"></mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div\r\n *ngIf=\"style === 'slider' && type !== 'year'\"\r\n class=\"igo-col igo-col-100 igo-col-100-m\"\r\n>\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n id=\"time-slider\"\r\n step=\"{{ step }}\"\r\n [min]=\"dateToNumber(min)\"\r\n [max]=\"dateToNumber(max)\"\r\n thumbLabel\r\n (selectionChange)=\"handleSliderDateChange($event)\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"handleSliderValue()\"\r\n (input)=\"\r\n handleSliderDateChange({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n />\r\n </mat-slider>\r\n <p class=\"date-below\">{{ handleSliderTooltip() }}</p>\r\n <button mat-icon-button color=\"primary\" (click)=\"playFilter($event)\">\r\n <mat-icon svgIcon=\"{{ playIcon }}\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [":host .igo-layer-filters-container{padding-left:5px}:host #time-slider{width:70%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host #time-slider{width:60%}}:host .date-below{margin:0}:host .igo-layer-actions-container{display:flex;align-items:center;justify-content:center}\n"] }]
493
- }], ctorParameters: function () { return [{ type: i1.DateAdapter }]; }, propDecorators: { layer: [{
503
+ args: [{ selector: 'igo-time-filter-form', standalone: true, imports: [
504
+ NgIf,
505
+ MatFormFieldModule,
506
+ MatDatetimepickerModule,
507
+ MatNativeDateModule, // For the DateAdapter provider
508
+ MatInputModule,
509
+ FormsModule,
510
+ MatSelectModule,
511
+ NgFor,
512
+ MatOptionModule,
513
+ MatSliderModule,
514
+ MatSlideToggleModule,
515
+ MatTooltipModule,
516
+ MatButtonModule,
517
+ MatIconModule,
518
+ IgoLanguageModule
519
+ ], template: "<div *ngIf=\"style === 'calendar' && type !== 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"datetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #datetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [matDatetimepicker]=\"datetimePicker\"\n [(ngModel)]=\"date\"\n [min]=\"min\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\"\n />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"minDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #minDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [matDatetimepicker]=\"minDatetimePicker\"\n [(ngModel)]=\"startDate\"\n [min]=\"min\"\n [max]=\"getRangeMaxDate()\"\n readonly=\"readonly\"\n (input)=\"(startDate)\"\n (dateChange)=\"handleDateChange($event)\"\n />\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"maxDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #maxDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [matDatetimepicker]=\"maxDatetimePicker\"\n [(ngModel)]=\"endDate\"\n [min]=\"getRangeMinDate()\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"style === 'calendar' && type === 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [(ngModel)]=\"year\"\n (selectionChange)=\"handleYearChange($event)\"\n >\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{\n year\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [(ngModel)]=\"startYear\"\n (selectionChange)=\"handleYearChange($event)\"\n >\n <mat-option\n [value]=\"startYear\"\n *ngFor=\"let startYear of startListYears\"\n >{{ startYear }}</mat-option\n >\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [(ngModel)]=\"endYear\"\n (selectionChange)=\"handleYearChange($event)\"\n >\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{\n endYear\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<br />\n<div\n *ngIf=\"!isRange && style === 'slider' && type === 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m mat-typography\"\n>\n <span>{{ startYear }}</span>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"startYear\"\n [max]=\"endYear\"\n [color]=\"color\"\n thumbLabel\n [disabled]=\"!options.enabled || !layer.visible\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n (change)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n />\n </mat-slider>\n <span>{{ endYear }}</span>\n <p *ngIf=\"options.enabled\" class=\"date-below\">{{ year }}</p>\n <div #actions class=\"igo-layer-actions-container\">\n <mat-slide-toggle\n (change)=\"toggleFilterState()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n [color]=\"color\"\n [checked]=\"options.enabled\"\n [disabled]=\"!layer.visible\"\n >\n </mat-slide-toggle>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"playYear($event)\"\n >\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter($event)\"\n >\n <mat-icon>{{ resetIcon }}</mat-icon>\n </button>\n </div>\n</div>\n\n<div\n *ngIf=\"style === 'slider' && type !== 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m\"\n>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"dateToNumber(min)\"\n [max]=\"dateToNumber(max)\"\n thumbLabel\n (selectionChange)=\"handleSliderDateChange($event)\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderDateChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n <p class=\"date-below\">{{ handleSliderTooltip() }}</p>\n <button mat-icon-button color=\"primary\" (click)=\"playFilter($event)\">\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n</div>\n", styles: [":host .igo-layer-filters-container{padding-left:5px}:host #time-slider{width:70%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host #time-slider{width:60%}}:host .date-below{margin:0}:host .igo-layer-actions-container{display:flex;align-items:center;justify-content:center}\n"] }]
520
+ }], ctorParameters: () => [{ type: i1.DateAdapter }], propDecorators: { layer: [{
494
521
  type: Input
495
522
  }], options: [{
496
523
  type: Input
@@ -504,4 +531,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
504
531
  type: ViewChild,
505
532
  args: [MatSlider]
506
533
  }] } });
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1maWx0ZXItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvdGltZS1maWx0ZXItZm9ybS90aW1lLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci90aW1lLWZpbHRlci1mb3JtL3RpbWUtZmlsdGVyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUlyRCxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUTdFLE1BQU0sT0FBTyx1QkFBdUI7SUFxSGQ7SUFwSFgsS0FBSyxDQUFRO0lBRWIsT0FBTyxDQUFvQjtJQUU3QixLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQ2xCLElBQUksQ0FBTztJQUNYLFNBQVMsQ0FBTztJQUNoQixPQUFPLENBQU87SUFDZCxJQUFJLENBQU07SUFDVixTQUFTLENBQU07SUFDZixPQUFPLENBQU07SUFDYixhQUFhLENBQU07SUFDbkIsV0FBVyxDQUFNO0lBQ2pCLFNBQVMsR0FBa0IsRUFBRSxDQUFDO0lBQzlCLGNBQWMsR0FBa0IsRUFBRSxDQUFDO0lBQ25DLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBRXhDLElBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDckMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO3dCQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztxQkFDNUI7b0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTt3QkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7cUJBQ3hCO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTSxRQUFRLENBQU07SUFDZCxRQUFRLEdBQUcsYUFBYSxDQUFDO0lBQ3pCLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFFbEIsTUFBTSxHQUFzQyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXpFLFVBQVUsR0FBNEMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuRCxRQUFRLENBQUM7SUFFL0IsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTO1lBQ3BDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSTtZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUztZQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsTUFBTTtZQUM3QyxDQUFDLENBQUMsS0FBSztZQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ3JDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNuQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pCLEtBQUssY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDekIsS0FBSyxjQUFjLENBQUMsUUFBUTtvQkFDMUIsSUFBSSxHQUFHLFFBQVEsQ0FBQztvQkFDaEIsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxJQUFJO29CQUN0QixJQUFJLEdBQUcsT0FBTyxDQUFDO29CQUNmLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsSUFBSTtvQkFDdEIsSUFBSSxHQUFHLFdBQVcsQ0FBQztvQkFDbkIsTUFBTTtnQkFDUjtvQkFDRSxJQUFJLEdBQUcsUUFBUSxDQUFDO2FBQ25CO1NBQ0Y7YUFBTTtZQUNMLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUztZQUM1QyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ2xFO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDbEU7YUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELElBQUksRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxZQUFvQixXQUE4QjtRQUE5QixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDakM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNGO2FBQU07WUFDTCxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0I7U0FDRjtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsc0RBQXNEO1NBQ3hGO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixzREFBc0Q7UUFDdEQsSUFDRSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2IsSUFBSSxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsTUFBTTtZQUNyQyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQ2pDO1lBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFzQixDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDOUMsSUFDRSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2IsSUFBSSxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsTUFBTTtZQUNyQyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQ2pDO1lBQ0EsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDaEU7aUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN2RTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDbEQ7U0FDRjthQUFNLElBQ0wsSUFBSSxDQUFDLE9BQU87WUFDWixJQUFJLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxRQUFRO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLElBQUksRUFDakM7WUFDQSxJQUFJLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RELE1BQU0saUJBQWlCLEdBQVUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLGVBQWUsR0FBVSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdEQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQjtnQkFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMzRCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjtnQkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDO2dCQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQzthQUNyQztTQUNGO1FBQ0Qsc0RBQXNEO0lBQ3hELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDbEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzQjtZQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBVTtRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFVO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjthQUFNO1lBQ0wsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QjtRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhO1FBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQ25ELENBQUM7UUFDRixJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFXO1FBQ3hCLElBQUksVUFBVSxDQUFDO1FBRWYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JCLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyw2QkFBNkIsRUFBRTtnQkFDckQsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUNwQjtZQUVELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUM1QyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDcEQ7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUU3QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ3hCLElBQ0UsQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFDYixlQUFlLENBQUMsTUFBTTtnQkFDdEIsSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsSUFBSSxFQUNqQztnQkFDQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakM7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsc0RBQXNEO1NBQ3BGO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUNFLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDYixlQUFlLENBQUMsTUFBTTtZQUN0QixJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQ2pDO1lBQ0EsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7U0FDcEY7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQ3pCLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ1AsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDckIsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUV6QyxnQkFBZ0I7b0JBQ2QsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3JFLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRXZDLElBQUksZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUM5QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQ25CO2dCQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDLEVBQ0QsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUNMLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUNFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQzNDO1lBQ0EsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FDekIsR0FBRyxFQUFFO2dCQUNILElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUMzRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQ25CO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztpQkFDNUM7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLENBQUMsRUFDRCxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQ0wsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDOUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDbEI7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDM0U7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksS0FBYSxDQUFDO1FBRWxCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLGNBQWMsQ0FBQyxJQUFJO2dCQUN0QixLQUFLO29CQUNILElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUzt3QkFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFO3dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLEtBQUssY0FBYyxDQUFDLElBQUk7Z0JBQ3RCLEtBQUs7b0JBQ0gsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO3dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUU7d0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsV0FBVztZQUNYO2dCQUNFLEtBQUs7b0JBQ0gsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO3dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7d0JBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QixNQUFNO1NBQ1Q7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsU0FBUztnQkFDWixJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxPQUFPO2dCQUNWLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDbEU7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUztnQkFDWixJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxPQUFPO2dCQUNWLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLGNBQWMsQ0FBQyxJQUFJO2dCQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO29CQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM3QjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxRQUFRLEVBQUU7b0JBQzNDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7d0JBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztxQkFDM0M7b0JBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQzdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FCQUN6QztpQkFDRjtnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO29CQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDN0I7Z0JBQ0QsTUFBTTtZQUNSLFdBQVc7WUFDWCxRQUFRO1lBQ1IsYUFBYTtTQUNkO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxJQUFJO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNoRCxDQUFDO3dHQXhnQlUsdUJBQXVCOzRGQUF2Qix1QkFBdUIsNk9BNEN2QixTQUFTLGdEQ3BFdEIsaTNPQXlPQTs7NEZEak5hLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7a0dBS3ZCLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBZ0JGLFlBQVk7c0JBRGYsS0FBSztnQkF1QkksTUFBTTtzQkFBZixNQUFNO2dCQUVQLFVBQVU7c0JBRFQsTUFBTTtnQkFFZSxRQUFRO3NCQUE3QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0U2xpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcclxuXHJcbmltcG9ydCBvbFNvdXJjZUltYWdlV01TIGZyb20gJ29sL3NvdXJjZS9JbWFnZVdNUyc7XHJcblxyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIG1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGF5ZXInO1xyXG5pbXBvcnQgeyBUaW1lRmlsdGVyU3R5bGUsIFRpbWVGaWx0ZXJUeXBlIH0gZnJvbSAnLi4vc2hhcmVkL3RpbWUtZmlsdGVyLmVudW0nO1xyXG5pbXBvcnQgeyBUaW1lRmlsdGVyT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC90aW1lLWZpbHRlci5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tdGltZS1maWx0ZXItZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtZmlsdGVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RpbWUtZmlsdGVyLWZvcm0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGltZUZpbHRlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGxheWVyOiBMYXllcjtcclxuXHJcbiAgQElucHV0KCkgb3B0aW9uczogVGltZUZpbHRlck9wdGlvbnM7XHJcblxyXG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcclxuICBwdWJsaWMgZGF0ZTogRGF0ZTtcclxuICBwdWJsaWMgc3RhcnREYXRlOiBEYXRlO1xyXG4gIHB1YmxpYyBlbmREYXRlOiBEYXRlO1xyXG4gIHB1YmxpYyB5ZWFyOiBhbnk7XHJcbiAgcHVibGljIHN0YXJ0WWVhcjogYW55O1xyXG4gIHB1YmxpYyBlbmRZZWFyOiBhbnk7XHJcbiAgcHVibGljIGluaXRTdGFydFllYXI6IGFueTtcclxuICBwdWJsaWMgaW5pdEVuZFllYXI6IGFueTtcclxuICBwdWJsaWMgbGlzdFllYXJzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgcHVibGljIHN0YXJ0TGlzdFllYXJzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgcHVibGljIGVuZExpc3RZZWFyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjdXJyZW50VmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLnR5cGUgIT09IFRpbWVGaWx0ZXJUeXBlLllFQVIpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUFycmF5ID0gdmFsdWUuc3BsaXQoJy8nKTtcclxuICAgICAgICBpZiAodmFsdWVBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZSh2YWx1ZUFycmF5WzBdKTtcclxuICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZSh2YWx1ZUFycmF5WzFdKTtcclxuICAgICAgICAgIGlmICghaXNOYU4oc3RhcnREYXRlLnZhbHVlT2YoKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBzdGFydERhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKGVuZERhdGUudmFsdWVPZigpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBlbmREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGludGVydmFsOiBhbnk7XHJcbiAgcHVibGljIHBsYXlJY29uID0gJ3BsYXktY2lyY2xlJztcclxuICBwdWJsaWMgcmVzZXRJY29uID0gJ3JlcGxheSc7XHJcblxyXG4gIEBPdXRwdXQoKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlIHwgW0RhdGUsIERhdGVdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KClcclxuICB5ZWFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZChNYXRTbGlkZXIpIG15U2xpZGVyO1xyXG5cclxuICBnZXQgdHlwZSgpOiBUaW1lRmlsdGVyVHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IHVuZGVmaW5lZFxyXG4gICAgICA/IFRpbWVGaWx0ZXJUeXBlLkRBVEVcclxuICAgICAgOiB0aGlzLm9wdGlvbnMudHlwZTtcclxuICB9XHJcblxyXG4gIGdldCBpc1JhbmdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yYW5nZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zdHlsZSA9PT0gVGltZUZpbHRlclN0eWxlLlNMSURFUlxyXG4gICAgICA/IGZhbHNlXHJcbiAgICAgIDogdGhpcy5vcHRpb25zLnJhbmdlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0eWxlKCk6IFRpbWVGaWx0ZXJTdHlsZSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0eWxlID09PSB1bmRlZmluZWRcclxuICAgICAgPyBUaW1lRmlsdGVyU3R5bGUuU0xJREVSXHJcbiAgICAgIDogdGhpcy5vcHRpb25zLnN0eWxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGVwID0gMTA4MDAwMDA7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnN0ZXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xyXG4gICAgICAgIGNhc2UgVGltZUZpbHRlclR5cGUuREFURTpcclxuICAgICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLkRBVEVUSU1FOlxyXG4gICAgICAgICAgc3RlcCA9IDEwODAwMDAwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5USU1FOlxyXG4gICAgICAgICAgc3RlcCA9IDM2MDAwMDA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLllFQVI6XHJcbiAgICAgICAgICBzdGVwID0gMzE1MzYwMDAwMDA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgc3RlcCA9IDEwODAwMDAwO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdGVwID0gdGhpcy5nZXRTdGVwRGVmaW5pdGlvbih0aGlzLm9wdGlvbnMuc3RlcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0ZXA7XHJcbiAgfVxyXG5cclxuICBnZXQgdGltZUludGVydmFsKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpbWVJbnRlcnZhbCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgID8gMjAwMFxyXG4gICAgICA6IHRoaXMub3B0aW9ucy50aW1lSW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxuICBnZXQgbWluKCk6IERhdGUge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW4pIHtcclxuICAgICAgY29uc3QgbWluID0gbmV3IERhdGUodGhpcy5vcHRpb25zLm1pbik7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShtaW4uZ2V0VGltZSgpICsgbWluLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IG1heCgpOiBEYXRlIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4KSB7XHJcbiAgICAgIGNvbnN0IG1heCA9IG5ldyBEYXRlKHRoaXMub3B0aW9ucy5tYXgpO1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUobWF4LmdldFRpbWUoKSArIG1heC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmFuZ2UgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy5vcHRpb25zLnJhbmdlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT4pIHtcclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmcicpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5zdGFydERhdGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVuZERhdGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZSh0aGlzLm1heCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGFydFllYXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnN0YXJ0WWVhciA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICB0aGlzLmluaXRTdGFydFllYXIgPSB0aGlzLnN0YXJ0WWVhcjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVuZFllYXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmVuZFllYXIgPSBuZXcgRGF0ZSh0aGlzLmVuZERhdGUpLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgIHRoaXMuaW5pdEVuZFllYXIgPSB0aGlzLmVuZFllYXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhcnRZZWFyOyBpIDw9IHRoaXMuZW5kWWVhciArIDE7IGkrKykge1xyXG4gICAgICAgIHRoaXMubGlzdFllYXJzLnB1c2goaSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YXJ0WWVhcjsgaSA8IHRoaXMuZW5kWWVhcjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydExpc3RZZWFycy5wdXNoKGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YXJ0WWVhciArIDE7IGkgPD0gdGhpcy5lbmRZZWFyOyBpKyspIHtcclxuICAgICAgICB0aGlzLmVuZExpc3RZZWFycy5wdXNoKGkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy5vcHRpb25zLmVuYWJsZWQ7XHJcbiAgICB0aGlzLmNoZWNrRmlsdGVyVmFsdWUoKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlZCkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNSYW5nZSAmJiB0aGlzLnN0eWxlID09PSAnc2xpZGVyJyAmJiB0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xyXG4gICAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmVDdXJyZW50RmlsdGVyVmFsdWUoKTtcclxuICAgICAgdGhpcy55ZWFyQ2hhbmdlLmVtaXQodW5kZWZpbmVkKTsgLy8gVE9ETzogRklYIFRISVMgZm9yIEFMTCBPVEhFUiBUWVBFUyBTVFlMRVMgT1IgUkFOR0UuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9yZUN1cnJlbnRGaWx0ZXJWYWx1ZSgpIHtcclxuICAgIC8vIFRPRE86IEZJWCBUSElTIGZvciBBTEwgT1RIRVIgVFlQRVMgU1RZTEVTIE9SIFJBTkdFLlxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5pc1JhbmdlICYmXHJcbiAgICAgIHRoaXMuc3R5bGUgPT09IFRpbWVGaWx0ZXJTdHlsZS5TTElERVIgJiZcclxuICAgICAgdGhpcy50eXBlID09PSBUaW1lRmlsdGVyVHlwZS5ZRUFSXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy55ZWFyLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0ZpbHRlclZhbHVlKCkge1xyXG4gICAgY29uc3Qgb2xTb3VyY2UgPSB0aGlzLmxheWVyLmRhdGFTb3VyY2Uub2wgYXMgb2xTb3VyY2VJbWFnZVdNUztcclxuICAgIGNvbnN0IHRpbWVGcm9tV21zID0gb2xTb3VyY2UuZ2V0UGFyYW1zKCkuVElNRTtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuaXNSYW5nZSAmJlxyXG4gICAgICB0aGlzLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuU0xJREVSICYmXHJcbiAgICAgIHRoaXMudHlwZSA9PT0gVGltZUZpbHRlclR5cGUuWUVBUlxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aW1lRnJvbVdtcykge1xyXG4gICAgICAgIHRoaXMueWVhciA9IG5ldyBEYXRlKHRpbWVGcm9tV21zLnRvU3RyaW5nKCkpLmdldEZ1bGxZZWFyKCkgKyAxO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMueWVhciA9IG5ldyBEYXRlKHRoaXMub3B0aW9ucy52YWx1ZS50b1N0cmluZygpKS5nZXRGdWxsWWVhcigpICsgMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnllYXIgPSBuZXcgRGF0ZSh0aGlzLm1pbikuZ2V0RnVsbFllYXIoKSArIDE7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuaXNSYW5nZSAmJlxyXG4gICAgICB0aGlzLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuQ0FMRU5EQVIgJiZcclxuICAgICAgdGhpcy50eXBlID09PSBUaW1lRmlsdGVyVHlwZS5ZRUFSXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRpbWVGcm9tV21zKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydFllYXIgPSBwYXJzZUludCh0aW1lRnJvbVdtcy5zdWJzdHIoMCwgNCksIDEwKTtcclxuICAgICAgICB0aGlzLmVuZFllYXIgPSBwYXJzZUludCh0aW1lRnJvbVdtcy5zdWJzdHIoNSwgNCksIDEwKTtcclxuICAgICAgICBjb25zdCBuZXdTdGFydExpc3RZZWFyczogYW55W10gPSBbXTtcclxuICAgICAgICBjb25zdCBuZXdFbmRMaXN0WWVhcnM6IGFueVtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuaW5pdFN0YXJ0WWVhcjsgaSA8IHRoaXMuZW5kWWVhcjsgaSsrKSB7XHJcbiAgICAgICAgICBuZXdTdGFydExpc3RZZWFycy5wdXNoKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFydFllYXIgKyAxOyBpIDw9IHRoaXMuaW5pdEVuZFllYXI7IGkrKykge1xyXG4gICAgICAgICAgbmV3RW5kTGlzdFllYXJzLnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnRMaXN0WWVhcnMgPSBuZXdTdGFydExpc3RZZWFycztcclxuICAgICAgICB0aGlzLmVuZExpc3RZZWFycyA9IG5ld0VuZExpc3RZZWFycztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogRklYIFRISVMgZm9yIEFMTCBPVEhFUiBUWVBFUyBTVFlMRVMgT1IgUkFOR0UuXHJcbiAgfVxyXG5cclxuICBoYW5kbGVEYXRlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2V0dXBEYXRlT3V0cHV0KCk7XHJcbiAgICB0aGlzLmFwcGx5VHlwZUNoYW5nZSgpO1xyXG5cclxuICAgIC8vIE9ubHkgaWYgaXMgcmFuZ2UsIHVzZSAyIGRhdGVzIHRvIG1ha2UgdGhlIHJhbmdlXHJcbiAgICBpZiAodGhpcy5pc1JhbmdlKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQoW3RoaXMuc3RhcnREYXRlLCB0aGlzLmVuZERhdGVdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5zdGFydERhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlWWVhckNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pc1JhbmdlKSB7XHJcbiAgICAgIHRoaXMuZW5kTGlzdFllYXJzID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YXJ0WWVhciArIDE7IGkgPD0gdGhpcy5pbml0RW5kWWVhcjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5lbmRMaXN0WWVhcnMucHVzaChpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXJ0TGlzdFllYXJzID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLmluaXRTdGFydFllYXIgKyAxOyBpIDwgdGhpcy5lbmRZZWFyOyBpKyspIHtcclxuICAgICAgICB0aGlzLnN0YXJ0TGlzdFllYXJzLnB1c2goaSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy55ZWFyQ2hhbmdlLmVtaXQoW3RoaXMuc3RhcnRZZWFyLCB0aGlzLmVuZFllYXJdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVMaXN0WWVhckNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmhhbmRsZVllYXJDaGFuZ2UoW3RoaXMuc3RhcnRZZWFyLCB0aGlzLmVuZFllYXJdKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUxpc3RZZWFyU3RhcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChbdGhpcy5zdGFydERhdGUsIHRoaXMuZW5kRGF0ZV0pO1xyXG4gIH1cclxuXHJcbiAgZGF0ZVRvTnVtYmVyKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgbGV0IG5ld0RhdGU7XHJcbiAgICBpZiAoZGF0ZSkge1xyXG4gICAgICBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5taW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdEYXRlLmdldFRpbWUoKTtcclxuICB9XHJcblxyXG4gIHNldFNsaWRlclRodW1iTGFiZWwobGFiZWw6IHN0cmluZykge1xyXG4gICAgY29uc3QgdGh1bWJMYWJlbCA9IHRoaXMuZmluZFRodW1iTGFiZWwoXHJcbiAgICAgIHRoaXMubXlTbGlkZXIuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzXHJcbiAgICApO1xyXG4gICAgaWYgKHRodW1iTGFiZWwpIHtcclxuICAgICAgdGh1bWJMYWJlbC50ZXh0Q29udGVudCA9IGxhYmVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZFRodW1iTGFiZWwodGVzdDogYW55W10pOiBhbnkge1xyXG4gICAgbGV0IHRodW1iTGFiZWw7XHJcblxyXG4gICAgdGVzdC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUuY2xhc3NOYW1lID09PSAnbWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0Jykge1xyXG4gICAgICAgIHRodW1iTGFiZWwgPSB2YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHZhbHVlLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIXRodW1iTGFiZWwpIHtcclxuICAgICAgICB0aHVtYkxhYmVsID0gdGhpcy5maW5kVGh1bWJMYWJlbCh2YWx1ZS5jaGlsZE5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfSwgdGhpcyk7XHJcbiAgICByZXR1cm4gdGh1bWJMYWJlbDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlclN0YXRlKCkge1xyXG4gICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSAhdGhpcy5vcHRpb25zLmVuYWJsZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5pc1JhbmdlICYmXHJcbiAgICAgICAgVGltZUZpbHRlclN0eWxlLlNMSURFUiAmJlxyXG4gICAgICAgIHRoaXMudHlwZSA9PT0gVGltZUZpbHRlclR5cGUuWUVBUlxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh0aGlzLnllYXIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcclxuICAgICAgdGhpcy5zdG9yZUN1cnJlbnRGaWx0ZXJWYWx1ZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHVuZGVmaW5lZCk7IC8vIFRPRE86IEZJWCBUSElTIGZvciBBTEwgT1RIRVIgVFlQRVMgU1RZTEVTIE9SIFJBTkdFLlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRGaWx0ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUodGhpcy5taW4pO1xyXG4gICAgdGhpcy55ZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmlzUmFuZ2UgJiZcclxuICAgICAgVGltZUZpbHRlclN0eWxlLlNMSURFUiAmJlxyXG4gICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcclxuICAgICkge1xyXG4gICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh0aGlzLnllYXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXR1cERhdGVPdXRwdXQoKTtcclxuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh1bmRlZmluZWQpOyAvLyBUT0RPOiBGSVggVEhJUyBmb3IgQUxMIE9USEVSIFRZUEVTIFNUWUxFUyBPUiBSQU5HRS5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBsYXlGaWx0ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgdGhpcy5zdG9wRmlsdGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBsYXlJY29uID0gJ3BhdXNlLWNpcmNsZSc7XHJcbiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcclxuICAgICAgICAodGhhdCkgPT4ge1xyXG4gICAgICAgICAgbGV0IG5ld01pbkRhdGVOdW1iZXI7XHJcbiAgICAgICAgICBjb25zdCBtYXhEYXRlTnVtYmVyID0gbmV3IERhdGUodGhhdC5tYXgpO1xyXG5cclxuICAgICAgICAgIG5ld01pbkRhdGVOdW1iZXIgPVxyXG4gICAgICAgICAgICB0aGF0LmRhdGUgPT09IHVuZGVmaW5lZCA/IHRoYXQubWluLmdldFRpbWUoKSA6IHRoYXQuZGF0ZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICBuZXdNaW5EYXRlTnVtYmVyICs9IHRoYXQubXlTbGlkZXIuc3RlcDtcclxuICAgICAgICAgIHRoYXQuZGF0ZSA9IG5ldyBEYXRlKG5ld01pbkRhdGVOdW1iZXIpO1xyXG5cclxuICAgICAgICAgIGlmIChuZXdNaW5EYXRlTnVtYmVyID4gbWF4RGF0ZU51bWJlci5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgdGhhdC5zdG9wRmlsdGVyKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhhdC5oYW5kbGVEYXRlQ2hhbmdlKHsgdmFsdWU6IHRoYXQuZGF0ZSwgZGF0ZTogdGhhdC5kYXRlIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGhpcy50aW1lSW50ZXJ2YWwsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGxheVllYXIoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnllYXIgKyB0aGlzLm15U2xpZGVyLnN0ZXAgPlxyXG4gICAgICB0aGlzLm1heC5nZXRGdWxsWWVhcigpICsgdGhpcy5teVNsaWRlci5zdGVwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zdG9wRmlsdGVyKCk7XHJcbiAgICAgIHRoaXMucmVzZXRGaWx0ZXIoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgdGhpcy5zdG9wRmlsdGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBsYXlJY29uID0gJ3BhdXNlLWNpcmNsZSc7XHJcbiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy55ZWFyICsgdGhpcy5teVNsaWRlci5zdGVwID4gdGhpcy5tYXguZ2V0RnVsbFllYXIoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IHRoaXMueWVhciArIHRoaXMubXlTbGlkZXIuc3RlcDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLnRpbWVJbnRlcnZhbCxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wRmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW50ZXJ2YWwgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnBsYXlJY29uID0gJ3BsYXktY2lyY2xlJztcclxuICB9XHJcblxyXG4gIGhhbmRsZVNsaWRlckRhdGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoZXZlbnQudmFsdWUpO1xyXG4gICAgdGhpcy5zZXRTbGlkZXJUaHVtYkxhYmVsKHRoaXMuaGFuZGxlU2xpZGVyVG9vbHRpcCgpKTtcclxuICAgIHRoaXMuaGFuZGxlRGF0ZUNoYW5nZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTbGlkZXJZZWFyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMueWVhciA9IGV2ZW50LnZhbHVlO1xyXG4gICAgdGhpcy55ZWFyQ2hhbmdlLmVtaXQodGhpcy55ZWFyKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNsaWRlclZhbHVlKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmN1cnJlbnQgPT09IHRydWUgfHwgIXRoaXMubWluKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgdGhpcy5kYXRlID0gdGhpcy5nZXRSb3VuZGVkRGF0ZShjdXJyZW50RGF0ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50eXBlID09PSBUaW1lRmlsdGVyVHlwZS5ZRUFSKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnllYXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRlID09PSB1bmRlZmluZWQgPyB0aGlzLm1pbi5nZXRUaW1lKCkgOiB0aGlzLmRhdGUuZ2V0VGltZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2xpZGVyVG9vbHRpcCgpIHtcclxuICAgIGxldCBsYWJlbDogc3RyaW5nO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgIGNhc2UgVGltZUZpbHRlclR5cGUuREFURTpcclxuICAgICAgICBsYWJlbCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGUgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHRoaXMubWluLnRvRGF0ZVN0cmluZygpXHJcbiAgICAgICAgICAgIDogdGhpcy5kYXRlLnRvRGF0ZVN0cmluZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLlRJTUU6XHJcbiAgICAgICAgbGFiZWwgPVxyXG4gICAgICAgICAgdGhpcy5kYXRlID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyB0aGlzLm1pbi50b1RpbWVTdHJpbmcoKVxyXG4gICAgICAgICAgICA6IHRoaXMuZGF0ZS50b1RpbWVTdHJpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8gZGF0ZXRpbWVcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBsYWJlbCA9XHJcbiAgICAgICAgICB0aGlzLmRhdGUgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IHRoaXMubWluLnRvVVRDU3RyaW5nKClcclxuICAgICAgICAgICAgOiB0aGlzLmRhdGUudG9VVENTdHJpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGFiZWw7XHJcbiAgfVxyXG5cclxuICBzZXR1cERhdGVPdXRwdXQoKSB7XHJcbiAgICBpZiAodGhpcy5zdHlsZSA9PT0gVGltZUZpbHRlclN0eWxlLlNMSURFUikge1xyXG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSk7XHJcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldFNlY29uZHMoLSh0aGlzLnN0ZXAgLyAxMDAwKSk7XHJcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKTtcclxuICAgICAgdGhpcy5lbmREYXRlLnNldFNlY29uZHModGhpcy5zdGVwIC8gMTAwMCk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzUmFuZ2UgJiYgISF0aGlzLmRhdGUpIHtcclxuICAgICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcclxuICAgICAgdGhpcy5zdGFydERhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUmFuZ2UgJiYgKCEhdGhpcy5kYXRlIHx8ICF0aGlzLmRhdGUpKSB7XHJcbiAgICAgIHRoaXMuc3RhcnREYXRlID1cclxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9PT0gdW5kZWZpbmVkID8gbmV3IERhdGUodGhpcy5taW4pIDogdGhpcy5zdGFydERhdGU7XHJcbiAgICAgIHRoaXMuZW5kRGF0ZSA9XHJcbiAgICAgICAgdGhpcy5lbmREYXRlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSh0aGlzLm1heCkgOiB0aGlzLmVuZERhdGU7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmRhdGUpIHtcclxuICAgICAgdGhpcy5zdGFydERhdGUgPVxyXG4gICAgICAgIHRoaXMuc3RhcnREYXRlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSh0aGlzLm1pbikgOiB0aGlzLnN0YXJ0RGF0ZTtcclxuICAgICAgdGhpcy5lbmREYXRlID1cclxuICAgICAgICB0aGlzLmVuZERhdGUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKHRoaXMubWF4KSA6IHRoaXMuZW5kRGF0ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5VHlwZUNoYW5nZSgpIHtcclxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgIGNhc2UgVGltZUZpbHRlclR5cGUuREFURTpcclxuICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmVuZERhdGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0SG91cnMoMCk7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXRNaW51dGVzKDApO1xyXG4gICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0U2Vjb25kcygwKTtcclxuICAgICAgICAgIHRoaXMuZW5kRGF0ZS5zZXRIb3VycygyMyk7XHJcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0TWludXRlcyg1OSk7XHJcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0U2Vjb25kcyg1OSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLlRJTUU6XHJcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgPT09IFRpbWVGaWx0ZXJTdHlsZS5DQUxFTkRBUikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc3RhcnREYXRlLmdldERheSgpICE9PSB0aGlzLm1pbi5nZXREYXkoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEhvdXIgPSB0aGlzLnN0YXJ0RGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1pbnV0ZSA9IHRoaXMuc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0SG91cnMoc2VsZWN0ZWRIb3VyKTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0TWludXRlcyhzZWxlY3RlZE1pbnV0ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZS5nZXREYXkoKSAhPT0gdGhpcy5taW4uZ2V0RGF5KCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRIb3VyID0gdGhpcy5lbmREYXRlLmdldEhvdXJzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTWludXRlID0gdGhpcy5lbmREYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5taW47XHJcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZS5zZXRIb3VycyhzZWxlY3RlZEhvdXIpO1xyXG4gICAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0TWludXRlcyhzZWxlY3RlZE1pbnV0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNSYW5nZSAmJiB0aGlzLnN0ZXAgPiA2MCAqIDYwICogMTAwMCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0TWludXRlcygwKTtcclxuICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldFNlY29uZHMoMCk7XHJcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0TWludXRlcyg1OSk7XHJcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0U2Vjb25kcyg1OSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBkYXRldGltZVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRSYW5nZU1pbkRhdGUoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGFydERhdGUgPT09IHVuZGVmaW5lZCA/IHRoaXMubWluIDogdGhpcy5zdGFydERhdGU7XHJcbiAgfVxyXG5cclxuICBnZXRSYW5nZU1heERhdGUoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmREYXRlID09PSB1bmRlZmluZWQgPyB0aGlzLm1heCA6IHRoaXMuZW5kRGF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJvdW5kIGRhdGUgYXQgYSBjZXJ0YWluIHRpbWUsIDEwIG1pbnV0ZXMgYnkgRGVmYXVsdFxyXG4gICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB0byBSb3VuZFxyXG4gICAqIEBwYXJhbSBhdE1pbnV0ZSAtIHJvdW5kIHRvIGNsb3Nlc3QgJ2F0TWludXRlJyBtaW51dGUsIHJvdW5kZWQgMTAgYnkgZGVmYXVsdFxyXG4gICAqIEByZXR1cm4gdGhlIHJvdW5kZWQgZGF0ZVxyXG4gICAqL1xyXG4gIGdldFJvdW5kZWREYXRlKGRhdGUsIGF0TWludXRlID0gMTApIHtcclxuICAgIGNvbnN0IGNvZWZmID0gMTAwMCAqIDYwICogYXRNaW51dGU7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yb3VuZChkYXRlLmdldFRpbWUoKSAvIGNvZWZmKSAqIGNvZWZmKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgc3RlcCAocGVyaW9kKSBkZWZpbml0aW9uIGZyb20gdGhlIGxheWVyIGRpbWVuc2lvbiB0YWdcclxuICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCBhcyBJU08gODYwMSBleGFtcGxlOiBQVDEwTSBmb3IgMTAgTWludXRlc1xyXG4gICAqIEByZXR1cm4gdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xyXG4gICAqL1xyXG4gIGdldFN0ZXBEZWZpbml0aW9uKHN0ZXApIHtcclxuICAgIHJldHVybiBtb21lbnQuZHVyYXRpb24oc3RlcCkuYXNNaWxsaXNlY29uZHMoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cInN0eWxlID09PSAnY2FsZW5kYXInICYmIHR5cGUgIT09ICd5ZWFyJ1wiPlxyXG4gIDxkaXYgKm5nSWY9XCIhaXNSYW5nZVwiIGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMCBpZ28tY29sLTEwMC1tXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgY2xhc3M9XCJ0aW1lLWZpbHRlci1tYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXCJcclxuICAgICAgICBbZm9yXT1cImRhdGV0aW1lUGlja2VyXCJcclxuICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgPjwvbWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZT5cclxuICAgICAgPG1hdC1kYXRldGltZXBpY2tlclxyXG4gICAgICAgICNkYXRldGltZVBpY2tlclxyXG4gICAgICAgIHR5cGU9XCJ7eyB0eXBlIH19XCJcclxuICAgICAgICBvcGVuT25Gb2N1cz1cInRydWVcIlxyXG4gICAgICAgIHRpbWVJbnRlcnZhbD1cIjVcIlxyXG4gICAgICA+PC9tYXQtZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwiZmFsc2VcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5kYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgW21hdERhdGV0aW1lcGlja2VyXT1cImRhdGV0aW1lUGlja2VyXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGVcIlxyXG4gICAgICAgIFttaW5dPVwibWluXCJcclxuICAgICAgICBbbWF4XT1cIm1heFwiXHJcbiAgICAgICAgcmVhZG9ubHk9XCJyZWFkb25seVwiXHJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJpc1JhbmdlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMFwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1kYXRldGltZXBpY2tlci10b2dnbGVcclxuICAgICAgICAgIGNsYXNzPVwidGltZS1maWx0ZXItbWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZVwiXHJcbiAgICAgICAgICBbZm9yXT1cIm1pbkRhdGV0aW1lUGlja2VyXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgID48L21hdC1kYXRldGltZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRldGltZXBpY2tlclxyXG4gICAgICAgICAgI21pbkRhdGV0aW1lUGlja2VyXHJcbiAgICAgICAgICB0eXBlPVwie3sgdHlwZSB9fVwiXHJcbiAgICAgICAgICBvcGVuT25Gb2N1cz1cInRydWVcIlxyXG4gICAgICAgICAgdGltZUludGVydmFsPVwiNVwiXHJcbiAgICAgICAgPjwvbWF0LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cImZhbHNlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5zdGFydERhdGUnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgIFttYXREYXRldGltZXBpY2tlcl09XCJtaW5EYXRldGltZVBpY2tlclwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0YXJ0RGF0ZVwiXHJcbiAgICAgICAgICBbbWluXT1cIm1pblwiXHJcbiAgICAgICAgICBbbWF4XT1cImdldFJhbmdlTWF4RGF0ZSgpXCJcclxuICAgICAgICAgIHJlYWRvbmx5PVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIihzdGFydERhdGUpXCJcclxuICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJpZ28tY29sIGlnby1jb2wtMTAwXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZVxyXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWZpbHRlci1tYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXCJcclxuICAgICAgICAgIFtmb3JdPVwibWF4RGF0ZXRpbWVQaWNrZXJcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvbWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LWRhdGV0aW1lcGlja2VyXHJcbiAgICAgICAgICAjbWF4RGF0ZXRpbWVQaWNrZXJcclxuICAgICAgICAgIHR5cGU9XCJ7eyB0eXBlIH19XCJcclxuICAgICAgICAgIG9wZW5PbkZvY3VzPVwidHJ1ZVwiXHJcbiAgICAgICAgICB0aW1lSW50ZXJ2YWw9XCI1XCJcclxuICAgICAgICA+PC9tYXQtZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwiZmFsc2VcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnaWdvLmdlby50aW1lRmlsdGVyLmVuZERhdGUnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgIFttYXREYXRldGltZXBpY2tlcl09XCJtYXhEYXRldGltZVBpY2tlclwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZERhdGVcIlxyXG4gICAgICAgICAgW21pbl09XCJnZXRSYW5nZU1pbkRhdGUoKVwiXHJcbiAgICAgICAgICBbbWF4XT1cIm1heFwiXHJcbiAgICAgICAgICByZWFkb25seT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJzdHlsZSA9PT0gJ2NhbGVuZGFyJyAmJiB0eXBlID09PSAneWVhcidcIj5cclxuICA8ZGl2ICpuZ0lmPVwiIWlzUmFuZ2VcIiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDAgaWdvLWNvbC0xMDAtbVwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5kYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ5ZWFyXCJcclxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZVllYXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwieWVhclwiICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGxpc3RZZWFyc1wiPnt7XHJcbiAgICAgICAgICB5ZWFyXHJcbiAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJpc1JhbmdlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMFwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5zdGFydERhdGUnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwic3RhcnRZZWFyXCJcclxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiaGFuZGxlWWVhckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICBbdmFsdWVdPVwic3RhcnRZZWFyXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0YXJ0WWVhciBvZiBzdGFydExpc3RZZWFyc1wiXHJcbiAgICAgICAgICAgID57eyBzdGFydFllYXIgfX08L21hdC1vcHRpb25cclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMFwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5lbmREYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZFllYXJcIlxyXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVZZWFyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJlbmRZZWFyXCIgKm5nRm9yPVwibGV0IGVuZFllYXIgb2YgZW5kTGlzdFllYXJzXCI+e3tcclxuICAgICAgICAgICAgZW5kWWVhclxyXG4gICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGJyIC8+XHJcbjxkaXZcclxuICAqbmdJZj1cIiFpc1JhbmdlICYmIHN0eWxlID09PSAnc2xpZGVyJyAmJiB0eXBlID09PSAneWVhcidcIlxyXG4gIGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMCBpZ28tY29sLTEwMC1tIG1hdC10eXBvZ3JhcGh5XCJcclxuPlxyXG4gIDxzcGFuPnt7IHN0YXJ0WWVhciB9fTwvc3Bhbj5cclxuICA8IS0tIFRPRE86IFRoZSAndGlja0ludGVydmFsJyBwcm9wZXJ0eSBubyBsb25nZXIgZXhpc3RzIC0tPlxyXG4gIDxtYXQtc2xpZGVyXHJcbiAgICBpZD1cInRpbWUtc2xpZGVyXCJcclxuICAgIHN0ZXA9XCJ7eyBzdGVwIH19XCJcclxuICAgIFttaW5dPVwic3RhcnRZZWFyXCJcclxuICAgIFttYXhdPVwiZW5kWWVhclwiXHJcbiAgICBbY29sb3JdPVwiY29sb3JcIlxyXG4gICAgdGh1bWJMYWJlbFxyXG4gICAgW2Rpc2FibGVkXT1cIiFvcHRpb25zLmVuYWJsZWQgfHwgIWxheWVyLnZpc2libGVcIlxyXG4gICAgI25nU2xpZGVyXHJcbiAgICA+PGlucHV0XHJcbiAgICAgIG1hdFNsaWRlclRodW1iXHJcbiAgICAgIFt2YWx1ZV09XCJoYW5kbGVTbGlkZXJWYWx1ZSgpXCJcclxuICAgICAgKGlucHV0KT1cIlxyXG4gICAgICAgIGhhbmRsZVNsaWRlclllYXJDaGFuZ2Uoe1xyXG4gICAgICAgICAgc291cmNlOiBuZ1NsaWRlclRodW1iLFxyXG4gICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcclxuICAgICAgICAgIHZhbHVlOiBuZ1NsaWRlclRodW1iLnZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgICAgXCJcclxuICAgICAgI25nU2xpZGVyVGh1bWI9XCJtYXRTbGlkZXJUaHVtYlwiXHJcbiAgICAgIChjaGFuZ2UpPVwiXHJcbiAgICAgICAgaGFuZGxlU2xpZGVyWWVhckNoYW5nZSh7XHJcbiAgICAgICAgICBzb3VyY2U6IG5nU2xpZGVyVGh1bWIsXHJcbiAgICAgICAgICBwYXJlbnQ6IG5nU2xpZGVyLFxyXG4gICAgICAgICAgdmFsdWU6IG5nU2xpZGVyVGh1bWIudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgICBcIlxyXG4gICAgLz5cclxuICA8L21hdC1zbGlkZXI+XHJcbiAgPHNwYW4+e3sgZW5kWWVhciB9fTwvc3Bhbj5cclxuICA8cCAqbmdJZj1cIm9wdGlvbnMuZW5hYmxlZFwiIGNsYXNzPVwiZGF0ZS1iZWxvd1wiPnt7IHllYXIgfX08L3A+XHJcbiAgPGRpdiAjYWN0aW9ucyBjbGFzcz1cImlnby1sYXllci1hY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgpXCJcclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci50b2dnbGVGaWx0ZXJTdGF0ZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbY29sb3JdPVwiY29sb3JcIlxyXG4gICAgICBbY2hlY2tlZF09XCJvcHRpb25zLmVuYWJsZWRcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWxheWVyLnZpc2libGVcIlxyXG4gICAgPlxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiIW9wdGlvbnMuZW5hYmxlZCB8fCAhbGF5ZXIudmlzaWJsZVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwicGxheVllYXIoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3sgcGxheUljb24gfX1cIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhb3B0aW9ucy5lbmFibGVkIHx8ICFsYXllci52aXNpYmxlXCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7eyByZXNldEljb24gfX1cIj48L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdlxyXG4gICpuZ0lmPVwic3R5bGUgPT09ICdzbGlkZXInICYmIHR5cGUgIT09ICd5ZWFyJ1wiXHJcbiAgY2xhc3M9XCJpZ28tY29sIGlnby1jb2wtMTAwIGlnby1jb2wtMTAwLW1cIlxyXG4+XHJcbiAgPCEtLSBUT0RPOiBUaGUgJ3RpY2tJbnRlcnZhbCcgcHJvcGVydHkgbm8gbG9uZ2VyIGV4aXN0cyAtLT5cclxuICA8bWF0LXNsaWRlclxyXG4gICAgaWQ9XCJ0aW1lLXNsaWRlclwiXHJcbiAgICBzdGVwPVwie3sgc3RlcCB9fVwiXHJcbiAgICBbbWluXT1cImRhdGVUb051bWJlcihtaW4pXCJcclxuICAgIFttYXhdPVwiZGF0ZVRvTnVtYmVyKG1heClcIlxyXG4gICAgdGh1bWJMYWJlbFxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVTbGlkZXJEYXRlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgI25nU2xpZGVyXHJcbiAgICA+PGlucHV0XHJcbiAgICAgIG1hdFNsaWRlclRodW1iXHJcbiAgICAgIFt2YWx1ZV09XCJoYW5kbGVTbGlkZXJWYWx1ZSgpXCJcclxuICAgICAgKGlucHV0KT1cIlxyXG4gICAgICAgIGhhbmRsZVNsaWRlckRhdGVDaGFuZ2Uoe1xyXG4gICAgICAgICAgc291cmNlOiBuZ1NsaWRlclRodW1iLFxyXG4gICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcclxuICAgICAgICAgIHZhbHVlOiBuZ1NsaWRlclRodW1iLnZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgICAgXCJcclxuICAgICAgI25nU2xpZGVyVGh1bWI9XCJtYXRTbGlkZXJUaHVtYlwiXHJcbiAgICAvPlxyXG4gIDwvbWF0LXNsaWRlcj5cclxuICA8cCBjbGFzcz1cImRhdGUtYmVsb3dcIj57eyBoYW5kbGVTbGlkZXJUb29sdGlwKCkgfX08L3A+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInBsYXlGaWx0ZXIoJGV2ZW50KVwiPlxyXG4gICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7eyBwbGF5SWNvbiB9fVwiPjwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG4iXX0=
534
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1maWx0ZXItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvdGltZS1maWx0ZXItZm9ybS90aW1lLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci90aW1lLWZpbHRlci1mb3JtL3RpbWUtZmlsdGVyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGVBQWUsRUFFaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FB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QUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge1xuICBEYXRlQWRhcHRlcixcbiAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgTWF0T3B0aW9uTW9kdWxlLFxuICBUaGVtZVBhbGV0dGVcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFNsaWRlciwgTWF0U2xpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcblxuaW1wb3J0IG9sU291cmNlSW1hZ2VXTVMgZnJvbSAnb2wvc291cmNlL0ltYWdlV01TJztcblxuaW1wb3J0IHsgTWF0RGF0ZXRpbWVwaWNrZXJNb2R1bGUgfSBmcm9tICdAbWF0LWRhdGV0aW1lcGlja2VyL2NvcmUnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBtb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvbGF5ZXInO1xuaW1wb3J0IHsgVGltZUZpbHRlclN0eWxlLCBUaW1lRmlsdGVyVHlwZSB9IGZyb20gJy4uL3NoYXJlZC90aW1lLWZpbHRlci5lbnVtJztcbmltcG9ydCB7IFRpbWVGaWx0ZXJPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL3RpbWUtZmlsdGVyLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby10aW1lLWZpbHRlci1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtZmlsdGVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lLWZpbHRlci1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXREYXRldGltZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLCAvLyBGb3IgdGhlIERhdGVBZGFwdGVyIHByb3ZpZGVyXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE5nRm9yLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRTbGlkZXJNb2R1bGUsXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBJZ29MYW5ndWFnZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVGaWx0ZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbGF5ZXI6IExheWVyO1xuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFRpbWVGaWx0ZXJPcHRpb25zO1xuXG4gIHB1YmxpYyBjb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xuICBwdWJsaWMgZGF0ZTogRGF0ZTtcbiAgcHVibGljIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgcHVibGljIGVuZERhdGU6IERhdGU7XG4gIHB1YmxpYyB5ZWFyOiBhbnk7XG4gIHB1YmxpYyBzdGFydFllYXI6IGFueTtcbiAgcHVibGljIGVuZFllYXI6IGFueTtcbiAgcHVibGljIGluaXRTdGFydFllYXI6IGFueTtcbiAgcHVibGljIGluaXRFbmRZZWFyOiBhbnk7XG4gIHB1YmxpYyBsaXN0WWVhcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHVibGljIHN0YXJ0TGlzdFllYXJzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHB1YmxpYyBlbmRMaXN0WWVhcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICBASW5wdXQoKVxuICBzZXQgY3VycmVudFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnR5cGUgIT09IFRpbWVGaWx0ZXJUeXBlLllFQVIpIHtcbiAgICAgICAgY29uc3QgdmFsdWVBcnJheSA9IHZhbHVlLnNwbGl0KCcvJyk7XG4gICAgICAgIGlmICh2YWx1ZUFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZSh2YWx1ZUFycmF5WzBdKTtcbiAgICAgICAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUodmFsdWVBcnJheVsxXSk7XG4gICAgICAgICAgaWYgKCFpc05hTihzdGFydERhdGUudmFsdWVPZigpKSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBzdGFydERhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNOYU4oZW5kRGF0ZS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBlbmREYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbnRlcnZhbDogYW55O1xuICBwdWJsaWMgcGxheUljb24gPSAncGxheV9jaXJjbGUnO1xuICBwdWJsaWMgcmVzZXRJY29uID0gJ3JlcGxheSc7XG5cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGUgfCBbRGF0ZSwgRGF0ZV0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgeWVhckNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IFtzdHJpbmcsIHN0cmluZ10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKE1hdFNsaWRlcikgbXlTbGlkZXI7XG5cbiAgZ2V0IHR5cGUoKTogVGltZUZpbHRlclR5cGUge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IFRpbWVGaWx0ZXJUeXBlLkRBVEVcbiAgICAgIDogdGhpcy5vcHRpb25zLnR5cGU7XG4gIH1cblxuICBnZXQgaXNSYW5nZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJhbmdlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5zdHlsZSA9PT0gVGltZUZpbHRlclN0eWxlLlNMSURFUlxuICAgICAgPyBmYWxzZVxuICAgICAgOiB0aGlzLm9wdGlvbnMucmFuZ2U7XG4gIH1cblxuICBnZXQgc3R5bGUoKTogVGltZUZpbHRlclN0eWxlIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0eWxlID09PSB1bmRlZmluZWRcbiAgICAgID8gVGltZUZpbHRlclN0eWxlLlNMSURFUlxuICAgICAgOiB0aGlzLm9wdGlvbnMuc3R5bGU7XG4gIH1cblxuICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgIGxldCBzdGVwID0gMTA4MDAwMDA7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGVwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgIGNhc2UgVGltZUZpbHRlclR5cGUuREFURTpcbiAgICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5EQVRFVElNRTpcbiAgICAgICAgICBzdGVwID0gMTA4MDAwMDA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGltZUZpbHRlclR5cGUuVElNRTpcbiAgICAgICAgICBzdGVwID0gMzYwMDAwMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5ZRUFSOlxuICAgICAgICAgIHN0ZXAgPSAzMTUzNjAwMDAwMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdGVwID0gMTA4MDAwMDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ZXAgPSB0aGlzLmdldFN0ZXBEZWZpbml0aW9uKHRoaXMub3B0aW9ucy5zdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIGdldCB0aW1lSW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpbWVJbnRlcnZhbCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IDIwMDBcbiAgICAgIDogdGhpcy5vcHRpb25zLnRpbWVJbnRlcnZhbDtcbiAgfVxuXG4gIGdldCBtaW4oKTogRGF0ZSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW4pIHtcbiAgICAgIGNvbnN0IG1pbiA9IG5ldyBEYXRlKHRoaXMub3B0aW9ucy5taW4pO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKG1pbi5nZXRUaW1lKCkgKyBtaW4uZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBnZXQgbWF4KCk6IERhdGUge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4KSB7XG4gICAgICBjb25zdCBtYXggPSBuZXcgRGF0ZSh0aGlzLm9wdGlvbnMubWF4KTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShtYXguZ2V0VGltZSgpICsgbWF4LmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmFuZ2UgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy5vcHRpb25zLnJhbmdlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT4pIHtcbiAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZSgnZnInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5kRGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZSh0aGlzLm1heCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXJ0WWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YXJ0WWVhciA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKS5nZXRGdWxsWWVhcigpO1xuICAgICAgdGhpcy5pbml0U3RhcnRZZWFyID0gdGhpcy5zdGFydFllYXI7XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZFllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbmRZZWFyID0gbmV3IERhdGUodGhpcy5lbmREYXRlKS5nZXRGdWxsWWVhcigpO1xuICAgICAgdGhpcy5pbml0RW5kWWVhciA9IHRoaXMuZW5kWWVhcjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNSYW5nZSkge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhcnRZZWFyOyBpIDw9IHRoaXMuZW5kWWVhciArIDE7IGkrKykge1xuICAgICAgICB0aGlzLmxpc3RZZWFycy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFydFllYXI7IGkgPCB0aGlzLmVuZFllYXI7IGkrKykge1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdFllYXJzLnB1c2goaSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFydFllYXIgKyAxOyBpIDw9IHRoaXMuZW5kWWVhcjsgaSsrKSB7XG4gICAgICAgIHRoaXMuZW5kTGlzdFllYXJzLnB1c2goaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID1cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy5vcHRpb25zLmVuYWJsZWQ7XG4gICAgdGhpcy5jaGVja0ZpbHRlclZhbHVlKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICBpZiAoIXRoaXMuaXNSYW5nZSAmJiB0aGlzLnN0eWxlID09PSAnc2xpZGVyJyAmJiB0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh0aGlzLnllYXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlQ3VycmVudEZpbHRlclZhbHVlKCk7XG4gICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh1bmRlZmluZWQpOyAvLyBUT0RPOiBGSVggVEhJUyBmb3IgQUxMIE9USEVSIFRZUEVTIFNUWUxFUyBPUiBSQU5HRS5cbiAgICB9XG4gIH1cblxuICBzdG9yZUN1cnJlbnRGaWx0ZXJWYWx1ZSgpIHtcbiAgICAvLyBUT0RPOiBGSVggVEhJUyBmb3IgQUxMIE9USEVSIFRZUEVTIFNUWUxFUyBPUiBSQU5HRS5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1JhbmdlICYmXG4gICAgICB0aGlzLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuU0xJREVSICYmXG4gICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcbiAgICApIHtcbiAgICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMueWVhci50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRmlsdGVyVmFsdWUoKSB7XG4gICAgY29uc3Qgb2xTb3VyY2UgPSB0aGlzLmxheWVyLmRhdGFTb3VyY2Uub2wgYXMgb2xTb3VyY2VJbWFnZVdNUztcbiAgICBjb25zdCB0aW1lRnJvbVdtcyA9IG9sU291cmNlLmdldFBhcmFtcygpLlRJTUU7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNSYW5nZSAmJlxuICAgICAgdGhpcy5zdHlsZSA9PT0gVGltZUZpbHRlclN0eWxlLlNMSURFUiAmJlxuICAgICAgdGhpcy50eXBlID09PSBUaW1lRmlsdGVyVHlwZS5ZRUFSXG4gICAgKSB7XG4gICAgICBpZiAodGltZUZyb21XbXMpIHtcbiAgICAgICAgdGhpcy55ZWFyID0gbmV3IERhdGUodGltZUZyb21XbXMudG9TdHJpbmcoKSkuZ2V0RnVsbFllYXIoKSArIDE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy52YWx1ZSkge1xuICAgICAgICB0aGlzLnllYXIgPSBuZXcgRGF0ZSh0aGlzLm9wdGlvbnMudmFsdWUudG9TdHJpbmcoKSkuZ2V0RnVsbFllYXIoKSArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnllYXIgPSBuZXcgRGF0ZSh0aGlzLm1pbikuZ2V0RnVsbFllYXIoKSArIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaXNSYW5nZSAmJlxuICAgICAgdGhpcy5zdHlsZSA9PT0gVGltZUZpbHRlclN0eWxlLkNBTEVOREFSICYmXG4gICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcbiAgICApIHtcbiAgICAgIGlmICh0aW1lRnJvbVdtcykge1xuICAgICAgICB0aGlzLnN0YXJ0WWVhciA9IHBhcnNlSW50KHRpbWVGcm9tV21zLnN1YnN0cigwLCA0KSwgMTApO1xuICAgICAgICB0aGlzLmVuZFllYXIgPSBwYXJzZUludCh0aW1lRnJvbVdtcy5zdWJzdHIoNSwgNCksIDEwKTtcbiAgICAgICAgY29uc3QgbmV3U3RhcnRMaXN0WWVhcnM6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IG5ld0VuZExpc3RZZWFyczogYW55W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuaW5pdFN0YXJ0WWVhcjsgaSA8IHRoaXMuZW5kWWVhcjsgaSsrKSB7XG4gICAgICAgICAgbmV3U3RhcnRMaXN0WWVhcnMucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFydFllYXIgKyAxOyBpIDw9IHRoaXMuaW5pdEVuZFllYXI7IGkrKykge1xuICAgICAgICAgIG5ld0VuZExpc3RZZWFycy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRMaXN0WWVhcnMgPSBuZXdTdGFydExpc3RZZWFycztcbiAgICAgICAgdGhpcy5lbmRMaXN0WWVhcnMgPSBuZXdFbmRMaXN0WWVhcnM7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFRPRE86IEZJWCBUSElTIGZvciBBTEwgT1RIRVIgVFlQRVMgU1RZTEVTIE9SIFJBTkdFLlxuICB9XG5cbiAgaGFuZGxlRGF0ZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5zZXR1cERhdGVPdXRwdXQoKTtcbiAgICB0aGlzLmFwcGx5VHlwZUNoYW5nZSgpO1xuXG4gICAgLy8gT25seSBpZiBpcyByYW5nZSwgdXNlIDIgZGF0ZXMgdG8gbWFrZSB0aGUgcmFuZ2VcbiAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KFt0aGlzLnN0YXJ0RGF0ZSwgdGhpcy5lbmREYXRlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5zdGFydERhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHRoaXMuZW5kTGlzdFllYXJzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFydFllYXIgKyAxOyBpIDw9IHRoaXMuaW5pdEVuZFllYXI7IGkrKykge1xuICAgICAgICB0aGlzLmVuZExpc3RZZWFycy5wdXNoKGkpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGFydExpc3RZZWFycyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuaW5pdFN0YXJ0WWVhciArIDE7IGkgPCB0aGlzLmVuZFllYXI7IGkrKykge1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdFllYXJzLnB1c2goaSk7XG4gICAgICB9XG4gICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdChbdGhpcy5zdGFydFllYXIsIHRoaXMuZW5kWWVhcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh0aGlzLnllYXIpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUxpc3RZZWFyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhbmRsZVllYXJDaGFuZ2UoW3RoaXMuc3RhcnRZZWFyLCB0aGlzLmVuZFllYXJdKTtcbiAgfVxuXG4gIGhhbmRsZUxpc3RZZWFyU3RhcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQoW3RoaXMuc3RhcnREYXRlLCB0aGlzLmVuZERhdGVdKTtcbiAgfVxuXG4gIGRhdGVUb051bWJlcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICBsZXQgbmV3RGF0ZTtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5taW4pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRlLmdldFRpbWUoKTtcbiAgfVxuXG4gIHNldFNsaWRlclRodW1iTGFiZWwobGFiZWw6IHN0cmluZykge1xuICAgIGNvbnN0IHRodW1iTGFiZWwgPSB0aGlzLmZpbmRUaHVtYkxhYmVsKFxuICAgICAgdGhpcy5teVNsaWRlci5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXNcbiAgICApO1xuICAgIGlmICh0aHVtYkxhYmVsKSB7XG4gICAgICB0aHVtYkxhYmVsLnRleHRDb250ZW50ID0gbGFiZWw7XG4gICAgfVxuICB9XG5cbiAgZmluZFRodW1iTGFiZWwodGVzdDogYW55W10pOiBhbnkge1xuICAgIGxldCB0aHVtYkxhYmVsO1xuXG4gICAgdGVzdC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlLmNsYXNzTmFtZSA9PT0gJ21hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCcpIHtcbiAgICAgICAgdGh1bWJMYWJlbCA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGh1bWJMYWJlbCkge1xuICAgICAgICB0aHVtYkxhYmVsID0gdGhpcy5maW5kVGh1bWJMYWJlbCh2YWx1ZS5jaGlsZE5vZGVzKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgICByZXR1cm4gdGh1bWJMYWJlbDtcbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKCkge1xuICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gIXRoaXMub3B0aW9ucy5lbmFibGVkO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmlzUmFuZ2UgJiZcbiAgICAgICAgVGltZUZpbHRlclN0eWxlLlNMSURFUiAmJlxuICAgICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcbiAgICAgICkge1xuICAgICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh0aGlzLnllYXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcbiAgICAgIHRoaXMuc3RvcmVDdXJyZW50RmlsdGVyVmFsdWUoKTtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodW5kZWZpbmVkKTsgLy8gVE9ETzogRklYIFRISVMgZm9yIEFMTCBPVEhFUiBUWVBFUyBTVFlMRVMgT1IgUkFOR0UuXG4gICAgfVxuICB9XG5cbiAgcmVzZXRGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluKTtcbiAgICB0aGlzLnllYXIgPSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1JhbmdlICYmXG4gICAgICBUaW1lRmlsdGVyU3R5bGUuU0xJREVSICYmXG4gICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcbiAgICApIHtcbiAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRlT3V0cHV0KCk7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHVuZGVmaW5lZCk7IC8vIFRPRE86IEZJWCBUSElTIGZvciBBTEwgT1RIRVIgVFlQRVMgU1RZTEVTIE9SIFJBTkdFLlxuICAgIH1cbiAgfVxuXG4gIHBsYXlGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5SWNvbiA9ICdwYXVzZV9jaXJjbGUnO1xuICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKFxuICAgICAgICAodGhhdCkgPT4ge1xuICAgICAgICAgIGxldCBuZXdNaW5EYXRlTnVtYmVyO1xuICAgICAgICAgIGNvbnN0IG1heERhdGVOdW1iZXIgPSBuZXcgRGF0ZSh0aGF0Lm1heCk7XG5cbiAgICAgICAgICBuZXdNaW5EYXRlTnVtYmVyID1cbiAgICAgICAgICAgIHRoYXQuZGF0ZSA9PT0gdW5kZWZpbmVkID8gdGhhdC5taW4uZ2V0VGltZSgpIDogdGhhdC5kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBuZXdNaW5EYXRlTnVtYmVyICs9IHRoYXQubXlTbGlkZXIuc3RlcDtcbiAgICAgICAgICB0aGF0LmRhdGUgPSBuZXcgRGF0ZShuZXdNaW5EYXRlTnVtYmVyKTtcblxuICAgICAgICAgIGlmIChuZXdNaW5EYXRlTnVtYmVyID4gbWF4RGF0ZU51bWJlci5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoYXQuc3RvcEZpbHRlcigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoYXQuaGFuZGxlRGF0ZUNoYW5nZSh7IHZhbHVlOiB0aGF0LmRhdGUsIGRhdGU6IHRoYXQuZGF0ZSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50aW1lSW50ZXJ2YWwsXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcGxheVllYXIoZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMueWVhciArIHRoaXMubXlTbGlkZXIuc3RlcCA+XG4gICAgICB0aGlzLm1heC5nZXRGdWxsWWVhcigpICsgdGhpcy5teVNsaWRlci5zdGVwXG4gICAgKSB7XG4gICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcbiAgICAgIHRoaXMucmVzZXRGaWx0ZXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xuICAgICAgdGhpcy5zdG9wRmlsdGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxheUljb24gPSAncGF1c2VfY2lyY2xlJztcbiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnllYXIgKyB0aGlzLm15U2xpZGVyLnN0ZXAgPiB0aGlzLm1heC5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy55ZWFyID0gdGhpcy55ZWFyICsgdGhpcy5teVNsaWRlci5zdGVwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh0aGlzLnllYXIpO1xuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRpbWVJbnRlcnZhbCxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzdG9wRmlsdGVyKCkge1xuICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cbiAgICB0aGlzLmludGVydmFsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGxheUljb24gPSAncGxheV9jaXJjbGUnO1xuICB9XG5cbiAgaGFuZGxlU2xpZGVyRGF0ZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoZXZlbnQudmFsdWUpO1xuICAgIHRoaXMuc2V0U2xpZGVyVGh1bWJMYWJlbCh0aGlzLmhhbmRsZVNsaWRlclRvb2x0aXAoKSk7XG4gICAgdGhpcy5oYW5kbGVEYXRlQ2hhbmdlKGV2ZW50KTtcbiAgfVxuXG4gIGhhbmRsZVNsaWRlclllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMueWVhciA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XG4gIH1cblxuICBoYW5kbGVTbGlkZXJWYWx1ZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VycmVudCA9PT0gdHJ1ZSB8fCAhdGhpcy5taW4pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZ2V0Um91bmRlZERhdGUoY3VycmVudERhdGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSBUaW1lRmlsdGVyVHlwZS5ZRUFSKSB7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlID09PSB1bmRlZmluZWQgPyB0aGlzLm1pbi5nZXRUaW1lKCkgOiB0aGlzLmRhdGUuZ2V0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNsaWRlclRvb2x0aXAoKSB7XG4gICAgbGV0IGxhYmVsOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5EQVRFOlxuICAgICAgICBsYWJlbCA9XG4gICAgICAgICAgdGhpcy5kYXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5taW4udG9EYXRlU3RyaW5nKClcbiAgICAgICAgICAgIDogdGhpcy5kYXRlLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGltZUZpbHRlclR5cGUuVElNRTpcbiAgICAgICAgbGFiZWwgPVxuICAgICAgICAgIHRoaXMuZGF0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMubWluLnRvVGltZVN0cmluZygpXG4gICAgICAgICAgICA6IHRoaXMuZGF0ZS50b1RpbWVTdHJpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBkYXRldGltZVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGFiZWwgPVxuICAgICAgICAgIHRoaXMuZGF0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMubWluLnRvVVRDU3RyaW5nKClcbiAgICAgICAgICAgIDogdGhpcy5kYXRlLnRvVVRDU3RyaW5nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIHNldHVwRGF0ZU91dHB1dCgpIHtcbiAgICBpZiAodGhpcy5zdHlsZSA9PT0gVGltZUZpbHRlclN0eWxlLlNMSURFUikge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0U2Vjb25kcygtKHRoaXMuc3RlcCAvIDEwMDApKTtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXRTZWNvbmRzKHRoaXMuc3RlcCAvIDEwMDApO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNSYW5nZSAmJiAhIXRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNSYW5nZSAmJiAoISF0aGlzLmRhdGUgfHwgIXRoaXMuZGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID1cbiAgICAgICAgdGhpcy5zdGFydERhdGUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKHRoaXMubWluKSA6IHRoaXMuc3RhcnREYXRlO1xuICAgICAgdGhpcy5lbmREYXRlID1cbiAgICAgICAgdGhpcy5lbmREYXRlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSh0aGlzLm1heCkgOiB0aGlzLmVuZERhdGU7XG4gICAgfSBlbHNlIGlmICghdGhpcy5kYXRlKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9XG4gICAgICAgIHRoaXMuc3RhcnREYXRlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSh0aGlzLm1pbikgOiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9XG4gICAgICAgIHRoaXMuZW5kRGF0ZSA9PT0gdW5kZWZpbmVkID8gbmV3IERhdGUodGhpcy5tYXgpIDogdGhpcy5lbmREYXRlO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5VHlwZUNoYW5nZSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5EQVRFOlxuICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmVuZERhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldEhvdXJzKDApO1xuICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldE1pbnV0ZXMoMCk7XG4gICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0SG91cnMoMjMpO1xuICAgICAgICAgIHRoaXMuZW5kRGF0ZS5zZXRNaW51dGVzKDU5KTtcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0U2Vjb25kcyg1OSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLlRJTUU6XG4gICAgICAgIGlmICh0aGlzLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuQ0FMRU5EQVIpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUuZ2V0RGF5KCkgIT09IHRoaXMubWluLmdldERheSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEhvdXIgPSB0aGlzLnN0YXJ0RGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMubWluO1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0SG91cnMoc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldE1pbnV0ZXMoc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUuZ2V0RGF5KCkgIT09IHRoaXMubWluLmdldERheSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEhvdXIgPSB0aGlzLmVuZERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTWludXRlID0gdGhpcy5lbmREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMubWluO1xuICAgICAgICAgICAgdGhpcy5lbmREYXRlLnNldEhvdXJzKHNlbGVjdGVkSG91cik7XG4gICAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0TWludXRlcyhzZWxlY3RlZE1pbnV0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzUmFuZ2UgJiYgdGhpcy5zdGVwID4gNjAgKiA2MCAqIDEwMDApIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXRNaW51dGVzKDApO1xuICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldFNlY29uZHMoMCk7XG4gICAgICAgICAgdGhpcy5lbmREYXRlLnNldE1pbnV0ZXMoNTkpO1xuICAgICAgICAgIHRoaXMuZW5kRGF0ZS5zZXRTZWNvbmRzKDU5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIGRhdGV0aW1lXG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIGdldFJhbmdlTWluRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydERhdGUgPT09IHVuZGVmaW5lZCA/IHRoaXMubWluIDogdGhpcy5zdGFydERhdGU7XG4gIH1cblxuICBnZXRSYW5nZU1heERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZSA9PT0gdW5kZWZpbmVkID8gdGhpcy5tYXggOiB0aGlzLmVuZERhdGU7XG4gIH1cblxuICAvKipcbiAgICogUm91bmQgZGF0ZSBhdCBhIGNlcnRhaW4gdGltZSwgMTAgbWludXRlcyBieSBEZWZhdWx0XG4gICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB0byBSb3VuZFxuICAgKiBAcGFyYW0gYXRNaW51dGUgLSByb3VuZCB0byBjbG9zZXN0ICdhdE1pbnV0ZScgbWludXRlLCByb3VuZGVkIDEwIGJ5IGRlZmF1bHRcbiAgICogQHJldHVybiB0aGUgcm91bmRlZCBkYXRlXG4gICAqL1xuICBnZXRSb3VuZGVkRGF0ZShkYXRlLCBhdE1pbnV0ZSA9IDEwKSB7XG4gICAgY29uc3QgY29lZmYgPSAxMDAwICogNjAgKiBhdE1pbnV0ZTtcbiAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yb3VuZChkYXRlLmdldFRpbWUoKSAvIGNvZWZmKSAqIGNvZWZmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXAgKHBlcmlvZCkgZGVmaW5pdGlvbiBmcm9tIHRoZSBsYXllciBkaW1lbnNpb24gdGFnXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIGFzIElTTyA4NjAxIGV4YW1wbGU6IFBUMTBNIGZvciAxMCBNaW51dGVzXG4gICAqIEByZXR1cm4gdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgKi9cbiAgZ2V0U3RlcERlZmluaXRpb24oc3RlcCkge1xuICAgIHJldHVybiBtb21lbnQuZHVyYXRpb24oc3RlcCkuYXNNaWxsaXNlY29uZHMoKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cInN0eWxlID09PSAnY2FsZW5kYXInICYmIHR5cGUgIT09ICd5ZWFyJ1wiPlxuICA8ZGl2ICpuZ0lmPVwiIWlzUmFuZ2VcIiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDAgaWdvLWNvbC0xMDAtbVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXG4gICAgICAgIGNsYXNzPVwidGltZS1maWx0ZXItbWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZVwiXG4gICAgICAgIFtmb3JdPVwiZGF0ZXRpbWVQaWNrZXJcIlxuICAgICAgICBtYXRTdWZmaXhcbiAgICAgID48L21hdC1kYXRldGltZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGV0aW1lcGlja2VyXG4gICAgICAgICNkYXRldGltZVBpY2tlclxuICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW29wZW5PbkZvY3VzXT1cInRydWVcIlxuICAgICAgICBbdGltZUludGVydmFsXT1cIjVcIlxuICAgICAgPjwvbWF0LWRhdGV0aW1lcGlja2VyPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIGF1dG9jb21wbGV0ZT1cImZhbHNlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnaWdvLmdlby50aW1lRmlsdGVyLmRhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW21hdERhdGV0aW1lcGlja2VyXT1cImRhdGV0aW1lUGlja2VyXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIHJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgICAgICAoZGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiaXNSYW5nZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ28tY29sIGlnby1jb2wtMTAwXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWZpbHRlci1tYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXCJcbiAgICAgICAgICBbZm9yXT1cIm1pbkRhdGV0aW1lUGlja2VyXCJcbiAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgPjwvbWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRldGltZXBpY2tlclxuICAgICAgICAgICNtaW5EYXRldGltZVBpY2tlclxuICAgICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICAgIFtvcGVuT25Gb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICBbdGltZUludGVydmFsXT1cIjVcIlxuICAgICAgICA+PC9tYXQtZGF0ZXRpbWVwaWNrZXI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwiZmFsc2VcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5zdGFydERhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbbWF0RGF0ZXRpbWVwaWNrZXJdPVwibWluRGF0ZXRpbWVQaWNrZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic3RhcnREYXRlXCJcbiAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgW21heF09XCJnZXRSYW5nZU1heERhdGUoKVwiXG4gICAgICAgICAgcmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgICAgICAgKGlucHV0KT1cIihzdGFydERhdGUpXCJcbiAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ28tY29sIGlnby1jb2wtMTAwXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWZpbHRlci1tYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXCJcbiAgICAgICAgICBbZm9yXT1cIm1heERhdGV0aW1lUGlja2VyXCJcbiAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgPjwvbWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRldGltZXBpY2tlclxuICAgICAgICAgICNtYXhEYXRldGltZVBpY2tlclxuICAgICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICAgIFtvcGVuT25Gb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICBbdGltZUludGVydmFsXT1cIjVcIlxuICAgICAgICA+PC9tYXQtZGF0ZXRpbWVwaWNrZXI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwiZmFsc2VcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5lbmREYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgW21hdERhdGV0aW1lcGlja2VyXT1cIm1heERhdGV0aW1lUGlja2VyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZERhdGVcIlxuICAgICAgICAgIFttaW5dPVwiZ2V0UmFuZ2VNaW5EYXRlKClcIlxuICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICByZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInN0eWxlID09PSAnY2FsZW5kYXInICYmIHR5cGUgPT09ICd5ZWFyJ1wiPlxuICA8ZGl2ICpuZ0lmPVwiIWlzUmFuZ2VcIiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDAgaWdvLWNvbC0xMDAtbVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5kYXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwieWVhclwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiaGFuZGxlWWVhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInllYXJcIiAqbmdGb3I9XCJsZXQgeWVhciBvZiBsaXN0WWVhcnNcIj57e1xuICAgICAgICAgIHllYXJcbiAgICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImlzUmFuZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMFwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8udGltZUZpbHRlci5zdGFydERhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0YXJ0WWVhclwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVZZWFyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydFllYXJcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0YXJ0WWVhciBvZiBzdGFydExpc3RZZWFyc1wiXG4gICAgICAgICAgICA+e3sgc3RhcnRZZWFyIH19PC9tYXQtb3B0aW9uXG4gICAgICAgICAgPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDBcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdpZ28uZ2VvLnRpbWVGaWx0ZXIuZW5kRGF0ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5kWWVhclwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVZZWFyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImVuZFllYXJcIiAqbmdGb3I9XCJsZXQgZW5kWWVhciBvZiBlbmRMaXN0WWVhcnNcIj57e1xuICAgICAgICAgICAgZW5kWWVhclxuICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48YnIgLz5cbjxkaXZcbiAgKm5nSWY9XCIhaXNSYW5nZSAmJiBzdHlsZSA9PT0gJ3NsaWRlcicgJiYgdHlwZSA9PT0gJ3llYXInXCJcbiAgY2xhc3M9XCJpZ28tY29sIGlnby1jb2wtMTAwIGlnby1jb2wtMTAwLW0gbWF0LXR5cG9ncmFwaHlcIlxuPlxuICA8c3Bhbj57eyBzdGFydFllYXIgfX08L3NwYW4+XG4gIDwhLS0gVE9ETzogVGhlICd0aWNrSW50ZXJ2YWwnIHByb3BlcnR5IG5vIGxvbmdlciBleGlzdHMgLS0+XG4gIDxtYXQtc2xpZGVyXG4gICAgaWQ9XCJ0aW1lLXNsaWRlclwiXG4gICAgc3RlcD1cInt7IHN0ZXAgfX1cIlxuICAgIFttaW5dPVwic3RhcnRZZWFyXCJcbiAgICBbbWF4XT1cImVuZFllYXJcIlxuICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgdGh1bWJMYWJlbFxuICAgIFtkaXNhYmxlZF09XCIhb3B0aW9ucy5lbmFibGVkIHx8ICFsYXllci52aXNpYmxlXCJcbiAgICAjbmdTbGlkZXJcbiAgICA+PGlucHV0XG4gICAgICBtYXRTbGlkZXJUaHVtYlxuICAgICAgW3ZhbHVlXT1cImhhbmRsZVNsaWRlclZhbHVlKClcIlxuICAgICAgKGlucHV0KT1cIlxuICAgICAgICBoYW5kbGVTbGlkZXJZZWFyQ2hhbmdlKHtcbiAgICAgICAgICBzb3VyY2U6IG5nU2xpZGVyVGh1bWIsXG4gICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcbiAgICAgICAgICB2YWx1ZTogbmdTbGlkZXJUaHVtYi52YWx1ZVxuICAgICAgICB9KVxuICAgICAgXCJcbiAgICAgICNuZ1NsaWRlclRodW1iPVwibWF0U2xpZGVyVGh1bWJcIlxuICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgaGFuZGxlU2xpZGVyWWVhckNoYW5nZSh7XG4gICAgICAgICAgc291cmNlOiBuZ1NsaWRlclRodW1iLFxuICAgICAgICAgIHBhcmVudDogbmdTbGlkZXIsXG4gICAgICAgICAgdmFsdWU6IG5nU2xpZGVyVGh1bWIudmFsdWVcbiAgICAgICAgfSlcbiAgICAgIFwiXG4gICAgLz5cbiAgPC9tYXQtc2xpZGVyPlxuICA8c3Bhbj57eyBlbmRZZWFyIH19PC9zcGFuPlxuICA8cCAqbmdJZj1cIm9wdGlvbnMuZW5hYmxlZFwiIGNsYXNzPVwiZGF0ZS1iZWxvd1wiPnt7IHllYXIgfX08L3A+XG4gIDxkaXYgI2FjdGlvbnMgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgpXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci50b2dnbGVGaWx0ZXJTdGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgIFtjaGVja2VkXT1cIm9wdGlvbnMuZW5hYmxlZFwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWxheWVyLnZpc2libGVcIlxuICAgID5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cIiFvcHRpb25zLmVuYWJsZWQgfHwgIWxheWVyLnZpc2libGVcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgKGNsaWNrKT1cInBsYXlZZWFyKCRldmVudClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj57eyBwbGF5SWNvbiB9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cIiFvcHRpb25zLmVuYWJsZWQgfHwgIWxheWVyLnZpc2libGVcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKCRldmVudClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj57eyByZXNldEljb24gfX08L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2XG4gICpuZ0lmPVwic3R5bGUgPT09ICdzbGlkZXInICYmIHR5cGUgIT09ICd5ZWFyJ1wiXG4gIGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMCBpZ28tY29sLTEwMC1tXCJcbj5cbiAgPCEtLSBUT0RPOiBUaGUgJ3RpY2tJbnRlcnZhbCcgcHJvcGVydHkgbm8gbG9uZ2VyIGV4aXN0cyAtLT5cbiAgPG1hdC1zbGlkZXJcbiAgICBpZD1cInRpbWUtc2xpZGVyXCJcbiAgICBzdGVwPVwie3sgc3RlcCB9fVwiXG4gICAgW21pbl09XCJkYXRlVG9OdW1iZXIobWluKVwiXG4gICAgW21heF09XCJkYXRlVG9OdW1iZXIobWF4KVwiXG4gICAgdGh1bWJMYWJlbFxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiaGFuZGxlU2xpZGVyRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAjbmdTbGlkZXJcbiAgICA+PGlucHV0XG4gICAgICBtYXRTbGlkZXJUaHVtYlxuICAgICAgW3ZhbHVlXT1cImhhbmRsZVNsaWRlclZhbHVlKClcIlxuICAgICAgKGlucHV0KT1cIlxuICAgICAgICBoYW5kbGVTbGlkZXJEYXRlQ2hhbmdlKHtcbiAgICAgICAgICBzb3VyY2U6IG5nU2xpZGVyVGh1bWIsXG4gICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcbiAgICAgICAgICB2YWx1ZTogbmdTbGlkZXJUaHVtYi52YWx1ZVxuICAgICAgICB9KVxuICAgICAgXCJcbiAgICAgICNuZ1NsaWRlclRodW1iPVwibWF0U2xpZGVyVGh1bWJcIlxuICAgIC8+XG4gIDwvbWF0LXNsaWRlcj5cbiAgPHAgY2xhc3M9XCJkYXRlLWJlbG93XCI+e3sgaGFuZGxlU2xpZGVyVG9vbHRpcCgpIH19PC9wPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwicGxheUZpbHRlcigkZXZlbnQpXCI+XG4gICAgPG1hdC1pY29uPnt7IHBsYXlJY29uIH19PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==