@igo2/geo 16.0.0-rc.0 → 16.0.0-rc.2

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 (555) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +7 -7
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +7 -7
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -4
  4. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +6 -6
  5. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +5 -5
  6. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  7. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
  8. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +13 -13
  9. package/esm2022/lib/catalog/catalog.module.mjs +3 -3
  10. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  11. package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
  12. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  13. package/esm2022/lib/catalog/shared/catalog.service.mjs +7 -8
  14. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  15. package/esm2022/lib/datasource/datasource.module.mjs +1 -1
  16. package/esm2022/lib/datasource/shared/capabilities.service.mjs +10 -10
  17. package/esm2022/lib/datasource/shared/datasource.service.mjs +9 -9
  18. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  19. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  20. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +2 -2
  21. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +2 -2
  22. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +2 -2
  24. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
  25. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  26. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +2 -2
  29. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +2 -2
  31. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +4 -4
  32. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +2 -2
  33. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +4 -19
  38. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +5 -5
  39. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +5 -5
  41. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +7 -7
  42. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  43. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  44. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  45. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  46. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
  47. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +2 -2
  48. package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
  49. package/esm2022/lib/datasource/utils/tilegrid.mjs +3 -3
  50. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -4
  51. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +6 -6
  52. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +5 -5
  53. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  54. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  55. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +4 -4
  56. package/esm2022/lib/directions/directions.component.mjs +50 -25
  57. package/esm2022/lib/directions/directions.module.mjs +10 -6
  58. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  59. package/esm2022/lib/directions/shared/directions.service.mjs +10 -11
  60. package/esm2022/lib/directions/shared/directions.utils.mjs +7 -7
  61. package/esm2022/lib/directions/shared/store.mjs +1 -1
  62. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  63. package/esm2022/lib/download/download.module.mjs +2 -2
  64. package/esm2022/lib/download/shared/download.service.mjs +3 -3
  65. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  66. package/esm2022/lib/draw/draw/draw-popup.component.mjs +9 -9
  67. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  68. package/esm2022/lib/draw/draw/draw.component.mjs +28 -28
  69. package/esm2022/lib/draw/draw/draw.module.mjs +15 -15
  70. package/esm2022/lib/draw/drawingTool.module.mjs +1 -1
  71. package/esm2022/lib/draw/shared/draw-icon.service.mjs +1 -1
  72. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  73. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  74. package/esm2022/lib/draw/shared/draw.utils.mjs +6 -6
  75. package/esm2022/lib/environment/environment.interface.mjs +2 -0
  76. package/esm2022/lib/environment/index.mjs +2 -0
  77. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +8 -8
  78. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
  79. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +3 -3
  80. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +4 -4
  81. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +2 -2
  82. package/esm2022/lib/feature/feature.module.mjs +2 -2
  83. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  84. package/esm2022/lib/feature/shared/feature.utils.mjs +7 -7
  85. package/esm2022/lib/feature/shared/store.mjs +3 -3
  86. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +4 -4
  87. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +10 -22
  88. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +5 -2
  89. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  90. package/esm2022/lib/feature/shared/strategies/loading.mjs +1 -1
  91. package/esm2022/lib/feature/shared/strategies/search.mjs +2 -2
  92. package/esm2022/lib/feature/shared/strategies/selection.mjs +5 -5
  93. package/esm2022/lib/feature/shared/strategies.utils.mjs +2 -2
  94. package/esm2022/lib/filter/filter.module.mjs +21 -21
  95. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  96. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +5 -5
  97. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +8 -8
  98. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +6 -6
  99. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +5 -5
  100. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +24 -4
  101. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +4 -4
  102. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  103. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
  104. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  105. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  106. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  107. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  108. package/esm2022/lib/filter/shared/ogc-filter.mjs +5 -5
  109. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +1 -1
  110. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  111. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +2 -2
  112. package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
  113. package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
  114. package/esm2022/lib/filter/shared/time-filter.service.mjs +2 -2
  115. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +14 -14
  116. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +7 -7
  117. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +4 -4
  118. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
  119. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +4 -4
  120. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
  121. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  122. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
  123. package/esm2022/lib/geo.module.mjs +4 -4
  124. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +8 -8
  125. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  126. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +3 -3
  127. package/esm2022/lib/geometry/geometry.module.mjs +2 -2
  128. package/esm2022/lib/geometry/shared/controls/draw.mjs +6 -6
  129. package/esm2022/lib/geometry/shared/controls/modify.mjs +8 -8
  130. package/esm2022/lib/geometry/shared/controls/slice.mjs +2 -2
  131. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  132. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  133. package/esm2022/lib/geometry/shared/geometry.utils.mjs +5 -5
  134. package/esm2022/lib/import-export/export-button/export-button.component.mjs +4 -4
  135. package/esm2022/lib/import-export/import-export/import-export.component.mjs +38 -38
  136. package/esm2022/lib/import-export/import-export.module.mjs +3 -3
  137. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +10 -21
  138. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  139. package/esm2022/lib/import-export/shared/export.service.mjs +4 -4
  140. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  141. package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
  142. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  143. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  144. package/esm2022/lib/import-export/shared/import.service.mjs +4 -4
  145. package/esm2022/lib/import-export/shared/import.utils.mjs +5 -5
  146. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
  147. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +7 -7
  148. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +4 -4
  149. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +2 -2
  150. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +4 -4
  151. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +4 -4
  152. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +9 -9
  153. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  154. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  155. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  156. package/esm2022/lib/layer/layer.module.mjs +9 -9
  157. package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
  158. package/esm2022/lib/layer/shared/layer.service.mjs +11 -11
  159. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  160. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  161. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  162. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  163. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
  164. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  165. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  166. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  167. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  168. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  169. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +44 -33
  170. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  171. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +2 -2
  172. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
  173. package/esm2022/lib/layer/utils/image-watcher.mjs +2 -2
  174. package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
  175. package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
  176. package/esm2022/lib/layer/utils/tile-watcher.mjs +2 -2
  177. package/esm2022/lib/layer/utils/vector-watcher.mjs +2 -2
  178. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +2 -2
  179. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +4 -4
  180. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
  181. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
  182. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +8 -10
  183. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +2 -0
  184. package/esm2022/lib/map/home-extent-button/index.mjs +2 -1
  185. package/esm2022/lib/map/info-section/info-section.component.mjs +2 -2
  186. package/esm2022/lib/map/map-browser/map-browser.component.mjs +2 -2
  187. package/esm2022/lib/map/map-center/map-center.component.mjs +2 -2
  188. package/esm2022/lib/map/map.module.mjs +14 -14
  189. package/esm2022/lib/map/menu-button/menu-button.component.mjs +9 -20
  190. package/esm2022/lib/map/offline-button/offline-button.component.mjs +2 -2
  191. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
  192. package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
  193. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  194. package/esm2022/lib/map/shared/controllers/geolocation.mjs +8 -8
  195. package/esm2022/lib/map/shared/controllers/view.mjs +3 -3
  196. package/esm2022/lib/map/shared/hover-feature.directive.mjs +15 -15
  197. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +2 -2
  198. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +4 -4
  199. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  200. package/esm2022/lib/map/shared/map.interface.mjs +1 -1
  201. package/esm2022/lib/map/shared/map.mjs +9 -6
  202. package/esm2022/lib/map/shared/map.utils.mjs +3 -3
  203. package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
  204. package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
  205. package/esm2022/lib/map/shared/projection.service.mjs +3 -3
  206. package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
  207. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  208. package/esm2022/lib/map/utils/layer-watcher.mjs +2 -2
  209. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +4 -4
  210. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  211. package/esm2022/lib/measure/measure.module.mjs +1 -1
  212. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +2 -2
  213. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
  214. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +4 -4
  215. package/esm2022/lib/measure/measurer/measurer.component.mjs +11 -11
  216. package/esm2022/lib/measure/measurer/measurer.module.mjs +6 -6
  217. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  218. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  219. package/esm2022/lib/measure/shared/measure.utils.mjs +7 -7
  220. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +4 -4
  221. package/esm2022/lib/metadata/metadata.module.mjs +4 -4
  222. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +5 -5
  223. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  224. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  225. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +3 -3
  226. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  227. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  228. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +2 -2
  229. package/esm2022/lib/offline/shared/geo-network.service.mjs +1 -8
  230. package/esm2022/lib/overlay/overlay.module.mjs +1 -1
  231. package/esm2022/lib/overlay/shared/overlay.directive.mjs +1 -1
  232. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  233. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  234. package/esm2022/lib/overlay/shared/overlay.service.mjs +1 -1
  235. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  236. package/esm2022/lib/print/print/print.component.mjs +3 -3
  237. package/esm2022/lib/print/print-form/print-form.component.mjs +4 -4
  238. package/esm2022/lib/print/print.module.mjs +4 -4
  239. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  240. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  241. package/esm2022/lib/print/shared/print.service.mjs +9 -9
  242. package/esm2022/lib/query/query.module.mjs +3 -3
  243. package/esm2022/lib/query/shared/query-search-source.mjs +2 -2
  244. package/esm2022/lib/query/shared/query-search-source.providers.mjs +1 -1
  245. package/esm2022/lib/query/shared/query.directive.mjs +7 -7
  246. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  247. package/esm2022/lib/query/shared/query.service.mjs +10 -10
  248. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  249. package/esm2022/lib/search/search-bar/search-bar.component.mjs +6 -6
  250. package/esm2022/lib/search/search-bar/search-bar.module.mjs +2 -2
  251. package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +2 -2
  252. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +5 -5
  253. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +15 -15
  254. package/esm2022/lib/search/search-results/search-results-item.component.mjs +5 -5
  255. package/esm2022/lib/search/search-results/search-results.component.mjs +7 -7
  256. package/esm2022/lib/search/search-results/search-results.module.mjs +11 -11
  257. package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
  258. package/esm2022/lib/search/search-selector/search-selector.module.mjs +2 -2
  259. package/esm2022/lib/search/search-settings/search-settings.component.mjs +4 -4
  260. package/esm2022/lib/search/search-settings/search-settings.module.mjs +3 -3
  261. package/esm2022/lib/search/search.module.mjs +8 -8
  262. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +14 -14
  263. package/esm2022/lib/search/shared/search-source-service.providers.mjs +2 -2
  264. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  265. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  266. package/esm2022/lib/search/shared/search.service.mjs +3 -3
  267. package/esm2022/lib/search/shared/search.utils.mjs +1 -1
  268. package/esm2022/lib/search/shared/sources/cadastre.mjs +7 -7
  269. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +2 -2
  270. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  271. package/esm2022/lib/search/shared/sources/coordinates.mjs +11 -11
  272. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +3 -3
  273. package/esm2022/lib/search/shared/sources/icherche.mjs +6 -6
  274. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +3 -3
  275. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  276. package/esm2022/lib/search/shared/sources/ilayer.mjs +8 -8
  277. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +2 -2
  278. package/esm2022/lib/search/shared/sources/nominatim.mjs +6 -6
  279. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +2 -2
  280. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +1 -1
  281. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  282. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  283. package/esm2022/lib/search/shared/sources/storedqueries.mjs +7 -7
  284. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +2 -2
  285. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  286. package/esm2022/lib/search/shared/sources/workspace.mjs +6 -6
  287. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +1 -1
  288. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +2 -2
  289. package/esm2022/lib/style/shared/feature/feature-style.mjs +1 -1
  290. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  291. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +2 -2
  292. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +2 -2
  293. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +2 -2
  294. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  295. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  296. package/esm2022/lib/style/style-list/style-list.module.mjs +2 -2
  297. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  298. package/esm2022/lib/style/style-list/style-list.service.mjs +3 -3
  299. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +24 -33
  300. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +17 -25
  301. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  302. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  303. package/esm2022/lib/style/style-service/draw-style.service.mjs +2 -2
  304. package/esm2022/lib/style/style-service/style.service.mjs +3 -3
  305. package/esm2022/lib/style/style.module.mjs +4 -4
  306. package/esm2022/lib/toast/toast.component.mjs +3 -3
  307. package/esm2022/lib/toast/toast.module.mjs +3 -3
  308. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  309. package/esm2022/lib/utils/id-generator.mjs +2 -2
  310. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  311. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  312. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +1 -1
  313. package/esm2022/lib/wkt/shared/wkt.service.mjs +2 -2
  314. package/esm2022/lib/wkt/wkt.module.mjs +1 -1
  315. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +4 -4
  316. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +2 -2
  317. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  318. package/esm2022/lib/workspace/shared/edition-workspace.mjs +10 -15
  319. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +7 -7
  320. package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
  321. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +6 -6
  322. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
  323. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +6 -6
  324. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +5 -5
  325. package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
  326. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
  327. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +2 -2
  328. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +7 -7
  329. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +2 -2
  330. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +5 -5
  331. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +2 -2
  332. package/esm2022/lib/workspace/workspace.module.mjs +4 -4
  333. package/esm2022/public_api.mjs +2 -1
  334. package/fesm2022/igo2-geo.mjs +34336 -34355
  335. package/fesm2022/igo2-geo.mjs.map +1 -1
  336. package/geo-theme.scss +23 -21
  337. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +3 -3
  338. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +2 -2
  339. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +3 -3
  340. package/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -0
  341. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -4
  342. package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
  343. package/lib/catalog/catalog.theming.scss +5 -0
  344. package/lib/catalog/shared/catalog.abstract.d.ts +2 -2
  345. package/lib/catalog/shared/catalog.enum.d.ts +4 -0
  346. package/lib/catalog/shared/catalog.interface.d.ts +10 -5
  347. package/lib/catalog/shared/catalog.service.d.ts +2 -2
  348. package/lib/datasource/shared/capabilities.service.d.ts +2 -2
  349. package/lib/datasource/shared/datasource.service.d.ts +6 -6
  350. package/lib/datasource/shared/datasources/any-datasource.d.ts +11 -11
  351. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +10 -10
  352. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +2 -2
  353. package/lib/datasource/shared/datasources/carto-datasource.d.ts +1 -1
  354. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +1 -1
  355. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +1 -1
  356. package/lib/datasource/shared/datasources/datasource.d.ts +4 -4
  357. package/lib/datasource/shared/datasources/datasource.interface.d.ts +2 -2
  358. package/lib/datasource/shared/datasources/feature-datasource.d.ts +1 -1
  359. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -2
  360. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +1 -1
  361. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +1 -1
  362. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +1 -1
  363. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +3 -4
  364. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +2 -2
  365. package/lib/datasource/shared/datasources/wfs.service.d.ts +1 -1
  366. package/lib/datasource/shared/datasources/wms-datasource.d.ts +5 -5
  367. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +2 -2
  368. package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +4 -3
  369. package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
  370. package/lib/datasource/shared/options/options-api.service.d.ts +1 -1
  371. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +2 -2
  372. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +3 -3
  373. package/lib/directions/directions-sources/directions-source.interface.d.ts +12 -8
  374. package/lib/directions/directions-sources/osrm-directions-source.d.ts +1 -1
  375. package/lib/directions/directions.component.d.ts +11 -3
  376. package/lib/directions/directions.module.d.ts +5 -4
  377. package/lib/directions/directions.theming.scss +6 -6
  378. package/lib/directions/shared/directions.interface.d.ts +1 -1
  379. package/lib/directions/shared/directions.service.d.ts +5 -5
  380. package/lib/directions/shared/directions.utils.d.ts +3 -3
  381. package/lib/draw/draw/draw-popup.component.d.ts +3 -3
  382. package/lib/draw/draw/draw.component.d.ts +12 -12
  383. package/lib/draw/draw.theming.scss +32 -32
  384. package/lib/draw/shared/draw-icon.service.d.ts +1 -1
  385. package/lib/draw/shared/draw.interface.d.ts +3 -3
  386. package/lib/draw/shared/draw.utils.d.ts +4 -4
  387. package/lib/environment/environment.interface.d.ts +48 -0
  388. package/lib/environment/index.d.ts +1 -0
  389. package/lib/feature/feature-details/feature-details.component.d.ts +6 -6
  390. package/lib/feature/feature-details/feature-details.directive.d.ts +2 -2
  391. package/lib/feature/feature-details/feature-details.theming.scss +16 -16
  392. package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
  393. package/lib/feature/shared/feature.interfaces.d.ts +5 -5
  394. package/lib/feature/shared/feature.utils.d.ts +4 -4
  395. package/lib/feature/shared/store.d.ts +1 -1
  396. package/lib/feature/shared/strategies/geo-properties.d.ts +2 -2
  397. package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
  398. package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
  399. package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
  400. package/lib/feature/shared/strategies/search.d.ts +1 -1
  401. package/lib/feature/shared/strategies/selection.d.ts +2 -2
  402. package/lib/feature/shared/strategies.utils.d.ts +1 -1
  403. package/lib/filter/filter.theming.scss +0 -3
  404. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +3 -3
  405. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +5 -5
  406. package/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
  407. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  408. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +1 -1
  409. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
  410. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +2 -2
  411. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  412. package/lib/filter/shared/ogc-filter.d.ts +5 -4
  413. package/lib/filter/shared/ogc-filter.interface.d.ts +3 -3
  414. package/lib/filter/shared/spatial-filter.service.d.ts +1 -1
  415. package/lib/filter/shared/time-filter.interface.d.ts +1 -1
  416. package/lib/filter/shared/time-filter.service.d.ts +1 -1
  417. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +13 -13
  418. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +6 -6
  419. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -3
  420. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  421. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +2 -2
  422. package/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
  423. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +2 -2
  424. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  425. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +4 -4
  426. package/lib/geometry/shared/controls/draw.d.ts +4 -4
  427. package/lib/geometry/shared/controls/modify.d.ts +4 -4
  428. package/lib/geometry/shared/controls/slice.d.ts +3 -3
  429. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  430. package/lib/geometry/shared/geometry.utils.d.ts +2 -2
  431. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  432. package/lib/import-export/import-export/import-export.component.d.ts +14 -14
  433. package/lib/import-export/shared/drop-geo-file.directive.d.ts +6 -6
  434. package/lib/import-export/shared/export.interface.d.ts +1 -1
  435. package/lib/import-export/shared/export.service.d.ts +2 -2
  436. package/lib/import-export/shared/import.interface.d.ts +1 -0
  437. package/lib/import-export/shared/import.utils.d.ts +3 -3
  438. package/lib/layer/layer-item/layer-item.component.d.ts +2 -2
  439. package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -3
  440. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +2 -2
  441. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  442. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +2 -2
  443. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +2 -2
  444. package/lib/layer/layer-list/layer-list.component.d.ts +5 -5
  445. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  446. package/lib/layer/layer.theming.scss +0 -7
  447. package/lib/layer/shared/layer.service.d.ts +5 -5
  448. package/lib/layer/shared/layers/any-layer.d.ts +1 -1
  449. package/lib/layer/shared/layers/any-layer.interface.d.ts +1 -1
  450. package/lib/layer/shared/layers/image-layer.d.ts +5 -5
  451. package/lib/layer/shared/layers/image-layer.interface.d.ts +3 -3
  452. package/lib/layer/shared/layers/layer.d.ts +6 -6
  453. package/lib/layer/shared/layers/layer.interface.d.ts +2 -2
  454. package/lib/layer/shared/layers/tile-layer.d.ts +6 -6
  455. package/lib/layer/shared/layers/tile-layer.interface.d.ts +8 -8
  456. package/lib/layer/shared/layers/vector-layer.d.ts +18 -11
  457. package/lib/layer/shared/layers/vector-layer.interface.d.ts +13 -13
  458. package/lib/layer/shared/layers/vectortile-layer.d.ts +3 -3
  459. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +4 -4
  460. package/lib/layer/utils/image-watcher.d.ts +1 -1
  461. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  462. package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
  463. package/lib/map/home-extent-button/home-extent-button.interface.d.ts +6 -0
  464. package/lib/map/home-extent-button/index.d.ts +1 -0
  465. package/lib/map/map-browser/map-browser.component.d.ts +1 -1
  466. package/lib/map/map-browser/map-browser.theming.scss +46 -46
  467. package/lib/map/menu-button/menu-button.component.d.ts +1 -1
  468. package/lib/map/menu-button/menu-button.theming.scss +20 -24
  469. package/lib/map/shared/controllers/controller.d.ts +1 -1
  470. package/lib/map/shared/controllers/geolocation.d.ts +5 -5
  471. package/lib/map/shared/controllers/geolocation.interface.d.ts +8 -0
  472. package/lib/map/shared/controllers/view.d.ts +2 -2
  473. package/lib/map/shared/hover-feature.directive.d.ts +8 -8
  474. package/lib/map/shared/map-pointer-position.directive.d.ts +2 -2
  475. package/lib/map/shared/map.abstract.d.ts +5 -5
  476. package/lib/map/shared/map.d.ts +14 -10
  477. package/lib/map/shared/mapOffline.directive.d.ts +2 -2
  478. package/lib/map/shared/projection.interfaces.d.ts +1 -3
  479. package/lib/map/utils/layer-watcher.d.ts +2 -2
  480. package/lib/map/zoom-button/zoom-button.theming.scss +32 -32
  481. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  482. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  483. package/lib/measure/measurer/measurer.component.d.ts +5 -5
  484. package/lib/measure/shared/measure.utils.d.ts +5 -5
  485. package/lib/metadata/metadata-button/metadata-button.component.d.ts +1 -1
  486. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
  487. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  488. package/lib/offline/shared/geo-network.service.d.ts +2 -1
  489. package/lib/overlay/shared/overlay.d.ts +1 -1
  490. package/lib/overlay/shared/overlay.directive.d.ts +2 -2
  491. package/lib/print/print/print.component.d.ts +1 -1
  492. package/lib/print/print-form/print-form.component.d.ts +2 -2
  493. package/lib/print/shared/print.interface.d.ts +1 -1
  494. package/lib/print/shared/print.service.d.ts +2 -2
  495. package/lib/query/shared/query.directive.d.ts +4 -4
  496. package/lib/query/shared/query.interfaces.d.ts +3 -3
  497. package/lib/query/shared/query.service.d.ts +3 -3
  498. package/lib/search/search-bar/search-bar.component.d.ts +5 -5
  499. package/lib/search/search-bar/search-bar.theming.scss +36 -36
  500. package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
  501. package/lib/search/search-results/save-feature-dialog.component.d.ts +3 -3
  502. package/lib/search/search-results/search-results-add-button.component.d.ts +7 -7
  503. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  504. package/lib/search/search-results/search-results.component.d.ts +4 -4
  505. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  506. package/lib/search/search-settings/search-settings.component.d.ts +2 -2
  507. package/lib/search/search.theming.scss +5 -5
  508. package/lib/search/shared/search-pointer-summary.directive.d.ts +5 -5
  509. package/lib/search/shared/search-source-service.providers.d.ts +1 -1
  510. package/lib/search/shared/search.interfaces.d.ts +1 -1
  511. package/lib/search/shared/search.service.d.ts +2 -2
  512. package/lib/search/shared/search.utils.d.ts +1 -1
  513. package/lib/search/shared/sources/cadastre.d.ts +1 -1
  514. package/lib/search/shared/sources/cadastre.providers.d.ts +1 -1
  515. package/lib/search/shared/sources/coordinates.d.ts +5 -5
  516. package/lib/search/shared/sources/coordinates.providers.d.ts +2 -2
  517. package/lib/search/shared/sources/icherche.d.ts +4 -4
  518. package/lib/search/shared/sources/icherche.providers.d.ts +2 -2
  519. package/lib/search/shared/sources/ilayer.d.ts +2 -2
  520. package/lib/search/shared/sources/ilayer.interfaces.d.ts +1 -1
  521. package/lib/search/shared/sources/ilayer.providers.d.ts +1 -1
  522. package/lib/search/shared/sources/nominatim.d.ts +1 -1
  523. package/lib/search/shared/sources/nominatim.providers.d.ts +1 -1
  524. package/lib/search/shared/sources/source.d.ts +2 -2
  525. package/lib/search/shared/sources/storedqueries.d.ts +4 -4
  526. package/lib/search/shared/sources/storedqueries.providers.d.ts +1 -1
  527. package/lib/search/shared/sources/workspace.d.ts +1 -1
  528. package/lib/style/shared/feature/feature-style.d.ts +2 -2
  529. package/lib/style/shared/overlay/overlay-style.utils.d.ts +1 -1
  530. package/lib/style/shared/vector/conversion.utils.d.ts +1 -1
  531. package/lib/style/shared/vector/vector-style.interface.d.ts +6 -1
  532. package/lib/style/style-list/style-list.provider.d.ts +1 -1
  533. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +3 -3
  534. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +3 -3
  535. package/lib/style/style-service/draw-style.service.d.ts +1 -1
  536. package/lib/style/style-service/style.service.d.ts +3 -3
  537. package/lib/utils/id-generator.d.ts +2 -2
  538. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
  539. package/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  540. package/lib/workspace/shared/edition-workspace.d.ts +7 -9
  541. package/lib/workspace/shared/edition-workspace.service.d.ts +5 -5
  542. package/lib/workspace/shared/feature-workspace.service.d.ts +3 -3
  543. package/lib/workspace/shared/wfs-workspace.service.d.ts +3 -3
  544. package/lib/workspace/shared/wms-workspace.service.d.ts +4 -4
  545. package/lib/workspace/shared/workspace.utils.d.ts +4 -4
  546. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  547. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +4 -4
  548. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +3 -3
  549. package/lib/workspace/workspace.theming.scss +6 -6
  550. package/locale/en.geo.json +11 -4
  551. package/locale/fr.geo.json +11 -4
  552. package/package.json +5 -5
  553. package/public_api.d.ts +1 -0
  554. package/style/style.css +0 -1
  555. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.theming.scss +0 -15
