@igo2/geo 1.12.0 → 1.13.0-alpha.1

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 (613) hide show
  1. package/{esm2015/igo2-geo.js → esm2020/igo2-geo.mjs} +0 -0
  2. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +299 -0
  3. package/{esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js → esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs} +13 -19
  4. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +244 -0
  5. package/{esm2015/lib/catalog/catalog-browser/catalog-browser.module.js → esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs} +17 -19
  6. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +209 -0
  7. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +79 -0
  8. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +217 -0
  9. package/{esm2015/lib/catalog/catalog-library/catalog-library.module.js → esm2020/lib/catalog/catalog-library/catalog-library.module.mjs} +21 -23
  10. package/{esm2015/lib/catalog/catalog.module.js → esm2020/lib/catalog/catalog.module.mjs} +9 -11
  11. package/{esm2015/lib/catalog/index.js → esm2020/lib/catalog/index.mjs} +0 -0
  12. package/{esm2015/lib/catalog/shared/catalog.abstract.js → esm2020/lib/catalog/shared/catalog.abstract.mjs} +0 -0
  13. package/{esm2015/lib/catalog/shared/catalog.enum.js → esm2020/lib/catalog/shared/catalog.enum.mjs} +0 -0
  14. package/{esm2015/lib/catalog/shared/catalog.interface.js → esm2020/lib/catalog/shared/catalog.interface.mjs} +0 -0
  15. package/esm2020/lib/catalog/shared/catalog.service.mjs +606 -0
  16. package/{esm2015/lib/catalog/shared/index.js → esm2020/lib/catalog/shared/index.mjs} +0 -0
  17. package/{esm2015/lib/datasource/datasource.module.js → esm2020/lib/datasource/datasource.module.mjs} +2 -2
  18. package/{esm2015/lib/datasource/index.js → esm2020/lib/datasource/index.mjs} +0 -0
  19. package/esm2020/lib/datasource/shared/capabilities.service.mjs +426 -0
  20. package/{esm2015/lib/datasource/shared/datasource.service.js → esm2020/lib/datasource/shared/datasource.service.mjs} +0 -0
  21. package/{esm2015/lib/datasource/shared/datasources/any-datasource.interface.js → esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs} +0 -0
  22. package/{esm2015/lib/datasource/shared/datasources/any-datasource.js → esm2020/lib/datasource/shared/datasources/any-datasource.mjs} +0 -0
  23. package/{esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs} +0 -0
  24. package/{esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs} +0 -0
  25. package/{esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js → esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs} +0 -0
  26. package/{esm2015/lib/datasource/shared/datasources/carto-datasource.js → esm2020/lib/datasource/shared/datasources/carto-datasource.mjs} +0 -0
  27. package/{esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js → esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs} +0 -0
  28. package/{esm2015/lib/datasource/shared/datasources/cluster-datasource.js → esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs} +0 -0
  29. package/{esm2015/lib/datasource/shared/datasources/data.service.js → esm2020/lib/datasource/shared/datasources/data.service.mjs} +0 -0
  30. package/{esm2015/lib/datasource/shared/datasources/datasource.interface.js → esm2020/lib/datasource/shared/datasources/datasource.interface.mjs} +0 -0
  31. package/{esm2015/lib/datasource/shared/datasources/datasource.js → esm2020/lib/datasource/shared/datasources/datasource.mjs} +0 -0
  32. package/{esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js → esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs} +0 -0
  33. package/{esm2015/lib/datasource/shared/datasources/feature-datasource.js → esm2020/lib/datasource/shared/datasources/feature-datasource.mjs} +0 -0
  34. package/{esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs} +0 -0
  35. package/{esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs} +0 -0
  36. package/{esm2015/lib/datasource/shared/datasources/index.js → esm2020/lib/datasource/shared/datasources/index.mjs} +0 -0
  37. package/{esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js → esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs} +0 -0
  38. package/{esm2015/lib/datasource/shared/datasources/mvt-datasource.js → esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs} +0 -0
  39. package/{esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js → esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs} +0 -0
  40. package/{esm2015/lib/datasource/shared/datasources/osm-datasource.js → esm2020/lib/datasource/shared/datasources/osm-datasource.mjs} +0 -0
  41. package/{esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs} +0 -0
  42. package/{esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs} +0 -0
  43. package/{esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js → esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs} +0 -0
  44. package/{esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js → esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs} +0 -0
  45. package/{esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js → esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs} +0 -0
  46. package/{esm2015/lib/datasource/shared/datasources/websocket-datasource.js → esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs} +0 -0
  47. package/{esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs} +0 -0
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +74 -0
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +152 -0
  50. package/{esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs} +0 -0
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -0
  52. package/{esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js → esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs} +4 -4
  53. package/{esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs} +0 -0
  54. package/{esm2015/lib/datasource/shared/datasources/wmts-datasource.js → esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs} +0 -0
  55. package/{esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js → esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs} +0 -0
  56. package/{esm2015/lib/datasource/shared/datasources/xyz-datasource.js → esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs} +0 -0
  57. package/{esm2015/lib/datasource/shared/index.js → esm2020/lib/datasource/shared/index.mjs} +0 -0
  58. package/{esm2015/lib/datasource/shared/options/index.js → esm2020/lib/datasource/shared/options/index.mjs} +0 -0
  59. package/{esm2015/lib/datasource/shared/options/options-api.interface.js → esm2020/lib/datasource/shared/options/options-api.interface.mjs} +0 -0
  60. package/{esm2015/lib/datasource/shared/options/options-api.providers.js → esm2020/lib/datasource/shared/options/options-api.providers.mjs} +0 -0
  61. package/{esm2015/lib/datasource/shared/options/options-api.service.js → esm2020/lib/datasource/shared/options/options-api.service.mjs} +0 -0
  62. package/{esm2015/lib/datasource/shared/options/options.service.js → esm2020/lib/datasource/shared/options/options.service.mjs} +0 -0
  63. package/{esm2015/lib/datasource/utils/esri-style-generator.js → esm2020/lib/datasource/utils/esri-style-generator.mjs} +0 -0
  64. package/{esm2015/lib/datasource/utils/index.js → esm2020/lib/datasource/utils/index.mjs} +0 -0
  65. package/{esm2015/lib/datasource/utils/tilegrid.js → esm2020/lib/datasource/utils/tilegrid.mjs} +0 -0
  66. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +224 -0
  67. package/{esm2015/lib/directions/directions-buttons/index.js → esm2020/lib/directions/directions-buttons/index.mjs} +0 -0
  68. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +290 -0
  69. package/{esm2015/lib/directions/directions-inputs/index.js → esm2020/lib/directions/directions-inputs/index.mjs} +0 -0
  70. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +196 -0
  71. package/{esm2015/lib/directions/directions-results/index.js → esm2020/lib/directions/directions-results/index.mjs} +0 -0
  72. package/{esm2015/lib/directions/directions-sources/directions-source.interface.js → esm2020/lib/directions/directions-sources/directions-source.interface.mjs} +0 -0
  73. package/{esm2015/lib/directions/directions-sources/directions-source.js → esm2020/lib/directions/directions-sources/directions-source.mjs} +0 -0
  74. package/{esm2015/lib/directions/directions-sources/directions-source.provider.js → esm2020/lib/directions/directions-sources/directions-source.provider.mjs} +0 -0
  75. package/{esm2015/lib/directions/directions-sources/index.js → esm2020/lib/directions/directions-sources/index.mjs} +0 -0
  76. package/{esm2015/lib/directions/directions-sources/osrm-directions-source.js → esm2020/lib/directions/directions-sources/osrm-directions-source.mjs} +0 -0
  77. package/esm2020/lib/directions/directions.component.mjs +311 -0
  78. package/{esm2015/lib/directions/directions.module.js → esm2020/lib/directions/directions.module.mjs} +16 -18
  79. package/{esm2015/lib/directions/index.js → esm2020/lib/directions/index.mjs} +0 -0
  80. package/{esm2015/lib/directions/shared/directions-source.service.js → esm2020/lib/directions/shared/directions-source.service.mjs} +0 -0
  81. package/{esm2015/lib/directions/shared/directions.enum.js → esm2020/lib/directions/shared/directions.enum.mjs} +0 -0
  82. package/{esm2015/lib/directions/shared/directions.interface.js → esm2020/lib/directions/shared/directions.interface.mjs} +0 -0
  83. package/{esm2015/lib/directions/shared/directions.service.js → esm2020/lib/directions/shared/directions.service.mjs} +0 -0
  84. package/esm2020/lib/directions/shared/directions.utils.mjs +510 -0
  85. package/{esm2015/lib/directions/shared/index.js → esm2020/lib/directions/shared/index.mjs} +0 -0
  86. package/{esm2015/lib/directions/shared/store.js → esm2020/lib/directions/shared/store.mjs} +0 -0
  87. package/esm2020/lib/download/download-button/download-button.component.mjs +61 -0
  88. package/{esm2015/lib/download/download-button/index.js → esm2020/lib/download/download-button/index.mjs} +0 -0
  89. package/{esm2015/lib/download/download.module.js → esm2020/lib/download/download.module.mjs} +6 -8
  90. package/{esm2015/lib/download/index.js → esm2020/lib/download/index.mjs} +0 -0
  91. package/{esm2015/lib/download/shared/download.interface.js → esm2020/lib/download/shared/download.interface.mjs} +0 -0
  92. package/{esm2015/lib/download/shared/download.service.js → esm2020/lib/download/shared/download.service.mjs} +0 -0
  93. package/{esm2015/lib/download/shared/index.js → esm2020/lib/download/shared/index.mjs} +0 -0
  94. package/{esm2015/lib/draw/draw/draw-popup.component.js → esm2020/lib/draw/draw/draw-popup.component.mjs} +11 -19
  95. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +48 -0
  96. package/esm2020/lib/draw/draw/draw.component.mjs +714 -0
  97. package/{esm2015/lib/draw/draw/draw.module.js → esm2020/lib/draw/draw/draw.module.mjs} +19 -21
  98. package/{esm2015/lib/draw/drawingTool.module.js → esm2020/lib/draw/drawingTool.module.mjs} +2 -2
  99. package/{esm2015/lib/draw/index.js → esm2020/lib/draw/index.mjs} +0 -0
  100. package/{esm2015/lib/draw/shared/draw-icon.service.js → esm2020/lib/draw/shared/draw-icon.service.mjs} +0 -0
  101. package/{esm2015/lib/draw/shared/draw-style.service.js → esm2020/lib/draw/shared/draw-style.service.mjs} +0 -0
  102. package/{esm2015/lib/draw/shared/draw.enum.js → esm2020/lib/draw/shared/draw.enum.mjs} +0 -0
  103. package/{esm2015/lib/draw/shared/draw.interface.js → esm2020/lib/draw/shared/draw.interface.mjs} +0 -0
  104. package/{esm2015/lib/draw/shared/draw.utils.js → esm2020/lib/draw/shared/draw.utils.mjs} +0 -0
  105. package/{esm2015/lib/draw/shared/index.js → esm2020/lib/draw/shared/index.mjs} +0 -0
  106. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +377 -0
  107. package/{esm2015/lib/feature/feature-details/feature-details.directive.js → esm2020/lib/feature/feature-details/feature-details.directive.mjs} +0 -0
  108. package/{esm2015/lib/feature/feature-details/feature-details.module.js → esm2020/lib/feature/feature-details/feature-details.module.mjs} +6 -8
  109. package/{esm2015/lib/feature/feature-form/feature-form.component.js → esm2020/lib/feature/feature-form/feature-form.component.mjs} +3 -8
  110. package/{esm2015/lib/feature/feature-form/feature-form.module.js → esm2020/lib/feature/feature-form/feature-form.module.mjs} +3 -5
  111. package/{esm2015/lib/feature/feature.module.js → esm2020/lib/feature/feature.module.mjs} +2 -4
  112. package/{esm2015/lib/feature/index.js → esm2020/lib/feature/index.mjs} +0 -0
  113. package/{esm2015/lib/feature/shared/feature.enums.js → esm2020/lib/feature/shared/feature.enums.mjs} +0 -0
  114. package/{esm2015/lib/feature/shared/feature.interfaces.js → esm2020/lib/feature/shared/feature.interfaces.mjs} +0 -0
  115. package/{esm2015/lib/feature/shared/feature.utils.js → esm2020/lib/feature/shared/feature.utils.mjs} +0 -0
  116. package/{esm2015/lib/feature/shared/index.js → esm2020/lib/feature/shared/index.mjs} +0 -0
  117. package/{esm2015/lib/feature/shared/store.js → esm2020/lib/feature/shared/store.mjs} +0 -0
  118. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +113 -0
  119. package/{esm2015/lib/feature/shared/strategies/in-map-resolution.js → esm2020/lib/feature/shared/strategies/in-map-resolution.mjs} +0 -0
  120. package/{esm2015/lib/feature/shared/strategies/index.js → esm2020/lib/feature/shared/strategies/index.mjs} +0 -0
  121. package/{esm2015/lib/feature/shared/strategies/loading-layer.js → esm2020/lib/feature/shared/strategies/loading-layer.mjs} +0 -0
  122. package/{esm2015/lib/feature/shared/strategies/loading.js → esm2020/lib/feature/shared/strategies/loading.mjs} +0 -0
  123. package/{esm2015/lib/feature/shared/strategies/selection.js → esm2020/lib/feature/shared/strategies/selection.mjs} +0 -0
  124. package/{esm2015/lib/feature/shared/strategies.utils.js → esm2020/lib/feature/shared/strategies.utils.mjs} +0 -0
  125. package/esm2020/lib/filter/filter.module.mjs +289 -0
  126. package/{esm2015/lib/filter/index.js → esm2020/lib/filter/index.mjs} +0 -0
  127. package/{esm2015/lib/filter/ogc-filter-button/index.js → esm2020/lib/filter/ogc-filter-button/index.mjs} +0 -0
  128. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +140 -0
  129. package/{esm2015/lib/filter/ogc-filter-form/index.js → esm2020/lib/filter/ogc-filter-form/index.mjs} +0 -0
  130. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +645 -0
  131. package/{esm2015/lib/filter/ogc-filter-selection/index.js → esm2020/lib/filter/ogc-filter-selection/index.mjs} +0 -0
  132. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1302 -0
  133. package/{esm2015/lib/filter/ogc-filter-time/index.js → esm2020/lib/filter/ogc-filter-time/index.mjs} +0 -0
  134. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +177 -0
  135. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +871 -0
  136. package/{esm2015/lib/filter/ogc-filterable-form/index.js → esm2020/lib/filter/ogc-filterable-form/index.mjs} +0 -0
  137. package/{esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js → esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs} +3 -6
  138. package/{esm2015/lib/filter/ogc-filterable-item/index.js → esm2020/lib/filter/ogc-filterable-item/index.mjs} +0 -0
  139. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +302 -0
  140. package/{esm2015/lib/filter/ogc-filterable-list/index.js → esm2020/lib/filter/ogc-filterable-list/index.mjs} +0 -0
  141. package/{esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js → esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs} +0 -0
  142. package/{esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js → esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs} +2 -6
  143. package/{esm2015/lib/filter/shared/filterable-datasource.pipe.js → esm2020/lib/filter/shared/filterable-datasource.pipe.mjs} +0 -0
  144. package/{esm2015/lib/filter/shared/index.js → esm2020/lib/filter/shared/index.mjs} +0 -0
  145. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
  146. package/{esm2015/lib/filter/shared/ogc-filter.enum.js → esm2020/lib/filter/shared/ogc-filter.enum.mjs} +0 -0
  147. package/{esm2015/lib/filter/shared/ogc-filter.interface.js → esm2020/lib/filter/shared/ogc-filter.interface.mjs} +0 -0
  148. package/esm2020/lib/filter/shared/ogc-filter.mjs +692 -0
  149. package/{esm2015/lib/filter/shared/ogc-filter.service.js → esm2020/lib/filter/shared/ogc-filter.service.mjs} +0 -0
  150. package/{esm2015/lib/filter/shared/spatial-filter.enum.js → esm2020/lib/filter/shared/spatial-filter.enum.mjs} +0 -0
  151. package/{esm2015/lib/filter/shared/spatial-filter.interface.js → esm2020/lib/filter/shared/spatial-filter.interface.mjs} +0 -0
  152. package/{esm2015/lib/filter/shared/spatial-filter.service.js → esm2020/lib/filter/shared/spatial-filter.service.mjs} +0 -0
  153. package/{esm2015/lib/filter/shared/time-filter.enum.js → esm2020/lib/filter/shared/time-filter.enum.mjs} +0 -0
  154. package/{esm2015/lib/filter/shared/time-filter.interface.js → esm2020/lib/filter/shared/time-filter.interface.mjs} +0 -0
  155. package/{esm2015/lib/filter/shared/time-filter.service.js → esm2020/lib/filter/shared/time-filter.service.mjs} +0 -0
  156. package/{esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs} +0 -0
  157. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1076 -0
  158. package/{esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs} +0 -0
  159. package/{esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js → esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs} +16 -32
  160. package/{esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs} +0 -0
  161. package/{esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js → esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs} +7 -20
  162. package/{esm2015/lib/filter/time-filter-button/index.js → esm2020/lib/filter/time-filter-button/index.mjs} +0 -0
  163. package/{esm2015/lib/filter/time-filter-button/time-filter-button.component.js → esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs} +3 -8
  164. package/{esm2015/lib/filter/time-filter-form/index.js → esm2020/lib/filter/time-filter-form/index.mjs} +0 -0
  165. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +734 -0
  166. package/{esm2015/lib/filter/time-filter-item/index.js → esm2020/lib/filter/time-filter-item/index.mjs} +0 -0
  167. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +119 -0
  168. package/{esm2015/lib/filter/time-filter-list/index.js → esm2020/lib/filter/time-filter-list/index.mjs} +0 -0
  169. package/{esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js → esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs} +0 -0
  170. package/{esm2015/lib/filter/time-filter-list/time-filter-list.component.js → esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs} +2 -6
  171. package/{esm2015/lib/geo.module.js → esm2020/lib/geo.module.mjs} +2 -2
  172. package/{esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js → esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs} +2 -6
  173. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +189 -0
  174. package/{esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js → esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs} +10 -12
  175. package/{esm2015/lib/geometry/geometry.module.js → esm2020/lib/geometry/geometry.module.mjs} +3 -5
  176. package/{esm2015/lib/geometry/index.js → esm2020/lib/geometry/index.mjs} +0 -0
  177. package/{esm2015/lib/geometry/shared/controls/draw.js → esm2020/lib/geometry/shared/controls/draw.mjs} +0 -0
  178. package/{esm2015/lib/geometry/shared/controls/index.js → esm2020/lib/geometry/shared/controls/index.mjs} +0 -0
  179. package/{esm2015/lib/geometry/shared/controls/modify.js → esm2020/lib/geometry/shared/controls/modify.mjs} +1 -1
  180. package/{esm2015/lib/geometry/shared/controls/slice.js → esm2020/lib/geometry/shared/controls/slice.mjs} +0 -0
  181. package/{esm2015/lib/geometry/shared/geometry.errors.js → esm2020/lib/geometry/shared/geometry.errors.mjs} +0 -0
  182. package/{esm2015/lib/geometry/shared/geometry.interfaces.js → esm2020/lib/geometry/shared/geometry.interfaces.mjs} +0 -0
  183. package/{esm2015/lib/geometry/shared/geometry.utils.js → esm2020/lib/geometry/shared/geometry.utils.mjs} +0 -0
  184. package/{esm2015/lib/geometry/shared/index.js → esm2020/lib/geometry/shared/index.mjs} +0 -0
  185. package/esm2020/lib/import-export/export-button/export-button.component.mjs +64 -0
  186. package/{esm2015/lib/import-export/export-button/index.js → esm2020/lib/import-export/export-button/index.mjs} +0 -0
  187. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1190 -0
  188. package/{esm2015/lib/import-export/import-export/index.js → esm2020/lib/import-export/import-export/index.mjs} +0 -0
  189. package/{esm2015/lib/import-export/import-export.module.js → esm2020/lib/import-export/import-export.module.mjs} +19 -21
  190. package/{esm2015/lib/import-export/index.js → esm2020/lib/import-export/index.mjs} +0 -0
  191. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +135 -0
  192. package/{esm2015/lib/import-export/shared/export.errors.js → esm2020/lib/import-export/shared/export.errors.mjs} +0 -0
  193. package/{esm2015/lib/import-export/shared/export.interface.js → esm2020/lib/import-export/shared/export.interface.mjs} +0 -0
  194. package/{esm2015/lib/import-export/shared/export.service.js → esm2020/lib/import-export/shared/export.service.mjs} +0 -0
  195. package/{esm2015/lib/import-export/shared/export.type.js → esm2020/lib/import-export/shared/export.type.mjs} +0 -0
  196. package/{esm2015/lib/import-export/shared/export.utils.js → esm2020/lib/import-export/shared/export.utils.mjs} +0 -0
  197. package/{esm2015/lib/import-export/shared/import.errors.js → esm2020/lib/import-export/shared/import.errors.mjs} +0 -0
  198. package/{esm2015/lib/import-export/shared/import.interface.js → esm2020/lib/import-export/shared/import.interface.mjs} +0 -0
  199. package/{esm2015/lib/import-export/shared/import.service.js → esm2020/lib/import-export/shared/import.service.mjs} +0 -0
  200. package/{esm2015/lib/import-export/shared/import.utils.js → esm2020/lib/import-export/shared/import.utils.mjs} +0 -0
  201. package/{esm2015/lib/import-export/shared/index.js → esm2020/lib/import-export/shared/index.mjs} +0 -0
  202. package/{esm2015/lib/import-export/style-list/index.js → esm2020/lib/import-export/style-list/index.mjs} +0 -0
  203. package/{esm2015/lib/import-export/style-list/style-list.interface.js → esm2020/lib/import-export/style-list/style-list.interface.mjs} +0 -0
  204. package/{esm2015/lib/import-export/style-list/style-list.module.js → esm2020/lib/import-export/style-list/style-list.module.mjs} +2 -2
  205. package/{esm2015/lib/import-export/style-list/style-list.provider.js → esm2020/lib/import-export/style-list/style-list.provider.mjs} +0 -0
  206. package/{esm2015/lib/import-export/style-list/style-list.service.js → esm2020/lib/import-export/style-list/style-list.service.mjs} +0 -0
  207. package/{esm2015/lib/layer/index.js → esm2020/lib/layer/index.mjs} +0 -0
  208. package/{esm2015/lib/layer/layer-item/index.js → esm2020/lib/layer/layer-item/index.mjs} +0 -0
  209. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +300 -0
  210. package/{esm2015/lib/layer/layer-legend/index.js → esm2020/lib/layer/layer-legend/index.mjs} +0 -0
  211. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +382 -0
  212. package/{esm2015/lib/layer/layer-legend-item/index.js → esm2020/lib/layer/layer-legend-item/index.mjs} +0 -0
  213. package/{esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js → esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs} +4 -11
  214. package/{esm2015/lib/layer/layer-legend-list/index.js → esm2020/lib/layer/layer-legend-list/index.mjs} +0 -0
  215. package/{esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js → esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs} +0 -0
  216. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +195 -0
  217. package/{esm2015/lib/layer/layer-list/index.js → esm2020/lib/layer/layer-list/index.mjs} +0 -0
  218. package/{esm2015/lib/layer/layer-list/layer-list-binding.directive.js → esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs} +0 -0
  219. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1024 -0
  220. package/{esm2015/lib/layer/layer-list/layer-list.enum.js → esm2020/lib/layer/layer-list/layer-list.enum.mjs} +0 -0
  221. package/{esm2015/lib/layer/layer-list-tool/index.js → esm2020/lib/layer/layer-list-tool/index.mjs} +0 -0
  222. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +165 -0
  223. package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs} +0 -0
  224. package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs} +0 -0
  225. package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs} +0 -0
  226. package/esm2020/lib/layer/layer.module.mjs +173 -0
  227. package/{esm2015/lib/layer/shared/clusterParam.js → esm2020/lib/layer/shared/clusterParam.mjs} +0 -0
  228. package/{esm2015/lib/layer/shared/index.js → esm2020/lib/layer/shared/index.mjs} +0 -0
  229. package/{esm2015/lib/layer/shared/layer.enums.js → esm2020/lib/layer/shared/layer.enums.mjs} +0 -0
  230. package/esm2020/lib/layer/shared/layer.service.mjs +186 -0
  231. package/{esm2015/lib/layer/shared/layers/any-layer.interface.js → esm2020/lib/layer/shared/layers/any-layer.interface.mjs} +0 -0
  232. package/{esm2015/lib/layer/shared/layers/any-layer.js → esm2020/lib/layer/shared/layers/any-layer.mjs} +0 -0
  233. package/{esm2015/lib/layer/shared/layers/image-layer.interface.js → esm2020/lib/layer/shared/layers/image-layer.interface.mjs} +0 -0
  234. package/{esm2015/lib/layer/shared/layers/image-layer.js → esm2020/lib/layer/shared/layers/image-layer.mjs} +0 -0
  235. package/{esm2015/lib/layer/shared/layers/index.js → esm2020/lib/layer/shared/layers/index.mjs} +0 -0
  236. package/{esm2015/lib/layer/shared/layers/layer.interface.js → esm2020/lib/layer/shared/layers/layer.interface.mjs} +0 -0
  237. package/esm2020/lib/layer/shared/layers/layer.mjs +170 -0
  238. package/{esm2015/lib/layer/shared/layers/tile-layer.interface.js → esm2020/lib/layer/shared/layers/tile-layer.interface.mjs} +0 -0
  239. package/{esm2015/lib/layer/shared/layers/tile-layer.js → esm2020/lib/layer/shared/layers/tile-layer.mjs} +0 -0
  240. package/{esm2015/lib/layer/shared/layers/vector-layer.interface.js → esm2020/lib/layer/shared/layers/vector-layer.interface.mjs} +0 -0
  241. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +376 -0
  242. package/{esm2015/lib/layer/shared/layers/vectortile-layer.interface.js → esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs} +0 -0
  243. package/{esm2015/lib/layer/shared/layers/vectortile-layer.js → esm2020/lib/layer/shared/layers/vectortile-layer.mjs} +0 -0
  244. package/esm2020/lib/layer/shared/style.service.mjs +356 -0
  245. package/{esm2015/lib/layer/shared/vector-style.interface.js → esm2020/lib/layer/shared/vector-style.interface.mjs} +0 -0
  246. package/{esm2015/lib/layer/track-feature-button/index.js → esm2020/lib/layer/track-feature-button/index.mjs} +0 -0
  247. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +59 -0
  248. package/{esm2015/lib/layer/utils/image-watcher.js → esm2020/lib/layer/utils/image-watcher.mjs} +0 -0
  249. package/{esm2015/lib/layer/utils/index.js → esm2020/lib/layer/utils/index.mjs} +0 -0
  250. package/esm2020/lib/layer/utils/layer.utils.mjs +10 -0
  251. package/esm2020/lib/layer/utils/layerSync-watcher.mjs +242 -0
  252. package/esm2020/lib/layer/utils/outputLegend.mjs +27 -0
  253. package/{esm2015/lib/layer/utils/tile-watcher.js → esm2020/lib/layer/utils/tile-watcher.mjs} +0 -0
  254. package/{esm2015/lib/layer/utils/vector-watcher.js → esm2020/lib/layer/utils/vector-watcher.mjs} +0 -0
  255. package/{esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js → esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs} +0 -0
  256. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +97 -0
  257. package/{esm2015/lib/map/baselayers-switcher/index.js → esm2020/lib/map/baselayers-switcher/index.mjs} +0 -0
  258. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +133 -0
  259. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +76 -0
  260. package/{esm2015/lib/map/geolocate-button/index.js → esm2020/lib/map/geolocate-button/index.mjs} +0 -0
  261. package/{esm2015/lib/map/home-extent-button/home-extent-button.component.js → esm2020/lib/map/home-extent-button/home-extent-button.component.mjs} +8 -14
  262. package/{esm2015/lib/map/home-extent-button/index.js → esm2020/lib/map/home-extent-button/index.mjs} +0 -0
  263. package/{esm2015/lib/map/index.js → esm2020/lib/map/index.mjs} +0 -0
  264. package/{esm2015/lib/map/info-section/index.js → esm2020/lib/map/info-section/index.mjs} +0 -0
  265. package/esm2020/lib/map/info-section/info-section.component.mjs +30 -0
  266. package/{esm2015/lib/map/map-browser/index.js → esm2020/lib/map/map-browser/index.mjs} +0 -0
  267. package/esm2020/lib/map/map-browser/map-browser.component.mjs +66 -0
  268. package/{esm2015/lib/map/map-center/index.js → esm2020/lib/map/map-center/index.mjs} +0 -0
  269. package/{esm2015/lib/map/map-center/map-center.component.js → esm2020/lib/map/map-center/map-center.component.mjs} +3 -8
  270. package/{esm2015/lib/map/map.module.js → esm2020/lib/map/map.module.mjs} +11 -13
  271. package/{esm2015/lib/map/menu-button/index.js → esm2020/lib/map/menu-button/index.mjs} +0 -0
  272. package/{esm2015/lib/map/menu-button/menu-button.component.js → esm2020/lib/map/menu-button/menu-button.component.mjs} +7 -11
  273. package/{esm2015/lib/map/offline-button/index.js → esm2020/lib/map/offline-button/index.mjs} +0 -0
  274. package/esm2020/lib/map/offline-button/offline-button.component.mjs +76 -0
  275. package/{esm2015/lib/map/rotation-button/index.js → esm2020/lib/map/rotation-button/index.mjs} +0 -0
  276. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +91 -0
  277. package/{esm2015/lib/map/shared/controllers/controller.js → esm2020/lib/map/shared/controllers/controller.mjs} +0 -0
  278. package/esm2020/lib/map/shared/controllers/geolocation.mjs +308 -0
  279. package/{esm2015/lib/map/shared/controllers/index.js → esm2020/lib/map/shared/controllers/index.mjs} +0 -0
  280. package/{esm2015/lib/map/shared/controllers/view.js → esm2020/lib/map/shared/controllers/view.mjs} +0 -0
  281. package/esm2020/lib/map/shared/hover-feature.directive.mjs +506 -0
  282. package/{esm2015/lib/map/shared/index.js → esm2020/lib/map/shared/index.mjs} +0 -0
  283. package/{esm2015/lib/map/shared/map-pointer-position.directive.js → esm2020/lib/map/shared/map-pointer-position.directive.mjs} +0 -0
  284. package/{esm2015/lib/map/shared/map.enums.js → esm2020/lib/map/shared/map.enums.mjs} +0 -0
  285. package/{esm2015/lib/map/shared/map.interface.js → esm2020/lib/map/shared/map.interface.mjs} +0 -0
  286. package/esm2020/lib/map/shared/map.mjs +417 -0
  287. package/{esm2015/lib/map/shared/map.service.js → esm2020/lib/map/shared/map.service.mjs} +0 -0
  288. package/{esm2015/lib/map/shared/map.utils.js → esm2020/lib/map/shared/map.utils.mjs} +0 -0
  289. package/{esm2015/lib/map/shared/mapOffline.directive.js → esm2020/lib/map/shared/mapOffline.directive.mjs} +0 -0
  290. package/{esm2015/lib/map/shared/projection.interfaces.js → esm2020/lib/map/shared/projection.interfaces.mjs} +0 -0
  291. package/{esm2015/lib/map/shared/projection.service.js → esm2020/lib/map/shared/projection.service.mjs} +0 -0
  292. package/{esm2015/lib/map/shared/projection.utils.js → esm2020/lib/map/shared/projection.utils.mjs} +0 -0
  293. package/{esm2015/lib/map/swipe-control/index.js → esm2020/lib/map/swipe-control/index.mjs} +0 -0
  294. package/{esm2015/lib/map/swipe-control/swipe-control.component.js → esm2020/lib/map/swipe-control/swipe-control.component.mjs} +4 -10
  295. package/{esm2015/lib/map/utils/layer-watcher.js → esm2020/lib/map/utils/layer-watcher.mjs} +0 -0
  296. package/{esm2015/lib/map/wake-lock-button/index.js → esm2020/lib/map/wake-lock-button/index.mjs} +0 -0
  297. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +114 -0
  298. package/{esm2015/lib/map/zoom-button/index.js → esm2020/lib/map/zoom-button/index.mjs} +0 -0
  299. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +40 -0
  300. package/{esm2015/lib/measure/index.js → esm2020/lib/measure/index.mjs} +0 -0
  301. package/{esm2015/lib/measure/measure.module.js → esm2020/lib/measure/measure.module.mjs} +2 -2
  302. package/{esm2015/lib/measure/measurer/measure-format.pipe.js → esm2020/lib/measure/measurer/measure-format.pipe.mjs} +0 -0
  303. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +180 -0
  304. package/{esm2015/lib/measure/measurer/measurer-item.component.js → esm2020/lib/measure/measurer/measurer-item.component.mjs} +12 -20
  305. package/esm2020/lib/measure/measurer/measurer.component.mjs +1042 -0
  306. package/esm2020/lib/measure/measurer/measurer.module.mjs +94 -0
  307. package/{esm2015/lib/measure/shared/index.js → esm2020/lib/measure/shared/index.mjs} +0 -0
  308. package/{esm2015/lib/measure/shared/measure.enum.js → esm2020/lib/measure/shared/measure.enum.mjs} +0 -0
  309. package/{esm2015/lib/measure/shared/measure.interfaces.js → esm2020/lib/measure/shared/measure.interfaces.mjs} +0 -0
  310. package/{esm2015/lib/measure/shared/measure.utils.js → esm2020/lib/measure/shared/measure.utils.mjs} +0 -0
  311. package/{esm2015/lib/metadata/index.js → esm2020/lib/metadata/index.mjs} +0 -0
  312. package/{esm2015/lib/metadata/metadata-button/index.js → esm2020/lib/metadata/metadata-button/index.mjs} +0 -0
  313. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -0
  314. package/{esm2015/lib/metadata/metadata.module.js → esm2020/lib/metadata/metadata.module.mjs} +7 -9
  315. package/{esm2015/lib/metadata/shared/index.js → esm2020/lib/metadata/shared/index.mjs} +0 -0
  316. package/{esm2015/lib/metadata/shared/metadata.interface.js → esm2020/lib/metadata/shared/metadata.interface.mjs} +0 -0
  317. package/{esm2015/lib/metadata/shared/metadata.service.js → esm2020/lib/metadata/shared/metadata.service.mjs} +0 -0
  318. package/{esm2015/lib/offline/geoDB/geoDB.enums.js → esm2020/lib/offline/geoDB/geoDB.enums.mjs} +0 -0
  319. package/{esm2015/lib/offline/geoDB/geoDB.interface.js → esm2020/lib/offline/geoDB/geoDB.interface.mjs} +0 -0
  320. package/{esm2015/lib/offline/geoDB/geoDB.service.js → esm2020/lib/offline/geoDB/geoDB.service.mjs} +0 -0
  321. package/{esm2015/lib/offline/geoDB/index.js → esm2020/lib/offline/geoDB/index.mjs} +0 -0
  322. package/{esm2015/lib/offline/index.js → esm2020/lib/offline/index.mjs} +0 -0
  323. package/{esm2015/lib/offline/shared/geo-network.service.js → esm2020/lib/offline/shared/geo-network.service.mjs} +0 -0
  324. package/{esm2015/lib/offline/shared/index.js → esm2020/lib/offline/shared/index.mjs} +0 -0
  325. package/{esm2015/lib/overlay/index.js → esm2020/lib/overlay/index.mjs} +0 -0
  326. package/{esm2015/lib/overlay/overlay.module.js → esm2020/lib/overlay/overlay.module.mjs} +2 -2
  327. package/{esm2015/lib/overlay/shared/index.js → esm2020/lib/overlay/shared/index.mjs} +0 -0
  328. package/{esm2015/lib/overlay/shared/overlay-marker-style.utils.js → esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs} +0 -0
  329. package/{esm2015/lib/overlay/shared/overlay.directive.js → esm2020/lib/overlay/shared/overlay.directive.mjs} +0 -0
  330. package/{esm2015/lib/overlay/shared/overlay.enum.js → esm2020/lib/overlay/shared/overlay.enum.mjs} +0 -0
  331. package/{esm2015/lib/overlay/shared/overlay.js → esm2020/lib/overlay/shared/overlay.mjs} +0 -0
  332. package/{esm2015/lib/overlay/shared/overlay.service.js → esm2020/lib/overlay/shared/overlay.service.mjs} +0 -0
  333. package/{esm2015/lib/overlay/shared/overlay.utils.js → esm2020/lib/overlay/shared/overlay.utils.mjs} +0 -0
  334. package/{esm2015/lib/print/index.js → esm2020/lib/print/index.mjs} +0 -0
  335. package/{esm2015/lib/print/print/print.component.js → esm2020/lib/print/print/print.component.mjs} +3 -6
  336. package/{esm2015/lib/print/print-form/index.js → esm2020/lib/print/print-form/index.mjs} +0 -0
  337. package/esm2020/lib/print/print-form/print-form.component.mjs +405 -0
  338. package/{esm2015/lib/print/print.module.js → esm2020/lib/print/print.module.mjs} +13 -15
  339. package/{esm2015/lib/print/shared/index.js → esm2020/lib/print/shared/index.mjs} +0 -0
  340. package/{esm2015/lib/print/shared/print.interface.js → esm2020/lib/print/shared/print.interface.mjs} +0 -0
  341. package/esm2020/lib/print/shared/print.service.mjs +807 -0
  342. package/{esm2015/lib/print/shared/print.type.js → esm2020/lib/print/shared/print.type.mjs} +0 -0
  343. package/{esm2015/lib/query/index.js → esm2020/lib/query/index.mjs} +0 -0
  344. package/{esm2015/lib/query/query.module.js → esm2020/lib/query/query.module.mjs} +2 -2
  345. package/{esm2015/lib/query/shared/index.js → esm2020/lib/query/shared/index.mjs} +0 -0
  346. package/{esm2015/lib/query/shared/query-search-source.js → esm2020/lib/query/shared/query-search-source.mjs} +0 -0
  347. package/{esm2015/lib/query/shared/query-search-source.providers.js → esm2020/lib/query/shared/query-search-source.providers.mjs} +0 -0
  348. package/{esm2015/lib/query/shared/query.directive.js → esm2020/lib/query/shared/query.directive.mjs} +0 -0
  349. package/{esm2015/lib/query/shared/query.enums.js → esm2020/lib/query/shared/query.enums.mjs} +0 -0
  350. package/{esm2015/lib/query/shared/query.interfaces.js → esm2020/lib/query/shared/query.interfaces.mjs} +0 -0
  351. package/esm2020/lib/query/shared/query.service.mjs +613 -0
  352. package/{esm2015/lib/query/shared/query.utils.js → esm2020/lib/query/shared/query.utils.mjs} +0 -0
  353. package/{esm2015/lib/search/index.js → esm2020/lib/search/index.mjs} +0 -0
  354. package/esm2020/lib/search/search-bar/search-bar.component.mjs +489 -0
  355. package/{esm2015/lib/search/search-bar/search-bar.module.js → esm2020/lib/search/search-bar/search-bar.module.mjs} +13 -15
  356. package/{esm2015/lib/search/search-bar/search-url-param.directive.js → esm2020/lib/search/search-bar/search-url-param.directive.mjs} +0 -0
  357. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +193 -0
  358. package/esm2020/lib/search/search-results/search-results-item.component.mjs +124 -0
  359. package/esm2020/lib/search/search-results/search-results.component.mjs +331 -0
  360. package/{esm2015/lib/search/search-results/search-results.module.js → esm2020/lib/search/search-results/search-results.module.mjs} +13 -15
  361. package/esm2020/lib/search/search-selector/search-selector.component.mjs +123 -0
  362. package/{esm2015/lib/search/search-selector/search-selector.module.js → esm2020/lib/search/search-selector/search-selector.module.mjs} +10 -12
  363. package/esm2020/lib/search/search-settings/search-settings.component.mjs +418 -0
  364. package/{esm2015/lib/search/search-settings/search-settings.module.js → esm2020/lib/search/search-settings/search-settings.module.mjs} +11 -13
  365. package/{esm2015/lib/search/search.module.js → esm2020/lib/search/search.module.mjs} +6 -8
  366. package/{esm2015/lib/search/shared/index.js → esm2020/lib/search/shared/index.mjs} +0 -0
  367. package/{esm2015/lib/search/shared/search-pointer-summary.directive.js → esm2020/lib/search/shared/search-pointer-summary.directive.mjs} +0 -0
  368. package/{esm2015/lib/search/shared/search-source-service.providers.js → esm2020/lib/search/shared/search-source-service.providers.mjs} +0 -0
  369. package/{esm2015/lib/search/shared/search-source.service.js → esm2020/lib/search/shared/search-source.service.mjs} +0 -0
  370. package/{esm2015/lib/search/shared/search.enums.js → esm2020/lib/search/shared/search.enums.mjs} +0 -0
  371. package/{esm2015/lib/search/shared/search.interfaces.js → esm2020/lib/search/shared/search.interfaces.mjs} +0 -0
  372. package/esm2020/lib/search/shared/search.service.mjs +118 -0
  373. package/{esm2015/lib/search/shared/search.utils.js → esm2020/lib/search/shared/search.utils.mjs} +0 -0
  374. package/{esm2015/lib/search/shared/sources/cadastre.js → esm2020/lib/search/shared/sources/cadastre.mjs} +1 -1
  375. package/{esm2015/lib/search/shared/sources/cadastre.providers.js → esm2020/lib/search/shared/sources/cadastre.providers.mjs} +0 -0
  376. package/{esm2015/lib/search/shared/sources/coordinates.interfaces.js → esm2020/lib/search/shared/sources/coordinates.interfaces.mjs} +0 -0
  377. package/{esm2015/lib/search/shared/sources/coordinates.js → esm2020/lib/search/shared/sources/coordinates.mjs} +0 -0
  378. package/{esm2015/lib/search/shared/sources/coordinates.providers.js → esm2020/lib/search/shared/sources/coordinates.providers.mjs} +0 -0
  379. package/{esm2015/lib/search/shared/sources/icherche.interfaces.js → esm2020/lib/search/shared/sources/icherche.interfaces.mjs} +0 -0
  380. package/esm2020/lib/search/shared/sources/icherche.mjs +755 -0
  381. package/{esm2015/lib/search/shared/sources/icherche.providers.js → esm2020/lib/search/shared/sources/icherche.providers.mjs} +0 -0
  382. package/{esm2015/lib/search/shared/sources/ilayer.interfaces.js → esm2020/lib/search/shared/sources/ilayer.interfaces.mjs} +0 -0
  383. package/{esm2015/lib/search/shared/sources/ilayer.js → esm2020/lib/search/shared/sources/ilayer.mjs} +0 -0
  384. package/{esm2015/lib/search/shared/sources/ilayer.providers.js → esm2020/lib/search/shared/sources/ilayer.providers.mjs} +0 -0
  385. package/{esm2015/lib/search/shared/sources/index.js → esm2020/lib/search/shared/sources/index.mjs} +0 -0
  386. package/{esm2015/lib/search/shared/sources/nominatim.interfaces.js → esm2020/lib/search/shared/sources/nominatim.interfaces.mjs} +0 -0
  387. package/{esm2015/lib/search/shared/sources/nominatim.js → esm2020/lib/search/shared/sources/nominatim.mjs} +0 -0
  388. package/{esm2015/lib/search/shared/sources/nominatim.providers.js → esm2020/lib/search/shared/sources/nominatim.providers.mjs} +0 -0
  389. package/{esm2015/lib/search/shared/sources/source.interfaces.js → esm2020/lib/search/shared/sources/source.interfaces.mjs} +0 -0
  390. package/{esm2015/lib/search/shared/sources/source.js → esm2020/lib/search/shared/sources/source.mjs} +0 -0
  391. package/{esm2015/lib/search/shared/sources/storedqueries.interfaces.js → esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs} +0 -0
  392. package/{esm2015/lib/search/shared/sources/storedqueries.js → esm2020/lib/search/shared/sources/storedqueries.mjs} +1 -1
  393. package/{esm2015/lib/search/shared/sources/storedqueries.providers.js → esm2020/lib/search/shared/sources/storedqueries.providers.mjs} +0 -0
  394. package/{esm2015/lib/toast/index.js → esm2020/lib/toast/index.mjs} +0 -0
  395. package/esm2020/lib/toast/toast.component.mjs +113 -0
  396. package/{esm2015/lib/toast/toast.module.js → esm2020/lib/toast/toast.module.mjs} +7 -9
  397. package/{esm2015/lib/utils/commonVectorStyle.interface.js → esm2020/lib/utils/commonVectorStyle.interface.mjs} +0 -0
  398. package/{esm2015/lib/utils/commonVectorStyle.js → esm2020/lib/utils/commonVectorStyle.mjs} +0 -0
  399. package/{esm2015/lib/utils/googleLinks.js → esm2020/lib/utils/googleLinks.mjs} +0 -0
  400. package/{esm2015/lib/utils/id-generator.js → esm2020/lib/utils/id-generator.mjs} +0 -0
  401. package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
  402. package/{esm2015/lib/utils/osmLinks.js → esm2020/lib/utils/osmLinks.mjs} +0 -0
  403. package/{esm2015/lib/wkt/index.js → esm2020/lib/wkt/index.mjs} +0 -0
  404. package/{esm2015/lib/wkt/shared/index.js → esm2020/lib/wkt/shared/index.mjs} +0 -0
  405. package/{esm2015/lib/wkt/shared/wkt.service.js → esm2020/lib/wkt/shared/wkt.service.mjs} +0 -0
  406. package/{esm2015/lib/wkt/wkt.module.js → esm2020/lib/wkt/wkt.module.mjs} +2 -2
  407. package/{esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js → esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs} +7 -15
  408. package/{esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js → esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs} +5 -7
  409. package/{esm2015/lib/workspace/confirmation-popup/index.js → esm2020/lib/workspace/confirmation-popup/index.mjs} +0 -0
  410. package/{esm2015/lib/workspace/index.js → esm2020/lib/workspace/index.mjs} +0 -0
  411. package/{esm2015/lib/workspace/shared/edition-workspace.js → esm2020/lib/workspace/shared/edition-workspace.mjs} +2 -3
  412. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +642 -0
  413. package/esm2020/lib/workspace/shared/feature-workspace.mjs +35 -0
  414. package/{esm2015/lib/workspace/shared/wfs-workspace.service.js → esm2020/lib/workspace/shared/feature-workspace.service.mjs} +8 -9
  415. package/{esm2015/lib/workspace/shared/index.js → esm2020/lib/workspace/shared/index.mjs} +0 -0
  416. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +35 -0
  417. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +150 -0
  418. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +261 -0
  419. package/{esm2015/lib/workspace/shared/workspace.utils.js → esm2020/lib/workspace/shared/workspace.utils.mjs} +0 -0
  420. package/{esm2015/lib/workspace/widgets/index.js → esm2020/lib/workspace/widgets/index.mjs} +0 -0
  421. package/{esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js → esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs} +3 -8
  422. package/{esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js → esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs} +5 -7
  423. package/{esm2015/lib/workspace/widgets/widgets.js → esm2020/lib/workspace/widgets/widgets.mjs} +0 -0
  424. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +133 -0
  425. package/{esm2015/lib/workspace/workspace-selector/workspace-selector.module.js → esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs} +2 -4
  426. package/{esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js → esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs} +8 -11
  427. package/{esm2015/lib/workspace/workspace-updator/workspace-updator.module.js → esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs} +2 -4
  428. package/{esm2015/lib/workspace/workspace.module.js → esm2020/lib/workspace/workspace.module.mjs} +8 -10
  429. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  430. package/fesm2015/igo2-geo.mjs +42904 -0
  431. package/fesm2015/igo2-geo.mjs.map +1 -0
  432. package/{fesm2015/igo2-geo.js → fesm2020/igo2-geo.mjs} +1635 -2527
  433. package/fesm2020/igo2-geo.mjs.map +1 -0
  434. package/{igo2-geo.d.ts → index.d.ts} +0 -0
  435. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
  436. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  437. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
  438. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
  439. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  440. package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
  441. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +1 -1
  442. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
  443. package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
  444. package/lib/directions/directions.component.d.ts +1 -1
  445. package/lib/download/download-button/download-button.component.d.ts +1 -1
  446. package/lib/draw/draw/draw-popup.component.d.ts +1 -1
  447. package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
  448. package/lib/draw/draw/draw.component.d.ts +1 -1
  449. package/lib/feature/feature-details/feature-details.component.d.ts +1 -1
  450. package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
  451. package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
  452. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  453. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -1
  454. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
  455. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  456. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
  457. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
  458. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  459. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  460. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +1 -1
  461. package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
  462. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +4 -4
  463. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
  464. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
  465. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  466. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +1 -1
  467. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  468. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  469. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
  470. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
  471. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
  472. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  473. package/lib/import-export/import-export/import-export.component.d.ts +1 -1
  474. package/lib/import-export/shared/drop-geo-file.directive.d.ts +1 -1
  475. package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
  476. package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -1
  477. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
  478. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  479. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  480. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
  481. package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
  482. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  483. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  484. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
  485. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  486. package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
  487. package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
  488. package/lib/map/info-section/info-section.component.d.ts +1 -1
  489. package/lib/map/map-browser/map-browser.component.d.ts +1 -1
  490. package/lib/map/map-center/map-center.component.d.ts +1 -1
  491. package/lib/map/menu-button/menu-button.component.d.ts +1 -1
  492. package/lib/map/offline-button/offline-button.component.d.ts +1 -1
  493. package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
  494. package/lib/map/shared/controllers/geolocation.d.ts +3 -2
  495. package/lib/map/shared/hover-feature.directive.d.ts +1 -1
  496. package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
  497. package/lib/map/shared/map.d.ts +3 -2
  498. package/lib/map/shared/mapOffline.directive.d.ts +1 -1
  499. package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
  500. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
  501. package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
  502. package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
  503. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  504. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  505. package/lib/measure/measurer/measurer.component.d.ts +1 -1
  506. package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
  507. package/lib/overlay/shared/overlay.directive.d.ts +1 -1
  508. package/lib/print/print/print.component.d.ts +1 -1
  509. package/lib/print/print-form/print-form.component.d.ts +14 -14
  510. package/lib/print/shared/print.service.d.ts +6 -1
  511. package/lib/query/shared/query.directive.d.ts +1 -1
  512. package/lib/search/search-bar/search-bar.component.d.ts +1 -1
  513. package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
  514. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  515. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  516. package/lib/search/search-results/search-results.component.d.ts +1 -1
  517. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  518. package/lib/search/search-settings/search-settings.component.d.ts +1 -1
  519. package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
  520. package/lib/toast/toast.component.d.ts +1 -1
  521. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  522. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
  523. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  524. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
  525. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
  526. package/package.json +31 -18
  527. package/bundles/igo2-geo.umd.js +0 -47612
  528. package/bundles/igo2-geo.umd.js.map +0 -1
  529. package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +0 -305
  530. package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +0 -248
  531. package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +0 -235
  532. package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +0 -85
  533. package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +0 -224
  534. package/esm2015/lib/catalog/shared/catalog.service.js +0 -606
  535. package/esm2015/lib/datasource/shared/capabilities.service.js +0 -427
  536. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +0 -74
  537. package/esm2015/lib/datasource/shared/datasources/wfs.service.js +0 -153
  538. package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +0 -205
  539. package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +0 -229
  540. package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +0 -300
  541. package/esm2015/lib/directions/directions-results/directions-results.component.js +0 -204
  542. package/esm2015/lib/directions/directions.component.js +0 -316
  543. package/esm2015/lib/directions/shared/directions.utils.js +0 -510
  544. package/esm2015/lib/download/download-button/download-button.component.js +0 -66
  545. package/esm2015/lib/draw/draw/draw-shorcuts.component.js +0 -64
  546. package/esm2015/lib/draw/draw/draw.component.js +0 -745
  547. package/esm2015/lib/feature/feature-details/feature-details.component.js +0 -393
  548. package/esm2015/lib/feature/shared/strategies/in-map-extent.js +0 -114
  549. package/esm2015/lib/filter/filter.module.js +0 -290
  550. package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +0 -161
  551. package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +0 -657
  552. package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +0 -1355
  553. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +0 -185
  554. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +0 -898
  555. package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +0 -307
  556. package/esm2015/lib/filter/shared/ogc-filter-time.service.js +0 -73
  557. package/esm2015/lib/filter/shared/ogc-filter.js +0 -693
  558. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +0 -1108
  559. package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +0 -772
  560. package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +0 -126
  561. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +0 -199
  562. package/esm2015/lib/import-export/export-button/export-button.component.js +0 -70
  563. package/esm2015/lib/import-export/import-export/import-export.component.js +0 -1238
  564. package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +0 -136
  565. package/esm2015/lib/layer/layer-item/layer-item.component.js +0 -305
  566. package/esm2015/lib/layer/layer-legend/layer-legend.component.js +0 -395
  567. package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +0 -200
  568. package/esm2015/lib/layer/layer-list/layer-list.component.js +0 -1043
  569. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +0 -176
  570. package/esm2015/lib/layer/layer.module.js +0 -174
  571. package/esm2015/lib/layer/shared/layer.service.js +0 -186
  572. package/esm2015/lib/layer/shared/layers/layer.js +0 -169
  573. package/esm2015/lib/layer/shared/layers/vector-layer.js +0 -376
  574. package/esm2015/lib/layer/shared/style.service.js +0 -358
  575. package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +0 -64
  576. package/esm2015/lib/layer/utils/layer.utils.js +0 -11
  577. package/esm2015/lib/layer/utils/layerSync-watcher.js +0 -249
  578. package/esm2015/lib/layer/utils/outputLegend.js +0 -27
  579. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +0 -105
  580. package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +0 -137
  581. package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +0 -82
  582. package/esm2015/lib/map/info-section/info-section.component.js +0 -36
  583. package/esm2015/lib/map/map-browser/map-browser.component.js +0 -70
  584. package/esm2015/lib/map/offline-button/offline-button.component.js +0 -84
  585. package/esm2015/lib/map/rotation-button/rotation-button.component.js +0 -97
  586. package/esm2015/lib/map/shared/controllers/geolocation.js +0 -295
  587. package/esm2015/lib/map/shared/hover-feature.directive.js +0 -509
  588. package/esm2015/lib/map/shared/map.js +0 -417
  589. package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +0 -122
  590. package/esm2015/lib/map/zoom-button/zoom-button.component.js +0 -46
  591. package/esm2015/lib/measure/measurer/measurer-dialog.component.js +0 -220
  592. package/esm2015/lib/measure/measurer/measurer.component.js +0 -1053
  593. package/esm2015/lib/measure/measurer/measurer.module.js +0 -96
  594. package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +0 -135
  595. package/esm2015/lib/print/print-form/print-form.component.js +0 -447
  596. package/esm2015/lib/print/shared/print.service.js +0 -820
  597. package/esm2015/lib/query/shared/query.service.js +0 -619
  598. package/esm2015/lib/search/search-bar/search-bar.component.js +0 -496
  599. package/esm2015/lib/search/search-results/search-results-add-button.component.js +0 -198
  600. package/esm2015/lib/search/search-results/search-results-item.component.js +0 -129
  601. package/esm2015/lib/search/search-results/search-results.component.js +0 -337
  602. package/esm2015/lib/search/search-selector/search-selector.component.js +0 -132
  603. package/esm2015/lib/search/search-settings/search-settings.component.js +0 -435
  604. package/esm2015/lib/search/shared/search.service.js +0 -118
  605. package/esm2015/lib/search/shared/sources/icherche.js +0 -756
  606. package/esm2015/lib/toast/toast.component.js +0 -119
  607. package/esm2015/lib/workspace/shared/edition-workspace.service.js +0 -646
  608. package/esm2015/lib/workspace/shared/feature-workspace.js +0 -37
  609. package/esm2015/lib/workspace/shared/feature-workspace.service.js +0 -151
  610. package/esm2015/lib/workspace/shared/wfs-workspace.js +0 -37
  611. package/esm2015/lib/workspace/shared/wms-workspace.service.js +0 -263
  612. package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +0 -135
  613. package/fesm2015/igo2-geo.js.map +0 -1
