@igo2/geo 1.15.4 → 1.15.6

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 (420) hide show
  1. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +2 -2
  2. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +2 -2
  3. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +2 -2
  4. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  5. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
  6. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  7. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +2 -2
  8. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  9. package/esm2020/lib/catalog/catalog.module.mjs +1 -1
  10. package/esm2020/lib/catalog/index.mjs +1 -1
  11. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  12. package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
  13. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  14. package/esm2020/lib/catalog/shared/catalog.service.mjs +1 -1
  15. package/esm2020/lib/datasource/datasource.module.mjs +1 -1
  16. package/esm2020/lib/datasource/shared/capabilities.service.mjs +1 -1
  17. package/esm2020/lib/datasource/shared/datasource.service.mjs +1 -1
  18. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  19. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  20. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  21. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  22. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  25. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  30. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  32. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  34. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  37. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  39. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  41. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  50. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  52. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/index.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/options/index.mjs +1 -1
  55. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  57. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
  58. package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
  59. package/esm2020/lib/datasource/utils/index.mjs +1 -1
  60. package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
  61. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +2 -2
  62. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
  63. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
  64. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  65. package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
  66. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  67. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  68. package/esm2020/lib/directions/directions.component.mjs +2 -2
  69. package/esm2020/lib/directions/directions.module.mjs +1 -1
  70. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  71. package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
  72. package/esm2020/lib/directions/shared/directions.utils.mjs +1 -1
  73. package/esm2020/lib/directions/shared/store.mjs +1 -1
  74. package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
  75. package/esm2020/lib/download/download.module.mjs +1 -1
  76. package/esm2020/lib/download/shared/download.service.mjs +1 -1
  77. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  78. package/esm2020/lib/draw/draw/draw-popup.component.mjs +2 -2
  79. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  80. package/esm2020/lib/draw/draw/draw.component.mjs +2 -2
  81. package/esm2020/lib/draw/draw/draw.module.mjs +1 -1
  82. package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
  83. package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
  84. package/esm2020/lib/draw/shared/draw.enum.mjs +1 -1
  85. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  86. package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
  87. package/esm2020/lib/draw/shared/index.mjs +1 -1
  88. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +2 -2
  89. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  90. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
  91. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
  92. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
  93. package/esm2020/lib/feature/feature.module.mjs +1 -1
  94. package/esm2020/lib/feature/index.mjs +1 -1
  95. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  96. package/esm2020/lib/feature/shared/feature.utils.mjs +1 -1
  97. package/esm2020/lib/feature/shared/index.mjs +1 -1
  98. package/esm2020/lib/feature/shared/store.mjs +1 -1
  99. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  100. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  101. package/esm2020/lib/feature/shared/strategies/index.mjs +1 -1
  102. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  103. package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
  104. package/esm2020/lib/feature/shared/strategies/search.mjs +1 -1
  105. package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
  106. package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
  107. package/esm2020/lib/filter/filter.module.mjs +1 -1
  108. package/esm2020/lib/filter/index.mjs +1 -1
  109. package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
  110. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
  111. package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
  112. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  113. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
  114. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  115. package/esm2020/lib/filter/ogc-filter-time/index.mjs +1 -1
  116. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
  117. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
  118. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
  119. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  120. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
  121. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  122. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +1 -1
  123. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  124. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
  125. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  126. package/esm2020/lib/filter/shared/index.mjs +1 -1
  127. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  128. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  129. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  130. package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
  131. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
  132. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  133. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
  134. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
  135. package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
  136. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  137. package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
  138. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
  139. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +2 -2
  140. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
  141. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -2
  142. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
  143. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
  144. package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
  145. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  146. package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
  147. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
  148. package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
  149. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  150. package/esm2020/lib/filter/time-filter-list/index.mjs +1 -1
  151. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  152. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  153. package/esm2020/lib/geo.module.mjs +1 -1
  154. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
  155. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  156. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  157. package/esm2020/lib/geometry/geometry.module.mjs +1 -1
  158. package/esm2020/lib/geometry/index.mjs +1 -1
  159. package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
  160. package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
  161. package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
  162. package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
  163. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  164. package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
  165. package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
  166. package/esm2020/lib/import-export/import-export/import-export.component.mjs +8 -8
  167. package/esm2020/lib/import-export/import-export.module.mjs +1 -1
  168. package/esm2020/lib/import-export/index.mjs +1 -1
  169. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +7 -7
  170. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  171. package/esm2020/lib/import-export/shared/export.service.mjs +1 -1
  172. package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
  173. package/esm2020/lib/import-export/shared/export.utils.mjs +1 -1
  174. package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
  175. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  176. package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
  177. package/esm2020/lib/import-export/shared/import.utils.mjs +1 -1
  178. package/esm2020/lib/layer/index.mjs +1 -1
  179. package/esm2020/lib/layer/layer-item/index.mjs +1 -1
  180. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
  181. package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
  182. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +2 -2
  183. package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
  184. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
  185. package/esm2020/lib/layer/layer-legend-list/index.mjs +1 -1
  186. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  187. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
  188. package/esm2020/lib/layer/layer-list/index.mjs +1 -1
  189. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  190. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
  191. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  192. package/esm2020/lib/layer/layer-list-tool/index.mjs +1 -1
  193. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  194. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +1 -1
  195. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  196. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  197. package/esm2020/lib/layer/layer.module.mjs +1 -1
  198. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  199. package/esm2020/lib/layer/shared/index.mjs +1 -1
  200. package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
  201. package/esm2020/lib/layer/shared/layer.service.mjs +6 -6
  202. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  203. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  204. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  205. package/esm2020/lib/layer/shared/layers/image-layer.mjs +1 -1
  206. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  207. package/esm2020/lib/layer/shared/layers/layer.mjs +1 -1
  208. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  209. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
  210. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  211. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +1 -1
  212. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  213. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  214. package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
  215. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
  216. package/esm2020/lib/layer/utils/image-watcher.mjs +1 -1
  217. package/esm2020/lib/layer/utils/index.mjs +1 -1
  218. package/esm2020/lib/layer/utils/layer.utils.mjs +1 -1
  219. package/esm2020/lib/layer/utils/outputLegend.mjs +1 -1
  220. package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
  221. package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
  222. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  223. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
  224. package/esm2020/lib/map/baselayers-switcher/index.mjs +1 -1
  225. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +11 -12
  226. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
  227. package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
  228. package/esm2020/lib/map/index.mjs +1 -1
  229. package/esm2020/lib/map/info-section/index.mjs +1 -1
  230. package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
  231. package/esm2020/lib/map/map-browser/index.mjs +1 -1
  232. package/esm2020/lib/map/map-browser/map-browser.component.mjs +2 -2
  233. package/esm2020/lib/map/map-center/index.mjs +1 -1
  234. package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
  235. package/esm2020/lib/map/map.module.mjs +1 -1
  236. package/esm2020/lib/map/menu-button/index.mjs +1 -1
  237. package/esm2020/lib/map/menu-button/menu-button.component.mjs +2 -2
  238. package/esm2020/lib/map/offline-button/index.mjs +1 -1
  239. package/esm2020/lib/map/offline-button/offline-button.component.mjs +2 -2
  240. package/esm2020/lib/map/rotation-button/index.mjs +1 -1
  241. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
  242. package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
  243. package/esm2020/lib/map/shared/controllers/geolocation.mjs +1 -1
  244. package/esm2020/lib/map/shared/controllers/index.mjs +1 -1
  245. package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
  246. package/esm2020/lib/map/shared/hover-feature.directive.mjs +1 -1
  247. package/esm2020/lib/map/shared/index.mjs +1 -1
  248. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
  249. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  250. package/esm2020/lib/map/shared/map.enums.mjs +1 -1
  251. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  252. package/esm2020/lib/map/shared/map.mjs +1 -1
  253. package/esm2020/lib/map/shared/map.service.mjs +1 -1
  254. package/esm2020/lib/map/shared/map.utils.mjs +1 -1
  255. package/esm2020/lib/map/shared/mapOffline.directive.mjs +1 -1
  256. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  257. package/esm2020/lib/map/shared/projection.service.mjs +1 -1
  258. package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
  259. package/esm2020/lib/map/swipe-control/index.mjs +1 -1
  260. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +2 -2
  261. package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
  262. package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
  263. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +2 -2
  264. package/esm2020/lib/map/zoom-button/index.mjs +1 -1
  265. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  266. package/esm2020/lib/measure/index.mjs +1 -1
  267. package/esm2020/lib/measure/measure.module.mjs +1 -1
  268. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  269. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
  270. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
  271. package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
  272. package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
  273. package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
  274. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  275. package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
  276. package/esm2020/lib/metadata/index.mjs +1 -1
  277. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +2 -2
  278. package/esm2020/lib/metadata/metadata.module.mjs +1 -1
  279. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  280. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
  281. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  282. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  283. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +1 -1
  284. package/esm2020/lib/offline/index.mjs +1 -1
  285. package/esm2020/lib/offline/layerDB/index.mjs +1 -1
  286. package/esm2020/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  287. package/esm2020/lib/offline/layerDB/layerDB.service.mjs +1 -1
  288. package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
  289. package/esm2020/lib/overlay/overlay.module.mjs +1 -1
  290. package/esm2020/lib/overlay/shared/index.mjs +1 -1
  291. package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
  292. package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
  293. package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
  294. package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
  295. package/esm2020/lib/overlay/shared/overlay.utils.mjs +1 -1
  296. package/esm2020/lib/print/print/print.component.mjs +2 -2
  297. package/esm2020/lib/print/print-form/print-form.component.mjs +2 -2
  298. package/esm2020/lib/print/print.module.mjs +1 -1
  299. package/esm2020/lib/print/shared/geopdf.mjs +1 -1
  300. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  301. package/esm2020/lib/print/shared/print.service.mjs +1 -1
  302. package/esm2020/lib/print/shared/print.type.mjs +1 -1
  303. package/esm2020/lib/query/query.module.mjs +1 -1
  304. package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
  305. package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
  306. package/esm2020/lib/query/shared/query.directive.mjs +1 -1
  307. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  308. package/esm2020/lib/query/shared/query.service.mjs +1 -1
  309. package/esm2020/lib/query/shared/query.utils.mjs +1 -1
  310. package/esm2020/lib/search/index.mjs +1 -1
  311. package/esm2020/lib/search/search-bar/search-bar.component.mjs +2 -2
  312. package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
  313. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
  314. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +2 -2
  315. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +2 -2
  316. package/esm2020/lib/search/search-results/search-results-item.component.mjs +2 -2
  317. package/esm2020/lib/search/search-results/search-results.component.mjs +2 -2
  318. package/esm2020/lib/search/search-results/search-results.module.mjs +1 -1
  319. package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
  320. package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
  321. package/esm2020/lib/search/search-settings/search-settings.component.mjs +2 -2
  322. package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
  323. package/esm2020/lib/search/search.module.mjs +1 -1
  324. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +1 -1
  325. package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
  326. package/esm2020/lib/search/shared/search-source.service.mjs +1 -1
  327. package/esm2020/lib/search/shared/search.enums.mjs +1 -1
  328. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  329. package/esm2020/lib/search/shared/search.service.mjs +1 -1
  330. package/esm2020/lib/search/shared/search.utils.mjs +1 -1
  331. package/esm2020/lib/search/shared/sources/cadastre.mjs +1 -1
  332. package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +1 -1
  333. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  334. package/esm2020/lib/search/shared/sources/coordinates.mjs +1 -1
  335. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +1 -1
  336. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  337. package/esm2020/lib/search/shared/sources/icherche.mjs +1 -1
  338. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
  339. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  340. package/esm2020/lib/search/shared/sources/ilayer.mjs +1 -1
  341. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  342. package/esm2020/lib/search/shared/sources/index.mjs +1 -1
  343. package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
  344. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  345. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  346. package/esm2020/lib/search/shared/sources/source.mjs +1 -1
  347. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  348. package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
  349. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  350. package/esm2020/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  351. package/esm2020/lib/search/shared/sources/workspace.mjs +1 -1
  352. package/esm2020/lib/search/shared/sources/workspace.providers.mjs +1 -1
  353. package/esm2020/lib/style/index.mjs +1 -1
  354. package/esm2020/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
  355. package/esm2020/lib/style/shared/datasource/index.mjs +1 -1
  356. package/esm2020/lib/style/shared/feature/feature-style.mjs +1 -1
  357. package/esm2020/lib/style/shared/feature/index.mjs +1 -1
  358. package/esm2020/lib/style/shared/font.enum.mjs +1 -1
  359. package/esm2020/lib/style/shared/index.mjs +1 -1
  360. package/esm2020/lib/style/shared/overlay/index.mjs +1 -1
  361. package/esm2020/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
  362. package/esm2020/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
  363. package/esm2020/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
  364. package/esm2020/lib/style/shared/vector/conversion.utils.mjs +1 -1
  365. package/esm2020/lib/style/shared/vector/index.mjs +1 -1
  366. package/esm2020/lib/style/shared/vector/vector-style.interface.mjs +1 -1
  367. package/esm2020/lib/style/style-list/index.mjs +1 -1
  368. package/esm2020/lib/style/style-list/style-list.interface.mjs +1 -1
  369. package/esm2020/lib/style/style-list/style-list.module.mjs +1 -1
  370. package/esm2020/lib/style/style-list/style-list.provider.mjs +1 -1
  371. package/esm2020/lib/style/style-list/style-list.service.mjs +1 -1
  372. package/esm2020/lib/style/style-modal/drawing/index.mjs +1 -1
  373. package/esm2020/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +2 -2
  374. package/esm2020/lib/style/style-modal/index.mjs +1 -1
  375. package/esm2020/lib/style/style-modal/layer/index.mjs +1 -1
  376. package/esm2020/lib/style/style-modal/layer/style-modal-layer.component.mjs +2 -2
  377. package/esm2020/lib/style/style-modal/layer-button/index.mjs +1 -1
  378. package/esm2020/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +2 -2
  379. package/esm2020/lib/style/style-modal/shared/index.mjs +1 -1
  380. package/esm2020/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  381. package/esm2020/lib/style/style-service/draw-style.service.mjs +1 -1
  382. package/esm2020/lib/style/style-service/index.mjs +1 -1
  383. package/esm2020/lib/style/style-service/style.service.mjs +1 -1
  384. package/esm2020/lib/style/style.module.mjs +1 -1
  385. package/esm2020/lib/toast/toast.component.mjs +2 -2
  386. package/esm2020/lib/toast/toast.module.mjs +1 -1
  387. package/esm2020/lib/utils/googleLinks.mjs +1 -1
  388. package/esm2020/lib/utils/id-generator.mjs +1 -1
  389. package/esm2020/lib/utils/index.mjs +1 -1
  390. package/esm2020/lib/utils/osmLinks.mjs +1 -1
  391. package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
  392. package/esm2020/lib/wkt/wkt.module.mjs +1 -1
  393. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
  394. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  395. package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
  396. package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
  397. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +1 -1
  398. package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
  399. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +1 -1
  400. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
  401. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
  402. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +1 -1
  403. package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
  404. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  405. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  406. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  407. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  408. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  409. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  410. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  411. package/esm2020/public_api.mjs +1 -1
  412. package/fesm2015/igo2-geo.mjs +116 -116
  413. package/fesm2015/igo2-geo.mjs.map +1 -1
  414. package/fesm2020/igo2-geo.mjs +115 -116
  415. package/fesm2020/igo2-geo.mjs.map +1 -1
  416. package/lib/layer/shared/layers/layer.interface.d.ts +2 -0
  417. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  418. package/ngcc.config.js +3 -3
  419. package/package.json +4 -4
  420. package/style/geo.theming.scss +12 -12
