@igo2/geo 1.11.1 → 1.13.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (989) 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/{esm2015/igo2-geo.js → esm2020/igo2-geo.mjs} +0 -0
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +299 -0
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +268 -0
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +244 -0
  10. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +80 -0
  11. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +209 -0
  12. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +79 -0
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +217 -0
  14. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +95 -0
  15. package/esm2020/lib/catalog/catalog.module.mjs +53 -0
  16. package/esm2020/lib/catalog/index.mjs +5 -0
  17. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +95 -0
  18. package/esm2020/lib/catalog/shared/catalog.enum.mjs +16 -0
  19. package/esm2020/lib/catalog/shared/catalog.interface.mjs +2 -0
  20. package/esm2020/lib/catalog/shared/catalog.service.mjs +606 -0
  21. package/esm2020/lib/catalog/shared/index.mjs +5 -0
  22. package/esm2020/lib/datasource/datasource.module.mjs +22 -0
  23. package/esm2020/lib/datasource/index.mjs +3 -0
  24. package/esm2020/lib/datasource/shared/capabilities.service.mjs +426 -0
  25. package/esm2020/lib/datasource/shared/datasource.service.mjs +236 -0
  26. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +2 -0
  27. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +2 -0
  28. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +2 -0
  29. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +145 -0
  30. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +2 -0
  31. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +109 -0
  32. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +2 -0
  33. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +15 -0
  34. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +3 -0
  35. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +2 -0
  36. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +29 -0
  37. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +2 -0
  38. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +43 -0
  39. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +2 -0
  40. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +57 -0
  41. package/esm2020/lib/datasource/shared/datasources/index.mjs +36 -0
  42. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +2 -0
  43. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +28 -0
  44. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +2 -0
  45. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +12 -0
  46. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +2 -0
  47. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +49 -0
  48. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +2 -0
  49. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +15 -0
  50. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +2 -0
  51. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +54 -0
  52. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +2 -0
  53. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +74 -0
  54. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +152 -0
  55. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +2 -0
  56. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -0
  57. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +207 -0
  58. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +2 -0
  59. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +16 -0
  60. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +2 -0
  61. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +9 -0
  62. package/esm2020/lib/datasource/shared/index.mjs +5 -0
  63. package/esm2020/lib/datasource/shared/options/index.mjs +5 -0
  64. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +2 -0
  65. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +15 -0
  66. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +81 -0
  67. package/esm2020/lib/datasource/shared/options/options.service.mjs +3 -0
  68. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +357 -0
  69. package/esm2020/lib/datasource/utils/index.mjs +3 -0
  70. package/esm2020/lib/datasource/utils/tilegrid.mjs +20 -0
  71. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +224 -0
  72. package/esm2020/lib/directions/directions-buttons/index.mjs +2 -0
  73. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +290 -0
  74. package/esm2020/lib/directions/directions-inputs/index.mjs +2 -0
  75. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +196 -0
  76. package/esm2020/lib/directions/directions-results/index.mjs +2 -0
  77. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +2 -0
  78. package/esm2020/lib/directions/directions-sources/directions-source.mjs +3 -0
  79. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +16 -0
  80. package/esm2020/lib/directions/directions-sources/index.mjs +5 -0
  81. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +99 -0
  82. package/esm2020/lib/directions/directions.component.mjs +311 -0
  83. package/esm2020/lib/directions/directions.module.mjs +102 -0
  84. package/esm2020/lib/directions/index.mjs +7 -0
  85. package/esm2020/lib/directions/shared/directions-source.service.mjs +17 -0
  86. package/esm2020/lib/directions/shared/directions.enum.mjs +28 -0
  87. package/esm2020/lib/directions/shared/directions.interface.mjs +2 -0
  88. package/esm2020/lib/directions/shared/directions.service.mjs +29 -0
  89. package/esm2020/lib/directions/shared/directions.utils.mjs +510 -0
  90. package/esm2020/lib/directions/shared/index.mjs +6 -0
  91. package/esm2020/lib/directions/shared/store.mjs +24 -0
  92. package/esm2020/lib/download/download-button/download-button.component.mjs +61 -0
  93. package/esm2020/lib/download/download-button/index.mjs +2 -0
  94. package/esm2020/lib/download/download.module.mjs +42 -0
  95. package/esm2020/lib/download/index.mjs +3 -0
  96. package/esm2020/lib/download/shared/download.interface.mjs +2 -0
  97. package/esm2020/lib/download/shared/download.service.mjs +65 -0
  98. package/esm2020/lib/download/shared/index.mjs +3 -0
  99. package/esm2020/lib/draw/draw/draw-popup.component.mjs +61 -0
  100. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +48 -0
  101. package/esm2020/lib/draw/draw/draw.component.mjs +714 -0
  102. package/esm2020/lib/draw/draw/draw.module.mjs +100 -0
  103. package/esm2020/lib/draw/drawingTool.module.mjs +20 -0
  104. package/esm2020/lib/draw/index.mjs +3 -0
  105. package/esm2020/lib/draw/shared/draw-icon.service.mjs +27 -0
  106. package/esm2020/lib/draw/shared/draw-style.service.mjs +173 -0
  107. package/esm2020/lib/draw/shared/draw.enum.mjs +24 -0
  108. package/esm2020/lib/draw/shared/draw.interface.mjs +2 -0
  109. package/esm2020/lib/draw/shared/draw.utils.mjs +104 -0
  110. package/esm2020/lib/draw/shared/index.mjs +6 -0
  111. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +377 -0
  112. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +54 -0
  113. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +48 -0
  114. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +112 -0
  115. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +34 -0
  116. package/esm2020/lib/feature/feature.module.mjs +28 -0
  117. package/esm2020/lib/feature/index.mjs +4 -0
  118. package/esm2020/lib/feature/shared/feature.enums.mjs +9 -0
  119. package/esm2020/lib/feature/shared/feature.interfaces.mjs +2 -0
  120. package/esm2020/lib/feature/shared/feature.utils.mjs +348 -0
  121. package/esm2020/lib/feature/shared/index.mjs +7 -0
  122. package/esm2020/lib/feature/shared/store.mjs +112 -0
  123. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +113 -0
  124. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +94 -0
  125. package/esm2020/lib/feature/shared/strategies/index.mjs +6 -0
  126. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +104 -0
  127. package/esm2020/lib/feature/shared/strategies/loading.mjs +133 -0
  128. package/esm2020/lib/feature/shared/strategies/selection.mjs +370 -0
  129. package/esm2020/lib/feature/shared/strategies.utils.mjs +37 -0
  130. package/esm2020/lib/filter/filter.module.mjs +289 -0
  131. package/esm2020/lib/filter/index.mjs +16 -0
  132. package/esm2020/lib/filter/ogc-filter-button/index.mjs +2 -0
  133. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +140 -0
  134. package/esm2020/lib/filter/ogc-filter-form/index.mjs +2 -0
  135. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +645 -0
  136. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +2 -0
  137. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1302 -0
  138. package/esm2020/lib/filter/ogc-filter-time/index.mjs +3 -0
  139. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +177 -0
  140. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +871 -0
  141. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +2 -0
  142. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +59 -0
  143. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +2 -0
  144. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +302 -0
  145. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +3 -0
  146. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +31 -0
  147. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +31 -0
  148. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +55 -0
  149. package/esm2020/lib/filter/shared/index.mjs +12 -0
  150. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
  151. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +30 -0
  152. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +2 -0
  153. package/esm2020/lib/filter/shared/ogc-filter.mjs +692 -0
  154. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +46 -0
  155. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +23 -0
  156. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +2 -0
  157. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +269 -0
  158. package/esm2020/lib/filter/shared/time-filter.enum.mjs +13 -0
  159. package/esm2020/lib/filter/shared/time-filter.interface.mjs +2 -0
  160. package/esm2020/lib/filter/shared/time-filter.service.mjs +107 -0
  161. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +2 -0
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1076 -0
  163. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +2 -0
  164. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +208 -0
  165. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +2 -0
  166. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +144 -0
  167. package/esm2020/lib/filter/time-filter-button/index.mjs +2 -0
  168. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +78 -0
  169. package/esm2020/lib/filter/time-filter-form/index.mjs +2 -0
  170. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +734 -0
  171. package/esm2020/lib/filter/time-filter-item/index.mjs +2 -0
  172. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +119 -0
  173. package/esm2020/lib/filter/time-filter-list/index.mjs +3 -0
  174. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +31 -0
  175. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +39 -0
  176. package/esm2020/lib/geo.module.mjs +102 -0
  177. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +511 -0
  178. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +189 -0
  179. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +64 -0
  180. package/esm2020/lib/geometry/geometry.module.mjs +27 -0
  181. package/esm2020/lib/geometry/index.mjs +4 -0
  182. package/esm2020/lib/geometry/shared/controls/draw.mjs +271 -0
  183. package/esm2020/lib/geometry/shared/controls/index.mjs +4 -0
  184. package/esm2020/lib/geometry/shared/controls/modify.mjs +521 -0
  185. package/esm2020/lib/geometry/shared/controls/slice.mjs +177 -0
  186. package/esm2020/lib/geometry/shared/geometry.errors.mjs +26 -0
  187. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +2 -0
  188. package/esm2020/lib/geometry/shared/geometry.utils.mjs +122 -0
  189. package/esm2020/lib/geometry/shared/index.mjs +5 -0
  190. package/esm2020/lib/import-export/export-button/export-button.component.mjs +64 -0
  191. package/esm2020/lib/import-export/export-button/index.mjs +2 -0
  192. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1190 -0
  193. package/esm2020/lib/import-export/import-export/index.mjs +2 -0
  194. package/esm2020/lib/import-export/import-export.module.mjs +93 -0
  195. package/esm2020/lib/import-export/index.mjs +5 -0
  196. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +135 -0
  197. package/esm2020/lib/import-export/shared/export.errors.mjs +15 -0
  198. package/esm2020/lib/import-export/shared/export.interface.mjs +2 -0
  199. package/esm2020/lib/import-export/shared/export.service.mjs +195 -0
  200. package/esm2020/lib/import-export/shared/export.type.mjs +4 -0
  201. package/esm2020/lib/import-export/shared/export.utils.mjs +55 -0
  202. package/esm2020/lib/import-export/shared/import.errors.mjs +39 -0
  203. package/esm2020/lib/import-export/shared/import.interface.mjs +2 -0
  204. package/esm2020/lib/import-export/shared/import.service.mjs +195 -0
  205. package/esm2020/lib/import-export/shared/import.utils.mjs +234 -0
  206. package/esm2020/lib/import-export/shared/index.mjs +11 -0
  207. package/esm2020/lib/import-export/style-list/index.mjs +5 -0
  208. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +2 -0
  209. package/esm2020/lib/import-export/style-list/style-list.module.mjs +23 -0
  210. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +21 -0
  211. package/esm2020/lib/import-export/style-list/style-list.service.mjs +51 -0
  212. package/esm2020/lib/layer/index.mjs +10 -0
  213. package/esm2020/lib/layer/layer-item/index.mjs +2 -0
  214. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +300 -0
  215. package/esm2020/lib/layer/layer-legend/index.mjs +2 -0
  216. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +382 -0
  217. package/esm2020/lib/layer/layer-legend-item/index.mjs +2 -0
  218. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +84 -0
  219. package/esm2020/lib/layer/layer-legend-list/index.mjs +3 -0
  220. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +48 -0
  221. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +195 -0
  222. package/esm2020/lib/layer/layer-list/index.mjs +4 -0
  223. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +59 -0
  224. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1024 -0
  225. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +19 -0
  226. package/esm2020/lib/layer/layer-list-tool/index.mjs +5 -0
  227. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +165 -0
  228. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +7 -0
  229. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +2 -0
  230. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +22 -0
  231. package/esm2020/lib/layer/layer.module.mjs +173 -0
  232. package/esm2020/lib/layer/shared/clusterParam.mjs +2 -0
  233. package/esm2020/lib/layer/shared/index.mjs +7 -0
  234. package/esm2020/lib/layer/shared/layer.enums.mjs +2 -0
  235. package/esm2020/lib/layer/shared/layer.service.mjs +186 -0
  236. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +2 -0
  237. package/esm2020/lib/layer/shared/layers/any-layer.mjs +2 -0
  238. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +2 -0
  239. package/esm2020/lib/layer/shared/layers/image-layer.mjs +68 -0
  240. package/esm2020/lib/layer/shared/layers/index.mjs +13 -0
  241. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +17 -0
  242. package/esm2020/lib/layer/shared/layers/layer.mjs +170 -0
  243. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +2 -0
  244. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +47 -0
  245. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +2 -0
  246. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +376 -0
  247. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +2 -0
  248. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +104 -0
  249. package/esm2020/lib/layer/shared/style.service.mjs +356 -0
  250. package/esm2020/lib/layer/shared/vector-style.interface.mjs +2 -0
  251. package/esm2020/lib/layer/track-feature-button/index.mjs +2 -0
  252. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +59 -0
  253. package/esm2020/lib/layer/utils/image-watcher.mjs +62 -0
  254. package/esm2020/lib/layer/utils/index.mjs +7 -0
  255. package/esm2020/lib/layer/utils/layer.utils.mjs +10 -0
  256. package/esm2020/lib/layer/utils/layerSync-watcher.mjs +242 -0
  257. package/esm2020/lib/layer/utils/outputLegend.mjs +27 -0
  258. package/esm2020/lib/layer/utils/tile-watcher.mjs +50 -0
  259. package/esm2020/lib/layer/utils/vector-watcher.mjs +48 -0
  260. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +20 -0
  261. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +97 -0
  262. package/esm2020/lib/map/baselayers-switcher/index.mjs +3 -0
  263. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +133 -0
  264. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +76 -0
  265. package/esm2020/lib/map/geolocate-button/index.mjs +2 -0
  266. package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +63 -0
  267. package/{esm2015/lib/map/home-extent-button/index.js → esm2020/lib/map/home-extent-button/index.mjs} +0 -0
  268. package/esm2020/lib/map/index.mjs +14 -0
  269. package/esm2020/lib/map/info-section/index.mjs +2 -0
  270. package/esm2020/lib/map/info-section/info-section.component.mjs +30 -0
  271. package/esm2020/lib/map/map-browser/index.mjs +2 -0
  272. package/esm2020/lib/map/map-browser/map-browser.component.mjs +66 -0
  273. package/esm2020/lib/map/map-center/index.mjs +2 -0
  274. package/esm2020/lib/map/map-center/map-center.component.mjs +50 -0
  275. package/esm2020/lib/map/map.module.mjs +127 -0
  276. package/esm2020/lib/map/menu-button/index.mjs +2 -0
  277. package/esm2020/lib/map/menu-button/menu-button.component.mjs +62 -0
  278. package/esm2020/lib/map/offline-button/index.mjs +2 -0
  279. package/esm2020/lib/map/offline-button/offline-button.component.mjs +76 -0
  280. package/esm2020/lib/map/rotation-button/index.mjs +2 -0
  281. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +91 -0
  282. package/esm2020/lib/map/shared/controllers/controller.mjs +42 -0
  283. package/esm2020/lib/map/shared/controllers/geolocation.mjs +308 -0
  284. package/esm2020/lib/map/shared/controllers/index.mjs +4 -0
  285. package/esm2020/lib/map/shared/controllers/view.mjs +342 -0
  286. package/esm2020/lib/map/shared/hover-feature.directive.mjs +506 -0
  287. package/esm2020/lib/map/shared/index.mjs +13 -0
  288. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +107 -0
  289. package/esm2020/lib/map/shared/map.enums.mjs +6 -0
  290. package/esm2020/lib/map/shared/map.interface.mjs +2 -0
  291. package/esm2020/lib/map/shared/map.mjs +417 -0
  292. package/esm2020/lib/map/shared/map.service.mjs +29 -0
  293. package/esm2020/lib/map/shared/map.utils.mjs +459 -0
  294. package/esm2020/lib/map/shared/mapOffline.directive.mjs +163 -0
  295. package/esm2020/lib/map/shared/projection.interfaces.mjs +2 -0
  296. package/esm2020/lib/map/shared/projection.service.mjs +65 -0
  297. package/esm2020/lib/map/shared/projection.utils.mjs +64 -0
  298. package/esm2020/lib/map/swipe-control/index.mjs +2 -0
  299. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +193 -0
  300. package/esm2020/lib/map/utils/layer-watcher.mjs +58 -0
  301. package/esm2020/lib/map/wake-lock-button/index.mjs +2 -0
  302. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +114 -0
  303. package/esm2020/lib/map/zoom-button/index.mjs +2 -0
  304. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +40 -0
  305. package/esm2020/lib/measure/index.mjs +4 -0
  306. package/esm2020/lib/measure/measure.module.mjs +20 -0
  307. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +37 -0
  308. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +180 -0
  309. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +140 -0
  310. package/esm2020/lib/measure/measurer/measurer.component.mjs +1042 -0
  311. package/esm2020/lib/measure/measurer/measurer.module.mjs +94 -0
  312. package/esm2020/lib/measure/shared/index.mjs +4 -0
  313. package/esm2020/lib/measure/shared/measure.enum.mjs +37 -0
  314. package/esm2020/lib/measure/shared/measure.interfaces.mjs +2 -0
  315. package/esm2020/lib/measure/shared/measure.utils.mjs +489 -0
  316. package/esm2020/lib/metadata/index.mjs +3 -0
  317. package/esm2020/lib/metadata/metadata-button/index.mjs +2 -0
  318. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -0
  319. package/esm2020/lib/metadata/metadata.module.mjs +55 -0
  320. package/esm2020/lib/metadata/shared/index.mjs +3 -0
  321. package/esm2020/lib/metadata/shared/metadata.interface.mjs +2 -0
  322. package/esm2020/lib/metadata/shared/metadata.service.mjs +19 -0
  323. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +6 -0
  324. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +2 -0
  325. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +161 -0
  326. package/esm2020/lib/offline/geoDB/index.mjs +4 -0
  327. package/esm2020/lib/offline/index.mjs +3 -0
  328. package/esm2020/lib/offline/shared/geo-network.service.mjs +66 -0
  329. package/esm2020/lib/offline/shared/index.mjs +2 -0
  330. package/esm2020/lib/overlay/index.mjs +2 -0
  331. package/esm2020/lib/overlay/overlay.module.mjs +23 -0
  332. package/esm2020/lib/overlay/shared/index.mjs +7 -0
  333. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +69 -0
  334. package/esm2020/lib/overlay/shared/overlay.directive.mjs +33 -0
  335. package/esm2020/lib/overlay/shared/overlay.enum.mjs +8 -0
  336. package/esm2020/lib/overlay/shared/overlay.mjs +130 -0
  337. package/esm2020/lib/overlay/shared/overlay.service.mjs +27 -0
  338. package/esm2020/lib/overlay/shared/overlay.utils.mjs +103 -0
  339. package/esm2020/lib/print/index.mjs +4 -0
  340. package/esm2020/lib/print/print/print.component.mjs +123 -0
  341. package/esm2020/lib/print/print-form/index.mjs +2 -0
  342. package/esm2020/lib/print/print-form/print-form.component.mjs +405 -0
  343. package/esm2020/lib/print/print.module.mjs +65 -0
  344. package/esm2020/lib/print/shared/index.mjs +4 -0
  345. package/esm2020/lib/print/shared/print.interface.mjs +2 -0
  346. package/esm2020/lib/print/shared/print.service.mjs +807 -0
  347. package/esm2020/lib/print/shared/print.type.mjs +30 -0
  348. package/esm2020/lib/query/index.mjs +2 -0
  349. package/esm2020/lib/query/query.module.mjs +29 -0
  350. package/esm2020/lib/query/shared/index.mjs +7 -0
  351. package/esm2020/lib/query/shared/query-search-source.mjs +35 -0
  352. package/esm2020/lib/query/shared/query-search-source.providers.mjs +22 -0
  353. package/esm2020/lib/query/shared/query.directive.mjs +261 -0
  354. package/esm2020/lib/query/shared/query.enums.mjs +30 -0
  355. package/esm2020/lib/query/shared/query.interfaces.mjs +2 -0
  356. package/esm2020/lib/query/shared/query.service.mjs +613 -0
  357. package/esm2020/lib/query/shared/query.utils.mjs +37 -0
  358. package/esm2020/lib/search/index.mjs +12 -0
  359. package/esm2020/lib/search/search-bar/search-bar.component.mjs +489 -0
  360. package/esm2020/lib/search/search-bar/search-bar.module.mjs +75 -0
  361. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +35 -0
  362. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +193 -0
  363. package/esm2020/lib/search/search-results/search-results-item.component.mjs +124 -0
  364. package/esm2020/lib/search/search-results/search-results.component.mjs +331 -0
  365. package/esm2020/lib/search/search-results/search-results.module.mjs +77 -0
  366. package/esm2020/lib/search/search-selector/search-selector.component.mjs +123 -0
  367. package/esm2020/lib/search/search-selector/search-selector.module.mjs +56 -0
  368. package/esm2020/lib/search/search-settings/search-settings.component.mjs +418 -0
  369. package/esm2020/lib/search/search-settings/search-settings.module.mjs +60 -0
  370. package/esm2020/lib/search/search.module.mjs +67 -0
  371. package/esm2020/lib/search/shared/index.mjs +9 -0
  372. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +322 -0
  373. package/esm2020/lib/search/shared/search-source-service.providers.mjs +20 -0
  374. package/esm2020/lib/search/shared/search-source.service.mjs +47 -0
  375. package/esm2020/lib/search/shared/search.enums.mjs +4 -0
  376. package/esm2020/lib/search/shared/search.interfaces.mjs +2 -0
  377. package/esm2020/lib/search/shared/search.service.mjs +118 -0
  378. package/esm2020/lib/search/shared/search.utils.mjs +78 -0
  379. package/esm2020/lib/search/shared/sources/cadastre.mjs +126 -0
  380. package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +23 -0
  381. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +2 -0
  382. package/esm2020/lib/search/shared/sources/coordinates.mjs +147 -0
  383. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +40 -0
  384. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +2 -0
  385. package/esm2020/lib/search/shared/sources/icherche.mjs +755 -0
  386. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +66 -0
  387. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +2 -0
  388. package/esm2020/lib/search/shared/sources/ilayer.mjs +320 -0
  389. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +40 -0
  390. package/esm2020/lib/search/shared/sources/index.mjs +20 -0
  391. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +2 -0
  392. package/esm2020/lib/search/shared/sources/nominatim.mjs +253 -0
  393. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +23 -0
  394. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +2 -0
  395. package/esm2020/lib/search/shared/sources/source.mjs +179 -0
  396. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +2 -0
  397. package/esm2020/lib/search/shared/sources/storedqueries.mjs +425 -0
  398. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +41 -0
  399. package/esm2020/lib/toast/index.mjs +2 -0
  400. package/esm2020/lib/toast/toast.component.mjs +113 -0
  401. package/esm2020/lib/toast/toast.module.mjs +45 -0
  402. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +2 -0
  403. package/esm2020/lib/utils/commonVectorStyle.mjs +75 -0
  404. package/esm2020/lib/utils/googleLinks.mjs +13 -0
  405. package/esm2020/lib/utils/id-generator.mjs +110 -0
  406. package/esm2020/lib/utils/index.mjs +6 -0
  407. package/esm2020/lib/utils/osmLinks.mjs +10 -0
  408. package/esm2020/lib/wkt/index.mjs +2 -0
  409. package/esm2020/lib/wkt/shared/index.mjs +2 -0
  410. package/esm2020/lib/wkt/shared/wkt.service.mjs +239 -0
  411. package/esm2020/lib/wkt/wkt.module.mjs +22 -0
  412. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +48 -0
  413. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +36 -0
  414. package/esm2020/lib/workspace/confirmation-popup/index.mjs +3 -0
  415. package/esm2020/lib/workspace/index.mjs +8 -0
  416. package/esm2020/lib/workspace/shared/edition-workspace.mjs +278 -0
  417. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +642 -0
  418. package/esm2020/lib/workspace/shared/feature-workspace.mjs +35 -0
  419. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +150 -0
  420. package/esm2020/lib/workspace/shared/index.mjs +8 -0
  421. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +35 -0
  422. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +150 -0
  423. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +261 -0
  424. package/esm2020/lib/workspace/shared/workspace.utils.mjs +24 -0
  425. package/esm2020/lib/workspace/widgets/index.mjs +4 -0
  426. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +47 -0
  427. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +36 -0
  428. package/esm2020/lib/workspace/widgets/widgets.mjs +15 -0
  429. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +133 -0
  430. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +28 -0
  431. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +113 -0
  432. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +28 -0
  433. package/esm2020/lib/workspace/workspace.module.mjs +62 -0
  434. package/esm2020/public_api.mjs +55 -0
  435. package/fesm2015/igo2-geo.mjs +42904 -0
  436. package/fesm2015/igo2-geo.mjs.map +1 -0
  437. package/fesm2020/igo2-geo.mjs +41183 -0
  438. package/fesm2020/igo2-geo.mjs.map +1 -0
  439. package/{igo2-geo.d.ts → index.d.ts} +0 -0
  440. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
  441. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  442. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
  443. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -4
  444. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  445. package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
  446. package/lib/catalog/shared/catalog.interface.d.ts +9 -1
  447. package/lib/catalog/shared/catalog.service.d.ts +1 -0
  448. package/lib/datasource/shared/datasources/datasource.interface.d.ts +7 -1
  449. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +1 -1
  450. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
  451. package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
  452. package/lib/directions/directions.component.d.ts +1 -1
  453. package/lib/download/download-button/download-button.component.d.ts +1 -1
  454. package/lib/draw/draw/draw-popup.component.d.ts +4 -2
  455. package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
  456. package/lib/draw/draw/draw.component.d.ts +22 -5
  457. package/lib/draw/shared/draw-style.service.d.ts +6 -0
  458. package/lib/draw/shared/draw.enum.d.ts +15 -0
  459. package/lib/feature/feature-details/feature-details.component.d.ts +13 -3
  460. package/lib/feature/feature-details/feature-details.directive.d.ts +3 -14
  461. package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
  462. package/lib/feature/shared/feature.interfaces.d.ts +2 -2
  463. package/lib/filter/filter.module.d.ts +1 -1
  464. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  465. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -1
  466. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +33 -15
  467. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  468. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +6 -6
  469. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
  470. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  471. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  472. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +1 -1
  473. package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
  474. package/lib/filter/shared/ogc-filter.interface.d.ts +19 -2
  475. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +5 -5
  476. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +4 -4
  477. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -3
  478. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  479. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +1 -1
  480. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  481. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  482. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
  483. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
  484. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +3 -3
  485. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  486. package/lib/import-export/import-export/import-export.component.d.ts +5 -5
  487. package/lib/import-export/shared/drop-geo-file.directive.d.ts +1 -1
  488. package/lib/import-export/shared/import.utils.d.ts +1 -1
  489. package/lib/layer/layer-item/layer-item.component.d.ts +2 -1
  490. package/lib/layer/layer-legend/layer-legend.component.d.ts +4 -3
  491. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
  492. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  493. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  494. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
  495. package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
  496. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  497. package/lib/layer/shared/layer.service.d.ts +6 -3
  498. package/lib/layer/shared/layers/layer.interface.d.ts +1 -0
  499. package/lib/layer/shared/layers/vector-layer.d.ts +5 -1
  500. package/lib/layer/shared/style.service.d.ts +38 -3
  501. package/lib/layer/shared/vector-style.interface.d.ts +11 -0
  502. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  503. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
  504. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  505. package/lib/map/geolocate-button/geolocate-button.component.d.ts +9 -2
  506. package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
  507. package/lib/map/index.d.ts +1 -0
  508. package/lib/map/info-section/info-section.component.d.ts +1 -1
  509. package/lib/map/map-browser/map-browser.component.d.ts +1 -1
  510. package/lib/map/map-center/map-center.component.d.ts +1 -1
  511. package/lib/map/map.module.d.ts +13 -12
  512. package/lib/map/menu-button/menu-button.component.d.ts +1 -1
  513. package/lib/map/offline-button/offline-button.component.d.ts +1 -1
  514. package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
  515. package/lib/map/shared/controllers/geolocation.d.ts +112 -0
  516. package/lib/map/shared/controllers/index.d.ts +1 -0
  517. package/lib/map/shared/controllers/view.d.ts +7 -0
  518. package/lib/map/shared/hover-feature.directive.d.ts +2 -2
  519. package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
  520. package/lib/map/shared/map.d.ts +7 -19
  521. package/lib/map/shared/map.interface.d.ts +0 -1
  522. package/lib/map/shared/mapOffline.directive.d.ts +1 -1
  523. package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
  524. package/lib/map/wake-lock-button/index.d.ts +1 -0
  525. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -0
  526. package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
  527. package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
  528. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  529. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  530. package/lib/measure/measurer/measurer.component.d.ts +1 -1
  531. package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
  532. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -0
  533. package/lib/offline/geoDB/geoDB.interface.d.ts +9 -0
  534. package/lib/offline/geoDB/geoDB.service.d.ts +35 -0
  535. package/lib/offline/geoDB/index.d.ts +3 -0
  536. package/lib/offline/index.d.ts +2 -0
  537. package/lib/offline/shared/geo-network.service.d.ts +28 -0
  538. package/lib/offline/shared/index.d.ts +1 -0
  539. package/lib/overlay/shared/overlay.directive.d.ts +1 -1
  540. package/lib/print/print/print.component.d.ts +1 -1
  541. package/lib/print/print-form/print-form.component.d.ts +17 -17
  542. package/lib/print/shared/print.service.d.ts +9 -3
  543. package/lib/query/query.module.d.ts +2 -1
  544. package/lib/query/shared/query.directive.d.ts +1 -1
  545. package/lib/query/shared/query.service.d.ts +7 -1
  546. package/lib/search/search-bar/search-bar.component.d.ts +1 -1
  547. package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
  548. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  549. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  550. package/lib/search/search-results/search-results.component.d.ts +1 -1
  551. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  552. package/lib/search/search-settings/search-settings.component.d.ts +1 -1
  553. package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
  554. package/lib/toast/toast.component.d.ts +1 -1
  555. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  556. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
  557. package/lib/workspace/shared/edition-workspace.d.ts +2 -1
  558. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
  559. package/lib/workspace/shared/feature-workspace.service.d.ts +3 -2
  560. package/lib/workspace/shared/wfs-workspace.service.d.ts +3 -2
  561. package/lib/workspace/shared/wms-workspace.service.d.ts +5 -2
  562. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  563. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
  564. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
  565. package/ngcc.config.js +3 -3
  566. package/package.json +35 -20
  567. package/public_api.d.ts +1 -0
  568. package/style/geo.theming.scss +12 -12
  569. package/bundles/igo2-geo.umd.js +0 -45805
  570. package/bundles/igo2-geo.umd.js.map +0 -1
  571. package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +0 -305
  572. package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +0 -274
  573. package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +0 -248
  574. package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +0 -82
  575. package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +0 -235
  576. package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +0 -85
  577. package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +0 -224
  578. package/esm2015/lib/catalog/catalog-library/catalog-library.module.js +0 -97
  579. package/esm2015/lib/catalog/catalog.module.js +0 -55
  580. package/esm2015/lib/catalog/index.js +0 -5
  581. package/esm2015/lib/catalog/shared/catalog.abstract.js +0 -95
  582. package/esm2015/lib/catalog/shared/catalog.enum.js +0 -16
  583. package/esm2015/lib/catalog/shared/catalog.interface.js +0 -2
  584. package/esm2015/lib/catalog/shared/catalog.service.js +0 -535
  585. package/esm2015/lib/catalog/shared/index.js +0 -5
  586. package/esm2015/lib/datasource/datasource.module.js +0 -22
  587. package/esm2015/lib/datasource/index.js +0 -3
  588. package/esm2015/lib/datasource/shared/capabilities.service.js +0 -427
  589. package/esm2015/lib/datasource/shared/datasource.service.js +0 -236
  590. package/esm2015/lib/datasource/shared/datasources/any-datasource.interface.js +0 -2
  591. package/esm2015/lib/datasource/shared/datasources/any-datasource.js +0 -2
  592. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js +0 -2
  593. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js +0 -145
  594. package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +0 -2
  595. package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +0 -109
  596. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js +0 -2
  597. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +0 -15
  598. package/esm2015/lib/datasource/shared/datasources/data.service.js +0 -3
  599. package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +0 -2
  600. package/esm2015/lib/datasource/shared/datasources/datasource.js +0 -29
  601. package/esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js +0 -2
  602. package/esm2015/lib/datasource/shared/datasources/feature-datasource.js +0 -43
  603. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js +0 -2
  604. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js +0 -57
  605. package/esm2015/lib/datasource/shared/datasources/index.js +0 -36
  606. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +0 -2
  607. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +0 -28
  608. package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +0 -2
  609. package/esm2015/lib/datasource/shared/datasources/osm-datasource.js +0 -12
  610. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js +0 -2
  611. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js +0 -49
  612. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js +0 -2
  613. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js +0 -15
  614. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +0 -2
  615. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +0 -54
  616. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +0 -2
  617. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +0 -71
  618. package/esm2015/lib/datasource/shared/datasources/wfs.service.js +0 -153
  619. package/esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js +0 -2
  620. package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +0 -202
  621. package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +0 -207
  622. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +0 -2
  623. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.js +0 -16
  624. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +0 -2
  625. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +0 -9
  626. package/esm2015/lib/datasource/shared/index.js +0 -5
  627. package/esm2015/lib/datasource/shared/options/index.js +0 -5
  628. package/esm2015/lib/datasource/shared/options/options-api.interface.js +0 -2
  629. package/esm2015/lib/datasource/shared/options/options-api.providers.js +0 -15
  630. package/esm2015/lib/datasource/shared/options/options-api.service.js +0 -81
  631. package/esm2015/lib/datasource/shared/options/options.service.js +0 -3
  632. package/esm2015/lib/datasource/utils/esri-style-generator.js +0 -357
  633. package/esm2015/lib/datasource/utils/index.js +0 -3
  634. package/esm2015/lib/datasource/utils/tilegrid.js +0 -20
  635. package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +0 -229
  636. package/esm2015/lib/directions/directions-buttons/index.js +0 -2
  637. package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +0 -300
  638. package/esm2015/lib/directions/directions-inputs/index.js +0 -2
  639. package/esm2015/lib/directions/directions-results/directions-results.component.js +0 -204
  640. package/esm2015/lib/directions/directions-results/index.js +0 -2
  641. package/esm2015/lib/directions/directions-sources/directions-source.interface.js +0 -2
  642. package/esm2015/lib/directions/directions-sources/directions-source.js +0 -3
  643. package/esm2015/lib/directions/directions-sources/directions-source.provider.js +0 -16
  644. package/esm2015/lib/directions/directions-sources/index.js +0 -5
  645. package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +0 -99
  646. package/esm2015/lib/directions/directions.component.js +0 -316
  647. package/esm2015/lib/directions/directions.module.js +0 -104
  648. package/esm2015/lib/directions/index.js +0 -7
  649. package/esm2015/lib/directions/shared/directions-source.service.js +0 -17
  650. package/esm2015/lib/directions/shared/directions.enum.js +0 -28
  651. package/esm2015/lib/directions/shared/directions.interface.js +0 -2
  652. package/esm2015/lib/directions/shared/directions.service.js +0 -29
  653. package/esm2015/lib/directions/shared/directions.utils.js +0 -510
  654. package/esm2015/lib/directions/shared/index.js +0 -6
  655. package/esm2015/lib/directions/shared/store.js +0 -24
  656. package/esm2015/lib/download/download-button/download-button.component.js +0 -66
  657. package/esm2015/lib/download/download-button/index.js +0 -2
  658. package/esm2015/lib/download/download.module.js +0 -44
  659. package/esm2015/lib/download/index.js +0 -3
  660. package/esm2015/lib/download/shared/download.interface.js +0 -2
  661. package/esm2015/lib/download/shared/download.service.js +0 -65
  662. package/esm2015/lib/download/shared/index.js +0 -3
  663. package/esm2015/lib/draw/draw/draw-popup.component.js +0 -63
  664. package/esm2015/lib/draw/draw/draw-shorcuts.component.js +0 -64
  665. package/esm2015/lib/draw/draw/draw.component.js +0 -637
  666. package/esm2015/lib/draw/draw/draw.module.js +0 -102
  667. package/esm2015/lib/draw/drawingTool.module.js +0 -20
  668. package/esm2015/lib/draw/index.js +0 -3
  669. package/esm2015/lib/draw/shared/draw-icon.service.js +0 -27
  670. package/esm2015/lib/draw/shared/draw-style.service.js +0 -154
  671. package/esm2015/lib/draw/shared/draw.enum.js +0 -8
  672. package/esm2015/lib/draw/shared/draw.interface.js +0 -2
  673. package/esm2015/lib/draw/shared/draw.utils.js +0 -104
  674. package/esm2015/lib/draw/shared/index.js +0 -6
  675. package/esm2015/lib/feature/feature-details/feature-details.component.js +0 -317
  676. package/esm2015/lib/feature/feature-details/feature-details.directive.js +0 -109
  677. package/esm2015/lib/feature/feature-details/feature-details.module.js +0 -50
  678. package/esm2015/lib/feature/feature-form/feature-form.component.js +0 -117
  679. package/esm2015/lib/feature/feature-form/feature-form.module.js +0 -36
  680. package/esm2015/lib/feature/feature.module.js +0 -30
  681. package/esm2015/lib/feature/index.js +0 -4
  682. package/esm2015/lib/feature/shared/feature.enums.js +0 -9
  683. package/esm2015/lib/feature/shared/feature.interfaces.js +0 -2
  684. package/esm2015/lib/feature/shared/feature.utils.js +0 -348
  685. package/esm2015/lib/feature/shared/index.js +0 -7
  686. package/esm2015/lib/feature/shared/store.js +0 -112
  687. package/esm2015/lib/feature/shared/strategies/in-map-extent.js +0 -114
  688. package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +0 -94
  689. package/esm2015/lib/feature/shared/strategies/index.js +0 -6
  690. package/esm2015/lib/feature/shared/strategies/loading-layer.js +0 -104
  691. package/esm2015/lib/feature/shared/strategies/loading.js +0 -133
  692. package/esm2015/lib/feature/shared/strategies/selection.js +0 -370
  693. package/esm2015/lib/feature/shared/strategies.utils.js +0 -37
  694. package/esm2015/lib/filter/filter.module.js +0 -287
  695. package/esm2015/lib/filter/index.js +0 -16
  696. package/esm2015/lib/filter/ogc-filter-button/index.js +0 -2
  697. package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +0 -136
  698. package/esm2015/lib/filter/ogc-filter-form/index.js +0 -2
  699. package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +0 -657
  700. package/esm2015/lib/filter/ogc-filter-selection/index.js +0 -2
  701. package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +0 -993
  702. package/esm2015/lib/filter/ogc-filter-time/index.js +0 -3
  703. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +0 -185
  704. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +0 -898
  705. package/esm2015/lib/filter/ogc-filterable-form/index.js +0 -2
  706. package/esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js +0 -62
  707. package/esm2015/lib/filter/ogc-filterable-item/index.js +0 -2
  708. package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +0 -306
  709. package/esm2015/lib/filter/ogc-filterable-list/index.js +0 -3
  710. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +0 -31
  711. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +0 -35
  712. package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +0 -54
  713. package/esm2015/lib/filter/shared/index.js +0 -12
  714. package/esm2015/lib/filter/shared/ogc-filter-time.service.js +0 -73
  715. package/esm2015/lib/filter/shared/ogc-filter.enum.js +0 -30
  716. package/esm2015/lib/filter/shared/ogc-filter.interface.js +0 -2
  717. package/esm2015/lib/filter/shared/ogc-filter.js +0 -682
  718. package/esm2015/lib/filter/shared/ogc-filter.service.js +0 -46
  719. package/esm2015/lib/filter/shared/spatial-filter.enum.js +0 -23
  720. package/esm2015/lib/filter/shared/spatial-filter.interface.js +0 -2
  721. package/esm2015/lib/filter/shared/spatial-filter.service.js +0 -269
  722. package/esm2015/lib/filter/shared/time-filter.enum.js +0 -13
  723. package/esm2015/lib/filter/shared/time-filter.interface.js +0 -2
  724. package/esm2015/lib/filter/shared/time-filter.service.js +0 -107
  725. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +0 -2
  726. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +0 -1108
  727. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +0 -2
  728. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +0 -224
  729. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +0 -2
  730. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +0 -157
  731. package/esm2015/lib/filter/time-filter-button/index.js +0 -2
  732. package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +0 -83
  733. package/esm2015/lib/filter/time-filter-form/index.js +0 -2
  734. package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +0 -772
  735. package/esm2015/lib/filter/time-filter-item/index.js +0 -2
  736. package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +0 -126
  737. package/esm2015/lib/filter/time-filter-list/index.js +0 -3
  738. package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +0 -31
  739. package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +0 -43
  740. package/esm2015/lib/geo.module.js +0 -102
  741. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +0 -515
  742. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +0 -199
  743. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +0 -66
  744. package/esm2015/lib/geometry/geometry.module.js +0 -29
  745. package/esm2015/lib/geometry/index.js +0 -4
  746. package/esm2015/lib/geometry/shared/controls/draw.js +0 -271
  747. package/esm2015/lib/geometry/shared/controls/index.js +0 -4
  748. package/esm2015/lib/geometry/shared/controls/modify.js +0 -521
  749. package/esm2015/lib/geometry/shared/controls/slice.js +0 -177
  750. package/esm2015/lib/geometry/shared/geometry.errors.js +0 -26
  751. package/esm2015/lib/geometry/shared/geometry.interfaces.js +0 -2
  752. package/esm2015/lib/geometry/shared/geometry.utils.js +0 -122
  753. package/esm2015/lib/geometry/shared/index.js +0 -5
  754. package/esm2015/lib/import-export/export-button/export-button.component.js +0 -70
  755. package/esm2015/lib/import-export/export-button/index.js +0 -2
  756. package/esm2015/lib/import-export/import-export/import-export.component.js +0 -1238
  757. package/esm2015/lib/import-export/import-export/index.js +0 -2
  758. package/esm2015/lib/import-export/import-export.module.js +0 -95
  759. package/esm2015/lib/import-export/index.js +0 -5
  760. package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +0 -136
  761. package/esm2015/lib/import-export/shared/export.errors.js +0 -15
  762. package/esm2015/lib/import-export/shared/export.interface.js +0 -2
  763. package/esm2015/lib/import-export/shared/export.service.js +0 -187
  764. package/esm2015/lib/import-export/shared/export.type.js +0 -4
  765. package/esm2015/lib/import-export/shared/export.utils.js +0 -55
  766. package/esm2015/lib/import-export/shared/import.errors.js +0 -39
  767. package/esm2015/lib/import-export/shared/import.interface.js +0 -2
  768. package/esm2015/lib/import-export/shared/import.service.js +0 -195
  769. package/esm2015/lib/import-export/shared/import.utils.js +0 -207
  770. package/esm2015/lib/import-export/shared/index.js +0 -11
  771. package/esm2015/lib/import-export/style-list/index.js +0 -5
  772. package/esm2015/lib/import-export/style-list/style-list.interface.js +0 -2
  773. package/esm2015/lib/import-export/style-list/style-list.module.js +0 -23
  774. package/esm2015/lib/import-export/style-list/style-list.provider.js +0 -21
  775. package/esm2015/lib/import-export/style-list/style-list.service.js +0 -51
  776. package/esm2015/lib/layer/index.js +0 -10
  777. package/esm2015/lib/layer/layer-item/index.js +0 -2
  778. package/esm2015/lib/layer/layer-item/layer-item.component.js +0 -298
  779. package/esm2015/lib/layer/layer-legend/index.js +0 -2
  780. package/esm2015/lib/layer/layer-legend/layer-legend.component.js +0 -394
  781. package/esm2015/lib/layer/layer-legend-item/index.js +0 -2
  782. package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +0 -91
  783. package/esm2015/lib/layer/layer-legend-list/index.js +0 -3
  784. package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +0 -48
  785. package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +0 -200
  786. package/esm2015/lib/layer/layer-list/index.js +0 -4
  787. package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +0 -59
  788. package/esm2015/lib/layer/layer-list/layer-list.component.js +0 -1043
  789. package/esm2015/lib/layer/layer-list/layer-list.enum.js +0 -19
  790. package/esm2015/lib/layer/layer-list-tool/index.js +0 -5
  791. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +0 -176
  792. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +0 -7
  793. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +0 -2
  794. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +0 -22
  795. package/esm2015/lib/layer/layer.module.js +0 -174
  796. package/esm2015/lib/layer/shared/clusterParam.js +0 -2
  797. package/esm2015/lib/layer/shared/index.js +0 -7
  798. package/esm2015/lib/layer/shared/layer.enums.js +0 -2
  799. package/esm2015/lib/layer/shared/layer.service.js +0 -162
  800. package/esm2015/lib/layer/shared/layers/any-layer.interface.js +0 -2
  801. package/esm2015/lib/layer/shared/layers/any-layer.js +0 -2
  802. package/esm2015/lib/layer/shared/layers/image-layer.interface.js +0 -2
  803. package/esm2015/lib/layer/shared/layers/image-layer.js +0 -68
  804. package/esm2015/lib/layer/shared/layers/index.js +0 -13
  805. package/esm2015/lib/layer/shared/layers/layer.interface.js +0 -17
  806. package/esm2015/lib/layer/shared/layers/layer.js +0 -169
  807. package/esm2015/lib/layer/shared/layers/tile-layer.interface.js +0 -2
  808. package/esm2015/lib/layer/shared/layers/tile-layer.js +0 -47
  809. package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +0 -2
  810. package/esm2015/lib/layer/shared/layers/vector-layer.js +0 -325
  811. package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +0 -2
  812. package/esm2015/lib/layer/shared/layers/vectortile-layer.js +0 -104
  813. package/esm2015/lib/layer/shared/style.service.js +0 -289
  814. package/esm2015/lib/layer/shared/vector-style.interface.js +0 -2
  815. package/esm2015/lib/layer/track-feature-button/index.js +0 -2
  816. package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +0 -64
  817. package/esm2015/lib/layer/utils/image-watcher.js +0 -62
  818. package/esm2015/lib/layer/utils/index.js +0 -7
  819. package/esm2015/lib/layer/utils/layer.utils.js +0 -11
  820. package/esm2015/lib/layer/utils/layerSync-watcher.js +0 -249
  821. package/esm2015/lib/layer/utils/outputLegend.js +0 -25
  822. package/esm2015/lib/layer/utils/tile-watcher.js +0 -50
  823. package/esm2015/lib/layer/utils/vector-watcher.js +0 -48
  824. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +0 -20
  825. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +0 -105
  826. package/esm2015/lib/map/baselayers-switcher/index.js +0 -3
  827. package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +0 -137
  828. package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +0 -47
  829. package/esm2015/lib/map/geolocate-button/index.js +0 -2
  830. package/esm2015/lib/map/home-extent-button/home-extent-button.component.js +0 -69
  831. package/esm2015/lib/map/index.js +0 -13
  832. package/esm2015/lib/map/info-section/index.js +0 -2
  833. package/esm2015/lib/map/info-section/info-section.component.js +0 -36
  834. package/esm2015/lib/map/map-browser/index.js +0 -2
  835. package/esm2015/lib/map/map-browser/map-browser.component.js +0 -70
  836. package/esm2015/lib/map/map-center/index.js +0 -2
  837. package/esm2015/lib/map/map-center/map-center.component.js +0 -55
  838. package/esm2015/lib/map/map.module.js +0 -124
  839. package/esm2015/lib/map/menu-button/index.js +0 -2
  840. package/esm2015/lib/map/menu-button/menu-button.component.js +0 -66
  841. package/esm2015/lib/map/offline-button/index.js +0 -2
  842. package/esm2015/lib/map/offline-button/offline-button.component.js +0 -84
  843. package/esm2015/lib/map/rotation-button/index.js +0 -2
  844. package/esm2015/lib/map/rotation-button/rotation-button.component.js +0 -97
  845. package/esm2015/lib/map/shared/controllers/controller.js +0 -42
  846. package/esm2015/lib/map/shared/controllers/index.js +0 -3
  847. package/esm2015/lib/map/shared/controllers/view.js +0 -326
  848. package/esm2015/lib/map/shared/hover-feature.directive.js +0 -508
  849. package/esm2015/lib/map/shared/index.js +0 -13
  850. package/esm2015/lib/map/shared/map-pointer-position.directive.js +0 -107
  851. package/esm2015/lib/map/shared/map.enums.js +0 -6
  852. package/esm2015/lib/map/shared/map.interface.js +0 -2
  853. package/esm2015/lib/map/shared/map.js +0 -538
  854. package/esm2015/lib/map/shared/map.service.js +0 -29
  855. package/esm2015/lib/map/shared/map.utils.js +0 -459
  856. package/esm2015/lib/map/shared/mapOffline.directive.js +0 -163
  857. package/esm2015/lib/map/shared/projection.interfaces.js +0 -2
  858. package/esm2015/lib/map/shared/projection.service.js +0 -65
  859. package/esm2015/lib/map/shared/projection.utils.js +0 -64
  860. package/esm2015/lib/map/swipe-control/index.js +0 -2
  861. package/esm2015/lib/map/swipe-control/swipe-control.component.js +0 -199
  862. package/esm2015/lib/map/utils/layer-watcher.js +0 -58
  863. package/esm2015/lib/map/zoom-button/index.js +0 -2
  864. package/esm2015/lib/map/zoom-button/zoom-button.component.js +0 -46
  865. package/esm2015/lib/measure/index.js +0 -4
  866. package/esm2015/lib/measure/measure.module.js +0 -20
  867. package/esm2015/lib/measure/measurer/measure-format.pipe.js +0 -37
  868. package/esm2015/lib/measure/measurer/measurer-dialog.component.js +0 -220
  869. package/esm2015/lib/measure/measurer/measurer-item.component.js +0 -148
  870. package/esm2015/lib/measure/measurer/measurer.component.js +0 -1053
  871. package/esm2015/lib/measure/measurer/measurer.module.js +0 -96
  872. package/esm2015/lib/measure/shared/index.js +0 -4
  873. package/esm2015/lib/measure/shared/measure.enum.js +0 -37
  874. package/esm2015/lib/measure/shared/measure.interfaces.js +0 -2
  875. package/esm2015/lib/measure/shared/measure.utils.js +0 -489
  876. package/esm2015/lib/metadata/index.js +0 -3
  877. package/esm2015/lib/metadata/metadata-button/index.js +0 -2
  878. package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +0 -135
  879. package/esm2015/lib/metadata/metadata.module.js +0 -57
  880. package/esm2015/lib/metadata/shared/index.js +0 -3
  881. package/esm2015/lib/metadata/shared/metadata.interface.js +0 -2
  882. package/esm2015/lib/metadata/shared/metadata.service.js +0 -19
  883. package/esm2015/lib/overlay/index.js +0 -2
  884. package/esm2015/lib/overlay/overlay.module.js +0 -23
  885. package/esm2015/lib/overlay/shared/index.js +0 -7
  886. package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +0 -69
  887. package/esm2015/lib/overlay/shared/overlay.directive.js +0 -33
  888. package/esm2015/lib/overlay/shared/overlay.enum.js +0 -8
  889. package/esm2015/lib/overlay/shared/overlay.js +0 -130
  890. package/esm2015/lib/overlay/shared/overlay.service.js +0 -27
  891. package/esm2015/lib/overlay/shared/overlay.utils.js +0 -103
  892. package/esm2015/lib/print/index.js +0 -4
  893. package/esm2015/lib/print/print/print.component.js +0 -126
  894. package/esm2015/lib/print/print-form/index.js +0 -2
  895. package/esm2015/lib/print/print-form/print-form.component.js +0 -447
  896. package/esm2015/lib/print/print.module.js +0 -67
  897. package/esm2015/lib/print/shared/index.js +0 -4
  898. package/esm2015/lib/print/shared/print.interface.js +0 -2
  899. package/esm2015/lib/print/shared/print.service.js +0 -814
  900. package/esm2015/lib/print/shared/print.type.js +0 -30
  901. package/esm2015/lib/query/index.js +0 -2
  902. package/esm2015/lib/query/query.module.js +0 -28
  903. package/esm2015/lib/query/shared/index.js +0 -7
  904. package/esm2015/lib/query/shared/query-search-source.js +0 -35
  905. package/esm2015/lib/query/shared/query-search-source.providers.js +0 -22
  906. package/esm2015/lib/query/shared/query.directive.js +0 -261
  907. package/esm2015/lib/query/shared/query.enums.js +0 -30
  908. package/esm2015/lib/query/shared/query.interfaces.js +0 -2
  909. package/esm2015/lib/query/shared/query.service.js +0 -592
  910. package/esm2015/lib/query/shared/query.utils.js +0 -37
  911. package/esm2015/lib/search/index.js +0 -12
  912. package/esm2015/lib/search/search-bar/search-bar.component.js +0 -496
  913. package/esm2015/lib/search/search-bar/search-bar.module.js +0 -77
  914. package/esm2015/lib/search/search-bar/search-url-param.directive.js +0 -35
  915. package/esm2015/lib/search/search-results/search-results-add-button.component.js +0 -198
  916. package/esm2015/lib/search/search-results/search-results-item.component.js +0 -129
  917. package/esm2015/lib/search/search-results/search-results.component.js +0 -337
  918. package/esm2015/lib/search/search-results/search-results.module.js +0 -79
  919. package/esm2015/lib/search/search-selector/search-selector.component.js +0 -132
  920. package/esm2015/lib/search/search-selector/search-selector.module.js +0 -58
  921. package/esm2015/lib/search/search-settings/search-settings.component.js +0 -435
  922. package/esm2015/lib/search/search-settings/search-settings.module.js +0 -62
  923. package/esm2015/lib/search/search.module.js +0 -69
  924. package/esm2015/lib/search/shared/index.js +0 -9
  925. package/esm2015/lib/search/shared/search-pointer-summary.directive.js +0 -322
  926. package/esm2015/lib/search/shared/search-source-service.providers.js +0 -20
  927. package/esm2015/lib/search/shared/search-source.service.js +0 -47
  928. package/esm2015/lib/search/shared/search.enums.js +0 -4
  929. package/esm2015/lib/search/shared/search.interfaces.js +0 -2
  930. package/esm2015/lib/search/shared/search.service.js +0 -118
  931. package/esm2015/lib/search/shared/search.utils.js +0 -78
  932. package/esm2015/lib/search/shared/sources/cadastre.js +0 -126
  933. package/esm2015/lib/search/shared/sources/cadastre.providers.js +0 -23
  934. package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +0 -2
  935. package/esm2015/lib/search/shared/sources/coordinates.js +0 -147
  936. package/esm2015/lib/search/shared/sources/coordinates.providers.js +0 -40
  937. package/esm2015/lib/search/shared/sources/icherche.interfaces.js +0 -2
  938. package/esm2015/lib/search/shared/sources/icherche.js +0 -756
  939. package/esm2015/lib/search/shared/sources/icherche.providers.js +0 -66
  940. package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +0 -2
  941. package/esm2015/lib/search/shared/sources/ilayer.js +0 -320
  942. package/esm2015/lib/search/shared/sources/ilayer.providers.js +0 -40
  943. package/esm2015/lib/search/shared/sources/index.js +0 -20
  944. package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +0 -2
  945. package/esm2015/lib/search/shared/sources/nominatim.js +0 -253
  946. package/esm2015/lib/search/shared/sources/nominatim.providers.js +0 -23
  947. package/esm2015/lib/search/shared/sources/source.interfaces.js +0 -2
  948. package/esm2015/lib/search/shared/sources/source.js +0 -179
  949. package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +0 -2
  950. package/esm2015/lib/search/shared/sources/storedqueries.js +0 -425
  951. package/esm2015/lib/search/shared/sources/storedqueries.providers.js +0 -41
  952. package/esm2015/lib/toast/index.js +0 -2
  953. package/esm2015/lib/toast/toast.component.js +0 -119
  954. package/esm2015/lib/toast/toast.module.js +0 -47
  955. package/esm2015/lib/utils/commonVectorStyle.interface.js +0 -2
  956. package/esm2015/lib/utils/commonVectorStyle.js +0 -75
  957. package/esm2015/lib/utils/googleLinks.js +0 -13
  958. package/esm2015/lib/utils/id-generator.js +0 -110
  959. package/esm2015/lib/utils/index.js +0 -6
  960. package/esm2015/lib/utils/osmLinks.js +0 -10
  961. package/esm2015/lib/wkt/index.js +0 -2
  962. package/esm2015/lib/wkt/shared/index.js +0 -2
  963. package/esm2015/lib/wkt/shared/wkt.service.js +0 -239
  964. package/esm2015/lib/wkt/wkt.module.js +0 -22
  965. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js +0 -56
  966. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js +0 -38
  967. package/esm2015/lib/workspace/confirmation-popup/index.js +0 -3
  968. package/esm2015/lib/workspace/index.js +0 -8
  969. package/esm2015/lib/workspace/shared/edition-workspace.js +0 -271
  970. package/esm2015/lib/workspace/shared/edition-workspace.service.js +0 -619
  971. package/esm2015/lib/workspace/shared/feature-workspace.js +0 -37
  972. package/esm2015/lib/workspace/shared/feature-workspace.service.js +0 -146
  973. package/esm2015/lib/workspace/shared/index.js +0 -8
  974. package/esm2015/lib/workspace/shared/wfs-workspace.js +0 -37
  975. package/esm2015/lib/workspace/shared/wfs-workspace.service.js +0 -146
  976. package/esm2015/lib/workspace/shared/wms-workspace.service.js +0 -239
  977. package/esm2015/lib/workspace/shared/workspace.utils.js +0 -24
  978. package/esm2015/lib/workspace/widgets/index.js +0 -4
  979. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +0 -52
  980. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +0 -38
  981. package/esm2015/lib/workspace/widgets/widgets.js +0 -15
  982. package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +0 -135
  983. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +0 -30
  984. package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +0 -116
  985. package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +0 -30
  986. package/esm2015/lib/workspace/workspace.module.js +0 -64
  987. package/esm2015/public_api.js +0 -54
  988. package/fesm2015/igo2-geo.js +0 -40591
  989. package/fesm2015/igo2-geo.js.map +0 -1