@@ -1,4 +1,4 @@
1
- import { Injectable, Inject } from '@angular/core';
1
+ import { Inject, Injectable } from '@angular/core';
2
2
  import { FEATURE } from '../../feature/shared/feature.enums';
3
3
  import { SearchSource } from '../../search/shared/sources/source';
4
4
  import * as i0 from "@angular/core";
@@ -32,4 +32,4 @@ export class QuerySearchSource extends SearchSource {
32
32
  type: Inject,
33
33
  args: ['options']
34
34
  }] }]; }, null); })();
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VhcmNoLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS1zZWFyY2gtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBRWxFOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBQ2pELE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBRXRCLFlBQStCLE9BQTRCO1FBQ3pELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8saUJBQWlCLENBQUMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixPQUFPO1lBQ0wsS0FBSyxFQUFFLE9BQU87U0FDZixDQUFDO0lBQ0osQ0FBQzsyRUFwQlUsaUJBQWlCLGNBSVIsU0FBUztnRUFKbEIsaUJBQWlCLFdBQWpCLGlCQUFpQjs7dUZBQWpCLGlCQUFpQjtjQUQ3QixVQUFVOztzQkFLSSxNQUFNO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRkVBVFVSRSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuZW51bXMnO1xuaW1wb3J0IHsgU2VhcmNoU291cmNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NoYXJlZC9zb3VyY2VzL3NvdXJjZSc7XG5pbXBvcnQgeyBTZWFyY2hTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NoYXJlZC9zb3VyY2VzL3NvdXJjZS5pbnRlcmZhY2VzJztcbi8qKlxuICogTWFwIHNlYXJjaCBzb3VyY2UuIEZvciBub3cgaXQgaGFzIG5vIHNlYXJjaCBjYXBhYmlsaXR5LiBBbGwgaXQgZG9lc1xuICogaXMgYWN0IGFzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBtYXAgcXVlcnkgcmVzdWx0cycgXCJzZWFyY2ggc291cmNlXCIuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBRdWVyeVNlYXJjaFNvdXJjZSBleHRlbmRzIFNlYXJjaFNvdXJjZSB7XG4gIHN0YXRpYyBpZCA9ICdtYXAnO1xuICBzdGF0aWMgdHlwZSA9IEZFQVRVUkU7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdCgnb3B0aW9ucycpIG9wdGlvbnM6IFNlYXJjaFNvdXJjZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgfVxuXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFF1ZXJ5U2VhcmNoU291cmNlLmlkO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBRdWVyeVNlYXJjaFNvdXJjZS50eXBlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRPcHRpb25zKCk6IFNlYXJjaFNvdXJjZU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0NhcnRlJ1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VhcmNoLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS1zZWFyY2gtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBR2xFOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBQ2pELE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBRXRCLFlBQStCLE9BQTRCO1FBQ3pELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8saUJBQWlCLENBQUMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixPQUFPO1lBQ0wsS0FBSyxFQUFFLE9BQU87U0FDZixDQUFDO0lBQ0osQ0FBQzsyRUFwQlUsaUJBQWlCLGNBSVIsU0FBUztnRUFKbEIsaUJBQWlCLFdBQWpCLGlCQUFpQjs7dUZBQWpCLGlCQUFpQjtjQUQ3QixVQUFVOztzQkFLSSxNQUFNO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEZFQVRVUkUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcclxuaW1wb3J0IHsgU2VhcmNoU291cmNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NoYXJlZC9zb3VyY2VzL3NvdXJjZSc7XHJcbmltcG9ydCB7IFNlYXJjaFNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2hhcmVkL3NvdXJjZXMvc291cmNlLmludGVyZmFjZXMnO1xyXG5cclxuLyoqXHJcbiAqIE1hcCBzZWFyY2ggc291cmNlLiBGb3Igbm93IGl0IGhhcyBubyBzZWFyY2ggY2FwYWJpbGl0eS4gQWxsIGl0IGRvZXNcclxuICogaXMgYWN0IGFzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBtYXAgcXVlcnkgcmVzdWx0cycgXCJzZWFyY2ggc291cmNlXCIuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVNlYXJjaFNvdXJjZSBleHRlbmRzIFNlYXJjaFNvdXJjZSB7XHJcbiAgc3RhdGljIGlkID0gJ21hcCc7XHJcbiAgc3RhdGljIHR5cGUgPSBGRUFUVVJFO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdvcHRpb25zJykgb3B0aW9uczogU2VhcmNoU291cmNlT3B0aW9ucykge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFF1ZXJ5U2VhcmNoU291cmNlLmlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFF1ZXJ5U2VhcmNoU291cmNlLnR5cGU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdE9wdGlvbnMoKTogU2VhcmNoU291cmNlT3B0aW9ucyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0aXRsZTogJ0NhcnRlJ1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
@@ -19,4 +19,4 @@ export function provideQuerySearchSource() {
19
19
  deps: [ConfigService]
20
20
  };
21
21
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VhcmNoLXNvdXJjZS5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9xdWVyeS9zaGFyZWQvcXVlcnktc2VhcmNoLXNvdXJjZS5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQXFCO0lBQzVELE9BQU8sSUFBSSxpQkFBaUIsQ0FDMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU87UUFDTCxPQUFPLEVBQUUsWUFBWTtRQUNyQixVQUFVLEVBQUUsd0JBQXdCO1FBQ3BDLEtBQUssRUFBRSxJQUFJO1FBQ1gsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuXG5pbXBvcnQgeyBTZWFyY2hTb3VyY2UgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2hhcmVkL3NvdXJjZXMvc291cmNlJztcblxuaW1wb3J0IHsgUXVlcnlTZWFyY2hTb3VyY2UgfSBmcm9tICcuL3F1ZXJ5LXNlYXJjaC1zb3VyY2UnO1xuXG4vKipcbiAqIE1hcCBzZWFyY2ggc291cmNlIGZhY3RvcnlcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U2VhcmNoU291cmNlRmFjdG9yeShjb25maWc6IENvbmZpZ1NlcnZpY2UpIHtcbiAgcmV0dXJuIG5ldyBRdWVyeVNlYXJjaFNvdXJjZShcbiAgICBjb25maWcuZ2V0Q29uZmlnKGBzZWFyY2hTb3VyY2VzLiR7UXVlcnlTZWFyY2hTb3VyY2UuaWR9YCkgfHwge31cbiAgKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm92aWRlciBmb3IgdGhlIG1hcCBzZWFyY2ggc291cmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlUXVlcnlTZWFyY2hTb3VyY2UoKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogU2VhcmNoU291cmNlLFxuICAgIHVzZUZhY3Rvcnk6IHF1ZXJ5U2VhcmNoU291cmNlRmFjdG9yeSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICBkZXBzOiBbQ29uZmlnU2VydmljZV1cbiAgfTtcbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VhcmNoLXNvdXJjZS5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9xdWVyeS9zaGFyZWQvcXVlcnktc2VhcmNoLXNvdXJjZS5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQXFCO0lBQzVELE9BQU8sSUFBSSxpQkFBaUIsQ0FDMUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsaUJBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU87UUFDTCxPQUFPLEVBQUUsWUFBWTtRQUNyQixVQUFVLEVBQUUsd0JBQXdCO1FBQ3BDLEtBQUssRUFBRSxJQUFJO1FBQ1gsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU2VhcmNoU291cmNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NoYXJlZC9zb3VyY2VzL3NvdXJjZSc7XHJcbmltcG9ydCB7IFF1ZXJ5U2VhcmNoU291cmNlIH0gZnJvbSAnLi9xdWVyeS1zZWFyY2gtc291cmNlJztcclxuXHJcbi8qKlxyXG4gKiBNYXAgc2VhcmNoIHNvdXJjZSBmYWN0b3J5XHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlYXJjaFNvdXJjZUZhY3RvcnkoY29uZmlnOiBDb25maWdTZXJ2aWNlKSB7XHJcbiAgcmV0dXJuIG5ldyBRdWVyeVNlYXJjaFNvdXJjZShcclxuICAgIGNvbmZpZy5nZXRDb25maWcoYHNlYXJjaFNvdXJjZXMuJHtRdWVyeVNlYXJjaFNvdXJjZS5pZH1gKSB8fCB7fVxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm92aWRlciBmb3IgdGhlIG1hcCBzZWFyY2ggc291cmNlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVF1ZXJ5U2VhcmNoU291cmNlKCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBwcm92aWRlOiBTZWFyY2hTb3VyY2UsXHJcbiAgICB1c2VGYWN0b3J5OiBxdWVyeVNlYXJjaFNvdXJjZUZhY3RvcnksXHJcbiAgICBtdWx0aTogdHJ1ZSxcclxuICAgIGRlcHM6IFtDb25maWdTZXJ2aWNlXVxyXG4gIH07XHJcbn1cclxuIl19
@@ -1,15 +1,15 @@
1
- import { Directive, Input, Output, EventEmitter, Self } from '@angular/core';
2
- import { of, zip } from 'rxjs';
1
+ import { Directive, EventEmitter, Input, Output, Self } from '@angular/core';
3
2
  import { unByKey } from 'ol/Observable';
4
3
  import OlRenderFeature from 'ol/render/Feature';
5
- import { MapBrowserComponent } from '../../map/map-browser/map-browser.component';
4
+ import { of, zip } from 'rxjs';
6
5
  import { renderFeatureFromOl } from '../../feature/shared/feature.utils';
7
6
  import { featureFromOl } from '../../feature/shared/feature.utils';
8
- import { QueryService } from './query.service';
9
- import { layerIsQueryable, olLayerFeatureIsQueryable } from './query.utils';
10
- import { ctrlKeyDown } from '../../map/shared/map.utils';
11
7
  import { OlDragSelectInteraction } from '../../feature/shared/strategies/selection';
12
8
  import { VectorLayer } from '../../layer/shared/layers/vector-layer';
9
+ import { MapBrowserComponent } from '../../map/map-browser/map-browser.component';
10
+ import { ctrlKeyDown } from '../../map/shared/map.utils';
11
+ import { QueryService } from './query.service';
12
+ import { layerIsQueryable, olLayerFeatureIsQueryable } from './query.utils';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "../../map/map-browser/map-browser.component";
15
15
  import * as i2 from "./query.service";