@@ -972,12 +972,12 @@ export class ImportExportComponent {
972
972
  const confirmDialogService = importExportOptions?.allowToStoreLayer ? this.confirmDialogService : undefined;
973
973
  const importWithStyle = importExportOptions?.importWithStyle || this.config.getConfig('importWithStyle');
974
974
  if (this.config.getConfig('importWithStyle')) {
975
- console.warn(`
976
- The location of this config importWithStyle is deprecated.
977
- Please move this property within importExport configuration.
978
- Ex: importWithStyle: true/false must be transfered to importExport: { importWithStyle: true/false }
979
- Refer to environnement.ts OR config/config.json
980
- This legacy conversion will be deleted in 2024.
975
+ console.warn(`
976
+ The location of this config importWithStyle is deprecated.
977
+ Please move this property within importExport configuration.
978
+ Ex: importWithStyle: true/false must be transfered to importExport: { importWithStyle: true/false }
979
+ Refer to environnement.ts OR config/config.json
980
+ This legacy conversion will be deleted in 2024.
981
981
  `);
982
982
  }
983
983
  if (!importWithStyle) {
@@ -1205,7 +1205,7 @@ ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Impor
1205
1205
  } }, dependencies: [i10.MatTooltip, i6.ɵNgNoValidate, i6.DefaultValueAccessor, i6.NgControlStatus, i6.NgControlStatusGroup, i6.FormGroupDirective, i6.FormControlName, i11.NgClass, i11.NgForOf, i11.NgIf, i12.MatButton, i13.MatButtonToggleGroup, i13.MatButtonToggle, i14.MatFormField, i14.MatLabel, i15.MatSelect, i15.MatSelectTrigger, i16.MatOption, i17.MatInput, i18.MatSlideToggle, i9.SpinnerComponent, i9.CustomHtmlComponent, i11.AsyncPipe, i19.TranslatePipe, i9.KeyValuePipe], styles: ["mat-option.igo-export-layer-mat-option[_ngcontent-%COMP%]{height:5em;line-height:1em}.import-export-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:50%}h4[_ngcontent-%COMP%]{padding:0 5px}.igo-form[_ngcontent-%COMP%]{padding:15px 5px}.igo-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}igo-spinner[_ngcontent-%COMP%]{position:absolute;padding-left:10px}.export-options[_ngcontent-%COMP%], .export-combine-layers[_ngcontent-%COMP%], .export-separator[_ngcontent-%COMP%]{overflow-x:hidden}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content, .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content, .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.export-select-trigger[_ngcontent-%COMP%]{opacity:.75;font-size:.75em}"] });
1206
1206
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ImportExportComponent, [{
1207
1207
  type: Component,
1208
- args: [{ selector: 'igo-import-export', template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"selectedMode\"\r\n (change)=\"onImportExportChange($event)\">\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{'igo.geo.importExportForm.importTabTitle' | translate}}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{'igo.geo.importExportForm.exportTabTitle' | translate}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<form class=\"igo-form\" [formGroup]=\"importForm\" *ngIf=\"selectedMode === 'import'\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.importProjPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n [(value)]=\"inputProj\">\r\n <mat-option\r\n *ngFor=\"let projection of (projections$ | async)\"\r\n [value]=\"projection\"\r\n (click)=\"$event.stopPropagation()\">\r\n <p mat-line *ngIf=\"projection.translateKey\">{{('igo.geo.importExportForm.projections.' + projection.translateKey) | translate: projection}}</p>\r\n <p mat-line *ngIf=\"!projection.translateKey\">{{projection.alias}}</p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"importForm.invalid ? ('igo.geo.importExportForm.projections.choose' | translate) : ('igo.geo.importExportForm.importButton' | translate)\"\r\n class=\"igo-form-button-group\">\r\n <button\r\n [disabled]=\"importForm.invalid || (loading$ | async)\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\">\r\n {{'igo.geo.importExportForm.importButton' | translate}}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n hidden\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($event.target.files)\">\r\n </div>\r\n</form>\r\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\r\n <div *ngIf=\"importHtmlClarifications === ''\">\r\n <h4>{{'igo.geo.importExportForm.importClarifications' | translate}}</h4>\r\n <ul>\r\n <li>{{'igo.geo.importExportForm.importSizeMax' | translate: {size: fileSizeMb} }}</li>\r\n <li>{{'igo.geo.importExportForm.importFormatAuthorized' | translate}}</li>\r\n <li>{{'igo.geo.importExportForm.importShpZip' | translate}}</li>\r\n </ul>\r\n </div>\r\n <igo-custom-html *ngIf=\"importHtmlClarifications !== ''\" class=\"mat-typography\"\r\n [html]=\"importHtmlClarifications\">\r\n </igo-custom-html>\r\n</section>\r\n\r\n<section class=\"mat-typography\" *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\">\r\n <h4>{{'igo.geo.importExportForm.exportNoLayersExportable' | translate}}</h4>\r\n</section>\r\n\r\n<form class=\"igo-form\" [formGroup]=\"form\" *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.exportLayerPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n [(value)]=\"layers\" multiple>\r\n <mat-select-trigger>\r\n {{layers.length ? getLayerTitleById(layers[0]) : ''}}\r\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\r\n (+{{layers.length - 1}} {{(layers?.length === 2 ? 'igo.geo.importExportForm.other' : 'igo.geo.importExportForm.others') | translate }})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option\r\n *ngFor=\"let layer of (exportableLayers$ | async)\"\r\n [ngClass]=\"{'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)}\"\r\n [value]=\"layer.id\"\r\n (click)=\"$event.stopPropagation()\">\r\n <p mat-line>{{layer.title}}</p>\r\n <p mat-line>\r\n <mat-slide-toggle *ngIf=\"layerHasSelectedFeatures(layer)\"\r\n [labelPosition]=\"'after'\"\r\n (click)=\"onlySelectedClick($event,layer.id)\"\r\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\r\n (change)=\"onlySelected($event,layer.id)\">\r\n <small>{{'igo.geo.importExportForm.exportSelectedFeature' | translate}}</small>\r\n </mat-slide-toggle>\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.exportFormatPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n formControlName=\"format\">\r\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\r\n <mat-option *ngFor=\"let format of (formats$ | async) | keyvalue\" [value]=\"format.key\">\r\n {{'igo.geo.export.format.' + format.value | translate}}\r\n </mat-option>\r\n </ng-container>\r\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\r\n {{'igo.geo.export.noFormat.title' | translate}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\" *ngIf=\"forceNaming && form.value.format !== 'URL'\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"name\" placeholder=\"{{'igo.geo.importExportForm.exportFileNamePlaceholder' | translate}}\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\" *ngIf=\"form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.encodingPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n formControlName=\"encoding\">\r\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\r\n <mat-option *ngFor=\"let encoding of (encodings$ | async) | keyvalue\" [value]=\"encoding.key\">\r\n {{'igo.geo.export.encoding.' + encoding.value | translate}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"export-combine-layers mat-typography\" *ngIf=\"layers.length > 1 && (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\">\r\n <mat-slide-toggle\r\n formControlName=\"combineLayers\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.importExportForm.exportCombineResults' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"export-separator mat-typography\" *ngIf=\"layers.length > 1 && (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon') && form.value.combineLayers\">\r\n <mat-slide-toggle\r\n formControlName=\"separator\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.importExportForm.exportSeparator' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"export-options mat-typography\" *ngIf=\"form.value.format !== 'URL'\">\r\n <mat-slide-toggle\r\n formControlName=\"featureInMapExtent\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.importExportForm.exportFeatureInExtent' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\">\r\n {{form.value.format !== 'URL' ? ('igo.geo.importExportForm.exportButton' | translate): (form.value.layers.length > 1 ? ('igo.geo.importExportForm.exportButtonLinks' | translate): ('igo.geo.importExportForm.exportButtonLink' | translate))}}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n\r\n <igo-custom-html *ngIf=\"exportHtmlClarifications !== ''\" class=\"mat-typography\"\r\n [html]=\"exportHtmlClarifications\">\r\n </igo-custom-html>\r\n\r\n</form>\r\n", styles: ["mat-option.igo-export-layer-mat-option{height:5em;line-height:1em}.import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-input-container mat-form-field{width:100%}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}.export-options,.export-combine-layers,.export-separator{overflow-x:hidden}.export-options mat-slide-toggle,.export-combine-layers mat-slide-toggle,.export-separator mat-slide-toggle{width:100%;margin:10px}.export-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content,.export-combine-layers mat-slide-toggle ::ng-deep .mat-slide-toggle-content,.export-separator mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.export-select-trigger{opacity:.75;font-size:.75em}\n"] }]
1208
+ args: [{ selector: 'igo-import-export', template: "<div class=\"import-export-toggle mat-typography\">\n <mat-button-toggle-group\n [value]=\"selectedMode\"\n (change)=\"onImportExportChange($event)\">\n <mat-button-toggle [value]=\"'import'\">\n {{'igo.geo.importExportForm.importTabTitle' | translate}}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"'export'\">\n {{'igo.geo.importExportForm.exportTabTitle' | translate}}\n </mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<form class=\"igo-form\" [formGroup]=\"importForm\" *ngIf=\"selectedMode === 'import'\">\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{'igo.geo.importExportForm.importProjPlaceholder' | translate}}</mat-label>\n <mat-select\n [(value)]=\"inputProj\">\n <mat-option\n *ngFor=\"let projection of (projections$ | async)\"\n [value]=\"projection\"\n (click)=\"$event.stopPropagation()\">\n <p mat-line *ngIf=\"projection.translateKey\">{{('igo.geo.importExportForm.projections.' + projection.translateKey) | translate: projection}}</p>\n <p mat-line *ngIf=\"!projection.translateKey\">{{projection.alias}}</p>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"importForm.invalid ? ('igo.geo.importExportForm.projections.choose' | translate) : ('igo.geo.importExportForm.importButton' | translate)\"\n class=\"igo-form-button-group\">\n <button\n [disabled]=\"importForm.invalid || (loading$ | async)\"\n mat-raised-button\n type=\"button\"\n (click)=\"fileInput.click()\">\n {{'igo.geo.importExportForm.importButton' | translate}}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n <input\n hidden\n #fileInput\n type=\"file\"\n [style.display]=\"'none'\"\n (click)=\"fileInput.value = null\"\n (change)=\"importFiles($event.target.files)\">\n </div>\n</form>\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\n <div *ngIf=\"importHtmlClarifications === ''\">\n <h4>{{'igo.geo.importExportForm.importClarifications' | translate}}</h4>\n <ul>\n <li>{{'igo.geo.importExportForm.importSizeMax' | translate: {size: fileSizeMb} }}</li>\n <li>{{'igo.geo.importExportForm.importFormatAuthorized' | translate}}</li>\n <li>{{'igo.geo.importExportForm.importShpZip' | translate}}</li>\n </ul>\n </div>\n <igo-custom-html *ngIf=\"importHtmlClarifications !== ''\" class=\"mat-typography\"\n [html]=\"importHtmlClarifications\">\n </igo-custom-html>\n</section>\n\n<section class=\"mat-typography\" *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\">\n <h4>{{'igo.geo.importExportForm.exportNoLayersExportable' | translate}}</h4>\n</section>\n\n<form class=\"igo-form\" [formGroup]=\"form\" *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\">\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{'igo.geo.importExportForm.exportLayerPlaceholder' | translate}}</mat-label>\n <mat-select\n [(value)]=\"layers\" multiple>\n <mat-select-trigger>\n {{layers.length ? getLayerTitleById(layers[0]) : ''}}\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\n (+{{layers.length - 1}} {{(layers?.length === 2 ? 'igo.geo.importExportForm.other' : 'igo.geo.importExportForm.others') | translate }})\n </span>\n </mat-select-trigger>\n <mat-option\n *ngFor=\"let layer of (exportableLayers$ | async)\"\n [ngClass]=\"{'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)}\"\n [value]=\"layer.id\"\n (click)=\"$event.stopPropagation()\">\n <p mat-line>{{layer.title}}</p>\n <p mat-line>\n <mat-slide-toggle *ngIf=\"layerHasSelectedFeatures(layer)\"\n [labelPosition]=\"'after'\"\n (click)=\"onlySelectedClick($event,layer.id)\"\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\n (change)=\"onlySelected($event,layer.id)\">\n <small>{{'igo.geo.importExportForm.exportSelectedFeature' | translate}}</small>\n </mat-slide-toggle>\n </p>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{'igo.geo.importExportForm.exportFormatPlaceholder' | translate}}</mat-label>\n <mat-select\n formControlName=\"format\">\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\n <mat-option *ngFor=\"let format of (formats$ | async) | keyvalue\" [value]=\"format.key\">\n {{'igo.geo.export.format.' + format.value | translate}}\n </mat-option>\n </ng-container>\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\n {{'igo.geo.export.noFormat.title' | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\" *ngIf=\"forceNaming && form.value.format !== 'URL'\">\n <mat-form-field>\n <input matInput formControlName=\"name\" placeholder=\"{{'igo.geo.importExportForm.exportFileNamePlaceholder' | translate}}\">\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\" *ngIf=\"form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\">\n <mat-form-field>\n <mat-label>{{'igo.geo.importExportForm.encodingPlaceholder' | translate}}</mat-label>\n <mat-select\n formControlName=\"encoding\">\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\n <mat-option *ngFor=\"let encoding of (encodings$ | async) | keyvalue\" [value]=\"encoding.key\">\n {{'igo.geo.export.encoding.' + encoding.value | translate}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"export-combine-layers mat-typography\" *ngIf=\"layers.length > 1 && (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\">\n <mat-slide-toggle\n formControlName=\"combineLayers\"\n [labelPosition]=\"'before'\">\n {{'igo.geo.importExportForm.exportCombineResults' | translate}}\n </mat-slide-toggle>\n </div>\n\n <div class=\"export-separator mat-typography\" *ngIf=\"layers.length > 1 && (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon') && form.value.combineLayers\">\n <mat-slide-toggle\n formControlName=\"separator\"\n [labelPosition]=\"'before'\">\n {{'igo.geo.importExportForm.exportSeparator' | translate}}\n </mat-slide-toggle>\n </div>\n\n <div class=\"export-options mat-typography\" *ngIf=\"form.value.format !== 'URL'\">\n <mat-slide-toggle\n formControlName=\"featureInMapExtent\"\n [labelPosition]=\"'before'\">\n {{'igo.geo.importExportForm.exportFeatureInExtent' | translate}}\n </mat-slide-toggle>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"button\"\n [disabled]=\"!form.valid || (loading$ | async)\"\n (click)=\"handleExportFormSubmit(form.value)\">\n {{form.value.format !== 'URL' ? ('igo.geo.importExportForm.exportButton' | translate): (form.value.layers.length > 1 ? ('igo.geo.importExportForm.exportButtonLinks' | translate): ('igo.geo.importExportForm.exportButtonLink' | translate))}}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n </div>\n\n <igo-custom-html *ngIf=\"exportHtmlClarifications !== ''\" class=\"mat-typography\"\n [html]=\"exportHtmlClarifications\">\n </igo-custom-html>\n\n</form>\n", styles: ["mat-option.igo-export-layer-mat-option{height:5em;line-height:1em}.import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-input-container mat-form-field{width:100%}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}.export-options,.export-combine-layers,.export-separator{overflow-x:hidden}.export-options mat-slide-toggle,.export-combine-layers mat-slide-toggle,.export-separator mat-slide-toggle{width:100%;margin:10px}.export-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content,.export-combine-layers mat-slide-toggle ::ng-deep .mat-slide-toggle-content,.export-separator mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.export-select-trigger{opacity:.75;font-size:.75em}\n"] }]
1209
1209
  }], function () { return [{ type: i1.ImportService }, { type: i2.ExportService }, { type: i3.LanguageService }, { type: i3.MessageService }, { type: i4.StyleListService }, { type: i5.StyleService }, { type: i6.UntypedFormBuilder }, { type: i3.ConfigService }, { type: i0.ChangeDetectorRef }, { type: i3.StorageService }, { type: i7.DownloadService }, { type: i8.LayerService }, { type: i9.ConfirmDialogService }]; }, { selectFirstProj: [{
1210
1210
  type: Input
1211
1211
  }], map: [{
@@ -1225,4 +1225,4 @@ ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Impor
1225
1225
  }], exportOptionsChange: [{
1226
1226
  type: Output
1227
1227
  }] }); })();
1228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHckUsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdC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QUFBO1FBSTVCLDBFQXNDTztRQUNQLDhFQVlVO1FBRVYsZ0ZBRVU7O1FBRVYsNEVBNEdPOzs7UUFoTEMsZUFBc0I7UUFBdEIsd0NBQXNCO1FBRUgsZUFBa0I7UUFBbEIsZ0NBQWtCO1FBQ25DLGVBQ0Y7UUFERSxnR0FDRjtRQUNtQixlQUFrQjtRQUFsQixnQ0FBa0I7UUFDbkMsZUFDRjtRQURFLGlHQUNGO1FBSXlDLGVBQStCO1FBQS9CLG9EQUErQjtRQXVDL0MsZUFBK0I7UUFBL0Isb0RBQStCO1FBYy9CLGVBQTJFO1FBQTNFLGtIQUEyRTtRQUlqRSxlQUF5RTtRQUF6RSxnSEFBeUU7O3VGREp2RyxxQkFBcUI7Y0FMakMsU0FBUzsyQkFDRSxtQkFBbUI7dWFBNENwQixlQUFlO2tCQUF2QixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUlGLHNCQUFzQjtrQkFEekIsS0FBSztZQVlHLEtBQUs7a0JBQWIsS0FBSztZQUVHLFlBQVk7a0JBQXBCLEtBQUs7WUFFSSxVQUFVO2tCQUFuQixNQUFNO1lBRUUsY0FBYztrQkFBdEIsS0FBSztZQUlJLG1CQUFtQjtrQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3RvclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIE1lc3NhZ2VTZXJ2aWNlLFxyXG4gIExhbmd1YWdlU2VydmljZSxcclxuICBDb25maWdTZXJ2aWNlLFxyXG4gIFN0b3JhZ2VTZXJ2aWNlXHJcbn0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XHJcblxyXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xyXG5pbXBvcnQgeyBDbHVzdGVyRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2NsdXN0ZXItZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllcic7XHJcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xyXG5pbXBvcnQgeyBBbnlMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvYW55LWxheWVyJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XHJcbmltcG9ydCBvbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xyXG5pbXBvcnQgeyBjaXJjdWxhciB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVFeHBvcnRFcnJvcixcclxuICBoYW5kbGVGaWxlRXhwb3J0U3VjY2Vzc1xyXG59IGZyb20gJy4uL3NoYXJlZC9leHBvcnQudXRpbHMnO1xyXG5pbXBvcnQgeyBFeHBvcnRPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRGb3JtYXQsIEVuY29kaW5nRm9ybWF0IH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC50eXBlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEltcG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzLFxyXG4gIGhhbmRsZUZpbGVJbXBvcnRFcnJvclxyXG59IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQudXRpbHMnO1xyXG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL3N0eWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdHlsZUxpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtbGlzdC9zdHlsZS1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBza2lwV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dTZXJ2aWNlLCBFbnRpdHlSZWNvcmQsIFdvcmtzcGFjZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlU3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBXZnNXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL3dmcy13b3Jrc3BhY2UnO1xyXG5pbXBvcnQgeyBFZGl0aW9uV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC9lZGl0aW9uLXdvcmtzcGFjZSc7XHJcbmltcG9ydCB7IEZlYXR1cmVXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi93b3Jrc3BhY2Uvc2hhcmVkL2ZlYXR1cmUtd29ya3NwYWNlJztcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBJbnB1dFByb2plY3Rpb25zLCBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB9IGZyb20gJy4uLy4uL21hcC8nO1xyXG5pbXBvcnQgeyBEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9kb3dubG9hZC9zaGFyZWQvZG93bmxvYWQuc2VydmljZSc7XHJcbmltcG9ydCB7IGNvbXB1dGVQcm9qZWN0aW9uc0NvbnN0cmFpbnRzIH0gZnJvbSAnLi4vLi4vbWFwJztcclxuXHJcbmltcG9ydCBvbFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcclxuaW1wb3J0IG9sQ2x1c3RlclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvQ2x1c3Rlcic7XHJcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XHJcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW1wb3J0RXhwb3J0U2VydmljZU9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LmludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1pbXBvcnQtZXhwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbXBvcnRFeHBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIGltcG9ydEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIGZvcm1hdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBlbmNvZGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyBleHBvcnRhYmxlTGF5ZXJzJDogQmVoYXZpb3JTdWJqZWN0PEFueUxheWVyW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIFtdXHJcbiAgKTtcclxuICBwdWJsaWMgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBwdWJsaWMgZm9yY2VOYW1pbmcgPSBmYWxzZTtcclxuICBwdWJsaWMgY29udHJvbEZvcm1hdCA9ICdmb3JtYXQnO1xyXG5cclxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBleHBvcnRhYmxlTGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGZvcm1hdHMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZW5jb2RpbmdzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGZvcm1MYXllciQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBleHBvcnRPcHRpb25zJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHVibGljIGltcG9ydEh0bWxDbGFyaWZpY2F0aW9uczogc3RyaW5nO1xyXG4gIHB1YmxpYyBleHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnM6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBlc3BnQ29kZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlxcXFxkezQsNn0nKTtcclxuICBwcml2YXRlIGNsaWVudFNpZGVGaWxlU2l6ZU1heDogbnVtYmVyO1xyXG4gIHB1YmxpYyBmaWxlU2l6ZU1iOiBudW1iZXI7XHJcblxyXG4gIHB1YmxpYyBwcm9qZWN0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxJbnB1dFByb2plY3Rpb25zW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcbiAgcHJpdmF0ZSBwcm9qZWN0aW9uc0NvbnN0cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucztcclxuXHJcbiAgcHVibGljIHBvcHVwQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzTGF5ZXJTcGVjcyQ6IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIHtcclxuICAgICAgaWQ6IHN0cmluZztcclxuICAgICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgICAgb3BhY2l0eTogbnVtYmVyO1xyXG4gICAgICBxdWVyeWFibGU6IGJvb2xlYW47XHJcbiAgICB9W11cclxuICA+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RGaXJzdFByb2o6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpIGNvbnRleHRVcmk6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBfcHJvamVjdGlvbnNMaW1pdGF0aW9uczogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgPSB7fTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKHZhbHVlOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucykge1xyXG4gICAgdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyA9IHZhbHVlO1xyXG4gICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcclxuICB9XHJcbiAgZ2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnMoKTogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgfHwge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGF0IGhvbGRzIHRoZSBhdmFpbGFibGUgd29ya3NwYWNlcy5cclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogV29ya3NwYWNlU3RvcmU7XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkTW9kZSA9ICdpbXBvcnQnO1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBASW5wdXQoKSBleHBvcnRPcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PEV4cG9ydE9wdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIHVuZGVmaW5lZFxyXG4gICk7XHJcblxyXG4gIEBPdXRwdXQoKSBleHBvcnRPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBvcnRPcHRpb25zPigpO1xyXG5cclxuICBnZXQgbGF5ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2xheWVycycpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgbGF5ZXJzKHZhbHVlKSB7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5wdXRQcm9qKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0Rm9ybS5nZXQoJ2lucHV0UHJvaicpLnZhbHVlO1xyXG4gIH1cclxuICBzZXQgaW5wdXRQcm9qKHZhbHVlKSB7XHJcbiAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcG9wdXBBbGxvd2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdpbXBvcnRFeHBvcnRQb3B1cEFsbG93ZWQnKSBhcyBib29sZWFuIHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBvcHVwQWxsb3dlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpbXBvcnRTZXJ2aWNlOiBJbXBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdHlsZUxpc3RTZXJ2aWNlOiBTdHlsZUxpc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdHlsZVNlcnZpY2U6IFN0eWxlU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZG93bmxvYWRTZXJ2aWNlOiBEb3dubG9hZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtRGlhbG9nU2VydmljZTogQ29uZmlybURpYWxvZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMubG9hZENvbmZpZygpO1xyXG4gICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XHJcbiAgICB0aGlzLmltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0SHRtbENsYXJpZmljYXRpb25zJyk7XHJcbiAgICB0aGlzLmV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0SHRtbENsYXJpZmljYXRpb25zJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLm1hcC5sYXllcnMkLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQubmV4dChcclxuICAgICAgICBsYXllcnMuZmlsdGVyKChsYXllcjogTGF5ZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIGxheWVyLmV4cG9ydGFibGUgPT09IHRydWUpIHx8XHJcbiAgICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcclxuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSBhcyBBbnlMYXllcltdXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVTaXplTWIgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXHJcbiAgICAgICdpbXBvcnRFeHBvcnQuY2xpZW50U2lkZUZpbGVTaXplTWF4TWInXHJcbiAgICApO1xyXG4gICAgdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggPVxyXG4gICAgICAoY29uZmlnRmlsZVNpemVNYiA/IGNvbmZpZ0ZpbGVTaXplTWIgOiAzMCkgKiBNYXRoLnBvdygxMDI0LCAyKTtcclxuICAgIHRoaXMuZmlsZVNpemVNYiA9IHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4IC8gTWF0aC5wb3coMTAyNCwgMik7XHJcblxyXG4gICAgdGhpcy5leHBvcnRPcHRpb25zJCQgPSB0aGlzLmV4cG9ydE9wdGlvbnMkXHJcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZXhwb3J0T3B0aW9ucykgPT4gIWV4cG9ydE9wdGlvbnMpKVxyXG4gICAgICAuc3Vic2NyaWJlKChleHBvcnRPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoZXhwb3J0T3B0aW9ucywgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgaWYgKGV4cG9ydE9wdGlvbnMubGF5ZXJzKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKFxyXG4gICAgICAgICAgICBleHBvcnRPcHRpb25zLmxheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnZm9ybWF0JylcclxuICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAuc3Vic2NyaWJlKChmb3JtYXQpID0+IHtcclxuICAgICAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnBvcHVwQ2hlY2tlZCAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgnbGF5ZXJzJykudmFsdWU/Lmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPj0gMCB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlUG9wdXAodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IHVuZGVmaW5lZCB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ2xheWVycycpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChsYXllcnNJZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMYXllcnMgPSBsYXllcnNJZCBpbnN0YW5jZW9mIEFycmF5ID8gbGF5ZXJzSWQgOiBbbGF5ZXJzSWRdO1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiBzZWxlY3RlZExheWVycyB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gc2VsZWN0ZWRMYXllcnMubWFwKChsKSA9PiB0aGlzLm1hcC5nZXRMYXllckJ5SWQobCkpO1xyXG4gICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMobGF5ZXJzKTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuaW5kZXhPZih0aGlzLmZvcm0udmFsdWUuZm9ybWF0KSA9PT1cclxuICAgICAgICAgIC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3BlY3M6IHtcclxuICAgICAgICAgIGlkOiBzdHJpbmc7XHJcbiAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xyXG4gICAgICAgICAgb3BhY2l0eTogbnVtYmVyO1xyXG4gICAgICAgICAgcXVlcnlhYmxlOiBib29sZWFuO1xyXG4gICAgICAgIH1bXSA9IFtdO1xyXG4gICAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmXHJcbiAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZXMoKS5sZW5ndGggPT09IDBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NwZWNzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiBsYXllci52aXNpYmxlLFxyXG4gICAgICAgICAgICAgIG9wYWNpdHk6IGxheWVyLm9wYWNpdHksXHJcbiAgICAgICAgICAgICAgcXVlcnlhYmxlOiAobGF5ZXIgYXMgYW55KS5xdWVyeWFibGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxheWVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICBsYXllci52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQocHJldmlvdXNTcGVjcyk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybWF0cyQkID0gdGhpcy5mb3JtYXRzJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGZvcm1hdHMpID0+ICFmb3JtYXRzKSlcclxuICAgICAgLnN1YnNjcmliZSgoZm9ybWF0cykgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmb3JtYXRzKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBmb3JtYXRzW09iamVjdC5rZXlzKGZvcm1hdHMpWzBdXSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZW5jb2RpbmdzJCQgPSB0aGlzLmVuY29kaW5ncyRcclxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChlbmNvZGluZ3MpID0+ICFlbmNvZGluZ3MpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlbmNvZGluZ3MpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZW5jb2RpbmdzKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IGVuY29kaW5nc1tPYmplY3Qua2V5cyhlbmNvZGluZ3MpWzBdXSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkID0gdGhpcy5leHBvcnRhYmxlTGF5ZXJzJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGxheWVycykgPT4gIWxheWVycykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xyXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogbGF5ZXJzWzBdLmlkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEZvcm1hdF0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZm9ybWF0KSA9PiB7XHJcbiAgICAgIGlmIChmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24pIHtcclxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0UHJvaikge1xyXG4gICAgICBpZiAodGhpcy5wcm9qZWN0aW9ucyQudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHsgdHJhbnNsYXRlS2V5OiAnbmFkODMnLCBhbGlhczogJ05BRDgzJywgY29kZTogJ0VQU0c6NDMyNicsIHpvbmU6ICcnIH0gfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlWzBdIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlUHJvamVjdGlvbnMoKSB7XHJcbiAgICB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMgPSBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyh0aGlzLnByb2plY3Rpb25zTGltaXRhdGlvbnMpO1xyXG4gICAgY29uc3QgcHJvamVjdGlvbnM6IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubmFkODMpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ25hZDgzJywgYWxpYXM6ICdOQUQ4MycsIGNvZGU6ICdFUFNHOjQyNjknLCB6b25lOiAnJyB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2dzODQpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ3dnczg0JywgYWxpYXM6ICdXR1M4NCcsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJyB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ3dlYk1lcmNhdG9yJywgYWxpYXM6ICdXZWIgTWVyY2F0b3InLCBjb2RlOiAnRVBTRzozODU3Jywgem9uZTogJycgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcclxuICAgICAgLy8gYWxsIG10bSB6b25lc1xyXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bVpvbmUubWluWm9uZTtcclxuICAgICAgY29uc3QgbWF4Wm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG1ab25lLm1heFpvbmU7XHJcblxyXG4gICAgICBmb3IgKGxldCBtdG1ab25lID0gbWluWm9uZTsgbXRtWm9uZSA8PSBtYXhab25lOyBtdG1ab25lKyspIHtcclxuICAgICAgICBjb25zdCBjb2RlID0gbXRtWm9uZSA8IDEwID8gYEVQU0c6MzIxOCR7bXRtWm9uZX1gIDogYEVQU0c6MzIxJHs4MCArIG10bVpvbmV9YDtcclxuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHsgdHJhbnNsYXRlS2V5OiAnbXRtJywgYWxpYXM6IGBNVE0gJHttdG1ab25lfWAsIGNvZGUsIHpvbmU6IGAke210bVpvbmV9YCB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtKSB7XHJcbiAgICAgIC8vIGFsbCB1dG0gem9uZXNcclxuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1pblpvbmU7XHJcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtWm9uZS5tYXhab25lO1xyXG5cclxuICAgICAgZm9yIChsZXQgdXRtWm9uZSA9IG1pblpvbmU7IHV0bVpvbmUgPD0gbWF4Wm9uZTsgdXRtWm9uZSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHV0bVpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3V0bVpvbmV9YCA6IGBFUFNHOjMyNiR7dXRtWm9uZX1gO1xyXG4gICAgICAgIHByb2plY3Rpb25zLnB1c2goeyB0cmFuc2xhdGVLZXk6ICd1dG0nLCBhbGlhczogYFVUTSAke3V0bVpvbmV9YCwgY29kZSwgem9uZTogYCR7dXRtWm9uZX1gIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbmZpZ1Byb2plY3Rpb24gPSBbXTtcclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcclxuICAgICAgY29uZmlnUHJvamVjdGlvbiA9IHRoaXMuY29uZmlnLmdldENvbmZpZygncHJvamVjdGlvbnMnKSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KGNvbmZpZ1Byb2plY3Rpb24uY29uY2F0KHByb2plY3Rpb25zKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdvcmtzcGFjZUJ5TGF5ZXJJZChpZDogc3RyaW5nKTogV29ya3NwYWNlIHtcclxuICAgIGNvbnN0IHdrc0Zyb21MYXllcklkID0gdGhpcy5zdG9yZVxyXG4gICAgICAuYWxsKClcclxuICAgICAgLmZpbmQod29ya3NwYWNlID0+ICh3b3Jrc3BhY2UgYXMgV2ZzV29ya3NwYWNlIHwgRmVhdHVyZVdvcmtzcGFjZSB8IEVkaXRpb25Xb3Jrc3BhY2UpLmxheWVyLmlkID09PSBpZCk7XHJcbiAgICBpZiAod2tzRnJvbUxheWVySWQpIHtcclxuICAgICAgcmV0dXJuIHdrc0Zyb21MYXllcklkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExheWVyVGl0bGVCeUlkKGlkKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1hcC5nZXRMYXllckJ5SWQoaWQpPy50aXRsZTtcclxuICB9XHJcblxyXG5cclxuICBsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB3a3NGcm9tTGF5ZXIgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllci5pZCk7XHJcbiAgICBpZiAod2tzRnJvbUxheWVyKSB7XHJcbiAgICAgIGNvbnN0IHJlY3MgPSB3a3NGcm9tTGF5ZXIuZW50aXR5U3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgLmZpcnN0QnkoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmU+KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVjcyA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWQoZXZlbnQ6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uO1xyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbi5wdXNoKGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb24gPSBsYXllcnNXaXRoU2VsZWN0aW9uLmZpbHRlcihsYXllcklkID0+IGxheWVySWQgIT09IGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzV2l0aFNlbGVjdGlvbiB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWRDbGljayhldmVudCwgaWQ6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZm9ybS52YWx1ZS5sYXllcnMuZmluZChsYXllcklkID0+IGxheWVySWQgPT09IGlkKSkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uLmZpbmQobGF5ZXJJZCA9PiBsYXllcklkID09PSBsYXllci5pZCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubGF5ZXJzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmZvcm1hdHMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5lbmNvZGluZ3MkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5mb3JtTGF5ZXIkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMuZXhwb3J0T3B0aW9ucyQkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydE9wdGlvbnNDaGFuZ2UuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCkge1xyXG4gICAgY29uc3QgcHJldmlvdXNTcGVjcyA9IHRoaXMucHJldmlvdXNMYXllclNwZWNzJC52YWx1ZTtcclxuICAgIGlmIChwcmV2aW91c1NwZWNzICYmIHByZXZpb3VzU3BlY3MubGVuZ3RoKSB7XHJcbiAgICAgIHByZXZpb3VzU3BlY3MuZm9yRWFjaCgoc3BlY3MpID0+IHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0xheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKHNwZWNzLmlkKTtcclxuICAgICAgICBwcmV2aW91c0xheWVyLnZpc2libGUgPSBzcGVjcy52aXNpYmxlO1xyXG4gICAgICAgIHByZXZpb3VzTGF5ZXIub3BhY2l0eSA9IHNwZWNzLm9wYWNpdHk7XHJcbiAgICAgICAgKHByZXZpb3VzTGF5ZXIgYXMgYW55KS5xdWVyeWFibGUgPSBzcGVjcy5xdWVyeWFibGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIGltcG9ydEZpbGVzKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGxldCBpbnB1dFByb2ogPSB0aGlzLmlucHV0UHJvai5jb2RlO1xyXG4gICAgaWYgKHRoaXMuZXNwZ0NvZGVSZWdleC50ZXN0KGlucHV0UHJvaikpIHtcclxuICAgICAgaW5wdXRQcm9qID0gYEVQU0c6JHtpbnB1dFByb2p9YDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgdGhpcy5pbXBvcnRTZXJ2aWNlLmltcG9ydChmaWxlLCBpbnB1dFByb2opLnN1YnNjcmliZShcclxuICAgICAgICAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gdGhpcy5vbkZpbGVJbXBvcnRTdWNjZXNzKGZpbGUsIGZlYXR1cmVzKSxcclxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUltcG9ydEVycm9yKGZpbGUsIGVycm9yKSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVBvcHVwKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcDEgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XHJcbiAgICBwMS5jbG9zZSgpO1xyXG4gICAgY29uc3QgcDIgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XHJcbiAgICBpZiAoIXAyIHx8IHAyLmNsb3NlZCB8fCB0eXBlb2YgcDIuY2xvc2VkID09PSAndW5kZWZpbmVkJyB8fCBwMiA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2spO1xyXG4gICAgICB0aGlzLnBvcHVwQWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcDIuY2xvc2UoKTtcclxuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnBvcHVwQ2hlY2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wb3B1cEFsbG93ZWQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGRhdGE6IEV4cG9ydE9wdGlvbnMpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xyXG4gICAgaWYgKCF0aGlzLnBvcHVwQ2hlY2tlZCAmJiBkYXRhLmxheWVycy5sZW5ndGggPiAxICYmXHJcbiAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGRhdGEuZm9ybWF0KSA+PSAwIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKSAmJiAhdGhpcy5wb3B1cEFsbG93ZWQpIHtcclxuICAgICAgdGhpcy5oYW5kbGVQb3B1cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZW9tVHlwZXNDU1Y6IHsgZ2VvbWV0cnlUeXBlOiBzdHJpbmcsIGZlYXR1cmVzOiBhbnlbXSB9W10gPSBbXTtcclxuICAgIGxldCBmZWF0dXJlc0NTVjogYW55W10gPSBbXTtcclxuICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtsYXllckluZGV4LCBsYXllcl0gb2YgZGF0YS5sYXllcnMuZW50cmllcygpKSB7XHJcbiAgICAgIGNvbnN0IGxheSA9IHRoaXMubWFwLmdldExheWVyQnlJZChsYXllcik7XHJcbiAgICAgIGlmICghKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpXHJcbiAgICAgIHx8ICFkYXRhLmNvbWJpbmVMYXllcnMgfHwgZGF0YS5sYXllcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgZmlsZW5hbWUgPSBsYXkudGl0bGU7XHJcbiAgICAgICAgaWYgKGRhdGEubmFtZSkge1xyXG4gICAgICAgICAgZmlsZW5hbWUgPSBkYXRhLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVuYW1lID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LmNvbWJpbmVkTGF5ZXJzJyk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZFNPcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucyA9IGxheS5kYXRhU291cmNlLm9wdGlvbnM7XHJcbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlVSTCAmJiBkU09wdGlvbnMuZG93bmxvYWQgJiYgKGRTT3B0aW9ucy5kb3dubG9hZC51cmwgfHwgZFNPcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmwpKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBiZXR0ZXIgbG9vayBhbiBmZWVsXHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBkU09wdGlvbnMuZG93bmxvYWQudXJsIHx8IGRTT3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsO1xyXG4gICAgICAgICAgdXJsLm1hdGNoKC9zZXJ2aWNlPXdmcy9naSkgPyB0aGlzLmRvd25sb2FkU2VydmljZS5vcGVuKGxheSkgOiB3aW5kb3cub3Blbih1cmwgLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdrcyA9IHRoaXMuZ2V0V29ya3NwYWNlQnlMYXllcklkKGxheWVyKTtcclxuICAgICAgbGV0IG9sRmVhdHVyZXM7XHJcbiAgICAgIGlmICh3a3MgJiYgd2tzLmVudGl0eVN0b3JlICYmIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKCkubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgIGlmIChkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmIGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XHJcbiAgICAgICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmIGludG8gbWFwIGV4dGVudFxyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKClcclxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQgJiYgZS5zdGF0ZS5zZWxlY3RlZCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiYgIWRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XHJcbiAgICAgICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmICAoaW50byBtYXAgZXh0ZW50IE9SIG5vdClcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLnNlbGVjdGVkKS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcclxuICAgICAgICAgIC8vIE9ubHkgaW50byBtYXAgZXh0ZW50XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWxsIGZlYXR1cmVzXHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBvbCA9IGxheS5kYXRhU291cmNlLm9sIGFzIG9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+IHwgb2xDbHVzdGVyU291cmNlIDtcclxuICAgICAgICBpZiAoZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbC5nZXRGZWF0dXJlc0luRXh0ZW50KFxyXG4gICAgICAgICAgICBsYXkubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheS5kYXRhU291cmNlIGluc3RhbmNlb2YgQ2x1c3RlckRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbEZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgY2x1c3Rlci5nZXQoJ2ZlYXR1cmVzJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgbGV0IGdlb21UeXBlczogeyBnZW9tZXRyeVR5cGU6IHN0cmluZywgZmVhdHVyZXM6IGFueVtdIH1bXSA9IFtdO1xyXG4gICAgICBpZiAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUgfHwgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5HUFgpIHtcclxuICAgICAgICBvbEZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmVhdHVyZUdlb21UeXBlID0gb2xGZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpO1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEdlb21UeXBlID0gZ2VvbVR5cGVzLmZpbmQoZ2VvbVR5cGUgPT4gZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlID09PSBmZWF0dXJlR2VvbVR5cGUpO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRHZW9tVHlwZSkge1xyXG4gICAgICAgICAgICBjdXJyZW50R2VvbVR5cGUuZmVhdHVyZXMucHVzaChvbEZlYXR1cmUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ2VvbVR5cGVzLnB1c2goeyBnZW9tZXRyeVR5cGU6IGZlYXR1cmVHZW9tVHlwZSwgZmVhdHVyZXM6IFtvbEZlYXR1cmVdIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdlb21UeXBlcyA9IFt7IGdlb21ldHJ5VHlwZTogJycsIGZlYXR1cmVzOiBvbEZlYXR1cmVzIH1dO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBnZW9tVHlwZXMuZm9yRWFjaChnZW9tVHlwZSA9PiB7XHJcbiAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xyXG4gICAgICAgICAgaWYgKHJhZGl1cykge1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXI0MzI2OiBBcnJheTxudW1iZXI+ID0gW2ZlYXR1cmUuZ2V0KCdsb25naXR1ZGUnKSwgZmVhdHVyZS5nZXQoJ2xhdGl0dWRlJyldO1xyXG4gICAgICAgICAgICBjb25zdCBjaXJjbGUgPSBjaXJjdWxhcihjZW50ZXI0MzI2LCByYWRpdXMsIDUwMCk7XHJcbiAgICAgICAgICAgIGNpcmNsZS50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIGZlYXR1cmUuZ2V0KCdfcHJvamVjdGlvbicpKTtcclxuICAgICAgICAgICAgZmVhdHVyZS5zZXRHZW9tZXRyeShjaXJjbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkdQWCkge1xyXG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnQgPSBnZW9tVHlwZXMubGVuZ3RoO1xyXG4gICAgICAgIGdlb21UeXBlcyA9IGdlb21UeXBlcy5maWx0ZXIoZ2VvbVR5cGUgPT4gWydMaW5lU3RyaW5nJywgJ1BvaW50J10uaW5jbHVkZXMoZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlKSk7XHJcbiAgICAgICAgY29uc3QgZ3B4RmVhdHVyZUNudFBvaW50T3JQb2x5ID0gZ2VvbVR5cGVzLmxlbmd0aDtcclxuICAgICAgICBpZiAoZ3B4RmVhdHVyZUNudCA+IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby5leHBvcnQuZ3B4LmVycm9yLnBvbHkudGV4dCcsICdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50aXRsZScsIHsgdGltZU91dDogMjAwMDAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKSAmJiBkYXRhLmNvbWJpbmVMYXllcnMpIHtcclxuICAgICAgICBnZW9tVHlwZXMuZm9yRWFjaChnZW9tVHlwZSA9PiBnZW9tVHlwZXNDU1YucHVzaChnZW9tVHlwZSkpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXJJbmRleCAhPT0gZGF0YS5sYXllcnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBwcmV2aW91c0ZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBnZW9tVHlwZXNDU1YuZm9yRWFjaChnZW9tVHlwZSA9PiB7XHJcbiAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goY3VycmVudEZlYXR1cmUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhLnNlcGFyYXRvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSAhPT1cclxuICAgICAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IHRoaXMuY3JlYXRlVGl0bGVFbXB0eVJvd3MocHJldmlvdXNGZWF0dXJlLCBjdXJyZW50RmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1syXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1sxXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhjdXJyZW50RmVhdHVyZSwgY3VycmVudEZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaChjdXJyZW50RmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlID0gY3VycmVudEZlYXR1cmU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZ2VvbVR5cGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby5leHBvcnQubm90aGluZy50ZXh0JywgJ2lnby5nZW8uZXhwb3J0Lm5vdGhpbmcudGl0bGUnLCB7IHRpbWVPdXQ6IDIwMDAwIH0pO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIShkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKSB8fCAhZGF0YS5jb21iaW5lTGF5ZXJzKSB7XHJcbiAgICAgICAgICBnZW9tVHlwZXMubWFwKGdlb21UeXBlID0+XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnQoZ2VvbVR5cGUuZmVhdHVyZXMsIGRhdGEuZm9ybWF0LCBmaWxlbmFtZSArIGdlb21UeXBlLmdlb21ldHJ5VHlwZSwgZGF0YS5lbmNvZGluZywgdGhpcy5tYXAucHJvamVjdGlvbilcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUV4cG9ydEVycm9yKGVycm9yKSxcclxuICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNpcmNsZVRvUG9pbnQoZmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpICYmIGRhdGEuY29tYmluZUxheWVycykge1xyXG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0KGZlYXR1cmVzQ1NWLCBkYXRhLmZvcm1hdCwgZmlsZW5hbWUsIGRhdGEuZW5jb2RpbmcsIHRoaXMubWFwLnByb2plY3Rpb24pXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKCkgPT4ge30sXHJcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbkZpbGVFeHBvcnRTdWNjZXNzKCk7XHJcblxyXG4gICAgICAgICAgZmVhdHVyZXNDU1YuZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaXJjbGVUb1BvaW50KGZlYXR1cmUpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRpdGxlRW1wdHlSb3dzKHByZXZpb3VzRmVhdHVyZSwgY3VycmVudEZlYXR1cmUpIHtcclxuICAgIGNvbnN0IHRpdGxlUm93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcclxuICAgIGNvbnN0IGhlYWRlclJvdyA9IGN1cnJlbnRGZWF0dXJlLmNsb25lKCk7XHJcbiAgICBjb25zdCBlbXB0eVJvdyA9IGN1cnJlbnRGZWF0dXJlLmNsb25lKCk7XHJcbiAgICBjb25zdCBwcmV2aW91c0ZlYXR1cmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gcHJldmlvdXNGZWF0dXJlLmdldEtleXMoKTtcclxuICAgIGxldCBmaXJzdEtleVByZXZpb3VzOiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHByZXZpb3VzRmVhdHVyZUtleXMpIHtcclxuICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZUtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xyXG4gICAgICAgIGZpcnN0S2V5UHJldmlvdXMgPSBwcmV2aW91c0ZlYXR1cmVLZXlzW2tleV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50RmVhdHVyZUtleXM6IEFycmF5PHN0cmluZz4gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XHJcbiAgICBsZXQgZmlyc3RLZXlDdXJyZW50OiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAoY29uc3Qga2V5IGluIGN1cnJlbnRGZWF0dXJlS2V5cykge1xyXG4gICAgICBpZiAoY3VycmVudEZlYXR1cmVLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICBmaXJzdEtleUN1cnJlbnQgPSBjdXJyZW50RmVhdHVyZUtleXNba2V5XTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgYWxsS2V5czogQXJyYXk8c3RyaW5nPiA9IGN1cnJlbnRGZWF0dXJlLmdldEtleXMoKTtcclxuICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZm9yRWFjaChwcmV2aW91c0tleSA9PiB7XHJcbiAgICAgIGlmIChhbGxLZXlzLmluY2x1ZGVzKHByZXZpb3VzS2V5KSAmJiBwcmV2aW91c0tleSAhPT0gZmlyc3RLZXlQcmV2aW91cykge1xyXG4gICAgICAgIGFsbEtleXMucHVzaChwcmV2aW91c0tleSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYWxsS2V5cy51bnNoaWZ0KGZpcnN0S2V5UHJldmlvdXMpO1xyXG5cclxuICAgIGxldCBmaXJzdEtleUFsbDogc3RyaW5nID0gJyc7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhbGxLZXlzKSB7XHJcbiAgICAgIGlmIChhbGxLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICBmaXJzdEtleUFsbCA9IGFsbEtleXNba2V5XTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYWxsS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGNvbnN0IHNhbWVLZXlzOiBib29sZWFuID0gcHJldmlvdXNGZWF0dXJlS2V5cy5sZW5ndGggPT09IGN1cnJlbnRGZWF0dXJlS2V5cy5sZW5ndGggJiZcclxuICAgICAgcHJldmlvdXNGZWF0dXJlS2V5cy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gY3VycmVudEZlYXR1cmVLZXlzW2luZGV4XSk7XHJcbiAgICAgIGlmIChrZXkgPT09IGZpcnN0S2V5QWxsICYmICFzYW1lS2V5cykge1xyXG4gICAgICAgIHRpdGxlUm93LnNldChrZXksIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUgKyBcIiA9PT09PT09PT09PT09PT0+XCIsIHRydWUpO1xyXG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBmaXJzdEtleUFsbCAmJiBzYW1lS2V5cykge1xyXG4gICAgICAgIHRpdGxlUm93LnNldChrZXksIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUsIHRydWUpO1xyXG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBmaXJzdEtleUN1cnJlbnQpIHtcclxuICAgICAgICB0aXRsZVJvdy5zZXQoa2V5LCBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlLCB0cnVlKTtcclxuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSAhPT0gJ2dlb21ldHJ5Jykge1xyXG4gICAgICAgIHRpdGxlUm93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgaGVhZGVyUm93LnNldChrZXksIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aXRsZVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGN1cnJlbnRGZWF0dXJlS2V5cy5pbmNsdWRlcyhrZXkpKSkge1xyXG4gICAgICAgIGhlYWRlclJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gW3RpdGxlUm93LCBoZWFkZXJSb3csIGVtcHR5Um93XTtcclxuICAgIHJldHVybiB0aXRsZUVtcHR5Um93cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2lyY2xlVG9Qb2ludChmZWF0dXJlKSB7XHJcbiAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcclxuXHJcbiAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgIGNvbnN0IHBvaW50ID0gbmV3IG9sUG9pbnQoW2ZlYXR1cmUuZ2V0KCdsb25naXR1ZGUnKSwgZmVhdHVyZS5nZXQoJ2xhdGl0dWRlJyldKTtcclxuICAgICAgcG9pbnQudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XHJcbiAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkocG9pbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XHJcbiAgICB0aGlzLmltcG9ydEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgaW5wdXRQcm9qOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcmNlTmFtaW5nKSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXHJcbiAgICAgICAgZW5jb2Rpbmc6IFtFbmNvZGluZ0Zvcm1hdC5VVEY4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGNvbWJpbmVMYXllcnM6IFt0cnVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIHNlcGFyYXRvcjogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGZlYXR1cmVJbk1hcEV4dGVudDogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb246IFtbXV0sXHJcbiAgICAgICAgZW5jb2Rpbmc6IFtFbmNvZGluZ0Zvcm1hdC5VVEY4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGNvbWJpbmVMYXllcnM6IFt0cnVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIHNlcGFyYXRvcjogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGZlYXR1cmVJbk1hcEV4dGVudDogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWxlSW1wb3J0U3VjY2VzcyhmaWxlOiBGaWxlLCBmZWF0dXJlczogRmVhdHVyZVtdKSB7XHJcbiAgICBjb25zdCBpbXBvcnRFeHBvcnRPcHRpb25zID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQnKSBhcyBJbXBvcnRFeHBvcnRTZXJ2aWNlT3B0aW9ucztcclxuICAgIGNvbnN0IGNvbmZpcm1EaWFsb2dTZXJ2aWNlID0gaW1wb3J0RXhwb3J0T3B0aW9ucz8uYWxsb3dUb1N0b3JlTGF5ZXIgPyB0aGlzLmNvbmZpcm1EaWFsb2dTZXJ2aWNlIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgaW1wb3J0V2l0aFN0eWxlID1pbXBvcnRFeHBvcnRPcHRpb25zPy5pbXBvcnRXaXRoU3R5bGUgfHwgdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRXaXRoU3R5bGUnKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydFdpdGhTdHlsZScpKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgXHJcbiAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGlzIGNvbmZpZyBpbXBvcnRXaXRoU3R5bGUgaXMgZGVwcmVjYXRlZC5cclxuICAgICAgUGxlYXNlIG1vdmUgdGhpcyBwcm9wZXJ0eSB3aXRoaW4gaW1wb3J0RXhwb3J0IGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgIEV4OiBpbXBvcnRXaXRoU3R5bGU6IHRydWUvZmFsc2UgbXVzdCBiZSB0cmFuc2ZlcmVkIHRvIGltcG9ydEV4cG9ydDogeyBpbXBvcnRXaXRoU3R5bGU6IHRydWUvZmFsc2UgfVxyXG4gICAgICBSZWZlciB0byBlbnZpcm9ubmVtZW50LnRzIE9SIGNvbmZpZy9jb25maWcuanNvblxyXG4gICAgICBUaGlzIGxlZ2FjeSBjb252ZXJzaW9uIHdpbGwgYmUgZGVsZXRlZCBpbiAyMDI0LlxyXG4gICAgICBgKTtcclxuICAgIH1cclxuICAgIGlmICghaW1wb3J0V2l0aFN0eWxlKSB7XHJcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXHJcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2VcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgdGhpcy5jb250ZXh0VXJpLFxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXHJcbiAgICAgICAgY29uZmlybURpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgdGhpcy5zdHlsZUxpc3RTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUltcG9ydEVycm9yKGZpbGU6IEZpbGUsIGVycm9yOiBFcnJvcikge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIGhhbmRsZUZpbGVJbXBvcnRFcnJvcihcclxuICAgICAgZmlsZSxcclxuICAgICAgZXJyb3IsXHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgIHRoaXMuZmlsZVNpemVNYlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Qb3B1cEJsb2NrZWRFcnJvcihwcmVDaGVjazogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBjb25zdCBleHRyYU1lc3NhZ2UgPSBwcmVDaGVjayA/ICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQuc2VsZWN0QWdhaW4nIDogJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5yZXRyeSc7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRleHQnLFxyXG4gICAgICAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRpdGxlJyxcclxuICAgICAgeyB0aW1lT3V0OiAyMDAwMCB9LFxyXG4gICAgICB7ZXh0cmFNZXNzYWdlfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUV4cG9ydEVycm9yKGVycm9yOiBFcnJvcikge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIGhhbmRsZUZpbGVFeHBvcnRFcnJvcihlcnJvciwgdGhpcy5tZXNzYWdlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRDb25maWcoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQuZm9yY2VOYW1pbmcnKSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZm9yY2VOYW1pbmcgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JjZU5hbWluZycpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb21wdXRlRm9ybWF0cygpO1xyXG4gICAgdGhpcy5sb2FkRW5jb2RpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW5jb2RpbmdEZWZhdWx0VmFsdWUoZm9ybWF0OiBFeHBvcnRGb3JtYXQpIHtcclxuICAgIGlmIChmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24pIHtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuTEFUSU4xIH0pO1xyXG4gICAgICByZXR1cm4gRW5jb2RpbmdGb3JtYXQuTEFUSU4xO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcclxuICAgICAgcmV0dXJuIEVuY29kaW5nRm9ybWF0LlVURjg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRFbmNvZGluZ3MoKSB7XHJcbiAgICB0aGlzLmVuY29kaW5ncyQubmV4dChFbmNvZGluZ0Zvcm1hdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXB1dGVGb3JtYXRzKGxheWVycz86IEFueUxheWVyW10pIHtcclxuICAgIGxldCBhcHBsaWVkZm9ybWF0czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhFeHBvcnRGb3JtYXQpO1xyXG4gICAgY29uc3QgZm9ybWF0c1R5cGUgPSB7XHJcbiAgICAgIG9ubHlVcmw6IGZhbHNlLFxyXG4gICAgICBvbmx5VmVjdG9yOiBmYWxzZSxcclxuICAgICAgdmVjdG9yQW5kVXJsOiBmYWxzZSxcclxuICAgICAgY3VzdG9tTGlzdDogZmFsc2VcclxuICAgIH07XHJcbiAgICBjb25zdCBjdXN0b21MaXN0ID0gW107XHJcbiAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGgpIHtcclxuICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFsYXllcikge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkPy5hbGxvd2VkRm9ybWF0cykge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUuY3VzdG9tTGlzdCA9IHRydWU7XHJcbiAgICAgICAgICBjdXN0b21MaXN0LnB1c2goe2xheWVyOiBsYXllci50aXRsZSwgZm9ybWF0czogdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmFsbG93ZWRGb3JtYXRzKX0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAhKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpICYmXHJcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcclxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGZvcm1hdHNUeXBlLm9ubHlVcmwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcclxuICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsIHx8IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUudmVjdG9yQW5kVXJsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcclxuICAgICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0c1R5cGUub25seVVybCA9PT0gdHJ1ZSAmJiBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID09PSBmYWxzZSkge1xyXG4gICAgICAgIGFwcGxpZWRmb3JtYXRzID0gWydVUkwnXTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID09PSB0cnVlICYmXHJcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cygpOyAvLyByZXNldFxyXG4gICAgICAgIGlmIChFeHBvcnRGb3JtYXQuVVJMIGluIHRoaXMuZm9ybWF0cyQudmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm1hdHMkLnZhbHVlKS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ1VSTCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IGtleXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGZvcm1hdHNUeXBlLnZlY3RvckFuZFVybCA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlVcmwgPT09IGZhbHNlICYmXHJcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9PT0gZmFsc2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cygpOyAvLyByZXNldFxyXG4gICAgICAgIGlmICghKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm1hdHMkLnZhbHVlKTtcclxuICAgICAgICAgIGtleXMucHVzaCgnVVJMJyk7XHJcbiAgICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IGtleXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb25maWdJbXBvcnRFeHBvcnRGb3JtYXRzID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQuZm9ybWF0cycpO1xyXG4gICAgaWYgKGNvbmZpZ0ltcG9ydEV4cG9ydEZvcm1hdHMpIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGVkTGlzdEZvcm1hdCA9IHRoaXMudmFsaWRhdGVMaXN0Rm9ybWF0KGNvbmZpZ0ltcG9ydEV4cG9ydEZvcm1hdHMpO1xyXG4gICAgICBhcHBsaWVkZm9ybWF0cyA9IGFwcGxpZWRmb3JtYXRzLmZpbHRlcihhZiA9PiB2YWxpZGF0ZWRMaXN0Rm9ybWF0LmluY2x1ZGVzKGFmKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZm9ybWF0c1R5cGUuY3VzdG9tTGlzdCkge1xyXG4gICAgICBsZXQgY29tbW9uRm9ybWF0cztcclxuICAgICAgY29uc3QgbGF5ZXJzV2l0aEN1c3RvbUZvcm1hdHMgPSBbXTtcclxuICAgICAgbGV0IHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMgPSBjdXN0b21MaXN0WzBdLmZvcm1hdHM7XHJcbiAgICAgIGN1c3RvbUxpc3QubWFwKGxpc3QgPT4ge1xyXG4gICAgICAgIGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLnB1c2gobGlzdC5sYXllcik7XHJcbiAgICAgICAgY29tbW9uRm9ybWF0cyA9IGxpc3QuZm9ybWF0cy5maWx0ZXIodmFsdWUgPT4gcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSkpO1xyXG4gICAgICAgIHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMgPSBsaXN0LmZvcm1hdHM7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBmaW5hbEZvcm1hdHMgPSBjb21tb25Gb3JtYXRzLmZpbHRlcih2YWx1ZSA9PiBhcHBsaWVkZm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSkpO1xyXG4gICAgICBpZiAoZmluYWxGb3JtYXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmZvcm1hdHMkLm5leHQoc3RyRW51bShmaW5hbEZvcm1hdHMpKTtcclxuXHJcbiAgICAgICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcclxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50ZXh0JyxcclxuICAgICAgICAgICAgICAnaWdvLmdlby5leHBvcnQuY3VzdG9tTGlzdC50aXRsZScsXHJcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIHsgdmFsdWU6IGxheWVyc1dpdGhDdXN0b21Gb3JtYXRzLmpvaW4oKSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydCgnaWdvLmdlby5leHBvcnQubm9Gb3JtYXQudGV4dCcsJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtYXRzJC5uZXh0KHN0ckVudW0oYXBwbGllZGZvcm1hdHMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVMaXN0Rm9ybWF0KGZvcm1hdHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIGZvcm1hdHNcclxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYS50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdQWC50b1VwcGVyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5tYXAoKGZvcm1hdCkgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5DU1Zjb21tYTtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR01MLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HTUw7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdQWDtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0Lkdlb0pTT047XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LktNTDtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlVSTC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuVVJMO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vZGVDaGFuZ2VkKG1vZGUpIHtcclxuICAgIHRoaXMuc2VsZWN0TW9kZS5lbWl0KG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRTdWNjZXNzKCkge1xyXG4gICAgaGFuZGxlRmlsZUV4cG9ydFN1Y2Nlc3ModGhpcy5tZXNzYWdlU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEV4cG9ydENoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZE1vZGUgPSBldmVudC52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImltcG9ydC1leHBvcnQtdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXHJcbiAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkTW9kZVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJvbkltcG9ydEV4cG9ydENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCInaW1wb3J0J1wiPlxyXG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidleHBvcnQnXCI+XHJcbiAgICAgICAgICB7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0VGFiVGl0bGUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbjwvZGl2PlxyXG5cclxuPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiIFtmb3JtR3JvdXBdPVwiaW1wb3J0Rm9ybVwiICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFByb2pQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgIFsodmFsdWUpXT1cImlucHV0UHJvalwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdGlvbiBvZiAocHJvamVjdGlvbnMkIHwgYXN5bmMpXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJwcm9qZWN0aW9uXCJcclxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDxwIG1hdC1saW5lICpuZ0lmPVwicHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj57eygnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLicgKyBwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleSkgfCB0cmFuc2xhdGU6IHByb2plY3Rpb259fTwvcD5cclxuICAgICAgICAgIDxwIG1hdC1saW5lICpuZ0lmPVwiIXByb2plY3Rpb24udHJhbnNsYXRlS2V5XCI+e3twcm9qZWN0aW9uLmFsaWFzfX08L3A+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJpbXBvcnRGb3JtLmludmFsaWQgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5jaG9vc2UnIHwgdHJhbnNsYXRlKSA6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUpXCJcclxuICAgIGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpbXBvcnRGb3JtLmludmFsaWQgfHwgKGxvYWRpbmckIHwgYXN5bmMpXCJcclxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRCdXR0b24nIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGlnby1zcGlubmVyIFtzaG93bl09XCJsb2FkaW5nJCB8IGFzeW5jXCI+PC9pZ28tc3Bpbm5lcj5cclxuICAgIDxpbnB1dFxyXG4gICAgICBoaWRkZW5cclxuICAgICAgI2ZpbGVJbnB1dFxyXG4gICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXHJcbiAgICAgIChjbGljayk9XCJmaWxlSW5wdXQudmFsdWUgPSBudWxsXCJcclxuICAgICAgKGNoYW5nZSk9XCJpbXBvcnRGaWxlcygkZXZlbnQudGFyZ2V0LmZpbGVzKVwiPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cInNlbGVjdGVkTW9kZSA9PT0gJ2ltcG9ydCdcIj5cclxuICA8ZGl2ICpuZ0lmPVwiaW1wb3J0SHRtbENsYXJpZmljYXRpb25zID09PSAnJ1wiPlxyXG4gICAgPGg0Pnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRDbGFyaWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvaDQ+XHJcbiAgICA8dWw+XHJcbiAgICAgIDxsaT57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0U2l6ZU1heCcgfCB0cmFuc2xhdGU6IHtzaXplOiBmaWxlU2l6ZU1ifSB9fTwvbGk+XHJcbiAgICAgIDxsaT57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0Rm9ybWF0QXV0aG9yaXplZCcgfCB0cmFuc2xhdGV9fTwvbGk+XHJcbiAgICAgIDxsaT57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0U2hwWmlwJyB8IHRyYW5zbGF0ZX19PC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbiAgPGlnby1jdXN0b20taHRtbCAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyAhPT0gJydcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCJcclxuICAgIFtodG1sXT1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9uc1wiPlxyXG4gIDwvaWdvLWN1c3RvbS1odG1sPlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCIoZXhwb3J0YWJsZUxheWVycyQgfCBhc3luYykubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIj5cclxuICA8aDQ+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydE5vTGF5ZXJzRXhwb3J0YWJsZScgfCB0cmFuc2xhdGV9fTwvaDQ+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxmb3JtIGNsYXNzPVwiaWdvLWZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRMYXllclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgWyh2YWx1ZSldPVwibGF5ZXJzXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgIHt7bGF5ZXJzLmxlbmd0aCA/IGdldExheWVyVGl0bGVCeUlkKGxheWVyc1swXSkgOiAnJ319XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxXCIgY2xhc3M9XCJleHBvcnQtc2VsZWN0LXRyaWdnZXJcIj5cclxuICAgICAgICAgICAgKCt7e2xheWVycy5sZW5ndGggLSAxfX0ge3sobGF5ZXJzPy5sZW5ndGggPT09IDIgPyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLm90aGVyJyA6ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXJzJykgfCB0cmFuc2xhdGUgfX0pXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYXllciBvZiAoZXhwb3J0YWJsZUxheWVycyQgfCBhc3luYylcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpZ28tZXhwb3J0LWxheWVyLW1hdC1vcHRpb24nOiBsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXIpfVwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuaWRcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgPHAgbWF0LWxpbmU+e3tsYXllci50aXRsZX19PC9wPlxyXG4gICAgICAgICAgPHAgbWF0LWxpbmU+XHJcbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlICpuZ0lmPVwibGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyKVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2FmdGVyJ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9ubHlTZWxlY3RlZENsaWNrKCRldmVudCxsYXllci5pZClcIlxyXG4gICAgICAgICAgICAgIChjaGVja2VkKT1cImluTGF5ZXJzSWRUb0V4cG9ydFNlbGVjdGlvbk9ubHkobGF5ZXIpXCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9ubHlTZWxlY3RlZCgkZXZlbnQsbGF5ZXIuaWQpXCI+XHJcbiAgICAgICAgICAgICAgPHNtYWxsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZWxlY3RlZEZlYXR1cmUnIHwgdHJhbnNsYXRlfX08L3NtYWxsPlxyXG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGb3JtYXRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcm1hdFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZm9ybWF0cyQgfCBhc3luYykubGVuZ3RoICE9PSAwXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZm9ybWF0IG9mIChmb3JtYXRzJCB8IGFzeW5jKSB8IGtleXZhbHVlXCIgW3ZhbHVlXT1cImZvcm1hdC5rZXlcIj5cclxuICAgICAgICAgICAge3snaWdvLmdlby5leHBvcnQuZm9ybWF0LicgKyBmb3JtYXQudmFsdWUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPVwidHJ1ZVwiPlxyXG4gICAgICAgICAge3snaWdvLmdlby5leHBvcnQubm9Gb3JtYXQudGl0bGUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJmb3JjZU5hbWluZyAmJiBmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZpbGVOYW1lUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbidcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZW5jb2RpbmdQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuY29kaW5nXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihlbmNvZGluZ3MkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGVuY29kaW5nIG9mIChlbmNvZGluZ3MkIHwgYXN5bmMpIHwga2V5dmFsdWVcIiBbdmFsdWVdPVwiZW5jb2Rpbmcua2V5XCI+XHJcbiAgICAgICAgICAgIHt7J2lnby5nZW8uZXhwb3J0LmVuY29kaW5nLicgKyBlbmNvZGluZy52YWx1ZSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJleHBvcnQtY29tYmluZS1sYXllcnMgbWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxICYmIChmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpXCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbWJpbmVMYXllcnNcIlxyXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XHJcbiAgICAgICAgICB7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Q29tYmluZVJlc3VsdHMnIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZXBhcmF0b3IgbWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxICYmIChmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpICYmIGZvcm0udmFsdWUuY29tYmluZUxheWVyc1wiPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZXBhcmF0b3JcIlxyXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XHJcbiAgICAgICAgICB7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0U2VwYXJhdG9yJyB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJleHBvcnQtb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwiZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVJbk1hcEV4dGVudFwiXHJcbiAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cclxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRGZWF0dXJlSW5FeHRlbnQnIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1mb3JtLWJ1dHRvbi1ncm91cFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkIHx8IChsb2FkaW5nJCB8IGFzeW5jKVwiXHJcbiAgICAgIChjbGljayk9XCJoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGZvcm0udmFsdWUpXCI+XHJcbiAgICAgIHt7Zm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnICA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUpOiAoZm9ybS52YWx1ZS5sYXllcnMubGVuZ3RoID4gMSAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rcycgfCB0cmFuc2xhdGUpOiAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rJyB8IHRyYW5zbGF0ZSkpfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGlnby1zcGlubmVyIFtzaG93bl09XCJsb2FkaW5nJCB8IGFzeW5jXCI+PC9pZ28tc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlnby1jdXN0b20taHRtbCAqbmdJZj1cImV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucyAhPT0gJydcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCJcclxuICAgIFtodG1sXT1cImV4cG9ydEh0bWxDbGFyaWZpY2F0aW9uc1wiPlxyXG4gIDwvaWdvLWN1c3RvbS1odG1sPlxyXG5cclxuPC9mb3JtPlxyXG4iXX0=
1228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHckUsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdC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QUFBO1FBSTVCLDBFQXNDTztRQUNQLDhFQVlVO1FBRVYsZ0ZBRVU7O1FBRVYsNEVBNEdPOzs7UUFoTEMsZUFBc0I7UUFBdEIsd0NBQXNCO1FBRUgsZUFBa0I7UUFBbEIsZ0NBQWtCO1FBQ25DLGVBQ0Y7UUFERSxnR0FDRjtRQUNtQixlQUFrQjtRQUFsQixnQ0FBa0I7UUFDbkMsZUFDRjtRQURFLGlHQUNGO1FBSXlDLGVBQStCO1FBQS9CLG9EQUErQjtRQXVDL0MsZUFBK0I7UUFBL0Isb0RBQStCO1FBYy9CLGVBQTJFO1FBQTNFLGtIQUEyRTtRQUlqRSxlQUF5RTtRQUF6RSxnSEFBeUU7O3VGREp2RyxxQkFBcUI7Y0FMakMsU0FBUzsyQkFDRSxtQkFBbUI7dWFBNENwQixlQUFlO2tCQUF2QixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUlGLHNCQUFzQjtrQkFEekIsS0FBSztZQVlHLEtBQUs7a0JBQWIsS0FBSztZQUVHLFlBQVk7a0JBQXBCLEtBQUs7WUFFSSxVQUFVO2tCQUFuQixNQUFNO1lBRUUsY0FBYztrQkFBdEIsS0FBSztZQUlJLG1CQUFtQjtrQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBNZXNzYWdlU2VydmljZSxcbiAgTGFuZ3VhZ2VTZXJ2aWNlLFxuICBDb25maWdTZXJ2aWNlLFxuICBTdG9yYWdlU2VydmljZVxufSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHsgQ2x1c3RlckRhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9jbHVzdGVyLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2xheWVyJztcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xuaW1wb3J0IHsgQW55TGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL2FueS1sYXllcic7XG5pbXBvcnQgeyBEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCBvbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IHsgY2lyY3VsYXIgfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuXG5pbXBvcnQge1xuICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IsXG4gIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzXG59IGZyb20gJy4uL3NoYXJlZC9leHBvcnQudXRpbHMnO1xuaW1wb3J0IHsgRXhwb3J0T3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4cG9ydEZvcm1hdCwgRW5jb2RpbmdGb3JtYXQgfSBmcm9tICcuLi9zaGFyZWQvZXhwb3J0LnR5cGUnO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJbXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzLFxuICBoYW5kbGVGaWxlSW1wb3J0RXJyb3Jcbn0gZnJvbSAnLi4vc2hhcmVkL2ltcG9ydC51dGlscyc7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL3N0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3R5bGVMaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlLWxpc3Qvc3R5bGUtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dTZXJ2aWNlLCBFbnRpdHlSZWNvcmQsIFdvcmtzcGFjZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVN0b3JlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcbmltcG9ydCB7IFdmc1dvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvd2ZzLXdvcmtzcGFjZSc7XG5pbXBvcnQgeyBFZGl0aW9uV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC9lZGl0aW9uLXdvcmtzcGFjZSc7XG5pbXBvcnQgeyBGZWF0dXJlV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC9mZWF0dXJlLXdvcmtzcGFjZSc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBJbnB1dFByb2plY3Rpb25zLCBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB9IGZyb20gJy4uLy4uL21hcC8nO1xuaW1wb3J0IHsgRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG93bmxvYWQvc2hhcmVkL2Rvd25sb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMgfSBmcm9tICcuLi8uLi9tYXAnO1xuXG5pbXBvcnQgb2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgb2xDbHVzdGVyU291cmNlIGZyb20gJ29sL3NvdXJjZS9DbHVzdGVyJztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgeyBMYXllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJbXBvcnRFeHBvcnRTZXJ2aWNlT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWltcG9ydC1leHBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBvcnRFeHBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaW1wb3J0Rm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgcHVibGljIGZvcm1hdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuICBwdWJsaWMgZW5jb2RpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHVibGljIGV4cG9ydGFibGVMYXllcnMkOiBCZWhhdmlvclN1YmplY3Q8QW55TGF5ZXJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIFtdXG4gICk7XG4gIHB1YmxpYyBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgZm9yY2VOYW1pbmcgPSBmYWxzZTtcbiAgcHVibGljIGNvbnRyb2xGb3JtYXQgPSAnZm9ybWF0JztcblxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZXhwb3J0YWJsZUxheWVycyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZm9ybWF0cyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZW5jb2RpbmdzJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtTGF5ZXIkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGV4cG9ydE9wdGlvbnMkJDogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBpbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnM6IHN0cmluZztcbiAgcHVibGljIGV4cG9ydEh0bWxDbGFyaWZpY2F0aW9uczogc3RyaW5nO1xuXG4gIHByaXZhdGUgZXNwZ0NvZGVSZWdleCA9IG5ldyBSZWdFeHAoJ15cXFxcZHs0LDZ9Jyk7XG4gIHByaXZhdGUgY2xpZW50U2lkZUZpbGVTaXplTWF4OiBudW1iZXI7XG4gIHB1YmxpYyBmaWxlU2l6ZU1iOiBudW1iZXI7XG5cbiAgcHVibGljIHByb2plY3Rpb25zJDogQmVoYXZpb3JTdWJqZWN0PElucHV0UHJvamVjdGlvbnNbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgcHJpdmF0ZSBwcm9qZWN0aW9uc0NvbnN0cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucztcblxuICBwdWJsaWMgcG9wdXBDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBwcmV2aW91c0xheWVyU3BlY3MkOiBCZWhhdmlvclN1YmplY3Q8XG4gICAge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICBvcGFjaXR5OiBudW1iZXI7XG4gICAgICBxdWVyeWFibGU6IGJvb2xlYW47XG4gICAgfVtdXG4gID4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgQElucHV0KCkgc2VsZWN0Rmlyc3RQcm9qOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XG5cbiAgQElucHV0KCkgY29udGV4dFVyaTogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3Byb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zID0ge307XG4gIEBJbnB1dCgpXG4gIHNldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKHZhbHVlOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucykge1xuICAgIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbXB1dGVQcm9qZWN0aW9ucygpO1xuICB9XG4gIGdldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKCk6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGF0IGhvbGRzIHRoZSBhdmFpbGFibGUgd29ya3NwYWNlcy5cbiAgICovXG4gIEBJbnB1dCgpIHN0b3JlOiBXb3Jrc3BhY2VTdG9yZTtcblxuICBASW5wdXQoKSBzZWxlY3RlZE1vZGUgPSAnaW1wb3J0JztcblxuICBAT3V0cHV0KCkgc2VsZWN0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBJbnB1dCgpIGV4cG9ydE9wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8RXhwb3J0T3B0aW9ucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIEBPdXRwdXQoKSBleHBvcnRPcHRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBvcnRPcHRpb25zPigpO1xuXG4gIGdldCBsYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2xheWVycycpLnZhbHVlO1xuICB9XG4gIHNldCBsYXllcnModmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogdmFsdWUgfSk7XG4gIH1cblxuICBnZXQgaW5wdXRQcm9qKCkge1xuICAgIHJldHVybiB0aGlzLmltcG9ydEZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcbiAgfVxuICBzZXQgaW5wdXRQcm9qKHZhbHVlKSB7XG4gICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IHBvcHVwQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcpIGFzIGJvb2xlYW4gfHwgZmFsc2U7XG4gIH1cblxuICBzZXQgcG9wdXBBbGxvd2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2ltcG9ydEV4cG9ydFBvcHVwQWxsb3dlZCcsIHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW1wb3J0U2VydmljZTogSW1wb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHN0eWxlTGlzdFNlcnZpY2U6IFN0eWxlTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdHlsZVNlcnZpY2U6IFN0eWxlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb3dubG9hZFNlcnZpY2U6IERvd25sb2FkU2VydmljZSxcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlybURpYWxvZ1NlcnZpY2U6IENvbmZpcm1EaWFsb2dTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubG9hZENvbmZpZygpO1xuICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcbiAgICB0aGlzLmltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0SHRtbENsYXJpZmljYXRpb25zJyk7XG4gICAgdGhpcy5leHBvcnRIdG1sQ2xhcmlmaWNhdGlvbnMgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEh0bWxDbGFyaWZpY2F0aW9ucycpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sYXllcnMkJCA9IHRoaXMubWFwLmxheWVycyQuc3Vic2NyaWJlKChsYXllcnMpID0+IHtcbiAgICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQubmV4dChcbiAgICAgICAgbGF5ZXJzLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIGxheWVyLmV4cG9ydGFibGUgPT09IHRydWUpIHx8XG4gICAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkICYmXG4gICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkgYXMgQW55TGF5ZXJbXVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb25maWdGaWxlU2l6ZU1iID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKFxuICAgICAgJ2ltcG9ydEV4cG9ydC5jbGllbnRTaWRlRmlsZVNpemVNYXhNYidcbiAgICApO1xuICAgIHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4ID1cbiAgICAgIChjb25maWdGaWxlU2l6ZU1iID8gY29uZmlnRmlsZVNpemVNYiA6IDMwKSAqIE1hdGgucG93KDEwMjQsIDIpO1xuICAgIHRoaXMuZmlsZVNpemVNYiA9IHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4IC8gTWF0aC5wb3coMTAyNCwgMik7XG5cbiAgICB0aGlzLmV4cG9ydE9wdGlvbnMkJCA9IHRoaXMuZXhwb3J0T3B0aW9ucyRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZXhwb3J0T3B0aW9ucykgPT4gIWV4cG9ydE9wdGlvbnMpKVxuICAgICAgLnN1YnNjcmliZSgoZXhwb3J0T3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShleHBvcnRPcHRpb25zLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKGV4cG9ydE9wdGlvbnMubGF5ZXJzKSB7XG4gICAgICAgICAgdGhpcy5jb21wdXRlRm9ybWF0cyhcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnMubGF5ZXJzLm1hcCgobCkgPT4gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKGwpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ2Zvcm1hdCcpXG4gICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAuc3Vic2NyaWJlKChmb3JtYXQpID0+IHtcbiAgICAgICAgY29uc3Qgb2dyZUZvcm1hdHMgPSBPYmplY3Qua2V5cyhFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLnBvcHVwQ2hlY2tlZCAmJlxuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xheWVycycpLnZhbHVlPy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgKG9ncmVGb3JtYXRzLmluZGV4T2YoZm9ybWF0KSA+PSAwIHx8IGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlVSTCkpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlUG9wdXAodHJ1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiB1bmRlZmluZWQgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdsYXllcnMnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGxheWVyc0lkKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGF5ZXJzID0gbGF5ZXJzSWQgaW5zdGFuY2VvZiBBcnJheSA/IGxheWVyc0lkIDogW2xheWVyc0lkXTtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IHNlbGVjdGVkTGF5ZXJzIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gc2VsZWN0ZWRMYXllcnMubWFwKChsKSA9PiB0aGlzLm1hcC5nZXRMYXllckJ5SWQobCkpO1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKGxheWVycyk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpLmluZGV4T2YodGhpcy5mb3JtLnZhbHVlLmZvcm1hdCkgPT09XG4gICAgICAgICAgLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTcGVjczoge1xuICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICAgICAgICBvcGFjaXR5OiBudW1iZXI7XG4gICAgICAgICAgcXVlcnlhYmxlOiBib29sZWFuO1xuICAgICAgICB9W10gPSBbXTtcbiAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllciAmJlxuICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vbC5nZXRGZWF0dXJlcygpLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJldmlvdXNTcGVjcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGxheWVyLmlkLFxuICAgICAgICAgICAgICB2aXNpYmxlOiBsYXllci52aXNpYmxlLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBsYXllci5vcGFjaXR5LFxuICAgICAgICAgICAgICBxdWVyeWFibGU6IChsYXllciBhcyBhbnkpLnF1ZXJ5YWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsYXllci5vcGFjaXR5ID0gMDtcbiAgICAgICAgICAgIGxheWVyLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQocHJldmlvdXNTcGVjcyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZm9ybWF0cyQkID0gdGhpcy5mb3JtYXRzJFxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChmb3JtYXRzKSA9PiAhZm9ybWF0cykpXG4gICAgICAuc3Vic2NyaWJlKChmb3JtYXRzKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmb3JtYXRzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogZm9ybWF0c1tPYmplY3Qua2V5cyhmb3JtYXRzKVswXV0gfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5lbmNvZGluZ3MkJCA9IHRoaXMuZW5jb2RpbmdzJFxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChlbmNvZGluZ3MpID0+ICFlbmNvZGluZ3MpKVxuICAgICAgLnN1YnNjcmliZSgoZW5jb2RpbmdzKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhlbmNvZGluZ3MpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IGVuY29kaW5nc1tPYmplY3Qua2V5cyhlbmNvZGluZ3MpWzBdXSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkJCA9IHRoaXMuZXhwb3J0YWJsZUxheWVycyRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgobGF5ZXJzKSA9PiAhbGF5ZXJzKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xuICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiBsYXllcnNbMF0uaWQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEZvcm1hdF0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZm9ybWF0KSA9PiB7XG4gICAgICBpZiAoZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEgfHwgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uKSB7XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LkxBVElOMSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IEVuY29kaW5nRm9ybWF0LlVURjggfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0UHJvaikge1xuICAgICAgaWYgKHRoaXMucHJvamVjdGlvbnMkLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogeyB0cmFuc2xhdGVLZXk6ICduYWQ4MycsIGFsaWFzOiAnTkFEODMnLCBjb2RlOiAnRVBTRzo0MzI2Jywgem9uZTogJycgfSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW1wb3J0Rm9ybS5wYXRjaFZhbHVlKHsgaW5wdXRQcm9qOiB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVQcm9qZWN0aW9ucygpIHtcbiAgICB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMgPSBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyh0aGlzLnByb2plY3Rpb25zTGltaXRhdGlvbnMpO1xuICAgIGNvbnN0IHByb2plY3Rpb25zOiBJbnB1dFByb2plY3Rpb25zW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubmFkODMpIHtcbiAgICAgIHByb2plY3Rpb25zLnB1c2goeyB0cmFuc2xhdGVLZXk6ICduYWQ4MycsIGFsaWFzOiAnTkFEODMnLCBjb2RlOiAnRVBTRzo0MjY5Jywgem9uZTogJycgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2dzODQpIHtcbiAgICAgIHByb2plY3Rpb25zLnB1c2goeyB0cmFuc2xhdGVLZXk6ICd3Z3M4NCcsIGFsaWFzOiAnV0dTODQnLCBjb2RlOiAnRVBTRzo0MzI2Jywgem9uZTogJycgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcbiAgICAgIHByb2plY3Rpb25zLnB1c2goeyB0cmFuc2xhdGVLZXk6ICd3ZWJNZXJjYXRvcicsIGFsaWFzOiAnV2ViIE1lcmNhdG9yJywgY29kZTogJ0VQU0c6Mzg1NycsIHpvbmU6ICcnIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtKSB7XG4gICAgICAvLyBhbGwgbXRtIHpvbmVzXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bVpvbmUubWluWm9uZTtcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtWm9uZS5tYXhab25lO1xuXG4gICAgICBmb3IgKGxldCBtdG1ab25lID0gbWluWm9uZTsgbXRtWm9uZSA8PSBtYXhab25lOyBtdG1ab25lKyspIHtcbiAgICAgICAgY29uc3QgY29kZSA9IG10bVpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke210bVpvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyBtdG1ab25lfWA7XG4gICAgICAgIHByb2plY3Rpb25zLnB1c2goeyB0cmFuc2xhdGVLZXk6ICdtdG0nLCBhbGlhczogYE1UTSAke210bVpvbmV9YCwgY29kZSwgem9uZTogYCR7bXRtWm9uZX1gIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtKSB7XG4gICAgICAvLyBhbGwgdXRtIHpvbmVzXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLnV0bVpvbmUubWluWm9uZTtcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtWm9uZS5tYXhab25lO1xuXG4gICAgICBmb3IgKGxldCB1dG1ab25lID0gbWluWm9uZTsgdXRtWm9uZSA8PSBtYXhab25lOyB1dG1ab25lKyspIHtcbiAgICAgICAgY29uc3QgY29kZSA9IHV0bVpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3V0bVpvbmV9YCA6IGBFUFNHOjMyNiR7dXRtWm9uZX1gO1xuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHsgdHJhbnNsYXRlS2V5OiAndXRtJywgYWxpYXM6IGBVVE0gJHt1dG1ab25lfWAsIGNvZGUsIHpvbmU6IGAke3V0bVpvbmV9YCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY29uZmlnUHJvamVjdGlvbiA9IFtdO1xuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcbiAgICAgIGNvbmZpZ1Byb2plY3Rpb24gPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ3Byb2plY3Rpb25zJykgfHwgW107XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChjb25maWdQcm9qZWN0aW9uLmNvbmNhdChwcm9qZWN0aW9ucykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXb3Jrc3BhY2VCeUxheWVySWQoaWQ6IHN0cmluZyk6IFdvcmtzcGFjZSB7XG4gICAgY29uc3Qgd2tzRnJvbUxheWVySWQgPSB0aGlzLnN0b3JlXG4gICAgICAuYWxsKClcbiAgICAgIC5maW5kKHdvcmtzcGFjZSA9PiAod29ya3NwYWNlIGFzIFdmc1dvcmtzcGFjZSB8IEZlYXR1cmVXb3Jrc3BhY2UgfCBFZGl0aW9uV29ya3NwYWNlKS5sYXllci5pZCA9PT0gaWQpO1xuICAgIGlmICh3a3NGcm9tTGF5ZXJJZCkge1xuICAgICAgcmV0dXJuIHdrc0Zyb21MYXllcklkO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwdWJsaWMgZ2V0TGF5ZXJUaXRsZUJ5SWQoaWQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1hcC5nZXRMYXllckJ5SWQoaWQpPy50aXRsZTtcbiAgfVxuXG5cbiAgbGF5ZXJIYXNTZWxlY3RlZEZlYXR1cmVzKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHdrc0Zyb21MYXllciA9IHRoaXMuZ2V0V29ya3NwYWNlQnlMYXllcklkKGxheWVyLmlkKTtcbiAgICBpZiAod2tzRnJvbUxheWVyKSB7XG4gICAgICBjb25zdCByZWNzID0gd2tzRnJvbUxheWVyLmVudGl0eVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAuZmlyc3RCeSgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZT4pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybiByZWNzID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWQoZXZlbnQ6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBpZDogc3RyaW5nKSB7XG4gICAgbGV0IGxheWVyc1dpdGhTZWxlY3Rpb24gPSB0aGlzLmZvcm0udmFsdWUubGF5ZXJzV2l0aFNlbGVjdGlvbjtcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbi5wdXNoKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IGxheWVyc1dpdGhTZWxlY3Rpb24uZmlsdGVyKGxheWVySWQgPT4gbGF5ZXJJZCAhPT0gaWQpO1xuICAgIH1cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyc1dpdGhTZWxlY3Rpb24gfSk7XG4gIH1cblxuICBwdWJsaWMgb25seVNlbGVjdGVkQ2xpY2soZXZlbnQsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5mb3JtLnZhbHVlLmxheWVycy5maW5kKGxheWVySWQgPT4gbGF5ZXJJZCA9PT0gaWQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5MYXllcnNJZFRvRXhwb3J0U2VsZWN0aW9uT25seShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLnZhbHVlLmxheWVyc1dpdGhTZWxlY3Rpb24uZmluZChsYXllcklkID0+IGxheWVySWQgPT09IGxheWVyLmlkKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubGF5ZXJzJCQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmV4cG9ydGFibGVMYXllcnMkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9ybWF0cyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lbmNvZGluZ3MkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9ybUxheWVyJCQudW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5leHBvcnRPcHRpb25zJCQpIHtcbiAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuZXhwb3J0T3B0aW9uc0NoYW5nZS5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCkge1xuICAgIGNvbnN0IHByZXZpb3VzU3BlY3MgPSB0aGlzLnByZXZpb3VzTGF5ZXJTcGVjcyQudmFsdWU7XG4gICAgaWYgKHByZXZpb3VzU3BlY3MgJiYgcHJldmlvdXNTcGVjcy5sZW5ndGgpIHtcbiAgICAgIHByZXZpb3VzU3BlY3MuZm9yRWFjaCgoc3BlY3MpID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNMYXllciA9IHRoaXMubWFwLmdldExheWVyQnlJZChzcGVjcy5pZCk7XG4gICAgICAgIHByZXZpb3VzTGF5ZXIudmlzaWJsZSA9IHNwZWNzLnZpc2libGU7XG4gICAgICAgIHByZXZpb3VzTGF5ZXIub3BhY2l0eSA9IHNwZWNzLm9wYWNpdHk7XG4gICAgICAgIChwcmV2aW91c0xheWVyIGFzIGFueSkucXVlcnlhYmxlID0gc3BlY3MucXVlcnlhYmxlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNMYXllclNwZWNzJC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBpbXBvcnRGaWxlcyhmaWxlczogRmlsZVtdKSB7XG4gICAgbGV0IGlucHV0UHJvaiA9IHRoaXMuaW5wdXRQcm9qLmNvZGU7XG4gICAgaWYgKHRoaXMuZXNwZ0NvZGVSZWdleC50ZXN0KGlucHV0UHJvaikpIHtcbiAgICAgIGlucHV0UHJvaiA9IGBFUFNHOiR7aW5wdXRQcm9qfWA7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdGhpcy5pbXBvcnRTZXJ2aWNlLmltcG9ydChmaWxlLCBpbnB1dFByb2opLnN1YnNjcmliZShcbiAgICAgICAgKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IHRoaXMub25GaWxlSW1wb3J0U3VjY2VzcyhmaWxlLCBmZWF0dXJlcyksXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlSW1wb3J0RXJyb3IoZmlsZSwgZXJyb3IpLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVQb3B1cChwcmVDaGVjazogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBwMSA9IHdpbmRvdy5vcGVuKCcnLCAncG9wdXAnLCAnd2lkdGg9MSwgaGVpZ2h0PTEnKTtcbiAgICBwMS5jbG9zZSgpO1xuICAgIGNvbnN0IHAyID0gd2luZG93Lm9wZW4oJycsICdwb3B1cCcsICd3aWR0aD0xLCBoZWlnaHQ9MScpO1xuICAgIGlmICghcDIgfHwgcDIuY2xvc2VkIHx8IHR5cGVvZiBwMi5jbG9zZWQgPT09ICd1bmRlZmluZWQnIHx8IHAyID09PSBudWxsKSB7XG4gICAgICB0aGlzLm9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2spO1xuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDIuY2xvc2UoKTtcbiAgICAgIHRoaXMucG9wdXBBbGxvd2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMucG9wdXBDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucG9wdXBBbGxvd2VkO1xuICB9XG5cbiAgaGFuZGxlRXhwb3J0Rm9ybVN1Ym1pdChkYXRhOiBFeHBvcnRPcHRpb25zKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgY29uc3Qgb2dyZUZvcm1hdHMgPSBPYmplY3Qua2V5cyhFeHBvcnRTZXJ2aWNlLm9ncmVGb3JtYXRzKTtcbiAgICBpZiAoIXRoaXMucG9wdXBDaGVja2VkICYmIGRhdGEubGF5ZXJzLmxlbmd0aCA+IDEgJiZcbiAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGRhdGEuZm9ybWF0KSA+PSAwIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKSAmJiAhdGhpcy5wb3B1cEFsbG93ZWQpIHtcbiAgICAgIHRoaXMuaGFuZGxlUG9wdXAoKTtcbiAgICB9XG5cbiAgICBsZXQgZ2VvbVR5cGVzQ1NWOiB7IGdlb21ldHJ5VHlwZTogc3RyaW5nLCBmZWF0dXJlczogYW55W10gfVtdID0gW107XG4gICAgbGV0IGZlYXR1cmVzQ1NWOiBhbnlbXSA9IFtdO1xuICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gXCJcIjtcblxuICAgIGZvciAoY29uc3QgW2xheWVySW5kZXgsIGxheWVyXSBvZiBkYXRhLmxheWVycy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGxheSA9IHRoaXMubWFwLmdldExheWVyQnlJZChsYXllcik7XG4gICAgICBpZiAoIShkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKVxuICAgICAgfHwgIWRhdGEuY29tYmluZUxheWVycyB8fCBkYXRhLmxheWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmlsZW5hbWUgPSBsYXkudGl0bGU7XG4gICAgICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IGRhdGEubmFtZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQuY29tYmluZWRMYXllcnMnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRTT3B0aW9uczogRGF0YVNvdXJjZU9wdGlvbnMgPSBsYXkuZGF0YVNvdXJjZS5vcHRpb25zO1xuICAgICAgaWYgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMICYmIGRTT3B0aW9ucy5kb3dubG9hZCAmJiAoZFNPcHRpb25zLmRvd25sb2FkLnVybCB8fCBkU09wdGlvbnMuZG93bmxvYWQuZHluYW1pY1VybCkpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gYmV0dGVyIGxvb2sgYW4gZmVlbFxuICAgICAgICAgIGNvbnN0IHVybCA9IGRTT3B0aW9ucy5kb3dubG9hZC51cmwgfHwgZFNPcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmw7XG4gICAgICAgICAgdXJsLm1hdGNoKC9zZXJ2aWNlPXdmcy9naSkgPyB0aGlzLmRvd25sb2FkU2VydmljZS5vcGVuKGxheSkgOiB3aW5kb3cub3Blbih1cmwgLCAnX2JsYW5rJyk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2tzID0gdGhpcy5nZXRXb3Jrc3BhY2VCeUxheWVySWQobGF5ZXIpO1xuICAgICAgbGV0IG9sRmVhdHVyZXM7XG4gICAgICBpZiAod2tzICYmIHdrcy5lbnRpdHlTdG9yZSAmJiB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpLmxlbmd0aCkge1xuXG4gICAgICAgIGlmIChkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmIGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgLy8gT25seSBleHBvcnQgc2VsZWN0ZWQgZmVhdHVyZSAmJiBpbnRvIG1hcCBleHRlbnRcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKVxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQgJiYgZS5zdGF0ZS5zZWxlY3RlZCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmICFkYXRhLmZlYXR1cmVJbk1hcEV4dGVudCkge1xuICAgICAgICAgIC8vIE9ubHkgZXhwb3J0IHNlbGVjdGVkIGZlYXR1cmUgJiYgIChpbnRvIG1hcCBleHRlbnQgT1Igbm90KVxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5zZWxlY3RlZCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmZlYXR1cmVJbk1hcEV4dGVudCkge1xuICAgICAgICAgIC8vIE9ubHkgaW50byBtYXAgZXh0ZW50XG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKClcbiAgICAgICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLmluTWFwRXh0ZW50KS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFsbCBmZWF0dXJlc1xuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpLm1hcChlID0+IChlLmVudGl0eSBhcyBGZWF0dXJlKS5vbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBvbCA9IGxheS5kYXRhU291cmNlLm9sIGFzIG9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+IHwgb2xDbHVzdGVyU291cmNlIDtcbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XG4gICAgICAgICAgb2xGZWF0dXJlcyA9IG9sLmdldEZlYXR1cmVzSW5FeHRlbnQoXG4gICAgICAgICAgICBsYXkubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGF5LmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBDbHVzdGVyRGF0YVNvdXJjZSkge1xuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbEZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXI6IGFueSkgPT5cbiAgICAgICAgICAgIGNsdXN0ZXIuZ2V0KCdmZWF0dXJlcycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG5cbiAgICAgIGxldCBnZW9tVHlwZXM6IHsgZ2VvbWV0cnlUeXBlOiBzdHJpbmcsIGZlYXR1cmVzOiBhbnlbXSB9W10gPSBbXTtcbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZSB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkdQWCkge1xuICAgICAgICBvbEZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVHZW9tVHlwZSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50R2VvbVR5cGUgPSBnZW9tVHlwZXMuZmluZChnZW9tVHlwZSA9PiBnZW9tVHlwZS5nZW9tZXRyeVR5cGUgPT09IGZlYXR1cmVHZW9tVHlwZSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRHZW9tVHlwZSkge1xuICAgICAgICAgICAgY3VycmVudEdlb21UeXBlLmZlYXR1cmVzLnB1c2gob2xGZWF0dXJlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2VvbVR5cGVzLnB1c2goeyBnZW9tZXRyeVR5cGU6IGZlYXR1cmVHZW9tVHlwZSwgZmVhdHVyZXM6IFtvbEZlYXR1cmVdIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW9tVHlwZXMgPSBbeyBnZW9tZXRyeVR5cGU6ICcnLCBmZWF0dXJlczogb2xGZWF0dXJlcyB9XTtcbiAgICAgIH1cblxuICAgICAgZ2VvbVR5cGVzLmZvckVhY2goZ2VvbVR5cGUgPT4ge1xuICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xuICAgICAgICAgIGlmIChyYWRpdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlcjQzMjY6IEFycmF5PG51bWJlcj4gPSBbZmVhdHVyZS5nZXQoJ2xvbmdpdHVkZScpLCBmZWF0dXJlLmdldCgnbGF0aXR1ZGUnKV07XG4gICAgICAgICAgICBjb25zdCBjaXJjbGUgPSBjaXJjdWxhcihjZW50ZXI0MzI2LCByYWRpdXMsIDUwMCk7XG4gICAgICAgICAgICBjaXJjbGUudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XG4gICAgICAgICAgICBmZWF0dXJlLnNldEdlb21ldHJ5KGNpcmNsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5HUFgpIHtcbiAgICAgICAgY29uc3QgZ3B4RmVhdHVyZUNudCA9IGdlb21UeXBlcy5sZW5ndGg7XG4gICAgICAgIGdlb21UeXBlcyA9IGdlb21UeXBlcy5maWx0ZXIoZ2VvbVR5cGUgPT4gWydMaW5lU3RyaW5nJywgJ1BvaW50J10uaW5jbHVkZXMoZ2VvbVR5cGUuZ2VvbWV0cnlUeXBlKSk7XG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSA9IGdlb21UeXBlcy5sZW5ndGg7XG4gICAgICAgIGlmIChncHhGZWF0dXJlQ250ID4gZ3B4RmVhdHVyZUNudFBvaW50T3JQb2x5KSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby5leHBvcnQuZ3B4LmVycm9yLnBvbHkudGV4dCcsICdpZ28uZ2VvLmV4cG9ydC5ncHguZXJyb3IucG9seS50aXRsZScsIHsgdGltZU91dDogMjAwMDAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpICYmIGRhdGEuY29tYmluZUxheWVycykge1xuICAgICAgICBnZW9tVHlwZXMuZm9yRWFjaChnZW9tVHlwZSA9PiBnZW9tVHlwZXNDU1YucHVzaChnZW9tVHlwZSkpO1xuXG4gICAgICAgIGlmIChsYXllckluZGV4ICE9PSBkYXRhLmxheWVycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHByZXZpb3VzRmVhdHVyZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBnZW9tVHlwZXNDU1YuZm9yRWFjaChnZW9tVHlwZSA9PiB7XG4gICAgICAgICAgICBnZW9tVHlwZS5mZWF0dXJlcy5mb3JFYWNoKGN1cnJlbnRGZWF0dXJlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUgIT09XG4gICAgICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IHRoaXMuY3JlYXRlVGl0bGVFbXB0eVJvd3MocHJldmlvdXNGZWF0dXJlLCBjdXJyZW50RmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2godGl0bGVFbXB0eVJvd3NbMl0pO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1sxXSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhjdXJyZW50RmVhdHVyZSwgY3VycmVudEZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZlYXR1cmVzQ1NWLnB1c2goY3VycmVudEZlYXR1cmUpO1xuICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmUgPSBjdXJyZW50RmVhdHVyZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChnZW9tVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoJ2lnby5nZW8uZXhwb3J0Lm5vdGhpbmcudGV4dCcsICdpZ28uZ2VvLmV4cG9ydC5ub3RoaW5nLnRpdGxlJywgeyB0aW1lT3V0OiAyMDAwMCB9KTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHwgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgfHwgIWRhdGEuY29tYmluZUxheWVycykge1xuICAgICAgICAgIGdlb21UeXBlcy5tYXAoZ2VvbVR5cGUgPT5cbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnQoZ2VvbVR5cGUuZmVhdHVyZXMsIGRhdGEuZm9ybWF0LCBmaWxlbmFtZSArIGdlb21UeXBlLmdlb21ldHJ5VHlwZSwgZGF0YS5lbmNvZGluZywgdGhpcy5tYXAucHJvamVjdGlvbilcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUV4cG9ydEVycm9yKGVycm9yKSxcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25GaWxlRXhwb3J0U3VjY2VzcygpO1xuXG4gICAgICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaChmZWF0dXJlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2lyY2xlVG9Qb2ludChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICgoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHwgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgJiYgZGF0YS5jb21iaW5lTGF5ZXJzKSB7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0KGZlYXR1cmVzQ1NWLCBkYXRhLmZvcm1hdCwgZmlsZW5hbWUsIGRhdGEuZW5jb2RpbmcsIHRoaXMubWFwLnByb2plY3Rpb24pXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uRmlsZUV4cG9ydFN1Y2Nlc3MoKTtcblxuICAgICAgICAgIGZlYXR1cmVzQ1NWLmZvckVhY2goZmVhdHVyZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNpcmNsZVRvUG9pbnQoZmVhdHVyZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGl0bGVFbXB0eVJvd3MocHJldmlvdXNGZWF0dXJlLCBjdXJyZW50RmVhdHVyZSkge1xuICAgIGNvbnN0IHRpdGxlUm93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xuICAgIGNvbnN0IGVtcHR5Um93ID0gY3VycmVudEZlYXR1cmUuY2xvbmUoKTtcbiAgICBjb25zdCBwcmV2aW91c0ZlYXR1cmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gcHJldmlvdXNGZWF0dXJlLmdldEtleXMoKTtcbiAgICBsZXQgZmlyc3RLZXlQcmV2aW91czogc3RyaW5nID0gJyc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJldmlvdXNGZWF0dXJlS2V5cykge1xuICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZUtleXNba2V5XSAhPT0gJ2dlb21ldHJ5Jykge1xuICAgICAgICBmaXJzdEtleVByZXZpb3VzID0gcHJldmlvdXNGZWF0dXJlS2V5c1trZXldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50RmVhdHVyZUtleXM6IEFycmF5PHN0cmluZz4gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XG4gICAgbGV0IGZpcnN0S2V5Q3VycmVudDogc3RyaW5nID0gJyc7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY3VycmVudEZlYXR1cmVLZXlzKSB7XG4gICAgICBpZiAoY3VycmVudEZlYXR1cmVLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcbiAgICAgICAgZmlyc3RLZXlDdXJyZW50ID0gY3VycmVudEZlYXR1cmVLZXlzW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhbGxLZXlzOiBBcnJheTxzdHJpbmc+ID0gY3VycmVudEZlYXR1cmUuZ2V0S2V5cygpO1xuICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZm9yRWFjaChwcmV2aW91c0tleSA9PiB7XG4gICAgICBpZiAoYWxsS2V5cy5pbmNsdWRlcyhwcmV2aW91c0tleSkgJiYgcHJldmlvdXNLZXkgIT09IGZpcnN0S2V5UHJldmlvdXMpIHtcbiAgICAgICAgYWxsS2V5cy5wdXNoKHByZXZpb3VzS2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhbGxLZXlzLnVuc2hpZnQoZmlyc3RLZXlQcmV2aW91cyk7XG5cbiAgICBsZXQgZmlyc3RLZXlBbGw6IHN0cmluZyA9ICcnO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGFsbEtleXMpIHtcbiAgICAgIGlmIChhbGxLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcbiAgICAgICAgZmlyc3RLZXlBbGwgPSBhbGxLZXlzW2tleV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBhbGxLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHNhbWVLZXlzOiBib29sZWFuID0gcHJldmlvdXNGZWF0dXJlS2V5cy5sZW5ndGggPT09IGN1cnJlbnRGZWF0dXJlS2V5cy5sZW5ndGggJiZcbiAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGN1cnJlbnRGZWF0dXJlS2V5c1tpbmRleF0pO1xuICAgICAgaWYgKGtleSA9PT0gZmlyc3RLZXlBbGwgJiYgIXNhbWVLZXlzKSB7XG4gICAgICAgIHRpdGxlUm93LnNldChrZXksIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUgKyBcIiA9PT09PT09PT09PT09PT0+XCIsIHRydWUpO1xuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBmaXJzdEtleUFsbCAmJiBzYW1lS2V5cykge1xuICAgICAgICB0aXRsZVJvdy5zZXQoa2V5LCBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlLCB0cnVlKTtcbiAgICAgICAgaGVhZGVyUm93LnNldChrZXksIGtleSwgdHJ1ZSk7XG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gZmlyc3RLZXlDdXJyZW50KSB7XG4gICAgICAgIHRpdGxlUm93LnNldChrZXksIGN1cnJlbnRGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUsIHRydWUpO1xuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSAnZ2VvbWV0cnknKSB7XG4gICAgICAgIHRpdGxlUm93LnVuc2V0KGtleSwgdHJ1ZSk7XG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGVSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoY3VycmVudEZlYXR1cmVLZXlzLmluY2x1ZGVzKGtleSkpKSB7XG4gICAgICAgIGhlYWRlclJvdy51bnNldChrZXksIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gW3RpdGxlUm93LCBoZWFkZXJSb3csIGVtcHR5Um93XTtcbiAgICByZXR1cm4gdGl0bGVFbXB0eVJvd3M7XG4gIH1cblxuICBwcml2YXRlIGNpcmNsZVRvUG9pbnQoZmVhdHVyZSkge1xuICAgIGNvbnN0IHJhZGl1czogbnVtYmVyID0gZmVhdHVyZS5nZXQoJ3JhZCcpO1xuXG4gICAgaWYgKHJhZGl1cykge1xuICAgICAgY29uc3QgcG9pbnQgPSBuZXcgb2xQb2ludChbZmVhdHVyZS5nZXQoJ2xvbmdpdHVkZScpLCBmZWF0dXJlLmdldCgnbGF0aXR1ZGUnKV0pO1xuICAgICAgcG9pbnQudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XG4gICAgICBmZWF0dXJlLnNldEdlb21ldHJ5KHBvaW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcbiAgICB0aGlzLmltcG9ydEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlucHV0UHJvajogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5mb3JjZU5hbWluZykge1xuICAgICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGZvcm1hdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBsYXllcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbjogW1tdXSxcbiAgICAgICAgZW5jb2Rpbmc6IFtFbmNvZGluZ0Zvcm1hdC5VVEY4LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBjb21iaW5lTGF5ZXJzOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgc2VwYXJhdG9yOiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGZlYXR1cmVJbk1hcEV4dGVudDogW2ZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgZm9ybWF0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGxheWVyczogW1tdLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBsYXllcnNXaXRoU2VsZWN0aW9uOiBbW11dLFxuICAgICAgICBlbmNvZGluZzogW0VuY29kaW5nRm9ybWF0LlVURjgsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIGNvbWJpbmVMYXllcnM6IFt0cnVlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBzZXBhcmF0b3I6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgZmVhdHVyZUluTWFwRXh0ZW50OiBbZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZTogRmlsZSwgZmVhdHVyZXM6IEZlYXR1cmVbXSkge1xuICAgIGNvbnN0IGltcG9ydEV4cG9ydE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydCcpIGFzIEltcG9ydEV4cG9ydFNlcnZpY2VPcHRpb25zO1xuICAgIGNvbnN0IGNvbmZpcm1EaWFsb2dTZXJ2aWNlID0gaW1wb3J0RXhwb3J0T3B0aW9ucz8uYWxsb3dUb1N0b3JlTGF5ZXIgPyB0aGlzLmNvbmZpcm1EaWFsb2dTZXJ2aWNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGltcG9ydFdpdGhTdHlsZSA9aW1wb3J0RXhwb3J0T3B0aW9ucz8uaW1wb3J0V2l0aFN0eWxlIHx8IHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0V2l0aFN0eWxlJyk7XG4gICAgaWYgKHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0V2l0aFN0eWxlJykpIHtcbiAgICAgIGNvbnNvbGUud2FybihgXG4gICAgICBUaGUgbG9jYXRpb24gb2YgdGhpcyBjb25maWcgaW1wb3J0V2l0aFN0eWxlIGlzIGRlcHJlY2F0ZWQuXG4gICAgICBQbGVhc2UgbW92ZSB0aGlzIHByb3BlcnR5IHdpdGhpbiBpbXBvcnRFeHBvcnQgY29uZmlndXJhdGlvbi5cbiAgICAgIEV4OiBpbXBvcnRXaXRoU3R5bGU6IHRydWUvZmFsc2UgbXVzdCBiZSB0cmFuc2ZlcmVkIHRvIGltcG9ydEV4cG9ydDogeyBpbXBvcnRXaXRoU3R5bGU6IHRydWUvZmFsc2UgfVxuICAgICAgUmVmZXIgdG8gZW52aXJvbm5lbWVudC50cyBPUiBjb25maWcvY29uZmlnLmpzb25cbiAgICAgIFRoaXMgbGVnYWN5IGNvbnZlcnNpb24gd2lsbCBiZSBkZWxldGVkIGluIDIwMjQuXG4gICAgICBgKTtcbiAgICB9XG4gICAgaWYgKCFpbXBvcnRXaXRoU3R5bGUpIHtcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxuICAgICAgICBmaWxlLFxuICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgdGhpcy5tYXAsXG4gICAgICAgIHRoaXMuY29udGV4dFVyaSxcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5sYXllclNlcnZpY2UsXG4gICAgICAgIGNvbmZpcm1EaWFsb2dTZXJ2aWNlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVGaWxlSW1wb3J0U3VjY2VzcyhcbiAgICAgICAgZmlsZSxcbiAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgIHRoaXMubWFwLFxuICAgICAgICB0aGlzLmNvbnRleHRVcmksXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHRoaXMubGF5ZXJTZXJ2aWNlLFxuICAgICAgICBjb25maXJtRGlhbG9nU2VydmljZSxcbiAgICAgICAgdGhpcy5zdHlsZUxpc3RTZXJ2aWNlLFxuICAgICAgICB0aGlzLnN0eWxlU2VydmljZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uRmlsZUltcG9ydEVycm9yKGZpbGU6IEZpbGUsIGVycm9yOiBFcnJvcikge1xuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgaGFuZGxlRmlsZUltcG9ydEVycm9yKFxuICAgICAgZmlsZSxcbiAgICAgIGVycm9yLFxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgIHRoaXMuZmlsZVNpemVNYlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBjb25zdCBleHRyYU1lc3NhZ2UgPSBwcmVDaGVjayA/ICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQuc2VsZWN0QWdhaW4nIDogJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC5yZXRyeSc7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICdpZ28uZ2VvLmV4cG9ydC5wb3B1cEJsb2NrZWQudGV4dCcsXG4gICAgICAnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnRpdGxlJyxcbiAgICAgIHsgdGltZU91dDogMjAwMDAgfSxcbiAgICAgIHtleHRyYU1lc3NhZ2V9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25GaWxlRXhwb3J0RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IoZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JjZU5hbWluZycpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VOYW1pbmcgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JjZU5hbWluZycpO1xuICAgIH1cbiAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7XG4gICAgdGhpcy5sb2FkRW5jb2RpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgZW5jb2RpbmdEZWZhdWx0VmFsdWUoZm9ybWF0OiBFeHBvcnRGb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEgfHwgZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uKSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XG4gICAgICByZXR1cm4gRW5jb2RpbmdGb3JtYXQuTEFUSU4xO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5VVEY4IH0pO1xuICAgICAgcmV0dXJuIEVuY29kaW5nRm9ybWF0LlVURjg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRW5jb2RpbmdzKCkge1xuICAgIHRoaXMuZW5jb2RpbmdzJC5uZXh0KEVuY29kaW5nRm9ybWF0KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUZvcm1hdHMobGF5ZXJzPzogQW55TGF5ZXJbXSkge1xuICAgIGxldCBhcHBsaWVkZm9ybWF0czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhFeHBvcnRGb3JtYXQpO1xuICAgIGNvbnN0IGZvcm1hdHNUeXBlID0ge1xuICAgICAgb25seVVybDogZmFsc2UsXG4gICAgICBvbmx5VmVjdG9yOiBmYWxzZSxcbiAgICAgIHZlY3RvckFuZFVybDogZmFsc2UsXG4gICAgICBjdXN0b21MaXN0OiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgY3VzdG9tTGlzdCA9IFtdO1xuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCkge1xuICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZD8uYWxsb3dlZEZvcm1hdHMpIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS5jdXN0b21MaXN0ID0gdHJ1ZTtcbiAgICAgICAgICBjdXN0b21MaXN0LnB1c2goe2xheWVyOiBsYXllci50aXRsZSwgZm9ybWF0czogdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmFsbG93ZWRGb3JtYXRzKX0pO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICEobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikgJiZcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcbiAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1hdHNUeXBlLm9ubHlVcmwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxuICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsIHx8IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsKVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcbiAgICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmb3JtYXRzVHlwZS5vbmx5VXJsID09PSB0cnVlICYmIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlKSB7XG4gICAgICAgIGFwcGxpZWRmb3JtYXRzID0gWydVUkwnXTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmIChFeHBvcnRGb3JtYXQuVVJMIGluIHRoaXMuZm9ybWF0cyQudmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuZmlsdGVyKFxuICAgICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnVVJMJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBrZXlzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPT09IHRydWUgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2UgJiZcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XG4gICAgICAgIGlmICghKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSk7XG4gICAgICAgICAga2V5cy5wdXNoKCdVUkwnKTtcbiAgICAgICAgICBhcHBsaWVkZm9ybWF0cyA9IGtleXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0cyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcm1hdHMnKTtcbiAgICBpZiAoY29uZmlnSW1wb3J0RXhwb3J0Rm9ybWF0cykge1xuICAgICAgY29uc3QgdmFsaWRhdGVkTGlzdEZvcm1hdCA9IHRoaXMudmFsaWRhdGVMaXN0Rm9ybWF0KGNvbmZpZ0ltcG9ydEV4cG9ydEZvcm1hdHMpO1xuICAgICAgYXBwbGllZGZvcm1hdHMgPSBhcHBsaWVkZm9ybWF0cy5maWx0ZXIoYWYgPT4gdmFsaWRhdGVkTGlzdEZvcm1hdC5pbmNsdWRlcyhhZikpO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0c1R5cGUuY3VzdG9tTGlzdCkge1xuICAgICAgbGV0IGNvbW1vbkZvcm1hdHM7XG4gICAgICBjb25zdCBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cyA9IFtdO1xuICAgICAgbGV0IHByZXZpb3VzQ3VzdG9tTGlzdEZvcm1hdHMgPSBjdXN0b21MaXN0WzBdLmZvcm1hdHM7XG4gICAgICBjdXN0b21MaXN0Lm1hcChsaXN0ID0+IHtcbiAgICAgICAgbGF5ZXJzV2l0aEN1c3RvbUZvcm1hdHMucHVzaChsaXN0LmxheWVyKTtcbiAgICAgICAgY29tbW9uRm9ybWF0cyA9IGxpc3QuZm9ybWF0cy5maWx0ZXIodmFsdWUgPT4gcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgICBwcmV2aW91c0N1c3RvbUxpc3RGb3JtYXRzID0gbGlzdC5mb3JtYXRzO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBmaW5hbEZvcm1hdHMgPSBjb21tb25Gb3JtYXRzLmZpbHRlcih2YWx1ZSA9PiBhcHBsaWVkZm9ybWF0cy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgaWYgKGZpbmFsRm9ybWF0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChzdHJFbnVtKGZpbmFsRm9ybWF0cykpO1xuXG4gICAgICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChsYXllcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcbiAgICAgICAgICAgICAgJ2lnby5nZW8uZXhwb3J0LmN1c3RvbUxpc3QudGV4dCcsXG4gICAgICAgICAgICAgICdpZ28uZ2VvLmV4cG9ydC5jdXN0b21MaXN0LnRpdGxlJyxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB7IHZhbHVlOiBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5qb2luKCkgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChbXSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQoJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRleHQnLCdpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1hdHMkLm5leHQoc3RyRW51bShhcHBsaWVkZm9ybWF0cykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVMaXN0Rm9ybWF0KGZvcm1hdHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBmb3JtYXRzXG4gICAgICAuZmlsdGVyKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR2VvSlNPTi50b1VwcGVyQ2FzZSgpIHx8XG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5LTUwudG9VcHBlckNhc2UoKSB8fFxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkgfHxcbiAgICAgICAgICBmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LlVSTC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5DU1Zjb21tYTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbjtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdNTDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdQWC50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkdQWDtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0Lkdlb0pTT04udG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HZW9KU09OO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuS01MO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlO1xuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5VUkw7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbW9kZUNoYW5nZWQobW9kZSkge1xuICAgIHRoaXMuc2VsZWN0TW9kZS5lbWl0KG1vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRTdWNjZXNzKCkge1xuICAgIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzKHRoaXMubWVzc2FnZVNlcnZpY2UpO1xuICB9XG5cbiAgb25JbXBvcnRFeHBvcnRDaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IGV2ZW50LnZhbHVlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW1wb3J0LWV4cG9ydC10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZE1vZGVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uSW1wb3J0RXhwb3J0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCInaW1wb3J0J1wiPlxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRUYWJUaXRsZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidleHBvcnQnXCI+XG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFRhYlRpdGxlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG48L2Rpdj5cblxuPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiIFtmb3JtR3JvdXBdPVwiaW1wb3J0Rm9ybVwiICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiPlxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFByb2pQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgWyh2YWx1ZSldPVwiaW5wdXRQcm9qXCI+XG4gICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHByb2plY3Rpb24gb2YgKHByb2plY3Rpb25zJCB8IGFzeW5jKVwiXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8cCBtYXQtbGluZSAqbmdJZj1cInByb2plY3Rpb24udHJhbnNsYXRlS2V5XCI+e3soJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy4nICsgcHJvamVjdGlvbi50cmFuc2xhdGVLZXkpIHwgdHJhbnNsYXRlOiBwcm9qZWN0aW9ufX08L3A+XG4gICAgICAgICAgPHAgbWF0LWxpbmUgKm5nSWY9XCIhcHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj57e3Byb2plY3Rpb24uYWxpYXN9fTwvcD5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgIFttYXRUb29sdGlwXT1cImltcG9ydEZvcm0uaW52YWxpZCA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLmNob29zZScgfCB0cmFuc2xhdGUpIDogKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSlcIlxuICAgIGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImltcG9ydEZvcm0uaW52YWxpZCB8fCAobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRCdXR0b24nIHwgdHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxuICAgIDxpbnB1dFxuICAgICAgaGlkZGVuXG4gICAgICAjZmlsZUlucHV0XG4gICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIlxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC52YWx1ZSA9IG51bGxcIlxuICAgICAgKGNoYW5nZSk9XCJpbXBvcnRGaWxlcygkZXZlbnQudGFyZ2V0LmZpbGVzKVwiPlxuICA8L2Rpdj5cbjwvZm9ybT5cbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cInNlbGVjdGVkTW9kZSA9PT0gJ2ltcG9ydCdcIj5cbiAgPGRpdiAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyA9PT0gJydcIj5cbiAgICA8aDQ+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydENsYXJpZmljYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9oND5cbiAgICA8dWw+XG4gICAgICA8bGk+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydFNpemVNYXgnIHwgdHJhbnNsYXRlOiB7c2l6ZTogZmlsZVNpemVNYn0gfX08L2xpPlxuICAgICAgPGxpPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRGb3JtYXRBdXRob3JpemVkJyB8IHRyYW5zbGF0ZX19PC9saT5cbiAgICAgIDxsaT57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0U2hwWmlwJyB8IHRyYW5zbGF0ZX19PC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgPGlnby1jdXN0b20taHRtbCAqbmdJZj1cImltcG9ydEh0bWxDbGFyaWZpY2F0aW9ucyAhPT0gJydcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCJcbiAgICBbaHRtbF09XCJpbXBvcnRIdG1sQ2xhcmlmaWNhdGlvbnNcIj5cbiAgPC9pZ28tY3VzdG9tLWh0bWw+XG48L3NlY3Rpb24+XG5cbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRNb2RlID09PSAnZXhwb3J0J1wiPlxuICA8aDQ+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydE5vTGF5ZXJzRXhwb3J0YWJsZScgfCB0cmFuc2xhdGV9fTwvaDQ+XG48L3NlY3Rpb24+XG5cbjxmb3JtIGNsYXNzPVwiaWdvLWZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPiAwICYmIHNlbGVjdGVkTW9kZSA9PT0gJ2V4cG9ydCdcIj5cbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRMYXllclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdFxuICAgICAgICBbKHZhbHVlKV09XCJsYXllcnNcIiBtdWx0aXBsZT5cbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICB7e2xheWVycy5sZW5ndGggPyBnZXRMYXllclRpdGxlQnlJZChsYXllcnNbMF0pIDogJyd9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImV4cG9ydC1zZWxlY3QtdHJpZ2dlclwiPlxuICAgICAgICAgICAgKCt7e2xheWVycy5sZW5ndGggLSAxfX0ge3sobGF5ZXJzPy5sZW5ndGggPT09IDIgPyAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLm90aGVyJyA6ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXJzJykgfCB0cmFuc2xhdGUgfX0pXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgKGV4cG9ydGFibGVMYXllcnMkIHwgYXN5bmMpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lnby1leHBvcnQtbGF5ZXItbWF0LW9wdGlvbic6IGxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcil9XCJcbiAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuaWRcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8cCBtYXQtbGluZT57e2xheWVyLnRpdGxlfX08L3A+XG4gICAgICAgICAgPHAgbWF0LWxpbmU+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSAqbmdJZj1cImxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcilcIlxuICAgICAgICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYWZ0ZXInXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9ubHlTZWxlY3RlZENsaWNrKCRldmVudCxsYXllci5pZClcIlxuICAgICAgICAgICAgICAoY2hlY2tlZCk9XCJpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25seVNlbGVjdGVkKCRldmVudCxsYXllci5pZClcIj5cbiAgICAgICAgICAgICAgPHNtYWxsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZWxlY3RlZEZlYXR1cmUnIHwgdHJhbnNsYXRlfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Rm9ybWF0UGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcm1hdFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBmb3JtYXQgb2YgKGZvcm1hdHMkIHwgYXN5bmMpIHwga2V5dmFsdWVcIiBbdmFsdWVdPVwiZm9ybWF0LmtleVwiPlxuICAgICAgICAgICAge3snaWdvLmdlby5leHBvcnQuZm9ybWF0LicgKyBmb3JtYXQudmFsdWUgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiKGZvcm1hdHMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPVwidHJ1ZVwiPlxuICAgICAgICAgIHt7J2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiZm9yY2VOYW1pbmcgJiYgZm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZpbGVOYW1lUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWdvLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1Zjb21tYScgfHwgZm9ybS52YWx1ZS5mb3JtYXQgPT09ICdDU1ZzZW1pY29sb24nXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZW5jb2RpbmdQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5jb2RpbmdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihlbmNvZGluZ3MkIHwgYXN5bmMpLmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlbmNvZGluZyBvZiAoZW5jb2RpbmdzJCB8IGFzeW5jKSB8IGtleXZhbHVlXCIgW3ZhbHVlXT1cImVuY29kaW5nLmtleVwiPlxuICAgICAgICAgICAge3snaWdvLmdlby5leHBvcnQuZW5jb2RpbmcuJyArIGVuY29kaW5nLnZhbHVlIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJleHBvcnQtY29tYmluZS1sYXllcnMgbWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cImxheWVycy5sZW5ndGggPiAxICYmIChmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVmNvbW1hJyB8fCBmb3JtLnZhbHVlLmZvcm1hdCA9PT0gJ0NTVnNlbWljb2xvbicpXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tYmluZUxheWVyc1wiXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydENvbWJpbmVSZXN1bHRzJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlcGFyYXRvciBtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDEgJiYgKGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykgJiYgZm9ybS52YWx1ZS5jb21iaW5lTGF5ZXJzXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VwYXJhdG9yXCJcbiAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cbiAgICAgICAgICB7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0U2VwYXJhdG9yJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZXhwb3J0LW9wdGlvbnMgbWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cImZvcm0udmFsdWUuZm9ybWF0ICE9PSAnVVJMJ1wiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVJbk1hcEV4dGVudFwiXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCI+XG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZlYXR1cmVJbkV4dGVudCcgfCB0cmFuc2xhdGV9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImlnby1mb3JtLWJ1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZCB8fCAobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUV4cG9ydEZvcm1TdWJtaXQoZm9ybS52YWx1ZSlcIj5cbiAgICAgIHt7Zm9ybS52YWx1ZS5mb3JtYXQgIT09ICdVUkwnICA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbicgfCB0cmFuc2xhdGUpOiAoZm9ybS52YWx1ZS5sYXllcnMubGVuZ3RoID4gMSAgPyAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rcycgfCB0cmFuc2xhdGUpOiAoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRCdXR0b25MaW5rJyB8IHRyYW5zbGF0ZSkpfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxuICA8L2Rpdj5cblxuICA8aWdvLWN1c3RvbS1odG1sICpuZ0lmPVwiZXhwb3J0SHRtbENsYXJpZmljYXRpb25zICE9PSAnJ1wiIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIlxuICAgIFtodG1sXT1cImV4cG9ydEh0bWxDbGFyaWZpY2F0aW9uc1wiPlxuICA8L2lnby1jdXN0b20taHRtbD5cblxuPC9mb3JtPlxuIl19