@igo2/geo 16.3.0 → 17.0.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (663) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/assets/images/north-direction.png +0 -0
  7. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +32 -14
  8. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +38 -19
  9. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +19 -11
  10. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +8 -62
  11. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +49 -20
  12. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +23 -11
  13. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +48 -16
  14. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +12 -71
  15. package/esm2022/lib/catalog/catalog-library/index.mjs +4 -0
  16. package/esm2022/lib/catalog/catalog.module.mjs +18 -39
  17. package/esm2022/lib/catalog/index.mjs +2 -1
  18. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  19. package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
  20. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  21. package/esm2022/lib/catalog/shared/catalog.service.mjs +16 -9
  22. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +1 -1
  24. package/esm2022/lib/datasource/shared/capabilities.service.mjs +5 -5
  25. package/esm2022/lib/datasource/shared/datasource.service.mjs +11 -13
  26. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  29. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  31. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  32. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
  33. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  38. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  39. package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  41. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  42. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  43. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  45. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  47. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  49. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +5 -5
  50. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  52. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  53. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  55. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  57. package/esm2022/lib/datasource/shared/index.mjs +1 -1
  58. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
  59. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +6 -6
  60. package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
  61. package/esm2022/lib/datasource/utils/tilegrid.mjs +1 -1
  62. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +28 -13
  63. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +44 -19
  64. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +36 -16
  65. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +5 -2
  66. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  67. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +9 -2
  68. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +72 -41
  69. package/esm2022/lib/directions/directions.component.mjs +83 -21
  70. package/esm2022/lib/directions/directions.module.mjs +14 -73
  71. package/esm2022/lib/directions/directions.provider.mjs +16 -0
  72. package/esm2022/lib/directions/index.mjs +2 -1
  73. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  74. package/esm2022/lib/directions/shared/directions.service.mjs +37 -27
  75. package/esm2022/lib/directions/shared/directions.utils.mjs +22 -22
  76. package/esm2022/lib/directions/shared/store.mjs +2 -2
  77. package/esm2022/lib/download/download-button/download-button.component.mjs +21 -11
  78. package/esm2022/lib/download/download.module.mjs +10 -27
  79. package/esm2022/lib/download/shared/download.service.mjs +7 -7
  80. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +21 -10
  81. package/esm2022/lib/draw/draw/draw-popup.component.mjs +41 -18
  82. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +22 -9
  83. package/esm2022/lib/draw/draw/draw.component.mjs +55 -25
  84. package/esm2022/lib/draw/draw/draw.module.mjs +7 -104
  85. package/esm2022/lib/draw/drawingTool.module.mjs +8 -7
  86. package/esm2022/lib/draw/shared/draw-icon.service.mjs +7 -7
  87. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  88. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  89. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  90. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  91. package/esm2022/lib/environment/index.mjs +1 -1
  92. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +29 -13
  93. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +8 -7
  94. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +14 -27
  95. package/esm2022/lib/feature/feature-details/index.mjs +4 -0
  96. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +9 -9
  97. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +8 -11
  98. package/esm2022/lib/feature/feature.module.mjs +18 -12
  99. package/esm2022/lib/feature/index.mjs +3 -2
  100. package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
  101. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  102. package/esm2022/lib/feature/shared/feature.utils.mjs +2 -2
  103. package/esm2022/lib/feature/shared/index.mjs +1 -1
  104. package/esm2022/lib/feature/shared/store.mjs +2 -2
  105. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
  106. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +2 -2
  107. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +2 -2
  108. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -2
  109. package/esm2022/lib/feature/shared/strategies/loading.mjs +2 -2
  110. package/esm2022/lib/feature/shared/strategies/search.mjs +5 -5
  111. package/esm2022/lib/feature/shared/strategies/selection.mjs +2 -2
  112. package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
  113. package/esm2022/lib/filter/filter.module.mjs +47 -177
  114. package/esm2022/lib/filter/index.mjs +2 -1
  115. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +29 -15
  116. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +46 -20
  117. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +56 -25
  118. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +17 -14
  119. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +59 -34
  120. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +18 -12
  121. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +42 -18
  122. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +8 -7
  123. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +21 -12
  124. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +6 -5
  125. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +5 -5
  126. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  127. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  128. package/esm2022/lib/filter/shared/ogc-filter.mjs +46 -3
  129. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +5 -5
  130. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  131. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -7
  132. package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
  133. package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
  134. package/esm2022/lib/filter/shared/time-filter.service.mjs +5 -5
  135. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +66 -28
  136. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +35 -18
  137. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +35 -16
  138. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +28 -14
  139. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +51 -24
  140. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +31 -13
  141. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +8 -7
  142. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +16 -10
  143. package/esm2022/lib/geo.module.mjs +5 -43
  144. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +7 -7
  145. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +34 -17
  146. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +12 -43
  147. package/esm2022/lib/geometry/geometry-form-field/index.mjs +4 -0
  148. package/esm2022/lib/geometry/geometry.module.mjs +9 -10
  149. package/esm2022/lib/geometry/index.mjs +2 -3
  150. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  151. package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
  152. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  153. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  154. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  155. package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
  156. package/esm2022/lib/import-export/export-button/export-button.component.mjs +20 -10
  157. package/esm2022/lib/import-export/import-export/import-export.component.mjs +58 -22
  158. package/esm2022/lib/import-export/import-export.module.mjs +15 -81
  159. package/esm2022/lib/import-export/index.mjs +2 -1
  160. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +19 -66
  161. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  162. package/esm2022/lib/import-export/shared/export.service.mjs +14 -8
  163. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  164. package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
  165. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  166. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  167. package/esm2022/lib/import-export/shared/import.service.mjs +7 -7
  168. package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
  169. package/esm2022/lib/layer/index.mjs +2 -1
  170. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +35 -16
  171. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +45 -17
  172. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +13 -11
  173. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +8 -7
  174. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +28 -13
  175. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +10 -9
  176. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +49 -18
  177. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  178. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +33 -14
  179. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +5 -5
  180. package/esm2022/lib/layer/layer.module.mjs +27 -93
  181. package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
  182. package/esm2022/lib/layer/shared/layer.service.mjs +13 -13
  183. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  184. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  185. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  186. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  187. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
  188. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  189. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  190. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  191. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  192. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  193. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  194. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  195. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  196. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +21 -11
  197. package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
  198. package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
  199. package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
  200. package/esm2022/lib/layer/utils/tile-watcher.mjs +1 -1
  201. package/esm2022/lib/layer/utils/vector-watcher.mjs +1 -1
  202. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  203. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +27 -14
  204. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -8
  205. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +28 -17
  206. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +15 -11
  207. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +1 -1
  208. package/esm2022/lib/map/home-extent-button/index.mjs +1 -1
  209. package/esm2022/lib/map/index.mjs +1 -1
  210. package/esm2022/lib/map/info-section/info-section.component.mjs +7 -7
  211. package/esm2022/lib/map/map-browser/map-browser.component.mjs +8 -8
  212. package/esm2022/lib/map/map-center/map-center.component.mjs +6 -6
  213. package/esm2022/lib/map/map.module.mjs +51 -81
  214. package/esm2022/lib/map/menu-button/menu-button.component.mjs +23 -13
  215. package/esm2022/lib/map/offline-button/offline-button.component.mjs +21 -11
  216. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +23 -11
  217. package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
  218. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  219. package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
  220. package/esm2022/lib/map/shared/controllers/index.mjs +1 -1
  221. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  222. package/esm2022/lib/map/shared/hover-feature.directive.mjs +11 -10
  223. package/esm2022/lib/map/shared/index.mjs +1 -1
  224. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +3 -3
  225. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +10 -9
  226. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  227. package/esm2022/lib/map/shared/map.interface.mjs +1 -1
  228. package/esm2022/lib/map/shared/map.mjs +1 -1
  229. package/esm2022/lib/map/shared/map.service.mjs +5 -5
  230. package/esm2022/lib/map/shared/map.utils.mjs +1 -1
  231. package/esm2022/lib/map/shared/mapOffline.directive.mjs +11 -8
  232. package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
  233. package/esm2022/lib/map/shared/projection.service.mjs +7 -7
  234. package/esm2022/lib/map/shared/projection.utils.mjs +60 -1
  235. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +6 -6
  236. package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
  237. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +26 -16
  238. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +13 -9
  239. package/esm2022/lib/measure/index.mjs +2 -3
  240. package/esm2022/lib/measure/measure.module.mjs +8 -5
  241. package/esm2022/lib/measure/measurer/index.mjs +6 -0
  242. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +6 -5
  243. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +18 -11
  244. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +27 -13
  245. package/esm2022/lib/measure/measurer/measurer.component.mjs +40 -20
  246. package/esm2022/lib/measure/measurer/measurer.module.mjs +7 -69
  247. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  248. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  249. package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
  250. package/esm2022/lib/metadata/index.mjs +2 -1
  251. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +35 -18
  252. package/esm2022/lib/metadata/metadata.module.mjs +14 -31
  253. package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
  254. package/esm2022/lib/metadata/shared/metadata.service.mjs +5 -5
  255. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +7 -7
  256. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  257. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  258. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +8 -10
  259. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  260. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  261. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +5 -5
  262. package/esm2022/lib/offline/shared/geo-network.service.mjs +7 -7
  263. package/esm2022/lib/overlay/overlay.module.mjs +10 -8
  264. package/esm2022/lib/overlay/shared/overlay.directive.mjs +8 -7
  265. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  266. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  267. package/esm2022/lib/overlay/shared/overlay.service.mjs +5 -5
  268. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  269. package/esm2022/lib/print/print/print.component.mjs +8 -8
  270. package/esm2022/lib/print/print-form/print-form.component.mjs +49 -17
  271. package/esm2022/lib/print/print.module.mjs +10 -54
  272. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  273. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  274. package/esm2022/lib/print/shared/print.service.mjs +180 -127
  275. package/esm2022/lib/print/shared/print.type.mjs +1 -1
  276. package/esm2022/lib/query/query.module.mjs +7 -8
  277. package/esm2022/lib/query/shared/index.mjs +2 -1
  278. package/esm2022/lib/query/shared/query-search-source.mjs +6 -6
  279. package/esm2022/lib/query/shared/query-search-source.providers.mjs +2 -2
  280. package/esm2022/lib/query/shared/query.directive.mjs +8 -7
  281. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  282. package/esm2022/lib/query/shared/query.service.mjs +8 -10
  283. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  284. package/esm2022/lib/search/index.mjs +3 -5
  285. package/esm2022/lib/search/search-bar/search-bar.component.mjs +42 -19
  286. package/esm2022/lib/search/search-bar/search-bar.module.mjs +8 -61
  287. package/esm2022/lib/search/search-results/index.mjs +5 -0
  288. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +44 -19
  289. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +34 -18
  290. package/esm2022/lib/search/search-results/search-results-item.component.mjs +23 -12
  291. package/esm2022/lib/search/search-results/search-results.component.mjs +28 -14
  292. package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
  293. package/esm2022/lib/search/search-results/search-results.module.mjs +8 -91
  294. package/esm2022/lib/search/search-selector/search-selector.component.mjs +27 -12
  295. package/esm2022/lib/search/search-selector/search-selector.module.mjs +8 -44
  296. package/esm2022/lib/search/search-settings/search-settings.component.mjs +40 -15
  297. package/esm2022/lib/search/search-settings/search-settings.module.mjs +7 -47
  298. package/esm2022/lib/search/search.module.mjs +24 -13
  299. package/esm2022/lib/search/shared/index.mjs +2 -1
  300. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +11 -10
  301. package/esm2022/lib/search/shared/search-source-service.providers.mjs +1 -1
  302. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  303. package/esm2022/lib/search/shared/search.enums.mjs +1 -1
  304. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  305. package/esm2022/lib/search/shared/search.provider.mjs +20 -0
  306. package/esm2022/lib/search/shared/search.service.mjs +32 -13
  307. package/esm2022/lib/search/shared/search.utils.mjs +2 -2
  308. package/esm2022/lib/search/shared/sources/cadastre.mjs +13 -10
  309. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +11 -2
  310. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  311. package/esm2022/lib/search/shared/sources/coordinates.mjs +16 -14
  312. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +14 -2
  313. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
  314. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  315. package/esm2022/lib/search/shared/sources/icherche.mjs +28 -21
  316. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +23 -2
  317. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  318. package/esm2022/lib/search/shared/sources/ilayer.mjs +14 -12
  319. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +14 -2
  320. package/esm2022/lib/search/shared/sources/index.mjs +1 -1
  321. package/esm2022/lib/search/shared/sources/nominatim.mjs +10 -10
  322. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +10 -2
  323. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +13 -2
  324. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  325. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  326. package/esm2022/lib/search/shared/sources/storedqueries.mjs +17 -15
  327. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +17 -2
  328. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  329. package/esm2022/lib/search/shared/sources/workspace.mjs +12 -11
  330. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +11 -2
  331. package/esm2022/lib/style/index.mjs +1 -1
  332. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
  333. package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -2
  334. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  335. package/esm2022/lib/style/shared/index.mjs +1 -1
  336. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
  337. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
  338. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
  339. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  340. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  341. package/esm2022/lib/style/style-list/style-list.module.mjs +5 -5
  342. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  343. package/esm2022/lib/style/style-list/style-list.service.mjs +5 -5
  344. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +40 -17
  345. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +28 -14
  346. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +13 -9
  347. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  348. package/esm2022/lib/style/style-service/draw-style.service.mjs +5 -5
  349. package/esm2022/lib/style/style-service/style.service.mjs +4 -4
  350. package/esm2022/lib/style/style.module.mjs +12 -57
  351. package/esm2022/lib/toast/toast.component.mjs +21 -11
  352. package/esm2022/lib/toast/toast.module.mjs +10 -30
  353. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  354. package/esm2022/lib/utils/id-generator.mjs +1 -1
  355. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  356. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  357. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +7 -7
  358. package/esm2022/lib/wkt/shared/wkt.service.mjs +19 -19
  359. package/esm2022/lib/wkt/wkt.module.mjs +8 -5
  360. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +11 -10
  361. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +8 -24
  362. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  363. package/esm2022/lib/workspace/shared/edition-workspace.mjs +2 -2
  364. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +19 -14
  365. package/esm2022/lib/workspace/shared/feature-workspace.mjs +2 -2
  366. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +14 -11
  367. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +2 -2
  368. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +14 -11
  369. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +12 -9
  370. package/esm2022/lib/workspace/shared/workspace.utils.mjs +4 -4
  371. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +7 -7
  372. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +8 -13
  373. package/esm2022/lib/workspace/widgets/widgets.mjs +2 -2
  374. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +9 -8
  375. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +8 -10
  376. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +7 -6
  377. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +8 -10
  378. package/esm2022/lib/workspace/workspace.module.mjs +11 -36
  379. package/esm2022/public_api.mjs +11 -12
  380. package/fesm2022/igo2-geo.mjs +23027 -22793
  381. package/fesm2022/igo2-geo.mjs.map +1 -1
  382. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +3 -3
  383. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +2 -2
  384. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +2 -2
  385. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +2 -14
  386. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -3
  387. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  388. package/lib/catalog/catalog-library/catalog-library.component.d.ts +6 -3
  389. package/lib/catalog/catalog-library/catalog-library.module.d.ts +6 -18
  390. package/lib/catalog/catalog-library/index.d.ts +3 -0
  391. package/lib/catalog/catalog.module.d.ts +9 -9
  392. package/lib/catalog/index.d.ts +1 -0
  393. package/lib/catalog/shared/catalog.interface.d.ts +1 -1
  394. package/lib/catalog/shared/catalog.service.d.ts +3 -1
  395. package/lib/datasource/shared/datasource.service.d.ts +4 -5
  396. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -3
  397. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -3
  398. package/lib/datasource/shared/datasources/datasource.d.ts +1 -2
  399. package/lib/datasource/shared/datasources/feature-datasource.d.ts +2 -3
  400. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -3
  401. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -2
  402. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +2 -3
  403. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +1 -2
  404. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -2
  405. package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
  406. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +4 -2
  407. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +2 -2
  408. package/lib/directions/directions-results/directions-results.component.d.ts +2 -2
  409. package/lib/directions/directions-sources/directions-source.d.ts +7 -3
  410. package/lib/directions/directions-sources/directions-source.interface.d.ts +19 -6
  411. package/lib/directions/directions-sources/directions-source.provider.d.ts +3 -1
  412. package/lib/directions/directions-sources/osrm-directions-source.d.ts +20 -11
  413. package/lib/directions/directions.component.d.ts +16 -4
  414. package/lib/directions/directions.module.d.ts +4 -16
  415. package/lib/directions/directions.provider.d.ts +3 -0
  416. package/lib/directions/index.d.ts +1 -0
  417. package/lib/directions/shared/directions.interface.d.ts +2 -9
  418. package/lib/directions/shared/directions.service.d.ts +7 -3
  419. package/lib/directions/shared/directions.utils.d.ts +2 -2
  420. package/lib/directions/shared/store.d.ts +1 -1
  421. package/lib/download/download-button/download-button.component.d.ts +1 -1
  422. package/lib/download/download.module.d.ts +4 -6
  423. package/lib/download/shared/download.service.d.ts +1 -1
  424. package/lib/draw/draw/draw-layer-popup.component.d.ts +1 -1
  425. package/lib/draw/draw/draw-popup.component.d.ts +5 -5
  426. package/lib/draw/draw/draw-shorcuts.component.d.ts +3 -1
  427. package/lib/draw/draw/draw.component.d.ts +3 -3
  428. package/lib/draw/draw/draw.module.d.ts +2 -25
  429. package/lib/draw/drawingTool.module.d.ts +3 -0
  430. package/lib/draw/shared/draw-icon.service.d.ts +1 -1
  431. package/lib/environment/environment.interface.d.ts +2 -1
  432. package/lib/feature/feature-details/feature-details.component.d.ts +8 -5
  433. package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
  434. package/lib/feature/feature-details/feature-details.module.d.ts +5 -6
  435. package/lib/feature/feature-details/index.d.ts +3 -0
  436. package/lib/feature/feature-form/feature-form.component.d.ts +2 -3
  437. package/lib/feature/feature-form/feature-form.module.d.ts +2 -4
  438. package/lib/feature/feature.module.d.ts +9 -4
  439. package/lib/feature/index.d.ts +2 -1
  440. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  441. package/lib/feature/shared/feature.utils.d.ts +1 -1
  442. package/lib/feature/shared/store.d.ts +1 -1
  443. package/lib/feature/shared/strategies/geo-properties.d.ts +1 -1
  444. package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
  445. package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
  446. package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
  447. package/lib/feature/shared/strategies/loading.d.ts +1 -1
  448. package/lib/feature/shared/strategies/search.d.ts +1 -1
  449. package/lib/feature/shared/strategies/selection.d.ts +1 -1
  450. package/lib/filter/filter.module.d.ts +23 -28
  451. package/lib/filter/index.d.ts +1 -0
  452. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +3 -3
  453. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +3 -3
  454. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +5 -5
  455. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  456. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
  457. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +3 -3
  458. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +3 -3
  459. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  460. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +3 -3
  461. package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
  462. package/lib/filter/shared/ogc-filter.d.ts +7 -0
  463. package/lib/filter/shared/ogc-filter.interface.d.ts +2 -3
  464. package/lib/filter/shared/spatial-filter.service.d.ts +2 -1
  465. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +7 -6
  466. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
  467. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
  468. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  469. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +3 -3
  470. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  471. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  472. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
  473. package/lib/geo.module.d.ts +14 -24
  474. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +2 -3
  475. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
  476. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +5 -10
  477. package/lib/geometry/geometry-form-field/index.d.ts +3 -0
  478. package/lib/geometry/geometry.module.d.ts +5 -3
  479. package/lib/geometry/index.d.ts +1 -2
  480. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  481. package/lib/geometry/shared/controls/slice.d.ts +4 -4
  482. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  483. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  484. package/lib/import-export/import-export/import-export.component.d.ts +7 -4
  485. package/lib/import-export/import-export.module.d.ts +8 -15
  486. package/lib/import-export/index.d.ts +1 -0
  487. package/lib/import-export/shared/drop-geo-file.directive.d.ts +5 -5
  488. package/lib/import-export/shared/export.service.d.ts +1 -1
  489. package/lib/import-export/shared/export.utils.d.ts +2 -2
  490. package/lib/import-export/shared/import.service.d.ts +1 -1
  491. package/lib/import-export/shared/import.utils.d.ts +2 -2
  492. package/lib/layer/index.d.ts +1 -0
  493. package/lib/layer/layer-item/layer-item.component.d.ts +2 -2
  494. package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -2
  495. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +2 -2
  496. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  497. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  498. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +2 -2
  499. package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
  500. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  501. package/lib/layer/layer.module.d.ts +14 -18
  502. package/lib/layer/shared/layer.service.d.ts +1 -1
  503. package/lib/layer/shared/layers/image-layer.d.ts +1 -1
  504. package/lib/layer/shared/layers/layer.d.ts +1 -1
  505. package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
  506. package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
  507. package/lib/layer/shared/layers/vector-layer.d.ts +4 -5
  508. package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -2
  509. package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
  510. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  511. package/lib/layer/utils/image-watcher.d.ts +1 -1
  512. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +2 -2
  513. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  514. package/lib/map/geolocate-button/geolocate-button.component.d.ts +2 -2
  515. package/lib/map/home-extent-button/home-extent-button.component.d.ts +2 -2
  516. package/lib/map/info-section/info-section.component.d.ts +1 -1
  517. package/lib/map/map-browser/map-browser.component.d.ts +2 -2
  518. package/lib/map/map-center/map-center.component.d.ts +1 -1
  519. package/lib/map/map.module.d.ts +35 -21
  520. package/lib/map/menu-button/menu-button.component.d.ts +2 -2
  521. package/lib/map/offline-button/offline-button.component.d.ts +2 -2
  522. package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
  523. package/lib/map/shared/controllers/geolocation.d.ts +2 -1
  524. package/lib/map/shared/hover-feature.directive.d.ts +2 -2
  525. package/lib/map/shared/map-pointer-position.directive.d.ts +2 -2
  526. package/lib/map/shared/map.d.ts +2 -1
  527. package/lib/map/shared/mapOffline.directive.d.ts +3 -2
  528. package/lib/map/shared/projection.service.d.ts +1 -1
  529. package/lib/map/shared/projection.utils.d.ts +11 -0
  530. package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
  531. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +2 -2
  532. package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
  533. package/lib/measure/index.d.ts +1 -2
  534. package/lib/measure/measure.module.d.ts +3 -0
  535. package/lib/measure/measurer/index.d.ts +5 -0
  536. package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
  537. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  538. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  539. package/lib/measure/measurer/measurer.component.d.ts +4 -4
  540. package/lib/measure/measurer/measurer.module.d.ts +3 -18
  541. package/lib/measure/shared/measure.utils.d.ts +1 -1
  542. package/lib/metadata/index.d.ts +1 -0
  543. package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
  544. package/lib/metadata/metadata.module.d.ts +6 -7
  545. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
  546. package/lib/offline/geoDB/geoDB.service.d.ts +2 -3
  547. package/lib/offline/shared/geo-network.service.d.ts +1 -1
  548. package/lib/overlay/overlay.module.d.ts +4 -1
  549. package/lib/overlay/shared/overlay.directive.d.ts +1 -1
  550. package/lib/print/print/print.component.d.ts +1 -1
  551. package/lib/print/print-form/print-form.component.d.ts +5 -2
  552. package/lib/print/print.module.d.ts +4 -12
  553. package/lib/print/shared/print.interface.d.ts +1 -0
  554. package/lib/print/shared/print.service.d.ts +31 -18
  555. package/lib/query/query.module.d.ts +4 -4
  556. package/lib/query/shared/index.d.ts +1 -0
  557. package/lib/query/shared/query-search-source.providers.d.ts +1 -1
  558. package/lib/query/shared/query.directive.d.ts +1 -1
  559. package/lib/query/shared/query.interfaces.d.ts +1 -2
  560. package/lib/query/shared/query.service.d.ts +2 -3
  561. package/lib/search/index.d.ts +2 -4
  562. package/lib/search/search-bar/search-bar.component.d.ts +4 -3
  563. package/lib/search/search-bar/search-bar.module.d.ts +2 -16
  564. package/lib/search/search-results/index.d.ts +4 -0
  565. package/lib/search/search-results/save-feature-dialog.component.d.ts +2 -2
  566. package/lib/search/search-results/search-results-add-button.component.d.ts +4 -4
  567. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  568. package/lib/search/search-results/search-results.component.d.ts +3 -3
  569. package/lib/search/search-results/search-results.directive.d.ts +3 -0
  570. package/lib/search/search-results/search-results.module.d.ts +3 -21
  571. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  572. package/lib/search/search-selector/search-selector.module.d.ts +2 -11
  573. package/lib/search/search-settings/search-settings.component.d.ts +3 -2
  574. package/lib/search/search-settings/search-settings.module.d.ts +2 -12
  575. package/lib/search/search.module.d.ts +14 -7
  576. package/lib/search/shared/index.d.ts +1 -0
  577. package/lib/search/shared/search-pointer-summary.directive.d.ts +2 -2
  578. package/lib/search/shared/search-source.service.d.ts +1 -1
  579. package/lib/search/shared/search.interfaces.d.ts +12 -10
  580. package/lib/search/shared/search.provider.d.ts +8 -0
  581. package/lib/search/shared/search.service.d.ts +8 -3
  582. package/lib/search/shared/sources/cadastre.d.ts +2 -1
  583. package/lib/search/shared/sources/cadastre.providers.d.ts +6 -2
  584. package/lib/search/shared/sources/coordinates.d.ts +2 -1
  585. package/lib/search/shared/sources/coordinates.providers.d.ts +6 -2
  586. package/lib/search/shared/sources/icherche-icons.d.ts +7 -0
  587. package/lib/search/shared/sources/icherche.d.ts +2 -1
  588. package/lib/search/shared/sources/icherche.providers.d.ts +10 -14
  589. package/lib/search/shared/sources/ilayer.d.ts +2 -1
  590. package/lib/search/shared/sources/ilayer.providers.d.ts +6 -2
  591. package/lib/search/shared/sources/nominatim.d.ts +1 -1
  592. package/lib/search/shared/sources/nominatim.providers.d.ts +5 -2
  593. package/lib/search/shared/sources/source.d.ts +2 -2
  594. package/lib/search/shared/sources/source.interfaces.d.ts +16 -0
  595. package/lib/search/shared/sources/storedqueries.d.ts +2 -1
  596. package/lib/search/shared/sources/storedqueries.providers.d.ts +8 -3
  597. package/lib/search/shared/sources/workspace.d.ts +2 -1
  598. package/lib/search/shared/sources/workspace.providers.d.ts +6 -2
  599. package/lib/style/shared/vector/conversion.utils.d.ts +2 -3
  600. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +1 -1
  601. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +1 -1
  602. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +1 -1
  603. package/lib/style/style.module.d.ts +5 -16
  604. package/lib/toast/toast.component.d.ts +2 -2
  605. package/lib/toast/toast.module.d.ts +4 -6
  606. package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +1 -1
  607. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  608. package/lib/wkt/wkt.module.d.ts +3 -0
  609. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +2 -2
  610. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +2 -6
  611. package/lib/workspace/shared/edition-workspace.d.ts +2 -2
  612. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
  613. package/lib/workspace/shared/feature-workspace.d.ts +1 -1
  614. package/lib/workspace/shared/feature-workspace.service.d.ts +2 -1
  615. package/lib/workspace/shared/wfs-workspace.d.ts +1 -1
  616. package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -1
  617. package/lib/workspace/shared/wms-workspace.service.d.ts +2 -1
  618. package/lib/workspace/shared/workspace.utils.d.ts +2 -1
  619. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +3 -2
  620. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +2 -6
  621. package/lib/workspace/widgets/widgets.d.ts +1 -1
  622. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +2 -2
  623. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +2 -3
  624. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +2 -2
  625. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +2 -3
  626. package/lib/workspace/workspace.module.d.ts +5 -9
  627. package/locale/en.geo.json +824 -818
  628. package/locale/fr.geo.json +825 -819
  629. package/package.json +14 -12
  630. package/public_api.d.ts +10 -11
  631. package/src/_index.scss +2 -2
  632. package/src/geo-theme.scss +23 -23
  633. package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -22
  634. package/src/lib/catalog/catalog.theming.scss +5 -5
  635. package/src/lib/directions/directions-results/directions-results.theming.scss +10 -10
  636. package/src/lib/directions/directions.theming.scss +6 -6
  637. package/src/lib/draw/draw.theming.scss +32 -32
  638. package/src/lib/feature/feature-details/feature-details.theming.scss +16 -16
  639. package/src/lib/feature/feature.theming.scss +4 -4
  640. package/src/lib/filter/filter.theming.scss +13 -13
  641. package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
  642. package/src/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
  643. package/src/lib/layer/layer-item/layer-item.theme.scss +33 -33
  644. package/src/lib/layer/layer-legend/layer-legend.theming.scss +10 -10
  645. package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +34 -34
  646. package/src/lib/layer/layer.theming.scss +10 -10
  647. package/src/lib/map/map-browser/map-browser.theming.scss +46 -46
  648. package/src/lib/map/map.theming.scss +9 -9
  649. package/src/lib/map/menu-button/menu-button.theming.scss +20 -20
  650. package/src/lib/map/zoom-button/zoom-button.theming.scss +32 -32
  651. package/src/lib/measure/measure.theming.scss +5 -5
  652. package/src/lib/measure/measurer/measurer.theming.scss +26 -26
  653. package/src/lib/search/search-bar/search-bar.theming.scss +33 -33
  654. package/src/lib/search/search-results/search-results-item.theme.scss +20 -20
  655. package/src/lib/search/search.theming.scss +7 -7
  656. package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  657. package/src/lib/workspace/workspace.theming.scss +6 -6
  658. package/src/style/style.scss +1 -1
  659. package/style/style.css +2 -1
  660. package/esm2022/lib/datasource/datasource.module.mjs +0 -22
  661. package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +0 -40
  662. package/lib/datasource/datasource.module.d.ts +0 -8
  663. package/lib/search/search-bar/search-url-param.directive.d.ts +0 -13