@@ -282,4 +282,4 @@ export class QueryDirective {
282
282
  }], query: [{
283
283
  type: Output
284
284
  }] }); })();
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvcXVlcnkvc2hhcmVkL3F1ZXJ5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLElBQUksRUFDTCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQTRCLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4QyxPQUFPLGVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQVVoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7O0FBR3JFOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQTBEUDtJQUNSO0lBMURWOztPQUVHO0lBQ0ssU0FBUyxHQUFtQixFQUFFLENBQUM7SUFFdkM7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQztJQUV6Qjs7T0FFRztJQUNLLHVCQUF1QixDQUEwQjtJQUV6RDs7T0FFRztJQUNLLDZCQUE2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O3dFQTlTVSxjQUFjOzZEQUFkLGNBQWM7O3VGQUFkLGNBQWM7Y0FIMUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2FBQ3ZCOztzQkEyREksSUFBSTttREFsQ0UsYUFBYTtrQkFBckIsS0FBSztZQUtHLHlCQUF5QjtrQkFBakMsS0FBSztZQUtHLHNCQUFzQjtrQkFBOUIsS0FBSztZQUtHLGlCQUFpQjtrQkFBekIsS0FBSztZQUtJLEtBQUs7a0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgU2VsZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHVuQnlLZXkgfSBmcm9tICdvbC9PYnNlcnZhYmxlJztcclxuXHJcbmltcG9ydCBPbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XHJcbmltcG9ydCBPbFJlbmRlckZlYXR1cmUgZnJvbSAnb2wvcmVuZGVyL0ZlYXR1cmUnO1xyXG5pbXBvcnQgT2xMYXllciBmcm9tICdvbC9sYXllci9MYXllcic7XHJcbmltcG9ydCBPbFNvdXJjZSBmcm9tICdvbC9zb3VyY2UvU291cmNlJztcclxuaW1wb3J0IG9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xyXG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5cclxuaW1wb3J0IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQgZnJvbSAnb2wvTWFwQnJvd3NlckV2ZW50JztcclxuaW1wb3J0IHsgRXZlbnRzS2V5IH0gZnJvbSAnb2wvZXZlbnRzJztcclxuXHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcclxuaW1wb3J0IHsgTWFwQnJvd3NlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21hcC9tYXAtYnJvd3Nlci9tYXAtYnJvd3Nlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgcmVuZGVyRmVhdHVyZUZyb21PbCB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUudXRpbHMnO1xyXG5pbXBvcnQgeyBmZWF0dXJlRnJvbU9sIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS51dGlscyc7XHJcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4vcXVlcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IGxheWVySXNRdWVyeWFibGUsIG9sTGF5ZXJGZWF0dXJlSXNRdWVyeWFibGUgfSBmcm9tICcuL3F1ZXJ5LnV0aWxzJztcclxuaW1wb3J0IHsgY3RybEtleURvd24gfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC51dGlscyc7XHJcbmltcG9ydCB7IE9sRHJhZ1NlbGVjdEludGVyYWN0aW9uIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvc3RyYXRlZ2llcy9zZWxlY3Rpb24nO1xyXG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcclxuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuL3F1ZXJ5LmludGVyZmFjZXMnO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIG1ha2VzIGEgbWFwIHF1ZXJ5YWJsZSB3aXRoIGEgY2xpY2sgb2Ygd2l0aCBhIGRyYWcgYm94LlxyXG4gKiBCeSBkZWZhdWx0LCBhbGwgbGF5ZXJzIGFyZSBxdWVyeWFibGUgYnV0IHRoaXMgY2FuIGJlbiBjb250cm9sbGVkIGF0XHJcbiAqIHRoZSBsYXllciBsZXZlbC5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2lnb1F1ZXJ5XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb25zIHRvIG9uZ29pbmcgcXVlcmllc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcXVlcmllcyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW5lciB0byB0aGUgbWFwIGNsaWNrIGV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXBDbGlja0xpc3RlbmVyO1xyXG5cclxuICAvKipcclxuICAgKiBPTCBkcmFnIGJveCBpbnRlcmFjdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgb2xEcmFnU2VsZWN0SW50ZXJhY3Rpb246IE9sRHJhZ1NlbGVjdEludGVyYWN0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBPbCBkcmFnIGJveCBcImVuZFwiIGV2ZW50IGtleVxyXG4gICAqL1xyXG4gIHByaXZhdGUgb2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25FbmRLZXk6IEV2ZW50c0tleSB8IEV2ZW50c0tleVtdO1xyXG5cclxuICAvKipcclxuICAgKiBXaHRlciB0byBxdWVyeSBmZWF0dXJlcyBvciBub3RcclxuICAgKi9cclxuICBASW5wdXQoKSBxdWVyeUZlYXR1cmVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZlYXR1cmUgcXVlcnkgaGl0IHRvbGVyYW5jZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHF1ZXJ5RmVhdHVyZXNIaXRUb2xlcmFuY2U6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZlYXR1cmUgcXVlcnkgaGl0IHRvbGVyYW5jZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHF1ZXJ5RmVhdHVyZXNDb25kaXRpb246IChvbExheWVyOiBPbExheWVyPE9sU291cmNlPikgPT4gYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhbGwgcXVlcnkgc2hvdWxkIGNvbXBsZXRlIGJlZm9yZSBlbWl0dGluZyBhbiBldmVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHdhaXRGb3JBbGxRdWVyaWVzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcXVlcnkgKG9yIGFsbCBxdWVyaWVzKSBjb21wbGV0ZVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBxdWVyeSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZmVhdHVyZXM6IEZlYXR1cmVbXSB8IEZlYXR1cmVbXVtdO1xyXG4gICAgZXZlbnQ6IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQ8YW55PjtcclxuICB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBJR08gbWFwXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm1hcCBhcyBhbnkgYXMgSWdvTWFwO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAU2VsZigpIHByaXZhdGUgY29tcG9uZW50OiBNYXBCcm93c2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgbGlzdGVuaW5nIHRvIGNsaWNrIGFuZCBkcmFnIGJveCBldmVudHNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmxpc3RlblRvTWFwQ2xpY2soKTtcclxuICAgIHRoaXMuYWRkRHJhZ0JveEludGVyYWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBjbGljayBhbmQgZHJhZyBib3ggZXZlbnRzIGFuZCBjYW5jZWwgb25nb2luZCByZXF1ZXN0c1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jYW5jZWxPbmdvaW5nUXVlcmllcygpO1xyXG4gICAgdGhpcy51bmxpc3RlblRvTWFwQ2xpY2soKTtcclxuICAgIHRoaXMucmVtb3ZlRHJhZ0JveEludGVyYWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBtYXAgY2xpY2ssIGlzc3VlIHF1ZXJpZXNcclxuICAgKi9cclxuICBwcml2YXRlIGxpc3RlblRvTWFwQ2xpY2soKSB7XHJcbiAgICB0aGlzLm1hcENsaWNrTGlzdGVuZXIgPSB0aGlzLm1hcC5vbC5vbihcclxuICAgICAgJ3NpbmdsZWNsaWNrJyxcclxuICAgICAgKGV2ZW50OiBNYXBCcm93c2VyUG9pbnRlckV2ZW50PGFueT4pID0+IHRoaXMub25NYXBFdmVudChldmVudClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyBmb3IgbWFwIGNsaWNrc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdW5saXN0ZW5Ub01hcENsaWNrKCkge1xyXG4gICAgdW5CeUtleSh0aGlzLm1hcENsaWNrTGlzdGVuZXIpO1xyXG4gICAgdGhpcy5tYXBDbGlja0xpc3RlbmVyID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXNzdWUgcXVlcmllcyBmcm9tIGEgbWFwIGV2ZW50IGFuZCBlbWl0IGV2ZW50cyB3aXRoIHRoZSByZXN1bHRzXHJcbiAgICogQHBhcmFtIGV2ZW50IE9MIG1hcCBicm93c2VyIHBvaW50ZXIgZXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIG9uTWFwRXZlbnQoZXZlbnQ6IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQ8YW55Pikge1xyXG4gICAgdGhpcy5jYW5jZWxPbmdvaW5nUXVlcmllcygpO1xyXG4gICAgaWYgKCF0aGlzLnF1ZXJ5U2VydmljZS5xdWVyeUVuYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJpZXMkID0gW107XHJcbiAgICBpZiAodGhpcy5xdWVyeUZlYXR1cmVzKSB7XHJcbiAgICAgIHF1ZXJpZXMkLnB1c2godGhpcy5kb1F1ZXJ5RmVhdHVyZXMoZXZlbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNvbHV0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFJlc29sdXRpb24oKTtcclxuICAgIGNvbnN0IHF1ZXJ5TGF5ZXJzID0gdGhpcy5tYXAubGF5ZXJzLmZpbHRlcihsYXllcklzUXVlcnlhYmxlKTtcclxuICAgIHF1ZXJpZXMkLnB1c2goXHJcbiAgICAgIC4uLnRoaXMucXVlcnlTZXJ2aWNlLnF1ZXJ5KHF1ZXJ5TGF5ZXJzLCB7XHJcbiAgICAgICAgY29vcmRpbmF0ZXM6IGV2ZW50LmNvb3JkaW5hdGUgYXMgW251bWJlciwgbnVtYmVyXSxcclxuICAgICAgICBwcm9qZWN0aW9uOiB0aGlzLm1hcC5wcm9qZWN0aW9uLFxyXG4gICAgICAgIHJlc29sdXRpb25cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHF1ZXJpZXMkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMud2FpdEZvckFsbFF1ZXJpZXMpIHtcclxuICAgICAgdGhpcy5xdWVyaWVzJCQucHVzaChcclxuICAgICAgICB6aXAoLi4ucXVlcmllcyQpLnN1YnNjcmliZSgocmVzdWx0czogRmVhdHVyZVtdW10pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gW10uY29uY2F0KC4uLnJlc3VsdHMpO1xyXG4gICAgICAgICAgdGhpcy5xdWVyeS5lbWl0KHsgZmVhdHVyZXMsIGV2ZW50IH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnF1ZXJpZXMkJCA9IHF1ZXJpZXMkLm1hcCgocXVlcnkkOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT4pID0+IHtcclxuICAgICAgICByZXR1cm4gcXVlcnkkLnN1YnNjcmliZSgoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xdWVyeS5lbWl0KHsgZmVhdHVyZXMsIGV2ZW50IH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1ZXJ5IGZlYXR1cmVzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgbWFwXHJcbiAgICogQHBhcmFtIGV2ZW50IE9MIG1hcCBicm93c2VyIHBvaW50ZXIgZXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIGRvUXVlcnlGZWF0dXJlcyhcclxuICAgIGV2ZW50OiBNYXBCcm93c2VyUG9pbnRlckV2ZW50PGFueT5cclxuICApOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT4ge1xyXG4gICAgY29uc3QgY2xpY2tlZEZlYXR1cmVzID0gW107XHJcblxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdzaW5nbGVjbGljaycpIHtcclxuICAgICAgdGhpcy5tYXAub2wuZm9yRWFjaEZlYXR1cmVBdFBpeGVsKFxyXG4gICAgICAgIGV2ZW50LnBpeGVsLFxyXG4gICAgICAgIChmZWF0dXJlT0w6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgbGF5ZXJPTDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMubWFwLmdldExheWVyQnlJZChsYXllck9MLnZhbHVlc18uX2xheWVyLmlkKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucylcclxuICAgICAgICAgICAgICAucXVlcnlGb3JtYXRBc1dtc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChmZWF0dXJlT0wpIHtcclxuICAgICAgICAgICAgaWYgKGZlYXR1cmVPTC5nZXQoJ2ZlYXR1cmVzJykpIHtcclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZU9MLmdldCgnZmVhdHVyZXMnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RmVhdHVyZSA9IGZlYXR1cmVGcm9tT2woZmVhdHVyZSwgdGhpcy5tYXAucHJvamVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBuZXdGZWF0dXJlLm1ldGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBmZWF0dXJlLnZhbHVlc18ubm9tLFxyXG4gICAgICAgICAgICAgICAgICBpZDogbGF5ZXJPTC52YWx1ZXNfLl9sYXllci5pZCArICcuJyArIGZlYXR1cmUuaWRfLFxyXG4gICAgICAgICAgICAgICAgICBpY29uOiBmZWF0dXJlLnZhbHVlc18uX2ljb24sXHJcbiAgICAgICAgICAgICAgICAgIHNvdXJjZVRpdGxlOiBsYXllck9MLnZhbHVlc18udGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGFsaWFzOiB0aGlzLnF1ZXJ5U2VydmljZS5nZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXIpXHJcbiAgICAgICAgICAgICAgICAgIC8vIHRpdGxlOiB0aGlzLnF1ZXJ5U2VydmljZS5nZXRRdWVyeVRpdGxlKG5ld0ZlYXR1cmUsIGxheWVyKSB8fCBuZXdGZWF0dXJlLm1ldGEudGl0bGVcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjbGlja2VkRmVhdHVyZXMucHVzaChuZXdGZWF0dXJlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmVhdHVyZU9MIGluc3RhbmNlb2YgT2xSZW5kZXJGZWF0dXJlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3RmVhdHVyZSA9IHJlbmRlckZlYXR1cmVGcm9tT2woXHJcbiAgICAgICAgICAgICAgICBmZWF0dXJlT0wsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJPTFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgbmV3RmVhdHVyZS5tZXRhID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGxheWVyT0wudmFsdWVzXy5fbGF5ZXIuaWQgKyAnLicgKyBuZXdGZWF0dXJlLm1ldGEuaWQsXHJcbiAgICAgICAgICAgICAgICBzb3VyY2VUaXRsZTogbGF5ZXJPTC52YWx1ZXNfLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgYWxpYXM6IHRoaXMucXVlcnlTZXJ2aWNlLmdldEFsbG93ZWRGaWVsZHNBbmRBbGlhcyhsYXllciksXHJcbiAgICAgICAgICAgICAgICB0aXRsZTpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlcnZpY2UuZ2V0UXVlcnlUaXRsZShuZXdGZWF0dXJlLCBsYXllcikgfHxcclxuICAgICAgICAgICAgICAgICAgbmV3RmVhdHVyZS5tZXRhLnRpdGxlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBjbGlja2VkRmVhdHVyZXMucHVzaChuZXdGZWF0dXJlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdGZWF0dXJlID0gZmVhdHVyZUZyb21PbChcclxuICAgICAgICAgICAgICAgIGZlYXR1cmVPTCxcclxuICAgICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBsYXllck9MXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBuZXdGZWF0dXJlLm1ldGEgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogbGF5ZXJPTC52YWx1ZXNfLl9sYXllci5pZCArICcuJyArIG5ld0ZlYXR1cmUubWV0YS5pZCxcclxuICAgICAgICAgICAgICAgIHNvdXJjZVRpdGxlOiBsYXllck9MLnZhbHVlc18udGl0bGUsXHJcbiAgICAgICAgICAgICAgICBhbGlhczogdGhpcy5xdWVyeVNlcnZpY2UuZ2V0QWxsb3dlZEZpZWxkc0FuZEFsaWFzKGxheWVyKSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VydmljZS5nZXRRdWVyeVRpdGxlKG5ld0ZlYXR1cmUsIGxheWVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICBuZXdGZWF0dXJlLm1ldGEudGl0bGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGNsaWNrZWRGZWF0dXJlcy5wdXNoKG5ld0ZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoaXRUb2xlcmFuY2U6IHRoaXMucXVlcnlGZWF0dXJlc0hpdFRvbGVyYW5jZSB8fCAwLFxyXG4gICAgICAgICAgbGF5ZXJGaWx0ZXI6IHRoaXMucXVlcnlGZWF0dXJlc0NvbmRpdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucXVlcnlGZWF0dXJlc0NvbmRpdGlvblxyXG4gICAgICAgICAgICA6IG9sTGF5ZXJGZWF0dXJlSXNRdWVyeWFibGVcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdib3hlbmQnKSB7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBhbnk7XHJcbiAgICAgIGNvbnN0IGRyYWdFeHRlbnQgPSB0YXJnZXQuZ2V0R2VvbWV0cnkoKS5nZXRFeHRlbnQoKTtcclxuICAgICAgdGhpcy5tYXAubGF5ZXJzXHJcbiAgICAgICAgLmZpbHRlcihsYXllcklzUXVlcnlhYmxlKVxyXG4gICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIGxheWVyLnZpc2libGUpXHJcbiAgICAgICAgLm1hcCgobGF5ZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVzT0wgPSBsYXllci5kYXRhU291cmNlLm9sIGFzIG9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+O1xyXG4gICAgICAgICAgZmVhdHVyZXNPTC5mb3JFYWNoRmVhdHVyZUludGVyc2VjdGluZ0V4dGVudChcclxuICAgICAgICAgICAgZHJhZ0V4dGVudCxcclxuICAgICAgICAgICAgKG9sRmVhdHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3RmVhdHVyZTogRmVhdHVyZSA9IGZlYXR1cmVGcm9tT2woXHJcbiAgICAgICAgICAgICAgICBvbEZlYXR1cmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXIub2xcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIG5ld0ZlYXR1cmUubWV0YSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBsYXllci5pZCArICcuJyArIG9sRmVhdHVyZS5nZXRJZCgpLFxyXG4gICAgICAgICAgICAgICAgaWNvbjogb2xGZWF0dXJlLnZhbHVlc18uX2ljb24sXHJcbiAgICAgICAgICAgICAgICBzb3VyY2VUaXRsZTogbGF5ZXIudGl0bGUsXHJcbiAgICAgICAgICAgICAgICBhbGlhczogdGhpcy5xdWVyeVNlcnZpY2UuZ2V0QWxsb3dlZEZpZWxkc0FuZEFsaWFzKGxheWVyKSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VydmljZS5nZXRRdWVyeVRpdGxlKG5ld0ZlYXR1cmUsIGxheWVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICBuZXdGZWF0dXJlLm1ldGEudGl0bGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGNsaWNrZWRGZWF0dXJlcy5wdXNoKG5ld0ZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihjbGlja2VkRmVhdHVyZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIG9uZ29pbmcgcmVxdWVzdHMsIGlmIGFueVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2FuY2VsT25nb2luZ1F1ZXJpZXMoKSB7XHJcbiAgICB0aGlzLnF1ZXJpZXMkJC5mb3JFYWNoKChzdWI6IFN1YnNjcmlwdGlvbikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5xdWVyaWVzJCQgPSBbXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIGRyYWcgYm94IGludGVyYWN0aW9uIGFuZCwgb24gZHJhZyBib3ggZW5kLCBzZWxlY3QgZmVhdHVyZXNcclxuICAgKi9cclxuICBwcml2YXRlIGFkZERyYWdCb3hJbnRlcmFjdGlvbigpIHtcclxuICAgIGxldCBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbk9uUXVlcnk7XHJcbiAgICBjb25zdCBvbEludGVyYWN0aW9ucyA9IHRoaXMubWFwLm9sLmdldEludGVyYWN0aW9ucygpLmdldEFycmF5KCk7XHJcblxyXG4gICAgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lIGRyYWdib3ggaW50ZXJhY3Rpb24sIHNvIGZpbmQgdGhlIGN1cnJlbnQgb25lLCBpZiBhbnlcclxuICAgIC8vIERvbid0IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZHJhZ2JveCBiZWNhdXNlIHdlIGRvbid0IHdhbnRcclxuICAgIC8vIHRvIHJlbW92ZSBpdCB3aGVuIHRoaXMgc3RhcnRlZ3kgaXMgZGVhY3RpdmF0ZWRcclxuICAgIGZvciAoY29uc3Qgb2xJbnRlcmFjdGlvbiBvZiBvbEludGVyYWN0aW9ucykge1xyXG4gICAgICBpZiAob2xJbnRlcmFjdGlvbiBpbnN0YW5jZW9mIE9sRHJhZ1NlbGVjdEludGVyYWN0aW9uKSB7XHJcbiAgICAgICAgb2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25PblF1ZXJ5ID0gb2xJbnRlcmFjdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gSWYgbm8gZHJhZyBib3ggaW50ZXJhY3Rpb24gaXMgZm91bmQsIGNyZWF0ZSBhIG5ldyBvbmUgYW5kIGFkZCBpdCB0byB0aGUgbWFwXHJcbiAgICBpZiAob2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25PblF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgb2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25PblF1ZXJ5ID0gbmV3IE9sRHJhZ1NlbGVjdEludGVyYWN0aW9uKHtcclxuICAgICAgICBjb25kaXRpb246IGN0cmxLZXlEb3duXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLm1hcC5vbC5hZGRJbnRlcmFjdGlvbihvbERyYWdTZWxlY3RJbnRlcmFjdGlvbk9uUXVlcnkpO1xyXG4gICAgICB0aGlzLm9sRHJhZ1NlbGVjdEludGVyYWN0aW9uID0gb2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25PblF1ZXJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25FbmRLZXkgPSBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbk9uUXVlcnkub24oXHJcbiAgICAgICdib3hlbmQnLFxyXG4gICAgICAoZXZlbnQ6IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQ8YW55PikgPT4gdGhpcy5vbk1hcEV2ZW50KGV2ZW50KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBkcmFnIGJveCBpbnRlcmFjdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVtb3ZlRHJhZ0JveEludGVyYWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25FbmRLZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB1bkJ5S2V5KHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb25FbmRLZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm1hcC5vbC5yZW1vdmVJbnRlcmFjdGlvbih0aGlzLm9sRHJhZ1NlbGVjdEludGVyYWN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvcXVlcnkvc2hhcmVkL3F1ZXJ5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDTCxNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXhDLE9BQU8sZUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBSWhELE9BQU8sRUFBNEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBRTVFOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQTBEUDtJQUNSO0lBMURWOztPQUVHO0lBQ0ssU0FBUyxHQUFtQixFQUFFLENBQUM7SUFFdkM7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQztJQUV6Qjs7T0FFRztJQUNLLHVCQUF1QixDQUEwQjtJQUV6RDs7T0FFRztJQUNLLDZCQUE2QixDQUEwQjtJQUUvRDs7T0FFRztJQUNNLGFBQWEsR0FBWSxLQUFLLENBQUM7SUFFeEM7O09BRUc7SUFDTSx5QkFBeUIsR0FBVyxDQUFDLENBQUM7SUFFL0M7O09BRUc7SUFDTSxzQkFBc0IsQ0FBMEM7SUFFekU7O09BRUc7SUFDTSxpQkFBaUIsR0FBWSxJQUFJLENBQUM7SUFFM0M7O09BRUc7SUFDTyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBRzlCLENBQUM7SUFFTDs7O09BR0c7SUFDSCxJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBb0IsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFDa0IsU0FBOEIsRUFDdEMsWUFBMEI7UUFEbEIsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDdEMsaUJBQVksR0FBWixZQUFZLENBQWM7SUFDakMsQ0FBQztJQUVKOzs7T0FHRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUNwQyxhQUFhLEVBQ2IsQ0FBQyxLQUFrQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxVQUFVLENBQUMsS0FBa0M7UUFDbkQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RCxRQUFRLENBQUMsSUFBSSxDQUNYLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ3RDLFdBQVcsRUFBRSxLQUFLLENBQUMsVUFBOEI7WUFDakQsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVTtZQUMvQixVQUFVO1NBQ1gsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNqQixHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFvQixFQUFFLEVBQUU7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FDSCxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQTZCLEVBQUUsRUFBRTtnQkFDOUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBbUIsRUFBRSxFQUFFO29CQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUNyQixLQUFrQztRQUVsQyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFM0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FDL0IsS0FBSyxDQUFDLEtBQUssRUFDWCxDQUFDLFNBQWdDLEVBQUUsT0FBWSxFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxJQUNHLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBc0M7cUJBQ3JELGdCQUFnQixFQUNuQjtvQkFDQSxPQUFPO2lCQUNSO2dCQUNELElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTt3QkFDN0IsS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFOzRCQUMvQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQy9ELFVBQVUsQ0FBQyxJQUFJLEdBQUc7Z0NBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0NBQzFCLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHO2dDQUNqRCxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dDQUMzQixXQUFXLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dDQUNsQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7Z0NBQ3hELHFGQUFxRjs2QkFDdEYsQ0FBQzs0QkFDRixlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUNsQztxQkFDRjt5QkFBTSxJQUFJLFNBQVMsWUFBWSxlQUFlLEVBQUU7d0JBQy9DLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUNwQyxTQUFTLEVBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQ25CLE9BQU8sQ0FDUixDQUFDO3dCQUNGLFVBQVUsQ0FBQyxJQUFJLEdBQUc7NEJBQ2hCLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDeEQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSzs0QkFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDOzRCQUN4RCxLQUFLLEVBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztnQ0FDbEQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLO3lCQUN4QixDQUFDO3dCQUNGLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ2xDO3lCQUFNO3dCQUNMLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FDOUIsU0FBUyxFQUNULElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUNuQixPQUFPLENBQ1IsQ0FBQzt3QkFDRixVQUFVLENBQUMsSUFBSSxHQUFHOzRCQUNoQixFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ3hELFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUs7NEJBQ2xDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQzs0QkFDeEQsS0FBSyxFQUNILElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7Z0NBQ2xELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSzt5QkFDeEIsQ0FBQzt3QkFDRixlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNsQztpQkFDRjtZQUNILENBQUMsRUFDRDtnQkFDRSxZQUFZLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUM7Z0JBQ2pELFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCO29CQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtvQkFDN0IsQ0FBQyxDQUFDLHlCQUF5QjthQUM5QixDQUNGLENBQUM7U0FDSDthQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQWEsQ0FBQztZQUNuQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO2lCQUNaLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDeEIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksV0FBVyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7aUJBQ2hFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNiLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBZ0MsQ0FBQztnQkFDckUsVUFBVSxDQUFDLGdDQUFnQyxDQUN6QyxVQUFVLEVBQ1YsQ0FBQyxTQUFjLEVBQUUsRUFBRTtvQkFDakIsTUFBTSxVQUFVLEdBQVksYUFBYSxDQUN2QyxTQUFTLEVBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQ25CLEtBQUssQ0FBQyxFQUFFLENBQ1QsQ0FBQztvQkFDRixVQUFVLENBQUMsSUFBSSxHQUFHO3dCQUNoQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRTt3QkFDdEMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSzt3QkFDN0IsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLO3dCQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7d0JBQ3hELEtBQUssRUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDOzRCQUNsRCxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUs7cUJBQ3hCLENBQUM7b0JBQ0YsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBaUIsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCO1FBQzNCLElBQUksOEJBQThCLENBQUM7UUFDbkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEUsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RSxpREFBaUQ7UUFDakQsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUU7WUFDMUMsSUFBSSxhQUFhLFlBQVksdUJBQXVCLEVBQUU7Z0JBQ3BELDhCQUE4QixHQUFHLGFBQWEsQ0FBQztnQkFDL0MsTUFBTTthQUNQO1NBQ0Y7UUFDRCw4RUFBOEU7UUFDOUUsSUFBSSw4QkFBOEIsS0FBSyxTQUFTLEVBQUU7WUFDaEQsOEJBQThCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQztnQkFDM0QsU0FBUyxFQUFFLFdBQVc7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLDhCQUE4QixDQUFDO1NBQy9EO1FBRUQsSUFBSSxDQUFDLDZCQUE2QixHQUFHLDhCQUE4QixDQUFDLEVBQUUsQ0FDcEUsUUFBUSxFQUNSLENBQUMsS0FBa0MsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDL0QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QjtRQUM5QixJQUFJLElBQUksQ0FBQyw2QkFBNkIsS0FBSyxTQUFTLEVBQUU7WUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEtBQUssU0FBUyxFQUFFO1lBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztJQUMzQyxDQUFDO3dFQTlTVSxjQUFjOzZEQUFkLGNBQWM7O3VGQUFkLGNBQWM7Y0FIMUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2FBQ3ZCOztzQkEyREksSUFBSTttREFsQ0UsYUFBYTtrQkFBckIsS0FBSztZQUtHLHlCQUF5QjtrQkFBakMsS0FBSztZQUtHLHNCQUFzQjtrQkFBOUIsS0FBSztZQUtHLGlCQUFpQjtrQkFBekIsS0FBSztZQUtJLEtBQUs7a0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2VsZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcclxuaW1wb3J0IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQgZnJvbSAnb2wvTWFwQnJvd3NlckV2ZW50JztcclxuaW1wb3J0IHsgdW5CeUtleSB9IGZyb20gJ29sL09ic2VydmFibGUnO1xyXG5pbXBvcnQgeyBFdmVudHNLZXkgfSBmcm9tICdvbC9ldmVudHMnO1xyXG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5pbXBvcnQgT2xMYXllciBmcm9tICdvbC9sYXllci9MYXllcic7XHJcbmltcG9ydCBPbFJlbmRlckZlYXR1cmUgZnJvbSAnb2wvcmVuZGVyL0ZlYXR1cmUnO1xyXG5pbXBvcnQgT2xTb3VyY2UgZnJvbSAnb2wvc291cmNlL1NvdXJjZSc7XHJcbmltcG9ydCBvbFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YsIHppcCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IHJlbmRlckZlYXR1cmVGcm9tT2wgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLnV0aWxzJztcclxuaW1wb3J0IHsgZmVhdHVyZUZyb21PbCB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUudXRpbHMnO1xyXG5pbXBvcnQgeyBPbERyYWdTZWxlY3RJbnRlcmFjdGlvbiB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL3N0cmF0ZWdpZXMvc2VsZWN0aW9uJztcclxuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XHJcbmltcG9ydCB7IE1hcEJyb3dzZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tYXAvbWFwLWJyb3dzZXIvbWFwLWJyb3dzZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xyXG5pbXBvcnQgeyBjdHJsS2V5RG93biB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwLnV0aWxzJztcclxuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuL3F1ZXJ5LmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tICcuL3F1ZXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsYXllcklzUXVlcnlhYmxlLCBvbExheWVyRmVhdHVyZUlzUXVlcnlhYmxlIH0gZnJvbSAnLi9xdWVyeS51dGlscyc7XHJcblxyXG4vKipcclxuICogVGhpcyBkaXJlY3RpdmUgbWFrZXMgYSBtYXAgcXVlcnlhYmxlIHdpdGggYSBjbGljayBvZiB3aXRoIGEgZHJhZyBib3guXHJcbiAqIEJ5IGRlZmF1bHQsIGFsbCBsYXllcnMgYXJlIHF1ZXJ5YWJsZSBidXQgdGhpcyBjYW4gYmVuIGNvbnRyb2xsZWQgYXRcclxuICogdGhlIGxheWVyIGxldmVsLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbaWdvUXVlcnldJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlcnlEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbnMgdG8gb25nb2luZyBxdWVyaWVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBxdWVyaWVzJCQ6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbmVyIHRvIHRoZSBtYXAgY2xpY2sgZXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIG1hcENsaWNrTGlzdGVuZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9MIGRyYWcgYm94IGludGVyYWN0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbjogT2xEcmFnU2VsZWN0SW50ZXJhY3Rpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIE9sIGRyYWcgYm94IFwiZW5kXCIgZXZlbnQga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbkVuZEtleTogRXZlbnRzS2V5IHwgRXZlbnRzS2V5W107XHJcblxyXG4gIC8qKlxyXG4gICAqIFdodGVyIHRvIHF1ZXJ5IGZlYXR1cmVzIG9yIG5vdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHF1ZXJ5RmVhdHVyZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRmVhdHVyZSBxdWVyeSBoaXQgdG9sZXJhbmNlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcXVlcnlGZWF0dXJlc0hpdFRvbGVyYW5jZTogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogRmVhdHVyZSBxdWVyeSBoaXQgdG9sZXJhbmNlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcXVlcnlGZWF0dXJlc0NvbmRpdGlvbjogKG9sTGF5ZXI6IE9sTGF5ZXI8T2xTb3VyY2U+KSA9PiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGFsbCBxdWVyeSBzaG91bGQgY29tcGxldGUgYmVmb3JlIGVtaXR0aW5nIGFuIGV2ZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgd2FpdEZvckFsbFF1ZXJpZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBxdWVyeSAob3IgYWxsIHF1ZXJpZXMpIGNvbXBsZXRlXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHF1ZXJ5ID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBmZWF0dXJlczogRmVhdHVyZVtdIHwgRmVhdHVyZVtdW107XHJcbiAgICBldmVudDogTWFwQnJvd3NlclBvaW50ZXJFdmVudDxhbnk+O1xyXG4gIH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElHTyBtYXBcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQubWFwIGFzIGFueSBhcyBJZ29NYXA7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBTZWxmKCkgcHJpdmF0ZSBjb21wb25lbnQ6IE1hcEJyb3dzZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBsaXN0ZW5pbmcgdG8gY2xpY2sgYW5kIGRyYWcgYm94IGV2ZW50c1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMubGlzdGVuVG9NYXBDbGljaygpO1xyXG4gICAgdGhpcy5hZGREcmFnQm94SW50ZXJhY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGNsaWNrIGFuZCBkcmFnIGJveCBldmVudHMgYW5kIGNhbmNlbCBvbmdvaW5kIHJlcXVlc3RzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNhbmNlbE9uZ29pbmdRdWVyaWVzKCk7XHJcbiAgICB0aGlzLnVubGlzdGVuVG9NYXBDbGljaygpO1xyXG4gICAgdGhpcy5yZW1vdmVEcmFnQm94SW50ZXJhY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIG1hcCBjbGljaywgaXNzdWUgcXVlcmllc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbGlzdGVuVG9NYXBDbGljaygpIHtcclxuICAgIHRoaXMubWFwQ2xpY2tMaXN0ZW5lciA9IHRoaXMubWFwLm9sLm9uKFxyXG4gICAgICAnc2luZ2xlY2xpY2snLFxyXG4gICAgICAoZXZlbnQ6IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQ8YW55PikgPT4gdGhpcy5vbk1hcEV2ZW50KGV2ZW50KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIGZvciBtYXAgY2xpY2tzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1bmxpc3RlblRvTWFwQ2xpY2soKSB7XHJcbiAgICB1bkJ5S2V5KHRoaXMubWFwQ2xpY2tMaXN0ZW5lcik7XHJcbiAgICB0aGlzLm1hcENsaWNrTGlzdGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJc3N1ZSBxdWVyaWVzIGZyb20gYSBtYXAgZXZlbnQgYW5kIGVtaXQgZXZlbnRzIHdpdGggdGhlIHJlc3VsdHNcclxuICAgKiBAcGFyYW0gZXZlbnQgT0wgbWFwIGJyb3dzZXIgcG9pbnRlciBldmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25NYXBFdmVudChldmVudDogTWFwQnJvd3NlclBvaW50ZXJFdmVudDxhbnk+KSB7XHJcbiAgICB0aGlzLmNhbmNlbE9uZ29pbmdRdWVyaWVzKCk7XHJcbiAgICBpZiAoIXRoaXMucXVlcnlTZXJ2aWNlLnF1ZXJ5RW5hYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVlcmllcyQgPSBbXTtcclxuICAgIGlmICh0aGlzLnF1ZXJ5RmVhdHVyZXMpIHtcclxuICAgICAgcXVlcmllcyQucHVzaCh0aGlzLmRvUXVlcnlGZWF0dXJlcyhldmVudCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc29sdXRpb24gPSB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UmVzb2x1dGlvbigpO1xyXG4gICAgY29uc3QgcXVlcnlMYXllcnMgPSB0aGlzLm1hcC5sYXllcnMuZmlsdGVyKGxheWVySXNRdWVyeWFibGUpO1xyXG4gICAgcXVlcmllcyQucHVzaChcclxuICAgICAgLi4udGhpcy5xdWVyeVNlcnZpY2UucXVlcnkocXVlcnlMYXllcnMsIHtcclxuICAgICAgICBjb29yZGluYXRlczogZXZlbnQuY29vcmRpbmF0ZSBhcyBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgICAgIHByb2plY3Rpb246IHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgcmVzb2x1dGlvblxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAocXVlcmllcyQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy53YWl0Rm9yQWxsUXVlcmllcykge1xyXG4gICAgICB0aGlzLnF1ZXJpZXMkJC5wdXNoKFxyXG4gICAgICAgIHppcCguLi5xdWVyaWVzJCkuc3Vic2NyaWJlKChyZXN1bHRzOiBGZWF0dXJlW11bXSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBbXS5jb25jYXQoLi4ucmVzdWx0cyk7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5LmVtaXQoeyBmZWF0dXJlcywgZXZlbnQgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlcmllcyQkID0gcXVlcmllcyQubWFwKChxdWVyeSQ6IE9ic2VydmFibGU8RmVhdHVyZVtdPikgPT4ge1xyXG4gICAgICAgIHJldHVybiBxdWVyeSQuc3Vic2NyaWJlKChmZWF0dXJlczogRmVhdHVyZVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5LmVtaXQoeyBmZWF0dXJlcywgZXZlbnQgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUXVlcnkgZmVhdHVyZXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBtYXBcclxuICAgKiBAcGFyYW0gZXZlbnQgT0wgbWFwIGJyb3dzZXIgcG9pbnRlciBldmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZG9RdWVyeUZlYXR1cmVzKFxyXG4gICAgZXZlbnQ6IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQ8YW55PlxyXG4gICk6IE9ic2VydmFibGU8RmVhdHVyZVtdPiB7XHJcbiAgICBjb25zdCBjbGlja2VkRmVhdHVyZXMgPSBbXTtcclxuXHJcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3NpbmdsZWNsaWNrJykge1xyXG4gICAgICB0aGlzLm1hcC5vbC5mb3JFYWNoRmVhdHVyZUF0UGl4ZWwoXHJcbiAgICAgICAgZXZlbnQucGl4ZWwsXHJcbiAgICAgICAgKGZlYXR1cmVPTDogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCBsYXllck9MOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGxheWVyT0wudmFsdWVzXy5fbGF5ZXIuaWQpO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zKVxyXG4gICAgICAgICAgICAgIC5xdWVyeUZvcm1hdEFzV21zXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZlYXR1cmVPTCkge1xyXG4gICAgICAgICAgICBpZiAoZmVhdHVyZU9MLmdldCgnZmVhdHVyZXMnKSkge1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlT0wuZ2V0KCdmZWF0dXJlcycpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdGZWF0dXJlID0gZmVhdHVyZUZyb21PbChmZWF0dXJlLCB0aGlzLm1hcC5wcm9qZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIG5ld0ZlYXR1cmUubWV0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IGZlYXR1cmUudmFsdWVzXy5ub20sXHJcbiAgICAgICAgICAgICAgICAgIGlkOiBsYXllck9MLnZhbHVlc18uX2xheWVyLmlkICsgJy4nICsgZmVhdHVyZS5pZF8sXHJcbiAgICAgICAgICAgICAgICAgIGljb246IGZlYXR1cmUudmFsdWVzXy5faWNvbixcclxuICAgICAgICAgICAgICAgICAgc291cmNlVGl0bGU6IGxheWVyT0wudmFsdWVzXy50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgYWxpYXM6IHRoaXMucXVlcnlTZXJ2aWNlLmdldEFsbG93ZWRGaWVsZHNBbmRBbGlhcyhsYXllcilcclxuICAgICAgICAgICAgICAgICAgLy8gdGl0bGU6IHRoaXMucXVlcnlTZXJ2aWNlLmdldFF1ZXJ5VGl0bGUobmV3RmVhdHVyZSwgbGF5ZXIpIHx8IG5ld0ZlYXR1cmUubWV0YS50aXRsZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNsaWNrZWRGZWF0dXJlcy5wdXNoKG5ld0ZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmZWF0dXJlT0wgaW5zdGFuY2VvZiBPbFJlbmRlckZlYXR1cmUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdGZWF0dXJlID0gcmVuZGVyRmVhdHVyZUZyb21PbChcclxuICAgICAgICAgICAgICAgIGZlYXR1cmVPTCxcclxuICAgICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBsYXllck9MXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBuZXdGZWF0dXJlLm1ldGEgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogbGF5ZXJPTC52YWx1ZXNfLl9sYXllci5pZCArICcuJyArIG5ld0ZlYXR1cmUubWV0YS5pZCxcclxuICAgICAgICAgICAgICAgIHNvdXJjZVRpdGxlOiBsYXllck9MLnZhbHVlc18udGl0bGUsXHJcbiAgICAgICAgICAgICAgICBhbGlhczogdGhpcy5xdWVyeVNlcnZpY2UuZ2V0QWxsb3dlZEZpZWxkc0FuZEFsaWFzKGxheWVyKSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VydmljZS5nZXRRdWVyeVRpdGxlKG5ld0ZlYXR1cmUsIGxheWVyKSB8fFxyXG4gICAgICAgICAgICAgICAgICBuZXdGZWF0dXJlLm1ldGEudGl0bGVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGNsaWNrZWRGZWF0dXJlcy5wdXNoKG5ld0ZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0ZlYXR1cmUgPSBmZWF0dXJlRnJvbU9sKFxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZU9MLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcclxuICAgICAgICAgICAgICAgIGxheWVyT0xcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIG5ld0ZlYXR1cmUubWV0YSA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBsYXllck9MLnZhbHVlc18uX2xheWVyLmlkICsgJy4nICsgbmV3RmVhdHVyZS5tZXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgc291cmNlVGl0bGU6IGxheWVyT0wudmFsdWVzXy50aXRsZSxcclxuICAgICAgICAgICAgICAgIGFsaWFzOiB0aGlzLnF1ZXJ5U2VydmljZS5nZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXIpLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlTZXJ2aWNlLmdldFF1ZXJ5VGl0bGUobmV3RmVhdHVyZSwgbGF5ZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgIG5ld0ZlYXR1cmUubWV0YS50aXRsZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgY2xpY2tlZEZlYXR1cmVzLnB1c2gobmV3RmVhdHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhpdFRvbGVyYW5jZTogdGhpcy5xdWVyeUZlYXR1cmVzSGl0VG9sZXJhbmNlIHx8IDAsXHJcbiAgICAgICAgICBsYXllckZpbHRlcjogdGhpcy5xdWVyeUZlYXR1cmVzQ29uZGl0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5xdWVyeUZlYXR1cmVzQ29uZGl0aW9uXHJcbiAgICAgICAgICAgIDogb2xMYXllckZlYXR1cmVJc1F1ZXJ5YWJsZVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ2JveGVuZCcpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIGFueTtcclxuICAgICAgY29uc3QgZHJhZ0V4dGVudCA9IHRhcmdldC5nZXRHZW9tZXRyeSgpLmdldEV4dGVudCgpO1xyXG4gICAgICB0aGlzLm1hcC5sYXllcnNcclxuICAgICAgICAuZmlsdGVyKGxheWVySXNRdWVyeWFibGUpXHJcbiAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIgJiYgbGF5ZXIudmlzaWJsZSlcclxuICAgICAgICAubWFwKChsYXllcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmVhdHVyZXNPTCA9IGxheWVyLmRhdGFTb3VyY2Uub2wgYXMgb2xWZWN0b3JTb3VyY2U8T2xHZW9tZXRyeT47XHJcbiAgICAgICAgICBmZWF0dXJlc09MLmZvckVhY2hGZWF0dXJlSW50ZXJzZWN0aW5nRXh0ZW50KFxyXG4gICAgICAgICAgICBkcmFnRXh0ZW50LFxyXG4gICAgICAgICAgICAob2xGZWF0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdGZWF0dXJlOiBGZWF0dXJlID0gZmVhdHVyZUZyb21PbChcclxuICAgICAgICAgICAgICAgIG9sRmVhdHVyZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBsYXllci5vbFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgbmV3RmVhdHVyZS5tZXRhID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGxheWVyLmlkICsgJy4nICsgb2xGZWF0dXJlLmdldElkKCksXHJcbiAgICAgICAgICAgICAgICBpY29uOiBvbEZlYXR1cmUudmFsdWVzXy5faWNvbixcclxuICAgICAgICAgICAgICAgIHNvdXJjZVRpdGxlOiBsYXllci50aXRsZSxcclxuICAgICAgICAgICAgICAgIGFsaWFzOiB0aGlzLnF1ZXJ5U2VydmljZS5nZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXIpLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlTZXJ2aWNlLmdldFF1ZXJ5VGl0bGUobmV3RmVhdHVyZSwgbGF5ZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgIG5ld0ZlYXR1cmUubWV0YS50aXRsZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgY2xpY2tlZEZlYXR1cmVzLnB1c2gobmV3RmVhdHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKGNsaWNrZWRGZWF0dXJlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWwgb25nb2luZyByZXF1ZXN0cywgaWYgYW55XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjYW5jZWxPbmdvaW5nUXVlcmllcygpIHtcclxuICAgIHRoaXMucXVlcmllcyQkLmZvckVhY2goKHN1YjogU3Vic2NyaXB0aW9uKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLnF1ZXJpZXMkJCA9IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgZHJhZyBib3ggaW50ZXJhY3Rpb24gYW5kLCBvbiBkcmFnIGJveCBlbmQsIHNlbGVjdCBmZWF0dXJlc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkRHJhZ0JveEludGVyYWN0aW9uKCkge1xyXG4gICAgbGV0IG9sRHJhZ1NlbGVjdEludGVyYWN0aW9uT25RdWVyeTtcclxuICAgIGNvbnN0IG9sSW50ZXJhY3Rpb25zID0gdGhpcy5tYXAub2wuZ2V0SW50ZXJhY3Rpb25zKCkuZ2V0QXJyYXkoKTtcclxuXHJcbiAgICAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmUgZHJhZ2JveCBpbnRlcmFjdGlvbiwgc28gZmluZCB0aGUgY3VycmVudCBvbmUsIGlmIGFueVxyXG4gICAgLy8gRG9uJ3Qga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkcmFnYm94IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudFxyXG4gICAgLy8gdG8gcmVtb3ZlIGl0IHdoZW4gdGhpcyBzdGFydGVneSBpcyBkZWFjdGl2YXRlZFxyXG4gICAgZm9yIChjb25zdCBvbEludGVyYWN0aW9uIG9mIG9sSW50ZXJhY3Rpb25zKSB7XHJcbiAgICAgIGlmIChvbEludGVyYWN0aW9uIGluc3RhbmNlb2YgT2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24pIHtcclxuICAgICAgICBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbk9uUXVlcnkgPSBvbEludGVyYWN0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBJZiBubyBkcmFnIGJveCBpbnRlcmFjdGlvbiBpcyBmb3VuZCwgY3JlYXRlIGEgbmV3IG9uZSBhbmQgYWRkIGl0IHRvIHRoZSBtYXBcclxuICAgIGlmIChvbERyYWdTZWxlY3RJbnRlcmFjdGlvbk9uUXVlcnkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbk9uUXVlcnkgPSBuZXcgT2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24oe1xyXG4gICAgICAgIGNvbmRpdGlvbjogY3RybEtleURvd25cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubWFwLm9sLmFkZEludGVyYWN0aW9uKG9sRHJhZ1NlbGVjdEludGVyYWN0aW9uT25RdWVyeSk7XHJcbiAgICAgIHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24gPSBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbk9uUXVlcnk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbERyYWdTZWxlY3RJbnRlcmFjdGlvbkVuZEtleSA9IG9sRHJhZ1NlbGVjdEludGVyYWN0aW9uT25RdWVyeS5vbihcclxuICAgICAgJ2JveGVuZCcsXHJcbiAgICAgIChldmVudDogTWFwQnJvd3NlclBvaW50ZXJFdmVudDxhbnk+KSA9PiB0aGlzLm9uTWFwRXZlbnQoZXZlbnQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGRyYWcgYm94IGludGVyYWN0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmVEcmFnQm94SW50ZXJhY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5vbERyYWdTZWxlY3RJbnRlcmFjdGlvbkVuZEtleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHVuQnlLZXkodGhpcy5vbERyYWdTZWxlY3RJbnRlcmFjdGlvbkVuZEtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vbERyYWdTZWxlY3RJbnRlcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMubWFwLm9sLnJlbW92ZUludGVyYWN0aW9uKHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbERyYWdTZWxlY3RJbnRlcmFjdGlvbiA9IHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgUXVlcnlGb3JtYXQsIFF1ZXJ5SHRtbFRhcmdldCB9IGZyb20gJy4vcXVlcnkuZW51bXMnO1xuXG5pbXBvcnQgb2xTb3VyY2UgZnJvbSAnb2wvc291cmNlL1NvdXJjZSc7XG5pbXBvcnQgb2xTb3VyY2VWZWN0b3IgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5T3B0aW9ucyB7XG4gIGNvb3JkaW5hdGVzOiBbbnVtYmVyLCBudW1iZXJdO1xuICBwcm9qZWN0aW9uOiBzdHJpbmc7XG4gIHJlc29sdXRpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgZXh0ZW5kcyBEYXRhU291cmNlT3B0aW9ucyB7XG4gIHF1ZXJ5YWJsZT86IGJvb2xlYW47XG4gIHF1ZXJ5Rm9ybWF0PzogUXVlcnlGb3JtYXQ7XG4gIHF1ZXJ5VGl0bGU/OiBzdHJpbmc7XG4gIHF1ZXJ5VXJscz86IFF1ZXJ5VXJsRGF0YVtdO1xuICBxdWVyeUxheWVyRmVhdHVyZXM/OiBib29sZWFuO1xuICBtYXBMYWJlbD86IHN0cmluZztcbiAgcXVlcnlIdG1sVGFyZ2V0PzogUXVlcnlIdG1sVGFyZ2V0O1xuICBvbD86IG9sU291cmNlVmVjdG9yPE9sR2VvbWV0cnk+IHwgb2xTb3VyY2U7XG4gIHF1ZXJ5Rm9ybWF0QXNXbXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5YWJsZURhdGFTb3VyY2UgZXh0ZW5kcyBEYXRhU291cmNlIHtcbiAgcXVlcnlUaXRsZT86IHN0cmluZztcbiAgbWFwTGFiZWw/OiBzdHJpbmc7XG4gIHF1ZXJ5SHRtbFRhcmdldD86IFF1ZXJ5SHRtbFRhcmdldDtcbiAgb3B0aW9uczogUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlVcmxEYXRhIHtcbiAgdXJsOiBzdHJpbmc7XG4gIG1heFJlc29sdXRpb24/OiBudW1iZXI7XG4gIG1pblJlc29sdXRpb24/OiBudW1iZXI7XG4gIG1heFNjYWxlPzogbnVtYmVyO1xuICBtaW5TY2FsZT86IG51bWJlcjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5pbXBvcnQgb2xTb3VyY2UgZnJvbSAnb2wvc291cmNlL1NvdXJjZSc7XHJcbmltcG9ydCBvbFNvdXJjZVZlY3RvciBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcclxuXHJcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFF1ZXJ5Rm9ybWF0LCBRdWVyeUh0bWxUYXJnZXQgfSBmcm9tICcuL3F1ZXJ5LmVudW1zJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlPcHRpb25zIHtcclxuICBjb29yZGluYXRlczogW251bWJlciwgbnVtYmVyXTtcclxuICBwcm9qZWN0aW9uOiBzdHJpbmc7XHJcbiAgcmVzb2x1dGlvbj86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucyBleHRlbmRzIERhdGFTb3VyY2VPcHRpb25zIHtcclxuICBxdWVyeWFibGU/OiBib29sZWFuO1xyXG4gIHF1ZXJ5Rm9ybWF0PzogUXVlcnlGb3JtYXQ7XHJcbiAgcXVlcnlUaXRsZT86IHN0cmluZztcclxuICBxdWVyeVVybHM/OiBRdWVyeVVybERhdGFbXTtcclxuICBxdWVyeUxheWVyRmVhdHVyZXM/OiBib29sZWFuO1xyXG4gIG1hcExhYmVsPzogc3RyaW5nO1xyXG4gIHF1ZXJ5SHRtbFRhcmdldD86IFF1ZXJ5SHRtbFRhcmdldDtcclxuICBvbD86IG9sU291cmNlVmVjdG9yPE9sR2VvbWV0cnk+IHwgb2xTb3VyY2U7XHJcbiAgcXVlcnlGb3JtYXRBc1dtcz86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlhYmxlRGF0YVNvdXJjZSBleHRlbmRzIERhdGFTb3VyY2Uge1xyXG4gIHF1ZXJ5VGl0bGU/OiBzdHJpbmc7XHJcbiAgbWFwTGFiZWw/OiBzdHJpbmc7XHJcbiAgcXVlcnlIdG1sVGFyZ2V0PzogUXVlcnlIdG1sVGFyZ2V0O1xyXG4gIG9wdGlvbnM6IFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VXJsRGF0YSB7XHJcbiAgdXJsOiBzdHJpbmc7XHJcbiAgbWF4UmVzb2x1dGlvbj86IG51bWJlcjtcclxuICBtaW5SZXNvbHV0aW9uPzogbnVtYmVyO1xyXG4gIG1heFNjYWxlPzogbnVtYmVyO1xyXG4gIG1pblNjYWxlPzogbnVtYmVyO1xyXG59XHJcbiJdfQ==
@@ -1,18 +1,18 @@
1
- import { Injectable } from '@angular/core';
2
1
  import { HttpClient } from '@angular/common/http';