@@ -1,619 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { of } from 'rxjs';
3
- import { map, mergeMap } from 'rxjs/operators';
4
- import * 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
- var _a, _b;
60
- const parser = new olFormatGML2();
61
- let features = parser.readFeatures(gmlRes);
62
- // Handle non standard GML output (MapServer)
63
- if (features.length === 0) {
64
- const wmsParser = new olformat.WMSGetFeatureInfo();
65
- features = wmsParser.readFeatures(gmlRes);
66
- }
67
- const olmline = new olgeom.MultiLineString([]);
68
- let pts;
69
- const ptsArray = [];
70
- let olmpoly = new olgeom.MultiPolygon([]);
71
- let firstFeatureType;
72
- const nbFeatures = features.length;
73
- // Check if geometry intersect bbox
74
- // for geoserver getfeatureinfo response in data projection, not call projection
75
- const searchParams = this.getQueryParams(url.toLowerCase());
76
- const bboxRaw = searchParams.bbox;
77
- const bbox = bboxRaw.split(',');
78
- const bboxExtent = olextent.createEmpty();
79
- olextent.extend(bboxExtent, bbox);
80
- const outBboxExtent = false;
81
- let titleContent;
82
- let queryTileField;
83
- if ((_b = (_a = layer.options) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.options) {
84
- const dataSourceOptions = layer.options.source
85
- .options;
86
- if (dataSourceOptions.queryTitle) {
87
- queryTileField = dataSourceOptions.queryTitle;
88
- }
89
- }
90
- features.map(feature => {
91
- if (queryTileField) {
92
- let queryTitleContent = feature.getProperties()[queryTileField];
93
- if (queryTitleContent) {
94
- titleContent = !titleContent ? queryTitleContent : `${titleContent},${queryTitleContent}`;
95
- }
96
- }
97
- /* if (!feature.getGeometry().simplify(100).intersectsExtent(bboxExtent)) {
98
- outBboxExtent = true;
99
- // TODO: Check to project the geometry?
100
- }*/
101
- const featureGeometryCoordinates = feature.getGeometry().getCoordinates();
102
- const featureGeometryType = feature.getGeometry().getType();
103
- if (!firstFeatureType && !outBboxExtent) {
104
- firstFeatureType = featureGeometryType;
105
- }
106
- if (!outBboxExtent) {
107
- switch (featureGeometryType) {
108
- case 'Point':
109
- if (nbFeatures === 1) {
110
- pts = new olgeom.Point(featureGeometryCoordinates, 'XY');
111
- }
112
- else {
113
- ptsArray.push(featureGeometryCoordinates);
114
- }
115
- break;
116
- case 'LineString':
117
- olmline.appendLineString(new olgeom.LineString(featureGeometryCoordinates, 'XY'));
118
- break;
119
- case 'Polygon':
120
- olmpoly.appendPolygon(new olgeom.Polygon(featureGeometryCoordinates, 'XY'));
121
- break;
122
- case 'MultiPolygon':
123
- olmpoly = new olgeom.MultiPolygon(featureGeometryCoordinates, 'XY');
124
- break;
125
- default:
126
- return;
127
- }
128
- }
129
- });
130
- let olmpts;
131
- if (ptsArray.length === 0 && pts) {
132
- olmpts = {
133
- type: pts.getType(),
134
- coordinates: pts.getCoordinates()
135
- };
136
- }
137
- else {
138
- olmpts = {
139
- type: 'Polygon',
140
- coordinates: [this.convexHull(ptsArray)]
141
- };
142
- }
143
- let returnGeometry;
144
- switch (firstFeatureType) {
145
- case 'LineString':
146
- returnGeometry = {
147
- type: olmline.getType(),
148
- coordinates: olmline.getCoordinates()
149
- };
150
- case 'Point':
151
- returnGeometry = olmpts;
152
- case 'Polygon':
153
- returnGeometry = {
154
- type: olmpoly.getType(),
155
- coordinates: olmpoly.getCoordinates()
156
- };
157
- case 'MultiPolygon':
158
- returnGeometry = {
159
- type: olmpoly.getType(),
160
- coordinates: olmpoly.getCoordinates()
161
- };
162
- }
163
- const imposedProperties = {};
164
- if (queryTileField) {
165
- imposedProperties[queryTileField] = titleContent;
166
- }
167
- return [returnGeometry, imposedProperties];
168
- }
169
- cross(a, b, o) {
170
- return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
171
- }
172
- /**
173
- * @param points An array of [X, Y] coordinates
174
- * This method is use instead of turf.js convexHull because Turf needs at least 3 point to make a hull.
175
- * https://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain#JavaScript
176
- */
177
- convexHull(points) {
178
- points.sort((a, b) => {
179
- return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];
180
- });
181
- const lower = [];
182
- for (const point of points) {
183
- while (lower.length >= 2 &&
184
- this.cross(lower[lower.length - 2], lower[lower.length - 1], point) <= 0) {
185
- lower.pop();
186
- }
187
- lower.push(point);
188
- }
189
- const upper = [];
190
- for (let i = points.length - 1; i >= 0; i--) {
191
- while (upper.length >= 2 &&
192
- this.cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {
193
- upper.pop();
194
- }
195
- upper.push(points[i]);
196
- }
197
- upper.pop();
198
- lower.pop();
199
- return lower.concat(upper);
200
- }
201
- extractData(res, layer, options, url, imposedGeometry, imposedProperties) {
202
- var _a, _b, _c;
203
- const queryDataSource = layer.dataSource;
204
- const allowedFieldsAndAlias = this.getAllowedFieldsAndAlias(layer);
205
- let features = [];
206
- switch (queryDataSource.options.queryFormat) {
207
- case QueryFormat.GML3:
208
- features = this.extractGML3Data(res, layer.zIndex, allowedFieldsAndAlias);
209
- break;
210
- case QueryFormat.JSON:
211
- case QueryFormat.GEOJSON:
212
- case QueryFormat.GEOJSON2:
213
- features = this.extractGeoJSONData(res, layer.zIndex, allowedFieldsAndAlias);
214
- break;
215
- case QueryFormat.ESRIJSON:
216
- features = this.extractEsriJSONData(res, layer.zIndex, allowedFieldsAndAlias);
217
- break;
218
- case QueryFormat.TEXT:
219
- features = this.extractTextData(res);
220
- break;
221
- case QueryFormat.HTML:
222
- features = this.extractHtmlData(res, queryDataSource.queryHtmlTarget, url);
223
- break;
224
- case QueryFormat.HTMLGML2:
225
- features = this.extractHtmlData(res, queryDataSource.queryHtmlTarget, url, imposedGeometry, imposedProperties);
226
- break;
227
- case QueryFormat.GML2:
228
- default:
229
- features = this.extractGML2Data(res, layer, allowedFieldsAndAlias);
230
- break;
231
- }
232
- if (features.length > 0 && features[0].geometry === null) {
233
- const geomToAdd = this.createGeometryFromUrlClick(url);
234
- for (const feature of features) {
235
- feature.geometry = geomToAdd;
236
- }
237
- }
238
- const wmsDatasource = layer.dataSource;
239
- const featureCount = ((_a = wmsDatasource.params) === null || _a === void 0 ? void 0 : _a.FEATURE_COUNT) ?
240
- new RegExp('FEATURE_COUNT=' + this.featureCount) :
241
- new RegExp('FEATURE_COUNT=' + this.defaultFeatureCount);
242
- if (featureCount.test(url) &&
243
- ((((_b = wmsDatasource.params) === null || _b === void 0 ? void 0 : _b.FEATURE_COUNT) && features.length === this.featureCount) ||
244
- (!((_c = wmsDatasource.params) === null || _c === void 0 ? void 0 : _c.FEATURE_COUNT) && features.length === this.defaultFeatureCount))) {
245
- this.languageService.translate.get('igo.geo.query.featureCountMax', { value: layer.title }).subscribe(message => {
246
- const messageObj = this.messageService.info(message);
247
- this.previousMessageIds.push(messageObj.toastId);
248
- });
249
- }
250
- return features.map((feature, index) => {
251
- var _a;
252
- const mapLabel = feature.properties[queryDataSource.mapLabel];
253
- let exclude;
254
- if (((_a = layer.options.sourceOptions) === null || _a === void 0 ? void 0 : _a.type) === 'wms') {
255
- const sourceOptions = layer.options
256
- .sourceOptions;
257
- exclude = sourceOptions ? sourceOptions.excludeAttribute : undefined;
258
- }
259
- let title = this.getQueryTitle(feature, layer);
260
- if (!title && features.length > 1) {
261
- title = `${layer.title} (${index + 1})`;
262
- }
263
- else if (!title) {
264
- title = layer.title;
265
- }
266
- const meta = Object.assign({}, feature.meta || {}, {
267
- id: uuid(),
268
- title,
269
- mapTitle: mapLabel,
270
- sourceTitle: layer.title,
271
- order: 1000 - layer.zIndex,
272
- excludeAttribute: exclude
273
- });
274
- return Object.assign(feature, {
275
- meta,
276
- projection: queryDataSource.options.type === 'carto'
277
- ? 'EPSG:4326'
278
- : options.projection
279
- });
280
- });
281
- }
282
- createGeometryFromUrlClick(url) {
283
- const searchParams = this.getQueryParams(url.toLowerCase());
284
- const bboxRaw = searchParams.bbox;
285
- const width = parseInt(searchParams.width, 10);
286
- const height = parseInt(searchParams.height, 10);
287
- const xPosition = parseInt(searchParams.i || searchParams.x, 10);
288
- const yPosition = parseInt(searchParams.j || searchParams.y, 10);
289
- const bbox = bboxRaw.split(',');
290
- let threshold = (Math.abs(parseFloat(bbox[0])) - Math.abs(parseFloat(bbox[2]))) * 0.05;
291
- // for context in degree (EPSG:4326,4269...)
292
- if (Math.abs(parseFloat(bbox[0])) < 180) {
293
- threshold = 0.045;
294
- }
295
- const clickx = parseFloat(bbox[0]) +
296
- (Math.abs(parseFloat(bbox[0]) - parseFloat(bbox[2])) * xPosition) /
297
- width -
298
- threshold;
299
- const clicky = parseFloat(bbox[1]) +
300
- (Math.abs(parseFloat(bbox[1]) - parseFloat(bbox[3])) * yPosition) /
301
- height -
302
- threshold;
303
- const clickx1 = clickx + threshold * 2;
304
- const clicky1 = clicky + threshold * 2;
305
- const wktPoly = 'POLYGON((' +
306
- clickx +
307
- ' ' +
308
- clicky +
309
- ', ' +
310
- clickx +
311
- ' ' +
312
- clicky1 +
313
- ', ' +
314
- clickx1 +
315
- ' ' +
316
- clicky1 +
317
- ', ' +
318
- clickx1 +
319
- ' ' +
320
- clicky +
321
- ', ' +
322
- clickx +
323
- ' ' +
324
- clicky +
325
- '))';
326
- const format = new olformat.WKT();
327
- const tenPercentWidthGeom = format.readFeature(wktPoly);
328
- const f = tenPercentWidthGeom.getGeometry();
329
- const newGeom = {
330
- type: f.getType(),
331
- coordinates: f.getCoordinates()
332
- };
333
- return newGeom;
334
- }
335
- extractGML2Data(res, zIndex, allowedFieldsAndAlias) {
336
- const parser = new olFormatGML2();
337
- let features = parser.readFeatures(res);
338
- // Handle non standard GML output (MapServer)
339
- if (features.length === 0) {
340
- const wmsParser = new olformat.WMSGetFeatureInfo();
341
- try {
342
- features = wmsParser.readFeatures(res);
343
- }
344
- catch (e) {
345
- console.warn('query.service: Multipolygons are badly managed in mapserver in GML2. Use another format.');
346
- }
347
- }
348
- return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
349
- }
350
- extractGML3Data(res, zIndex, allowedFieldsAndAlias) {
351
- const parser = new olFormatGML3();
352
- let features = [];
353
- try {
354
- features = parser.readFeatures(res);
355
- }
356
- catch (e) {
357
- console.warn('query.service: GML3 is not well supported');
358
- }
359
- return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
360
- }
361
- extractGeoJSONData(res, zIndex, allowedFieldsAndAlias) {
362
- let features = [];
363
- try {
364
- features = JSON.parse(res.replace(/(\r|\n)/g, ' ')).features;
365
- }
366
- catch (e) {
367
- console.warn('query.service: Unable to parse geojson', '\n', res);
368
- }
369
- features.map(feature => feature.meta = {
370
- id: uuid(),
371
- order: 1000 - zIndex,
372
- alias: allowedFieldsAndAlias
373
- });
374
- return features;
375
- }
376
- extractEsriJSONData(res, zIndex, allowedFieldsAndAlias) {
377
- if (res) {
378
- try {
379
- if (JSON.parse(res).error) {
380
- return [];
381
- }
382
- }
383
- catch (e) { }
384
- }
385
- const parser = new olFormatEsriJSON();
386
- const features = parser.readFeatures(res);
387
- return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
388
- }
389
- extractTextData(res) {
390
- // TODO
391
- return [];
392
- }
393
- extractHtmlData(res, htmlTarget, url, imposedGeometry, imposedProperties) {
394
- const searchParams = this.getQueryParams(url.toLowerCase());
395
- const projection = searchParams.crs || searchParams.srs || 'EPSG:3857';
396
- const geomToAdd = this.createGeometryFromUrlClick(url);
397
- if (htmlTarget !== QueryHtmlTarget.BLANK &&
398
- htmlTarget !== QueryHtmlTarget.IFRAME) {
399
- htmlTarget = QueryHtmlTarget.IFRAME;
400
- }
401
- const bodyTagStart = res.toLowerCase().indexOf('<body>');
402
- const bodyTagEnd = res.toLowerCase().lastIndexOf('</body>') + 7;
403
- // replace \r \n and ' ' with '' to validate if the body is really empty. Clear all the html tags from body
404
- const striptags = striptags_;
405
- const body = striptags(res.slice(bodyTagStart, bodyTagEnd).replace(/(\r|\n|\s)/g, ''));
406
- if (body === '' || res === '') {
407
- return [];
408
- }
409
- return [
410
- {
411
- type: FEATURE,
412
- projection,
413
- properties: Object.assign({ target: htmlTarget, body: res, url }, imposedProperties),
414
- geometry: imposedGeometry || geomToAdd
415
- }
416
- ];
417
- }
418
- getQueryParams(url) {
419
- const queryString = url.split('?');
420
- if (!queryString[1]) {
421
- return;
422
- }
423
- const pairs = queryString[1].split('&');
424
- const result = {};
425
- pairs.forEach(pair => {
426
- pair = pair.split('=');
427
- result[pair[0]] = decodeURIComponent(pair[1] || '');
428
- });
429
- return result;
430
- }
431
- featureToResult(featureOL, zIndex, allowedFieldsAndAlias) {
432
- const featureGeometry = featureOL.getGeometry();
433
- const properties = Object.assign({}, featureOL.getProperties());
434
- delete properties.geometry;
435
- delete properties.GEOMETRIE;
436
- delete properties.boundedBy;
437
- delete properties.shape;
438
- delete properties.SHAPE;
439
- delete properties.the_geom;
440
- delete properties.geom;
441
- let geometry;
442
- if (featureGeometry) {
443
- geometry = {
444
- type: featureGeometry.getType(),
445
- coordinates: featureGeometry.getCoordinates()
446
- };
447
- }
448
- return {
449
- type: FEATURE,
450
- projection: undefined,
451
- properties,
452
- geometry,
453
- meta: {
454
- id: uuid(),
455
- order: 1000 - zIndex,
456
- alias: allowedFieldsAndAlias
457
- }
458
- };
459
- }
460
- getQueryUrl(datasource, options, forceGML2 = false, mapExtent) {
461
- let url;
462
- if (datasource.options.queryUrl) {
463
- return this.getCustomQueryUrl(datasource, options, mapExtent);
464
- }
465
- switch (datasource.constructor) {
466
- case WMSDataSource:
467
- const wmsDatasource = datasource;
468
- const WMSGetFeatureInfoOptions = {
469
- INFO_FORMAT: wmsDatasource.params.INFO_FORMAT ||
470
- this.getMimeInfoFormat(datasource.options.queryFormat),
471
- QUERY_LAYERS: wmsDatasource.params.LAYERS,
472
- FEATURE_COUNT: wmsDatasource.params.FEATURE_COUNT || this.defaultFeatureCount
473
- };
474
- if (wmsDatasource.params.FEATURE_COUNT) {
475
- this.featureCount = wmsDatasource.params.FEATURE_COUNT;
476
- }
477
- if (forceGML2) {
478
- WMSGetFeatureInfoOptions.INFO_FORMAT = this.getMimeInfoFormat(QueryFormat.GML2);
479
- }
480
- url = wmsDatasource.ol.getFeatureInfoUrl(options.coordinates, options.resolution, options.projection, WMSGetFeatureInfoOptions);
481
- // const wmsVersion =
482
- // wmsDatasource.params.VERSION ||
483
- // wmsDatasource.params.version ||
484
- // '1.3.0';
485
- // if (wmsVersion !== '1.3.0') {
486
- // url = url.replace('&I=', '&X=');
487
- // url = url.replace('&J=', '&Y=');
488
- // }
489
- break;
490
- case CartoDataSource:
491
- const cartoDatasource = datasource;
492
- const baseUrl = 'https://' +
493
- cartoDatasource.options.account +
494
- '.carto.com/api/v2/sql?';
495
- const format = 'format=GeoJSON';
496
- const sql = '&q=' + cartoDatasource.options.config.layers[0].options.sql;
497
- const clause = ' WHERE ST_Intersects(the_geom_webmercator,ST_BUFFER(ST_SetSRID(ST_POINT(';
498
- const meters = cartoDatasource.options.queryPrecision
499
- ? cartoDatasource.options.queryPrecision
500
- : '1000';
501
- const coordinates = options.coordinates[0] +
502
- ',' +
503
- options.coordinates[1] +
504
- '),3857),' +
505
- meters +
506
- '))';
507
- url = `${baseUrl}${format}${sql}${clause}${coordinates}`;
508
- break;
509
- case ImageArcGISRestDataSource:
510
- case TileArcGISRestDataSource:
511
- const tileArcGISRestDatasource = datasource;
512
- const deltaX = Math.abs(mapExtent[0] - mapExtent[2]);
513
- const deltaY = Math.abs(mapExtent[1] - mapExtent[3]);
514
- const maxDelta = deltaX > deltaY ? deltaX : deltaY;
515
- const clickBuffer = maxDelta * 0.005;
516
- const threshold = tileArcGISRestDatasource.options.queryPrecision ? tileArcGISRestDatasource.options.queryPrecision : clickBuffer;
517
- const extent = olextent.buffer(olextent.boundingExtent([options.coordinates]), threshold);
518
- const serviceUrl = tileArcGISRestDatasource.options.url +
519
- '/' +
520
- tileArcGISRestDatasource.options.layer +
521
- '/query/';
522
- const geometry = encodeURIComponent('{"xmin":' +
523
- extent[0] +
524
- ',"ymin":' +
525
- extent[1] +
526
- ',"xmax":' +
527
- extent[2] +
528
- ',"ymax":' +
529
- extent[3] +
530
- ',"spatialReference":{"wkid":102100}}');
531
- const params = [
532
- 'f=json',
533
- `geometry=${geometry}`,
534
- 'geometryType=esriGeometryEnvelope',
535
- 'inSR=102100',
536
- 'spatialRel=esriSpatialRelIntersects',
537
- 'outFields=*',
538
- 'returnGeometry=true',
539
- 'outSR=102100'
540
- ];
541
- url = `${serviceUrl}?${params.join('&')}`;
542
- break;
543
- default:
544
- break;
545
- }
546
- return url;
547
- }
548
- getMimeInfoFormat(queryFormat) {
549
- let mime = 'application/vnd.ogc.gml';
550
- const keyEnum = Object.keys(QueryFormat).find(key => QueryFormat[key] === queryFormat);
551
- if (keyEnum) {
552
- mime = QueryFormatMimeType[keyEnum];
553
- }
554
- return mime;
555
- }
556
- getAllowedFieldsAndAlias(layer) {
557
- var _a, _b, _c;
558
- let allowedFieldsAndAlias;
559
- if (((_c = (_b = (_a = layer.options) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.options) === null || _c === void 0 ? void 0 : _c.sourceFields) &&
560
- layer.options.source.options.sourceFields.length >= 1) {
561
- allowedFieldsAndAlias = {};
562
- layer.options.source.options.sourceFields.forEach(sourceField => {
563
- const alias = sourceField.alias ? sourceField.alias : sourceField.name;
564
- allowedFieldsAndAlias[sourceField.name] = alias;
565
- });
566
- }
567
- return allowedFieldsAndAlias;
568
- }
569
- getQueryTitle(feature, layer) {
570
- var _a, _b;
571
- let title;
572
- if ((_b = (_a = layer.options) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.options) {
573
- const dataSourceOptions = layer.options.source
574
- .options;
575
- if (dataSourceOptions.queryTitle) {
576
- title = this.getLabelMatch(feature, dataSourceOptions.queryTitle);
577
- }
578
- }
579
- return title;
580
- }
581
- getLabelMatch(feature, labelMatch) {
582
- let label = labelMatch;
583
- const labelToGet = Array.from(labelMatch.matchAll(/\$\{([^\{\}]+)\}/g));
584
- labelToGet.forEach(v => {
585
- label = label.replace(v[0], feature.properties[v[1]]);
586
- });
587
- // Nothing done? check feature's attribute
588
- if (labelToGet.length === 0 && label === labelMatch) {
589
- label = feature.properties[labelMatch] || labelMatch;
590
- }
591
- return label;
592
- }
593
- /**
594
- * @param datasource QueryableDataSource
595
- * @param options QueryOptions
596
- * @mapExtent extent of the map when click event
597
- *
598
- */
599
- getCustomQueryUrl(datasource, options, mapExtent) {
600
- let url = datasource.options.queryUrl.replace(/\{xmin\}/g, mapExtent[0].toString())
601
- .replace(/\{ymin\}/g, mapExtent[1].toString())
602
- .replace(/\{xmax\}/g, mapExtent[2].toString())
603
- .replace(/\{ymax\}/g, mapExtent[3].toString())
604
- .replace(/\{x\}/g, options.coordinates[0].toString())
605
- .replace(/\{y\}/g, options.coordinates[1].toString())
606
- .replace(/\{resolution\}/g, options.resolution.toString())
607
- .replace(/\{srid\}/g, options.projection.replace('EPSG:', ''));
608
- return url;
609
- }
610
- }
611
- QueryService.ɵfac = function QueryService_Factory(t) { return new (t || QueryService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.MessageService), i0.ɵɵinject(i2.LanguageService)); };
612
- QueryService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: QueryService, factory: QueryService.ɵfac, providedIn: 'root' });
613
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryService, [{
614
- type: Injectable,
615
- args: [{
616
- providedIn: 'root'
617
- }]
618
- }], function () { return [{ type: i1.HttpClient }, { type: i2.MessageService }, { type: i2.LanguageService }]; }, null); })();
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sS0FBSyxVQUFVLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFN0QsT0FBTyxFQUNMLGFBQWEsRUFDYixlQUFlLEVBQ2Ysd0JBQXdCLEVBRXhCLHlCQUF5QixFQUMxQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7Ozs7QUFXdkIsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDVSxJQUFnQixFQUNoQixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxH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Q0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUVILGlCQUFpQixDQUNmLFVBQStCLEVBQy9CLE9BQXFCLEVBQ3JCLFNBQXFCO1FBRW5CLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2xGLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDcEQsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDekQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU5RCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O3dFQTl1QlEsWUFBWTtrRUFBWixZQUFZLFdBQVosWUFBWSxtQkFGWCxNQUFNO3VGQUVQLFlBQVk7Y0FIeEIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0ICogYXMgc3RyaXB0YWdzXyBmcm9tICdzdHJpcHRhZ3MnO1xyXG5cclxuaW1wb3J0ICogYXMgb2xmb3JtYXQgZnJvbSAnb2wvZm9ybWF0JztcclxuaW1wb3J0ICogYXMgb2xleHRlbnQgZnJvbSAnb2wvZXh0ZW50JztcclxuaW1wb3J0IG9sRm9ybWF0R01MMiBmcm9tICdvbC9mb3JtYXQvR01MMic7XHJcbmltcG9ydCBvbEZvcm1hdEdNTDMgZnJvbSAnb2wvZm9ybWF0L0dNTDMnO1xyXG5pbXBvcnQgb2xGb3JtYXRFc3JpSlNPTiBmcm9tICdvbC9mb3JtYXQvRXNyaUpTT04nO1xyXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5pbXBvcnQgKiBhcyBvbGdlb20gZnJvbSAnb2wvZ2VvbSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAaWdvMi91dGlscyc7XHJcbmltcG9ydCB7IEZlYXR1cmUsIEZlYXR1cmVHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZFQVRVUkUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHtcclxuICBXTVNEYXRhU291cmNlLFxyXG4gIENhcnRvRGF0YVNvdXJjZSxcclxuICBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2UsXHJcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnMsXHJcbiAgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZVxyXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2UnO1xyXG5cclxuaW1wb3J0IHtcclxuICBRdWVyeUZvcm1hdCxcclxuICBRdWVyeUZvcm1hdE1pbWVUeXBlLFxyXG4gIFF1ZXJ5SHRtbFRhcmdldFxyXG59IGZyb20gJy4vcXVlcnkuZW51bXMnO1xyXG5pbXBvcnQge1xyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeWFibGVEYXRhU291cmNlLFxyXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zXHJcbn0gZnJvbSAnLi9xdWVyeS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgTWFwRXh0ZW50IH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAuaW50ZXJmYWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XHJcbiAgcHVibGljIHF1ZXJ5RW5hYmxlZCA9IHRydWU7XHJcbiAgcHVibGljIGRlZmF1bHRGZWF0dXJlQ291bnQgPSAyMDsgLy8gZGVmYXVsdCBmZWF0dXJlIGNvdW50XHJcbiAgcHVibGljIGZlYXR1cmVDb3VudCA9IDIwOyAvLyBmZWF0dXJlIGNvdW50XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNNZXNzYWdlSWRzID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlKSB7fVxyXG5cclxuICBxdWVyeShsYXllcnM6IExheWVyW10sIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8RmVhdHVyZVtdPltdIHtcclxuICAgIGlmICh0aGlzLnByZXZpb3VzTWVzc2FnZUlkcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2VJZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5yZW1vdmUoaWQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNcclxuICAgICAgLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiBsYXllci52aXNpYmxlICYmIGxheWVyLmlzSW5SZXNvbHV0aW9uc1JhbmdlKVxyXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHRoaXMucXVlcnlMYXllcihsYXllciwgb3B0aW9ucykpO1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMYXllcihsYXllcjogTGF5ZXIsIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8RmVhdHVyZVtdPiB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFF1ZXJ5VXJsKGxheWVyLmRhdGFTb3VyY2UsIG9wdGlvbnMsIGZhbHNlLCBsYXllci5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCkpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIChsYXllci5kYXRhU291cmNlIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2UpLm9wdGlvbnMucXVlcnlGb3JtYXQgPT09XHJcbiAgICAgIFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgdXJsR21sID0gdGhpcy5nZXRRdWVyeVVybChsYXllci5kYXRhU291cmNlLCBvcHRpb25zLCB0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsR21sLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoZ21sUmVzID0+IHtcclxuICAgICAgICAgIGNvbnN0IG1lcmdlZEdNTCA9IHRoaXMubWVyZ2VHTUwoZ21sUmVzLCB1cmwsIGxheWVyKTtcclxuICAgICAgICAgIGNvbnN0IGltcG9zZWRHZW9tID0gbWVyZ2VkR01MWzBdO1xyXG4gICAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcChyZXMgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdERhdGEocmVzLCBsYXllciwgb3B0aW9ucywgdXJsLCBpbXBvc2VkR2VvbSwgaW1wb3NlZFByb3BlcnRpZXMpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pO1xyXG4gICAgcmV0dXJuIHJlcXVlc3QucGlwZShtYXAocmVzID0+IHRoaXMuZXh0cmFjdERhdGEocmVzLCBsYXllciwgb3B0aW9ucywgdXJsKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUdNTChnbWxSZXMsIHVybCwgbGF5ZXI6IExheWVyKTogW0ZlYXR1cmVHZW9tZXRyeSwgeyBba2V5OiBzdHJpbmddOiBhbnkgfV0ge1xyXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IG9sRm9ybWF0R01MMigpO1xyXG4gICAgbGV0IGZlYXR1cmVzID0gcGFyc2VyLnJlYWRGZWF0dXJlcyhnbWxSZXMpO1xyXG4gICAgLy8gSGFuZGxlIG5vbiBzdGFuZGFyZCBHTUwgb3V0cHV0IChNYXBTZXJ2ZXIpXHJcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IHdtc1BhcnNlciA9IG5ldyBvbGZvcm1hdC5XTVNHZXRGZWF0dXJlSW5mbygpO1xyXG4gICAgICBmZWF0dXJlcyA9IHdtc1BhcnNlci5yZWFkRmVhdHVyZXMoZ21sUmVzKTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9sbWxpbmUgPSBuZXcgb2xnZW9tLk11bHRpTGluZVN0cmluZyhbXSk7XHJcbiAgICBsZXQgcHRzO1xyXG4gICAgY29uc3QgcHRzQXJyYXkgPSBbXTtcclxuICAgIGxldCBvbG1wb2x5ID0gbmV3IG9sZ2VvbS5NdWx0aVBvbHlnb24oW10pO1xyXG4gICAgbGV0IGZpcnN0RmVhdHVyZVR5cGU7XHJcbiAgICBjb25zdCBuYkZlYXR1cmVzID0gZmVhdHVyZXMubGVuZ3RoO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIGdlb21ldHJ5IGludGVyc2VjdCBiYm94XHJcbiAgICAvLyBmb3IgZ2Vvc2VydmVyIGdldGZlYXR1cmVpbmZvIHJlc3BvbnNlIGluIGRhdGEgcHJvamVjdGlvbiwgbm90IGNhbGwgcHJvamVjdGlvblxyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIGNvbnN0IGJib3hSYXcgPSBzZWFyY2hQYXJhbXMuYmJveDtcclxuICAgIGNvbnN0IGJib3ggPSBiYm94UmF3LnNwbGl0KCcsJyk7XHJcbiAgICBjb25zdCBiYm94RXh0ZW50ID0gb2xleHRlbnQuY3JlYXRlRW1wdHkoKTtcclxuICAgIG9sZXh0ZW50LmV4dGVuZChiYm94RXh0ZW50LCBiYm94KTtcclxuICAgIGNvbnN0IG91dEJib3hFeHRlbnQgPSBmYWxzZTtcclxuICAgIGxldCB0aXRsZUNvbnRlbnQ7XHJcbiAgICBsZXQgcXVlcnlUaWxlRmllbGQ7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcclxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcclxuICAgICAgaWYgKGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpIHtcclxuICAgICAgICBxdWVyeVRpbGVGaWVsZCA9IGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHtcclxuXHJcbiAgICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xyXG4gICAgICAgIGxldCBxdWVyeVRpdGxlQ29udGVudCA9IGZlYXR1cmUuZ2V0UHJvcGVydGllcygpW3F1ZXJ5VGlsZUZpZWxkXTtcclxuICAgICAgICBpZiAocXVlcnlUaXRsZUNvbnRlbnQpIHtcclxuICAgICAgICAgIHRpdGxlQ29udGVudCA9ICF0aXRsZUNvbnRlbnQgPyBxdWVyeVRpdGxlQ29udGVudCA6IGAke3RpdGxlQ29udGVudH0sJHtxdWVyeVRpdGxlQ29udGVudH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvKiAgaWYgKCFmZWF0dXJlLmdldEdlb21ldHJ5KCkuc2ltcGxpZnkoMTAwKS5pbnRlcnNlY3RzRXh0ZW50KGJib3hFeHRlbnQpKSB7XHJcbiAgICAgICAgb3V0QmJveEV4dGVudCA9IHRydWU7XHJcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgdG8gcHJvamVjdCB0aGUgZ2VvbWV0cnk/XHJcbiAgICAgIH0qL1xyXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcyA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlUeXBlID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcclxuXHJcbiAgICAgIGlmICghZmlyc3RGZWF0dXJlVHlwZSAmJiAhb3V0QmJveEV4dGVudCkge1xyXG4gICAgICAgIGZpcnN0RmVhdHVyZVR5cGUgPSBmZWF0dXJlR2VvbWV0cnlUeXBlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghb3V0QmJveEV4dGVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZmVhdHVyZUdlb21ldHJ5VHlwZSkge1xyXG4gICAgICAgICAgY2FzZSAnUG9pbnQnOlxyXG4gICAgICAgICAgICBpZiAobmJGZWF0dXJlcyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIHB0cyA9IG5ldyBvbGdlb20uUG9pbnQoZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHB0c0FycmF5LnB1c2goZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XHJcbiAgICAgICAgICAgIG9sbWxpbmUuYXBwZW5kTGluZVN0cmluZyhcclxuICAgICAgICAgICAgICBuZXcgb2xnZW9tLkxpbmVTdHJpbmcoZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnUG9seWdvbic6XHJcbiAgICAgICAgICAgIG9sbXBvbHkuYXBwZW5kUG9seWdvbihcclxuICAgICAgICAgICAgICBuZXcgb2xnZW9tLlBvbHlnb24oZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcclxuICAgICAgICAgICAgb2xtcG9seSA9IG5ldyBvbGdlb20uTXVsdGlQb2x5Z29uKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgb2xtcHRzO1xyXG4gICAgaWYgKHB0c0FycmF5Lmxlbmd0aCA9PT0gMCAmJiBwdHMpIHtcclxuICAgICAgb2xtcHRzID0ge1xyXG4gICAgICAgIHR5cGU6IHB0cy5nZXRUeXBlKCksXHJcbiAgICAgICAgY29vcmRpbmF0ZXM6IHB0cy5nZXRDb29yZGluYXRlcygpXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvbG1wdHMgPSB7XHJcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbdGhpcy5jb252ZXhIdWxsKHB0c0FycmF5KV1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmV0dXJuR2VvbWV0cnk7XHJcbiAgICBzd2l0Y2ggKGZpcnN0RmVhdHVyZVR5cGUpIHtcclxuICAgICAgY2FzZSAnTGluZVN0cmluZyc6XHJcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiBvbG1saW5lLmdldFR5cGUoKSxcclxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1saW5lLmdldENvb3JkaW5hdGVzKClcclxuICAgICAgICB9O1xyXG4gICAgICBjYXNlICdQb2ludCc6XHJcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSBvbG1wdHM7XHJcbiAgICAgIGNhc2UgJ1BvbHlnb24nOlxyXG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xyXG4gICAgICAgICAgdHlwZTogb2xtcG9seS5nZXRUeXBlKCksXHJcbiAgICAgICAgICBjb29yZGluYXRlczogb2xtcG9seS5nZXRDb29yZGluYXRlcygpXHJcbiAgICAgICAgfTtcclxuICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcclxuICAgICAgICByZXR1cm5HZW9tZXRyeSA9IHtcclxuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxyXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IG9sbXBvbHkuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbXBvc2VkUHJvcGVydGllcyA9IHt9O1xyXG5cclxuICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xyXG4gICAgICBpbXBvc2VkUHJvcGVydGllc1txdWVyeVRpbGVGaWVsZF0gPSB0aXRsZUNvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFsgcmV0dXJuR2VvbWV0cnksIGltcG9zZWRQcm9wZXJ0aWVzXTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgY3Jvc3MoYSwgYiwgbykge1xyXG4gICAgcmV0dXJuIChhWzBdIC0gb1swXSkgKiAoYlsxXSAtIG9bMV0pIC0gKGFbMV0gLSBvWzFdKSAqIChiWzBdIC0gb1swXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gcG9pbnRzIEFuIGFycmF5IG9mIFtYLCBZXSBjb29yZGluYXRlc1xyXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZSBpbnN0ZWFkIG9mIHR1cmYuanMgY29udmV4SHVsbCBiZWNhdXNlIFR1cmYgbmVlZHMgYXQgbGVhc3QgMyBwb2ludCB0byBtYWtlIGEgaHVsbC5cclxuICAgKiBodHRwczovL2VuLndpa2lib29rcy5vcmcvd2lraS9BbGdvcml0aG1fSW1wbGVtZW50YXRpb24vR2VvbWV0cnkvQ29udmV4X2h1bGwvTW9ub3RvbmVfY2hhaW4jSmF2YVNjcmlwdFxyXG4gICAqL1xyXG4gIGNvbnZleEh1bGwocG9pbnRzKSB7XHJcbiAgICBwb2ludHMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gYVswXSA9PT0gYlswXSA/IGFbMV0gLSBiWzFdIDogYVswXSAtIGJbMF07XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBsb3dlciA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcclxuICAgICAgd2hpbGUgKFxyXG4gICAgICAgIGxvd2VyLmxlbmd0aCA+PSAyICYmXHJcbiAgICAgICAgdGhpcy5jcm9zcyhsb3dlcltsb3dlci5sZW5ndGggLSAyXSwgbG93ZXJbbG93ZXIubGVuZ3RoIC0gMV0sIHBvaW50KSA8PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxvd2VyLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGxvd2VyLnB1c2gocG9pbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVwcGVyID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICB1cHBlci5sZW5ndGggPj0gMiAmJlxyXG4gICAgICAgIHRoaXMuY3Jvc3MoXHJcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAyXSxcclxuICAgICAgICAgIHVwcGVyW3VwcGVyLmxlbmd0aCAtIDFdLFxyXG4gICAgICAgICAgcG9pbnRzW2ldXHJcbiAgICAgICAgKSA8PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHVwcGVyLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHVwcGVyLnB1c2gocG9pbnRzW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICB1cHBlci5wb3AoKTtcclxuICAgIGxvd2VyLnBvcCgpO1xyXG4gICAgcmV0dXJuIGxvd2VyLmNvbmNhdCh1cHBlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3REYXRhKFxyXG4gICAgcmVzLFxyXG4gICAgbGF5ZXI6IExheWVyLFxyXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zLFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBpbXBvc2VkR2VvbWV0cnk/LFxyXG4gICAgaW1wb3NlZFByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgKTogRmVhdHVyZVtdIHtcclxuICAgIGNvbnN0IHF1ZXJ5RGF0YVNvdXJjZSA9IGxheWVyLmRhdGFTb3VyY2UgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZTtcclxuXHJcbiAgICBjb25zdCBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSB0aGlzLmdldEFsbG93ZWRGaWVsZHNBbmRBbGlhcyhsYXllcik7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBbXTtcclxuICAgIHN3aXRjaCAocXVlcnlEYXRhU291cmNlLm9wdGlvbnMucXVlcnlGb3JtYXQpIHtcclxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HTUwzOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0R01MM0RhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBsYXllci56SW5kZXgsXHJcbiAgICAgICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkpTT046XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjpcclxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5HRU9KU09OMjpcclxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEdlb0pTT05EYXRhKHJlcywgbGF5ZXIuekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkVTUklKU09OOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0RXNyaUpTT05EYXRhKHJlcywgbGF5ZXIuekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LlRFWFQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RUZXh0RGF0YShyZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUw6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RIdG1sRGF0YShcclxuICAgICAgICAgIHJlcyxcclxuICAgICAgICAgIHF1ZXJ5RGF0YVNvdXJjZS5xdWVyeUh0bWxUYXJnZXQsXHJcbiAgICAgICAgICB1cmxcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0SHRtbERhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2UucXVlcnlIdG1sVGFyZ2V0LFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgaW1wb3NlZEdlb21ldHJ5LFxyXG4gICAgICAgICAgaW1wb3NlZFByb3BlcnRpZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkdNTDI6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHTUwyRGF0YShyZXMsIGxheWVyLCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPiAwICYmIGZlYXR1cmVzWzBdLmdlb21ldHJ5ID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGdlb21Ub0FkZCA9IHRoaXMuY3JlYXRlR2VvbWV0cnlGcm9tVXJsQ2xpY2sodXJsKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xyXG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkgPSBnZW9tVG9BZGQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3bXNEYXRhc291cmNlID0gbGF5ZXIuZGF0YVNvdXJjZSBhcyBXTVNEYXRhU291cmNlO1xyXG4gICAgY29uc3QgZmVhdHVyZUNvdW50ID0gd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgP1xyXG4gICAgICBuZXcgUmVnRXhwKCdGRUFUVVJFX0NPVU5UPScgKyB0aGlzLmZlYXR1cmVDb3VudCkgOlxyXG4gICAgICBuZXcgUmVnRXhwKCdGRUFUVVJFX0NPVU5UPScgKyB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnQpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgZmVhdHVyZUNvdW50LnRlc3QodXJsKSAmJlxyXG4gICAgICAoKHdtc0RhdGFzb3VyY2UucGFyYW1zPy5GRUFUVVJFX0NPVU5UICYmIGZlYXR1cmVzLmxlbmd0aCA9PT0gdGhpcy5mZWF0dXJlQ291bnQpIHx8XHJcbiAgICAgICghd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiYgZmVhdHVyZXMubGVuZ3RoID09PSB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnQpKSkge1xyXG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuZ2V0KCdpZ28uZ2VvLnF1ZXJ5LmZlYXR1cmVDb3VudE1heCcsIHt2YWx1ZTogbGF5ZXIudGl0bGV9KS5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZU9iaiA9IHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mbyhtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLnByZXZpb3VzTWVzc2FnZUlkcy5wdXNoKG1lc3NhZ2VPYmoudG9hc3RJZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoKGZlYXR1cmU6IEZlYXR1cmUsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbWFwTGFiZWwgPSBmZWF0dXJlLnByb3BlcnRpZXNbcXVlcnlEYXRhU291cmNlLm1hcExhYmVsXTtcclxuXHJcbiAgICAgIGxldCBleGNsdWRlO1xyXG4gICAgICBpZiAobGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zPy50eXBlID09PSAnd21zJykge1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zXHJcbiAgICAgICAgICAuc291cmNlT3B0aW9ucyBhcyBXTVNEYXRhU291cmNlT3B0aW9ucztcclxuICAgICAgICBleGNsdWRlID0gc291cmNlT3B0aW9ucyA/IHNvdXJjZU9wdGlvbnMuZXhjbHVkZUF0dHJpYnV0ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRRdWVyeVRpdGxlKGZlYXR1cmUsIGxheWVyKTtcclxuICAgICAgaWYgKCF0aXRsZSAmJiBmZWF0dXJlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdGl0bGUgPSBgJHtsYXllci50aXRsZX0gKCR7aW5kZXggKyAxfSlgO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aXRsZSkge1xyXG4gICAgICAgIHRpdGxlID0gbGF5ZXIudGl0bGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1ldGEgPSBPYmplY3QuYXNzaWduKHt9LCBmZWF0dXJlLm1ldGEgfHwge30sIHtcclxuICAgICAgICBpZDogdXVpZCgpLFxyXG4gICAgICAgIHRpdGxlLFxyXG4gICAgICAgIG1hcFRpdGxlOiBtYXBMYWJlbCxcclxuICAgICAgICBzb3VyY2VUaXRsZTogbGF5ZXIudGl0bGUsXHJcbiAgICAgICAgb3JkZXI6IDEwMDAgLSBsYXllci56SW5kZXgsXHJcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZTogZXhjbHVkZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGZlYXR1cmUsIHtcclxuICAgICAgICBtZXRhLFxyXG4gICAgICAgIHByb2plY3Rpb246XHJcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2Uub3B0aW9ucy50eXBlID09PSAnY2FydG8nXHJcbiAgICAgICAgICAgID8gJ0VQU0c6NDMyNidcclxuICAgICAgICAgICAgOiBvcHRpb25zLnByb2plY3Rpb25cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlR2VvbWV0cnlGcm9tVXJsQ2xpY2sodXJsKSB7XHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IGFueSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXModXJsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgY29uc3QgYmJveFJhdyA9IHNlYXJjaFBhcmFtcy5iYm94O1xyXG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChzZWFyY2hQYXJhbXMud2lkdGgsIDEwKTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5oZWlnaHQsIDEwKTtcclxuICAgIGNvbnN0IHhQb3NpdGlvbiA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5pIHx8IHNlYXJjaFBhcmFtcy54LCAxMCk7XHJcbiAgICBjb25zdCB5UG9zaXRpb24gPSBwYXJzZUludChzZWFyY2hQYXJhbXMuaiB8fCBzZWFyY2hQYXJhbXMueSwgMTApO1xyXG5cclxuICAgIGNvbnN0IGJib3ggPSBiYm94UmF3LnNwbGl0KCcsJyk7XHJcbiAgICBsZXQgdGhyZXNob2xkID1cclxuICAgICAgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFswXSkpIC0gTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzJdKSkpICogMC4wNTtcclxuXHJcbiAgICAvLyBmb3IgY29udGV4dCBpbiBkZWdyZWUgKEVQU0c6NDMyNiw0MjY5Li4uKVxyXG4gICAgaWYgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFswXSkpIDwgMTgwKSB7XHJcbiAgICAgIHRocmVzaG9sZCA9IDAuMDQ1O1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xpY2t4ID1cclxuICAgICAgcGFyc2VGbG9hdChiYm94WzBdKSArXHJcbiAgICAgIChNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMF0pIC0gcGFyc2VGbG9hdChiYm94WzJdKSkgKiB4UG9zaXRpb24pIC9cclxuICAgICAgICB3aWR0aCAtXHJcbiAgICAgIHRocmVzaG9sZDtcclxuICAgIGNvbnN0IGNsaWNreSA9XHJcbiAgICAgIHBhcnNlRmxvYXQoYmJveFsxXSkgK1xyXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzFdKSAtIHBhcnNlRmxvYXQoYmJveFszXSkpICogeVBvc2l0aW9uKSAvXHJcbiAgICAgICAgaGVpZ2h0IC1cclxuICAgICAgdGhyZXNob2xkO1xyXG4gICAgY29uc3QgY2xpY2t4MSA9IGNsaWNreCArIHRocmVzaG9sZCAqIDI7XHJcbiAgICBjb25zdCBjbGlja3kxID0gY2xpY2t5ICsgdGhyZXNob2xkICogMjtcclxuXHJcbiAgICBjb25zdCB3a3RQb2x5ID1cclxuICAgICAgJ1BPTFlHT04oKCcgK1xyXG4gICAgICBjbGlja3ggK1xyXG4gICAgICAnICcgK1xyXG4gICAgICBjbGlja3kgK1xyXG4gICAgICAnLCAnICtcclxuICAgICAgY2xpY2t4ICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5MSArXHJcbiAgICAgICcsICcgK1xyXG4gICAgICBjbGlja3gxICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5MSArXHJcbiAgICAgICcsICcgK1xyXG4gICAgICBjbGlja3gxICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5ICtcclxuICAgICAgJywgJyArXHJcbiAgICAgIGNsaWNreCArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreSArXHJcbiAgICAgICcpKSc7XHJcblxyXG4gICAgY29uc3QgZm9ybWF0ID0gbmV3IG9sZm9ybWF0LldLVCgpO1xyXG4gICAgY29uc3QgdGVuUGVyY2VudFdpZHRoR2VvbSA9IGZvcm1hdC5yZWFkRmVhdHVyZSh3a3RQb2x5KTtcclxuICAgIGNvbnN0IGYgPSB0ZW5QZXJjZW50V2lkdGhHZW9tLmdldEdlb21ldHJ5KCkgYXMgYW55O1xyXG5cclxuICAgIGNvbnN0IG5ld0dlb20gPSB7XHJcbiAgICAgIHR5cGU6IGYuZ2V0VHlwZSgpLFxyXG4gICAgICBjb29yZGluYXRlczogZi5nZXRDb29yZGluYXRlcygpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXdHZW9tO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0R01MMkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz8pIHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDIoKTtcclxuICAgIGxldCBmZWF0dXJlcyA9IHBhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcclxuICAgIC8vIEhhbmRsZSBub24gc3RhbmRhcmQgR01MIG91dHB1dCAoTWFwU2VydmVyKVxyXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zdCB3bXNQYXJzZXIgPSBuZXcgb2xmb3JtYXQuV01TR2V0RmVhdHVyZUluZm8oKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBmZWF0dXJlcyA9IHdtc1BhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICdxdWVyeS5zZXJ2aWNlOiBNdWx0aXBvbHlnb25zIGFyZSBiYWRseSBtYW5hZ2VkIGluIG1hcHNlcnZlciBpbiBHTUwyLiBVc2UgYW5vdGhlciBmb3JtYXQuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKGZlYXR1cmUgPT5cclxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0R01MM0RhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz8pIHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDMoKTtcclxuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigncXVlcnkuc2VydmljZTogR01MMyBpcyBub3Qgd2VsbCBzdXBwb3J0ZWQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PlxyXG4gICAgICB0aGlzLmZlYXR1cmVUb1Jlc3VsdChmZWF0dXJlLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RHZW9KU09ORGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzPykge1xyXG4gICAgbGV0IGZlYXR1cmVzID0gW107XHJcbiAgICB0cnkge1xyXG4gICAgICBmZWF0dXJlcyA9IEpTT04ucGFyc2UocmVzLnJlcGxhY2UoLyhcXHJ8XFxuKS9nLCAnICcpKS5mZWF0dXJlcztcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdxdWVyeS5zZXJ2aWNlOiBVbmFibGUgdG8gcGFyc2UgZ2VvanNvbicsICdcXG4nLCByZXMpO1xyXG4gICAgfVxyXG4gICAgZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4gZmVhdHVyZS5tZXRhID0ge1xyXG4gICAgICBpZDogdXVpZCgpLFxyXG4gICAgICBvcmRlcjogMTAwMCAtIHpJbmRleCxcclxuICAgICAgYWxpYXM6IGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmVhdHVyZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RFc3JpSlNPTkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcykge1xyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlcykuZXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRFc3JpSlNPTigpO1xyXG4gICAgY29uc3QgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcblxyXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHRoaXMuZmVhdHVyZVRvUmVzdWx0KGZlYXR1cmUsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RUZXh0RGF0YShyZXMpIHtcclxuICAgIC8vIFRPRE9cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEh0bWxEYXRhKFxyXG4gICAgcmVzLFxyXG4gICAgaHRtbFRhcmdldDogUXVlcnlIdG1sVGFyZ2V0LFxyXG4gICAgdXJsLFxyXG4gICAgaW1wb3NlZEdlb21ldHJ5PyxcclxuICAgIGltcG9zZWRQcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gICkge1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIGNvbnN0IHByb2plY3Rpb24gPSBzZWFyY2hQYXJhbXMuY3JzIHx8IHNlYXJjaFBhcmFtcy5zcnMgfHwgJ0VQU0c6Mzg1Nyc7XHJcbiAgICBjb25zdCBnZW9tVG9BZGQgPSB0aGlzLmNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBodG1sVGFyZ2V0ICE9PSBRdWVyeUh0bWxUYXJnZXQuQkxBTksgJiZcclxuICAgICAgaHRtbFRhcmdldCAhPT0gUXVlcnlIdG1sVGFyZ2V0LklGUkFNRVxyXG4gICAgKSB7XHJcbiAgICAgIGh0bWxUYXJnZXQgPSBRdWVyeUh0bWxUYXJnZXQuSUZSQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJvZHlUYWdTdGFydCA9IHJlcy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzxib2R5PicpO1xyXG4gICAgY29uc3QgYm9keVRhZ0VuZCA9IHJlcy50b0xvd2VyQ2FzZSgpLmxhc3RJbmRleE9mKCc8L2JvZHk+JykgKyA3O1xyXG4gICAgLy8gcmVwbGFjZSBcXHIgXFxuICBhbmQgJyAnIHdpdGggJycgdG8gdmFsaWRhdGUgaWYgdGhlIGJvZHkgaXMgcmVhbGx5IGVtcHR5LiBDbGVhciBhbGwgdGhlIGh0bWwgdGFncyBmcm9tIGJvZHlcclxuICAgIGNvbnN0IHN0cmlwdGFncyA9IHN0cmlwdGFnc187XHJcbiAgICBjb25zdCBib2R5ID0gc3RyaXB0YWdzKHJlcy5zbGljZShib2R5VGFnU3RhcnQsIGJvZHlUYWdFbmQpLnJlcGxhY2UoLyhcXHJ8XFxufFxccykvZywgJycpKTtcclxuICAgIGlmIChib2R5ID09PSAnJyB8fCByZXMgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogRkVBVFVSRSxcclxuICAgICAgICBwcm9qZWN0aW9uLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IE9iamVjdC5hc3NpZ24oeyB0YXJnZXQ6IGh0bWxUYXJnZXQsIGJvZHk6IHJlcywgdXJsIH0sIGltcG9zZWRQcm9wZXJ0aWVzKSxcclxuICAgICAgICBnZW9tZXRyeTogaW1wb3NlZEdlb21ldHJ5IHx8IGdlb21Ub0FkZFxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWVyeVBhcmFtcyh1cmwpIHtcclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXJsLnNwbGl0KCc/Jyk7XHJcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nWzFdKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhaXJzID0gcXVlcnlTdHJpbmdbMV0uc3BsaXQoJyYnKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgIHBhaXJzLmZvckVhY2gocGFpciA9PiB7XHJcbiAgICAgIHBhaXIgPSBwYWlyLnNwbGl0KCc9Jyk7XHJcbiAgICAgIHJlc3VsdFtwYWlyWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyWzFdIHx8ICcnKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmZWF0dXJlVG9SZXN1bHQoXHJcbiAgICBmZWF0dXJlT0w6IG9sRmVhdHVyZTxvbGdlb20uR2VvbWV0cnk+LFxyXG4gICAgekluZGV4OiBudW1iZXIsXHJcbiAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXM/XHJcbiAgKTogRmVhdHVyZSB7XHJcbiAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnkgPSBmZWF0dXJlT0wuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCBmZWF0dXJlT0wuZ2V0UHJvcGVydGllcygpKTtcclxuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLmdlb21ldHJ5O1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuR0VPTUVUUklFO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuYm91bmRlZEJ5O1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuc2hhcGU7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5TSEFQRTtcclxuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLnRoZV9nZW9tO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbTtcclxuXHJcbiAgICBsZXQgZ2VvbWV0cnk7XHJcbiAgICBpZiAoZmVhdHVyZUdlb21ldHJ5KSB7XHJcbiAgICAgIGdlb21ldHJ5ID0ge1xyXG4gICAgICAgIHR5cGU6IGZlYXR1cmVHZW9tZXRyeS5nZXRUeXBlKCksXHJcbiAgICAgICAgY29vcmRpbmF0ZXM6IGZlYXR1cmVHZW9tZXRyeS5nZXRDb29yZGluYXRlcygpXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdHlwZTogRkVBVFVSRSxcclxuICAgICAgcHJvamVjdGlvbjogdW5kZWZpbmVkLFxyXG4gICAgICBwcm9wZXJ0aWVzLFxyXG4gICAgICBnZW9tZXRyeSxcclxuICAgICAgbWV0YToge1xyXG4gICAgICAgIGlkOiB1dWlkKCksXHJcbiAgICAgICAgb3JkZXI6IDEwMDAgLSB6SW5kZXgsXHJcbiAgICAgICAgYWxpYXM6IGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWVyeVVybChcclxuICAgIGRhdGFzb3VyY2U6IFF1ZXJ5YWJsZURhdGFTb3VyY2UsXHJcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMsXHJcbiAgICBmb3JjZUdNTDIgPSBmYWxzZSxcclxuICAgIG1hcEV4dGVudD86IE1hcEV4dGVudFxyXG4gICk6IHN0cmluZyB7XHJcbiAgICBsZXQgdXJsO1xyXG5cclxuICAgIGlmIChkYXRhc291cmNlLm9wdGlvbnMucXVlcnlVcmwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VzdG9tUXVlcnlVcmwoZGF0YXNvdXJjZSwgb3B0aW9ucywgbWFwRXh0ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKGRhdGFzb3VyY2UuY29uc3RydWN0b3IpIHtcclxuICAgICAgY2FzZSBXTVNEYXRhU291cmNlOlxyXG4gICAgICAgIGNvbnN0IHdtc0RhdGFzb3VyY2UgPSBkYXRhc291cmNlIGFzIFdNU0RhdGFTb3VyY2U7XHJcblxyXG4gICAgICAgIGNvbnN0IFdNU0dldEZlYXR1cmVJbmZvT3B0aW9ucyA9IHtcclxuICAgICAgICAgIElORk9fRk9STUFUOlxyXG4gICAgICAgICAgICB3bXNEYXRhc291cmNlLnBhcmFtcy5JTkZPX0ZPUk1BVCB8fFxyXG4gICAgICAgICAgICB0aGlzLmdldE1pbWVJbmZvRm9ybWF0KGRhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeUZvcm1hdCksXHJcbiAgICAgICAgICBRVUVSWV9MQVlFUlM6IHdtc0RhdGFzb3VyY2UucGFyYW1zLkxBWUVSUyxcclxuICAgICAgICAgIEZFQVRVUkVfQ09VTlQ6IHdtc0RhdGFzb3VyY2UucGFyYW1zLkZFQVRVUkVfQ09VTlQgfHwgdGhpcy5kZWZhdWx0RmVhdHVyZUNvdW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHdtc0RhdGFzb3VyY2UucGFyYW1zLkZFQVRVUkVfQ09VTlQpIHtcclxuICAgICAgICAgIHRoaXMuZmVhdHVyZUNvdW50ID0gd21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JjZUdNTDIpIHtcclxuICAgICAgICAgIFdNU0dldEZlYXR1cmVJbmZvT3B0aW9ucy5JTkZPX0ZPUk1BVCA9IHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoXHJcbiAgICAgICAgICAgIFF1ZXJ5Rm9ybWF0LkdNTDJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cmwgPSB3bXNEYXRhc291cmNlLm9sLmdldEZlYXR1cmVJbmZvVXJsKFxyXG4gICAgICAgICAgb3B0aW9ucy5jb29yZGluYXRlcyxcclxuICAgICAgICAgIG9wdGlvbnMucmVzb2x1dGlvbixcclxuICAgICAgICAgIG9wdGlvbnMucHJvamVjdGlvbixcclxuICAgICAgICAgIFdNU0dldEZlYXR1cmVJbmZvT3B0aW9uc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc3Qgd21zVmVyc2lvbiA9XHJcbiAgICAgICAgLy8gICB3bXNEYXRhc291cmNlLnBhcmFtcy5WRVJTSU9OIHx8XHJcbiAgICAgICAgLy8gICB3bXNEYXRhc291cmNlLnBhcmFtcy52ZXJzaW9uIHx8XHJcbiAgICAgICAgLy8gICAnMS4zLjAnO1xyXG4gICAgICAgIC8vIGlmICh3bXNWZXJzaW9uICE9PSAnMS4zLjAnKSB7XHJcbiAgICAgICAgLy8gICB1cmwgPSB1cmwucmVwbGFjZSgnJkk9JywgJyZYPScpO1xyXG4gICAgICAgIC8vICAgdXJsID0gdXJsLnJlcGxhY2UoJyZKPScsICcmWT0nKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2FydG9EYXRhU291cmNlOlxyXG4gICAgICAgIGNvbnN0IGNhcnRvRGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgYXMgQ2FydG9EYXRhU291cmNlO1xyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPVxyXG4gICAgICAgICAgJ2h0dHBzOi8vJyArXHJcbiAgICAgICAgICBjYXJ0b0RhdGFzb3VyY2Uub3B0aW9ucy5hY2NvdW50ICtcclxuICAgICAgICAgICcuY2FydG8uY29tL2FwaS92Mi9zcWw/JztcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSAnZm9ybWF0PUdlb0pTT04nO1xyXG4gICAgICAgIGNvbnN0IHNxbCA9XHJcbiAgICAgICAgICAnJnE9JyArIGNhcnRvRGF0YXNvdXJjZS5vcHRpb25zLmNvbmZpZy5sYXllcnNbMF0ub3B0aW9ucy5zcWw7XHJcbiAgICAgICAgY29uc3QgY2xhdXNlID1cclxuICAgICAgICAgICcgV0hFUkUgU1RfSW50ZXJzZWN0cyh0aGVfZ2VvbV93ZWJtZXJjYXRvcixTVF9CVUZGRVIoU1RfU2V0U1JJRChTVF9QT0lOVCgnO1xyXG4gICAgICAgIGNvbnN0IG1ldGVycyA9IGNhcnRvRGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5UHJlY2lzaW9uXHJcbiAgICAgICAgICA/IGNhcnRvRGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5UHJlY2lzaW9uXHJcbiAgICAgICAgICA6ICcxMDAwJztcclxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9XHJcbiAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzWzBdICtcclxuICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzWzFdICtcclxuICAgICAgICAgICcpLDM4NTcpLCcgK1xyXG4gICAgICAgICAgbWV0ZXJzICtcclxuICAgICAgICAgICcpKSc7XHJcblxyXG4gICAgICAgIHVybCA9IGAke2Jhc2VVcmx9JHtmb3JtYXR9JHtzcWx9JHtjbGF1c2V9JHtjb29yZGluYXRlc31gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEltYWdlQXJjR0lTUmVzdERhdGFTb3VyY2U6XHJcbiAgICAgIGNhc2UgVGlsZUFyY0dJU1Jlc3REYXRhU291cmNlOlxyXG4gICAgICAgIGNvbnN0IHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgYXMgVGlsZUFyY0dJU1Jlc3REYXRhU291cmNlO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhWCA9IE1hdGguYWJzKG1hcEV4dGVudFswXSAtIG1hcEV4dGVudFsyXSk7XHJcbiAgICAgICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMobWFwRXh0ZW50WzFdIC0gbWFwRXh0ZW50WzNdKTtcclxuICAgICAgICBjb25zdCBtYXhEZWx0YSA9IGRlbHRhWCA+IGRlbHRhWSA/IGRlbHRhWCA6IGRlbHRhWTtcclxuICAgICAgICBjb25zdCBjbGlja0J1ZmZlciA9IG1heERlbHRhICogMC4wMDU7XHJcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb24gPyB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvbiA6IGNsaWNrQnVmZmVyO1xyXG4gICAgICAgIGNvbnN0IGV4dGVudCA9IG9sZXh0ZW50LmJ1ZmZlcihcclxuICAgICAgICAgIG9sZXh0ZW50LmJvdW5kaW5nRXh0ZW50KFtvcHRpb25zLmNvb3JkaW5hdGVzXSksXHJcbiAgICAgICAgICB0aHJlc2hvbGRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPVxyXG4gICAgICAgICAgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMudXJsICtcclxuICAgICAgICAgICcvJyArXHJcbiAgICAgICAgICB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5sYXllciArXHJcbiAgICAgICAgICAnL3F1ZXJ5Lyc7XHJcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBlbmNvZGVVUklDb21wb25lbnQoXHJcbiAgICAgICAgICAne1wieG1pblwiOicgK1xyXG4gICAgICAgICAgICBleHRlbnRbMF0gK1xyXG4gICAgICAgICAgICAnLFwieW1pblwiOicgK1xyXG4gICAgICAgICAgICBleHRlbnRbMV0gK1xyXG4gICAgICAgICAgICAnLFwieG1heFwiOicgK1xyXG4gICAgICAgICAgICBleHRlbnRbMl0gK1xyXG4gICAgICAgICAgICAnLFwieW1heFwiOicgK1xyXG4gICAgICAgICAgICBleHRlbnRbM10gK1xyXG4gICAgICAgICAgICAnLFwic3BhdGlhbFJlZmVyZW5jZVwiOntcIndraWRcIjoxMDIxMDB9fSdcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcclxuICAgICAgICAgICdmPWpzb24nLFxyXG4gICAgICAgICAgYGdlb21ldHJ5PSR7Z2VvbWV0cnl9YCxcclxuICAgICAgICAgICdnZW9tZXRyeVR5cGU9ZXNyaUdlb21ldHJ5RW52ZWxvcGUnLFxyXG4gICAgICAgICAgJ2luU1I9MTAyMTAwJyxcclxuICAgICAgICAgICdzcGF0aWFsUmVsPWVzcmlTcGF0aWFsUmVsSW50ZXJzZWN0cycsXHJcbiAgICAgICAgICAnb3V0RmllbGRzPSonLFxyXG4gICAgICAgICAgJ3JldHVybkdlb21ldHJ5PXRydWUnLFxyXG4gICAgICAgICAgJ291dFNSPTEwMjEwMCdcclxuICAgICAgICBdO1xyXG4gICAgICAgIHVybCA9IGAke3NlcnZpY2VVcmx9PyR7cGFyYW1zLmpvaW4oJyYnKX1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1pbWVJbmZvRm9ybWF0KHF1ZXJ5Rm9ybWF0OiBzdHJpbmcpIHtcclxuICAgIGxldCBtaW1lID0gJ2FwcGxpY2F0aW9uL3ZuZC5vZ2MuZ21sJztcclxuICAgIGNvbnN0IGtleUVudW0gPSBPYmplY3Qua2V5cyhRdWVyeUZvcm1hdCkuZmluZChcclxuICAgICAga2V5ID0+IFF1ZXJ5Rm9ybWF0W2tleV0gPT09IHF1ZXJ5Rm9ybWF0XHJcbiAgICApO1xyXG4gICAgaWYgKGtleUVudW0pIHtcclxuICAgICAgbWltZSA9IFF1ZXJ5Rm9ybWF0TWltZVR5cGVba2V5RW51bV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1pbWU7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXI6IGFueSkge1xyXG4gICAgbGV0IGFsbG93ZWRGaWVsZHNBbmRBbGlhcztcclxuICAgIGlmIChcclxuICAgICAgbGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zPy5zb3VyY2VGaWVsZHMgJiZcclxuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMubGVuZ3RoID49IDFcclxuICAgICkge1xyXG4gICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSB7fTtcclxuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZm9yRWFjaChzb3VyY2VGaWVsZCA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxpYXMgPSBzb3VyY2VGaWVsZC5hbGlhcyA/IHNvdXJjZUZpZWxkLmFsaWFzIDogc291cmNlRmllbGQubmFtZTtcclxuICAgICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXNbc291cmNlRmllbGQubmFtZV0gPSBhbGlhcztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsb3dlZEZpZWxkc0FuZEFsaWFzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlcnlUaXRsZShmZWF0dXJlOiBGZWF0dXJlLCBsYXllcjogTGF5ZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRpdGxlO1xyXG4gICAgaWYgKGxheWVyLm9wdGlvbnM/LnNvdXJjZT8ub3B0aW9ucykge1xyXG4gICAgICBjb25zdCBkYXRhU291cmNlT3B0aW9ucyA9IGxheWVyLm9wdGlvbnMuc291cmNlXHJcbiAgICAgICAgLm9wdGlvbnMgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnM7XHJcbiAgICAgIGlmIChkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKSB7XHJcbiAgICAgICAgdGl0bGUgPSB0aGlzLmdldExhYmVsTWF0Y2goZmVhdHVyZSwgZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGl0bGU7XHJcbiAgfVxyXG5cclxuICBnZXRMYWJlbE1hdGNoKGZlYXR1cmU6IEZlYXR1cmUsIGxhYmVsTWF0Y2gpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhYmVsID0gbGFiZWxNYXRjaDtcclxuICAgIGNvbnN0IGxhYmVsVG9HZXQgPSBBcnJheS5mcm9tKGxhYmVsTWF0Y2gubWF0Y2hBbGwoL1xcJFxceyhbXlxce1xcfV0rKVxcfS9nKSk7XHJcblxyXG4gICAgbGFiZWxUb0dldC5mb3JFYWNoKHYgPT4ge1xyXG4gICAgICBsYWJlbCA9IGxhYmVsLnJlcGxhY2UodlswXSwgZmVhdHVyZS5wcm9wZXJ0aWVzW3ZbMV1dKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE5vdGhpbmcgZG9uZT8gY2hlY2sgZmVhdHVyZSdzIGF0dHJpYnV0ZVxyXG4gICAgaWYgKGxhYmVsVG9HZXQubGVuZ3RoID09PSAwICYmIGxhYmVsID09PSBsYWJlbE1hdGNoKSB7XHJcbiAgICAgIGxhYmVsID0gZmVhdHVyZS5wcm9wZXJ0aWVzW2xhYmVsTWF0Y2hdIHx8IGxhYmVsTWF0Y2g7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGRhdGFzb3VyY2UgUXVlcnlhYmxlRGF0YVNvdXJjZVxyXG4gICAqIEBwYXJhbSBvcHRpb25zIFF1ZXJ5T3B0aW9uc1xyXG4gICAqIEBtYXBFeHRlbnQgZXh0ZW50IG9mIHRoZSBtYXAgd2hlbiBjbGljayBldmVudFxyXG4gICAqXHJcbiAgICovXHJcblxyXG4gIGdldEN1c3RvbVF1ZXJ5VXJsKFxyXG4gICAgZGF0YXNvdXJjZTogUXVlcnlhYmxlRGF0YVNvdXJjZSxcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICAgIG1hcEV4dGVudD86IE1hcEV4dGVudCk6IHN0cmluZyB7XHJcblxyXG4gICAgICBsZXQgdXJsID0gZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5VXJsLnJlcGxhY2UoL1xce3htaW5cXH0vZywgbWFwRXh0ZW50WzBdLnRvU3RyaW5nKCkpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHt5bWluXFx9L2csIG1hcEV4dGVudFsxXS50b1N0cmluZygpKVxyXG4gICAgICAucmVwbGFjZSgvXFx7eG1heFxcfS9nLCBtYXBFeHRlbnRbMl0udG9TdHJpbmcoKSlcclxuICAgICAgLnJlcGxhY2UoL1xce3ltYXhcXH0vZywgbWFwRXh0ZW50WzNdLnRvU3RyaW5nKCkpXHJcbiAgICAgIC5yZXBsYWNlKC9cXHt4XFx9L2csIG9wdGlvbnMuY29vcmRpbmF0ZXNbMF0udG9TdHJpbmcoKSlcclxuICAgICAgLnJlcGxhY2UoL1xce3lcXH0vZywgb3B0aW9ucy5jb29yZGluYXRlc1sxXS50b1N0cmluZygpKVxyXG4gICAgICAucmVwbGFjZSgvXFx7cmVzb2x1dGlvblxcfS9nLCBvcHRpb25zLnJlc29sdXRpb24udG9TdHJpbmcoKSlcclxuICAgICAgLnJlcGxhY2UoL1xce3NyaWRcXH0vZywgb3B0aW9ucy5wcm9qZWN0aW9uLnJlcGxhY2UoJ0VQU0c6JywnJykpO1xyXG5cclxuICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxufVxyXG4iXX0=