@@ -0,0 +1,613 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import { map, mergeMap } from 'rxjs/operators';
4
+ import { default as striptags } from 'striptags';
5
+ import * as olformat from 'ol/format';
6
+ import * as olextent from 'ol/extent';
7
+ import olFormatGML2 from 'ol/format/GML2';
8
+ import olFormatGML3 from 'ol/format/GML3';
9
+ import olFormatEsriJSON from 'ol/format/EsriJSON';
10
+ import * as olgeom from 'ol/geom';
11
+ import { uuid } from '@igo2/utils';
12
+ import { FEATURE } from '../../feature/shared/feature.enums';
13
+ import { WMSDataSource, CartoDataSource, TileArcGISRestDataSource, ImageArcGISRestDataSource } from '../../datasource';
14
+ import { QueryFormat, QueryFormatMimeType, QueryHtmlTarget } from './query.enums';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "@angular/common/http";
17
+ import * as i2 from "@igo2/core";
18
+ export class QueryService {
19
+ constructor(http, messageService, languageService) {
20
+ this.http = http;
21
+ this.messageService = messageService;
22
+ this.languageService = languageService;
23
+ this.queryEnabled = true;
24
+ this.defaultFeatureCount = 20; // default feature count
25
+ this.featureCount = 20; // feature count
26
+ this.previousMessageIds = [];
27
+ }
28
+ query(layers, options) {
29
+ if (this.previousMessageIds.length) {
30
+ this.previousMessageIds.forEach(id => {
31
+ this.messageService.remove(id);
32
+ });
33
+ }
34
+ return layers
35
+ .filter((layer) => layer.visible && layer.isInResolutionsRange)
36
+ .map((layer) => this.queryLayer(layer, options));
37
+ }
38
+ queryLayer(layer, options) {
39
+ const url = this.getQueryUrl(layer.dataSource, options, false, layer.map.viewController.getExtent());
40
+ if (!url) {
41
+ return of([]);
42
+ }
43
+ if (layer.dataSource.options.queryFormat ===
44
+ QueryFormat.HTMLGML2) {
45
+ const urlGml = this.getQueryUrl(layer.dataSource, options, true);
46
+ return this.http.get(urlGml, { responseType: 'text' }).pipe(mergeMap(gmlRes => {
47
+ const mergedGML = this.mergeGML(gmlRes, url, layer);
48
+ const imposedGeom = mergedGML[0];
49
+ const imposedProperties = mergedGML[1];
50
+ return this.http
51
+ .get(url, { responseType: 'text' })
52
+ .pipe(map(res => this.extractData(res, layer, options, url, imposedGeom, imposedProperties)));
53
+ }));
54
+ }
55
+ const request = this.http.get(url, { responseType: 'text' });
56
+ return request.pipe(map(res => this.extractData(res, layer, options, url)));
57
+ }
58
+ mergeGML(gmlRes, url, layer) {
59
+ const parser = new olFormatGML2();
60
+ let features = parser.readFeatures(gmlRes);
61
+ // Handle non standard GML output (MapServer)
62
+ if (features.length === 0) {
63
+ const wmsParser = new olformat.WMSGetFeatureInfo();
64
+ features = wmsParser.readFeatures(gmlRes);
65
+ }
66
+ const olmline = new olgeom.MultiLineString([]);
67
+ let pts;
68
+ const ptsArray = [];
69
+ let olmpoly = new olgeom.MultiPolygon([]);
70
+ let firstFeatureType;
71
+ const nbFeatures = features.length;
72
+ // Check if geometry intersect bbox
73
+ // for geoserver getfeatureinfo response in data projection, not call projection
74
+ const searchParams = this.getQueryParams(url.toLowerCase());
75
+ const bboxRaw = searchParams.bbox;
76
+ const bbox = bboxRaw.split(',');
77
+ const bboxExtent = olextent.createEmpty();
78
+ olextent.extend(bboxExtent, bbox);
79
+ const outBboxExtent = false;
80
+ let titleContent;
81
+ let queryTileField;
82
+ if (layer.options?.source?.options) {
83
+ const dataSourceOptions = layer.options.source
84
+ .options;
85
+ if (dataSourceOptions.queryTitle) {
86
+ queryTileField = dataSourceOptions.queryTitle;
87
+ }
88
+ }
89
+ features.map(feature => {
90
+ if (queryTileField) {
91
+ let queryTitleContent = feature.getProperties()[queryTileField];
92
+ if (queryTitleContent) {
93
+ titleContent = !titleContent ? queryTitleContent : `${titleContent},${queryTitleContent}`;
94
+ }
95
+ }
96
+ /* if (!feature.getGeometry().simplify(100).intersectsExtent(bboxExtent)) {
97
+ outBboxExtent = true;
98
+ // TODO: Check to project the geometry?
99
+ }*/
100
+ const featureGeometryCoordinates = feature.getGeometry().getCoordinates();
101
+ const featureGeometryType = feature.getGeometry().getType();
102
+ if (!firstFeatureType && !outBboxExtent) {
103
+ firstFeatureType = featureGeometryType;
104
+ }
105
+ if (!outBboxExtent) {
106
+ switch (featureGeometryType) {
107
+ case 'Point':
108
+ if (nbFeatures === 1) {
109
+ pts = new olgeom.Point(featureGeometryCoordinates, 'XY');
110
+ }
111
+ else {
112
+ ptsArray.push(featureGeometryCoordinates);
113
+ }
114
+ break;
115
+ case 'LineString':
116
+ olmline.appendLineString(new olgeom.LineString(featureGeometryCoordinates, 'XY'));
117
+ break;
118
+ case 'Polygon':
119
+ olmpoly.appendPolygon(new olgeom.Polygon(featureGeometryCoordinates, 'XY'));
120
+ break;
121
+ case 'MultiPolygon':
122
+ olmpoly = new olgeom.MultiPolygon(featureGeometryCoordinates, 'XY');
123
+ break;
124
+ default:
125
+ return;
126
+ }
127
+ }
128
+ });
129
+ let olmpts;
130
+ if (ptsArray.length === 0 && pts) {
131
+ olmpts = {
132
+ type: pts.getType(),
133
+ coordinates: pts.getCoordinates()
134
+ };
135
+ }
136
+ else {
137
+ olmpts = {
138
+ type: 'Polygon',
139
+ coordinates: [this.convexHull(ptsArray)]
140
+ };
141
+ }
142
+ let returnGeometry;
143
+ switch (firstFeatureType) {
144
+ case 'LineString':
145
+ returnGeometry = {
146
+ type: olmline.getType(),
147
+ coordinates: olmline.getCoordinates()
148
+ };
149
+ case 'Point':
150
+ returnGeometry = olmpts;
151
+ case 'Polygon':
152
+ returnGeometry = {
153
+ type: olmpoly.getType(),
154
+ coordinates: olmpoly.getCoordinates()
155
+ };
156
+ case 'MultiPolygon':
157
+ returnGeometry = {
158
+ type: olmpoly.getType(),
159
+ coordinates: olmpoly.getCoordinates()
160
+ };
161
+ }
162
+ const imposedProperties = {};
163
+ if (queryTileField) {
164
+ imposedProperties[queryTileField] = titleContent;
165
+ }
166
+ return [returnGeometry, imposedProperties];
167
+ }
168
+ cross(a, b, o) {
169
+ return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
170
+ }
171
+ /**
172
+ * @param points An array of [X, Y] coordinates
173
+ * This method is use instead of turf.js convexHull because Turf needs at least 3 point to make a hull.
174
+ * https://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain#JavaScript
175
+ */
176
+ convexHull(points) {
177
+ points.sort((a, b) => {
178
+ return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];
179
+ });
180
+ const lower = [];
181
+ for (const point of points) {
182
+ while (lower.length >= 2 &&
183
+ this.cross(lower[lower.length - 2], lower[lower.length - 1], point) <= 0) {
184
+ lower.pop();
185
+ }
186
+ lower.push(point);
187
+ }
188
+ const upper = [];
189
+ for (let i = points.length - 1; i >= 0; i--) {
190
+ while (upper.length >= 2 &&
191
+ this.cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {
192
+ upper.pop();
193
+ }
194
+ upper.push(points[i]);
195
+ }
196
+ upper.pop();
197
+ lower.pop();
198
+ return lower.concat(upper);
199
+ }
200
+ extractData(res, layer, options, url, imposedGeometry, imposedProperties) {
201
+ const queryDataSource = layer.dataSource;
202
+ const allowedFieldsAndAlias = this.getAllowedFieldsAndAlias(layer);
203
+ let features = [];
204
+ switch (queryDataSource.options.queryFormat) {
205
+ case QueryFormat.GML3:
206
+ features = this.extractGML3Data(res, layer.zIndex, allowedFieldsAndAlias);
207
+ break;
208
+ case QueryFormat.JSON:
209
+ case QueryFormat.GEOJSON:
210
+ case QueryFormat.GEOJSON2:
211
+ features = this.extractGeoJSONData(res, layer.zIndex, allowedFieldsAndAlias);
212
+ break;
213
+ case QueryFormat.ESRIJSON:
214
+ features = this.extractEsriJSONData(res, layer.zIndex, allowedFieldsAndAlias);
215
+ break;
216
+ case QueryFormat.TEXT:
217
+ features = this.extractTextData(res);
218
+ break;
219
+ case QueryFormat.HTML:
220
+ features = this.extractHtmlData(res, queryDataSource.queryHtmlTarget, url);
221
+ break;
222
+ case QueryFormat.HTMLGML2:
223
+ features = this.extractHtmlData(res, queryDataSource.queryHtmlTarget, url, imposedGeometry, imposedProperties);
224
+ break;
225
+ case QueryFormat.GML2:
226
+ default:
227
+ features = this.extractGML2Data(res, layer, allowedFieldsAndAlias);
228
+ break;
229
+ }
230
+ if (features.length > 0 && features[0].geometry === null) {
231
+ const geomToAdd = this.createGeometryFromUrlClick(url);
232
+ for (const feature of features) {
233
+ feature.geometry = geomToAdd;
234
+ }
235
+ }
236
+ const wmsDatasource = layer.dataSource;
237
+ const featureCount = wmsDatasource.params?.FEATURE_COUNT ?
238
+ new RegExp('FEATURE_COUNT=' + this.featureCount) :
239
+ new RegExp('FEATURE_COUNT=' + this.defaultFeatureCount);
240
+ if (featureCount.test(url) &&
241
+ ((wmsDatasource.params?.FEATURE_COUNT && features.length === this.featureCount) ||
242
+ (!wmsDatasource.params?.FEATURE_COUNT && features.length === this.defaultFeatureCount))) {
243
+ this.languageService.translate.get('igo.geo.query.featureCountMax', { value: layer.title }).subscribe(message => {
244
+ const messageObj = this.messageService.info(message);
245
+ this.previousMessageIds.push(messageObj.toastId);
246
+ });
247
+ }
248
+ return features.map((feature, index) => {
249
+ const mapLabel = feature.properties[queryDataSource.mapLabel];
250
+ let exclude;
251
+ if (layer.options.sourceOptions?.type === 'wms') {
252
+ const sourceOptions = layer.options
253
+ .sourceOptions;
254
+ exclude = sourceOptions ? sourceOptions.excludeAttribute : undefined;
255
+ }
256
+ let title = this.getQueryTitle(feature, layer);
257
+ if (!title && features.length > 1) {
258
+ title = `${layer.title} (${index + 1})`;
259
+ }
260
+ else if (!title) {
261
+ title = layer.title;
262
+ }
263
+ const meta = Object.assign({}, feature.meta || {}, {
264
+ id: uuid(),
265
+ title,
266
+ mapTitle: mapLabel,
267
+ sourceTitle: layer.title,
268
+ order: 1000 - layer.zIndex,
269
+ excludeAttribute: exclude
270
+ });
271
+ return Object.assign(feature, {
272
+ meta,
273
+ projection: queryDataSource.options.type === 'carto'
274
+ ? 'EPSG:4326'
275
+ : options.projection
276
+ });
277
+ });
278
+ }
279
+ createGeometryFromUrlClick(url) {
280
+ const searchParams = this.getQueryParams(url.toLowerCase());
281
+ const bboxRaw = searchParams.bbox;
282
+ const width = parseInt(searchParams.width, 10);
283
+ const height = parseInt(searchParams.height, 10);
284
+ const xPosition = parseInt(searchParams.i || searchParams.x, 10);
285
+ const yPosition = parseInt(searchParams.j || searchParams.y, 10);
286
+ const bbox = bboxRaw.split(',');
287
+ let threshold = (Math.abs(parseFloat(bbox[0])) - Math.abs(parseFloat(bbox[2]))) * 0.05;
288
+ // for context in degree (EPSG:4326,4269...)
289
+ if (Math.abs(parseFloat(bbox[0])) < 180) {
290
+ threshold = 0.045;
291
+ }
292
+ const clickx = parseFloat(bbox[0]) +
293
+ (Math.abs(parseFloat(bbox[0]) - parseFloat(bbox[2])) * xPosition) /
294
+ width -
295
+ threshold;
296
+ const clicky = parseFloat(bbox[1]) +
297
+ (Math.abs(parseFloat(bbox[1]) - parseFloat(bbox[3])) * yPosition) /
298
+ height -
299
+ threshold;
300
+ const clickx1 = clickx + threshold * 2;
301
+ const clicky1 = clicky + threshold * 2;
302
+ const wktPoly = 'POLYGON((' +
303
+ clickx +
304
+ ' ' +
305
+ clicky +
306
+ ', ' +
307
+ clickx +
308
+ ' ' +
309
+ clicky1 +
310
+ ', ' +
311
+ clickx1 +
312
+ ' ' +
313
+ clicky1 +
314
+ ', ' +
315
+ clickx1 +
316
+ ' ' +
317
+ clicky +
318
+ ', ' +
319
+ clickx +
320
+ ' ' +
321
+ clicky +
322
+ '))';
323
+ const format = new olformat.WKT();
324
+ const tenPercentWidthGeom = format.readFeature(wktPoly);
325
+ const f = tenPercentWidthGeom.getGeometry();
326
+ const newGeom = {
327
+ type: f.getType(),
328
+ coordinates: f.getCoordinates()
329
+ };
330
+ return newGeom;
331
+ }
332
+ extractGML2Data(res, zIndex, allowedFieldsAndAlias) {
333
+ const parser = new olFormatGML2();
334
+ let features = parser.readFeatures(res);
335
+ // Handle non standard GML output (MapServer)
336
+ if (features.length === 0) {
337
+ const wmsParser = new olformat.WMSGetFeatureInfo();
338
+ try {
339
+ features = wmsParser.readFeatures(res);
340
+ }
341
+ catch (e) {
342
+ console.warn('query.service: Multipolygons are badly managed in mapserver in GML2. Use another format.');
343
+ }
344
+ }
345
+ return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
346
+ }
347
+ extractGML3Data(res, zIndex, allowedFieldsAndAlias) {
348
+ const parser = new olFormatGML3();
349
+ let features = [];
350
+ try {
351
+ features = parser.readFeatures(res);
352
+ }
353
+ catch (e) {
354
+ console.warn('query.service: GML3 is not well supported');
355
+ }
356
+ return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
357
+ }
358
+ extractGeoJSONData(res, zIndex, allowedFieldsAndAlias) {
359
+ let features = [];
360
+ try {
361
+ features = JSON.parse(res.replace(/(\r|\n)/g, ' ')).features;
362
+ }
363
+ catch (e) {
364
+ console.warn('query.service: Unable to parse geojson', '\n', res);
365
+ }
366
+ features.map(feature => feature.meta = {
367
+ id: uuid(),
368
+ order: 1000 - zIndex,
369
+ alias: allowedFieldsAndAlias
370
+ });
371
+ return features;
372
+ }
373
+ extractEsriJSONData(res, zIndex, allowedFieldsAndAlias) {
374
+ if (res) {
375
+ try {
376
+ if (JSON.parse(res).error) {
377
+ return [];
378
+ }
379
+ }
380
+ catch (e) { }
381
+ }
382
+ const parser = new olFormatEsriJSON();
383
+ const features = parser.readFeatures(res);
384
+ return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
385
+ }
386
+ extractTextData(res) {
387
+ // TODO
388
+ return [];
389
+ }
390
+ extractHtmlData(res, htmlTarget, url, imposedGeometry, imposedProperties) {
391
+ const searchParams = this.getQueryParams(url.toLowerCase());
392
+ const projection = searchParams.crs || searchParams.srs || 'EPSG:3857';
393
+ const geomToAdd = this.createGeometryFromUrlClick(url);
394
+ if (htmlTarget !== QueryHtmlTarget.BLANK &&
395
+ htmlTarget !== QueryHtmlTarget.IFRAME) {
396
+ htmlTarget = QueryHtmlTarget.IFRAME;
397
+ }
398
+ const bodyTagStart = res.toLowerCase().indexOf('<body>');
399
+ const bodyTagEnd = res.toLowerCase().lastIndexOf('</body>') + 7;
400
+ // replace \r \n and ' ' with '' to validate if the body is really empty. Clear all the html tags from body
401
+ const body = striptags(res.slice(bodyTagStart, bodyTagEnd).replace(/(\r|\n|\s)/g, ''));
402
+ if (body === '' || res === '') {
403
+ return [];
404
+ }
405
+ return [
406
+ {
407
+ type: FEATURE,
408
+ projection,
409
+ properties: Object.assign({ target: htmlTarget, body: res, url }, imposedProperties),
410
+ geometry: imposedGeometry || geomToAdd
411
+ }
412
+ ];
413
+ }
414
+ getQueryParams(url) {
415
+ const queryString = url.split('?');
416
+ if (!queryString[1]) {
417
+ return;
418
+ }
419
+ const pairs = queryString[1].split('&');
420
+ const result = {};
421
+ pairs.forEach(pair => {
422
+ pair = pair.split('=');
423
+ result[pair[0]] = decodeURIComponent(pair[1] || '');
424
+ });
425
+ return result;
426
+ }
427
+ featureToResult(featureOL, zIndex, allowedFieldsAndAlias) {
428
+ const featureGeometry = featureOL.getGeometry();
429
+ const properties = Object.assign({}, featureOL.getProperties());
430
+ delete properties.geometry;
431
+ delete properties.GEOMETRIE;
432
+ delete properties.boundedBy;
433
+ delete properties.shape;
434
+ delete properties.SHAPE;
435
+ delete properties.the_geom;
436
+ delete properties.geom;
437
+ let geometry;
438
+ if (featureGeometry) {
439
+ geometry = {
440
+ type: featureGeometry.getType(),
441
+ coordinates: featureGeometry.getCoordinates()
442
+ };
443
+ }
444
+ return {
445
+ type: FEATURE,
446
+ projection: undefined,
447
+ properties,
448
+ geometry,
449
+ meta: {
450
+ id: uuid(),
451
+ order: 1000 - zIndex,
452
+ alias: allowedFieldsAndAlias
453
+ }
454
+ };
455
+ }
456
+ getQueryUrl(datasource, options, forceGML2 = false, mapExtent) {
457
+ let url;
458
+ if (datasource.options.queryUrl) {
459
+ return this.getCustomQueryUrl(datasource, options, mapExtent);
460
+ }
461
+ switch (datasource.constructor) {
462
+ case WMSDataSource:
463
+ const wmsDatasource = datasource;
464
+ const WMSGetFeatureInfoOptions = {
465
+ INFO_FORMAT: wmsDatasource.params.INFO_FORMAT ||
466
+ this.getMimeInfoFormat(datasource.options.queryFormat),
467
+ QUERY_LAYERS: wmsDatasource.params.LAYERS,
468
+ FEATURE_COUNT: wmsDatasource.params.FEATURE_COUNT || this.defaultFeatureCount
469
+ };
470
+ if (wmsDatasource.params.FEATURE_COUNT) {
471
+ this.featureCount = wmsDatasource.params.FEATURE_COUNT;
472
+ }
473
+ if (forceGML2) {
474
+ WMSGetFeatureInfoOptions.INFO_FORMAT = this.getMimeInfoFormat(QueryFormat.GML2);
475
+ }
476
+ url = wmsDatasource.ol.getFeatureInfoUrl(options.coordinates, options.resolution, options.projection, WMSGetFeatureInfoOptions);
477
+ // const wmsVersion =
478
+ // wmsDatasource.params.VERSION ||
479
+ // wmsDatasource.params.version ||
480
+ // '1.3.0';
481
+ // if (wmsVersion !== '1.3.0') {
482
+ // url = url.replace('&I=', '&X=');
483
+ // url = url.replace('&J=', '&Y=');
484
+ // }
485
+ break;
486
+ case CartoDataSource:
487
+ const cartoDatasource = datasource;
488
+ const baseUrl = 'https://' +
489
+ cartoDatasource.options.account +
490
+ '.carto.com/api/v2/sql?';
491
+ const format = 'format=GeoJSON';
492
+ const sql = '&q=' + cartoDatasource.options.config.layers[0].options.sql;
493
+ const clause = ' WHERE ST_Intersects(the_geom_webmercator,ST_BUFFER(ST_SetSRID(ST_POINT(';
494
+ const meters = cartoDatasource.options.queryPrecision
495
+ ? cartoDatasource.options.queryPrecision
496
+ : '1000';
497
+ const coordinates = options.coordinates[0] +
498
+ ',' +
499
+ options.coordinates[1] +
500
+ '),3857),' +
501
+ meters +
502
+ '))';
503
+ url = `${baseUrl}${format}${sql}${clause}${coordinates}`;
504
+ break;
505
+ case ImageArcGISRestDataSource:
506
+ case TileArcGISRestDataSource:
507
+ const tileArcGISRestDatasource = datasource;
508
+ const deltaX = Math.abs(mapExtent[0] - mapExtent[2]);
509
+ const deltaY = Math.abs(mapExtent[1] - mapExtent[3]);
510
+ const maxDelta = deltaX > deltaY ? deltaX : deltaY;
511
+ const clickBuffer = maxDelta * 0.005;
512
+ const threshold = tileArcGISRestDatasource.options.queryPrecision ? tileArcGISRestDatasource.options.queryPrecision : clickBuffer;
513
+ const extent = olextent.buffer(olextent.boundingExtent([options.coordinates]), threshold);
514
+ const serviceUrl = tileArcGISRestDatasource.options.url +
515
+ '/' +
516
+ tileArcGISRestDatasource.options.layer +
517
+ '/query/';
518
+ const geometry = encodeURIComponent('{"xmin":' +
519
+ extent[0] +
520
+ ',"ymin":' +
521
+ extent[1] +
522
+ ',"xmax":' +
523
+ extent[2] +
524
+ ',"ymax":' +
525
+ extent[3] +
526
+ ',"spatialReference":{"wkid":102100}}');
527
+ const params = [
528
+ 'f=json',
529
+ `geometry=${geometry}`,
530
+ 'geometryType=esriGeometryEnvelope',
531
+ 'inSR=102100',
532
+ 'spatialRel=esriSpatialRelIntersects',
533
+ 'outFields=*',
534
+ 'returnGeometry=true',
535
+ 'outSR=102100'
536
+ ];
537
+ url = `${serviceUrl}?${params.join('&')}`;
538
+ break;
539
+ default:
540
+ break;
541
+ }
542
+ return url;
543
+ }
544
+ getMimeInfoFormat(queryFormat) {
545
+ let mime = 'application/vnd.ogc.gml';
546
+ const keyEnum = Object.keys(QueryFormat).find(key => QueryFormat[key] === queryFormat);
547
+ if (keyEnum) {
548
+ mime = QueryFormatMimeType[keyEnum];
549
+ }
550
+ return mime;
551
+ }
552
+ getAllowedFieldsAndAlias(layer) {
553
+ let allowedFieldsAndAlias;
554
+ if (layer.options?.source?.options?.sourceFields &&
555
+ layer.options.source.options.sourceFields.length >= 1) {
556
+ allowedFieldsAndAlias = {};
557
+ layer.options.source.options.sourceFields.forEach(sourceField => {
558
+ const alias = sourceField.alias ? sourceField.alias : sourceField.name;
559
+ allowedFieldsAndAlias[sourceField.name] = alias;
560
+ });
561
+ }
562
+ return allowedFieldsAndAlias;
563
+ }
564
+ getQueryTitle(feature, layer) {
565
+ let title;
566
+ if (layer.options?.source?.options) {
567
+ const dataSourceOptions = layer.options.source
568
+ .options;
569
+ if (dataSourceOptions.queryTitle) {
570
+ title = this.getLabelMatch(feature, dataSourceOptions.queryTitle);
571
+ }
572
+ }
573
+ return title;
574
+ }
575
+ getLabelMatch(feature, labelMatch) {
576
+ let label = labelMatch;
577
+ const labelToGet = Array.from(labelMatch.matchAll(/\$\{([^\{\}]+)\}/g));
578
+ labelToGet.forEach(v => {
579
+ label = label.replace(v[0], feature.properties[v[1]]);
580
+ });
581
+ // Nothing done? check feature's attribute
582
+ if (labelToGet.length === 0 && label === labelMatch) {
583
+ label = feature.properties[labelMatch] || labelMatch;
584
+ }
585
+ return label;
586
+ }
587
+ /**
588
+ * @param datasource QueryableDataSource
589
+ * @param options QueryOptions
590
+ * @mapExtent extent of the map when click event
591
+ *
592
+ */
593
+ getCustomQueryUrl(datasource, options, mapExtent) {
594
+ let url = datasource.options.queryUrl.replace(/\{xmin\}/g, mapExtent[0].toString())
595
+ .replace(/\{ymin\}/g, mapExtent[1].toString())
596
+ .replace(/\{xmax\}/g, mapExtent[2].toString())
597
+ .replace(/\{ymax\}/g, mapExtent[3].toString())
598
+ .replace(/\{x\}/g, options.coordinates[0].toString())
599
+ .replace(/\{y\}/g, options.coordinates[1].toString())
600
+ .replace(/\{resolution\}/g, options.resolution.toString())
601
+ .replace(/\{srid\}/g, options.projection.replace('EPSG:', ''));
602
+ return url;
603
+ }
604
+ }
605
+ QueryService.ɵfac = function QueryService_Factory(t) { return new (t || QueryService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.MessageService), i0.ɵɵinject(i2.LanguageService)); };
606
+ QueryService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: QueryService, factory: QueryService.ɵfac, providedIn: 'root' });
607
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryService, [{
608
+ type: Injectable,
609
+ args: [{
610
+ providedIn: 'root'
611
+ }]
612
+ }], function () { return [{ type: i1.HttpClient }, { type: i2.MessageService }, { type: i2.LanguageService }]; }, null); })();
613
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWpELE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFN0QsT0FBTyxFQUNMLGFBQWEsRUFDYixlQUFlLEVBQ2Ysd0JBQXdCLEVBRXhCLHlCQUF5QixFQUMxQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7Ozs7QUFXdkIsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDVSxJQUFnQixFQUNoQixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFn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UUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2xGLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDcEQsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDekQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU5RCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O3dFQTd1QlEsWUFBWTtrRUFBWixZQUFZLFdBQVosWUFBWSxtQkFGWCxNQUFNO3VGQUVQLFlBQVk7Y0FIeEIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBzdHJpcHRhZ3MgfSBmcm9tICdzdHJpcHRhZ3MnO1xyXG5cclxuaW1wb3J0ICogYXMgb2xmb3JtYXQgZnJvbSAnb2wvZm9ybWF0JztcclxuaW1wb3J0ICogYXMgb2xleHRlbnQgZnJvbSAnb2wvZXh0ZW50JztcclxuaW1wb3J0IG9sRm9ybWF0R01MMiBmcm9tICdvbC9mb3JtYXQvR01MMic7XHJcbmltcG9ydCBvbEZvcm1hdEdNTDMgZnJvbSAnb2wvZm9ybWF0L0dNTDMnO1xyXG5pbXBvcnQgb2xGb3JtYXRFc3JpSlNPTiBmcm9tICdvbC9mb3JtYXQvRXNyaUpTT04nO1xyXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5pbXBvcnQgKiBhcyBvbGdlb20gZnJvbSAnb2wvZ2VvbSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAaWdvMi91dGlscyc7XHJcbmltcG9ydCB7IEZlYXR1cmUsIEZlYXR1cmVHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZFQVRVUkUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHtcclxuICBXTVNEYXRhU291cmNlLFxyXG4gIENhcnRvRGF0YVNvdXJjZSxcclxuICBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2UsXHJcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnMsXHJcbiAgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZVxyXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2UnO1xyXG5cclxuaW1wb3J0IHtcclxuICBRdWVyeUZvcm1hdCxcclxuICBRdWVyeUZvcm1hdE1pbWVUeXBlLFxyXG4gIFF1ZXJ5SHRtbFRhcmdldFxyXG59IGZyb20gJy4vcXVlcnkuZW51bXMnO1xyXG5pbXBvcnQge1xyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeWFibGVEYXRhU291cmNlLFxyXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zXHJcbn0gZnJvbSAnLi9xdWVyeS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgTWFwRXh0ZW50IH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAuaW50ZXJmYWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XHJcbiAgcHVibGljIHF1ZXJ5RW5hYmxlZCA9IHRydWU7XHJcbiAgcHVibGljIGRlZmF1bHRGZWF0dXJlQ291bnQgPSAyMDsgLy8gZGVmYXVsdCBmZWF0dXJlIGNvdW50XHJcbiAgcHVibGljIGZlYXR1cmVDb3VudCA9IDIwOyAvLyBmZWF0dXJlIGNvdW50XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNNZXNzYWdlSWRzID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlKSB7fVxyXG5cclxuICBxdWVyeShsYXllcnM6IExheWVyW10sIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8RmVhdHVyZVtdPltdIHtcclxuICAgIGlmICh0aGlzLnByZXZpb3VzTWVzc2FnZUlkcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2VJZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5yZW1vdmUoaWQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNcclxuICAgICAgLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiBsYXllci52aXNpYmxlICYmIGxheWVyLmlzSW5SZXNvbHV0aW9uc1JhbmdlKVxyXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHRoaXMucXVlcnlMYXllcihsYXllciwgb3B0aW9ucykpO1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMYXllcihsYXllcjogTGF5ZXIsIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8RmVhdHVyZVtdPiB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFF1ZXJ5VXJsKGxheWVyLmRhdGFTb3VyY2UsIG9wdGlvbnMsIGZhbHNlLCBsYXllci5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCkpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIChsYXllci5kYXRhU291cmNlIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2UpLm9wdGlvbnMucXVlcnlGb3JtYXQgPT09XHJcbiAgICAgIFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgdXJsR21sID0gdGhpcy5nZXRRdWVyeVVybChsYXllci5kYXRhU291cmNlLCBvcHRpb25zLCB0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsR21sLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoZ21sUmVzID0+IHtcclxuICAgICAgICAgIGNvbnN0IG1lcmdlZEdNTCA9IHRoaXMubWVyZ2VHTUwoZ21sUmVzLCB1cmwsIGxheWVyKTtcclxuICAgICAgICAgIGNvbnN0IGltcG9zZWRHZW9tID0gbWVyZ2VkR01MWzBdO1xyXG4gICAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcChyZXMgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdERhdGEocmVzLCBsYXllciwgb3B0aW9ucywgdXJsLCBpbXBvc2VkR2VvbSwgaW1wb3NlZFByb3BlcnRpZXMpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pO1xyXG4gICAgcmV0dXJuIHJlcXVlc3QucGlwZShtYXAocmVzID0+IHRoaXMuZXh0cmFjdERhdGEocmVzLCBsYXllciwgb3B0aW9ucywgdXJsKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUdNTChnbWxSZXMsIHVybCwgbGF5ZXI6IExheWVyKTogW0ZlYXR1cmVHZW9tZXRyeSwgeyBba2V5OiBzdHJpbmddOiBhbnkgfV0ge1xyXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IG9sRm9ybWF0R01MMigpO1xyXG4gICAgbGV0IGZlYXR1cmVzID0gcGFyc2VyLnJlYWRGZWF0dXJlcyhnbWxSZXMpO1xyXG4gICAgLy8gSGFuZGxlIG5vbiBzdGFuZGFyZCBHTUwgb3V0cHV0IChNYXBTZXJ2ZXIpXHJcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IHdtc1BhcnNlciA9IG5ldyBvbGZvcm1hdC5XTVNHZXRGZWF0dXJlSW5mbygpO1xyXG4gICAgICBmZWF0dXJlcyA9IHdtc1BhcnNlci5yZWFkRmVhdHVyZXMoZ21sUmVzKTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9sbWxpbmUgPSBuZXcgb2xnZW9tLk11bHRpTGluZVN0cmluZyhbXSk7XHJcbiAgICBsZXQgcHRzO1xyXG4gICAgY29uc3QgcHRzQXJyYXkgPSBbXTtcclxuICAgIGxldCBvbG1wb2x5ID0gbmV3IG9sZ2VvbS5NdWx0aVBvbHlnb24oW10pO1xyXG4gICAgbGV0IGZpcnN0RmVhdHVyZVR5cGU7XHJcbiAgICBjb25zdCBuYkZlYXR1cmVzID0gZmVhdHVyZXMubGVuZ3RoO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIGdlb21ldHJ5IGludGVyc2VjdCBiYm94XHJcbiAgICAvLyBmb3IgZ2Vvc2VydmVyIGdldGZlYXR1cmVpbmZvIHJlc3BvbnNlIGluIGRhdGEgcHJvamVjdGlvbiwgbm90IGNhbGwgcHJvamVjdGlvblxyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIGNvbnN0IGJib3hSYXcgPSBzZWFyY2hQYXJhbXMuYmJveDtcclxuICAgIGNvbnN0IGJib3ggPSBiYm94UmF3LnNwbGl0KCcsJyk7XHJcbiAgICBjb25zdCBiYm94RXh0ZW50ID0gb2xleHRlbnQuY3JlYXRlRW1wdHkoKTtcclxuICAgIG9sZXh0ZW50LmV4dGVuZChiYm94RXh0ZW50LCBiYm94KTtcclxuICAgIGNvbnN0IG91dEJib3hFeHRlbnQgPSBmYWxzZTtcclxuICAgIGxldCB0aXRsZUNvbnRlbnQ7XHJcbiAgICBsZXQgcXVlcnlUaWxlRmllbGQ7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcclxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcclxuICAgICAgaWYgKGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpIHtcclxuICAgICAgICBxdWVyeVRpbGVGaWVsZCA9IGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHtcclxuXHJcbiAgICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xyXG4gICAgICAgIGxldCBxdWVyeVRpdGxlQ29udGVudCA9IGZlYXR1cmUuZ2V0UHJvcGVydGllcygpW3F1ZXJ5VGlsZUZpZWxkXTtcclxuICAgICAgICBpZiAocXVlcnlUaXRsZUNvbnRlbnQpIHtcclxuICAgICAgICAgIHRpdGxlQ29udGVudCA9ICF0aXRsZUNvbnRlbnQgPyBxdWVyeVRpdGxlQ29udGVudCA6IGAke3RpdGxlQ29udGVudH0sJHtxdWVyeVRpdGxlQ29udGVudH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvKiAgaWYgKCFmZWF0dXJlLmdldEdlb21ldHJ5KCkuc2ltcGxpZnkoMTAwKS5pbnRlcnNlY3RzRXh0ZW50KGJib3hFeHRlbnQpKSB7XHJcbiAgICAgICAgb3V0QmJveEV4dGVudCA9IHRydWU7XHJcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgdG8gcHJvamVjdCB0aGUgZ2VvbWV0cnk/XHJcbiAgICAgIH0qL1xyXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcyA9IChmZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55KS5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlUeXBlID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcclxuXHJcbiAgICAgIGlmICghZmlyc3RGZWF0dXJlVHlwZSAmJiAhb3V0QmJveEV4dGVudCkge1xyXG4gICAgICAgIGZpcnN0RmVhdHVyZVR5cGUgPSBmZWF0dXJlR2VvbWV0cnlUeXBlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghb3V0QmJveEV4dGVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZmVhdHVyZUdlb21ldHJ5VHlwZSkge1xyXG4gICAgICAgICAgY2FzZSAnUG9pbnQnOlxyXG4gICAgICAgICAgICBpZiAobmJGZWF0dXJlcyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIHB0cyA9IG5ldyBvbGdlb20uUG9pbnQoZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHB0c0FycmF5LnB1c2goZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XHJcbiAgICAgICAgICAgIG9sbWxpbmUuYXBwZW5kTGluZVN0cmluZyhcclxuICAgICAgICAgICAgICBuZXcgb2xnZW9tLkxpbmVTdHJpbmcoZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnUG9seWdvbic6XHJcbiAgICAgICAgICAgIG9sbXBvbHkuYXBwZW5kUG9seWdvbihcclxuICAgICAgICAgICAgICBuZXcgb2xnZW9tLlBvbHlnb24oZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcclxuICAgICAgICAgICAgb2xtcG9seSA9IG5ldyBvbGdlb20uTXVsdGlQb2x5Z29uKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgb2xtcHRzO1xyXG4gICAgaWYgKHB0c0FycmF5Lmxlbmd0aCA9PT0gMCAmJiBwdHMpIHtcclxuICAgICAgb2xtcHRzID0ge1xyXG4gICAgICAgIHR5cGU6IHB0cy5nZXRUeXBlKCksXHJcbiAgICAgICAgY29vcmRpbmF0ZXM6IHB0cy5nZXRDb29yZGluYXRlcygpXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvbG1wdHMgPSB7XHJcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbdGhpcy5jb252ZXhIdWxsKHB0c0FycmF5KV1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmV0dXJuR2VvbWV0cnk7XHJcbiAgICBzd2l0Y2ggKGZpcnN0RmVhdHVyZVR5cGUpIHtcclxuICAgICAgY2FzZSAnTGluZVN0cmluZyc6XHJcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiBvbG1saW5lLmdldFR5cGUoKSxcclxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1saW5lLmdldENvb3JkaW5hdGVzKClcclxuICAgICAgICB9O1xyXG4gICAgICBjYXNlICdQb2ludCc6XHJcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSBvbG1wdHM7XHJcbiAgICAgIGNhc2UgJ1BvbHlnb24nOlxyXG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xyXG4gICAgICAgICAgdHlwZTogb2xtcG9seS5nZXRUeXBlKCksXHJcbiAgICAgICAgICBjb29yZGluYXRlczogb2xtcG9seS5nZXRDb29yZGluYXRlcygpXHJcbiAgICAgICAgfTtcclxuICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcclxuICAgICAgICByZXR1cm5HZW9tZXRyeSA9IHtcclxuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxyXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IG9sbXBvbHkuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbXBvc2VkUHJvcGVydGllcyA9IHt9O1xyXG5cclxuICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xyXG4gICAgICBpbXBvc2VkUHJvcGVydGllc1txdWVyeVRpbGVGaWVsZF0gPSB0aXRsZUNvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFsgcmV0dXJuR2VvbWV0cnksIGltcG9zZWRQcm9wZXJ0aWVzXTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgY3Jvc3MoYSwgYiwgbykge1xyXG4gICAgcmV0dXJuIChhWzBdIC0gb1swXSkgKiAoYlsxXSAtIG9bMV0pIC0gKGFbMV0gLSBvWzFdKSAqIChiWzBdIC0gb1swXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gcG9pbnRzIEFuIGFycmF5IG9mIFtYLCBZXSBjb29yZGluYXRlc1xyXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZSBpbnN0ZWFkIG9mIHR1cmYuanMgY29udmV4SHVsbCBiZWNhdXNlIFR1cmYgbmVlZHMgYXQgbGVhc3QgMyBwb2ludCB0byBtYWtlIGEgaHVsbC5cclxuICAgKiBodHRwczovL2VuLndpa2lib29rcy5vcmcvd2lraS9BbGdvcml0aG1fSW1wbGVtZW50YXRpb24vR2VvbWV0cnkvQ29udmV4X2h1bGwvTW9ub3RvbmVfY2hhaW4jSmF2YVNjcmlwdFxyXG4gICAqL1xyXG4gIGNvbnZleEh1bGwocG9pbnRzKSB7XHJcbiAgICBwb2ludHMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gYVswXSA9PT0gYlswXSA/IGFbMV0gLSBiWzFdIDogYVswXSAtIGJbMF07XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBsb3dlciA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcclxuICAgICAgd2hpbGUgKFxyXG4gICAgICAgIGxvd2VyLmxlbmd0aCA+PSAyICYmXHJcbiAgICAgICAgdGhpcy5jcm9zcyhsb3dlcltsb3dlci5sZW5ndGggLSAyXSwgbG93ZXJbbG93ZXIubGVuZ3RoIC0gMV0sIHBvaW50KSA8PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxvd2VyLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGxvd2VyLnB1c2gocG9pbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVwcGVyID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICB1cHBlci5sZW5ndGggPj0gMiAmJlxyXG4gICAgICAgIHRoaXMuY3Jvc3MoXHJcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAyXSxcclxuICAgICAgICAgIHVwcGVyW3VwcGVyLmxlbmd0aCAtIDFdLFxyXG4gICAgICAgICAgcG9pbnRzW2ldXHJcbiAgICAgICAgKSA8PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHVwcGVyLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHVwcGVyLnB1c2gocG9pbnRzW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICB1cHBlci5wb3AoKTtcclxuICAgIGxvd2VyLnBvcCgpO1xyXG4gICAgcmV0dXJuIGxvd2VyLmNvbmNhdCh1cHBlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3REYXRhKFxyXG4gICAgcmVzLFxyXG4gICAgbGF5ZXI6IExheWVyLFxyXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zLFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBpbXBvc2VkR2VvbWV0cnk/LFxyXG4gICAgaW1wb3NlZFByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgKTogRmVhdHVyZVtdIHtcclxuICAgIGNvbnN0IHF1ZXJ5RGF0YVNvdXJjZSA9IGxheWVyLmRhdGFTb3VyY2UgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZTtcclxuXHJcbiAgICBjb25zdCBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSB0aGlzLmdldEFsbG93ZWRGaWVsZHNBbmRBbGlhcyhsYXllcik7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBbXTtcclxuICAgIHN3aXRjaCAocXVlcnlEYXRhU291cmNlLm9wdGlvbnMucXVlcnlGb3JtYXQpIHtcclxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HTUwzOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0R01MM0RhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBsYXllci56SW5kZXgsXHJcbiAgICAgICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkpTT046XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjpcclxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HRU9KU09OMjpcclxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEdlb0pTT05EYXRhKHJlcywgbGF5ZXIuekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkVTUklKU09OOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0RXNyaUpTT05EYXRhKHJlcywgbGF5ZXIuekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LlRFWFQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RUZXh0RGF0YShyZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUw6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RIdG1sRGF0YShcclxuICAgICAgICAgIHJlcyxcclxuICAgICAgICAgIHF1ZXJ5RGF0YVNvdXJjZS5xdWVyeUh0bWxUYXJnZXQsXHJcbiAgICAgICAgICB1cmxcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0SHRtbERhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2UucXVlcnlIdG1sVGFyZ2V0LFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgaW1wb3NlZEdlb21ldHJ5LFxyXG4gICAgICAgICAgaW1wb3NlZFByb3BlcnRpZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkdNTDI6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHTUwyRGF0YShyZXMsIGxheWVyLCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPiAwICYmIGZlYXR1cmVzWzBdLmdlb21ldHJ5ID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGdlb21Ub0FkZCA9IHRoaXMuY3JlYXRlR2VvbWV0cnlGcm9tVXJsQ2xpY2sodXJsKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xyXG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkgPSBnZW9tVG9BZGQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3bXNEYXRhc291cmNlID0gbGF5ZXIuZGF0YVNvdXJjZSBhcyBXTVNEYXRhU291cmNlO1xyXG4gICAgY29uc3QgZmVhdHVyZUNvdW50ID0gd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgP1xyXG4gICAgICBuZXcgUmVnRXhwKCdGRUFUVVJFX0NPVU5UPScgKyB0aGlzLmZlYXR1cmVDb3VudCkgOlxyXG4gICAgICBuZXcgUmVnRXhwKCdGRUFUVVJFX0NPVU5UPScgKyB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnQpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgZmVhdHVyZUNvdW50LnRlc3QodXJsKSAmJlxyXG4gICAgICAoKHdtc0RhdGFzb3VyY2UucGFyYW1zPy5GRUFUVVJFX0NPVU5UICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gdGhpcy5mZWF0dXJlQ291bnQpIHx8XHJcbiAgICAgICghd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiYgZmVhdHVyZXMubGVuZ3RoID09PSB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnQpKSkge1xyXG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuZ2V0KCdpZ28uZ2VvLnF1ZXJ5LmZlYXR1cmVDb3VudE1heCcsIHt2YWx1ZTogbGF5ZXIudGl0bGV9KS5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZU9iaiA9IHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mbyhtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLnByZXZpb3VzTWVzc2FnZUlkcy5wdXNoKG1lc3NhZ2VPYmoudG9hc3RJZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoKGZlYXR1cmU6IEZlYXR1cmUsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbWFwTGFiZWwgPSBmZWF0dXJlLnByb3BlcnRpZXNbcXVlcnlEYXRhU291cmNlLm1hcExhYmVsXTtcclxuXHJcbiAgICAgIGxldCBleGNsdWRlO1xyXG4gICAgICBpZiAobGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zPy50eXBlID09PSAnd21zJykge1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zXHJcbiAgICAgICAgICAuc291cmNlT3B0aW9ucyBhcyBXTVNEYXRhU291cmNlT3B0aW9ucztcclxuICAgICAgICBleGNsdWRlID0gc291cmNlT3B0aW9ucyA/IHNvdXJjZU9wdGlvbnMuZXhjbHVkZUF0dHJpYnV0ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRRdWVyeVRpdGxlKGZlYXR1cmUsIGxheWVyKTtcclxuICAgICAgaWYgKCF0aXRsZSAmJiBmZWF0dXJlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGl0bGUgPSBgJHtsYXllci50aXRsZX0gKCR7aW5kZXggKyAxfSlgO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aXRsZSkge1xyXG4gICAgICAgIHRpdGxlID0gbGF5ZXIudGl0bGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1ldGEgPSBPYmplY3QuYXNzaWduKHt9LCBmZWF0dXJlLm1ldGEgfHwge30sIHtcclxuICAgICAgICBpZDogdXVpZCgpLFxyXG4gICAgICAgIHRpdGxlLFxyXG4gICAgICAgIG1hcFRpdGxlOiBtYXBMYWJlbCxcclxuICAgICAgICBzb3VyY2VUaXRsZTogbGF5ZXIudGl0bGUsXHJcbiAgICAgICAgb3JkZXI6IDEwMDAgLSBsYXllci56SW5kZXgsXHJcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZTogZXhjbHVkZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGZlYXR1cmUsIHtcclxuICAgICAgICBtZXRhLFxyXG4gICAgICAgIHByb2plY3Rpb246XHJcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2Uub3B0aW9ucy50eXBlID09PSAnY2FydG8nXHJcbiAgICAgICAgICAgID8gJ0VQU0c6NDMyNidcclxuICAgICAgICAgICAgOiBvcHRpb25zLnByb2plY3Rpb25cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlR2VvbWV0cnlGcm9tVXJsQ2xpY2sodXJsKSB7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IGFueSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXModXJsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgY29uc3QgYmJveFJhdyA9IHNlYXJjaFBhcmFtcy5iYm94O1xyXG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChzZWFyY2hQYXJhbXMud2lkdGgsIDEwKTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5oZWlnaHQsIDEwKTtcclxuICAgIGNvbnN0IHhQb3NpdGlvbiA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5pIHx8IHNlYXJjaFBhcmFtcy54LCAxMCk7XHJcbiAgICBjb25zdCB5UG9zaXRpb24gPSBwYXJzZUludChzZWFyY2hQYXJhbXMuaiB8fCBzZWFyY2hQYXJhbXMueSwgMTApO1xyXG5cclxuICAgIGNvbnN0IGJib3ggPSBiYm94UmF3LnNwbGl0KCcsJyk7XHJcbiAgICBsZXQgdGhyZXNob2xkID1cclxuICAgICAgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFswXSkpIC0gTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzJdKSkpICogMC4wNTtcclxuXHJcbiAgICAvLyBmb3IgY29udGV4dCBpbiBkZWdyZWUgKEVQU0c6NDMyNiw0MjY5Li4uKVxyXG4gICAgaWYgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFswXSkpIDwgMTgwKSB7XHJcbiAgICAgIHRocmVzaG9sZCA9IDAuMDQ1O1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xpY2t4ID1cclxuICAgICAgcGFyc2VGbG9hdChiYm94WzBdKSArXHJcbiAgICAgIChNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMF0pIC0gcGFyc2VGbG9hdChiYm94WzJdKSkgKiB4UG9zaXRpb24pIC9cclxuICAgICAgICB3aWR0aCAtXHJcbiAgICAgIHRocmVzaG9sZDtcclxuICAgIGNvbnN0IGNsaWNreSA9XHJcbiAgICAgIHBhcnNlRmxvYXQoYmJveFsxXSkgK1xyXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzFdKSAtIHBhcnNlRmxvYXQoYmJveFszXSkpICogeVBvc2l0aW9uKSAvXHJcbiAgICAgICAgaGVpZ2h0IC1cclxuICAgICAgdGhyZXNob2xkO1xyXG4gICAgY29uc3QgY2xpY2t4MSA9IGNsaWNreCArIHRocmVzaG9sZCAqIDI7XHJcbiAgICBjb25zdCBjbGlja3kxID0gY2xpY2t5ICsgdGhyZXNob2xkICogMjtcclxuXHJcbiAgICBjb25zdCB3a3RQb2x5ID1cclxuICAgICAgJ1BPTFlHT04oKCcgK1xyXG4gICAgICBjbGlja3ggK1xyXG4gICAgICAnICcgK1xyXG4gICAgICBjbGlja3kgK1xyXG4gICAgICAnLCAnICtcclxuICAgICAgY2xpY2t4ICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5MSArXHJcbiAgICAgICcsICcgK1xyXG4gICAgICBjbGlja3gxICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5MSArXHJcbiAgICAgICcsICcgK1xyXG4gICAgICBjbGlja3gxICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5ICtcclxuICAgICAgJywgJyArXHJcbiAgICAgIGNsaWNreCArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreSArXHJcbiAgICAgICcpKSc7XHJcblxyXG4gICAgY29uc3QgZm9ybWF0ID0gbmV3IG9sZm9ybWF0LldLVCgpO1xyXG4gICAgY29uc3QgdGVuUGVyY2VudFdpZHRoR2VvbSA9IGZvcm1hdC5yZWFkRmVhdHVyZSh3a3RQb2x5KTtcclxuICAgIGNvbnN0IGYgPSB0ZW5QZXJjZW50V2lkdGhHZW9tLmdldEdlb21ldHJ5KCkgYXMgYW55O1xyXG5cclxuICAgIGNvbnN0IG5ld0dlb20gPSB7XHJcbiAgICAgIHR5cGU6IGYuZ2V0VHlwZSgpLFxyXG4gICAgICBjb29yZGluYXRlczogZi5nZXRDb29yZGluYXRlcygpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXdHZW9tO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0R01MMkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz8pIHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDIoKTtcclxuICAgIGxldCBmZWF0dXJlcyA9IHBhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcclxuICAgIC8vIEhhbmRsZSBub24gc3RhbmRhcmQgR01MIG91dHB1dCAoTWFwU2VydmVyKVxyXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zdCB3bXNQYXJzZXIgPSBuZXcgb2xmb3JtYXQuV01TR2V0RmVhdHVyZUluZm8oKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBmZWF0dXJlcyA9IHdtc1BhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICdxdWVyeS5zZXJ2aWNlOiBNdWx0aXBvbHlnb25zIGFyZSBiYWRseSBtYW5hZ2VkIGluIG1hcHNlcnZlciBpbiBHTUwyLiBVc2UgYW5vdGhlciBmb3JtYXQuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKGZlYXR1cmUgPT5cclxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0R01MM0RhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz8pIHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDMoKTtcclxuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigncXVlcnkuc2VydmljZTogR01MMyBpcyBub3Qgd2VsbCBzdXBwb3J0ZWQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PlxyXG4gICAgICB0aGlzLmZlYXR1cmVUb1Jlc3VsdChmZWF0dXJlLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RHZW9KU09ORGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzPykge1xyXG4gICAgbGV0IGZlYXR1cmVzID0gW107XHJcbiAgICB0cnkge1xyXG4gICAgICBmZWF0dXJlcyA9IEpTT04ucGFyc2UocmVzLnJlcGxhY2UoLyhcXHJ8XFxuKS9nLCAnICcpKS5mZWF0dXJlcztcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdxdWVyeS5zZXJ2aWNlOiBVbmFibGUgdG8gcGFyc2UgZ2VvanNvbicsICdcXG4nLCByZXMpO1xyXG4gICAgfVxyXG4gICAgZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4gZmVhdHVyZS5tZXRhID0ge1xyXG4gICAgICBpZDogdXVpZCgpLFxyXG4gICAgICBvcmRlcjogMTAwMCAtIHpJbmRleCxcclxuICAgICAgYWxpYXM6IGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmVhdHVyZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RFc3JpSlNPTkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcykge1xyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlcykuZXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRFc3JpSlNPTigpO1xyXG4gICAgY29uc3QgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcblxyXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHRoaXMuZmVhdHVyZVRvUmVzdWx0KGZlYXR1cmUsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RUZXh0RGF0YShyZXMpIHtcclxuICAgIC8vIFRPRE9cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEh0bWxEYXRhKFxyXG4gICAgcmVzLFxyXG4gICAgaHRtbFRhcmdldDogUXVlcnlIdG1sVGFyZ2V0LFxyXG4gICAgdXJsLFxyXG4gICAgaW1wb3NlZEdlb21ldHJ5PyxcclxuICAgIGltcG9zZWRQcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gICkge1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIGNvbnN0IHByb2plY3Rpb24gPSBzZWFyY2hQYXJhbXMuY3JzIHx8IHNlYXJjaFBhcmFtcy5zcnMgfHwgJ0VQU0c6Mzg1Nyc7XHJcbiAgICBjb25zdCBnZW9tVG9BZGQgPSB0aGlzLmNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBodG1sVGFyZ2V0ICE9PSBRdWVyeUh0bWxUYXJnZXQuQkxBTksgJiZcclxuICAgICAgaHRtbFRhcmdldCAhPT0gUXVlcnlIdG1sVGFyZ2V0LklGUkFNRVxyXG4gICAgKSB7XHJcbiAgICAgIGh0bWxUYXJnZXQgPSBRdWVyeUh0bWxUYXJnZXQuSUZSQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJvZHlUYWdTdGFydCA9IHJlcy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzxib2R5PicpO1xyXG4gICAgY29uc3QgYm9keVRhZ0VuZCA9IHJlcy50b0xvd2VyQ2FzZSgpLmxhc3RJbmRleE9mKCc8L2JvZHk+JykgKyA3O1xyXG4gICAgLy8gcmVwbGFjZSBcXHIgXFxuICBhbmQgJyAnIHdpdGggJycgdG8gdmFsaWRhdGUgaWYgdGhlIGJvZHkgaXMgcmVhbGx5IGVtcHR5LiBDbGVhciBhbGwgdGhlIGh0bWwgdGFncyBmcm9tIGJvZHlcclxuICAgIGNvbnN0IGJvZHkgPSBzdHJpcHRhZ3MocmVzLnNsaWNlKGJvZHlUYWdTdGFydCwgYm9keVRhZ0VuZCkucmVwbGFjZSgvKFxccnxcXG58XFxzKS9nLCAnJykpO1xyXG4gICAgaWYgKGJvZHkgPT09ICcnIHx8IHJlcyA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiBGRUFUVVJFLFxyXG4gICAgICAgIHByb2plY3Rpb24sXHJcbiAgICAgICAgcHJvcGVydGllczogT2JqZWN0LmFzc2lnbih7IHRhcmdldDogaHRtbFRhcmdldCwgYm9keTogcmVzLCB1cmwgfSwgaW1wb3NlZFByb3BlcnRpZXMpLFxyXG4gICAgICAgIGdlb21ldHJ5OiBpbXBvc2VkR2VvbWV0cnkgfHwgZ2VvbVRvQWRkXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKHVybCkge1xyXG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSB1cmwuc3BsaXQoJz8nKTtcclxuICAgIGlmICghcXVlcnlTdHJpbmdbMV0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFpcnMgPSBxdWVyeVN0cmluZ1sxXS5zcGxpdCgnJicpO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgcGFpcnMuZm9yRWFjaChwYWlyID0+IHtcclxuICAgICAgcGFpciA9IHBhaXIuc3BsaXQoJz0nKTtcclxuICAgICAgcmVzdWx0W3BhaXJbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0gfHwgJycpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZlYXR1cmVUb1Jlc3VsdChcclxuICAgIGZlYXR1cmVPTDogb2xGZWF0dXJlPG9sZ2VvbS5HZW9tZXRyeT4sXHJcbiAgICB6SW5kZXg6IG51bWJlcixcclxuICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz9cclxuICApOiBGZWF0dXJlIHtcclxuICAgIGNvbnN0IGZlYXR1cmVHZW9tZXRyeSA9IGZlYXR1cmVPTC5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IE9iamVjdC5hc3NpZ24oe30sIGZlYXR1cmVPTC5nZXRQcm9wZXJ0aWVzKCkpO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbWV0cnk7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5HRU9NRVRSSUU7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5ib3VuZGVkQnk7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5zaGFwZTtcclxuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMudGhlX2dlb207XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5nZW9tO1xyXG5cclxuICAgIGxldCBnZW9tZXRyeTtcclxuICAgIGlmIChmZWF0dXJlR2VvbWV0cnkpIHtcclxuICAgICAgZ2VvbWV0cnkgPSB7XHJcbiAgICAgICAgdHlwZTogZmVhdHVyZUdlb21ldHJ5LmdldFR5cGUoKSxcclxuICAgICAgICBjb29yZGluYXRlczogZmVhdHVyZUdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiBGRUFUVVJFLFxyXG4gICAgICBwcm9qZWN0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgIHByb3BlcnRpZXMsXHJcbiAgICAgIGdlb21ldHJ5LFxyXG4gICAgICBtZXRhOiB7XHJcbiAgICAgICAgaWQ6IHV1aWQoKSxcclxuICAgICAgICBvcmRlcjogMTAwMCAtIHpJbmRleCxcclxuICAgICAgICBhbGlhczogYWxsb3dlZEZpZWxkc0FuZEFsaWFzXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFF1ZXJ5VXJsKFxyXG4gICAgZGF0YXNvdXJjZTogUXVlcnlhYmxlRGF0YVNvdXJjZSxcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICAgIGZvcmNlR01MMiA9IGZhbHNlLFxyXG4gICAgbWFwRXh0ZW50PzogTWFwRXh0ZW50XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGxldCB1cmw7XHJcblxyXG4gICAgaWYgKGRhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21RdWVyeVVybChkYXRhc291cmNlLCBvcHRpb25zLCBtYXBFeHRlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAoZGF0YXNvdXJjZS5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICBjYXNlIFdNU0RhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3Qgd21zRGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgYXMgV01TRGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zID0ge1xyXG4gICAgICAgICAgSU5GT19GT1JNQVQ6XHJcbiAgICAgICAgICAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLklORk9fRk9STUFUIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5Rm9ybWF0KSxcclxuICAgICAgICAgIFFVRVJZX0xBWUVSUzogd21zRGF0YXNvdXJjZS5wYXJhbXMuTEFZRVJTLFxyXG4gICAgICAgICAgRkVBVFVSRV9DT1VOVDogd21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCB8fCB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAod21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCkge1xyXG4gICAgICAgICAgdGhpcy5mZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcmNlR01MMikge1xyXG4gICAgICAgICAgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zLklORk9fRk9STUFUID0gdGhpcy5nZXRNaW1lSW5mb0Zvcm1hdChcclxuICAgICAgICAgICAgUXVlcnlGb3JtYXQuR01MMlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVybCA9IHdtc0RhdGFzb3VyY2Uub2wuZ2V0RmVhdHVyZUluZm9VcmwoXHJcbiAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLFxyXG4gICAgICAgICAgb3B0aW9ucy5yZXNvbHV0aW9uLFxyXG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0aW9uLFxyXG4gICAgICAgICAgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zdCB3bXNWZXJzaW9uID1cclxuICAgICAgICAvLyAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLlZFUlNJT04gfHxcclxuICAgICAgICAvLyAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLnZlcnNpb24gfHxcclxuICAgICAgICAvLyAgICcxLjMuMCc7XHJcbiAgICAgICAgLy8gaWYgKHdtc1ZlcnNpb24gIT09ICcxLjMuMCcpIHtcclxuICAgICAgICAvLyAgIHVybCA9IHVybC5yZXBsYWNlKCcmST0nLCAnJlg9Jyk7XHJcbiAgICAgICAgLy8gICB1cmwgPSB1cmwucmVwbGFjZSgnJko9JywgJyZZPScpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDYXJ0b0RhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3QgY2FydG9EYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBDYXJ0b0RhdGFTb3VyY2U7XHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9XHJcbiAgICAgICAgICAnaHR0cHM6Ly8nICtcclxuICAgICAgICAgIGNhcnRvRGF0YXNvdXJjZS5vcHRpb25zLmFjY291bnQgK1xyXG4gICAgICAgICAgJy5jYXJ0by5jb20vYXBpL3YyL3NxbD8nO1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9ICdmb3JtYXQ9R2VvSlNPTic7XHJcbiAgICAgICAgY29uc3Qgc3FsID1cclxuICAgICAgICAgICcmcT0nICsgY2FydG9EYXRhc291cmNlLm9wdGlvbnMuY29uZmlnLmxheWVyc1swXS5vcHRpb25zLnNxbDtcclxuICAgICAgICBjb25zdCBjbGF1c2UgPVxyXG4gICAgICAgICAgJyBXSEVSRSBTVF9JbnRlcnNlY3RzKHRoZV9nZW9tX3dlYm1lcmNhdG9yLFNUX0JVRkZFUihTVF9TZXRTUklEKFNUX1BPSU5UKCc7XHJcbiAgICAgICAgY29uc3QgbWV0ZXJzID0gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cclxuICAgICAgICAgID8gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cclxuICAgICAgICAgIDogJzEwMDAnO1xyXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID1cclxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMF0gK1xyXG4gICAgICAgICAgJywnICtcclxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMV0gK1xyXG4gICAgICAgICAgJyksMzg1NyksJyArXHJcbiAgICAgICAgICBtZXRlcnMgK1xyXG4gICAgICAgICAgJykpJztcclxuXHJcbiAgICAgICAgdXJsID0gYCR7YmFzZVVybH0ke2Zvcm1hdH0ke3NxbH0ke2NsYXVzZX0ke2Nvb3JkaW5hdGVzfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZTpcclxuICAgICAgY2FzZSBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3QgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2U7XHJcbiAgICAgICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMobWFwRXh0ZW50WzBdIC0gbWFwRXh0ZW50WzJdKTtcclxuICAgICAgICBjb25zdCBkZWx0YVkgPSBNYXRoLmFicyhtYXBFeHRlbnRbMV0gLSBtYXBFeHRlbnRbM10pO1xyXG4gICAgICAgIGNvbnN0IG1heERlbHRhID0gZGVsdGFYID4gZGVsdGFZID8gZGVsdGFYIDogZGVsdGFZO1xyXG4gICAgICAgIGNvbnN0IGNsaWNrQnVmZmVyID0gbWF4RGVsdGEgKiAwLjAwNTtcclxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvbiA/IHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5UHJlY2lzaW9uIDogY2xpY2tCdWZmZXI7XHJcbiAgICAgICAgY29uc3QgZXh0ZW50ID0gb2xleHRlbnQuYnVmZmVyKFxyXG4gICAgICAgICAgb2xleHRlbnQuYm91bmRpbmdFeHRlbnQoW29wdGlvbnMuY29vcmRpbmF0ZXNdKSxcclxuICAgICAgICAgIHRocmVzaG9sZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9XHJcbiAgICAgICAgICB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy51cmwgK1xyXG4gICAgICAgICAgJy8nICtcclxuICAgICAgICAgIHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLmxheWVyICtcclxuICAgICAgICAgICcvcXVlcnkvJztcclxuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGVuY29kZVVSSUNvbXBvbmVudChcclxuICAgICAgICAgICd7XCJ4bWluXCI6JyArXHJcbiAgICAgICAgICAgIGV4dGVudFswXSArXHJcbiAgICAgICAgICAgICcsXCJ5bWluXCI6JyArXHJcbiAgICAgICAgICAgIGV4dGVudFsxXSArXHJcbiAgICAgICAgICAgICcsXCJ4bWF4XCI6JyArXHJcbiAgICAgICAgICAgIGV4dGVudFsyXSArXHJcbiAgICAgICAgICAgICcsXCJ5bWF4XCI6JyArXHJcbiAgICAgICAgICAgIGV4dGVudFszXSArXHJcbiAgICAgICAgICAgICcsXCJzcGF0aWFsUmVmZXJlbmNlXCI6e1wid2tpZFwiOjEwMjEwMH19J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gW1xyXG4gICAgICAgICAgJ2Y9anNvbicsXHJcbiAgICAgICAgICBgZ2VvbWV0cnk9JHtnZW9tZXRyeX1gLFxyXG4gICAgICAgICAgJ2dlb21ldHJ5VHlwZT1lc3JpR2VvbWV0cnlFbnZlbG9wZScsXHJcbiAgICAgICAgICAnaW5TUj0xMDIxMDAnLFxyXG4gICAgICAgICAgJ3NwYXRpYWxSZWw9ZXNyaVNwYXRpYWxSZWxJbnRlcnNlY3RzJyxcclxuICAgICAgICAgICdvdXRGaWVsZHM9KicsXHJcbiAgICAgICAgICAncmV0dXJuR2VvbWV0cnk9dHJ1ZScsXHJcbiAgICAgICAgICAnb3V0U1I9MTAyMTAwJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgdXJsID0gYCR7c2VydmljZVVybH0/JHtwYXJhbXMuam9pbignJicpfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVybDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWltZUluZm9Gb3JtYXQocXVlcnlGb3JtYXQ6IHN0cmluZykge1xyXG4gICAgbGV0IG1pbWUgPSAnYXBwbGljYXRpb24vdm5kLm9nYy5nbWwnO1xyXG4gICAgY29uc3Qga2V5RW51bSA9IE9iamVjdC5rZXlzKFF1ZXJ5Rm9ybWF0KS5maW5kKFxyXG4gICAgICBrZXkgPT4gUXVlcnlGb3JtYXRba2V5XSA9PT0gcXVlcnlGb3JtYXRcclxuICAgICk7XHJcbiAgICBpZiAoa2V5RW51bSkge1xyXG4gICAgICBtaW1lID0gUXVlcnlGb3JtYXRNaW1lVHlwZVtrZXlFbnVtXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWltZTtcclxuICB9XHJcblxyXG4gIGdldEFsbG93ZWRGaWVsZHNBbmRBbGlhcyhsYXllcjogYW55KSB7XHJcbiAgICBsZXQgYWxsb3dlZEZpZWxkc0FuZEFsaWFzO1xyXG4gICAgaWYgKFxyXG4gICAgICBsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnM/LnNvdXJjZUZpZWxkcyAmJlxyXG4gICAgICBsYXllci5vcHRpb25zLnNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcy5sZW5ndGggPj0gMVxyXG4gICAgKSB7XHJcbiAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhcyA9IHt9O1xyXG4gICAgICBsYXllci5vcHRpb25zLnNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcy5mb3JFYWNoKHNvdXJjZUZpZWxkID0+IHtcclxuICAgICAgICBjb25zdCBhbGlhcyA9IHNvdXJjZUZpZWxkLmFsaWFzID8gc291cmNlRmllbGQuYWxpYXMgOiBzb3VyY2VGaWVsZC5uYW1lO1xyXG4gICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1tzb3VyY2VGaWVsZC5uYW1lXSA9IGFsaWFzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxvd2VkRmllbGRzQW5kQWxpYXM7XHJcbiAgfVxyXG5cclxuICBnZXRRdWVyeVRpdGxlKGZlYXR1cmU6IEZlYXR1cmUsIGxheWVyOiBMYXllcik6IHN0cmluZyB7XHJcbiAgICBsZXQgdGl0bGU7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcclxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcclxuICAgICAgaWYgKGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpIHtcclxuICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0TGFiZWxNYXRjaChmZWF0dXJlLCBkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aXRsZTtcclxuICB9XHJcblxyXG4gIGdldExhYmVsTWF0Y2goZmVhdHVyZTogRmVhdHVyZSwgbGFiZWxNYXRjaCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFiZWwgPSBsYWJlbE1hdGNoO1xyXG4gICAgY29uc3QgbGFiZWxUb0dldCA9IEFycmF5LmZyb20obGFiZWxNYXRjaC5tYXRjaEFsbCgvXFwkXFx7KFteXFx7XFx9XSspXFx9L2cpKTtcclxuXHJcbiAgICBsYWJlbFRvR2V0LmZvckVhY2godiA9PiB7XHJcbiAgICAgIGxhYmVsID0gbGFiZWwucmVwbGFjZSh2WzBdLCBmZWF0dXJlLnByb3BlcnRpZXNbdlsxXV0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTm90aGluZyBkb25lPyBjaGVjayBmZWF0dXJlJ3MgYXR0cmlidXRlXHJcbiAgICBpZiAobGFiZWxUb0dldC5sZW5ndGggPT09IDAgJiYgbGFiZWwgPT09IGxhYmVsTWF0Y2gpIHtcclxuICAgICAgbGFiZWwgPSBmZWF0dXJlLnByb3BlcnRpZXNbbGFiZWxNYXRjaF0gfHwgbGFiZWxNYXRjaDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGFiZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gZGF0YXNvdXJjZSBRdWVyeWFibGVEYXRhU291cmNlXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgUXVlcnlPcHRpb25zXHJcbiAgICogQG1hcEV4dGVudCBleHRlbnQgb2YgdGhlIG1hcCB3aGVuIGNsaWNrIGV2ZW50XHJcbiAgICpcclxuICAgKi9cclxuXHJcbiAgZ2V0Q3VzdG9tUXVlcnlVcmwoXHJcbiAgICBkYXRhc291cmNlOiBRdWVyeWFibGVEYXRhU291cmNlLFxyXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zLFxyXG4gICAgbWFwRXh0ZW50PzogTWFwRXh0ZW50KTogc3RyaW5nIHtcclxuXHJcbiAgICAgIGxldCB1cmwgPSBkYXRhc291cmNlLm9wdGlvbnMucXVlcnlVcmwucmVwbGFjZSgvXFx7eG1pblxcfS9nLCBtYXBFeHRlbnRbMF0udG9TdHJpbmcoKSlcclxuICAgICAgLnJlcGxhY2UoL1xce3ltaW5cXH0vZywgbWFwRXh0ZW50WzFdLnRvU3RyaW5nKCkpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHt4bWF4XFx9L2csIG1hcEV4dGVudFsyXS50b1N0cmluZygpKVxyXG4gICAgICAucmVwbGFjZSgvXFx7eW1heFxcfS9nLCBtYXBFeHRlbnRbM10udG9TdHJpbmcoKSlcclxuICAgICAgLnJlcGxhY2UoL1xce3hcXH0vZywgb3B0aW9ucy5jb29yZGluYXRlc1swXS50b1N0cmluZygpKVxyXG4gICAgICAucmVwbGFjZSgvXFx7eVxcfS9nLCBvcHRpb25zLmNvb3JkaW5hdGVzWzFdLnRvU3RyaW5nKCkpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHtyZXNvbHV0aW9uXFx9L2csIG9wdGlvbnMucmVzb2x1dGlvbi50b1N0cmluZygpKVxyXG4gICAgICAucmVwbGFjZSgvXFx7c3JpZFxcfS9nLCBvcHRpb25zLnByb2plY3Rpb24ucmVwbGFjZSgnRVBTRzonLCcnKSk7XHJcblxyXG4gICAgICByZXR1cm4gdXJsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==