3
- import { of } from 'rxjs';
4
- import { map, mergeMap } from 'rxjs/operators';
5
- import { default as striptags } from 'striptags';
6
- import * as olformat from 'ol/format';
2
+ import { Injectable } from '@angular/core';
3
+ import { LanguageService, MessageService } from '@igo2/core';
4
+ import { uuid } from '@igo2/utils';
7
5
  import * as olextent from 'ol/extent';
6
+ import * as olformat from 'ol/format';
7
+ import olFormatEsriJSON from 'ol/format/EsriJSON';
8
8
  import olFormatGML2 from 'ol/format/GML2';
9
9
  import olFormatGML3 from 'ol/format/GML3';
10
- import olFormatEsriJSON from 'ol/format/EsriJSON';
11
10
  import * as olgeom from 'ol/geom';
12
- import { LanguageService, MessageService } from '@igo2/core';
13
- import { uuid } from '@igo2/utils';
11
+ import { of } from 'rxjs';
12
+ import { map, mergeMap } from 'rxjs/operators';
13
+ import { default as striptags } from 'striptags';
14
+ import { CartoDataSource, ImageArcGISRestDataSource, TileArcGISRestDataSource, WMSDataSource } from '../../datasource';
14
15
  import { FEATURE } from '../../feature/shared/feature.enums';
15
- import { WMSDataSource, CartoDataSource, TileArcGISRestDataSource, ImageArcGISRestDataSource } from '../../datasource';
16
16
  import { QueryFormat, QueryFormatMimeType, QueryHtmlTarget } from './query.enums';
17
17
  import * as i0 from "@angular/core";
18
18
  import * as i1 from "@angular/common/http";
@@ -750,4 +750,4 @@ export class QueryService {
750
750
  providedIn: 'root'
751
751
  }]
752
752
  }], function () { return [{ type: i1.HttpClient }, { type: i2.MessageService }, { type: i2.LanguageService }]; }, null); })();