@@ -1,6 +1,8 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import { Injectable } from '@angular/core';
3
- import { ConfigService, LanguageService, MessageService } from '@igo2/core';
3
+ import { ConfigService } from '@igo2/core/config';
4
+ import { LanguageService } from '@igo2/core/language';
5
+ import { MessageService } from '@igo2/core/message';
4
6
  import { ObjectUtils, uuid } from '@igo2/utils';
5
7
  import { EMPTY, of, zip } from 'rxjs';
6
8
  import { catchError, map } from 'rxjs/operators';
@@ -13,8 +15,10 @@ import { CatalogItemType, TypeCatalog } from './catalog.enum';
13
15
  import { ArcGISRestCatalog, BaselayersCatalog, CompositeCatalog, TileOrImageArcGISRestCatalog, WMSCatalog, WMTSCatalog } from './catalogs';
14
16
  import * as i0 from "@angular/core";
15
17
  import * as i1 from "@angular/common/http";
16
- import * as i2 from "@igo2/core";
17
- import * as i3 from "../../datasource/shared/capabilities.service";
18
+ import * as i2 from "@igo2/core/config";
19
+ import * as i3 from "@igo2/core/language";
20
+ import * as i4 from "@igo2/core/message";
21
+ import * as i5 from "../../datasource/shared/capabilities.service";
18
22
  export class CatalogService {
19
23
  http;
20
24
  config;
@@ -112,6 +116,9 @@ export class CatalogService {
112
116
  capabilitiesCapabilityLayer.Layer = finalLayers.filter((f) => f.Layer.length !== 0);
113
117
  this.includeRecursiveItems(catalog, capabilitiesCapabilityLayer, items);
114
118
  return items;
119
+ }), catchError(() => {
120
+ this.messageService.error('igo.geo.catalog.unavailable', 'igo.geo.catalog.unavailableTitle', undefined, { value: catalog.title });
121
+ return EMPTY;
115
122
  }));
116
123
  }
117
124
  flattenWmsCapabilities(parent, level = 0, finalLayers, separator = ' / ') {
@@ -375,7 +382,7 @@ export class CatalogService {
375
382
  title: itemListIn.Title,
376
383
  address: catalog.id,
377
384
  externalProvider: catalog.externalProvider || false,
378
- sortDirection: catalog.sortDirection,
385
+ sortDirection: catalog.sortDirection, // propagate sortDirection
379
386
  items: itemListIn.Layer.reduce((items, layer) => {
380
387
  if (layer.Layer !== undefined) {
381
388
  // recursive, check next level
@@ -664,15 +671,15 @@ export class CatalogService {
664
671
  });
665
672
  return layersQueryFormat;
666
673
  }
667
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CatalogService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }, { token: i2.LanguageService }, { token: i2.MessageService }, { token: i3.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Injectable });
668
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CatalogService, providedIn: 'root' });
674
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CatalogService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }, { token: i3.LanguageService }, { token: i4.MessageService }, { token: i5.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Injectable });
675
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CatalogService, providedIn: 'root' });
669
676
  }