753
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqRCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLGdCQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFLbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTdELE9BQU8sRUFDTCxhQUFhLEVBQ2IsZUFBZSxFQUNmLHdCQUF3QixFQUV4Qix5QkFBeUIsRUFDMUIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixlQUFlLEVBQ2hCLE1BQU0sZUFBZSxDQUFDOzs7O0FBWXZCLE1BQU0sT0FBTyxZQUFZ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LEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUM3QyxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDekM7WUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUN6QztZQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQy9CO1lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDL0I7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztzRUFwOUJVLFlBQVk7Z0VBQVosWUFBWSxXQUFaLFlBQVksbUJBRlgsTUFBTTs7dUZBRVAsWUFBWTtjQUh4QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIHN0cmlwdGFncyB9IGZyb20gJ3N0cmlwdGFncyc7XHJcblxyXG5pbXBvcnQgKiBhcyBvbGZvcm1hdCBmcm9tICdvbC9mb3JtYXQnO1xyXG5pbXBvcnQgKiBhcyBvbGV4dGVudCBmcm9tICdvbC9leHRlbnQnO1xyXG5pbXBvcnQgb2xGb3JtYXRHTUwyIGZyb20gJ29sL2Zvcm1hdC9HTUwyJztcclxuaW1wb3J0IG9sRm9ybWF0R01MMyBmcm9tICdvbC9mb3JtYXQvR01MMyc7XHJcbmltcG9ydCBvbEZvcm1hdEVzcmlKU09OIGZyb20gJ29sL2Zvcm1hdC9Fc3JpSlNPTic7XHJcbmltcG9ydCBvbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XHJcbmltcG9ydCAqIGFzIG9sZ2VvbSBmcm9tICdvbC9nZW9tJztcclxuXHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBGZWF0dXJlLFxyXG4gIEZlYXR1cmVHZW9tZXRyeVxyXG59IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZFQVRVUkUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHtcclxuICBXTVNEYXRhU291cmNlLFxyXG4gIENhcnRvRGF0YVNvdXJjZSxcclxuICBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2UsXHJcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnMsXHJcbiAgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZVxyXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2UnO1xyXG5cclxuaW1wb3J0IHtcclxuICBRdWVyeUZvcm1hdCxcclxuICBRdWVyeUZvcm1hdE1pbWVUeXBlLFxyXG4gIFF1ZXJ5SHRtbFRhcmdldFxyXG59IGZyb20gJy4vcXVlcnkuZW51bXMnO1xyXG5pbXBvcnQge1xyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeWFibGVEYXRhU291cmNlLFxyXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFF1ZXJ5VXJsRGF0YVxyXG59IGZyb20gJy4vcXVlcnkuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IE1hcEV4dGVudCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwLmludGVyZmFjZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xyXG4gIHB1YmxpYyBxdWVyeUVuYWJsZWQgPSB0cnVlO1xyXG4gIHB1YmxpYyBkZWZhdWx0RmVhdHVyZUNvdW50ID0gMjA7IC8vIGRlZmF1bHQgZmVhdHVyZSBjb3VudFxyXG4gIHB1YmxpYyBmZWF0dXJlQ291bnQgPSAyMDsgLy8gZmVhdHVyZSBjb3VudFxyXG5cclxuICBwcml2YXRlIHByZXZpb3VzTWVzc2FnZUlkcyA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcXVlcnkobGF5ZXJzOiBMYXllcltdLCBvcHRpb25zOiBRdWVyeU9wdGlvbnMpOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT5bXSB7XHJcbiAgICBpZiAodGhpcy5wcmV2aW91c01lc3NhZ2VJZHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNNZXNzYWdlSWRzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5yZW1vdmUoaWQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnNcclxuICAgICAgLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiBsYXllci52aXNpYmxlICYmIGxheWVyLmlzSW5SZXNvbHV0aW9uc1JhbmdlKVxyXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHRoaXMucXVlcnlMYXllcihsYXllciwgb3B0aW9ucykpO1xyXG4gICAgLy8gdGhlIGRpcmVjdGl2ZSBhY2NlcHQgYXJyYXkgaW4gdGhpcyBmb3JtYXQgW29ic2VydmFibGUsIG9ic2VydmFibGUuLi5dXHJcbiAgICAvLyBpZiB3ZSB1c2UgbXVsdGlwbGUgJ3VybCcgaW4gcXVlcnlVcmwgc28gdGhlIHJlc3VsdCA9PiB0aGlzIGZvcm0gW29ic2VydmFibGUsIG9ic2VydmFibGUsIFtvYnNlcnZhYmxlLCBvYnNlcnZhYmxlXV1cclxuICAgIC8vIHNvIHdlIG5lZWQgdG8gZmxhdCB0aGUgYXJyYXlcclxuICAgIGxldCBmbGF0QXJyYXkgPSBbXS5jb25jYXQuYXBwbHkoW10sIG5ld0xheWVycyk7XHJcbiAgICByZXR1cm4gZmxhdEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMYXllcihcclxuICAgIGxheWVyOiBMYXllcixcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9uc1xyXG4gICk6IE9ic2VydmFibGU8RmVhdHVyZVtdPiB8IE9ic2VydmFibGU8RmVhdHVyZVtdPltdIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UXVlcnlVcmwoXHJcbiAgICAgIGxheWVyLmRhdGFTb3VyY2UsXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBsYXllci5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KClcclxuICAgICk7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc29sdXRpb246IG51bWJlciA9IGxheWVyLm1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgICBjb25zdCBzY2FsZTogbnVtYmVyID0gbGF5ZXIubWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAobGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlKS5vcHRpb25zLnF1ZXJ5Rm9ybWF0ID09PVxyXG4gICAgICBRdWVyeUZvcm1hdC5IVE1MR01MMlxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHVybEdtbCA9IHRoaXMuZ2V0UXVlcnlVcmwoXHJcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLFxyXG4gICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApIGFzIHN0cmluZztcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmxHbWwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcclxuICAgICAgICAgIG1lcmdlTWFwKChnbWxSZXMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkR01MID0gdGhpcy5tZXJnZUdNTChnbWxSZXMsIHVybCwgbGF5ZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBpbXBvc2VkR2VvbSA9IG1lcmdlZEdNTFswXTtcclxuICAgICAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgICAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXMpID0+XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdERhdGEoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIGltcG9zZWRHZW9tLFxyXG4gICAgICAgICAgICAgICAgICAgIGltcG9zZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHVybEdtbHMgPSB0aGlzLmdldFF1ZXJ5VXJsKGxheWVyLmRhdGFTb3VyY2UsIG9wdGlvbnMsIHRydWUpO1xyXG4gICAgICBsZXQgb2JzZXJ2YWJsZXM6IGFueSA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVybEdtbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdXJsR21sc1tpXSBhcyBRdWVyeVVybERhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tTY2FsZUFuZFJlc29sdXRpb24ocmVzb2x1dGlvbiwgc2NhbGUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3REYXRhRm9ySFRNTEdNTDIoZWxlbWVudC51cmwsIHVybFtpXS51cmwsIGxheWVyLCBvcHRpb25zKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9ic2VydmFibGVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pO1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0LnBpcGUoXHJcbiAgICAgICAgICBtYXAoKHJlcykgPT4gdGhpcy5leHRyYWN0RGF0YShyZXMsIGxheWVyLCBvcHRpb25zLCB1cmwpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG9ic2VydmFibGVzOiBhbnkgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50OiBRdWVyeVVybERhdGEgPSB1cmxbaV07XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tTY2FsZUFuZFJlc29sdXRpb24ocmVzb2x1dGlvbiwgc2NhbGUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5odHRwLmdldChlbGVtZW50LnVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KTtcclxuICAgICAgICAgIG9ic2VydmFibGVzLnB1c2goXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT4gdGhpcy5leHRyYWN0RGF0YShyZXMsIGxheWVyLCBvcHRpb25zLCBlbGVtZW50LnVybCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdERhdGFGb3JIVE1MR01MMihcclxuICAgIHVybEdtbDogc3RyaW5nLFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBsYXllcjogTGF5ZXIsXHJcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnNcclxuICApOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsR21sLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKChnbWxSZXMpID0+IHtcclxuICAgICAgICBjb25zdCBtZXJnZWRHTUwgPSB0aGlzLm1lcmdlR01MKGdtbFJlcywgdXJsLCBsYXllcik7XHJcbiAgICAgICAgY29uc3QgaW1wb3NlZEdlb20gPSBtZXJnZWRHTUxbMF07XHJcbiAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgICAgLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICB0aGlzLmV4dHJhY3REYXRhKFxyXG4gICAgICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaW1wb3NlZEdlb20sXHJcbiAgICAgICAgICAgICAgICBpbXBvc2VkUHJvcGVydGllc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrU2NhbGVBbmRSZXNvbHV0aW9uKFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyLFxyXG4gICAgc2NhbGU6IG51bWJlcixcclxuICAgIGVsZW1lbnQ6IFF1ZXJ5VXJsRGF0YVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNoZWNrU2NhbGU6IGJvb2xlYW47XHJcbiAgICBsZXQgY2hlY2tSZXNvbHV0aW9uOiBib29sZWFuO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWVsZW1lbnQubWluUmVzb2x1dGlvbiAmJlxyXG4gICAgICAhZWxlbWVudC5tYXhSZXNvbHV0aW9uICYmXHJcbiAgICAgICFlbGVtZW50Lm1pblNjYWxlICYmXHJcbiAgICAgICFlbGVtZW50Lm1heFNjYWxlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKioqKioqKioqKioqKioqKioqKiBjaGVja2luZyBSZXNvbHV0aW9uICoqKioqKioqKioqKioqKioqKiovXHJcbiAgICAgIGlmIChlbGVtZW50Lm1pblJlc29sdXRpb24gJiYgZWxlbWVudC5tYXhSZXNvbHV0aW9uKSB7XHJcbiAgICAgICAgLy8gaWYgXCJtaW5SZXNvbHV0aW9uXCIgYW5kIFwibWF4UmVzb2x1dGlvblwiIGV4aXN0cyBjaGVjayBpZiByZXNvbHRpb24gaXMgYmV0d2VlblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHJlc29sdXRpb24gPj0gZWxlbWVudC5taW5SZXNvbHV0aW9uICYmXHJcbiAgICAgICAgICByZXNvbHV0aW9uIDw9IGVsZW1lbnQubWF4UmVzb2x1dGlvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY2hlY2tSZXNvbHV0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgXCJtaW5SZXNvbHV0aW9uXCIgb3IgXCJtYXhSZXNvbHV0aW9uXCIgZXhpc3RzXHJcbiAgICAgICAgaWYgKGVsZW1lbnQubWluUmVzb2x1dGlvbiAmJiByZXNvbHV0aW9uID49IGVsZW1lbnQubWluUmVzb2x1dGlvbikge1xyXG4gICAgICAgICAgY2hlY2tSZXNvbHV0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQubWF4UmVzb2x1dGlvbiAmJiByZXNvbHV0aW9uIDw9IGVsZW1lbnQubWF4UmVzb2x1dGlvbikge1xyXG4gICAgICAgICAgY2hlY2tSZXNvbHV0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKioqKioqKioqKioqKioqKioqIGNoZWNraW5nIFNjYWxlICoqKioqKioqKioqKioqKioqKiovXHJcbiAgICAgIGlmIChlbGVtZW50Lm1pblNjYWxlICYmIGVsZW1lbnQubWF4U2NhbGUpIHtcclxuICAgICAgICAvLyBpZiBcIm1pblNjYWxlXCIgYW5kIFwibWF4U2NhbGVcIiBleGlzdHMgY2hlY2sgaWYgc2NhbGUgaXMgYmV0d2VlblxyXG4gICAgICAgIGlmIChzY2FsZSA+IGVsZW1lbnQubWluU2NhbGUgJiYgc2NhbGUgPCBlbGVtZW50Lm1heFNjYWxlKSB7XHJcbiAgICAgICAgICBjaGVja1NjYWxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgXCJtaW5TY2FsZVwiIG9yIFwibWF4U2NhbGVcIiBleGlzdHNcclxuICAgICAgICBpZiAoZWxlbWVudC5tYXhTY2FsZSAmJiBzY2FsZSA8PSBlbGVtZW50Lm1heFNjYWxlKSB7XHJcbiAgICAgICAgICBjaGVja1NjYWxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQubWluU2NhbGUgJiYgc2NhbGUgPj0gZWxlbWVudC5taW5TY2FsZSkge1xyXG4gICAgICAgICAgY2hlY2tTY2FsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKioqKioqKioqKioqKioqKioqKiByZXN1bHQgb2YgY2hlY2tpbmcgKioqKioqKioqKioqKioqKioqKi9cclxuICAgICAgaWYgKGNoZWNrU2NhbGUgPT09IHRydWUgJiYgY2hlY2tSZXNvbHV0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgKGNoZWNrUmVzb2x1dGlvbiA9PT0gdHJ1ZSAmJiAhY2hlY2tTY2FsZSkgfHxcclxuICAgICAgICAoY2hlY2tTY2FsZSA9PT0gdHJ1ZSAmJiAhY2hlY2tSZXNvbHV0aW9uKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VHTUwoXHJcbiAgICBnbWxSZXMsXHJcbiAgICB1cmwsXHJcbiAgICBsYXllcjogTGF5ZXJcclxuICApOiBbRmVhdHVyZUdlb21ldHJ5LCB7IFtrZXk6IHN0cmluZ106IGFueSB9XSB7XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRHTUwyKCk7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKGdtbFJlcyk7XHJcbiAgICAvLyBIYW5kbGUgbm9uIHN0YW5kYXJkIEdNTCBvdXRwdXQgKE1hcFNlcnZlcilcclxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3Qgd21zUGFyc2VyID0gbmV3IG9sZm9ybWF0LldNU0dldEZlYXR1cmVJbmZvKCk7XHJcbiAgICAgIGZlYXR1cmVzID0gd21zUGFyc2VyLnJlYWRGZWF0dXJlcyhnbWxSZXMpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2xtbGluZSA9IG5ldyBvbGdlb20uTXVsdGlMaW5lU3RyaW5nKFtdKTtcclxuICAgIGxldCBwdHM7XHJcbiAgICBjb25zdCBwdHNBcnJheSA9IFtdO1xyXG4gICAgbGV0IG9sbXBvbHkgPSBuZXcgb2xnZW9tLk11bHRpUG9seWdvbihbXSk7XHJcbiAgICBsZXQgZmlyc3RGZWF0dXJlVHlwZTtcclxuICAgIGNvbnN0IG5iRmVhdHVyZXMgPSBmZWF0dXJlcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgZ2VvbWV0cnkgaW50ZXJzZWN0IGJib3hcclxuICAgIC8vIGZvciBnZW9zZXJ2ZXIgZ2V0ZmVhdHVyZWluZm8gcmVzcG9uc2UgaW4gZGF0YSBwcm9qZWN0aW9uLCBub3QgY2FsbCBwcm9qZWN0aW9uXHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IGFueSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXModXJsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgY29uc3QgYmJveFJhdyA9IHNlYXJjaFBhcmFtcy5iYm94O1xyXG4gICAgY29uc3QgYmJveCA9IGJib3hSYXcuc3BsaXQoJywnKTtcclxuICAgIGNvbnN0IGJib3hFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xyXG4gICAgb2xleHRlbnQuZXh0ZW5kKGJib3hFeHRlbnQsIGJib3gpO1xyXG4gICAgY29uc3Qgb3V0QmJveEV4dGVudCA9IGZhbHNlO1xyXG4gICAgbGV0IHRpdGxlQ29udGVudDtcclxuICAgIGxldCBxdWVyeVRpbGVGaWVsZDtcclxuICAgIGlmIChsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnMpIHtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zLnNvdXJjZVxyXG4gICAgICAgIC5vcHRpb25zIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zO1xyXG4gICAgICBpZiAoZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSkge1xyXG4gICAgICAgIHF1ZXJ5VGlsZUZpZWxkID0gZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmVhdHVyZXMubWFwKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xyXG4gICAgICAgIGxldCBxdWVyeVRpdGxlQ29udGVudCA9IGZlYXR1cmUuZ2V0UHJvcGVydGllcygpW3F1ZXJ5VGlsZUZpZWxkXTtcclxuICAgICAgICBpZiAocXVlcnlUaXRsZUNvbnRlbnQpIHtcclxuICAgICAgICAgIHRpdGxlQ29udGVudCA9ICF0aXRsZUNvbnRlbnRcclxuICAgICAgICAgICAgPyBxdWVyeVRpdGxlQ29udGVudFxyXG4gICAgICAgICAgICA6IGAke3RpdGxlQ29udGVudH0sJHtxdWVyeVRpdGxlQ29udGVudH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvKiAgaWYgKCFmZWF0dXJlLmdldEdlb21ldHJ5KCkuc2ltcGxpZnkoMTAwKS5pbnRlcnNlY3RzRXh0ZW50KGJib3hFeHRlbnQpKSB7XHJcbiAgICAgICAgb3V0QmJveEV4dGVudCA9IHRydWU7XHJcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgdG8gcHJvamVjdCB0aGUgZ2VvbWV0cnk/XHJcbiAgICAgIH0qL1xyXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcyA9IChcclxuICAgICAgICBmZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55XHJcbiAgICAgICkuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgY29uc3QgZmVhdHVyZUdlb21ldHJ5VHlwZSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XHJcblxyXG4gICAgICBpZiAoIWZpcnN0RmVhdHVyZVR5cGUgJiYgIW91dEJib3hFeHRlbnQpIHtcclxuICAgICAgICBmaXJzdEZlYXR1cmVUeXBlID0gZmVhdHVyZUdlb21ldHJ5VHlwZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIW91dEJib3hFeHRlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGZlYXR1cmVHZW9tZXRyeVR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgJ1BvaW50JzpcclxuICAgICAgICAgICAgaWYgKG5iRmVhdHVyZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgICBwdHMgPSBuZXcgb2xnZW9tLlBvaW50KGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwdHNBcnJheS5wdXNoKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxyXG4gICAgICAgICAgICBvbG1saW5lLmFwcGVuZExpbmVTdHJpbmcoXHJcbiAgICAgICAgICAgICAgbmV3IG9sZ2VvbS5MaW5lU3RyaW5nKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxyXG4gICAgICAgICAgICBvbG1wb2x5LmFwcGVuZFBvbHlnb24oXHJcbiAgICAgICAgICAgICAgbmV3IG9sZ2VvbS5Qb2x5Z29uKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XHJcbiAgICAgICAgICAgIG9sbXBvbHkgPSBuZXcgb2xnZW9tLk11bHRpUG9seWdvbihmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcywgJ1hZJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG9sbXB0cztcclxuICAgIGlmIChwdHNBcnJheS5sZW5ndGggPT09IDAgJiYgcHRzKSB7XHJcbiAgICAgIG9sbXB0cyA9IHtcclxuICAgICAgICB0eXBlOiBwdHMuZ2V0VHlwZSgpLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBwdHMuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2xtcHRzID0ge1xyXG4gICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcclxuICAgICAgICBjb29yZGluYXRlczogW3RoaXMuY29udmV4SHVsbChwdHNBcnJheSldXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJldHVybkdlb21ldHJ5O1xyXG4gICAgc3dpdGNoIChmaXJzdEZlYXR1cmVUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxyXG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xyXG4gICAgICAgICAgdHlwZTogb2xtbGluZS5nZXRUeXBlKCksXHJcbiAgICAgICAgICBjb29yZGluYXRlczogb2xtbGluZS5nZXRDb29yZGluYXRlcygpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUG9pbnQnOlxyXG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0gb2xtcHRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdQb2x5Z29uJzpcclxuICAgICAgICByZXR1cm5HZW9tZXRyeSA9IHtcclxuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxyXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IG9sbXBvbHkuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XHJcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiBvbG1wb2x5LmdldFR5cGUoKSxcclxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1wb2x5LmdldENvb3JkaW5hdGVzKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICBpZiAocXVlcnlUaWxlRmllbGQpIHtcclxuICAgICAgaW1wb3NlZFByb3BlcnRpZXNbcXVlcnlUaWxlRmllbGRdID0gdGl0bGVDb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbcmV0dXJuR2VvbWV0cnksIGltcG9zZWRQcm9wZXJ0aWVzXTtcclxuICB9XHJcblxyXG4gIGNyb3NzKGEsIGIsIG8pIHtcclxuICAgIHJldHVybiAoYVswXSAtIG9bMF0pICogKGJbMV0gLSBvWzFdKSAtIChhWzFdIC0gb1sxXSkgKiAoYlswXSAtIG9bMF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHBvaW50cyBBbiBhcnJheSBvZiBbWCwgWV0gY29vcmRpbmF0ZXNcclxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2UgaW5zdGVhZCBvZiB0dXJmLmpzIGNvbnZleEh1bGwgYmVjYXVzZSBUdXJmIG5lZWRzIGF0IGxlYXN0IDMgcG9pbnQgdG8gbWFrZSBhIGh1bGwuXHJcbiAgICogaHR0cHM6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL0dlb21ldHJ5L0NvbnZleF9odWxsL01vbm90b25lX2NoYWluI0phdmFTY3JpcHRcclxuICAgKi9cclxuICBjb252ZXhIdWxsKHBvaW50cykge1xyXG4gICAgcG9pbnRzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIGFbMF0gPT09IGJbMF0gPyBhWzFdIC0gYlsxXSA6IGFbMF0gLSBiWzBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbG93ZXIgPSBbXTtcclxuICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICBsb3dlci5sZW5ndGggPj0gMiAmJlxyXG4gICAgICAgIHRoaXMuY3Jvc3MobG93ZXJbbG93ZXIubGVuZ3RoIC0gMl0sIGxvd2VyW2xvd2VyLmxlbmd0aCAtIDFdLCBwb2ludCkgPD0gMFxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlci5wb3AoKTtcclxuICAgICAgfVxyXG4gICAgICBsb3dlci5wdXNoKHBvaW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cHBlciA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IHBvaW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICB3aGlsZSAoXHJcbiAgICAgICAgdXBwZXIubGVuZ3RoID49IDIgJiZcclxuICAgICAgICB0aGlzLmNyb3NzKFxyXG4gICAgICAgICAgdXBwZXJbdXBwZXIubGVuZ3RoIC0gMl0sXHJcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAxXSxcclxuICAgICAgICAgIHBvaW50c1tpXVxyXG4gICAgICAgICkgPD0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB1cHBlci5wb3AoKTtcclxuICAgICAgfVxyXG4gICAgICB1cHBlci5wdXNoKHBvaW50c1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBwZXIucG9wKCk7XHJcbiAgICBsb3dlci5wb3AoKTtcclxuICAgIHJldHVybiBsb3dlci5jb25jYXQodXBwZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0RGF0YShcclxuICAgIHJlcyxcclxuICAgIGxheWVyOiBMYXllcixcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgaW1wb3NlZEdlb21ldHJ5PyxcclxuICAgIGltcG9zZWRQcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gICk6IEZlYXR1cmVbXSB7XHJcbiAgICBjb25zdCBxdWVyeURhdGFTb3VyY2UgPSBsYXllci5kYXRhU291cmNlIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2U7XHJcblxyXG4gICAgY29uc3QgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0gdGhpcy5nZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXIpO1xyXG4gICAgbGV0IGZlYXR1cmVzID0gW107XHJcbiAgICBzd2l0Y2ggKHF1ZXJ5RGF0YVNvdXJjZS5vcHRpb25zLnF1ZXJ5Rm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR01MMzpcclxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEdNTDNEYXRhKFxyXG4gICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgbGF5ZXIuekluZGV4LFxyXG4gICAgICAgICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5KU09OOlxyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkdFT0pTT046XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjI6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHZW9KU09ORGF0YShcclxuICAgICAgICAgIHJlcyxcclxuICAgICAgICAgIGxheWVyLnpJbmRleCxcclxuICAgICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuRVNSSUpTT046XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RFc3JpSlNPTkRhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBsYXllci56SW5kZXgsXHJcbiAgICAgICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LlRFWFQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RUZXh0RGF0YShyZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUw6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RIdG1sRGF0YShcclxuICAgICAgICAgIHJlcyxcclxuICAgICAgICAgIHF1ZXJ5RGF0YVNvdXJjZS5xdWVyeUh0bWxUYXJnZXQsXHJcbiAgICAgICAgICB1cmxcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0SHRtbERhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2UucXVlcnlIdG1sVGFyZ2V0LFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgaW1wb3NlZEdlb21ldHJ5LFxyXG4gICAgICAgICAgaW1wb3NlZFByb3BlcnRpZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkdNTDI6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHTUwyRGF0YShyZXMsIGxheWVyLCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBmZWF0dXJlcy5sZW5ndGggPiAwICYmXHJcbiAgICAgIChmZWF0dXJlc1swXS5nZW9tZXRyeSA9PT0gbnVsbCB8fCAhZmVhdHVyZXNbMF0uZ2VvbWV0cnkpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgZ2VvbVRvQWRkID0gdGhpcy5jcmVhdGVHZW9tZXRyeUZyb21VcmxDbGljayh1cmwpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XHJcbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IGdlb21Ub0FkZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdtc0RhdGFzb3VyY2UgPSBsYXllci5kYXRhU291cmNlIGFzIFdNU0RhdGFTb3VyY2U7XHJcbiAgICBjb25zdCBmZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcz8uRkVBVFVSRV9DT1VOVFxyXG4gICAgICA/IG5ldyBSZWdFeHAoJ0ZFQVRVUkVfQ09VTlQ9JyArIHRoaXMuZmVhdHVyZUNvdW50KVxyXG4gICAgICA6IG5ldyBSZWdFeHAoJ0ZFQVRVUkVfQ09VTlQ9JyArIHRoaXMuZGVmYXVsdEZlYXR1cmVDb3VudCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBmZWF0dXJlQ291bnQudGVzdCh1cmwpICYmXHJcbiAgICAgICgod21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiZcclxuICAgICAgICB0aGlzLmZlYXR1cmVDb3VudCA+IDEgJiZcclxuICAgICAgICBmZWF0dXJlcy5sZW5ndGggPT09IHRoaXMuZmVhdHVyZUNvdW50KSB8fFxyXG4gICAgICAgICghd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiZcclxuICAgICAgICAgIGZlYXR1cmVzLmxlbmd0aCA9PT0gdGhpcy5kZWZhdWx0RmVhdHVyZUNvdW50KSlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlT2JqID0gdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvKFxyXG4gICAgICAgICdpZ28uZ2VvLnF1ZXJ5LmZlYXR1cmVDb3VudE1heCcsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB7IHZhbHVlOiBsYXllci50aXRsZSB9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucHJldmlvdXNNZXNzYWdlSWRzLnB1c2gobWVzc2FnZU9iai50b2FzdElkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKChmZWF0dXJlOiBGZWF0dXJlLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcExhYmVsID0gZmVhdHVyZS5wcm9wZXJ0aWVzW3F1ZXJ5RGF0YVNvdXJjZS5tYXBMYWJlbF07XHJcblxyXG4gICAgICBsZXQgZXhjbHVkZTtcclxuICAgICAgaWYgKGxheWVyLm9wdGlvbnMuc291cmNlT3B0aW9ucz8udHlwZSA9PT0gJ3dtcycpIHtcclxuICAgICAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9uc1xyXG4gICAgICAgICAgLnNvdXJjZU9wdGlvbnMgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XHJcbiAgICAgICAgZXhjbHVkZSA9IHNvdXJjZU9wdGlvbnMgPyBzb3VyY2VPcHRpb25zLmV4Y2x1ZGVBdHRyaWJ1dGUgOiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0UXVlcnlUaXRsZShmZWF0dXJlLCBsYXllcik7XHJcbiAgICAgIGlmICghdGl0bGUgJiYgZmVhdHVyZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRpdGxlID0gYCR7bGF5ZXIudGl0bGV9ICgke2luZGV4ICsgMX0pYDtcclxuICAgICAgfSBlbHNlIGlmICghdGl0bGUpIHtcclxuICAgICAgICB0aXRsZSA9IGxheWVyLnRpdGxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtZXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZmVhdHVyZS5tZXRhIHx8IHt9LCB7XHJcbiAgICAgICAgaWQ6IHV1aWQoKSxcclxuICAgICAgICB0aXRsZSxcclxuICAgICAgICBtYXBUaXRsZTogbWFwTGFiZWwsXHJcbiAgICAgICAgc291cmNlVGl0bGU6IGxheWVyLnRpdGxlLFxyXG4gICAgICAgIG9yZGVyOiAxMDAwIC0gbGF5ZXIuekluZGV4LFxyXG4gICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGU6IGV4Y2x1ZGVcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihmZWF0dXJlLCB7XHJcbiAgICAgICAgbWV0YSxcclxuICAgICAgICBwcm9qZWN0aW9uOlxyXG4gICAgICAgICAgcXVlcnlEYXRhU291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ2NhcnRvJ1xyXG4gICAgICAgICAgICA/ICdFUFNHOjQzMjYnXHJcbiAgICAgICAgICAgIDogb3B0aW9ucy5wcm9qZWN0aW9uXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCkge1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIGNvbnN0IGJib3hSYXcgPSBzZWFyY2hQYXJhbXMuYmJveDtcclxuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLndpZHRoLCAxMCk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludChzZWFyY2hQYXJhbXMuaGVpZ2h0LCAxMCk7XHJcbiAgICBjb25zdCB4UG9zaXRpb24gPSBwYXJzZUludChzZWFyY2hQYXJhbXMuaSB8fCBzZWFyY2hQYXJhbXMueCwgMTApO1xyXG4gICAgY29uc3QgeVBvc2l0aW9uID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLmogfHwgc2VhcmNoUGFyYW1zLnksIDEwKTtcclxuXHJcbiAgICBjb25zdCBiYm94ID0gYmJveFJhdy5zcGxpdCgnLCcpO1xyXG4gICAgbGV0IHRocmVzaG9sZCA9XHJcbiAgICAgIChNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMF0pKSAtIE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFsyXSkpKSAqIDAuMDU7XHJcblxyXG4gICAgLy8gZm9yIGNvbnRleHQgaW4gZGVncmVlIChFUFNHOjQzMjYsNDI2OS4uLilcclxuICAgIGlmIChNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMF0pKSA8IDE4MCkge1xyXG4gICAgICB0aHJlc2hvbGQgPSAwLjA0NTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsaWNreCA9XHJcbiAgICAgIHBhcnNlRmxvYXQoYmJveFswXSkgK1xyXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSAtIHBhcnNlRmxvYXQoYmJveFsyXSkpICogeFBvc2l0aW9uKSAvXHJcbiAgICAgICAgd2lkdGggLVxyXG4gICAgICB0aHJlc2hvbGQ7XHJcbiAgICBjb25zdCBjbGlja3kgPVxyXG4gICAgICBwYXJzZUZsb2F0KGJib3hbMV0pICtcclxuICAgICAgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFsxXSkgLSBwYXJzZUZsb2F0KGJib3hbM10pKSAqIHlQb3NpdGlvbikgL1xyXG4gICAgICAgIGhlaWdodCAtXHJcbiAgICAgIHRocmVzaG9sZDtcclxuICAgIGNvbnN0IGNsaWNreDEgPSBjbGlja3ggKyB0aHJlc2hvbGQgKiAyO1xyXG4gICAgY29uc3QgY2xpY2t5MSA9IGNsaWNreSArIHRocmVzaG9sZCAqIDI7XHJcblxyXG4gICAgY29uc3Qgd2t0UG9seSA9XHJcbiAgICAgICdQT0xZR09OKCgnICtcclxuICAgICAgY2xpY2t4ICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5ICtcclxuICAgICAgJywgJyArXHJcbiAgICAgIGNsaWNreCArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreTEgK1xyXG4gICAgICAnLCAnICtcclxuICAgICAgY2xpY2t4MSArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreTEgK1xyXG4gICAgICAnLCAnICtcclxuICAgICAgY2xpY2t4MSArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreSArXHJcbiAgICAgICcsICcgK1xyXG4gICAgICBjbGlja3ggK1xyXG4gICAgICAnICcgK1xyXG4gICAgICBjbGlja3kgK1xyXG4gICAgICAnKSknO1xyXG5cclxuICAgIGNvbnN0IGZvcm1hdCA9IG5ldyBvbGZvcm1hdC5XS1QoKTtcclxuICAgIGNvbnN0IHRlblBlcmNlbnRXaWR0aEdlb20gPSBmb3JtYXQucmVhZEZlYXR1cmUod2t0UG9seSk7XHJcbiAgICBjb25zdCBmID0gdGVuUGVyY2VudFdpZHRoR2VvbS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuXHJcbiAgICBjb25zdCBuZXdHZW9tID0ge1xyXG4gICAgICB0eXBlOiBmLmdldFR5cGUoKSxcclxuICAgICAgY29vcmRpbmF0ZXM6IGYuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3R2VvbTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEdNTDJEYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRHTUwyKCk7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICAvLyBIYW5kbGUgbm9uIHN0YW5kYXJkIEdNTCBvdXRwdXQgKE1hcFNlcnZlcilcclxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3Qgd21zUGFyc2VyID0gbmV3IG9sZm9ybWF0LldNU0dldEZlYXR1cmVJbmZvKCk7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgZmVhdHVyZXMgPSB3bXNQYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAncXVlcnkuc2VydmljZTogTXVsdGlwb2x5Z29ucyBhcmUgYmFkbHkgbWFuYWdlZCBpbiBtYXBzZXJ2ZXIgaW4gR01MMi4gVXNlIGFub3RoZXIgZm9ybWF0LidcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcCgoZmVhdHVyZSkgPT5cclxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0R01MM0RhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz8pIHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDMoKTtcclxuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigncXVlcnkuc2VydmljZTogR01MMyBpcyBub3Qgd2VsbCBzdXBwb3J0ZWQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoKGZlYXR1cmUpID0+XHJcbiAgICAgIHRoaXMuZmVhdHVyZVRvUmVzdWx0KGZlYXR1cmUsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEdlb0pTT05EYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBbXTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGZlYXR1cmVzID0gSlNPTi5wYXJzZShyZXMucmVwbGFjZSgvKFxccnxcXG4pL2csICcgJykpLmZlYXR1cmVzO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3F1ZXJ5LnNlcnZpY2U6IFVuYWJsZSB0byBwYXJzZSBnZW9qc29uJywgJ1xcbicsIHJlcyk7XHJcbiAgICB9XHJcbiAgICBmZWF0dXJlcy5tYXAoXHJcbiAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgIChmZWF0dXJlLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdXVpZCgpLFxyXG4gICAgICAgICAgb3JkZXI6IDEwMDAgLSB6SW5kZXgsXHJcbiAgICAgICAgICBhbGlhczogYWxsb3dlZEZpZWxkc0FuZEFsaWFzXHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmVhdHVyZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RFc3JpSlNPTkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcykge1xyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlcykuZXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRFc3JpSlNPTigpO1xyXG4gICAgY29uc3QgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcblxyXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcCgoZmVhdHVyZSkgPT5cclxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0VGV4dERhdGEocmVzKSB7XHJcbiAgICAvLyBUT0RPXHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RIdG1sRGF0YShcclxuICAgIHJlcyxcclxuICAgIGh0bWxUYXJnZXQ6IFF1ZXJ5SHRtbFRhcmdldCxcclxuICAgIHVybCxcclxuICAgIGltcG9zZWRHZW9tZXRyeT8sXHJcbiAgICBpbXBvc2VkUHJvcGVydGllcz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICApIHtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtczogYW55ID0gdGhpcy5nZXRRdWVyeVBhcmFtcyh1cmwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gc2VhcmNoUGFyYW1zLmNycyB8fCBzZWFyY2hQYXJhbXMuc3JzIHx8ICdFUFNHOjM4NTcnO1xyXG4gICAgY29uc3QgZ2VvbVRvQWRkID0gdGhpcy5jcmVhdGVHZW9tZXRyeUZyb21VcmxDbGljayh1cmwpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaHRtbFRhcmdldCAhPT0gUXVlcnlIdG1sVGFyZ2V0LkJMQU5LICYmXHJcbiAgICAgIGh0bWxUYXJnZXQgIT09IFF1ZXJ5SHRtbFRhcmdldC5JRlJBTUVcclxuICAgICkge1xyXG4gICAgICBodG1sVGFyZ2V0ID0gUXVlcnlIdG1sVGFyZ2V0LklGUkFNRTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBib2R5VGFnU3RhcnQgPSByZXMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCc8Ym9keT4nKTtcclxuICAgIGNvbnN0IGJvZHlUYWdFbmQgPSByZXMudG9Mb3dlckNhc2UoKS5sYXN0SW5kZXhPZignPC9ib2R5PicpICsgNztcclxuICAgIC8vIHJlcGxhY2UgXFxyIFxcbiAgYW5kICcgJyB3aXRoICcnIHRvIHZhbGlkYXRlIGlmIHRoZSBib2R5IGlzIHJlYWxseSBlbXB0eS4gQ2xlYXIgYWxsIHRoZSBodG1sIHRhZ3MgZnJvbSBib2R5XHJcbiAgICBjb25zdCBib2R5ID0gc3RyaXB0YWdzKFxyXG4gICAgICByZXMuc2xpY2UoYm9keVRhZ1N0YXJ0LCBib2R5VGFnRW5kKS5yZXBsYWNlKC8oXFxyfFxcbnxcXHMpL2csICcnKVxyXG4gICAgKTtcclxuICAgIGlmIChib2R5ID09PSAnJyB8fCByZXMgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogRkVBVFVSRSxcclxuICAgICAgICBwcm9qZWN0aW9uLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICB7IHRhcmdldDogaHRtbFRhcmdldCwgYm9keTogcmVzLCB1cmwgfSxcclxuICAgICAgICAgIGltcG9zZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgKSxcclxuICAgICAgICBnZW9tZXRyeTogaW1wb3NlZEdlb21ldHJ5IHx8IGdlb21Ub0FkZFxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWVyeVBhcmFtcyh1cmwpIHtcclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXJsLnNwbGl0KCc/Jyk7XHJcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nWzFdKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhaXJzID0gcXVlcnlTdHJpbmdbMV0uc3BsaXQoJyYnKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgIHBhaXJzLmZvckVhY2goKHBhaXIpID0+IHtcclxuICAgICAgcGFpciA9IHBhaXIuc3BsaXQoJz0nKTtcclxuICAgICAgcmVzdWx0W3BhaXJbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0gfHwgJycpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZlYXR1cmVUb1Jlc3VsdChcclxuICAgIGZlYXR1cmVPTDogb2xGZWF0dXJlPG9sZ2VvbS5HZW9tZXRyeT4sXHJcbiAgICB6SW5kZXg6IG51bWJlcixcclxuICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz9cclxuICApOiBGZWF0dXJlIHtcclxuICAgIGNvbnN0IGZlYXR1cmVHZW9tZXRyeSA9IGZlYXR1cmVPTC5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IE9iamVjdC5hc3NpZ24oe30sIGZlYXR1cmVPTC5nZXRQcm9wZXJ0aWVzKCkpO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbWV0cnk7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5HRU9NRVRSSUU7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5ib3VuZGVkQnk7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5zaGFwZTtcclxuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuU0hBUEVfUztcclxuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFX0w7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5TSEFQRV9QO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMudGhlX2dlb207XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5nZW9tO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbTMyMTk4O1xyXG5cclxuICAgIGxldCBnZW9tZXRyeTtcclxuICAgIGlmIChmZWF0dXJlR2VvbWV0cnkpIHtcclxuICAgICAgZ2VvbWV0cnkgPSB7XHJcbiAgICAgICAgdHlwZTogZmVhdHVyZUdlb21ldHJ5LmdldFR5cGUoKSxcclxuICAgICAgICBjb29yZGluYXRlczogZmVhdHVyZUdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiBGRUFUVVJFLFxyXG4gICAgICBwcm9qZWN0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgIHByb3BlcnRpZXMsXHJcbiAgICAgIGdlb21ldHJ5LFxyXG4gICAgICBtZXRhOiB7XHJcbiAgICAgICAgaWQ6IHV1aWQoKSxcclxuICAgICAgICBvcmRlcjogMTAwMCAtIHpJbmRleCxcclxuICAgICAgICBhbGlhczogYWxsb3dlZEZpZWxkc0FuZEFsaWFzXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFF1ZXJ5VXJsKFxyXG4gICAgZGF0YXNvdXJjZTogUXVlcnlhYmxlRGF0YVNvdXJjZSxcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICAgIGZvcmNlR01MMiA9IGZhbHNlLFxyXG4gICAgbWFwRXh0ZW50PzogTWFwRXh0ZW50XHJcbiAgKTogc3RyaW5nIHwgUXVlcnlVcmxEYXRhW10ge1xyXG4gICAgbGV0IHVybDtcclxuXHJcbiAgICBpZiAoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5VXJscykge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21RdWVyeVVybChkYXRhc291cmNlLCBvcHRpb25zLCBtYXBFeHRlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAoZGF0YXNvdXJjZS5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICBjYXNlIFdNU0RhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3Qgd21zRGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgYXMgV01TRGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zID0ge1xyXG4gICAgICAgICAgSU5GT19GT1JNQVQ6XHJcbiAgICAgICAgICAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLklORk9fRk9STUFUIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5Rm9ybWF0KSxcclxuICAgICAgICAgIFFVRVJZX0xBWUVSUzogd21zRGF0YXNvdXJjZS5wYXJhbXMuTEFZRVJTLFxyXG4gICAgICAgICAgRkVBVFVSRV9DT1VOVDpcclxuICAgICAgICAgICAgd21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCB8fCB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAod21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCkge1xyXG4gICAgICAgICAgdGhpcy5mZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcmNlR01MMikge1xyXG4gICAgICAgICAgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zLklORk9fRk9STUFUID0gdGhpcy5nZXRNaW1lSW5mb0Zvcm1hdChcclxuICAgICAgICAgICAgUXVlcnlGb3JtYXQuR01MMlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVybCA9IHdtc0RhdGFzb3VyY2Uub2wuZ2V0RmVhdHVyZUluZm9VcmwoXHJcbiAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLFxyXG4gICAgICAgICAgb3B0aW9ucy5yZXNvbHV0aW9uLFxyXG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0aW9uLFxyXG4gICAgICAgICAgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zdCB3bXNWZXJzaW9uID1cclxuICAgICAgICAvLyAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLlZFUlNJT04gfHxcclxuICAgICAgICAvLyAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLnZlcnNpb24gfHxcclxuICAgICAgICAvLyAgICcxLjMuMCc7XHJcbiAgICAgICAgLy8gaWYgKHdtc1ZlcnNpb24gIT09ICcxLjMuMCcpIHtcclxuICAgICAgICAvLyAgIHVybCA9IHVybC5yZXBsYWNlKCcmST0nLCAnJlg9Jyk7XHJcbiAgICAgICAgLy8gICB1cmwgPSB1cmwucmVwbGFjZSgnJko9JywgJyZZPScpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDYXJ0b0RhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3QgY2FydG9EYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBDYXJ0b0RhdGFTb3VyY2U7XHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9XHJcbiAgICAgICAgICAnaHR0cHM6Ly8nICtcclxuICAgICAgICAgIGNhcnRvRGF0YXNvdXJjZS5vcHRpb25zLmFjY291bnQgK1xyXG4gICAgICAgICAgJy5jYXJ0by5jb20vYXBpL3YyL3NxbD8nO1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9ICdmb3JtYXQ9R2VvSlNPTic7XHJcbiAgICAgICAgY29uc3Qgc3FsID1cclxuICAgICAgICAgICcmcT0nICsgY2FydG9EYXRhc291cmNlLm9wdGlvbnMuY29uZmlnLmxheWVyc1swXS5vcHRpb25zLnNxbDtcclxuICAgICAgICBjb25zdCBjbGF1c2UgPVxyXG4gICAgICAgICAgJyBXSEVSRSBTVF9JbnRlcnNlY3RzKHRoZV9nZW9tX3dlYm1lcmNhdG9yLFNUX0JVRkZFUihTVF9TZXRTUklEKFNUX1BPSU5UKCc7XHJcbiAgICAgICAgY29uc3QgbWV0ZXJzID0gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cclxuICAgICAgICAgID8gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cclxuICAgICAgICAgIDogJzEwMDAnO1xyXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID1cclxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMF0gK1xyXG4gICAgICAgICAgJywnICtcclxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMV0gK1xyXG4gICAgICAgICAgJyksMzg1NyksJyArXHJcbiAgICAgICAgICBtZXRlcnMgK1xyXG4gICAgICAgICAgJykpJztcclxuXHJcbiAgICAgICAgdXJsID0gYCR7YmFzZVVybH0ke2Zvcm1hdH0ke3NxbH0ke2NsYXVzZX0ke2Nvb3JkaW5hdGVzfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZTpcclxuICAgICAgY2FzZSBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3QgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2U7XHJcbiAgICAgICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMobWFwRXh0ZW50WzBdIC0gbWFwRXh0ZW50WzJdKTtcclxuICAgICAgICBjb25zdCBkZWx0YVkgPSBNYXRoLmFicyhtYXBFeHRlbnRbMV0gLSBtYXBFeHRlbnRbM10pO1xyXG4gICAgICAgIGNvbnN0IG1heERlbHRhID0gZGVsdGFYID4gZGVsdGFZID8gZGVsdGFYIDogZGVsdGFZO1xyXG4gICAgICAgIGNvbnN0IGNsaWNrQnVmZmVyID0gbWF4RGVsdGEgKiAwLjAwNTtcclxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvblxyXG4gICAgICAgICAgPyB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvblxyXG4gICAgICAgICAgOiBjbGlja0J1ZmZlcjtcclxuICAgICAgICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5idWZmZXIoXHJcbiAgICAgICAgICBvbGV4dGVudC5ib3VuZGluZ0V4dGVudChbb3B0aW9ucy5jb29yZGluYXRlc10pLFxyXG4gICAgICAgICAgdGhyZXNob2xkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID1cclxuICAgICAgICAgIHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLnVybCArXHJcbiAgICAgICAgICAnLycgK1xyXG4gICAgICAgICAgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMubGF5ZXIgK1xyXG4gICAgICAgICAgJy9xdWVyeS8nO1xyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZW5jb2RlVVJJQ29tcG9uZW50KFxyXG4gICAgICAgICAgJ3tcInhtaW5cIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzBdICtcclxuICAgICAgICAgICAgJyxcInltaW5cIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzFdICtcclxuICAgICAgICAgICAgJyxcInhtYXhcIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzJdICtcclxuICAgICAgICAgICAgJyxcInltYXhcIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzNdICtcclxuICAgICAgICAgICAgJyxcInNwYXRpYWxSZWZlcmVuY2VcIjp7XCJ3a2lkXCI6MTAyMTAwfX0nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBbXHJcbiAgICAgICAgICAnZj1qc29uJyxcclxuICAgICAgICAgIGBnZW9tZXRyeT0ke2dlb21ldHJ5fWAsXHJcbiAgICAgICAgICAnZ2VvbWV0cnlUeXBlPWVzcmlHZW9tZXRyeUVudmVsb3BlJyxcclxuICAgICAgICAgICdpblNSPTEwMjEwMCcsXHJcbiAgICAgICAgICAnc3BhdGlhbFJlbD1lc3JpU3BhdGlhbFJlbEludGVyc2VjdHMnLFxyXG4gICAgICAgICAgJ291dEZpZWxkcz0qJyxcclxuICAgICAgICAgICdyZXR1cm5HZW9tZXRyeT10cnVlJyxcclxuICAgICAgICAgICdvdXRTUj0xMDIxMDAnXHJcbiAgICAgICAgXTtcclxuICAgICAgICB1cmwgPSBgJHtzZXJ2aWNlVXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW1lSW5mb0Zvcm1hdChxdWVyeUZvcm1hdDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbWltZSA9ICdhcHBsaWNhdGlvbi92bmQub2djLmdtbCc7XHJcbiAgICBjb25zdCBrZXlFbnVtID0gT2JqZWN0LmtleXMoUXVlcnlGb3JtYXQpLmZpbmQoXHJcbiAgICAgIChrZXkpID0+IFF1ZXJ5Rm9ybWF0W2tleV0gPT09IHF1ZXJ5Rm9ybWF0XHJcbiAgICApO1xyXG4gICAgaWYgKGtleUVudW0pIHtcclxuICAgICAgbWltZSA9IFF1ZXJ5Rm9ybWF0TWltZVR5cGVba2V5RW51bV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1pbWU7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXI6IGFueSkge1xyXG4gICAgbGV0IGFsbG93ZWRGaWVsZHNBbmRBbGlhcztcclxuICAgIGlmIChcclxuICAgICAgbGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zPy5zb3VyY2VGaWVsZHMgJiZcclxuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMubGVuZ3RoID49IDFcclxuICAgICkge1xyXG4gICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSB7fTtcclxuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZm9yRWFjaCgoc291cmNlRmllbGQpID0+IHtcclxuICAgICAgICBjb25zdCBhbGlhcyA9IHNvdXJjZUZpZWxkLmFsaWFzID8gc291cmNlRmllbGQuYWxpYXMgOiBzb3VyY2VGaWVsZC5uYW1lO1xyXG4gICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1tzb3VyY2VGaWVsZC5uYW1lXSA9IGFsaWFzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxvd2VkRmllbGRzQW5kQWxpYXM7XHJcbiAgfVxyXG5cclxuICBnZXRRdWVyeVRpdGxlKGZlYXR1cmU6IEZlYXR1cmUsIGxheWVyOiBMYXllcik6IHN0cmluZyB7XHJcbiAgICBsZXQgdGl0bGU7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcclxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcclxuICAgICAgaWYgKGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpIHtcclxuICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0TGFiZWxNYXRjaChmZWF0dXJlLCBkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aXRsZTtcclxuICB9XHJcblxyXG4gIGdldExhYmVsTWF0Y2goZmVhdHVyZTogRmVhdHVyZSwgbGFiZWxNYXRjaCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFiZWwgPSBsYWJlbE1hdGNoO1xyXG4gICAgY29uc3QgbGFiZWxUb0dldCA9IEFycmF5LmZyb20obGFiZWxNYXRjaC5tYXRjaEFsbCgvXFwkXFx7KFteXFx7XFx9XSspXFx9L2cpKTtcclxuXHJcbiAgICBsYWJlbFRvR2V0LmZvckVhY2goKHYpID0+IHtcclxuICAgICAgbGFiZWwgPSBsYWJlbC5yZXBsYWNlKHZbMF0sIGZlYXR1cmUucHJvcGVydGllc1t2WzFdXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBOb3RoaW5nIGRvbmU/IGNoZWNrIGZlYXR1cmUncyBhdHRyaWJ1dGVcclxuICAgIGlmIChsYWJlbFRvR2V0Lmxlbmd0aCA9PT0gMCAmJiBsYWJlbCA9PT0gbGFiZWxNYXRjaCkge1xyXG4gICAgICBsYWJlbCA9IGZlYXR1cmUucHJvcGVydGllc1tsYWJlbE1hdGNoXSB8fCBsYWJlbE1hdGNoO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYWJlbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSBkYXRhc291cmNlIFF1ZXJ5YWJsZURhdGFTb3VyY2VcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBRdWVyeU9wdGlvbnNcclxuICAgKiBAbWFwRXh0ZW50IGV4dGVudCBvZiB0aGUgbWFwIHdoZW4gY2xpY2sgZXZlbnRcclxuICAgKlxyXG4gICAqL1xyXG5cclxuICBnZXRDdXN0b21RdWVyeVVybChcclxuICAgIGRhdGFzb3VyY2U6IFF1ZXJ5YWJsZURhdGFTb3VyY2UsXHJcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMsXHJcbiAgICBtYXBFeHRlbnQ/OiBNYXBFeHRlbnRcclxuICApOiBRdWVyeVVybERhdGFbXSB7XHJcbiAgICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5nZXRGb3JWaWV3QW5kU2l6ZShcclxuICAgICAgb3B0aW9ucy5jb29yZGluYXRlcyxcclxuICAgICAgb3B0aW9ucy5yZXNvbHV0aW9uLFxyXG4gICAgICAwLFxyXG4gICAgICBbMTAxLCAxMDFdXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkYXRhc291cmNlLm9wdGlvbnMucXVlcnlVcmxzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgZGF0YTogUXVlcnlVcmxEYXRhID0ge1xyXG4gICAgICAgIHVybDogaXRlbS51cmxcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXHtiYm94XFx9L2csIGV4dGVudC5qb2luKCcsJykpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7eFxcfS9nLCBvcHRpb25zLmNvb3JkaW5hdGVzWzBdLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7eVxcfS9nLCBvcHRpb25zLmNvb3JkaW5hdGVzWzFdLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7cmVzb2x1dGlvblxcfS9nLCBvcHRpb25zLnJlc29sdXRpb24udG9TdHJpbmcoKSlcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXHtzcmlkXFx9L2csIG9wdGlvbnMucHJvamVjdGlvbi5yZXBsYWNlKCdFUFNHOicsICcnKSlcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBxdWVyeUZvcm1hdCBjaGFuZ2VkIHRvIFwiUXVlcnlGb3JtYXQuSFRNTEdNTDJcIjogbWFwRXh0ZW50IHdpbGwgYmUgdW5kZWZpbmVkXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gY2hlY2sgXCJtYXBFeHRlbnRcIiBiZWZvciByZXBsYWNlIHZhcmlhYmxlcyBpbiB0aGUgdXJsXHJcbiAgICAgIGlmIChtYXBFeHRlbnQpIHtcclxuICAgICAgICBkYXRhLnVybFxyXG4gICAgICAgICAgLnJlcGxhY2UoL1xce3htaW5cXH0vZywgbWFwRXh0ZW50WzBdLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7eW1pblxcfS9nLCBtYXBFeHRlbnRbMV0udG9TdHJpbmcoKSlcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXHt4bWF4XFx9L2csIG1hcEV4dGVudFsyXS50b1N0cmluZygpKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1xce3ltYXhcXH0vZywgbWFwRXh0ZW50WzNdLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5tYXhSZXNvbHV0aW9uKSB7XHJcbiAgICAgICAgZGF0YS5tYXhSZXNvbHV0aW9uID0gaXRlbS5tYXhSZXNvbHV0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5taW5SZXNvbHV0aW9uKSB7XHJcbiAgICAgICAgZGF0YS5taW5SZXNvbHV0aW9uID0gaXRlbS5taW5SZXNvbHV0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5taW5TY2FsZSkge1xyXG4gICAgICAgIGRhdGEubWluU2NhbGUgPSBpdGVtLm1pblNjYWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5tYXhTY2FsZSkge1xyXG4gICAgICAgIGRhdGEubWF4U2NhbGUgPSBpdGVtLm1heFNjYWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
753
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbkMsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxnQkFBZ0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUVsQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakQsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLGFBQWEsRUFFZCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQU83RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixlQUFlLEVBQ2hCLE1BQU0sZUFBZSxDQUFDOzs7O0FBV3ZCLE1BQU0sT0FBTyxZQUFZ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LEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUM3QyxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDekM7WUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUN6QztZQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQy9CO1lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDL0I7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztzRUFwOUJVLFlBQVk7Z0VBQVosWUFBWSxXQUFaLFlBQVksbUJBRlgsTUFBTTs7dUZBRVAsWUFBWTtjQUh4QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAaWdvMi91dGlscyc7XHJcblxyXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5pbXBvcnQgKiBhcyBvbGV4dGVudCBmcm9tICdvbC9leHRlbnQnO1xyXG5pbXBvcnQgKiBhcyBvbGZvcm1hdCBmcm9tICdvbC9mb3JtYXQnO1xyXG5pbXBvcnQgb2xGb3JtYXRFc3JpSlNPTiBmcm9tICdvbC9mb3JtYXQvRXNyaUpTT04nO1xyXG5pbXBvcnQgb2xGb3JtYXRHTUwyIGZyb20gJ29sL2Zvcm1hdC9HTUwyJztcclxuaW1wb3J0IG9sRm9ybWF0R01MMyBmcm9tICdvbC9mb3JtYXQvR01MMyc7XHJcbmltcG9ydCAqIGFzIG9sZ2VvbSBmcm9tICdvbC9nZW9tJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgc3RyaXB0YWdzIH0gZnJvbSAnc3RyaXB0YWdzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ2FydG9EYXRhU291cmNlLFxyXG4gIEltYWdlQXJjR0lTUmVzdERhdGFTb3VyY2UsXHJcbiAgVGlsZUFyY0dJU1Jlc3REYXRhU291cmNlLFxyXG4gIFdNU0RhdGFTb3VyY2UsXHJcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnNcclxufSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcclxuaW1wb3J0IHsgRkVBVFVSRSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuZW51bXMnO1xyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmUsXHJcbiAgRmVhdHVyZUdlb21ldHJ5XHJcbn0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHsgTWFwRXh0ZW50IH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBRdWVyeUZvcm1hdCxcclxuICBRdWVyeUZvcm1hdE1pbWVUeXBlLFxyXG4gIFF1ZXJ5SHRtbFRhcmdldFxyXG59IGZyb20gJy4vcXVlcnkuZW51bXMnO1xyXG5pbXBvcnQge1xyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVVybERhdGEsXHJcbiAgUXVlcnlhYmxlRGF0YVNvdXJjZSxcclxuICBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9uc1xyXG59IGZyb20gJy4vcXVlcnkuaW50ZXJmYWNlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xyXG4gIHB1YmxpYyBxdWVyeUVuYWJsZWQgPSB0cnVlO1xyXG4gIHB1YmxpYyBkZWZhdWx0RmVhdHVyZUNvdW50ID0gMjA7IC8vIGRlZmF1bHQgZmVhdHVyZSBjb3VudFxyXG4gIHB1YmxpYyBmZWF0dXJlQ291bnQgPSAyMDsgLy8gZmVhdHVyZSBjb3VudFxyXG5cclxuICBwcml2YXRlIHByZXZpb3VzTWVzc2FnZUlkcyA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcXVlcnkobGF5ZXJzOiBMYXllcltdLCBvcHRpb25zOiBRdWVyeU9wdGlvbnMpOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT5bXSB7XHJcbiAgICBpZiAodGhpcy5wcmV2aW91c01lc3NhZ2VJZHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNNZXNzYWdlSWRzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5yZW1vdmUoaWQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnNcclxuICAgICAgLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiBsYXllci52aXNpYmxlICYmIGxheWVyLmlzSW5SZXNvbHV0aW9uc1JhbmdlKVxyXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHRoaXMucXVlcnlMYXllcihsYXllciwgb3B0aW9ucykpO1xyXG4gICAgLy8gdGhlIGRpcmVjdGl2ZSBhY2NlcHQgYXJyYXkgaW4gdGhpcyBmb3JtYXQgW29ic2VydmFibGUsIG9ic2VydmFibGUuLi5dXHJcbiAgICAvLyBpZiB3ZSB1c2UgbXVsdGlwbGUgJ3VybCcgaW4gcXVlcnlVcmwgc28gdGhlIHJlc3VsdCA9PiB0aGlzIGZvcm0gW29ic2VydmFibGUsIG9ic2VydmFibGUsIFtvYnNlcnZhYmxlLCBvYnNlcnZhYmxlXV1cclxuICAgIC8vIHNvIHdlIG5lZWQgdG8gZmxhdCB0aGUgYXJyYXlcclxuICAgIGxldCBmbGF0QXJyYXkgPSBbXS5jb25jYXQuYXBwbHkoW10sIG5ld0xheWVycyk7XHJcbiAgICByZXR1cm4gZmxhdEFycmF5O1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMYXllcihcclxuICAgIGxheWVyOiBMYXllcixcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9uc1xyXG4gICk6IE9ic2VydmFibGU8RmVhdHVyZVtdPiB8IE9ic2VydmFibGU8RmVhdHVyZVtdPltdIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UXVlcnlVcmwoXHJcbiAgICAgIGxheWVyLmRhdGFTb3VyY2UsXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBsYXllci5tYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KClcclxuICAgICk7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc29sdXRpb246IG51bWJlciA9IGxheWVyLm1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgICBjb25zdCBzY2FsZTogbnVtYmVyID0gbGF5ZXIubWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAobGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlKS5vcHRpb25zLnF1ZXJ5Rm9ybWF0ID09PVxyXG4gICAgICBRdWVyeUZvcm1hdC5IVE1MR01MMlxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnN0IHVybEdtbCA9IHRoaXMuZ2V0UXVlcnlVcmwoXHJcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLFxyXG4gICAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApIGFzIHN0cmluZztcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmxHbWwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcclxuICAgICAgICAgIG1lcmdlTWFwKChnbWxSZXMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkR01MID0gdGhpcy5tZXJnZUdNTChnbWxSZXMsIHVybCwgbGF5ZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBpbXBvc2VkR2VvbSA9IG1lcmdlZEdNTFswXTtcclxuICAgICAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgICAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxyXG4gICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXMpID0+XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFjdERhdGEoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIGltcG9zZWRHZW9tLFxyXG4gICAgICAgICAgICAgICAgICAgIGltcG9zZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHVybEdtbHMgPSB0aGlzLmdldFF1ZXJ5VXJsKGxheWVyLmRhdGFTb3VyY2UsIG9wdGlvbnMsIHRydWUpO1xyXG4gICAgICBsZXQgb2JzZXJ2YWJsZXM6IGFueSA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVybEdtbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdXJsR21sc1tpXSBhcyBRdWVyeVVybERhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tTY2FsZUFuZFJlc29sdXRpb24ocmVzb2x1dGlvbiwgc2NhbGUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBvYnNlcnZhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3REYXRhRm9ySFRNTEdNTDIoZWxlbWVudC51cmwsIHVybFtpXS51cmwsIGxheWVyLCBvcHRpb25zKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9ic2VydmFibGVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pO1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0LnBpcGUoXHJcbiAgICAgICAgICBtYXAoKHJlcykgPT4gdGhpcy5leHRyYWN0RGF0YShyZXMsIGxheWVyLCBvcHRpb25zLCB1cmwpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG9ic2VydmFibGVzOiBhbnkgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50OiBRdWVyeVVybERhdGEgPSB1cmxbaV07XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tTY2FsZUFuZFJlc29sdXRpb24ocmVzb2x1dGlvbiwgc2NhbGUsIGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5odHRwLmdldChlbGVtZW50LnVybCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KTtcclxuICAgICAgICAgIG9ic2VydmFibGVzLnB1c2goXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT4gdGhpcy5leHRyYWN0RGF0YShyZXMsIGxheWVyLCBvcHRpb25zLCBlbGVtZW50LnVybCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdERhdGFGb3JIVE1MR01MMihcclxuICAgIHVybEdtbDogc3RyaW5nLFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBsYXllcjogTGF5ZXIsXHJcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnNcclxuICApOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsR21sLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKChnbWxSZXMpID0+IHtcclxuICAgICAgICBjb25zdCBtZXJnZWRHTUwgPSB0aGlzLm1lcmdlR01MKGdtbFJlcywgdXJsLCBsYXllcik7XHJcbiAgICAgICAgY29uc3QgaW1wb3NlZEdlb20gPSBtZXJnZWRHTUxbMF07XHJcbiAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgICAgLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHJlcykgPT5cclxuICAgICAgICAgICAgICB0aGlzLmV4dHJhY3REYXRhKFxyXG4gICAgICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgaW1wb3NlZEdlb20sXHJcbiAgICAgICAgICAgICAgICBpbXBvc2VkUHJvcGVydGllc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrU2NhbGVBbmRSZXNvbHV0aW9uKFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyLFxyXG4gICAgc2NhbGU6IG51bWJlcixcclxuICAgIGVsZW1lbnQ6IFF1ZXJ5VXJsRGF0YVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNoZWNrU2NhbGU6IGJvb2xlYW47XHJcbiAgICBsZXQgY2hlY2tSZXNvbHV0aW9uOiBib29sZWFuO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWVsZW1lbnQubWluUmVzb2x1dGlvbiAmJlxyXG4gICAgICAhZWxlbWVudC5tYXhSZXNvbHV0aW9uICYmXHJcbiAgICAgICFlbGVtZW50Lm1pblNjYWxlICYmXHJcbiAgICAgICFlbGVtZW50Lm1heFNjYWxlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKioqKioqKioqKioqKioqKioqKiBjaGVja2luZyBSZXNvbHV0aW9uICoqKioqKioqKioqKioqKioqKiovXHJcbiAgICAgIGlmIChlbGVtZW50Lm1pblJlc29sdXRpb24gJiYgZWxlbWVudC5tYXhSZXNvbHV0aW9uKSB7XHJcbiAgICAgICAgLy8gaWYgXCJtaW5SZXNvbHV0aW9uXCIgYW5kIFwibWF4UmVzb2x1dGlvblwiIGV4aXN0cyBjaGVjayBpZiByZXNvbHRpb24gaXMgYmV0d2VlblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHJlc29sdXRpb24gPj0gZWxlbWVudC5taW5SZXNvbHV0aW9uICYmXHJcbiAgICAgICAgICByZXNvbHV0aW9uIDw9IGVsZW1lbnQubWF4UmVzb2x1dGlvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY2hlY2tSZXNvbHV0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgXCJtaW5SZXNvbHV0aW9uXCIgb3IgXCJtYXhSZXNvbHV0aW9uXCIgZXhpc3RzXHJcbiAgICAgICAgaWYgKGVsZW1lbnQubWluUmVzb2x1dGlvbiAmJiByZXNvbHV0aW9uID49IGVsZW1lbnQubWluUmVzb2x1dGlvbikge1xyXG4gICAgICAgICAgY2hlY2tSZXNvbHV0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQubWF4UmVzb2x1dGlvbiAmJiByZXNvbHV0aW9uIDw9IGVsZW1lbnQubWF4UmVzb2x1dGlvbikge1xyXG4gICAgICAgICAgY2hlY2tSZXNvbHV0aW9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKioqKioqKioqKioqKioqKioqIGNoZWNraW5nIFNjYWxlICoqKioqKioqKioqKioqKioqKiovXHJcbiAgICAgIGlmIChlbGVtZW50Lm1pblNjYWxlICYmIGVsZW1lbnQubWF4U2NhbGUpIHtcclxuICAgICAgICAvLyBpZiBcIm1pblNjYWxlXCIgYW5kIFwibWF4U2NhbGVcIiBleGlzdHMgY2hlY2sgaWYgc2NhbGUgaXMgYmV0d2VlblxyXG4gICAgICAgIGlmIChzY2FsZSA+IGVsZW1lbnQubWluU2NhbGUgJiYgc2NhbGUgPCBlbGVtZW50Lm1heFNjYWxlKSB7XHJcbiAgICAgICAgICBjaGVja1NjYWxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgXCJtaW5TY2FsZVwiIG9yIFwibWF4U2NhbGVcIiBleGlzdHNcclxuICAgICAgICBpZiAoZWxlbWVudC5tYXhTY2FsZSAmJiBzY2FsZSA8PSBlbGVtZW50Lm1heFNjYWxlKSB7XHJcbiAgICAgICAgICBjaGVja1NjYWxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQubWluU2NhbGUgJiYgc2NhbGUgPj0gZWxlbWVudC5taW5TY2FsZSkge1xyXG4gICAgICAgICAgY2hlY2tTY2FsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKioqKioqKioqKioqKioqKioqKiByZXN1bHQgb2YgY2hlY2tpbmcgKioqKioqKioqKioqKioqKioqKi9cclxuICAgICAgaWYgKGNoZWNrU2NhbGUgPT09IHRydWUgJiYgY2hlY2tSZXNvbHV0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgKGNoZWNrUmVzb2x1dGlvbiA9PT0gdHJ1ZSAmJiAhY2hlY2tTY2FsZSkgfHxcclxuICAgICAgICAoY2hlY2tTY2FsZSA9PT0gdHJ1ZSAmJiAhY2hlY2tSZXNvbHV0aW9uKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VHTUwoXHJcbiAgICBnbWxSZXMsXHJcbiAgICB1cmwsXHJcbiAgICBsYXllcjogTGF5ZXJcclxuICApOiBbRmVhdHVyZUdlb21ldHJ5LCB7IFtrZXk6IHN0cmluZ106IGFueSB9XSB7XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRHTUwyKCk7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKGdtbFJlcyk7XHJcbiAgICAvLyBIYW5kbGUgbm9uIHN0YW5kYXJkIEdNTCBvdXRwdXQgKE1hcFNlcnZlcilcclxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3Qgd21zUGFyc2VyID0gbmV3IG9sZm9ybWF0LldNU0dldEZlYXR1cmVJbmZvKCk7XHJcbiAgICAgIGZlYXR1cmVzID0gd21zUGFyc2VyLnJlYWRGZWF0dXJlcyhnbWxSZXMpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2xtbGluZSA9IG5ldyBvbGdlb20uTXVsdGlMaW5lU3RyaW5nKFtdKTtcclxuICAgIGxldCBwdHM7XHJcbiAgICBjb25zdCBwdHNBcnJheSA9IFtdO1xyXG4gICAgbGV0IG9sbXBvbHkgPSBuZXcgb2xnZW9tLk11bHRpUG9seWdvbihbXSk7XHJcbiAgICBsZXQgZmlyc3RGZWF0dXJlVHlwZTtcclxuICAgIGNvbnN0IG5iRmVhdHVyZXMgPSBmZWF0dXJlcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgZ2VvbWV0cnkgaW50ZXJzZWN0IGJib3hcclxuICAgIC8vIGZvciBnZW9zZXJ2ZXIgZ2V0ZmVhdHVyZWluZm8gcmVzcG9uc2UgaW4gZGF0YSBwcm9qZWN0aW9uLCBub3QgY2FsbCBwcm9qZWN0aW9uXHJcbiAgICBjb25zdCBzZWFyY2hQYXJhbXM6IGFueSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXModXJsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgY29uc3QgYmJveFJhdyA9IHNlYXJjaFBhcmFtcy5iYm94O1xyXG4gICAgY29uc3QgYmJveCA9IGJib3hSYXcuc3BsaXQoJywnKTtcclxuICAgIGNvbnN0IGJib3hFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xyXG4gICAgb2xleHRlbnQuZXh0ZW5kKGJib3hFeHRlbnQsIGJib3gpO1xyXG4gICAgY29uc3Qgb3V0QmJveEV4dGVudCA9IGZhbHNlO1xyXG4gICAgbGV0IHRpdGxlQ29udGVudDtcclxuICAgIGxldCBxdWVyeVRpbGVGaWVsZDtcclxuICAgIGlmIChsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnMpIHtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zLnNvdXJjZVxyXG4gICAgICAgIC5vcHRpb25zIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zO1xyXG4gICAgICBpZiAoZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSkge1xyXG4gICAgICAgIHF1ZXJ5VGlsZUZpZWxkID0gZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmVhdHVyZXMubWFwKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xyXG4gICAgICAgIGxldCBxdWVyeVRpdGxlQ29udGVudCA9IGZlYXR1cmUuZ2V0UHJvcGVydGllcygpW3F1ZXJ5VGlsZUZpZWxkXTtcclxuICAgICAgICBpZiAocXVlcnlUaXRsZUNvbnRlbnQpIHtcclxuICAgICAgICAgIHRpdGxlQ29udGVudCA9ICF0aXRsZUNvbnRlbnRcclxuICAgICAgICAgICAgPyBxdWVyeVRpdGxlQ29udGVudFxyXG4gICAgICAgICAgICA6IGAke3RpdGxlQ29udGVudH0sJHtxdWVyeVRpdGxlQ29udGVudH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvKiAgaWYgKCFmZWF0dXJlLmdldEdlb21ldHJ5KCkuc2ltcGxpZnkoMTAwKS5pbnRlcnNlY3RzRXh0ZW50KGJib3hFeHRlbnQpKSB7XHJcbiAgICAgICAgb3V0QmJveEV4dGVudCA9IHRydWU7XHJcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgdG8gcHJvamVjdCB0aGUgZ2VvbWV0cnk/XHJcbiAgICAgIH0qL1xyXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcyA9IChcclxuICAgICAgICBmZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55XHJcbiAgICAgICkuZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgY29uc3QgZmVhdHVyZUdlb21ldHJ5VHlwZSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XHJcblxyXG4gICAgICBpZiAoIWZpcnN0RmVhdHVyZVR5cGUgJiYgIW91dEJib3hFeHRlbnQpIHtcclxuICAgICAgICBmaXJzdEZlYXR1cmVUeXBlID0gZmVhdHVyZUdlb21ldHJ5VHlwZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIW91dEJib3hFeHRlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGZlYXR1cmVHZW9tZXRyeVR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgJ1BvaW50JzpcclxuICAgICAgICAgICAgaWYgKG5iRmVhdHVyZXMgPT09IDEpIHtcclxuICAgICAgICAgICAgICBwdHMgPSBuZXcgb2xnZW9tLlBvaW50KGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwdHNBcnJheS5wdXNoKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxyXG4gICAgICAgICAgICBvbG1saW5lLmFwcGVuZExpbmVTdHJpbmcoXHJcbiAgICAgICAgICAgICAgbmV3IG9sZ2VvbS5MaW5lU3RyaW5nKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxyXG4gICAgICAgICAgICBvbG1wb2x5LmFwcGVuZFBvbHlnb24oXHJcbiAgICAgICAgICAgICAgbmV3IG9sZ2VvbS5Qb2x5Z29uKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XHJcbiAgICAgICAgICAgIG9sbXBvbHkgPSBuZXcgb2xnZW9tLk11bHRpUG9seWdvbihmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcywgJ1hZJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG9sbXB0cztcclxuICAgIGlmIChwdHNBcnJheS5sZW5ndGggPT09IDAgJiYgcHRzKSB7XHJcbiAgICAgIG9sbXB0cyA9IHtcclxuICAgICAgICB0eXBlOiBwdHMuZ2V0VHlwZSgpLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBwdHMuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2xtcHRzID0ge1xyXG4gICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcclxuICAgICAgICBjb29yZGluYXRlczogW3RoaXMuY29udmV4SHVsbChwdHNBcnJheSldXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJldHVybkdlb21ldHJ5O1xyXG4gICAgc3dpdGNoIChmaXJzdEZlYXR1cmVUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxyXG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xyXG4gICAgICAgICAgdHlwZTogb2xtbGluZS5nZXRUeXBlKCksXHJcbiAgICAgICAgICBjb29yZGluYXRlczogb2xtbGluZS5nZXRDb29yZGluYXRlcygpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnUG9pbnQnOlxyXG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0gb2xtcHRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdQb2x5Z29uJzpcclxuICAgICAgICByZXR1cm5HZW9tZXRyeSA9IHtcclxuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxyXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IG9sbXBvbHkuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XHJcbiAgICAgICAgcmV0dXJuR2VvbWV0cnkgPSB7XHJcbiAgICAgICAgICB0eXBlOiBvbG1wb2x5LmdldFR5cGUoKSxcclxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1wb2x5LmdldENvb3JkaW5hdGVzKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSB7fTtcclxuXHJcbiAgICBpZiAocXVlcnlUaWxlRmllbGQpIHtcclxuICAgICAgaW1wb3NlZFByb3BlcnRpZXNbcXVlcnlUaWxlRmllbGRdID0gdGl0bGVDb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbcmV0dXJuR2VvbWV0cnksIGltcG9zZWRQcm9wZXJ0aWVzXTtcclxuICB9XHJcblxyXG4gIGNyb3NzKGEsIGIsIG8pIHtcclxuICAgIHJldHVybiAoYVswXSAtIG9bMF0pICogKGJbMV0gLSBvWzFdKSAtIChhWzFdIC0gb1sxXSkgKiAoYlswXSAtIG9bMF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHBvaW50cyBBbiBhcnJheSBvZiBbWCwgWV0gY29vcmRpbmF0ZXNcclxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2UgaW5zdGVhZCBvZiB0dXJmLmpzIGNvbnZleEh1bGwgYmVjYXVzZSBUdXJmIG5lZWRzIGF0IGxlYXN0IDMgcG9pbnQgdG8gbWFrZSBhIGh1bGwuXHJcbiAgICogaHR0cHM6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL0dlb21ldHJ5L0NvbnZleF9odWxsL01vbm90b25lX2NoYWluI0phdmFTY3JpcHRcclxuICAgKi9cclxuICBjb252ZXhIdWxsKHBvaW50cykge1xyXG4gICAgcG9pbnRzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIGFbMF0gPT09IGJbMF0gPyBhWzFdIC0gYlsxXSA6IGFbMF0gLSBiWzBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbG93ZXIgPSBbXTtcclxuICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICBsb3dlci5sZW5ndGggPj0gMiAmJlxyXG4gICAgICAgIHRoaXMuY3Jvc3MobG93ZXJbbG93ZXIubGVuZ3RoIC0gMl0sIGxvd2VyW2xvd2VyLmxlbmd0aCAtIDFdLCBwb2ludCkgPD0gMFxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlci5wb3AoKTtcclxuICAgICAgfVxyXG4gICAgICBsb3dlci5wdXNoKHBvaW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cHBlciA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IHBvaW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICB3aGlsZSAoXHJcbiAgICAgICAgdXBwZXIubGVuZ3RoID49IDIgJiZcclxuICAgICAgICB0aGlzLmNyb3NzKFxyXG4gICAgICAgICAgdXBwZXJbdXBwZXIubGVuZ3RoIC0gMl0sXHJcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAxXSxcclxuICAgICAgICAgIHBvaW50c1tpXVxyXG4gICAgICAgICkgPD0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB1cHBlci5wb3AoKTtcclxuICAgICAgfVxyXG4gICAgICB1cHBlci5wdXNoKHBvaW50c1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBwZXIucG9wKCk7XHJcbiAgICBsb3dlci5wb3AoKTtcclxuICAgIHJldHVybiBsb3dlci5jb25jYXQodXBwZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0RGF0YShcclxuICAgIHJlcyxcclxuICAgIGxheWVyOiBMYXllcixcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgaW1wb3NlZEdlb21ldHJ5PyxcclxuICAgIGltcG9zZWRQcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gICk6IEZlYXR1cmVbXSB7XHJcbiAgICBjb25zdCBxdWVyeURhdGFTb3VyY2UgPSBsYXllci5kYXRhU291cmNlIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2U7XHJcblxyXG4gICAgY29uc3QgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0gdGhpcy5nZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXIpO1xyXG4gICAgbGV0IGZlYXR1cmVzID0gW107XHJcbiAgICBzd2l0Y2ggKHF1ZXJ5RGF0YVNvdXJjZS5vcHRpb25zLnF1ZXJ5Rm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR01MMzpcclxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEdNTDNEYXRhKFxyXG4gICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgbGF5ZXIuekluZGV4LFxyXG4gICAgICAgICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5KU09OOlxyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkdFT0pTT046XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjI6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHZW9KU09ORGF0YShcclxuICAgICAgICAgIHJlcyxcclxuICAgICAgICAgIGxheWVyLnpJbmRleCxcclxuICAgICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuRVNSSUpTT046XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RFc3JpSlNPTkRhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBsYXllci56SW5kZXgsXHJcbiAgICAgICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LlRFWFQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RUZXh0RGF0YShyZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUw6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RIdG1sRGF0YShcclxuICAgICAgICAgIHJlcyxcclxuICAgICAgICAgIHF1ZXJ5RGF0YVNvdXJjZS5xdWVyeUh0bWxUYXJnZXQsXHJcbiAgICAgICAgICB1cmxcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkhUTUxHTUwyOlxyXG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0SHRtbERhdGEoXHJcbiAgICAgICAgICByZXMsXHJcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2UucXVlcnlIdG1sVGFyZ2V0LFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgaW1wb3NlZEdlb21ldHJ5LFxyXG4gICAgICAgICAgaW1wb3NlZFByb3BlcnRpZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFF1ZXJ5Rm9ybWF0LkdNTDI6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHTUwyRGF0YShyZXMsIGxheWVyLCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBmZWF0dXJlcy5sZW5ndGggPiAwICYmXHJcbiAgICAgIChmZWF0dXJlc1swXS5nZW9tZXRyeSA9PT0gbnVsbCB8fCAhZmVhdHVyZXNbMF0uZ2VvbWV0cnkpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgZ2VvbVRvQWRkID0gdGhpcy5jcmVhdGVHZW9tZXRyeUZyb21VcmxDbGljayh1cmwpO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XHJcbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IGdlb21Ub0FkZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdtc0RhdGFzb3VyY2UgPSBsYXllci5kYXRhU291cmNlIGFzIFdNU0RhdGFTb3VyY2U7XHJcbiAgICBjb25zdCBmZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcz8uRkVBVFVSRV9DT1VOVFxyXG4gICAgICA/IG5ldyBSZWdFeHAoJ0ZFQVRVUkVfQ09VTlQ9JyArIHRoaXMuZmVhdHVyZUNvdW50KVxyXG4gICAgICA6IG5ldyBSZWdFeHAoJ0ZFQVRVUkVfQ09VTlQ9JyArIHRoaXMuZGVmYXVsdEZlYXR1cmVDb3VudCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBmZWF0dXJlQ291bnQudGVzdCh1cmwpICYmXHJcbiAgICAgICgod21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiZcclxuICAgICAgICB0aGlzLmZlYXR1cmVDb3VudCA+IDEgJiZcclxuICAgICAgICBmZWF0dXJlcy5sZW5ndGggPT09IHRoaXMuZmVhdHVyZUNvdW50KSB8fFxyXG4gICAgICAgICghd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiZcclxuICAgICAgICAgIGZlYXR1cmVzLmxlbmd0aCA9PT0gdGhpcy5kZWZhdWx0RmVhdHVyZUNvdW50KSlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlT2JqID0gdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvKFxyXG4gICAgICAgICdpZ28uZ2VvLnF1ZXJ5LmZlYXR1cmVDb3VudE1heCcsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB7IHZhbHVlOiBsYXllci50aXRsZSB9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucHJldmlvdXNNZXNzYWdlSWRzLnB1c2gobWVzc2FnZU9iai50b2FzdElkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKChmZWF0dXJlOiBGZWF0dXJlLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcExhYmVsID0gZmVhdHVyZS5wcm9wZXJ0aWVzW3F1ZXJ5RGF0YVNvdXJjZS5tYXBMYWJlbF07XHJcblxyXG4gICAgICBsZXQgZXhjbHVkZTtcclxuICAgICAgaWYgKGxheWVyLm9wdGlvbnMuc291cmNlT3B0aW9ucz8udHlwZSA9PT0gJ3dtcycpIHtcclxuICAgICAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9uc1xyXG4gICAgICAgICAgLnNvdXJjZU9wdGlvbnMgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XHJcbiAgICAgICAgZXhjbHVkZSA9IHNvdXJjZU9wdGlvbnMgPyBzb3VyY2VPcHRpb25zLmV4Y2x1ZGVBdHRyaWJ1dGUgOiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0UXVlcnlUaXRsZShmZWF0dXJlLCBsYXllcik7XHJcbiAgICAgIGlmICghdGl0bGUgJiYgZmVhdHVyZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRpdGxlID0gYCR7bGF5ZXIudGl0bGV9ICgke2luZGV4ICsgMX0pYDtcclxuICAgICAgfSBlbHNlIGlmICghdGl0bGUpIHtcclxuICAgICAgICB0aXRsZSA9IGxheWVyLnRpdGxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtZXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZmVhdHVyZS5tZXRhIHx8IHt9LCB7XHJcbiAgICAgICAgaWQ6IHV1aWQoKSxcclxuICAgICAgICB0aXRsZSxcclxuICAgICAgICBtYXBUaXRsZTogbWFwTGFiZWwsXHJcbiAgICAgICAgc291cmNlVGl0bGU6IGxheWVyLnRpdGxlLFxyXG4gICAgICAgIG9yZGVyOiAxMDAwIC0gbGF5ZXIuekluZGV4LFxyXG4gICAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGU6IGV4Y2x1ZGVcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihmZWF0dXJlLCB7XHJcbiAgICAgICAgbWV0YSxcclxuICAgICAgICBwcm9qZWN0aW9uOlxyXG4gICAgICAgICAgcXVlcnlEYXRhU291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ2NhcnRvJ1xyXG4gICAgICAgICAgICA/ICdFUFNHOjQzMjYnXHJcbiAgICAgICAgICAgIDogb3B0aW9ucy5wcm9qZWN0aW9uXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCkge1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIGNvbnN0IGJib3hSYXcgPSBzZWFyY2hQYXJhbXMuYmJveDtcclxuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLndpZHRoLCAxMCk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSBwYXJzZUludChzZWFyY2hQYXJhbXMuaGVpZ2h0LCAxMCk7XHJcbiAgICBjb25zdCB4UG9zaXRpb24gPSBwYXJzZUludChzZWFyY2hQYXJhbXMuaSB8fCBzZWFyY2hQYXJhbXMueCwgMTApO1xyXG4gICAgY29uc3QgeVBvc2l0aW9uID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLmogfHwgc2VhcmNoUGFyYW1zLnksIDEwKTtcclxuXHJcbiAgICBjb25zdCBiYm94ID0gYmJveFJhdy5zcGxpdCgnLCcpO1xyXG4gICAgbGV0IHRocmVzaG9sZCA9XHJcbiAgICAgIChNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMF0pKSAtIE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFsyXSkpKSAqIDAuMDU7XHJcblxyXG4gICAgLy8gZm9yIGNvbnRleHQgaW4gZGVncmVlIChFUFNHOjQzMjYsNDI2OS4uLilcclxuICAgIGlmIChNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMF0pKSA8IDE4MCkge1xyXG4gICAgICB0aHJlc2hvbGQgPSAwLjA0NTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsaWNreCA9XHJcbiAgICAgIHBhcnNlRmxvYXQoYmJveFswXSkgK1xyXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSAtIHBhcnNlRmxvYXQoYmJveFsyXSkpICogeFBvc2l0aW9uKSAvXHJcbiAgICAgICAgd2lkdGggLVxyXG4gICAgICB0aHJlc2hvbGQ7XHJcbiAgICBjb25zdCBjbGlja3kgPVxyXG4gICAgICBwYXJzZUZsb2F0KGJib3hbMV0pICtcclxuICAgICAgKE1hdGguYWJzKHBhcnNlRmxvYXQoYmJveFsxXSkgLSBwYXJzZUZsb2F0KGJib3hbM10pKSAqIHlQb3NpdGlvbikgL1xyXG4gICAgICAgIGhlaWdodCAtXHJcbiAgICAgIHRocmVzaG9sZDtcclxuICAgIGNvbnN0IGNsaWNreDEgPSBjbGlja3ggKyB0aHJlc2hvbGQgKiAyO1xyXG4gICAgY29uc3QgY2xpY2t5MSA9IGNsaWNreSArIHRocmVzaG9sZCAqIDI7XHJcblxyXG4gICAgY29uc3Qgd2t0UG9seSA9XHJcbiAgICAgICdQT0xZR09OKCgnICtcclxuICAgICAgY2xpY2t4ICtcclxuICAgICAgJyAnICtcclxuICAgICAgY2xpY2t5ICtcclxuICAgICAgJywgJyArXHJcbiAgICAgIGNsaWNreCArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreTEgK1xyXG4gICAgICAnLCAnICtcclxuICAgICAgY2xpY2t4MSArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreTEgK1xyXG4gICAgICAnLCAnICtcclxuICAgICAgY2xpY2t4MSArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGNsaWNreSArXHJcbiAgICAgICcsICcgK1xyXG4gICAgICBjbGlja3ggK1xyXG4gICAgICAnICcgK1xyXG4gICAgICBjbGlja3kgK1xyXG4gICAgICAnKSknO1xyXG5cclxuICAgIGNvbnN0IGZvcm1hdCA9IG5ldyBvbGZvcm1hdC5XS1QoKTtcclxuICAgIGNvbnN0IHRlblBlcmNlbnRXaWR0aEdlb20gPSBmb3JtYXQucmVhZEZlYXR1cmUod2t0UG9seSk7XHJcbiAgICBjb25zdCBmID0gdGVuUGVyY2VudFdpZHRoR2VvbS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuXHJcbiAgICBjb25zdCBuZXdHZW9tID0ge1xyXG4gICAgICB0eXBlOiBmLmdldFR5cGUoKSxcclxuICAgICAgY29vcmRpbmF0ZXM6IGYuZ2V0Q29vcmRpbmF0ZXMoKVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3R2VvbTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEdNTDJEYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRHTUwyKCk7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICAvLyBIYW5kbGUgbm9uIHN0YW5kYXJkIEdNTCBvdXRwdXQgKE1hcFNlcnZlcilcclxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3Qgd21zUGFyc2VyID0gbmV3IG9sZm9ybWF0LldNU0dldEZlYXR1cmVJbmZvKCk7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgZmVhdHVyZXMgPSB3bXNQYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAncXVlcnkuc2VydmljZTogTXVsdGlwb2x5Z29ucyBhcmUgYmFkbHkgbWFuYWdlZCBpbiBtYXBzZXJ2ZXIgaW4gR01MMi4gVXNlIGFub3RoZXIgZm9ybWF0LidcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcCgoZmVhdHVyZSkgPT5cclxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0R01MM0RhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz8pIHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDMoKTtcclxuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybigncXVlcnkuc2VydmljZTogR01MMyBpcyBub3Qgd2VsbCBzdXBwb3J0ZWQnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoKGZlYXR1cmUpID0+XHJcbiAgICAgIHRoaXMuZmVhdHVyZVRvUmVzdWx0KGZlYXR1cmUsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdEdlb0pTT05EYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XHJcbiAgICBsZXQgZmVhdHVyZXMgPSBbXTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGZlYXR1cmVzID0gSlNPTi5wYXJzZShyZXMucmVwbGFjZSgvKFxccnxcXG4pL2csICcgJykpLmZlYXR1cmVzO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3F1ZXJ5LnNlcnZpY2U6IFVuYWJsZSB0byBwYXJzZSBnZW9qc29uJywgJ1xcbicsIHJlcyk7XHJcbiAgICB9XHJcbiAgICBmZWF0dXJlcy5tYXAoXHJcbiAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgIChmZWF0dXJlLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdXVpZCgpLFxyXG4gICAgICAgICAgb3JkZXI6IDEwMDAgLSB6SW5kZXgsXHJcbiAgICAgICAgICBhbGlhczogYWxsb3dlZEZpZWxkc0FuZEFsaWFzXHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmVhdHVyZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RFc3JpSlNPTkRhdGEocmVzLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcykge1xyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlcykuZXJyb3IpIHtcclxuICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRFc3JpSlNPTigpO1xyXG4gICAgY29uc3QgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XHJcblxyXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcCgoZmVhdHVyZSkgPT5cclxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0VGV4dERhdGEocmVzKSB7XHJcbiAgICAvLyBUT0RPXHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RIdG1sRGF0YShcclxuICAgIHJlcyxcclxuICAgIGh0bWxUYXJnZXQ6IFF1ZXJ5SHRtbFRhcmdldCxcclxuICAgIHVybCxcclxuICAgIGltcG9zZWRHZW9tZXRyeT8sXHJcbiAgICBpbXBvc2VkUHJvcGVydGllcz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICApIHtcclxuICAgIGNvbnN0IHNlYXJjaFBhcmFtczogYW55ID0gdGhpcy5nZXRRdWVyeVBhcmFtcyh1cmwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gc2VhcmNoUGFyYW1zLmNycyB8fCBzZWFyY2hQYXJhbXMuc3JzIHx8ICdFUFNHOjM4NTcnO1xyXG4gICAgY29uc3QgZ2VvbVRvQWRkID0gdGhpcy5jcmVhdGVHZW9tZXRyeUZyb21VcmxDbGljayh1cmwpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgaHRtbFRhcmdldCAhPT0gUXVlcnlIdG1sVGFyZ2V0LkJMQU5LICYmXHJcbiAgICAgIGh0bWxUYXJnZXQgIT09IFF1ZXJ5SHRtbFRhcmdldC5JRlJBTUVcclxuICAgICkge1xyXG4gICAgICBodG1sVGFyZ2V0ID0gUXVlcnlIdG1sVGFyZ2V0LklGUkFNRTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBib2R5VGFnU3RhcnQgPSByZXMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCc8Ym9keT4nKTtcclxuICAgIGNvbnN0IGJvZHlUYWdFbmQgPSByZXMudG9Mb3dlckNhc2UoKS5sYXN0SW5kZXhPZignPC9ib2R5PicpICsgNztcclxuICAgIC8vIHJlcGxhY2UgXFxyIFxcbiAgYW5kICcgJyB3aXRoICcnIHRvIHZhbGlkYXRlIGlmIHRoZSBib2R5IGlzIHJlYWxseSBlbXB0eS4gQ2xlYXIgYWxsIHRoZSBodG1sIHRhZ3MgZnJvbSBib2R5XHJcbiAgICBjb25zdCBib2R5ID0gc3RyaXB0YWdzKFxyXG4gICAgICByZXMuc2xpY2UoYm9keVRhZ1N0YXJ0LCBib2R5VGFnRW5kKS5yZXBsYWNlKC8oXFxyfFxcbnxcXHMpL2csICcnKVxyXG4gICAgKTtcclxuICAgIGlmIChib2R5ID09PSAnJyB8fCByZXMgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogRkVBVFVSRSxcclxuICAgICAgICBwcm9qZWN0aW9uLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICB7IHRhcmdldDogaHRtbFRhcmdldCwgYm9keTogcmVzLCB1cmwgfSxcclxuICAgICAgICAgIGltcG9zZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgKSxcclxuICAgICAgICBnZW9tZXRyeTogaW1wb3NlZEdlb21ldHJ5IHx8IGdlb21Ub0FkZFxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWVyeVBhcmFtcyh1cmwpIHtcclxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXJsLnNwbGl0KCc/Jyk7XHJcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nWzFdKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhaXJzID0gcXVlcnlTdHJpbmdbMV0uc3BsaXQoJyYnKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgIHBhaXJzLmZvckVhY2goKHBhaXIpID0+IHtcclxuICAgICAgcGFpciA9IHBhaXIuc3BsaXQoJz0nKTtcclxuICAgICAgcmVzdWx0W3BhaXJbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0gfHwgJycpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZlYXR1cmVUb1Jlc3VsdChcclxuICAgIGZlYXR1cmVPTDogb2xGZWF0dXJlPG9sZ2VvbS5HZW9tZXRyeT4sXHJcbiAgICB6SW5kZXg6IG51bWJlcixcclxuICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhcz9cclxuICApOiBGZWF0dXJlIHtcclxuICAgIGNvbnN0IGZlYXR1cmVHZW9tZXRyeSA9IGZlYXR1cmVPTC5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IE9iamVjdC5hc3NpZ24oe30sIGZlYXR1cmVPTC5nZXRQcm9wZXJ0aWVzKCkpO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbWV0cnk7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5HRU9NRVRSSUU7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5ib3VuZGVkQnk7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5zaGFwZTtcclxuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuU0hBUEVfUztcclxuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLlNIQVBFX0w7XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5TSEFQRV9QO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMudGhlX2dlb207XHJcbiAgICBkZWxldGUgcHJvcGVydGllcy5nZW9tO1xyXG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbTMyMTk4O1xyXG5cclxuICAgIGxldCBnZW9tZXRyeTtcclxuICAgIGlmIChmZWF0dXJlR2VvbWV0cnkpIHtcclxuICAgICAgZ2VvbWV0cnkgPSB7XHJcbiAgICAgICAgdHlwZTogZmVhdHVyZUdlb21ldHJ5LmdldFR5cGUoKSxcclxuICAgICAgICBjb29yZGluYXRlczogZmVhdHVyZUdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiBGRUFUVVJFLFxyXG4gICAgICBwcm9qZWN0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgIHByb3BlcnRpZXMsXHJcbiAgICAgIGdlb21ldHJ5LFxyXG4gICAgICBtZXRhOiB7XHJcbiAgICAgICAgaWQ6IHV1aWQoKSxcclxuICAgICAgICBvcmRlcjogMTAwMCAtIHpJbmRleCxcclxuICAgICAgICBhbGlhczogYWxsb3dlZEZpZWxkc0FuZEFsaWFzXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFF1ZXJ5VXJsKFxyXG4gICAgZGF0YXNvdXJjZTogUXVlcnlhYmxlRGF0YVNvdXJjZSxcclxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICAgIGZvcmNlR01MMiA9IGZhbHNlLFxyXG4gICAgbWFwRXh0ZW50PzogTWFwRXh0ZW50XHJcbiAgKTogc3RyaW5nIHwgUXVlcnlVcmxEYXRhW10ge1xyXG4gICAgbGV0IHVybDtcclxuXHJcbiAgICBpZiAoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5VXJscykge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21RdWVyeVVybChkYXRhc291cmNlLCBvcHRpb25zLCBtYXBFeHRlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAoZGF0YXNvdXJjZS5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICBjYXNlIFdNU0RhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3Qgd21zRGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgYXMgV01TRGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zID0ge1xyXG4gICAgICAgICAgSU5GT19GT1JNQVQ6XHJcbiAgICAgICAgICAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLklORk9fRk9STUFUIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5Rm9ybWF0KSxcclxuICAgICAgICAgIFFVRVJZX0xBWUVSUzogd21zRGF0YXNvdXJjZS5wYXJhbXMuTEFZRVJTLFxyXG4gICAgICAgICAgRkVBVFVSRV9DT1VOVDpcclxuICAgICAgICAgICAgd21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCB8fCB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAod21zRGF0YXNvdXJjZS5wYXJhbXMuRkVBVFVSRV9DT1VOVCkge1xyXG4gICAgICAgICAgdGhpcy5mZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcmNlR01MMikge1xyXG4gICAgICAgICAgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zLklORk9fRk9STUFUID0gdGhpcy5nZXRNaW1lSW5mb0Zvcm1hdChcclxuICAgICAgICAgICAgUXVlcnlGb3JtYXQuR01MMlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHVybCA9IHdtc0RhdGFzb3VyY2Uub2wuZ2V0RmVhdHVyZUluZm9VcmwoXHJcbiAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLFxyXG4gICAgICAgICAgb3B0aW9ucy5yZXNvbHV0aW9uLFxyXG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0aW9uLFxyXG4gICAgICAgICAgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zdCB3bXNWZXJzaW9uID1cclxuICAgICAgICAvLyAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLlZFUlNJT04gfHxcclxuICAgICAgICAvLyAgIHdtc0RhdGFzb3VyY2UucGFyYW1zLnZlcnNpb24gfHxcclxuICAgICAgICAvLyAgICcxLjMuMCc7XHJcbiAgICAgICAgLy8gaWYgKHdtc1ZlcnNpb24gIT09ICcxLjMuMCcpIHtcclxuICAgICAgICAvLyAgIHVybCA9IHVybC5yZXBsYWNlKCcmST0nLCAnJlg9Jyk7XHJcbiAgICAgICAgLy8gICB1cmwgPSB1cmwucmVwbGFjZSgnJko9JywgJyZZPScpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDYXJ0b0RhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3QgY2FydG9EYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBDYXJ0b0RhdGFTb3VyY2U7XHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9XHJcbiAgICAgICAgICAnaHR0cHM6Ly8nICtcclxuICAgICAgICAgIGNhcnRvRGF0YXNvdXJjZS5vcHRpb25zLmFjY291bnQgK1xyXG4gICAgICAgICAgJy5jYXJ0by5jb20vYXBpL3YyL3NxbD8nO1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9ICdmb3JtYXQ9R2VvSlNPTic7XHJcbiAgICAgICAgY29uc3Qgc3FsID1cclxuICAgICAgICAgICcmcT0nICsgY2FydG9EYXRhc291cmNlLm9wdGlvbnMuY29uZmlnLmxheWVyc1swXS5vcHRpb25zLnNxbDtcclxuICAgICAgICBjb25zdCBjbGF1c2UgPVxyXG4gICAgICAgICAgJyBXSEVSRSBTVF9JbnRlcnNlY3RzKHRoZV9nZW9tX3dlYm1lcmNhdG9yLFNUX0JVRkZFUihTVF9TZXRTUklEKFNUX1BPSU5UKCc7XHJcbiAgICAgICAgY29uc3QgbWV0ZXJzID0gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cclxuICAgICAgICAgID8gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cclxuICAgICAgICAgIDogJzEwMDAnO1xyXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID1cclxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMF0gK1xyXG4gICAgICAgICAgJywnICtcclxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMV0gK1xyXG4gICAgICAgICAgJyksMzg1NyksJyArXHJcbiAgICAgICAgICBtZXRlcnMgK1xyXG4gICAgICAgICAgJykpJztcclxuXHJcbiAgICAgICAgdXJsID0gYCR7YmFzZVVybH0ke2Zvcm1hdH0ke3NxbH0ke2NsYXVzZX0ke2Nvb3JkaW5hdGVzfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZTpcclxuICAgICAgY2FzZSBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2U6XHJcbiAgICAgICAgY29uc3QgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlID0gZGF0YXNvdXJjZSBhcyBUaWxlQXJjR0lTUmVzdERhdGFTb3VyY2U7XHJcbiAgICAgICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMobWFwRXh0ZW50WzBdIC0gbWFwRXh0ZW50WzJdKTtcclxuICAgICAgICBjb25zdCBkZWx0YVkgPSBNYXRoLmFicyhtYXBFeHRlbnRbMV0gLSBtYXBFeHRlbnRbM10pO1xyXG4gICAgICAgIGNvbnN0IG1heERlbHRhID0gZGVsdGFYID4gZGVsdGFZID8gZGVsdGFYIDogZGVsdGFZO1xyXG4gICAgICAgIGNvbnN0IGNsaWNrQnVmZmVyID0gbWF4RGVsdGEgKiAwLjAwNTtcclxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvblxyXG4gICAgICAgICAgPyB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvblxyXG4gICAgICAgICAgOiBjbGlja0J1ZmZlcjtcclxuICAgICAgICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5idWZmZXIoXHJcbiAgICAgICAgICBvbGV4dGVudC5ib3VuZGluZ0V4dGVudChbb3B0aW9ucy5jb29yZGluYXRlc10pLFxyXG4gICAgICAgICAgdGhyZXNob2xkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID1cclxuICAgICAgICAgIHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLnVybCArXHJcbiAgICAgICAgICAnLycgK1xyXG4gICAgICAgICAgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMubGF5ZXIgK1xyXG4gICAgICAgICAgJy9xdWVyeS8nO1xyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZW5jb2RlVVJJQ29tcG9uZW50KFxyXG4gICAgICAgICAgJ3tcInhtaW5cIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzBdICtcclxuICAgICAgICAgICAgJyxcInltaW5cIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzFdICtcclxuICAgICAgICAgICAgJyxcInhtYXhcIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzJdICtcclxuICAgICAgICAgICAgJyxcInltYXhcIjonICtcclxuICAgICAgICAgICAgZXh0ZW50WzNdICtcclxuICAgICAgICAgICAgJyxcInNwYXRpYWxSZWZlcmVuY2VcIjp7XCJ3a2lkXCI6MTAyMTAwfX0nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBbXHJcbiAgICAgICAgICAnZj1qc29uJyxcclxuICAgICAgICAgIGBnZW9tZXRyeT0ke2dlb21ldHJ5fWAsXHJcbiAgICAgICAgICAnZ2VvbWV0cnlUeXBlPWVzcmlHZW9tZXRyeUVudmVsb3BlJyxcclxuICAgICAgICAgICdpblNSPTEwMjEwMCcsXHJcbiAgICAgICAgICAnc3BhdGlhbFJlbD1lc3JpU3BhdGlhbFJlbEludGVyc2VjdHMnLFxyXG4gICAgICAgICAgJ291dEZpZWxkcz0qJyxcclxuICAgICAgICAgICdyZXR1cm5HZW9tZXRyeT10cnVlJyxcclxuICAgICAgICAgICdvdXRTUj0xMDIxMDAnXHJcbiAgICAgICAgXTtcclxuICAgICAgICB1cmwgPSBgJHtzZXJ2aWNlVXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW1lSW5mb0Zvcm1hdChxdWVyeUZvcm1hdDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbWltZSA9ICdhcHBsaWNhdGlvbi92bmQub2djLmdtbCc7XHJcbiAgICBjb25zdCBrZXlFbnVtID0gT2JqZWN0LmtleXMoUXVlcnlGb3JtYXQpLmZpbmQoXHJcbiAgICAgIChrZXkpID0+IFF1ZXJ5Rm9ybWF0W2tleV0gPT09IHF1ZXJ5Rm9ybWF0XHJcbiAgICApO1xyXG4gICAgaWYgKGtleUVudW0pIHtcclxuICAgICAgbWltZSA9IFF1ZXJ5Rm9ybWF0TWltZVR5cGVba2V5RW51bV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1pbWU7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXI6IGFueSkge1xyXG4gICAgbGV0IGFsbG93ZWRGaWVsZHNBbmRBbGlhcztcclxuICAgIGlmIChcclxuICAgICAgbGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zPy5zb3VyY2VGaWVsZHMgJiZcclxuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMubGVuZ3RoID49IDFcclxuICAgICkge1xyXG4gICAgICBhbGxvd2VkRmllbGRzQW5kQWxpYXMgPSB7fTtcclxuICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMuZm9yRWFjaCgoc291cmNlRmllbGQpID0+IHtcclxuICAgICAgICBjb25zdCBhbGlhcyA9IHNvdXJjZUZpZWxkLmFsaWFzID8gc291cmNlRmllbGQuYWxpYXMgOiBzb3VyY2VGaWVsZC5uYW1lO1xyXG4gICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1tzb3VyY2VGaWVsZC5uYW1lXSA9IGFsaWFzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxvd2VkRmllbGRzQW5kQWxpYXM7XHJcbiAgfVxyXG5cclxuICBnZXRRdWVyeVRpdGxlKGZlYXR1cmU6IEZlYXR1cmUsIGxheWVyOiBMYXllcik6IHN0cmluZyB7XHJcbiAgICBsZXQgdGl0bGU7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucz8uc291cmNlPy5vcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcclxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcclxuICAgICAgaWYgKGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpIHtcclxuICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0TGFiZWxNYXRjaChmZWF0dXJlLCBkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aXRsZTtcclxuICB9XHJcblxyXG4gIGdldExhYmVsTWF0Y2goZmVhdHVyZTogRmVhdHVyZSwgbGFiZWxNYXRjaCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFiZWwgPSBsYWJlbE1hdGNoO1xyXG4gICAgY29uc3QgbGFiZWxUb0dldCA9IEFycmF5LmZyb20obGFiZWxNYXRjaC5tYXRjaEFsbCgvXFwkXFx7KFteXFx7XFx9XSspXFx9L2cpKTtcclxuXHJcbiAgICBsYWJlbFRvR2V0LmZvckVhY2goKHYpID0+IHtcclxuICAgICAgbGFiZWwgPSBsYWJlbC5yZXBsYWNlKHZbMF0sIGZlYXR1cmUucHJvcGVydGllc1t2WzFdXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBOb3RoaW5nIGRvbmU/IGNoZWNrIGZlYXR1cmUncyBhdHRyaWJ1dGVcclxuICAgIGlmIChsYWJlbFRvR2V0Lmxlbmd0aCA9PT0gMCAmJiBsYWJlbCA9PT0gbGFiZWxNYXRjaCkge1xyXG4gICAgICBsYWJlbCA9IGZlYXR1cmUucHJvcGVydGllc1tsYWJlbE1hdGNoXSB8fCBsYWJlbE1hdGNoO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYWJlbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSBkYXRhc291cmNlIFF1ZXJ5YWJsZURhdGFTb3VyY2VcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBRdWVyeU9wdGlvbnNcclxuICAgKiBAbWFwRXh0ZW50IGV4dGVudCBvZiB0aGUgbWFwIHdoZW4gY2xpY2sgZXZlbnRcclxuICAgKlxyXG4gICAqL1xyXG5cclxuICBnZXRDdXN0b21RdWVyeVVybChcclxuICAgIGRhdGFzb3VyY2U6IFF1ZXJ5YWJsZURhdGFTb3VyY2UsXHJcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMsXHJcbiAgICBtYXBFeHRlbnQ/OiBNYXBFeHRlbnRcclxuICApOiBRdWVyeVVybERhdGFbXSB7XHJcbiAgICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5nZXRGb3JWaWV3QW5kU2l6ZShcclxuICAgICAgb3B0aW9ucy5jb29yZGluYXRlcyxcclxuICAgICAgb3B0aW9ucy5yZXNvbHV0aW9uLFxyXG4gICAgICAwLFxyXG4gICAgICBbMTAxLCAxMDFdXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkYXRhc291cmNlLm9wdGlvbnMucXVlcnlVcmxzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgZGF0YTogUXVlcnlVcmxEYXRhID0ge1xyXG4gICAgICAgIHVybDogaXRlbS51cmxcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXHtiYm94XFx9L2csIGV4dGVudC5qb2luKCcsJykpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7eFxcfS9nLCBvcHRpb25zLmNvb3JkaW5hdGVzWzBdLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7eVxcfS9nLCBvcHRpb25zLmNvb3JkaW5hdGVzWzFdLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7cmVzb2x1dGlvblxcfS9nLCBvcHRpb25zLnJlc29sdXRpb24udG9TdHJpbmcoKSlcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXHtzcmlkXFx9L2csIG9wdGlvbnMucHJvamVjdGlvbi5yZXBsYWNlKCdFUFNHOicsICcnKSlcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBxdWVyeUZvcm1hdCBjaGFuZ2VkIHRvIFwiUXVlcnlGb3JtYXQuSFRNTEdNTDJcIjogbWFwRXh0ZW50IHdpbGwgYmUgdW5kZWZpbmVkXHJcbiAgICAgIC8vIHdlIG5lZWQgdG8gY2hlY2sgXCJtYXBFeHRlbnRcIiBiZWZvciByZXBsYWNlIHZhcmlhYmxlcyBpbiB0aGUgdXJsXHJcbiAgICAgIGlmIChtYXBFeHRlbnQpIHtcclxuICAgICAgICBkYXRhLnVybFxyXG4gICAgICAgICAgLnJlcGxhY2UoL1xce3htaW5cXH0vZywgbWFwRXh0ZW50WzBdLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAucmVwbGFjZSgvXFx7eW1pblxcfS9nLCBtYXBFeHRlbnRbMV0udG9TdHJpbmcoKSlcclxuICAgICAgICAgIC5yZXBsYWNlKC9cXHt4bWF4XFx9L2csIG1hcEV4dGVudFsyXS50b1N0cmluZygpKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1xce3ltYXhcXH0vZywgbWFwRXh0ZW50WzNdLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5tYXhSZXNvbHV0aW9uKSB7XHJcbiAgICAgICAgZGF0YS5tYXhSZXNvbHV0aW9uID0gaXRlbS5tYXhSZXNvbHV0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5taW5SZXNvbHV0aW9uKSB7XHJcbiAgICAgICAgZGF0YS5taW5SZXNvbHV0aW9uID0gaXRlbS5taW5SZXNvbHV0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5taW5TY2FsZSkge1xyXG4gICAgICAgIGRhdGEubWluU2NhbGUgPSBpdGVtLm1pblNjYWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5tYXhTY2FsZSkge1xyXG4gICAgICAgIGRhdGEubWF4U2NhbGUgPSBpdGVtLm1heFNjYWxlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=