670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CatalogService, decorators: [{
677
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: CatalogService, decorators: [{
671
678
  type: Injectable,
672
679
  args: [{
673
680
  providedIn: 'root'
674
681
  }]
675
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigService }, { type: i2.LanguageService }, { type: i2.MessageService }, { type: i3.CapabilitiesService }]; } });
682
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }, { type: i3.LanguageService }, { type: i4.MessageService }, { type: i5.CapabilitiesService }] });
676
683
  class CatalogFactory {
677
684
  static createInstanceCatalog(options, catalogService) {
678
685
  let catalog;
@@ -700,4 +707,4 @@ class CatalogFactory {
700
707
  return catalog;
701
708
  }
702
709
  }
703
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUVMLGdDQUFnQyxFQUNqQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBUW5GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUTlELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQiw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLFdBQVcsRUFDWixNQUFNLFlBQVksQ0FBQzs7Ozs7QUFLcEIsTUFBTSxPQUFPLGNBQWM7SUFFZjtJQUNBO0lBQ0E7SUFD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QUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlscywgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyLFxyXG4gIEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzXHJcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvY2FwYWJpbGl0aWVzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zUGFyYW1zLFxyXG4gIFdNVFNEYXRhU291cmNlT3B0aW9uc1xyXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzJztcclxuaW1wb3J0IHsgSW1hZ2VMYXllck9wdGlvbnMsIExheWVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZCc7XHJcbmltcG9ydCB7IGdldFJlc29sdXRpb25Gcm9tU2NhbGUgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC51dGlscyc7XHJcbmltcG9ydCB7IFF1ZXJ5Rm9ybWF0IH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmVudW1zJztcclxuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL2lkLWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IENhdGFsb2cgfSBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xyXG5pbXBvcnQgeyBDYXRhbG9nSXRlbVR5cGUsIFR5cGVDYXRhbG9nIH0gZnJvbSAnLi9jYXRhbG9nLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIENhdGFsb2dJdGVtLFxyXG4gIENhdGFsb2dJdGVtR3JvdXAsXHJcbiAgQ2F0YWxvZ0l0ZW1MYXllcixcclxuICBDYXRhbG9nU2VydmljZU9wdGlvbnMsXHJcbiAgRm9yY2VkUHJvcGVydHlcclxufSBmcm9tICcuL2NhdGFsb2cuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBcmNHSVNSZXN0Q2F0YWxvZyxcclxuICBCYXNlbGF5ZXJzQ2F0YWxvZyxcclxuICBDb21wb3NpdGVDYXRhbG9nLFxyXG4gIFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2csXHJcbiAgV01TQ2F0YWxvZyxcclxuICBXTVRTQ2F0YWxvZ1xyXG59IGZyb20gJy4vY2F0YWxvZ3MnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNhcGFiaWxpdGllc1NlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGxvYWRDYXRhbG9ncygpOiBPYnNlcnZhYmxlPENhdGFsb2dbXT4ge1xyXG4gICAgY29uc3QgY29udGV4dENvbmZpZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnY29udGV4dCcpIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGNhdGFsb2dDb25maWc6IENhdGFsb2dTZXJ2aWNlT3B0aW9ucyA9XHJcbiAgICAgIHRoaXMuY29uZmlnLmdldENvbmZpZygnY2F0YWxvZycpIHx8IHt9O1xyXG4gICAgY29uc3QgYXBpVXJsID0gY2F0YWxvZ0NvbmZpZy51cmwgfHwgY29udGV4dENvbmZpZy51cmw7XHJcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21Db25maWcgPSBjYXRhbG9nQ29uZmlnLnNvdXJjZXMgfHwgW107XHJcblxyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZXMkID0gW107XHJcblxyXG4gICAgaWYgKGFwaVVybCkge1xyXG4gICAgICBpZiAoY2F0YWxvZ0NvbmZpZy5iYXNlbGF5ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uY2F0YWxvZy5iYXNlTGF5ZXJzJyk7XHJcbiAgICAgICAgY29uc3QgYmFzZUxheWVyc0NhdGFsb2cgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiAnY2F0YWxvZy5iYXNlbGF5ZXJzJyxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHVybDogYCR7YXBpVXJsfS9iYXNlbGF5ZXJzYCxcclxuICAgICAgICAgICAgdHlwZTogJ2Jhc2VsYXllcnMnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuICAgICAgICBvYnNlcnZhYmxlcyQucHVzaChvZihiYXNlTGF5ZXJzQ2F0YWxvZykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDYXRhbG9ncyBmcm9tIEFQSVxyXG4gICAgICBjb25zdCBjYXRhbG9nc0Zyb21BcGkkID0gdGhpcy5odHRwXHJcbiAgICAgICAgLmdldDxDYXRhbG9nW10+KGAke2FwaVVybH0vY2F0YWxvZ3NgKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKChjYXRhbG9ncykgPT5cclxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oYywgYy5vcHRpb25zKSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChfcmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBFTVBUWSlcclxuICAgICAgICApO1xyXG4gICAgICBvYnNlcnZhYmxlcyQucHVzaChjYXRhbG9nc0Zyb21BcGkkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYXRhbG9ncyBmcm9tIGNvbmZpZ1xyXG4gICAgaWYgKGNhdGFsb2dzRnJvbUNvbmZpZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9ic2VydmFibGVzJC5wdXNoKFxyXG4gICAgICAgIG9mKGNhdGFsb2dzRnJvbUNvbmZpZykucGlwZShcclxuICAgICAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXSkgPT5cclxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFjLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjLmlkID0gdXVpZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gYztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHppcCguLi5vYnNlcnZhYmxlcyQpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXVtdKSA9PiBbXS5jb25jYXQuYXBwbHkoW10sIGNhdGFsb2dzKSlcclxuICAgICkgYXMgT2JzZXJ2YWJsZTxDYXRhbG9nW10+O1xyXG4gIH1cclxuXHJcbiAgbG9hZENhdGFsb2dJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICBsZXQgbmV3Q2F0YWxvZzogQ2F0YWxvZztcclxuICAgIG5ld0NhdGFsb2cgPSBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY2F0YWxvZywgdGhpcyk7XHJcbiAgICByZXR1cm4gbmV3Q2F0YWxvZy5jb2xsZWN0Q2F0YWxvZ0l0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0Jhc2VMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtR3JvdXBbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0Jhc2VMYXllcnNPcHRpb25zKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgobGF5ZXJzT3B0aW9uczogTGF5ZXJPcHRpb25zW10pID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGxheWVyc09wdGlvbnMubWFwKChsYXllck9wdGlvbnM6IExheWVyT3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucyksXHJcbiAgICAgICAgICAgIHRpdGxlOiBsYXllck9wdGlvbnMudGl0bGUsXHJcbiAgICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBsYXllck9wdGlvbnNcclxuICAgICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW1MYXllcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZDogJ2NhdGFsb2cuZ3JvdXAuYmFzZWxheWVycycsXHJcbiAgICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgICB0aXRsZTogY2F0YWxvZy50aXRsZSxcclxuICAgICAgICAgICAgaXRlbXNcclxuICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2F0YWxvZ0Jhc2VMYXllcnNPcHRpb25zKFxyXG4gICAgY2F0YWxvZzogQ2F0YWxvZ1xyXG4gICk6IE9ic2VydmFibGU8TGF5ZXJPcHRpb25zW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PExheWVyT3B0aW9uc1tdPihjYXRhbG9nLnVybCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxyXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbXM6IENhdGFsb2dJdGVtW10gPSBbXTtcclxuICAgICAgICBpZiAoIWNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZSAmJlxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3QgJiZcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0Lmxlbmd0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaW5hbExheWVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5DYXBhYmlsaXR5LkxheWVyLFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIGZpbmFsTGF5ZXJzLFxyXG4gICAgICAgICAgY2F0YWxvZy5ncm91cFNlcGFyYXRvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLkNhcGFiaWxpdHkuTGF5ZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNhcGFiaWxpdGllc0NhcGFiaWxpdHlMYXllci5MYXllciA9IGZpbmFsTGF5ZXJzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkxheWVyLmxlbmd0aCAhPT0gMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlUmVjdXJzaXZlSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLCBpdGVtcyk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZsYXR0ZW5XbXNDYXBhYmlsaXRpZXMocGFyZW50LCBsZXZlbCA9IDAsIGZpbmFsTGF5ZXJzLCBzZXBhcmF0b3IgPSAnIC8gJykge1xyXG4gICAgaWYgKCFmaW5hbExheWVycy5pbmNsdWRlcyhwYXJlbnQuVGl0bGUpKSB7XHJcbiAgICAgIGNvbnN0IG1vZGlmaWVkUGFyZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50KTtcclxuICAgICAgbW9kaWZpZWRQYXJlbnQuTGF5ZXIgPSBbXTtcclxuICAgICAgZmluYWxMYXllcnMucHVzaChtb2RpZmllZFBhcmVudCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHBhcmVudC5MYXllcikge1xyXG4gICAgICBjb25zdCBtb2RpZmllZExheWVyID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5ZXIpO1xyXG4gICAgICBpZiAobGV2ZWwgPiAwKSB7XHJcbiAgICAgICAgbW9kaWZpZWRMYXllci5UaXRsZSA9IHBhcmVudC5UaXRsZSArIHNlcGFyYXRvciArIGxheWVyLlRpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsYXllci5MYXllcikge1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcclxuICAgICAgICAgIG1vZGlmaWVkTGF5ZXIsXHJcbiAgICAgICAgICBsZXZlbCArIDEsXHJcbiAgICAgICAgICBmaW5hbExheWVycyxcclxuICAgICAgICAgIHNlcGFyYXRvclxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmluYWxMYXllcnMuZmluZCgoZmYpID0+IGZmLlRpdGxlID09PSBwYXJlbnQuVGl0bGUpLkxheWVyLnB1c2gobGF5ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ1dNVFNMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZykucGlwZShcclxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4gdGhpcy5nZXRXTVRTSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2FwYWJpbGl0aWVzOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcmNHSVNSRVNUSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0NvbXBvc2l0ZUxheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgY29uc3QgY29tcG9zaXRlQ2F0YWxvZyA9IChjYXRhbG9nIGFzIENvbXBvc2l0ZUNhdGFsb2cpLmNvbXBvc2l0ZTtcclxuXHJcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21JbnN0YW5jZSA9IFtdIGFzIENhdGFsb2dbXTtcclxuICAgIGNvbXBvc2l0ZUNhdGFsb2cubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+IHtcclxuICAgICAgY29tcG9uZW50LnNvcnREaXJlY3Rpb24gPSBjYXRhbG9nLnNvcnREaXJlY3Rpb247IC8vIHByb3BhZ2F0ZSBzb3J0RGlyZWN0aW9uIHdpdGggcGFyZW50IHZhbHVlXHJcbiAgICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLnB1c2goXHJcbiAgICAgICAgQ2F0YWxvZ0ZhY3RvcnkuY3JlYXRlSW5zdGFuY2VDYXRhbG9nKGNvbXBvbmVudCwgdGhpcylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGdldCBDYXRhbG9nSXRlbXMgZm9yIGVhY2ggb3JpZ2luYWwgQ2F0YWxvZy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBjb25zdCByZXF1ZXN0MSQgPSBbXTtcclxuICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLm1hcCgoY29tcG9uZW50OiBDYXRhbG9nKSA9PlxyXG4gICAgICByZXF1ZXN0MSQucHVzaChjb21wb25lbnQuY29sbGVjdENhdGFsb2dJdGVtcygpKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBpbnRlZ3JhdGUgaW1wb3NlZCBncm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IHJlcXVlc3QyJCA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGZsYXREZWVwTGF5ZXIoYXJyKSB7XHJcbiAgICAgIHJldHVybiBhcnIucmVkdWNlKFxyXG4gICAgICAgIChhY2MsIHZhbCkgPT5cclxuICAgICAgICAgIGFjYy5jb25jYXQoXHJcbiAgICAgICAgICAgIHZhbC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuR3JvdXAgPyBmbGF0RGVlcExheWVyKHZhbC5pdGVtcykgOiB2YWxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvc2l0ZUNhdGFsb2cpLmZpbmQoKGspID0+IGNvbXBvc2l0ZUNhdGFsb2dba10uZ3JvdXBJbXBvc2UpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgcHVzaEltcG9zZUdyb3VwID0gKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYyA9IGNhdGFsb2dzRnJvbUluc3RhbmNlW2luZGV4XTtcclxuICAgICAgICBjb25zdCBvdXRHcm91cEltcG9zZSA9IE9iamVjdC5hc3NpZ24oe30sIGMuZ3JvdXBJbXBvc2UpO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLmFkZHJlc3MgPSBjLmlkO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLnR5cGUgPSBDYXRhbG9nSXRlbVR5cGUuR3JvdXA7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuZXh0ZXJuYWxQcm92aWRlciA9IGMuZXh0ZXJuYWxQcm92aWRlcjtcclxuICAgICAgICBpZiAob3V0R3JvdXBJbXBvc2Uuc29ydERpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID0gYy5zb3J0RGlyZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRHcm91cEltcG9zZS5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBmbGF0TGF5ZXIgPSBmbGF0RGVlcExheWVyKGl0ZW0pO1xyXG4gICAgICAgIGZsYXRMYXllci5tYXAoXHJcbiAgICAgICAgICAodikgPT4gKHYuYWRkcmVzcyA9IGAke291dEdyb3VwSW1wb3NlLmFkZHJlc3N9LiR7b3V0R3JvdXBJbXBvc2UuaWR9YClcclxuICAgICAgICApO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLml0ZW1zID0gZmxhdExheWVyO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0R3JvdXBJbXBvc2U7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXF1ZXN0MiQgPSByZXF1ZXN0MSQubWFwKChvYnMsIGlkeCkgPT5cclxuICAgICAgICBvYnMucGlwZShcclxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+XHJcbiAgICAgICAgICAgIGNvbXBvc2l0ZUNhdGFsb2dbaWR4XS5ncm91cEltcG9zZVxyXG4gICAgICAgICAgICAgID8gcHVzaEltcG9zZUdyb3VwKGl0ZW1zLCBpZHgpXHJcbiAgICAgICAgICAgICAgOiBpdGVtc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlcXVlc3QyJCA9IHJlcXVlc3QxJDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25jYXQgR3JvdXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IHJlcXVlc3QzJCA9IHppcCguLi5yZXF1ZXN0MiQpLnBpcGUoXHJcbiAgICAgIG1hcChcclxuICAgICAgICAob3V0cHV0OiBDYXRhbG9nSXRlbVtdKSA9PiBbXS5jb25jYXQoLi4ub3V0cHV0KSAvLyBbXS5jb25jYXQuYXBwbHkoW10sIHJlc3VsdDFcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBtZXJnZSBHcm91cCAoZmlyc3QgbGV2ZWwgb25seSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IGdyb3VwQnlHcm91cElkID0gKGRhdGEsIGtleUZuKSA9PlxyXG4gICAgICBkYXRhLnJlZHVjZSgoYWNjLCBncm91cCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBrZXlGbihncm91cCk7XHJcbiAgICAgICAgY29uc3QgaW5kID0gYWNjLmZpbmQoKHgpID0+IHguaWQgPT09IGdyb3VwSWQpO1xyXG5cclxuICAgICAgICBpZiAoIWluZCkge1xyXG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gZ3JvdXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGl4ID0gYWNjLmluZGV4T2YoaW5kKTtcclxuICAgICAgICAgIGlmIChhY2NbaXhdLmFkZHJlc3Muc3BsaXQoJ3wnKS5pbmRleE9mKGdyb3VwLmFkZHJlc3MpID09PSAtMSkge1xyXG4gICAgICAgICAgICBhY2NbaXhdLmFkZHJlc3MgPSBgJHthY2NbaXhdLmFkZHJlc3N9fCR7Z3JvdXAuYWRkcmVzc31gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWNjW2l4XS5pdGVtcy5wdXNoKC4uLmdyb3VwLml0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgW10pO1xyXG5cclxuICAgIC8vIG1lcmdlIExheWVyIGZvciBlYWNoIExldmVsIChjYXRhbG9nLCBncm91cChyZWN1cnNpdmUpKVxyXG4gICAgY29uc3QgcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyA9IChpdGVtcywga2V5Rm4pID0+XHJcbiAgICAgIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtLCBpZHgsIGFycikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBrZXlGbihpdGVtKTtcclxuICAgICAgICBjb25zdCBvdXRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xyXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgc2FtZSBhZGRyZXNzID0+IHJlc3VsdDogb25seSBvbmUgaXRlbSBpcyBrZXB0XHJcblxyXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgYWRkcmVzcyBkaWZmXHJcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hUaXRsZSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwgPSBbXTsgLy8gbWV0YWRhdGFcclxuICAgICAgICAgIGNvbnN0IGRpZmZBZGRyZXNzID0gYXJyLmZpbHRlcigoeCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYkluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoeC50aXRsZSA9PT0gbGF5ZXJUaXRsZSAmJiB4LnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xyXG4gICAgICAgICAgICAgIGlmIChpICE9PSBpZHggJiYgeC5hZGRyZXNzICE9PSBpdGVtLmFkZHJlc3MpIHtcclxuICAgICAgICAgICAgICAgIGJJbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hUaXRsZS5wdXNoKGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBiSW5kO1xyXG4gICAgICAgICAgfSk7IC8vICQmIGkgIT09IGlkeFxyXG5cclxuICAgICAgICAgIGlmIChkaWZmQWRkcmVzcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBuUG9zaXRpb24gPSBpbmRpY2VzTWF0Y2hUaXRsZS5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xyXG4gICAgICAgICAgICBvdXRJdGVtLnRpdGxlID0gYCR7aXRlbS50aXRsZX0gKCR7blBvc2l0aW9ufSlgOyAvLyBzb3VyY2U6ICR7aXRlbS5hZGRyZXNzLnNwbGl0KCcuJylbMF19XHJcbiAgICAgICAgICAgIG5Qb3NpdGlvbiA9XHJcbiAgICAgICAgICAgICAgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwuZmluZEluZGV4KCh4KSA9PiB4ID09PSBpZHgpICsgMTtcclxuICAgICAgICAgICAgb3V0SXRlbS5uZXdNZXRhZGF0YVVybCA9IGAke2l0ZW0ubmV3TWV0YWRhdGFVcmx9ICgke25Qb3NpdGlvbn0pYDsgLy8gc291cmNlOiAke2l0ZW0uYWRkcmVzcy5zcGxpdCgnLicpWzBdfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGV4aXN0ID0gYWNjLmZpbmQoXHJcbiAgICAgICAgICAgICh4KSA9PiB4LnRpdGxlID09PSBvdXRJdGVtLnRpdGxlICYmIHgudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBvdXRJdGVtO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuR3JvdXApIHtcclxuICAgICAgICAgIG91dEl0ZW0uaXRlbXMgPSByZWN1cnNpdmVHcm91cEJ5TGF5ZXJBZGRyZXNzKFxyXG4gICAgICAgICAgICBpdGVtLml0ZW1zLFxyXG4gICAgICAgICAgICAobGF5ZXIpID0+IGxheWVyLnRpdGxlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gb3V0SXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sIFtdKTtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0NCQgPSByZXF1ZXN0MyQucGlwZShcclxuICAgICAgbWFwKChvdXRwdXQpID0+IGdyb3VwQnlHcm91cElkKG91dHB1dCwgKGdyb3VwKSA9PiBncm91cC5pZCkpLFxyXG4gICAgICBtYXAoKG91dHB1dCkgPT4gW10uY29uY2F0KC4uLm91dHB1dCkpLFxyXG4gICAgICBtYXAoKGRhdGEpID0+IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoZGF0YSwgKGxheWVyKSA9PiBsYXllci50aXRsZSkpXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiByZXF1ZXN0NCQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlIGFzIHN0cmluZ107XHJcbiAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlXHJcbiAgICAgIC5nZXRDYXBhYmlsaXRpZXMoc1R5cGUgYXMgYW55LCBjYXRhbG9nLnVybCwgY2F0YWxvZy52ZXJzaW9uKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBjYXRhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgICAgPyAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlJ1xyXG4gICAgICAgICAgICAgIDogJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxyXG4gICAgICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlVGl0bGUnLFxyXG4gICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNhdGFsb2cudGl0bGUgPyB7IHZhbHVlOiBjYXRhbG9nLnRpdGxlIH0gOiB1bmRlZmluZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxyXG4gICAgZm9yY2VkUHJvcGVydGllczogRm9yY2VkUHJvcGVydHlbXVxyXG4gICk6IEZvcmNlZFByb3BlcnR5IHtcclxuICAgIGlmICghZm9yY2VkUHJvcGVydGllcyB8fCBmb3JjZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXR1cm5Qcm9wZXJ0eTogRm9yY2VkUHJvcGVydHkgPSB7XHJcbiAgICAgIGxheWVyTmFtZTogbGF5ZXJOYW1lRnJvbUNhdGFsb2csXHJcbiAgICAgIHRpdGxlOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhVXJsOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhQWJzdHJhY3Q6IHVuZGVmaW5lZCxcclxuICAgICAgbWV0YWRhdGFBYnN0cmFjdEFsbDogdW5kZWZpbmVkLFxyXG4gICAgICBtZXRhZGF0YVVybEFsbDogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG4gICAgLy9wcm9jZXNzIHdpbGRjYXJkIGJlZm9yZVxyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSAqIHdpbGRjYXJkXHJcbiAgICBjb25zdCBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzID0gZm9yY2VkUHJvcGVydGllcy5maW5kKFxyXG4gICAgICAoZikgPT4gZi5sYXllck5hbWUgPT09ICcqJ1xyXG4gICAgKTtcclxuICAgIGlmIChmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzKSB7XHJcbiAgICAgIC8vIG1ldGFkYXRhQWJzdHJhY3RBbGxcclxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFBYnN0cmFjdEFsbCkge1xyXG4gICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3RBbGwgPVxyXG4gICAgICAgICAgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YUFic3RyYWN0QWxsO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIG1ldGFkYXRhVXJsQWxsXHJcbiAgICAgIGlmIChmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhVXJsQWxsKSB7XHJcbiAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFVcmxBbGwgPVxyXG4gICAgICAgICAgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YVVybEFsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yY2VkUHJvcGVydGllcy5tYXAoKGZvcmNlZFByb3BlcnR5KSA9PiB7XHJcbiAgICAgIC8vIGlmIG1hdGNoIGZvdW5kXHJcbiAgICAgIGlmIChsYXllck5hbWVGcm9tQ2F0YWxvZyA9PT0gZm9yY2VkUHJvcGVydHkubGF5ZXJOYW1lKSB7XHJcbiAgICAgICAgLy8gdGl0bGVcclxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkudGl0bGUpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5LnRpdGxlID0gZm9yY2VkUHJvcGVydHkudGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ldGFkYXRhVXJsXHJcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YVVybCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtZXRhZGF0YUFic3RyYWN0XHJcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3QpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3QgPSBmb3JjZWRQcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuUHJvcGVydHk7XHJcbiAgfVxyXG5cclxuICAvLy8gV01TXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUNhdGFsb2dJdGVtTGF5ZXIobGF5ZXIsIGlkUGFyZW50LCBsYXllcnNRdWVyeUZvcm1hdCwgY2F0YWxvZykge1xyXG4gICAgY29uc3QgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID0gdGhpcy5yZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcclxuICAgICAgbGF5ZXIuTmFtZSxcclxuICAgICAgbGF5ZXJzUXVlcnlGb3JtYXRcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbGVnZW5kT3B0aW9ucyA9XHJcbiAgICAgIGNhdGFsb2cuc2hvd0xlZ2VuZCAmJiBsYXllci5TdHlsZVxyXG4gICAgICAgID8gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlLmdldFN0eWxlKGxheWVyLlN0eWxlKVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGNhdGFsb2cucXVlcnlQYXJhbXMsIHtcclxuICAgICAgTEFZRVJTOiBsYXllci5OYW1lLFxyXG4gICAgICBWRVJTSU9OOiBjYXRhbG9nLnZlcnNpb25cclxuICAgIH0gYXMgV01TRGF0YVNvdXJjZU9wdGlvbnNQYXJhbXMpO1xyXG5cclxuICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICB0eXBlOiAnd21zJyxcclxuICAgICAgdXJsOiBjYXRhbG9nLnVybCxcclxuICAgICAgY3Jvc3NPcmlnaW46IGNhdGFsb2cuc2V0Q3Jvc3NPcmlnaW5Bbm9ueW1vdXMgPyAnYW5vbnltb3VzJyA6IHVuZGVmaW5lZCxcclxuICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCxcclxuICAgICAgcXVlcnlIdG1sVGFyZ2V0OlxyXG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTCB8fFxyXG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTEdNTDJcclxuICAgICAgICAgID8gJ2lmcmFtZSdcclxuICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxyXG4gICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnMsXHJcbiAgICAgIHsgcGFyYW1zIH1cclxuICAgICkgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgcHJvcGVydGllc1RvRm9yY2UgPSB0aGlzLmNvbXB1dGVGb3JjZWRQcm9wZXJ0aWVzKFxyXG4gICAgICBsYXllci5OYW1lLFxyXG4gICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcclxuICAgICk7XHJcbiAgICBsZXQgYmFzZUFic3RyYWN0O1xyXG4gICAgbGV0IGV4dGVybiA9IHRydWU7XHJcbiAgICBpZiAobGF5ZXIuQWJzdHJhY3QpIHtcclxuICAgICAgYmFzZUFic3RyYWN0ID0gbGF5ZXIuQWJzdHJhY3Q7XHJcbiAgICB9IGVsc2UgaWYgKCFsYXllci5BYnN0cmFjdCAmJiBjYXRhbG9nLmFic3RyYWN0KSB7XHJcbiAgICAgIGJhc2VBYnN0cmFjdCA9IGNhdGFsb2cuYWJzdHJhY3Q7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXllck9ubGluZVJlc291cmNlID1cclxuICAgICAgbGF5ZXI/LkRhdGFVUkwgJiYgbGF5ZXI/LkRhdGFVUkwubGVuZ3RoID4gMFxyXG4gICAgICAgID8gbGF5ZXI/LkRhdGFVUkxbMF0uT25saW5lUmVzb3VyY2VcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBsZXQgbWV0YWRhdGFVcmwgPVxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHxcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsIHx8XHJcbiAgICAgIGxheWVyT25saW5lUmVzb3VyY2U7XHJcbiAgICBsZXQgbWV0YWRhdGFBYnN0cmFjdCA9XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgIGJhc2VBYnN0cmFjdDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcclxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxyXG4gICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcclxuICAgICkge1xyXG4gICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXHJcbiAgICApIHtcclxuICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGF5ZXJQcmVwYXJlID0ge1xyXG4gICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXHJcbiAgICAgIHRpdGxlOiBwcm9wZXJ0aWVzVG9Gb3JjZT8udGl0bGUgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZSA6IGxheWVyLlRpdGxlLFxyXG4gICAgICBhZGRyZXNzOiBpZFBhcmVudCxcclxuICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyIHx8IGZhbHNlLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgbWF4UmVzb2x1dGlvbjogZ2V0UmVzb2x1dGlvbkZyb21TY2FsZShsYXllci5NYXhTY2FsZURlbm9taW5hdG9yKSxcclxuICAgICAgICBtaW5SZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1pblNjYWxlRGVub21pbmF0b3IpLFxyXG4gICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxyXG4gICAgICAgICAgZXh0ZXJuLFxyXG4gICAgICAgICAgYWJzdHJhY3Q6IG1ldGFkYXRhQWJzdHJhY3QsXHJcbiAgICAgICAgICB0eXBlOiBiYXNlU291cmNlT3B0aW9ucy50eXBlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsZWdlbmRPcHRpb25zLFxyXG4gICAgICAgIHRvb2x0aXA6IHsgdHlwZTogY2F0YWxvZy50b29sdGlwVHlwZSB9LFxyXG4gICAgICAgIHNvdXJjZU9wdGlvbnNcclxuICAgICAgfVxyXG4gICAgfSBhcyBDYXRhbG9nSXRlbTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKGxheWVyUHJlcGFyZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVDYXRhbG9nSXRlbUdyb3VwKFxyXG4gICAgaXRlbUxpc3RJbixcclxuICAgIHJlZ2V4ZXMsXHJcbiAgICBpZEdyb3VwLFxyXG4gICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICBjYXRhbG9nXHJcbiAgKSB7XHJcbiAgICBjb25zdCBncm91cFByZXBhcmUgPSB7XHJcbiAgICAgIGlkOiBpZEdyb3VwLFxyXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgIHRpdGxlOiBpdGVtTGlzdEluLlRpdGxlLFxyXG4gICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxyXG4gICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIgfHwgZmFsc2UsXHJcbiAgICAgIHNvcnREaXJlY3Rpb246IGNhdGFsb2cuc29ydERpcmVjdGlvbiwgLy8gcHJvcGFnYXRlIHNvcnREaXJlY3Rpb25cclxuICAgICAgaXRlbXM6IGl0ZW1MaXN0SW4uTGF5ZXIucmVkdWNlKChpdGVtczogQ2F0YWxvZ0l0ZW1bXSwgbGF5ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5MYXllciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAvLyByZWN1cnNpdmUsIGNoZWNrIG5leHQgbGV2ZWxcclxuICAgICAgICAgIGNvbnN0IGlkR3JvdXBJdGVtTmV4dExldmVsID1cclxuICAgICAgICAgICAgaWRHcm91cCArIGAuZ3JvdXAuJHtsYXllci5OYW1lIHx8IGxheWVyLkxheWVyWzBdLk5hbWV9YDtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbTogQ2F0YWxvZ0l0ZW1Hcm91cCA9IHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICByZWdleGVzLFxyXG4gICAgICAgICAgICBpZEdyb3VwSXRlbU5leHRMZXZlbCxcclxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaXRlbXMucHVzaChncm91cEl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLk5hbWUsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtOiBDYXRhbG9nSXRlbUxheWVyPEltYWdlTGF5ZXJPcHRpb25zPiA9XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtTGF5ZXIoXHJcbiAgICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgICAgaWRHcm91cCxcclxuICAgICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgICAgICBjYXRhbG9nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaXRlbXMucHVzaChsYXllckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgIH0sIFtdKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBncm91cFByZXBhcmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluY2x1ZGVSZWN1cnNpdmVJdGVtcyhcclxuICAgIGNhdGFsb2c6IENhdGFsb2csXHJcbiAgICBpdGVtTGlzdEluOiBhbnksXHJcbiAgICBpdGVtc1ByZXBhcmU6IENhdGFsb2dJdGVtW10sXHJcbiAgICBsb29wTGV2ZWw6IG51bWJlciA9IDBcclxuICApIHtcclxuICAgIC8vIERpZyBhbGwgbGV2ZWxzIHVudGlsIGxhc3QgbGV2ZWwgKGxheWVyIG9iamVjdCBhcmUgbm90IGRlZmluZWQgb24gbGFzdCBsZXZlbClcclxuICAgIGNvbnN0IHJlZ2V4ZXMgPSAoY2F0YWxvZy5yZWdGaWx0ZXJzIHx8IFtdKS5tYXAoXHJcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcclxuICAgICk7XHJcbiAgICBpZiAoIWl0ZW1MaXN0SW4uTGF5ZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtTGlzdEluLkxheWVyKSB7XHJcbiAgICAgIGlmIChpdGVtLkxheWVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyByZWN1cnNpdmUsIGNoZWNrIG5leHQgbGV2ZWxcclxuICAgICAgICB0aGlzLmluY2x1ZGVSZWN1cnNpdmVJdGVtcyhjYXRhbG9nLCBpdGVtLCBpdGVtc1ByZXBhcmUsIGxvb3BMZXZlbCArIDEpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdCA9IHRoaXMuZmluZENhdGFsb2dJbmZvRm9ybWF0KGNhdGFsb2cpO1xyXG5cclxuICAgICAgLy8gZ3JvdXAod2l0aCBsYXllcnMpIGFuZCBsYXllcih3aXRob3V0IGdyb3VwKSBsZXZlbCAxXHJcbiAgICAgIGlmIChsb29wTGV2ZWwgIT09IDApIHtcclxuICAgICAgICAvLyBUT0RPOiBTbGljZSB0aGF0IGludG8gbXVsdGlwbGUgbWV0aG9kc1xyXG4gICAgICAgIC8vIERlZmluZSBvYmplY3Qgb2YgZ3JvdXAgbGF5ZXJcclxuICAgICAgICBjb25zdCBpZEdyb3VwSXRlbSA9IGBjYXRhbG9nLmdyb3VwLiR7aXRlbUxpc3RJbi5OYW1lIHx8IGl0ZW0uTmFtZX1gO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSXRlbSA9IHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICAgICAgICBpdGVtTGlzdEluLFxyXG4gICAgICAgICAgcmVnZXhlcyxcclxuICAgICAgICAgIGlkR3JvdXBJdGVtLFxyXG4gICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICBjYXRhbG9nXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwSXRlbS5pdGVtcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgIGl0ZW1zUHJlcGFyZS5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCcmVhayB0aGUgZ3JvdXAgKGRvbid0IGFkZCBhIGdyb3VwIG9mIGxheWVyIGZvciBlYWNoIG9mIHRoZWlyIGxheWVyISlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsYXllciB3aXRob3V0IGdyb3VwXHJcbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhpdGVtLk5hbWUsIHJlZ2V4ZXMpICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcclxuICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgY2F0YWxvZy5pZCxcclxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChsYXllckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIFdNVFNcclxuXHJcbiAgcHJpdmF0ZSBnZXRXTVRTSXRlbXMoXHJcbiAgICBjYXRhbG9nLFxyXG4gICAgY2FwYWJpbGl0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgKTogQ2F0YWxvZ0l0ZW1MYXllcltdIHtcclxuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVycyA9IGNhcGFiaWxpdGllcy5Db250ZW50cy5MYXllcjtcclxuICAgIGNvbnN0IHJlZ2V4ZXMgPSAoY2F0YWxvZy5yZWdGaWx0ZXJzIHx8IFtdKS5tYXAoXHJcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uICYmXHJcbiAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24uQWJzdHJhY3QgJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdC5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBjYXRhbG9nLmFic3RyYWN0ID0gY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXJzXHJcbiAgICAgIC5tYXAoKGxheWVyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgICAgICBsYXllci5UaXRsZSxcclxuICAgICAgICAgIGNhdGFsb2cuZm9yY2VkUHJvcGVydGllc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGV4dGVybiA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBtZXRhZGF0YVVybCA9XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHwgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsO1xyXG4gICAgICAgIGxldCBtZXRhZGF0YUFic3RyYWN0ID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbCB8fFxyXG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxyXG4gICAgICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhsYXllci5JZGVudGlmaWVyLCByZWdleGVzKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGNhdGFsb2cucXVlcnlQYXJhbXMsIHtcclxuICAgICAgICAgIHZlcnNpb246ICcxLjAuMCdcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBiYXNlU291cmNlT3B0aW9ucyA9IHtcclxuICAgICAgICAgIHR5cGU6ICd3bXRzJyxcclxuICAgICAgICAgIHVybDogY2F0YWxvZy51cmwsXHJcbiAgICAgICAgICBjcm9zc09yaWdpbjogY2F0YWxvZy5zZXRDcm9zc09yaWdpbkFub255bW91c1xyXG4gICAgICAgICAgICA/ICdhbm9ueW1vdXMnXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLklkZW50aWZpZXIsXHJcbiAgICAgICAgICBtYXRyaXhTZXQ6IGNhdGFsb2cubWF0cml4U2V0LFxyXG4gICAgICAgICAgb3B0aW9uc0Zyb21DYXBhYmlsaXRpZXM6IHRydWUsXHJcbiAgICAgICAgICByZXF1ZXN0RW5jb2Rpbmc6IGNhdGFsb2cucmVxdWVzdEVuY29kaW5nIHx8ICdLVlAnLFxyXG4gICAgICAgICAgc3R5bGU6ICdkZWZhdWx0J1xyXG4gICAgICAgIH0gYXMgV01UU0RhdGFTb3VyY2VPcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICBiYXNlU291cmNlT3B0aW9ucyxcclxuICAgICAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9ucyxcclxuICAgICAgICAgIHsgcGFyYW1zIH1cclxuICAgICAgICApIGFzIFdNVFNEYXRhU291cmNlT3B0aW9ucztcclxuXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZCh7XHJcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxyXG4gICAgICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZVxyXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXHJcbiAgICAgICAgICAgIDogbGF5ZXIuVGl0bGUsXHJcbiAgICAgICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxyXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBzb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXHJcbiAgICAgICAgICAgICAgZXh0ZXJuLFxyXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxyXG4gICAgICAgICAgICAgIHR5cGU6IGJhc2VTb3VyY2VPcHRpb25zLnR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBcmNHSVNSRVNUSXRlbXMoXHJcbiAgICBjYXRhbG9nOiBDYXRhbG9nLFxyXG4gICAgY2FwYWJpbGl0aWVzXHJcbiAgKTogQ2F0YWxvZ0l0ZW1MYXllcltdIHtcclxuICAgIGlmICghY2FwYWJpbGl0aWVzIHx8ICFjYXBhYmlsaXRpZXMubGF5ZXJzKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxyXG4gICAgICAgICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGVUaXRsZSdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXBzOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJbXSA9ICFjYXBhYmlsaXRpZXMubGF5ZXJzXHJcbiAgICAgID8gW11cclxuICAgICAgOiBjYXBhYmlsaXRpZXMubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnN1YkxheWVySWRzKTtcclxuICAgIGNvbnN0IGxheWVyczogQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyW10gPSAhY2FwYWJpbGl0aWVzLmxheWVyc1xyXG4gICAgICA/IFtdXHJcbiAgICAgIDogY2FwYWJpbGl0aWVzLmxheWVycy5maWx0ZXIoXHJcbiAgICAgICAgICAobGF5ZXIpID0+XHJcbiAgICAgICAgICAgICFsYXllci50eXBlIHx8XHJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzLkZlYXR1cmVMYXllciB8fFxyXG4gICAgICAgICAgICBsYXllci50eXBlID09PSBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlcy5SYXN0ZXJMYXllclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcclxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgYWJzdHJhY3Q7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNhcGFiaWxpdGllcy5zZXJ2aWNlRGVzY3JpcHRpb24gJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLnNlcnZpY2VEZXNjcmlwdGlvbi5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBjb25zdCByZWdleCA9IC8oPChbXj5dKyk+KS9naTtcclxuICAgICAgYWJzdHJhY3QgPSBjYXBhYmlsaXRpZXMuc2VydmljZURlc2NyaXB0aW9uLnJlcGxhY2UocmVnZXgsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpdGVtczogQ2F0YWxvZ0l0ZW1MYXllcltdID0gbGF5ZXJzXHJcbiAgICAgIC5tYXAoKGxheWVyOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXIpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgICAgICBsYXllci5uYW1lLFxyXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcclxuICAgICAgICBsZXQgZXh0ZXJuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgbGV0IG1ldGFkYXRhVXJsID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XHJcbiAgICAgICAgbGV0IG1ldGFkYXRhQWJzdHJhY3QgPVxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgICAgICBiYXNlQWJzdHJhY3Q7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcclxuICAgICAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlc3RMYXllclJlZ2V4ZXMobGF5ZXIuaWQudG9TdHJpbmcoKSwgcmVnZXhlcykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiYXNlU291cmNlT3B0aW9uczogQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zICZcclxuICAgICAgICAgIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgICAgdHlwZTogVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlXSBhcyBhbnksXHJcbiAgICAgICAgICB1cmw6IGNhdGFsb2cudXJsLFxyXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBxdWVyeWFibGU6IHRydWUsXHJcbiAgICAgICAgICBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQuRVNSSUpTT04sXHJcbiAgICAgICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9uczogQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQoe1xyXG4gICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhzb3VyY2VPcHRpb25zKSxcclxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgICAgIHRpdGxlOiBwcm9wZXJ0aWVzVG9Gb3JjZT8udGl0bGVcclxuICAgICAgICAgICAgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZVxyXG4gICAgICAgICAgICA6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIG1pblJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWF4U2NhbGUpLFxyXG4gICAgICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLm1pblNjYWxlKSxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxyXG4gICAgICAgICAgICAgIGV4dGVybixcclxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcclxuICAgICAgICAgICAgICB0eXBlOiBjYXRhbG9nLnR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgY29uc3QgZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3QgZ3JvdXBlZEl0ZW1zOiBDYXRhbG9nSXRlbUxheWVyW10gPSBncm91cHNcclxuICAgICAgLm1hcCgoZ3JvdXApID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXHJcbiAgICAgICAgICBpZDogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXHJcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBjYXRhbG9nLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB0aXRsZTogZ3JvdXAubmFtZSxcclxuICAgICAgICAgIGl0ZW1zOiBpdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3ViTGF5ZXJJZHNTdHIgPSBncm91cC5zdWJMYXllcklkcy5tYXAoKHIpID0+IHIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkxheWVySWRzU3RyLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgKGkub3B0aW9ucy5zb3VyY2VPcHRpb25zIGFzIEFyY0dJU1Jlc3REYXRhU291cmNlT3B0aW9ucykubGF5ZXJcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAubWFwKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzLnB1c2goaS5pZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGksIHtcclxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7Z3JvdXAubmFtZX1gXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigoZykgPT4gZy5pdGVtcy5sZW5ndGgpO1xyXG5cclxuICAgIGlmIChncm91cHMpIHtcclxuICAgICAgY29uc3QgVGl0bGVPcklkID0gY2F0YWxvZy50aXRsZSB8fCBjYXRhbG9nLmlkO1xyXG4gICAgICBjb25zdCBub25IYW5kbGVkTGF5ZXJzID0gaXRlbXNcclxuICAgICAgICAuZmlsdGVyKChpKSA9PiAhZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzLmluY2x1ZGVzKGkuaWQpKVxyXG4gICAgICAgIC5tYXAoKGkpID0+XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBpLCB7XHJcbiAgICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7VGl0bGVPcklkfWBcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKG5vbkhhbmRsZWRMYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9uSGFuZGxlZEdyb3VwID0ge1xyXG4gICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtUaXRsZU9ySWR9YCxcclxuICAgICAgICAgIGlkOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxyXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgdGl0bGU6IFRpdGxlT3JJZCxcclxuICAgICAgICAgIGl0ZW1zOiBub25IYW5kbGVkTGF5ZXJzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBncm91cGVkSXRlbXMucHVzaChub25IYW5kbGVkR3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwcyA/IGdyb3VwZWRJdGVtcyA6IGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0ZXN0TGF5ZXJSZWdleGVzKGxheWVyTmFtZTogc3RyaW5nLCByZWdleGVzOiBSZWdFeHBbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlZ2V4ZXMuZmluZCgocmVnZXg6IFJlZ0V4cCkgPT4gcmVnZXgudGVzdChsYXllck5hbWUpKSAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcclxuICAgIGxheWVyTmFtZUZyb21DYXRhbG9nOiBzdHJpbmcsXHJcbiAgICBsYXllcnNRdWVyeUZvcm1hdDogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdXHJcbiAgKTogUXVlcnlGb3JtYXQge1xyXG4gICAgY29uc3QgY3VycmVudExheWVySW5mb0Zvcm1hdCA9IGxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoXHJcbiAgICAgIChmKSA9PiBmLmxheWVyID09PSBsYXllck5hbWVGcm9tQ2F0YWxvZ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGJhc2VJbmZvRm9ybWF0ID0gbGF5ZXJzUXVlcnlGb3JtYXQuZmluZCgoZikgPT4gZi5sYXllciA9PT0gJyonKTtcclxuICAgIGxldCBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQ7XHJcbiAgICBpZiAoY3VycmVudExheWVySW5mb0Zvcm1hdCkge1xyXG4gICAgICBxdWVyeUZvcm1hdCA9IGN1cnJlbnRMYXllckluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XHJcbiAgICB9IGVsc2UgaWYgKGJhc2VJbmZvRm9ybWF0KSB7XHJcbiAgICAgIHF1ZXJ5Rm9ybWF0ID0gYmFzZUluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDYXRhbG9nSW5mb0Zvcm1hdChcclxuICAgIGNhdGFsb2c6IENhdGFsb2dcclxuICApOiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W10ge1xyXG4gICAgY29uc3QgbGF5ZXJzUXVlcnlGb3JtYXQ6IHsgbGF5ZXI6IHN0cmluZzsgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0IH1bXSA9IFtdO1xyXG4gICAgaWYgKCFjYXRhbG9nLnF1ZXJ5Rm9ybWF0KSB7XHJcbiAgICAgIHJldHVybiBsYXllcnNRdWVyeUZvcm1hdDtcclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNhdGFsb2cucXVlcnlGb3JtYXQpLmZvckVhY2goKGNvbmZpZ3VyZWRJbmZvRm9ybWF0KSA9PiB7XHJcbiAgICAgIGlmIChjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0uZm9yRWFjaCgobGF5ZXJOYW1lKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFsYXllcnNRdWVyeUZvcm1hdC5maW5kKChzcGVjaWZpYykgPT4gc3BlY2lmaWMubGF5ZXIgPT09IGxheWVyTmFtZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdC5wdXNoKHtcclxuICAgICAgICAgICAgICBsYXllcjogbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICAgIHF1ZXJ5Rm9ybWF0OiBjb25maWd1cmVkSW5mb0Zvcm1hdCBhcyBRdWVyeUZvcm1hdFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhbGF5ZXJzUXVlcnlGb3JtYXQuZmluZChcclxuICAgICAgICAgICAgKHNwZWNpZmljKSA9PlxyXG4gICAgICAgICAgICAgIHNwZWNpZmljLmxheWVyID09PSBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQucHVzaCh7XHJcbiAgICAgICAgICAgIGxheWVyOiBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XSxcclxuICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGxheWVyc1F1ZXJ5Rm9ybWF0O1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgQ2F0YWxvZ0ZhY3Rvcnkge1xyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zdGFuY2VDYXRhbG9nKFxyXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcclxuICAgIGNhdGFsb2dTZXJ2aWNlOiBDYXRhbG9nU2VydmljZVxyXG4gICk6IENhdGFsb2cge1xyXG4gICAgbGV0IGNhdGFsb2c6IENhdGFsb2c7XHJcbiAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY29tcG9zaXRlJykpIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBDb21wb3NpdGVDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmJhc2VsYXllcnNdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgQmFzZWxheWVyc0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dCYXNlTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmFyY2dpc3Jlc3RdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgQXJjR0lTUmVzdENhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dBcmNHSVNSZXN0SXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdF0pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcclxuICAgICAgICBUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmltYWdlYXJjZ2lzcmVzdF0pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcclxuICAgICAgICBUeXBlQ2F0YWxvZy5pbWFnZWFyY2dpc3Jlc3RcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy53bXRzXSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IFdNVFNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nV01UU0xheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgV01TQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2F0YWxvZztcclxuICB9XHJcbn1cclxuIl19
710
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBRUwsZ0NBQWdDLEVBQ2pDLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFRbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFROUQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLDRCQUE0QixFQUM1QixVQUFVLEVBQ1Ys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RSxDQUNyRCxjQUFjLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQ2pELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZXNzYWdlJztcbmltcG9ydCB7IE9iamVjdFV0aWxzLCB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgb2YsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXIsXG4gIEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2NhcGFiaWxpdGllcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2NhcGFiaWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFyY0dJU1Jlc3REYXRhU291cmNlT3B0aW9ucyxcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnMsXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zUGFyYW1zLFxuICBXTVRTRGF0YVNvdXJjZU9wdGlvbnNcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMnO1xuaW1wb3J0IHsgSW1hZ2VMYXllck9wdGlvbnMsIExheWVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZCc7XG5pbXBvcnQgeyBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAudXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlGb3JtYXQgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuZW51bXMnO1xuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscy9pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHsgQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5hYnN0cmFjdCc7XG5pbXBvcnQgeyBDYXRhbG9nSXRlbVR5cGUsIFR5cGVDYXRhbG9nIH0gZnJvbSAnLi9jYXRhbG9nLmVudW0nO1xuaW1wb3J0IHtcbiAgQ2F0YWxvZ0l0ZW0sXG4gIENhdGFsb2dJdGVtR3JvdXAsXG4gIENhdGFsb2dJdGVtTGF5ZXIsXG4gIENhdGFsb2dTZXJ2aWNlT3B0aW9ucyxcbiAgRm9yY2VkUHJvcGVydHlcbn0gZnJvbSAnLi9jYXRhbG9nLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBBcmNHSVNSZXN0Q2F0YWxvZyxcbiAgQmFzZWxheWVyc0NhdGFsb2csXG4gIENvbXBvc2l0ZUNhdGFsb2csXG4gIFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2csXG4gIFdNU0NhdGFsb2csXG4gIFdNVFNDYXRhbG9nXG59IGZyb20gJy4vY2F0YWxvZ3MnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXRhbG9nU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FwYWJpbGl0aWVzU2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZVxuICApIHt9XG5cbiAgbG9hZENhdGFsb2dzKCk6IE9ic2VydmFibGU8Q2F0YWxvZ1tdPiB7XG4gICAgY29uc3QgY29udGV4dENvbmZpZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnY29udGV4dCcpIHx8IHt9O1xuXG4gICAgY29uc3QgY2F0YWxvZ0NvbmZpZzogQ2F0YWxvZ1NlcnZpY2VPcHRpb25zID1cbiAgICAgIHRoaXMuY29uZmlnLmdldENvbmZpZygnY2F0YWxvZycpIHx8IHt9O1xuICAgIGNvbnN0IGFwaVVybCA9IGNhdGFsb2dDb25maWcudXJsIHx8IGNvbnRleHRDb25maWcudXJsO1xuICAgIGNvbnN0IGNhdGFsb2dzRnJvbUNvbmZpZyA9IGNhdGFsb2dDb25maWcuc291cmNlcyB8fCBbXTtcblxuICAgIGNvbnN0IG9ic2VydmFibGVzJCA9IFtdO1xuXG4gICAgaWYgKGFwaVVybCkge1xuICAgICAgaWYgKGNhdGFsb2dDb25maWcuYmFzZWxheWVycykge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uY2F0YWxvZy5iYXNlTGF5ZXJzJyk7XG4gICAgICAgIGNvbnN0IGJhc2VMYXllcnNDYXRhbG9nID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnY2F0YWxvZy5iYXNlbGF5ZXJzJyxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgdXJsOiBgJHthcGlVcmx9L2Jhc2VsYXllcnNgLFxuICAgICAgICAgICAgdHlwZTogJ2Jhc2VsYXllcnMnXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICBvYnNlcnZhYmxlcyQucHVzaChvZihiYXNlTGF5ZXJzQ2F0YWxvZykpO1xuICAgICAgfVxuXG4gICAgICAvLyBDYXRhbG9ncyBmcm9tIEFQSVxuICAgICAgY29uc3QgY2F0YWxvZ3NGcm9tQXBpJCA9IHRoaXMuaHR0cFxuICAgICAgICAuZ2V0PENhdGFsb2dbXT4oYCR7YXBpVXJsfS9jYXRhbG9nc2ApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoY2F0YWxvZ3MpID0+XG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGM6IGFueSkgPT4gT2JqZWN0LmFzc2lnbihjLCBjLm9wdGlvbnMpKVxuICAgICAgICAgICksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoX3Jlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gRU1QVFkpXG4gICAgICAgICk7XG4gICAgICBvYnNlcnZhYmxlcyQucHVzaChjYXRhbG9nc0Zyb21BcGkkKTtcbiAgICB9XG5cbiAgICAvLyBDYXRhbG9ncyBmcm9tIGNvbmZpZ1xuICAgIGlmIChjYXRhbG9nc0Zyb21Db25maWcubGVuZ3RoID4gMCkge1xuICAgICAgb2JzZXJ2YWJsZXMkLnB1c2goXG4gICAgICAgIG9mKGNhdGFsb2dzRnJvbUNvbmZpZykucGlwZShcbiAgICAgICAgICBtYXAoKGNhdGFsb2dzOiBDYXRhbG9nW10pID0+XG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjLmlkKSB7XG4gICAgICAgICAgICAgICAgYy5pZCA9IHV1aWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB6aXAoLi4ub2JzZXJ2YWJsZXMkKS5waXBlKFxuICAgICAgbWFwKChjYXRhbG9nczogQ2F0YWxvZ1tdW10pID0+IFtdLmNvbmNhdC5hcHBseShbXSwgY2F0YWxvZ3MpKVxuICAgICkgYXMgT2JzZXJ2YWJsZTxDYXRhbG9nW10+O1xuICB9XG5cbiAgbG9hZENhdGFsb2dJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgbGV0IG5ld0NhdGFsb2c6IENhdGFsb2c7XG4gICAgbmV3Q2F0YWxvZyA9IENhdGFsb2dGYWN0b3J5LmNyZWF0ZUluc3RhbmNlQ2F0YWxvZyhjYXRhbG9nLCB0aGlzKTtcbiAgICByZXR1cm4gbmV3Q2F0YWxvZy5jb2xsZWN0Q2F0YWxvZ0l0ZW1zKCk7XG4gIH1cblxuICBsb2FkQ2F0YWxvZ0Jhc2VMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtR3JvdXBbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldENhdGFsb2dCYXNlTGF5ZXJzT3B0aW9ucyhjYXRhbG9nKS5waXBlKFxuICAgICAgbWFwKChsYXllcnNPcHRpb25zOiBMYXllck9wdGlvbnNbXSkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGxheWVyc09wdGlvbnMubWFwKChsYXllck9wdGlvbnM6IExheWVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKGxheWVyT3B0aW9ucy5zb3VyY2VPcHRpb25zKSxcbiAgICAgICAgICAgIHRpdGxlOiBsYXllck9wdGlvbnMudGl0bGUsXG4gICAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXG4gICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgICBvcHRpb25zOiBsYXllck9wdGlvbnNcbiAgICAgICAgICB9IGFzIENhdGFsb2dJdGVtTGF5ZXI7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnY2F0YWxvZy5ncm91cC5iYXNlbGF5ZXJzJyxcbiAgICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcbiAgICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcbiAgICAgICAgICAgIHRpdGxlOiBjYXRhbG9nLnRpdGxlLFxuICAgICAgICAgICAgaXRlbXNcbiAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENhdGFsb2dCYXNlTGF5ZXJzT3B0aW9ucyhcbiAgICBjYXRhbG9nOiBDYXRhbG9nXG4gICk6IE9ic2VydmFibGU8TGF5ZXJPcHRpb25zW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxMYXllck9wdGlvbnNbXT4oY2F0YWxvZy51cmwpO1xuICB9XG5cbiAgbG9hZENhdGFsb2dXTVNMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBDYXRhbG9nSXRlbVtdID0gW107XG4gICAgICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZSAmJlxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0ICYmXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3QubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIGNhdGFsb2cuYWJzdHJhY3QgPSBjYXBhYmlsaXRpZXMuU2VydmljZS5BYnN0cmFjdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaW5hbExheWVycyA9IFtdO1xuICAgICAgICB0aGlzLmZsYXR0ZW5XbXNDYXBhYmlsaXRpZXMoXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLkNhcGFiaWxpdHkuTGF5ZXIsXG4gICAgICAgICAgMCxcbiAgICAgICAgICBmaW5hbExheWVycyxcbiAgICAgICAgICBjYXRhbG9nLmdyb3VwU2VwYXJhdG9yXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllc0NhcGFiaWxpdHlMYXllciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLkNhcGFiaWxpdHkuTGF5ZXJcbiAgICAgICAgKTtcbiAgICAgICAgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLkxheWVyID0gZmluYWxMYXllcnMuZmlsdGVyKFxuICAgICAgICAgIChmKSA9PiBmLkxheWVyLmxlbmd0aCAhPT0gMFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmluY2x1ZGVSZWN1cnNpdmVJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXNDYXBhYmlsaXR5TGF5ZXIsIGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlJyxcbiAgICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlVGl0bGUnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB7IHZhbHVlOiBjYXRhbG9nLnRpdGxlIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZmxhdHRlbldtc0NhcGFiaWxpdGllcyhwYXJlbnQsIGxldmVsID0gMCwgZmluYWxMYXllcnMsIHNlcGFyYXRvciA9ICcgLyAnKSB7XG4gICAgaWYgKCFmaW5hbExheWVycy5pbmNsdWRlcyhwYXJlbnQuVGl0bGUpKSB7XG4gICAgICBjb25zdCBtb2RpZmllZFBhcmVudCA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudCk7XG4gICAgICBtb2RpZmllZFBhcmVudC5MYXllciA9IFtdO1xuICAgICAgZmluYWxMYXllcnMucHVzaChtb2RpZmllZFBhcmVudCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgcGFyZW50LkxheWVyKSB7XG4gICAgICBjb25zdCBtb2RpZmllZExheWVyID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5ZXIpO1xuICAgICAgaWYgKGxldmVsID4gMCkge1xuICAgICAgICBtb2RpZmllZExheWVyLlRpdGxlID0gcGFyZW50LlRpdGxlICsgc2VwYXJhdG9yICsgbGF5ZXIuVGl0bGU7XG4gICAgICB9XG4gICAgICBpZiAobGF5ZXIuTGF5ZXIpIHtcbiAgICAgICAgdGhpcy5mbGF0dGVuV21zQ2FwYWJpbGl0aWVzKFxuICAgICAgICAgIG1vZGlmaWVkTGF5ZXIsXG4gICAgICAgICAgbGV2ZWwgKyAxLFxuICAgICAgICAgIGZpbmFsTGF5ZXJzLFxuICAgICAgICAgIHNlcGFyYXRvclxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluYWxMYXllcnMuZmluZCgoZmYpID0+IGZmLlRpdGxlID09PSBwYXJlbnQuVGl0bGUpLkxheWVyLnB1c2gobGF5ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxvYWRDYXRhbG9nV01UU0xheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLmdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZykucGlwZShcbiAgICAgIG1hcCgoY2FwYWJpbGl0aWVzOiBhbnkpID0+IHRoaXMuZ2V0V01UU0l0ZW1zKGNhdGFsb2csIGNhcGFiaWxpdGllcykpXG4gICAgKTtcbiAgfVxuXG4gIGxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFyY0dJU1JFU1RJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbG9hZENhdGFsb2dDb21wb3NpdGVMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcbiAgICBjb25zdCBjb21wb3NpdGVDYXRhbG9nID0gKGNhdGFsb2cgYXMgQ29tcG9zaXRlQ2F0YWxvZykuY29tcG9zaXRlO1xuXG4gICAgY29uc3QgY2F0YWxvZ3NGcm9tSW5zdGFuY2UgPSBbXSBhcyBDYXRhbG9nW107XG4gICAgY29tcG9zaXRlQ2F0YWxvZy5tYXAoKGNvbXBvbmVudDogQ2F0YWxvZykgPT4ge1xuICAgICAgY29tcG9uZW50LnNvcnREaXJlY3Rpb24gPSBjYXRhbG9nLnNvcnREaXJlY3Rpb247IC8vIHByb3BhZ2F0ZSBzb3J0RGlyZWN0aW9uIHdpdGggcGFyZW50IHZhbHVlXG4gICAgICBjYXRhbG9nc0Zyb21JbnN0YW5jZS5wdXNoKFxuICAgICAgICBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY29tcG9uZW50LCB0aGlzKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIGdldCBDYXRhbG9nSXRlbXMgZm9yIGVhY2ggb3JpZ2luYWwgQ2F0YWxvZy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgcmVxdWVzdDEkID0gW107XG4gICAgY2F0YWxvZ3NGcm9tSW5zdGFuY2UubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+XG4gICAgICByZXF1ZXN0MSQucHVzaChjb21wb25lbnQuY29sbGVjdENhdGFsb2dJdGVtcygpKVxuICAgICk7XG5cbiAgICAvLyBpbnRlZ3JhdGUgaW1wb3NlZCBncm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGxldCByZXF1ZXN0MiQgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGZsYXREZWVwTGF5ZXIoYXJyKSB7XG4gICAgICByZXR1cm4gYXJyLnJlZHVjZShcbiAgICAgICAgKGFjYywgdmFsKSA9PlxuICAgICAgICAgIGFjYy5jb25jYXQoXG4gICAgICAgICAgICB2YWwudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwID8gZmxhdERlZXBMYXllcih2YWwuaXRlbXMpIDogdmFsXG4gICAgICAgICAgKSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMoY29tcG9zaXRlQ2F0YWxvZykuZmluZCgoaykgPT4gY29tcG9zaXRlQ2F0YWxvZ1trXS5ncm91cEltcG9zZSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHB1c2hJbXBvc2VHcm91cCA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjID0gY2F0YWxvZ3NGcm9tSW5zdGFuY2VbaW5kZXhdO1xuICAgICAgICBjb25zdCBvdXRHcm91cEltcG9zZSA9IE9iamVjdC5hc3NpZ24oe30sIGMuZ3JvdXBJbXBvc2UpO1xuICAgICAgICBvdXRHcm91cEltcG9zZS5hZGRyZXNzID0gYy5pZDtcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UudHlwZSA9IENhdGFsb2dJdGVtVHlwZS5Hcm91cDtcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuZXh0ZXJuYWxQcm92aWRlciA9IGMuZXh0ZXJuYWxQcm92aWRlcjtcbiAgICAgICAgaWYgKG91dEdyb3VwSW1wb3NlLnNvcnREaXJlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dEdyb3VwSW1wb3NlLnNvcnREaXJlY3Rpb24gPSBjLnNvcnREaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuaXRlbXMgPSBbXTtcblxuICAgICAgICBjb25zdCBmbGF0TGF5ZXIgPSBmbGF0RGVlcExheWVyKGl0ZW0pO1xuICAgICAgICBmbGF0TGF5ZXIubWFwKFxuICAgICAgICAgICh2KSA9PiAodi5hZGRyZXNzID0gYCR7b3V0R3JvdXBJbXBvc2UuYWRkcmVzc30uJHtvdXRHcm91cEltcG9zZS5pZH1gKVxuICAgICAgICApO1xuICAgICAgICBvdXRHcm91cEltcG9zZS5pdGVtcyA9IGZsYXRMYXllcjtcblxuICAgICAgICByZXR1cm4gb3V0R3JvdXBJbXBvc2U7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0MiQgPSByZXF1ZXN0MSQubWFwKChvYnMsIGlkeCkgPT5cbiAgICAgICAgb2JzLnBpcGUoXG4gICAgICAgICAgbWFwKChpdGVtcykgPT5cbiAgICAgICAgICAgIGNvbXBvc2l0ZUNhdGFsb2dbaWR4XS5ncm91cEltcG9zZVxuICAgICAgICAgICAgICA/IHB1c2hJbXBvc2VHcm91cChpdGVtcywgaWR4KVxuICAgICAgICAgICAgICA6IGl0ZW1zXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0MiQgPSByZXF1ZXN0MSQ7XG4gICAgfVxuXG4gICAgLy8gY29uY2F0IEdyb3VwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgcmVxdWVzdDMkID0gemlwKC4uLnJlcXVlc3QyJCkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG91dHB1dDogQ2F0YWxvZ0l0ZW1bXSkgPT4gW10uY29uY2F0KC4uLm91dHB1dCkgLy8gW10uY29uY2F0LmFwcGx5KFtdLCByZXN1bHQxXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIG1lcmdlIEdyb3VwIChmaXJzdCBsZXZlbCBvbmx5KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdyb3VwQnlHcm91cElkID0gKGRhdGEsIGtleUZuKSA9PlxuICAgICAgZGF0YS5yZWR1Y2UoKGFjYywgZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBJZCA9IGtleUZuKGdyb3VwKTtcbiAgICAgICAgY29uc3QgaW5kID0gYWNjLmZpbmQoKHgpID0+IHguaWQgPT09IGdyb3VwSWQpO1xuXG4gICAgICAgIGlmICghaW5kKSB7XG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gZ3JvdXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaXggPSBhY2MuaW5kZXhPZihpbmQpO1xuICAgICAgICAgIGlmIChhY2NbaXhdLmFkZHJlc3Muc3BsaXQoJ3wnKS5pbmRleE9mKGdyb3VwLmFkZHJlc3MpID09PSAtMSkge1xuICAgICAgICAgICAgYWNjW2l4XS5hZGRyZXNzID0gYCR7YWNjW2l4XS5hZGRyZXNzfXwke2dyb3VwLmFkZHJlc3N9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjW2l4XS5pdGVtcy5wdXNoKC4uLmdyb3VwLml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuXG4gICAgLy8gbWVyZ2UgTGF5ZXIgZm9yIGVhY2ggTGV2ZWwgKGNhdGFsb2csIGdyb3VwKHJlY3Vyc2l2ZSkpXG4gICAgY29uc3QgcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyA9IChpdGVtcywga2V5Rm4pID0+XG4gICAgICBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSwgaWR4LCBhcnIpID0+IHtcbiAgICAgICAgY29uc3QgbGF5ZXJUaXRsZSA9IGtleUZuKGl0ZW0pO1xuICAgICAgICBjb25zdCBvdXRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XG5cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyKSB7XG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgc2FtZSBhZGRyZXNzID0+IHJlc3VsdDogb25seSBvbmUgaXRlbSBpcyBrZXB0XG5cbiAgICAgICAgICAvLyBzYW1lIHRpdGxlLCBhZGRyZXNzIGRpZmZcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hUaXRsZSA9IFtdO1xuICAgICAgICAgIGNvbnN0IGluZGljZXNNYXRjaE5ld01ldGFkYXRhVXJsID0gW107IC8vIG1ldGFkYXRhXG4gICAgICAgICAgY29uc3QgZGlmZkFkZHJlc3MgPSBhcnIuZmlsdGVyKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICBsZXQgYkluZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHgudGl0bGUgPT09IGxheWVyVGl0bGUgJiYgeC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIpIHtcbiAgICAgICAgICAgICAgaWYgKGkgIT09IGlkeCAmJiB4LmFkZHJlc3MgIT09IGl0ZW0uYWRkcmVzcykge1xuICAgICAgICAgICAgICAgIGJJbmQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluZGljZXNNYXRjaFRpdGxlLnB1c2goaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYkluZDtcbiAgICAgICAgICB9KTsgLy8gJCYgaSAhPT0gaWR4XG5cbiAgICAgICAgICBpZiAoZGlmZkFkZHJlc3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IG5Qb3NpdGlvbiA9IGluZGljZXNNYXRjaFRpdGxlLmZpbmRJbmRleCgoeCkgPT4geCA9PT0gaWR4KSArIDE7XG4gICAgICAgICAgICBvdXRJdGVtLnRpdGxlID0gYCR7aXRlbS50aXRsZX0gKCR7blBvc2l0aW9ufSlgOyAvLyBzb3VyY2U6ICR7aXRlbS5hZGRyZXNzLnNwbGl0KCcuJylbMF19XG4gICAgICAgICAgICBuUG9zaXRpb24gPVxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hOZXdNZXRhZGF0YVVybC5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xuICAgICAgICAgICAgb3V0SXRlbS5uZXdNZXRhZGF0YVVybCA9IGAke2l0ZW0ubmV3TWV0YWRhdGFVcmx9ICgke25Qb3NpdGlvbn0pYDsgLy8gc291cmNlOiAke2l0ZW0uYWRkcmVzcy5zcGxpdCgnLicpWzBdfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV4aXN0ID0gYWNjLmZpbmQoXG4gICAgICAgICAgICAoeCkgPT4geC50aXRsZSA9PT0gb3V0SXRlbS50aXRsZSAmJiB4LnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllclxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFleGlzdCkge1xuICAgICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gb3V0SXRlbTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuR3JvdXApIHtcbiAgICAgICAgICBvdXRJdGVtLml0ZW1zID0gcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyhcbiAgICAgICAgICAgIGl0ZW0uaXRlbXMsXG4gICAgICAgICAgICAobGF5ZXIpID0+IGxheWVyLnRpdGxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBvdXRJdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHJlcXVlc3Q0JCA9IHJlcXVlc3QzJC5waXBlKFxuICAgICAgbWFwKChvdXRwdXQpID0+IGdyb3VwQnlHcm91cElkKG91dHB1dCwgKGdyb3VwKSA9PiBncm91cC5pZCkpLFxuICAgICAgbWFwKChvdXRwdXQpID0+IFtdLmNvbmNhdCguLi5vdXRwdXQpKSxcbiAgICAgIG1hcCgoZGF0YSkgPT4gcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyhkYXRhLCAobGF5ZXIpID0+IGxheWVyLnRpdGxlKSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlcXVlc3Q0JDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlIGFzIHN0cmluZ107XG4gICAgcmV0dXJuIHRoaXMuY2FwYWJpbGl0aWVzU2VydmljZVxuICAgICAgLmdldENhcGFiaWxpdGllcyhzVHlwZSBhcyBhbnksIGNhdGFsb2cudXJsLCBjYXRhbG9nLnZlcnNpb24pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICBjYXRhbG9nLnRpdGxlXG4gICAgICAgICAgICAgID8gJ2lnby5nZW8uY2F0YWxvZy51bmF2YWlsYWJsZSdcbiAgICAgICAgICAgICAgOiAnaWdvLmdlby5jYXRhbG9nLnNvbWVVbmF2YWlsYWJsZScsXG4gICAgICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlVGl0bGUnLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2F0YWxvZy50aXRsZSA/IHsgdmFsdWU6IGNhdGFsb2cudGl0bGUgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVGb3JjZWRQcm9wZXJ0aWVzKFxuICAgIGxheWVyTmFtZUZyb21DYXRhbG9nOiBzdHJpbmcsXG4gICAgZm9yY2VkUHJvcGVydGllczogRm9yY2VkUHJvcGVydHlbXVxuICApOiBGb3JjZWRQcm9wZXJ0eSB7XG4gICAgaWYgKCFmb3JjZWRQcm9wZXJ0aWVzIHx8IGZvcmNlZFByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJldHVyblByb3BlcnR5OiBGb3JjZWRQcm9wZXJ0eSA9IHtcbiAgICAgIGxheWVyTmFtZTogbGF5ZXJOYW1lRnJvbUNhdGFsb2csXG4gICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgbWV0YWRhdGFVcmw6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGFkYXRhQWJzdHJhY3Q6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGFkYXRhQWJzdHJhY3RBbGw6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGFkYXRhVXJsQWxsOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIC8vcHJvY2VzcyB3aWxkY2FyZCBiZWZvcmVcbiAgICAvLyBpZiB0aGVyZSBpcyBhICogd2lsZGNhcmRcbiAgICBjb25zdCBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzID0gZm9yY2VkUHJvcGVydGllcy5maW5kKFxuICAgICAgKGYpID0+IGYubGF5ZXJOYW1lID09PSAnKidcbiAgICApO1xuICAgIGlmIChmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzKSB7XG4gICAgICAvLyBtZXRhZGF0YUFic3RyYWN0QWxsXG4gICAgICBpZiAoZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YUFic3RyYWN0QWxsKSB7XG4gICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3RBbGwgPVxuICAgICAgICAgIGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFBYnN0cmFjdEFsbDtcbiAgICAgIH1cbiAgICAgIC8vIG1ldGFkYXRhVXJsQWxsXG4gICAgICBpZiAoZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YVVybEFsbCkge1xuICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YVVybEFsbCA9XG4gICAgICAgICAgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YVVybEFsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yY2VkUHJvcGVydGllcy5tYXAoKGZvcmNlZFByb3BlcnR5KSA9PiB7XG4gICAgICAvLyBpZiBtYXRjaCBmb3VuZFxuICAgICAgaWYgKGxheWVyTmFtZUZyb21DYXRhbG9nID09PSBmb3JjZWRQcm9wZXJ0eS5sYXllck5hbWUpIHtcbiAgICAgICAgLy8gdGl0bGVcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5LnRpdGxlKSB7XG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkudGl0bGUgPSBmb3JjZWRQcm9wZXJ0eS50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtZXRhZGF0YVVybFxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkubWV0YWRhdGFVcmwpIHtcbiAgICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YVVybCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ldGFkYXRhQWJzdHJhY3RcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3QpIHtcbiAgICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0ID0gZm9yY2VkUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXR1cm5Qcm9wZXJ0eTtcbiAgfVxuXG4gIC8vLyBXTVNcblxuICBwcml2YXRlIHByZXBhcmVDYXRhbG9nSXRlbUxheWVyKGxheWVyLCBpZFBhcmVudCwgbGF5ZXJzUXVlcnlGb3JtYXQsIGNhdGFsb2cpIHtcbiAgICBjb25zdCBjb25maWd1cmVkUXVlcnlGb3JtYXQgPSB0aGlzLnJldHJpZXZlTGF5ZXJJbmZvRm9ybWF0KFxuICAgICAgbGF5ZXIuTmFtZSxcbiAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0XG4gICAgKTtcblxuICAgIGNvbnN0IGxlZ2VuZE9wdGlvbnMgPVxuICAgICAgY2F0YWxvZy5zaG93TGVnZW5kICYmIGxheWVyLlN0eWxlXG4gICAgICAgID8gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlLmdldFN0eWxlKGxheWVyLlN0eWxlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGNhdGFsb2cucXVlcnlQYXJhbXMsIHtcbiAgICAgIExBWUVSUzogbGF5ZXIuTmFtZSxcbiAgICAgIFZFUlNJT046IGNhdGFsb2cudmVyc2lvblxuICAgIH0gYXMgV01TRGF0YVNvdXJjZU9wdGlvbnNQYXJhbXMpO1xuXG4gICAgY29uc3QgYmFzZVNvdXJjZU9wdGlvbnMgPSB7XG4gICAgICB0eXBlOiAnd21zJyxcbiAgICAgIHVybDogY2F0YWxvZy51cmwsXG4gICAgICBjcm9zc09yaWdpbjogY2F0YWxvZy5zZXRDcm9zc09yaWdpbkFub255bW91cyA/ICdhbm9ueW1vdXMnIDogdW5kZWZpbmVkLFxuICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCxcbiAgICAgIHF1ZXJ5SHRtbFRhcmdldDpcbiAgICAgICAgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID09PSBRdWVyeUZvcm1hdC5IVE1MIHx8XG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTEdNTDJcbiAgICAgICAgICA/ICdpZnJhbWUnXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXG4gICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnMsXG4gICAgICB7IHBhcmFtcyB9XG4gICAgKSBhcyBXTVNEYXRhU291cmNlT3B0aW9ucztcblxuICAgIGNvbnN0IHByb3BlcnRpZXNUb0ZvcmNlID0gdGhpcy5jb21wdXRlRm9yY2VkUHJvcGVydGllcyhcbiAgICAgIGxheWVyLk5hbWUsXG4gICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcbiAgICApO1xuICAgIGxldCBiYXNlQWJzdHJhY3Q7XG4gICAgbGV0IGV4dGVybiA9IHRydWU7XG4gICAgaWYgKGxheWVyLkFic3RyYWN0KSB7XG4gICAgICBiYXNlQWJzdHJhY3QgPSBsYXllci5BYnN0cmFjdDtcbiAgICB9IGVsc2UgaWYgKCFsYXllci5BYnN0cmFjdCAmJiBjYXRhbG9nLmFic3RyYWN0KSB7XG4gICAgICBiYXNlQWJzdHJhY3QgPSBjYXRhbG9nLmFic3RyYWN0O1xuICAgIH1cbiAgICBjb25zdCBsYXllck9ubGluZVJlc291cmNlID1cbiAgICAgIGxheWVyPy5EYXRhVVJMICYmIGxheWVyPy5EYXRhVVJMLmxlbmd0aCA+IDBcbiAgICAgICAgPyBsYXllcj8uRGF0YVVSTFswXS5PbmxpbmVSZXNvdXJjZVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGxldCBtZXRhZGF0YVVybCA9XG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHxcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCB8fFxuICAgICAgbGF5ZXJPbmxpbmVSZXNvdXJjZTtcbiAgICBsZXQgbWV0YWRhdGFBYnN0cmFjdCA9XG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwgfHxcbiAgICAgIGJhc2VBYnN0cmFjdDtcblxuICAgIGlmIChcbiAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcbiAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcbiAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxuICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcbiAgICApIHtcbiAgICAgIGV4dGVybiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXG4gICAgKSB7XG4gICAgICBleHRlcm4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXllclByZXBhcmUgPSB7XG4gICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxuICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxuICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZSA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlIDogbGF5ZXIuVGl0bGUsXG4gICAgICBhZGRyZXNzOiBpZFBhcmVudCxcbiAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlciB8fCBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbWF4UmVzb2x1dGlvbjogZ2V0UmVzb2x1dGlvbkZyb21TY2FsZShsYXllci5NYXhTY2FsZURlbm9taW5hdG9yKSxcbiAgICAgICAgbWluUmVzb2x1dGlvbjogZ2V0UmVzb2x1dGlvbkZyb21TY2FsZShsYXllci5NaW5TY2FsZURlbm9taW5hdG9yKSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxuICAgICAgICAgIGV4dGVybixcbiAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcbiAgICAgICAgICB0eXBlOiBiYXNlU291cmNlT3B0aW9ucy50eXBlXG4gICAgICAgIH0sXG4gICAgICAgIGxlZ2VuZE9wdGlvbnMsXG4gICAgICAgIHRvb2x0aXA6IHsgdHlwZTogY2F0YWxvZy50b29sdGlwVHlwZSB9LFxuICAgICAgICBzb3VyY2VPcHRpb25zXG4gICAgICB9XG4gICAgfSBhcyBDYXRhbG9nSXRlbTtcblxuICAgIHJldHVybiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQobGF5ZXJQcmVwYXJlKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXG4gICAgaXRlbUxpc3RJbixcbiAgICByZWdleGVzLFxuICAgIGlkR3JvdXAsXG4gICAgbGF5ZXJzUXVlcnlGb3JtYXQsXG4gICAgY2F0YWxvZ1xuICApIHtcbiAgICBjb25zdCBncm91cFByZXBhcmUgPSB7XG4gICAgICBpZDogaWRHcm91cCxcbiAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcbiAgICAgIHRpdGxlOiBpdGVtTGlzdEluLlRpdGxlLFxuICAgICAgYWRkcmVzczogY2F0YWxvZy5pZCxcbiAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlciB8fCBmYWxzZSxcbiAgICAgIHNvcnREaXJlY3Rpb246IGNhdGFsb2cuc29ydERpcmVjdGlvbiwgLy8gcHJvcGFnYXRlIHNvcnREaXJlY3Rpb25cbiAgICAgIGl0ZW1zOiBpdGVtTGlzdEluLkxheWVyLnJlZHVjZSgoaXRlbXM6IENhdGFsb2dJdGVtW10sIGxheWVyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGxheWVyLkxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyByZWN1cnNpdmUsIGNoZWNrIG5leHQgbGV2ZWxcbiAgICAgICAgICBjb25zdCBpZEdyb3VwSXRlbU5leHRMZXZlbCA9XG4gICAgICAgICAgICBpZEdyb3VwICsgYC5ncm91cC4ke2xheWVyLk5hbWUgfHwgbGF5ZXIuTGF5ZXJbMF0uTmFtZX1gO1xuICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbTogQ2F0YWxvZ0l0ZW1Hcm91cCA9IHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXG4gICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgIHJlZ2V4ZXMsXG4gICAgICAgICAgICBpZEdyb3VwSXRlbU5leHRMZXZlbCxcbiAgICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LFxuICAgICAgICAgICAgY2F0YWxvZ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpdGVtcy5wdXNoKGdyb3VwSXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhsYXllci5OYW1lLCByZWdleGVzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsYXllckl0ZW06IENhdGFsb2dJdGVtTGF5ZXI8SW1hZ2VMYXllck9wdGlvbnM+ID1cbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtTGF5ZXIoXG4gICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICBpZEdyb3VwLFxuICAgICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcbiAgICAgICAgICAgICAgY2F0YWxvZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGl0ZW1zLnB1c2gobGF5ZXJJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9LCBbXSlcbiAgICB9O1xuICAgIHJldHVybiBncm91cFByZXBhcmU7XG4gIH1cblxuICBwcml2YXRlIGluY2x1ZGVSZWN1cnNpdmVJdGVtcyhcbiAgICBjYXRhbG9nOiBDYXRhbG9nLFxuICAgIGl0ZW1MaXN0SW46IGFueSxcbiAgICBpdGVtc1ByZXBhcmU6IENhdGFsb2dJdGVtW10sXG4gICAgbG9vcExldmVsOiBudW1iZXIgPSAwXG4gICkge1xuICAgIC8vIERpZyBhbGwgbGV2ZWxzIHVudGlsIGxhc3QgbGV2ZWwgKGxheWVyIG9iamVjdCBhcmUgbm90IGRlZmluZWQgb24gbGFzdCBsZXZlbClcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxuICAgICk7XG4gICAgaWYgKCFpdGVtTGlzdEluLkxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1MaXN0SW4uTGF5ZXIpIHtcbiAgICAgIGlmIChpdGVtLkxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlLCBjaGVjayBuZXh0IGxldmVsXG4gICAgICAgIHRoaXMuaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKGNhdGFsb2csIGl0ZW0sIGl0ZW1zUHJlcGFyZSwgbG9vcExldmVsICsgMSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdCA9IHRoaXMuZmluZENhdGFsb2dJbmZvRm9ybWF0KGNhdGFsb2cpO1xuXG4gICAgICAvLyBncm91cCh3aXRoIGxheWVycykgYW5kIGxheWVyKHdpdGhvdXQgZ3JvdXApIGxldmVsIDFcbiAgICAgIGlmIChsb29wTGV2ZWwgIT09IDApIHtcbiAgICAgICAgLy8gVE9ETzogU2xpY2UgdGhhdCBpbnRvIG11bHRpcGxlIG1ldGhvZHNcbiAgICAgICAgLy8gRGVmaW5lIG9iamVjdCBvZiBncm91cCBsYXllclxuICAgICAgICBjb25zdCBpZEdyb3VwSXRlbSA9IGBjYXRhbG9nLmdyb3VwLiR7aXRlbUxpc3RJbi5OYW1lIHx8IGl0ZW0uTmFtZX1gO1xuICAgICAgICBjb25zdCBncm91cEl0ZW0gPSB0aGlzLnByZXBhcmVDYXRhbG9nSXRlbUdyb3VwKFxuICAgICAgICAgIGl0ZW1MaXN0SW4sXG4gICAgICAgICAgcmVnZXhlcyxcbiAgICAgICAgICBpZEdyb3VwSXRlbSxcbiAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcbiAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGdyb3VwSXRlbS5pdGVtcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChncm91cEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGdyb3VwIChkb24ndCBhZGQgYSBncm91cCBvZiBsYXllciBmb3IgZWFjaCBvZiB0aGVpciBsYXllciEpXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGF5ZXIgd2l0aG91dCBncm91cFxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGl0ZW0uTmFtZSwgcmVnZXhlcykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBjYXRhbG9nLmlkLFxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXG4gICAgICAgICAgICBjYXRhbG9nXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChsYXllckl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8vIFdNVFNcblxuICBwcml2YXRlIGdldFdNVFNJdGVtcyhcbiAgICBjYXRhbG9nLFxuICAgIGNhcGFiaWxpdGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICApOiBDYXRhbG9nSXRlbUxheWVyW10ge1xuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGxheWVycyA9IGNhcGFiaWxpdGllcy5Db250ZW50cy5MYXllcjtcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uICYmXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0ICYmXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0Lmxlbmd0aFxuICAgICkge1xuICAgICAgY2F0YWxvZy5hYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24uQWJzdHJhY3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVyc1xuICAgICAgLm1hcCgobGF5ZXI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXG4gICAgICAgICAgbGF5ZXIuVGl0bGUsXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXG4gICAgICAgICk7XG4gICAgICAgIGxldCBleHRlcm4gPSB0cnVlO1xuXG4gICAgICAgIGxldCBtZXRhZGF0YVVybCA9XG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsIHx8IHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbDtcbiAgICAgICAgbGV0IG1ldGFkYXRhQWJzdHJhY3QgPVxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwgfHxcbiAgICAgICAgICBjYXRhbG9nLmFic3RyYWN0O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsICYmXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxuICAgICAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxuICAgICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwpXG4gICAgICAgICkge1xuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbFxuICAgICAgICApIHtcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRlc3RMYXllclJlZ2V4ZXMobGF5ZXIuSWRlbnRpZmllciwgcmVnZXhlcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBjYXRhbG9nLnF1ZXJ5UGFyYW1zLCB7XG4gICAgICAgICAgdmVyc2lvbjogJzEuMC4wJ1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYmFzZVNvdXJjZU9wdGlvbnMgPSB7XG4gICAgICAgICAgdHlwZTogJ3dtdHMnLFxuICAgICAgICAgIHVybDogY2F0YWxvZy51cmwsXG4gICAgICAgICAgY3Jvc3NPcmlnaW46IGNhdGFsb2cuc2V0Q3Jvc3NPcmlnaW5Bbm9ueW1vdXNcbiAgICAgICAgICAgID8gJ2Fub255bW91cydcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGxheWVyOiBsYXllci5JZGVudGlmaWVyLFxuICAgICAgICAgIG1hdHJpeFNldDogY2F0YWxvZy5tYXRyaXhTZXQsXG4gICAgICAgICAgb3B0aW9uc0Zyb21DYXBhYmlsaXRpZXM6IHRydWUsXG4gICAgICAgICAgcmVxdWVzdEVuY29kaW5nOiBjYXRhbG9nLnJlcXVlc3RFbmNvZGluZyB8fCAnS1ZQJyxcbiAgICAgICAgICBzdHlsZTogJ2RlZmF1bHQnXG4gICAgICAgIH0gYXMgV01UU0RhdGFTb3VyY2VPcHRpb25zO1xuICAgICAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBiYXNlU291cmNlT3B0aW9ucyxcbiAgICAgICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnMsXG4gICAgICAgICAgeyBwYXJhbXMgfVxuICAgICAgICApIGFzIFdNVFNEYXRhU291cmNlT3B0aW9ucztcblxuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcbiAgICAgICAgICB0aXRsZTogcHJvcGVydGllc1RvRm9yY2U/LnRpdGxlXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXG4gICAgICAgICAgICA6IGxheWVyLlRpdGxlLFxuICAgICAgICAgIGFkZHJlc3M6IGNhdGFsb2cuaWQsXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxuICAgICAgICAgICAgICBleHRlcm4sXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxuICAgICAgICAgICAgICB0eXBlOiBiYXNlU291cmNlT3B0aW9ucy50eXBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGFzIENhdGFsb2dJdGVtKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcmNHSVNSRVNUSXRlbXMoXG4gICAgY2F0YWxvZzogQ2F0YWxvZyxcbiAgICBjYXBhYmlsaXRpZXNcbiAgKTogQ2F0YWxvZ0l0ZW1MYXllcltdIHtcbiAgICBpZiAoIWNhcGFiaWxpdGllcyB8fCAhY2FwYWJpbGl0aWVzLmxheWVycykge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxuICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlVGl0bGUnXG4gICAgICApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBncm91cHM6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllcltdID0gIWNhcGFiaWxpdGllcy5sYXllcnNcbiAgICAgID8gW11cbiAgICAgIDogY2FwYWJpbGl0aWVzLmxheWVycy5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5zdWJMYXllcklkcyk7XG4gICAgY29uc3QgbGF5ZXJzOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJbXSA9ICFjYXBhYmlsaXRpZXMubGF5ZXJzXG4gICAgICA/IFtdXG4gICAgICA6IGNhcGFiaWxpdGllcy5sYXllcnMuZmlsdGVyKFxuICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICFsYXllci50eXBlIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlcy5GZWF0dXJlTGF5ZXIgfHxcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzLlJhc3RlckxheWVyXG4gICAgICAgICk7XG5cbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxuICAgICk7XG5cbiAgICBsZXQgYWJzdHJhY3Q7XG4gICAgaWYgKFxuICAgICAgY2FwYWJpbGl0aWVzLnNlcnZpY2VEZXNjcmlwdGlvbiAmJlxuICAgICAgY2FwYWJpbGl0aWVzLnNlcnZpY2VEZXNjcmlwdGlvbi5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gLyg8KFtePl0rKT4pL2dpO1xuICAgICAgYWJzdHJhY3QgPSBjYXBhYmlsaXRpZXMuc2VydmljZURlc2NyaXB0aW9uLnJlcGxhY2UocmVnZXgsICcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtczogQ2F0YWxvZ0l0ZW1MYXllcltdID0gbGF5ZXJzXG4gICAgICAubWFwKChsYXllcjogQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0ZvcmNlID0gdGhpcy5jb21wdXRlRm9yY2VkUHJvcGVydGllcyhcbiAgICAgICAgICBsYXllci5uYW1lLFxuICAgICAgICAgIGNhdGFsb2cuZm9yY2VkUHJvcGVydGllc1xuICAgICAgICApO1xuICAgICAgICBsZXQgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcbiAgICAgICAgbGV0IGV4dGVybiA9IHRydWU7XG5cbiAgICAgICAgbGV0IG1ldGFkYXRhVXJsID1cbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHwgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsO1xuICAgICAgICBsZXQgbWV0YWRhdGFBYnN0cmFjdCA9XG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbCB8fFxuICAgICAgICAgIGJhc2VBYnN0cmFjdDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcbiAgICAgICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcbiAgICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxuICAgICAgICApIHtcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLmlkLnRvU3RyaW5nKCksIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZVNvdXJjZU9wdGlvbnM6IEFyY0dJU1Jlc3REYXRhU291cmNlT3B0aW9ucyAmXG4gICAgICAgICAgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgPSB7XG4gICAgICAgICAgdHlwZTogVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlXSBhcyBhbnksXG4gICAgICAgICAgdXJsOiBjYXRhbG9nLnVybCxcbiAgICAgICAgICBsYXllcjogbGF5ZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBxdWVyeWFibGU6IHRydWUsXG4gICAgICAgICAgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0LkVTUklKU09OLFxuICAgICAgICAgIG9wdGlvbnNGcm9tQ2FwYWJpbGl0aWVzOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnM6IEFyY0dJU1Jlc3REYXRhU291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXG4gICAgICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQoe1xuICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMoc291cmNlT3B0aW9ucyksXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxuICAgICAgICAgIHRpdGxlOiBwcm9wZXJ0aWVzVG9Gb3JjZT8udGl0bGVcbiAgICAgICAgICAgID8gcHJvcGVydGllc1RvRm9yY2UudGl0bGVcbiAgICAgICAgICAgIDogbGF5ZXIubmFtZSxcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgc291cmNlT3B0aW9ucyxcbiAgICAgICAgICAgIG1pblJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWF4U2NhbGUpLFxuICAgICAgICAgICAgbWF4UmVzb2x1dGlvbjogZ2V0UmVzb2x1dGlvbkZyb21TY2FsZShsYXllci5taW5TY2FsZSksXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxuICAgICAgICAgICAgICBleHRlcm4sXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxuICAgICAgICAgICAgICB0eXBlOiBjYXRhbG9nLnR5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW0pO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW06IENhdGFsb2dJdGVtTGF5ZXIgfCB1bmRlZmluZWQpID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGdyb3VwZWRJdGVtczogQ2F0YWxvZ0l0ZW1MYXllcltdID0gZ3JvdXBzXG4gICAgICAubWFwKChncm91cCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke2dyb3VwLm5hbWV9YCxcbiAgICAgICAgICBpZDogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxuICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBjYXRhbG9nLnNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgdGl0bGU6IGdyb3VwLm5hbWUsXG4gICAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICAgICAgICAuZmlsdGVyKChpKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YkxheWVySWRzU3RyID0gZ3JvdXAuc3ViTGF5ZXJJZHMubWFwKChyKSA9PiByLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICByZXR1cm4gc3ViTGF5ZXJJZHNTdHIuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgKGkub3B0aW9ucy5zb3VyY2VPcHRpb25zIGFzIEFyY0dJU1Jlc3REYXRhU291cmNlT3B0aW9ucykubGF5ZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKChpKSA9PiB7XG4gICAgICAgICAgICAgIGdyb3VwSGFuZGxlZExheWVyc0lkcy5wdXNoKGkuaWQpO1xuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaSwge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7Z3JvdXAubmFtZX1gXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChnKSA9PiBnLml0ZW1zLmxlbmd0aCk7XG5cbiAgICBpZiAoZ3JvdXBzKSB7XG4gICAgICBjb25zdCBUaXRsZU9ySWQgPSBjYXRhbG9nLnRpdGxlIHx8IGNhdGFsb2cuaWQ7XG4gICAgICBjb25zdCBub25IYW5kbGVkTGF5ZXJzID0gaXRlbXNcbiAgICAgICAgLmZpbHRlcigoaSkgPT4gIWdyb3VwSGFuZGxlZExheWVyc0lkcy5pbmNsdWRlcyhpLmlkKSlcbiAgICAgICAgLm1hcCgoaSkgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBpLCB7XG4gICAgICAgICAgICBhZGRyZXNzOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIGlmIChub25IYW5kbGVkTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBub25IYW5kbGVkR3JvdXAgPSB7XG4gICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxuICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7VGl0bGVPcklkfWAsXG4gICAgICAgICAgaWQ6IGBjYXRhbG9nLmdyb3VwLiR7VGl0bGVPcklkfWAsXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxuICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBjYXRhbG9nLnNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgdGl0bGU6IFRpdGxlT3JJZCxcbiAgICAgICAgICBpdGVtczogbm9uSGFuZGxlZExheWVyc1xuICAgICAgICB9O1xuICAgICAgICBncm91cGVkSXRlbXMucHVzaChub25IYW5kbGVkR3JvdXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cHMgPyBncm91cGVkSXRlbXMgOiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdGVzdExheWVyUmVnZXhlcyhsYXllck5hbWU6IHN0cmluZywgcmVnZXhlczogUmVnRXhwW10pOiBib29sZWFuIHtcbiAgICBpZiAocmVnZXhlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXhlcy5maW5kKChyZWdleDogUmVnRXhwKSA9PiByZWdleC50ZXN0KGxheWVyTmFtZSkpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlTGF5ZXJJbmZvRm9ybWF0KFxuICAgIGxheWVyTmFtZUZyb21DYXRhbG9nOiBzdHJpbmcsXG4gICAgbGF5ZXJzUXVlcnlGb3JtYXQ6IHsgbGF5ZXI6IHN0cmluZzsgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0IH1bXVxuICApOiBRdWVyeUZvcm1hdCB7XG4gICAgY29uc3QgY3VycmVudExheWVySW5mb0Zvcm1hdCA9IGxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoXG4gICAgICAoZikgPT4gZi5sYXllciA9PT0gbGF5ZXJOYW1lRnJvbUNhdGFsb2dcbiAgICApO1xuICAgIGNvbnN0IGJhc2VJbmZvRm9ybWF0ID0gbGF5ZXJzUXVlcnlGb3JtYXQuZmluZCgoZikgPT4gZi5sYXllciA9PT0gJyonKTtcbiAgICBsZXQgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0O1xuICAgIGlmIChjdXJyZW50TGF5ZXJJbmZvRm9ybWF0KSB7XG4gICAgICBxdWVyeUZvcm1hdCA9IGN1cnJlbnRMYXllckluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XG4gICAgfSBlbHNlIGlmIChiYXNlSW5mb0Zvcm1hdCkge1xuICAgICAgcXVlcnlGb3JtYXQgPSBiYXNlSW5mb0Zvcm1hdC5xdWVyeUZvcm1hdDtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5Rm9ybWF0O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ2F0YWxvZ0luZm9Gb3JtYXQoXG4gICAgY2F0YWxvZzogQ2F0YWxvZ1xuICApOiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W10ge1xuICAgIGNvbnN0IGxheWVyc1F1ZXJ5Rm9ybWF0OiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W10gPSBbXTtcbiAgICBpZiAoIWNhdGFsb2cucXVlcnlGb3JtYXQpIHtcbiAgICAgIHJldHVybiBsYXllcnNRdWVyeUZvcm1hdDtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoY2F0YWxvZy5xdWVyeUZvcm1hdCkuZm9yRWFjaCgoY29uZmlndXJlZEluZm9Gb3JtYXQpID0+IHtcbiAgICAgIGlmIChjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGNhdGFsb2cucXVlcnlGb3JtYXRbY29uZmlndXJlZEluZm9Gb3JtYXRdLmZvckVhY2goKGxheWVyTmFtZSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFsYXllcnNRdWVyeUZvcm1hdC5maW5kKChzcGVjaWZpYykgPT4gc3BlY2lmaWMubGF5ZXIgPT09IGxheWVyTmFtZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LnB1c2goe1xuICAgICAgICAgICAgICBsYXllcjogbGF5ZXJOYW1lLFxuICAgICAgICAgICAgICBxdWVyeUZvcm1hdDogY29uZmlndXJlZEluZm9Gb3JtYXQgYXMgUXVlcnlGb3JtYXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoXG4gICAgICAgICAgICAoc3BlY2lmaWMpID0+XG4gICAgICAgICAgICAgIHNwZWNpZmljLmxheWVyID09PSBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQucHVzaCh7XG4gICAgICAgICAgICBsYXllcjogY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0sXG4gICAgICAgICAgICBxdWVyeUZvcm1hdDogY29uZmlndXJlZEluZm9Gb3JtYXQgYXMgUXVlcnlGb3JtYXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBsYXllcnNRdWVyeUZvcm1hdDtcbiAgfVxufVxuXG5jbGFzcyBDYXRhbG9nRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zdGFuY2VDYXRhbG9nKFxuICAgIG9wdGlvbnM6IENhdGFsb2csXG4gICAgY2F0YWxvZ1NlcnZpY2U6IENhdGFsb2dTZXJ2aWNlXG4gICk6IENhdGFsb2cge1xuICAgIGxldCBjYXRhbG9nOiBDYXRhbG9nO1xuICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdjb21wb3NpdGUnKSkge1xuICAgICAgY2F0YWxvZyA9IG5ldyBDb21wb3NpdGVDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0NvbXBvc2l0ZUxheWVySXRlbXMoY2F0YWxvZylcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmJhc2VsYXllcnNdKSB7XG4gICAgICBjYXRhbG9nID0gbmV3IEJhc2VsYXllcnNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0Jhc2VMYXllckl0ZW1zKGNhdGFsb2cpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5hcmNnaXNyZXN0XSkge1xuICAgICAgY2F0YWxvZyA9IG5ldyBBcmNHSVNSZXN0Q2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dBcmNHSVNSZXN0SXRlbXMoY2F0YWxvZylcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLnRpbGVhcmNnaXNyZXN0XSkge1xuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICAoY2F0YWxvZzogQ2F0YWxvZykgPT5cbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcbiAgICAgICAgVHlwZUNhdGFsb2cudGlsZWFyY2dpc3Jlc3RcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmltYWdlYXJjZ2lzcmVzdF0pIHtcbiAgICAgIGNhdGFsb2cgPSBuZXcgVGlsZU9ySW1hZ2VBcmNHSVNSZXN0Q2F0YWxvZyhcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKGNhdGFsb2c6IENhdGFsb2cpID0+XG4gICAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dBcmNHSVNSZXN0SXRlbXMoY2F0YWxvZyksXG4gICAgICAgIFR5cGVDYXRhbG9nLmltYWdlYXJjZ2lzcmVzdFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cud210c10pIHtcbiAgICAgIGNhdGFsb2cgPSBuZXcgV01UU0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nV01UU0xheWVySXRlbXMoY2F0YWxvZylcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhdGFsb2cgPSBuZXcgV01TQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dXTVNMYXllckl0ZW1zKGNhdGFsb2cpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjYXRhbG9nO1xuICB9XG59XG4iXX0=
@@ -72,4 +72,4 @@ export class CompositeCatalog extends Catalog {
72
72
  return this._collectCatlogItems(this);
73
73
  }
74
74
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9jYXRhbG9nL3NoYXJlZC9jYXRhbG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUF5QixNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE3QyxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU87SUFHM0I7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxXQUFZLFNBQVEsT0FBTztJQUc1QjtJQUZWLFlBQ0UsT0FBZ0IsRUFDUixtQkFBMEM7UUFFbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRlAsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUdsRCxNQUFNLEtBQUssR0FBVyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLE9BQU87SUFHbEM7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxPQUFPO0lBR2xDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsT0FBTztJQUc5QztJQUZULFlBQ0UsT0FBZ0IsRUFDVCxtQkFBMEMsRUFDakQsV0FBd0I7UUFFeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSFIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUlqRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxPQUFPO0lBS2pDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBDYXRhbG9nLCBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm4gfSBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xyXG5pbXBvcnQgeyBUeXBlQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5lbnVtJztcclxuaW1wb3J0IHtcclxuICBDYXRhbG9nSXRlbSxcclxuICBDYXRhbG9nSXRlbUdyb3VwLFxyXG4gIElDYXRhbG9nLFxyXG4gIElDb21wb3NpdGVDYXRhbG9nXHJcbn0gZnJvbSAnLi9jYXRhbG9nLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgV01TQ2F0YWxvZyBleHRlbmRzIENhdGFsb2cge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcclxuICAgIHByaXZhdGUgX2NvbGxlY3RDYXRsb2dJdGVtczogQ29sbGVjdENhdGFsb2dJdGVtc0ZuXHJcbiAgKSB7XHJcbiAgICBzdXBlcihvcHRpb25zKTtcclxuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy53bXNdO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdNVFNDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLndtdHNdO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VsYXllcnNDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmJhc2VsYXllcnNdO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbUdyb3VwW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXJjR0lTUmVzdENhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIG9wdGlvbnM6IENhdGFsb2csXHJcbiAgICBwcml2YXRlIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGblxyXG4gICkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYXJjZ2lzcmVzdF07XHJcbiAgICB0aGlzLnR5cGUgPSBUeXBlQ2F0YWxvZ1tzVHlwZV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGlsZU9ySW1hZ2VBcmNHSVNSZXN0Q2F0YWxvZyBleHRlbmRzIENhdGFsb2cge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcclxuICAgIHB1YmxpYyBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm4sXHJcbiAgICB0eXBlQ2F0YWxvZzogVHlwZUNhdGFsb2dcclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2dbdHlwZUNhdGFsb2ddXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsZWN0Q2F0YWxvZ0l0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RDYXRsb2dJdGVtcyh0aGlzKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb21wb3NpdGVDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyBpbXBsZW1lbnRzIElDb21wb3NpdGVDYXRhbG9nIHtcclxuICBkZWNsYXJlIGNvbXBvc2l0ZTogSUNhdGFsb2dbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmNvbXBvc2l0ZV07XHJcbiAgICB0aGlzLnR5cGUgPSBUeXBlQ2F0YWxvZ1tzVHlwZV07XHJcbiAgICB0aGlzLnVybCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9jYXRhbG9nL3NoYXJlZC9jYXRhbG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUF5QixNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE3QyxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU87SUFHM0I7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxXQUFZLFNBQVEsT0FBTztJQUc1QjtJQUZWLFlBQ0UsT0FBZ0IsRUFDUixtQkFBMEM7UUFFbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRlAsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUdsRCxNQUFNLEtBQUssR0FBVyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLE9BQU87SUFHbEM7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxPQUFPO0lBR2xDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsT0FBTztJQUc5QztJQUZULFlBQ0UsT0FBZ0IsRUFDVCxtQkFBMEMsRUFDakQsV0FBd0I7UUFFeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSFIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUlqRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxPQUFPO0lBS2pDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENhdGFsb2csIENvbGxlY3RDYXRhbG9nSXRlbXNGbiB9IGZyb20gJy4vY2F0YWxvZy5hYnN0cmFjdCc7XG5pbXBvcnQgeyBUeXBlQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5lbnVtJztcbmltcG9ydCB7XG4gIENhdGFsb2dJdGVtLFxuICBDYXRhbG9nSXRlbUdyb3VwLFxuICBJQ2F0YWxvZyxcbiAgSUNvbXBvc2l0ZUNhdGFsb2dcbn0gZnJvbSAnLi9jYXRhbG9nLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBXTVNDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IENhdGFsb2csXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLndtc107XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RDYXRsb2dJdGVtcyh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV01UU0NhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIHtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcbiAgICBwcml2YXRlIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGblxuICApIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cud210c107XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RDYXRsb2dJdGVtcyh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmFzZWxheWVyc0NhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIHtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcbiAgICBwcml2YXRlIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGblxuICApIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYmFzZWxheWVyc107XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbUdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNHSVNSZXN0Q2F0YWxvZyBleHRlbmRzIENhdGFsb2cge1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxuICAgIHByaXZhdGUgX2NvbGxlY3RDYXRsb2dJdGVtczogQ29sbGVjdENhdGFsb2dJdGVtc0ZuXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5hcmNnaXNyZXN0XTtcbiAgICB0aGlzLnR5cGUgPSBUeXBlQ2F0YWxvZ1tzVHlwZV07XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IENhdGFsb2csXG4gICAgcHVibGljIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGbixcbiAgICB0eXBlQ2F0YWxvZzogVHlwZUNhdGFsb2dcbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2dbdHlwZUNhdGFsb2ddXTtcbiAgfVxuXG4gIHB1YmxpYyBjb2xsZWN0Q2F0YWxvZ0l0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvc2l0ZUNhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIGltcGxlbWVudHMgSUNvbXBvc2l0ZUNhdGFsb2cge1xuICBkZWNsYXJlIGNvbXBvc2l0ZTogSUNhdGFsb2dbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxuICAgIHByaXZhdGUgX2NvbGxlY3RDYXRsb2dJdGVtczogQ29sbGVjdENhdGFsb2dJdGVtc0ZuXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5jb21wb3NpdGVdO1xuICAgIHRoaXMudHlwZSA9IFR5cGVDYXRhbG9nW3NUeXBlXTtcbiAgICB0aGlzLnVybCA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xuICB9XG59XG4iXX0=
@@ -12,4 +12,4 @@ export var ArcGISRestCapabilitiesLayerTypes;
12
12
  ArcGISRestCapabilitiesLayerTypes["RasterLayer"] = "Raster Layer";
13
13
  ArcGISRestCapabilitiesLayerTypes["GroupLayer"] = "Group Layer";
14
14
  })(ArcGISRestCapabilitiesLayerTypes || (ArcGISRestCapabilitiesLayerTypes = {}));
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RhdGFzb3VyY2Uvc2hhcmVkL2NhcGFiaWxpdGllcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksZ0JBTVg7QUFORCxXQUFZLGdCQUFnQjtJQUMxQiwrQkFBVyxDQUFBO0lBQ1gsaUNBQWEsQ0FBQTtJQUNiLDJDQUF1QixDQUFBO0lBQ3ZCLGdEQUE0QixDQUFBO0lBQzVCLCtDQUEyQixDQUFBO0FBQzdCLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBZ0JELE1BQU0sQ0FBTixJQUFZLGdDQUlYO0FBSkQsV0FBWSxnQ0FBZ0M7SUFDMUMsa0VBQThCLENBQUE7SUFDOUIsZ0VBQTRCLENBQUE7SUFDNUIsOERBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQUpXLGdDQUFnQyxLQUFoQyxnQ0FBZ0MsUUFJM0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBUeXBlQ2FwYWJpbGl0aWVzIHtcclxuICB3bXMgPSAnd21zJyxcclxuICB3bXRzID0gJ3dtdHMnLFxyXG4gIGFyY2dpc3Jlc3QgPSAnZXNyaUpTT04nLFxyXG4gIGltYWdlYXJjZ2lzcmVzdCA9ICdlc3JpSlNPTicsXHJcbiAgdGlsZWFyY2dpc3Jlc3QgPSAnZXNyaUpTT04nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFR5cGVDYXBhYmlsaXRpZXNTdHJpbmdzID0ga2V5b2YgdHlwZW9mIFR5cGVDYXBhYmlsaXRpZXM7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllciB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcGFyZW50TGF5ZXJJZDogbnVtYmVyO1xyXG4gIGRlZmF1bHRWaXNpYmlsaXR5PzogYm9vbGVhbjtcclxuICBzdWJMYXllcklkczogbnVtYmVyW107XHJcbiAgbWluU2NhbGU6IG51bWJlcjtcclxuICBtYXhTY2FsZTogbnVtYmVyO1xyXG4gIHR5cGU6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzO1xyXG4gIGdlb21ldHJ5VHlwZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyVHlwZXMge1xyXG4gIEZlYXR1cmVMYXllciA9ICdGZWF0dXJlIExheWVyJyxcclxuICBSYXN0ZXJMYXllciA9ICdSYXN0ZXIgTGF5ZXInLFxyXG4gIEdyb3VwTGF5ZXIgPSAnR3JvdXAgTGF5ZXInXHJcbn1cclxuIl19
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RhdGFzb3VyY2Uvc2hhcmVkL2NhcGFiaWxpdGllcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksZ0JBTVg7QUFORCxXQUFZLGdCQUFnQjtJQUMxQiwrQkFBVyxDQUFBO0lBQ1gsaUNBQWEsQ0FBQTtJQUNiLDJDQUF1QixDQUFBO0lBQ3ZCLGdEQUE0QixDQUFBO0lBQzVCLCtDQUEyQixDQUFBO0FBQzdCLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBZ0JELE1BQU0sQ0FBTixJQUFZLGdDQUlYO0FBSkQsV0FBWSxnQ0FBZ0M7SUFDMUMsa0VBQThCLENBQUE7SUFDOUIsZ0VBQTRCLENBQUE7SUFDNUIsOERBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQUpXLGdDQUFnQyxLQUFoQyxnQ0FBZ0MsUUFJM0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBUeXBlQ2FwYWJpbGl0aWVzIHtcbiAgd21zID0gJ3dtcycsXG4gIHdtdHMgPSAnd210cycsXG4gIGFyY2dpc3Jlc3QgPSAnZXNyaUpTT04nLFxuICBpbWFnZWFyY2dpc3Jlc3QgPSAnZXNyaUpTT04nLFxuICB0aWxlYXJjZ2lzcmVzdCA9ICdlc3JpSlNPTidcbn1cblxuZXhwb3J0IHR5cGUgVHlwZUNhcGFiaWxpdGllc1N0cmluZ3MgPSBrZXlvZiB0eXBlb2YgVHlwZUNhcGFiaWxpdGllcztcblxuZXhwb3J0IGludGVyZmFjZSBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXIge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHBhcmVudExheWVySWQ6IG51bWJlcjtcbiAgZGVmYXVsdFZpc2liaWxpdHk/OiBib29sZWFuO1xuICBzdWJMYXllcklkczogbnVtYmVyW107XG4gIG1pblNjYWxlOiBudW1iZXI7XG4gIG1heFNjYWxlOiBudW1iZXI7XG4gIHR5cGU6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzO1xuICBnZW9tZXRyeVR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzIHtcbiAgRmVhdHVyZUxheWVyID0gJ0ZlYXR1cmUgTGF5ZXInLFxuICBSYXN0ZXJMYXllciA9ICdSYXN0ZXIgTGF5ZXInLFxuICBHcm91cExheWVyID0gJ0dyb3VwIExheWVyJ1xufVxuIl19