@kando-env/kando-ui 1.2.412-alpha.6 → 1.2.412-alpha.7

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 (704) hide show
  1. package/lib/Router.js +42 -37
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +5 -4
  3. package/lib/Widgets/EventsRow/EventsRow.js +5 -4
  4. package/lib/Widgets/Map/GraphUtils.js +5 -3
  5. package/lib/Widgets/Map/Map.js +23 -45
  6. package/lib/Widgets/Map/MapUtils.js +51 -28
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +36 -33
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +5 -4
  9. package/lib/Widgets/Map/areas/AreaUtils.js +13 -7
  10. package/lib/Widgets/Map/areas/Patterns.js +3 -2
  11. package/lib/Widgets/Map/edges/Edge.js +5 -4
  12. package/lib/Widgets/Map/edges/Edges.js +5 -4
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +3 -2
  14. package/lib/Widgets/Map/events/Event.js +5 -4
  15. package/lib/Widgets/Map/events/EventIndicator.js +5 -4
  16. package/lib/Widgets/Map/events/EventPath.js +5 -4
  17. package/lib/Widgets/Map/events/EventUtils.js +34 -21
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +5 -4
  19. package/lib/Widgets/Map/events/PointOfEvent.js +5 -4
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +5 -4
  21. package/lib/Widgets/Map/events/Snail.js +5 -4
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +7 -5
  23. package/lib/Widgets/Map/map/FloatingGraph.js +3 -2
  24. package/lib/Widgets/Map/map/GraphDateButton.js +3 -2
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +3 -2
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +3 -2
  27. package/lib/Widgets/Map/points/PointIcon.js +5 -3
  28. package/lib/Widgets/Map/points/PointMarker.js +44 -34
  29. package/lib/Widgets/Map/points/PointMarkers.js +11 -13
  30. package/lib/Widgets/Map/points/PointUtils.js +79 -43
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +5 -4
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +5 -4
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +5 -4
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +5 -3
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +5 -4
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +3 -2
  37. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/styles.js +5 -3
  39. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +3 -2
  40. package/lib/Widgets/MostPolluting/Factories/Factories.js +5 -4
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +3 -2
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +3 -2
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +5 -3
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +5 -3
  45. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +3 -2
  46. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  47. package/lib/Widgets/MostPolluting/Factories/styles.js +5 -3
  48. package/lib/Widgets/MostPolluting/MostPolluting.js +5 -4
  49. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +11 -6
  50. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +3 -2
  51. package/lib/Widgets/MostPolluting/ShowMore/styles.js +3 -2
  52. package/lib/Widgets/MostPolluting/assets/index.js +1 -1
  53. package/lib/Widgets/MostPolluting/components/ChangePercent.js +3 -2
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +1 -1
  55. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +5 -4
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +1 -1
  57. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +3 -2
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +1 -1
  59. package/lib/Widgets/MostPolluting/models.js +1 -1
  60. package/lib/Widgets/MostPolluting/styles.js +5 -3
  61. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +3 -2
  62. package/lib/Widgets/PotentialImpactSummary/Icon.js +5 -4
  63. package/lib/Widgets/PotentialImpactSummary/index.js +3 -2
  64. package/lib/Widgets/PotentialImpactSummary/index.test.js +1 -1
  65. package/lib/Widgets/PotentialImpactSummary/styles.js +11 -6
  66. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  67. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +3 -2
  68. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +3 -2
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +1 -1
  70. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +3 -2
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +3 -3
  72. package/lib/Widgets/QualitySummary/QualitySummary.js +3 -2
  73. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +7 -4
  74. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  75. package/lib/Widgets/QualitySummary/styles.js +11 -6
  76. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +5 -4
  77. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +5 -4
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +3 -2
  79. package/lib/Widgets/UtilityInformation/UtilityInformation.js +5 -4
  80. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  81. package/lib/Widgets/UtilityInformation/styles.js +15 -9
  82. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +5 -3
  83. package/lib/assets/icons/TopNavbar/index.js +1 -1
  84. package/lib/assets/icons/TrendSvg.js +3 -2
  85. package/lib/assets/icons/index.js +1 -1
  86. package/lib/assets/icons/kandoStepper/index.js +1 -1
  87. package/lib/assets/icons/siteTypes/index.js +1 -1
  88. package/lib/components/ApplyButton/ApplyButton.js +3 -2
  89. package/lib/components/ApplyButton/index.js +3 -2
  90. package/lib/components/Backdrop/Backdrop.js +3 -2
  91. package/lib/components/ContentLoader/ContentLoader.js +3 -2
  92. package/lib/components/ContentLoader/index.js +1 -1
  93. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +5 -3
  94. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +5 -3
  95. package/lib/components/CustomInputs/DoubleTabs/styles.js +7 -4
  96. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +5 -4
  97. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +3 -2
  98. package/lib/components/CustomInputs/Search/Search.js +5 -4
  99. package/lib/components/CustomInputs/Search/index.js +3 -2
  100. package/lib/components/CustomInputs/Select/Select.js +5 -4
  101. package/lib/components/CustomInputs/Select/Select.stories.js +5 -3
  102. package/lib/components/DamageType/DamageType.js +5 -4
  103. package/lib/components/DamageType/index.js +3 -2
  104. package/lib/components/DataLoaderError/DataLoaderError.js +3 -2
  105. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +3 -2
  106. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +1 -1
  107. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +5 -4
  108. package/lib/components/DischargeHeatmap/HighchartsOptions.js +3 -2
  109. package/lib/components/DischargeHeatmap/index.js +3 -2
  110. package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -2
  111. package/lib/components/DischargeHeatmap/popupText.js +3 -2
  112. package/lib/components/DischargeHeatmap/titles.js +5 -3
  113. package/lib/components/DischargeHeatmap/types.js +1 -1
  114. package/lib/components/ErrorBoundary.js +9 -9
  115. package/lib/components/Events/Events.js +5 -4
  116. package/lib/components/Events/index.js +3 -2
  117. package/lib/components/Graph/Graph.js +8 -7
  118. package/lib/components/Graph/index.js +3 -2
  119. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +3 -2
  120. package/lib/components/Header/Breadcrumbs/index.js +3 -2
  121. package/lib/components/Header/DoubleTabs/DoubleTabs.js +7 -5
  122. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +5 -3
  123. package/lib/components/Header/DoubleTabs/styles.js +7 -4
  124. package/lib/components/Header/Header.js +3 -2
  125. package/lib/components/Header/Header.stories.js +5 -3
  126. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +17 -15
  127. package/lib/components/Header/InfoBar/InfoBar.js +34 -31
  128. package/lib/components/Header/InfoBar/Search/Control.js +3 -2
  129. package/lib/components/Header/InfoBar/Search/GroupLabel.js +3 -2
  130. package/lib/components/Header/InfoBar/Search/Search.js +5 -4
  131. package/lib/components/Header/InfoBar/Search/SearchContainer.js +5 -4
  132. package/lib/components/Header/InfoBar/Search/index.js +3 -2
  133. package/lib/components/Header/InfoBar/Search/searchStyle.js +3 -2
  134. package/lib/components/Header/InfoBar/TimeFilter.js +3 -2
  135. package/lib/components/Header/InfoBar/types.js +1 -1
  136. package/lib/components/Header/KandoNavbar/KandoNavbar.js +8 -7
  137. package/lib/components/Header/KandoNavbar/index.js +3 -2
  138. package/lib/components/Header/Slideshow/Slideshow.js +5 -4
  139. package/lib/components/Header/Slideshow/index.js +3 -2
  140. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +3 -2
  141. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +3 -2
  142. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +6 -5
  143. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +3 -2
  144. package/lib/components/Header/Toolbar/Toolbar.js +5 -4
  145. package/lib/components/InfoBar/InfoBar.js +5 -4
  146. package/lib/components/InfoBar/InfoBar.stories.js +5 -3
  147. package/lib/components/KandoModal/KandoModal.js +5 -4
  148. package/lib/components/KandoModal/index.js +3 -2
  149. package/lib/components/Link.js +3 -2
  150. package/lib/components/Links/CustomRedirect/CustomRedirect.js +3 -2
  151. package/lib/components/Links/StyledLink/StyledLink.js +5 -3
  152. package/lib/components/Links/StyledNavLink/StyledNavLink.js +3 -2
  153. package/lib/components/LiveEvents/CarouselSlide.js +3 -2
  154. package/lib/components/LiveEvents/LiveEvents.js +3 -2
  155. package/lib/components/LiveEvents/index.js +3 -2
  156. package/lib/components/LoaderByPercent/LoaderByPercent.js +5 -3
  157. package/lib/components/Map/Map.js +10 -8
  158. package/lib/components/Map/index.js +3 -2
  159. package/lib/components/Modal/Modal.js +3 -2
  160. package/lib/components/NarrowHeader.js +9 -9
  161. package/lib/components/PointInfo/PointInfo.js +3 -2
  162. package/lib/components/PointInfo/index.js +3 -2
  163. package/lib/components/PopupModal/PopupModal.js +3 -2
  164. package/lib/components/PopupModal/PopupModal.stories.js +7 -4
  165. package/lib/components/Sector/Sector.js +3 -2
  166. package/lib/components/Sector/Sector.test.js +1 -1
  167. package/lib/components/Sector/SectorIconsNew.js +3 -2
  168. package/lib/components/Sector/index.js +3 -2
  169. package/lib/components/Sector/sectorIcons.js +3 -2
  170. package/lib/components/SevereEvent/Eta/Eta.js +5 -4
  171. package/lib/components/SevereEvent/Eta/styles.js +3 -2
  172. package/lib/components/SevereEvent/SevereEvent.js +5 -4
  173. package/lib/components/Spinner/Spinner.js +3 -2
  174. package/lib/components/Spinner/Spinner.stories.js +7 -4
  175. package/lib/components/Spinner/index.js +3 -2
  176. package/lib/components/Spinner/styles.js +7 -4
  177. package/lib/components/Tabs/Tabs.js +7 -5
  178. package/lib/components/Tabs/Tabs.stories.js +5 -3
  179. package/lib/components/Tabs/assets/index.js +1 -1
  180. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +5 -4
  181. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +5 -4
  182. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +5 -4
  183. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +3 -2
  184. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +9 -5
  185. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +3 -2
  186. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +3 -2
  187. package/lib/components/TimeRangeSelector/TimeRangeList.js +5 -4
  188. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +5 -4
  189. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +7 -5
  190. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +5 -3
  191. package/lib/components/TimeRangeSelector/constants.js +5 -3
  192. package/lib/components/TimeRangeSelector/index.js +3 -2
  193. package/lib/components/Toggle/Toggle.js +5 -4
  194. package/lib/components/Toggle/index.js +3 -2
  195. package/lib/components/TrendGraph/TrendGraph.js +5 -4
  196. package/lib/components/TrendGraph/index.js +3 -2
  197. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +5 -4
  198. package/lib/components/TrendGraphNVL/index.js +3 -2
  199. package/lib/development-environment/index.js +3 -2
  200. package/lib/development-environment/mock/browser.js +3 -2
  201. package/lib/development-environment/mock/get.js +3 -2
  202. package/lib/development-environment/mock/handlers.js +3 -2
  203. package/lib/development-environment/mock/mockBus.js +5 -3
  204. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +3 -2
  205. package/lib/development-environment/mock/mockObjects/areaInformation.js +3 -2
  206. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +3 -2
  207. package/lib/development-environment/mock/mockObjects/areaSitesData.js +3 -2
  208. package/lib/development-environment/mock/mockObjects/areasJson.js +3 -2
  209. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +3 -2
  210. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +3 -2
  211. package/lib/development-environment/mock/mockObjects/data-menuData.js +3 -2
  212. package/lib/development-environment/mock/mockObjects/data-search.js +3 -2
  213. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +3 -2
  214. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +3 -2
  215. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +3 -2
  216. package/lib/development-environment/mock/mockObjects/eventsJson.js +3 -2
  217. package/lib/development-environment/mock/mockObjects/metascore.js +3 -2
  218. package/lib/development-environment/mock/mockObjects/permissionsJson.js +3 -2
  219. package/lib/development-environment/mock/mockObjects/pointsJson.js +3 -2
  220. package/lib/development-environment/mock/mockObjects/site-info.js +3 -2
  221. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +3 -2
  222. package/lib/development-environment/togly/ToglyDashboard.js +5 -4
  223. package/lib/development-environment/togly/ToglyItem.js +5 -4
  224. package/lib/development-environment/togly/flags.js +1 -1
  225. package/lib/development-environment/togly/init.js +1 -1
  226. package/lib/development-environment/togly/macro.js +1 -1
  227. package/lib/development-environment/togly/useDoubleKeyDown.js +3 -2
  228. package/lib/development-environment/togly/useLocalStorage.js +3 -2
  229. package/lib/hooks/useApi.js +32 -30
  230. package/lib/hooks/useApiWithDashboardQuery.js +5 -3
  231. package/lib/hooks/useClickOutside.js +3 -2
  232. package/lib/hooks/useInitializeHeaders.js +3 -2
  233. package/lib/hooks/useKandoFetch.js +3 -2
  234. package/lib/hooks/useMap.js +3 -2
  235. package/lib/hooks/useNavContext.js +3 -2
  236. package/lib/hooks/useQueryURL.js +3 -2
  237. package/lib/hooks/useRemoveExistingLayers.js +3 -2
  238. package/lib/hooks/useUpdateEventBodyTail.js +3 -2
  239. package/lib/hooks/useUserTimeZone.js +15 -8
  240. package/lib/hooks/useUserTimeZone.test.js +3 -3
  241. package/lib/hooks/useWindowSize.js +1 -1
  242. package/lib/index.js +5 -4
  243. package/lib/macros/getVersion.js +2 -2
  244. package/lib/models/IAction.js +1 -1
  245. package/lib/models/IAppState.js +1 -1
  246. package/lib/pages/AreaPage/AreaPage.js +31 -28
  247. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +5 -4
  248. package/lib/pages/AreaPage/Dashboard/Dashboard.js +5 -4
  249. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +5 -4
  250. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +3 -2
  251. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +3 -2
  252. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +3 -2
  253. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +5 -3
  254. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  255. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +3 -2
  256. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +7 -4
  257. package/lib/pages/AssessmentPage/AssessmentPage.js +5 -4
  258. package/lib/pages/CannyWidget/Feedback.js +8 -7
  259. package/lib/pages/CovidPage/CovidPage.js +5 -4
  260. package/lib/pages/CovidPage/components/Body.js +5 -4
  261. package/lib/pages/CovidPage/components/Map.js +5 -4
  262. package/lib/pages/CovidPage/components/Sidebar.js +5 -4
  263. package/lib/pages/CovidPage/components/Summary.js +5 -4
  264. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +5 -4
  265. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +3 -2
  266. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +5 -4
  267. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +3 -2
  268. package/lib/pages/CovidPage/components/areas/Area.js +5 -4
  269. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +5 -4
  270. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +5 -4
  271. package/lib/pages/CovidPage/components/areas/AreasList.js +5 -4
  272. package/lib/pages/CovidPage/components/areas/Sort.js +5 -4
  273. package/lib/pages/CovidPage/components/nvlStatusHelper.js +9 -5
  274. package/lib/pages/DashboardMap/AreaCard.js +3 -2
  275. package/lib/pages/DashboardMap/AssessmentIcon.js +3 -2
  276. package/lib/pages/DashboardMap/Capacity.js +45 -39
  277. package/lib/pages/DashboardMap/FactoryCard.js +3 -2
  278. package/lib/pages/DashboardMap/HighchartsOptions.js +3 -2
  279. package/lib/pages/DashboardMap/List.js +5 -4
  280. package/lib/pages/DashboardMap/ListContext.js +7 -5
  281. package/lib/pages/DashboardMap/Loader.js +3 -2
  282. package/lib/pages/DashboardMap/SeverityBadge.js +3 -2
  283. package/lib/pages/DashboardMap/WWTPMap.js +5 -4
  284. package/lib/pages/DashboardMap/WaterDischarge.js +3 -2
  285. package/lib/pages/DashboardMap/Widget.js +7 -5
  286. package/lib/pages/DashboardMap/index.js +3 -2
  287. package/lib/pages/DashboardMap/utils.js +23 -12
  288. package/lib/pages/EventsPage/Body/Body.js +19 -18
  289. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +3 -3
  290. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +9 -5
  291. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +3 -2
  292. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +3 -2
  293. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +1 -1
  294. package/lib/pages/EventsPage/DragAndDropArea/index.js +3 -2
  295. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +6 -6
  296. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +9 -5
  297. package/lib/pages/EventsPage/EventsPage.js +5 -4
  298. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +5 -4
  299. package/lib/pages/EventsPage/events/MoreInfo.js +5 -4
  300. package/lib/pages/EventsPage/events/Sidebar.js +5 -4
  301. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +3 -2
  302. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +3 -2
  303. package/lib/pages/EventsPage/events/event_info/Contaminants/index.js +3 -2
  304. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +5 -4
  305. package/lib/pages/EventsPage/events/event_info/EventDetails.js +3 -2
  306. package/lib/pages/EventsPage/events/event_info/EventInfo.js +5 -4
  307. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +3 -2
  308. package/lib/pages/EventsPage/events/event_info/EventSection.js +3 -2
  309. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +1 -1
  310. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +5 -4
  311. package/lib/pages/EventsPage/events/event_info/Header/Header.js +3 -2
  312. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +5 -4
  313. package/lib/pages/EventsPage/events/event_info/Header/index.js +3 -2
  314. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +3 -2
  315. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +5 -4
  316. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +3 -2
  317. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +3 -2
  318. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +3 -2
  319. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /index.js +3 -2
  320. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +5 -4
  321. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +5 -4
  322. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +3 -2
  323. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/index.js +3 -2
  324. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +3 -2
  325. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +5 -4
  326. package/lib/pages/EventsPage/events/event_info/SamplingList/index.js +3 -2
  327. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +3 -2
  328. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +3 -2
  329. package/lib/pages/EventsPage/events/event_info/SeverityScore/index.js +3 -2
  330. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +3 -2
  331. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +3 -2
  332. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +1 -1
  333. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +3 -2
  334. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +5 -3
  335. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +3 -2
  336. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +3 -2
  337. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +3 -2
  338. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +3 -2
  339. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +3 -2
  340. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +3 -3
  341. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +3 -2
  342. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +3 -2
  343. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +3 -2
  344. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +3 -2
  345. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +3 -2
  346. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +3 -2
  347. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +1 -1
  348. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +3 -2
  349. package/lib/pages/EventsPage/events/event_info/Timelines/index.js +3 -2
  350. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +5 -3
  351. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +5 -4
  352. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +5 -4
  353. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +3 -2
  354. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +3 -2
  355. package/lib/pages/EventsPage/events/event_info/sources/Source.js +3 -2
  356. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +5 -4
  357. package/lib/pages/EventsPage/events/event_info/styles.js +5 -3
  358. package/lib/pages/EventsPage/events/events_list/EventItem.js +5 -4
  359. package/lib/pages/EventsPage/events/events_list/EventUtils.js +7 -4
  360. package/lib/pages/EventsPage/events/events_list/EventsList.js +5 -4
  361. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +5 -4
  362. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +5 -4
  363. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +5 -4
  364. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +5 -4
  365. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +5 -4
  366. package/lib/pages/EventsPage/events/events_list/Sort.js +5 -4
  367. package/lib/pages/ImportFileWizard/FileUploadRespones.js +3 -2
  368. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +3 -2
  369. package/lib/pages/ImportFileWizard/ImportFile.js +5 -4
  370. package/lib/pages/ImportFileWizard/ResponseBody.js +3 -2
  371. package/lib/pages/ImportFileWizard/ValidationForm.js +3 -2
  372. package/lib/pages/ImportFileWizard/ValidationResponse.js +5 -4
  373. package/lib/pages/ImportFileWizard/importFileUtils.js +5 -4
  374. package/lib/pages/ImportFileWizard/index.js +3 -2
  375. package/lib/pages/ImportGisPage/ImportGisContainer.js +7 -5
  376. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +3 -2
  377. package/lib/pages/ImportGisPage/importGisUtils.js +7 -5
  378. package/lib/pages/ImportGisProcess/index.js +3 -2
  379. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +5 -4
  380. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +3 -2
  381. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +3 -2
  382. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +5 -4
  383. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +5 -3
  384. package/lib/pages/NotificationsPage/Notification/Notification.js +3 -2
  385. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  386. package/lib/pages/NotificationsPage/Notifications.mock.js +3 -2
  387. package/lib/pages/NotificationsPage/Notifications.stories.js +5 -3
  388. package/lib/pages/NotificationsPage/NotificationsPage.js +5 -4
  389. package/lib/pages/NotificationsPage/assets/index.js +1 -1
  390. package/lib/pages/NotificationsPageV2/NotificationsPage.js +7 -5
  391. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +3 -2
  392. package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +3 -2
  393. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +3 -2
  394. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +3 -2
  395. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +3 -2
  396. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +3 -2
  397. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +7 -5
  398. package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +3 -2
  399. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +5 -4
  400. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +33 -17
  401. package/lib/pages/NotificationsPageV2/notificationUtils.js +15 -9
  402. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  403. package/lib/pages/OldSitePage/OldSitePage.js +56 -51
  404. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +9 -5
  405. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -3
  406. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +3 -2
  407. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +3 -2
  408. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +9 -5
  409. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +5 -4
  410. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +5 -3
  411. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -3
  412. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +9 -5
  413. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +5 -4
  414. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +3 -2
  415. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +5 -4
  416. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +7 -4
  417. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +11 -6
  418. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +5 -4
  419. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +5 -4
  420. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +5 -3
  421. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +3 -2
  422. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  423. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +7 -4
  424. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +5 -3
  425. package/lib/pages/OperationsPage/LeftPanel.js +5 -4
  426. package/lib/pages/OperationsPage/Map/Map.js +5 -4
  427. package/lib/pages/OperationsPage/Map/useMap.js +6 -5
  428. package/lib/pages/OperationsPage/OperationsPage.js +5 -4
  429. package/lib/pages/OperationsPage/RightPanel.js +3 -2
  430. package/lib/pages/OperationsPage/index.js +3 -2
  431. package/lib/pages/PollutionRiskAssessment/FactoryDetails.js +31 -28
  432. package/lib/pages/PollutionRiskAssessment/FilterBehaviors.js +5 -4
  433. package/lib/pages/PollutionRiskAssessment/FilterButton.js +3 -2
  434. package/lib/pages/PollutionRiskAssessment/Map.js +5 -4
  435. package/lib/pages/PollutionRiskAssessment/SearchButton.js +3 -2
  436. package/lib/pages/PollutionRiskAssessment/SearchField.js +5 -4
  437. package/lib/pages/PollutionRiskAssessment/TotalSavings.js +3 -2
  438. package/lib/pages/PollutionRiskAssessment/UseCases.js +3 -2
  439. package/lib/pages/PollutionRiskAssessment/index.js +31 -28
  440. package/lib/pages/PollutionRiskAssessment/useMap.js +5 -4
  441. package/lib/pages/PollutionRiskAssessment/utils.js +3 -2
  442. package/lib/pages/ProfilePage/Container.js +3 -2
  443. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +5 -4
  444. package/lib/pages/ProfilePage/ProfilePage.js +5 -4
  445. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +5 -4
  446. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +7 -4
  447. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +3 -3
  448. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +74 -69
  449. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +5 -4
  450. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +3 -2
  451. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +7 -4
  452. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +3 -2
  453. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +3 -2
  454. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +3 -2
  455. package/lib/pages/SamplingsPage/DesktopActions/index.js +3 -2
  456. package/lib/pages/SamplingsPage/NavigationDropdown.js +5 -3
  457. package/lib/pages/SamplingsPage/NewSamplingAction.js +23 -20
  458. package/lib/pages/SamplingsPage/SamplingMobileModal.js +3 -2
  459. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +3 -2
  460. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +3 -2
  461. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +5 -4
  462. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +5 -4
  463. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +3 -2
  464. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +92 -85
  465. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +5 -4
  466. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +5 -4
  467. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +5 -4
  468. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +21 -12
  469. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +5 -3
  470. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +3 -2
  471. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +5 -4
  472. package/lib/pages/SamplingsPage/SamplingsMobileList.js +5 -4
  473. package/lib/pages/SamplingsPage/SamplingsPage.js +7 -5
  474. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +5 -4
  475. package/lib/pages/SamplingsPage/index.js +3 -2
  476. package/lib/pages/SamplingsPage/samplingsPageUtils.js +39 -20
  477. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +5 -3
  478. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +3 -2
  479. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +3 -2
  480. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +5 -3
  481. package/lib/pages/SitePage/PollutionContributor/index.js +3 -2
  482. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -3
  483. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +9 -5
  484. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +3 -2
  485. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +1 -1
  486. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +3 -2
  487. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +1 -1
  488. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +9 -5
  489. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +5 -4
  490. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +5 -3
  491. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -3
  492. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +9 -5
  493. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +5 -4
  494. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +3 -2
  495. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +5 -4
  496. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +9 -5
  497. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +11 -6
  498. package/lib/pages/SitePage/SamplingParameters/body/Body.js +3 -2
  499. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +5 -4
  500. package/lib/pages/SitePage/SamplingParameters/body/index.js +3 -2
  501. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +5 -4
  502. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +5 -4
  503. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +5 -3
  504. package/lib/pages/SitePage/SamplingParameters/dataParser.js +3 -2
  505. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +1 -1
  506. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  507. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +7 -4
  508. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +5 -3
  509. package/lib/pages/SitePage/SiteInformation/EmptyState.js +3 -2
  510. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +5 -5
  511. package/lib/pages/SitePage/SitePage.js +31 -28
  512. package/lib/pages/UploadLabResult/index.js +3 -2
  513. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +5 -4
  514. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +7 -4
  515. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +11 -6
  516. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +5 -3
  517. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +5 -4
  518. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +3 -2
  519. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +3 -2
  520. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +3 -2
  521. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +3 -2
  522. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  523. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +3 -2
  524. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +3 -2
  525. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +3 -2
  526. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +7 -5
  527. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +11 -6
  528. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +5 -4
  529. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +5 -4
  530. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +5 -4
  531. package/lib/pages/WbeDashboard/ExpandableComponent.js +5 -4
  532. package/lib/pages/WbeDashboard/GraphWrapper.js +5 -4
  533. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +5 -4
  534. package/lib/pages/WbeDashboard/SearchInput.js +5 -4
  535. package/lib/pages/WbeDashboard/SummaryGraph.js +26 -23
  536. package/lib/pages/WbeDashboard/SummaryGraphModal.js +3 -2
  537. package/lib/pages/WbeDashboard/Tabs.js +3 -2
  538. package/lib/pages/WbeDashboard/WbeDashboardPage.js +5 -4
  539. package/lib/pages/WbeDashboard/WbeSummaryBar.js +5 -4
  540. package/lib/pages/WwtpPage/DashboardCard.js +3 -2
  541. package/lib/pages/WwtpPage/DischargePatternCard.js +7 -5
  542. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +3 -2
  543. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +3 -2
  544. package/lib/pages/WwtpPage/InletsCard/index.js +3 -2
  545. package/lib/pages/WwtpPage/Map.js +4 -4
  546. package/lib/pages/WwtpPage/OrganicCard.js +3 -2
  547. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +3 -2
  548. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +3 -2
  549. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +3 -2
  550. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +3 -2
  551. package/lib/pages/WwtpPage/PotentialSaving/index.js +3 -2
  552. package/lib/pages/WwtpPage/PotentialSaving/types.js +1 -1
  553. package/lib/pages/WwtpPage/PredictionCard.js +3 -2
  554. package/lib/pages/WwtpPage/TrendCard.js +3 -2
  555. package/lib/pages/WwtpPage/UpgradeBox.js +3 -2
  556. package/lib/pages/WwtpPage/WwtpPage.js +3 -2
  557. package/lib/pages/WwtpPage/WwtpPageContainer.js +3 -2
  558. package/lib/pages/WwtpPage/index.js +3 -2
  559. package/lib/providers/Slideshow/SlideshowContext.js +7 -4
  560. package/lib/providers/Slideshow/SlideshowProvider.js +5 -4
  561. package/lib/providers/Slideshow/SlideshowRunner.js +3 -2
  562. package/lib/providers/UrlHistory/UrlHistoryContext.js +7 -4
  563. package/lib/providers/UrlHistory/UrlHistoryProvider.js +5 -4
  564. package/lib/providers/UrlHistory/index.js +1 -1
  565. package/lib/providers/UrlHistory/useLastVisited.js +3 -2
  566. package/lib/react-app-env.d.js +1 -1
  567. package/lib/store/ImportGis/action.js +1 -1
  568. package/lib/store/ImportGis/actionTypes.js +5 -4
  569. package/lib/store/ImportGis/actionsCreator.js +1 -1
  570. package/lib/store/ImportGis/models/gisImports.js +1 -1
  571. package/lib/store/ImportGis/reducer.js +1 -1
  572. package/lib/store/WBE/actionTypes.js +3 -2
  573. package/lib/store/WBE/actions.js +1 -1
  574. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  575. package/lib/store/WBE/models/IWBE.js +1 -1
  576. package/lib/store/WBE/models/IWBEState.js +1 -1
  577. package/lib/store/WBE/reducer.js +1 -1
  578. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +9 -5
  579. package/lib/store/WWTPDashboard/types.js +1 -1
  580. package/lib/store/areas/actionTypes.js +7 -4
  581. package/lib/store/areas/actions.js +1 -1
  582. package/lib/store/areas/models/IArea.js +1 -1
  583. package/lib/store/areas/models/IAreasState.js +1 -1
  584. package/lib/store/areas/reducer.js +1 -1
  585. package/lib/store/context/actionTypes.js +5 -3
  586. package/lib/store/context/actions.js +1 -1
  587. package/lib/store/context/contextMiddlewares.js +3 -2
  588. package/lib/store/context/models/INavContext.js +1 -1
  589. package/lib/store/context/models/INavContextState.js +1 -1
  590. package/lib/store/context/reducer.js +1 -1
  591. package/lib/store/dashboard/dashboardSlice.js +5 -3
  592. package/lib/store/dashboard/periodType.js +1 -1
  593. package/lib/store/edges/actionTypes.js +9 -5
  594. package/lib/store/edges/actions.js +1 -1
  595. package/lib/store/edges/models/IEdge.js +1 -1
  596. package/lib/store/edges/models/IEdgesState.js +1 -1
  597. package/lib/store/edges/reducer.js +1 -1
  598. package/lib/store/events/actionTypes.js +33 -17
  599. package/lib/store/events/actions.js +1 -1
  600. package/lib/store/events/models/IEvent.js +1 -1
  601. package/lib/store/events/models/IEventsState.js +1 -1
  602. package/lib/store/events/models/ISource.js +1 -1
  603. package/lib/store/events/reducer.js +1 -1
  604. package/lib/store/filters/IFilter.js +1 -1
  605. package/lib/store/filters/IFilterItem.js +1 -1
  606. package/lib/store/global/actionTypes.js +21 -11
  607. package/lib/store/global/actions.js +1 -1
  608. package/lib/store/global/models/IGlobalState.js +1 -1
  609. package/lib/store/global/reducer.js +1 -1
  610. package/lib/store/permissions/permissionsSlice.js +3 -2
  611. package/lib/store/points/actionTypes.js +5 -3
  612. package/lib/store/points/actions.js +1 -1
  613. package/lib/store/points/models/IGeoPoint.js +1 -1
  614. package/lib/store/points/models/IGroup.js +1 -1
  615. package/lib/store/points/models/IIssue.js +1 -1
  616. package/lib/store/points/models/IPoint.js +1 -1
  617. package/lib/store/points/models/IPointsState.js +1 -1
  618. package/lib/store/points/reducer.js +1 -1
  619. package/lib/store/rootActionTypes.js +3 -2
  620. package/lib/store/rootActions.js +1 -1
  621. package/lib/store/rootReducer.js +3 -2
  622. package/lib/store/rootStore.js +1 -1
  623. package/lib/store/samplings/action.js +1 -1
  624. package/lib/store/samplings/actionTypes.js +5 -4
  625. package/lib/store/samplings/actionsCreator.js +1 -1
  626. package/lib/store/samplings/models/Samplings.js +1 -1
  627. package/lib/store/samplings/reducer.js +1 -1
  628. package/lib/styles/StylesLayout.js +3 -2
  629. package/lib/styles/theme/theme.js +7 -4
  630. package/lib/test/mocks/browser.js +3 -2
  631. package/lib/test/test-utils.js +1 -1
  632. package/lib/ui-kit/Alert/KandoAlert.js +3 -2
  633. package/lib/ui-kit/Button/Button.js +7 -4
  634. package/lib/ui-kit/Button/Button.test.js +3 -3
  635. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  636. package/lib/ui-kit/Checkbox/Checkbox.js +5 -3
  637. package/lib/ui-kit/ContentCard/ContentCard.js +3 -2
  638. package/lib/ui-kit/Dashboard/Dashboard.js +5 -4
  639. package/lib/ui-kit/Dashboard/index.js +3 -2
  640. package/lib/ui-kit/DropDown/DropDown.js +3 -2
  641. package/lib/ui-kit/DropDown/DropDown.test.js +1 -1
  642. package/lib/ui-kit/DropDown/DropDownItem.js +5 -3
  643. package/lib/ui-kit/DropDown/DropdownToggle.js +5 -3
  644. package/lib/ui-kit/EmptyState/EmptyState.js +3 -2
  645. package/lib/ui-kit/IconAction/IconAction.js +3 -2
  646. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +5 -4
  647. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +3 -2
  648. package/lib/ui-kit/InletsPie/InletsPie.js +3 -2
  649. package/lib/ui-kit/InletsPie/index.js +3 -2
  650. package/lib/ui-kit/InletsPie/options.js +5 -3
  651. package/lib/ui-kit/KandoBottomSheet/KandoBottomSheet.js +5 -4
  652. package/lib/ui-kit/KandoFilter/KandoFilter.js +3 -2
  653. package/lib/ui-kit/KandoList/KandoList.js +5 -4
  654. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  655. package/lib/ui-kit/KandoTable/KandoTable.js +5 -4
  656. package/lib/ui-kit/KandoTable/KandoTable.test.js +1 -1
  657. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  658. package/lib/ui-kit/Layout/Layout.js +3 -2
  659. package/lib/ui-kit/MobileInput/MobileInput.js +3 -2
  660. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +3 -2
  661. package/lib/ui-kit/ModalConfirmation/index.js +3 -2
  662. package/lib/ui-kit/OrganicEvents/GaugeChart.js +3 -2
  663. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +3 -2
  664. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +3 -2
  665. package/lib/ui-kit/OrganicEvents/TextInfo.js +3 -2
  666. package/lib/ui-kit/OrganicEvents/index.js +3 -2
  667. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +3 -2
  668. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +3 -2
  669. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +5 -3
  670. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +5 -3
  671. package/lib/ui-kit/ScoreGauge/constant.js +3 -2
  672. package/lib/ui-kit/ScoreGauge/index.js +3 -2
  673. package/lib/ui-kit/TimeLineChart/TrendChart.js +3 -2
  674. package/lib/ui-kit/TimeLineChart/index.js +3 -2
  675. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +5 -3
  676. package/lib/ui-kit/Tooltip/Tooltip.js +3 -2
  677. package/lib/ui-kit/index.js +1 -1
  678. package/lib/ui-kit/kandoStepper/KandoStepper.js +3 -2
  679. package/lib/ui-kit/siteName/SiteName.js +3 -2
  680. package/lib/utilities/ActionUtility.js +1 -1
  681. package/lib/utilities/Alert.js +3 -2
  682. package/lib/utilities/Analytics.js +3 -2
  683. package/lib/utilities/Array.js +5 -3
  684. package/lib/utilities/Enum.js +27 -24
  685. package/lib/utilities/ErrorBoundary.js +9 -9
  686. package/lib/utilities/File.js +48 -42
  687. package/lib/utilities/GetDir.js +3 -2
  688. package/lib/utilities/KandoDate.js +5 -3
  689. package/lib/utilities/KandoModal.js +5 -4
  690. package/lib/utilities/LocalStorage.js +9 -5
  691. package/lib/utilities/ThousandsToK.js +3 -2
  692. package/lib/utilities/TimeFormat.js +5 -4
  693. package/lib/utilities/Truncate.js +5 -4
  694. package/lib/utilities/edgesMath.js +7 -6
  695. package/lib/utilities/i18n.js +3 -2
  696. package/lib/utilities/kql.js +5 -3
  697. package/lib/utilities/map/icons.js +3 -2
  698. package/lib/utilities/polylinedecorator.js +5 -3
  699. package/lib/utilities/scoreToData.js +11 -6
  700. package/lib/utilities/scoreToData.test.js +1 -1
  701. package/lib/utilities/time.js +7 -4
  702. package/lib/utilities/uploadToS3.js +3 -2
  703. package/lib/utilities/urls.js +7 -4
  704. package/package.json +1 -1
@@ -28,10 +28,11 @@ var _MapUtils = require("../MapUtils");
28
28
  var _PointIcon = require("./PointIcon");
29
29
  var _water_reuse = _interopRequireDefault(require("../../../assets/icons/water_reuse.svg"));
30
30
  var _utils = require("pages/DashboardMap/utils");
31
- var isCollectorFocused = exports.isCollectorFocused = function isCollectorFocused(point, event) {
31
+ var isCollectorFocused = function isCollectorFocused(point, event) {
32
32
  var _event$observations;
33
33
  return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
34
34
  };
35
+ exports.isCollectorFocused = isCollectorFocused;
35
36
  var buildManholeTooltipString = function buildManholeTooltipString(point) {
36
37
  var string = "".concat(point.group.name, " ");
37
38
  if (pointIsFactory(point)) {
@@ -42,32 +43,40 @@ var buildManholeTooltipString = function buildManholeTooltipString(point) {
42
43
  }
43
44
  return string;
44
45
  };
45
- var bubbleForWWTP = exports.bubbleForWWTP = function bubbleForWWTP(args) {
46
+ var bubbleForWWTP = function bubbleForWWTP(args) {
46
47
  var pointCustomIcon = _leaflet.default.marker(args.markerLocation, {
47
48
  icon: getIcon(args.wwtpPoint, false),
48
49
  riseOnHover: true
49
50
  });
51
+ pointCustomIcon['kando_object_id'] = args.wwtpPoint.id;
52
+ pointCustomIcon['kando_object'] = 'Point';
50
53
  return pointCustomIcon;
51
54
  };
52
- var createBubblePoint = exports.createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
55
+ exports.bubbleForWWTP = bubbleForWWTP;
56
+ var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
53
57
  var flow_rate_unit = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'gd_us';
54
58
  var handleClick = arguments.length > 6 ? arguments[6] : undefined;
55
59
  var subtitle = pointIsFactory(point) ? point.group.sector_name : '';
56
- var pointCustomIcon = _leaflet.default.marker(markerLocation, {
60
+ var markerOnMap = layerGroup.getLayers().find(function (layer) {
61
+ return layer.kando_object_id === point.id;
62
+ });
63
+ var pointCustomIcon = markerOnMap ? markerOnMap : _leaflet.default.marker(markerLocation, {
57
64
  icon: getIcon(point, false, subtitle),
58
65
  riseOnHover: true
59
66
  });
60
- // @ts-ignore
61
- // pointCustomIcon.bindTooltip(buildManholeTootipString(point));
62
- pointCustomIcon['kando_object_id'] = point.id;
63
- pointCustomIcon['kando_object'] = 'Point';
64
- pointCustomIcon['kando_has_device'] = point.has_device;
65
- if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
66
- layerGroup.addLayer(pointCustomIcon);
67
- if (pointIsFactory(point)) {
68
- bindPopupToMarker(point, pointCustomIcon, flow_rate_unit);
67
+ if (!markerOnMap) {
68
+ pointCustomIcon['kando_object_id'] = point.id;
69
+ pointCustomIcon['kando_object'] = 'Point';
70
+ pointCustomIcon['kando_has_device'] = point.has_device;
71
+ if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
72
+ layerGroup.addLayer(pointCustomIcon);
73
+ if (pointIsFactory(point)) {
74
+ bindPopupToMarker(point, pointCustomIcon, flow_rate_unit);
75
+ }
76
+ handleMarkerEvents(map, point, pointCustomIcon, handleClick);
69
77
  }
70
- handleMarkerEvents(map, point, pointCustomIcon, handleClick);
78
+
79
+ // Consider removing this, it's not functional and notused anywhere
71
80
  if (point.relatedEventsAmount) {
72
81
  var _pointCustomIcon = _leaflet.default.marker(markerLocation, {
73
82
  icon: _leaflet.default.divIcon({
@@ -83,7 +92,8 @@ var createBubblePoint = exports.createBubblePoint = function createBubblePoint(m
83
92
  if (hovered) _pointCustomIcon['kando_object'] = 'IconNumberHovered';
84
93
  }
85
94
  };
86
- var createManholePoint = exports.createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
95
+ exports.createBubblePoint = createBubblePoint;
96
+ var createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
87
97
  var pointIcon = new _leaflet.default.Icon({
88
98
  iconUrl: _whitePoint.default,
89
99
  iconSize: [9, 9],
@@ -100,7 +110,8 @@ var createManholePoint = exports.createManholePoint = function createManholePoin
100
110
  if (hovered) manholeIcon['kando_object'] = 'PointHovered';
101
111
  layerGroup.addLayer(manholeIcon);
102
112
  };
103
- var matchIconToPoint = exports.matchIconToPoint = function matchIconToPoint(point, event) {
113
+ exports.createManholePoint = createManholePoint;
114
+ var matchIconToPoint = function matchIconToPoint(point, event) {
104
115
  switch (point.group.type) {
105
116
  case 'Groups::Factory':
106
117
  if (combinedFactoryIcon.length === 2) {
@@ -153,7 +164,8 @@ var matchIconToPoint = exports.matchIconToPoint = function matchIconToPoint(poin
153
164
  return null;
154
165
  }
155
166
  };
156
- var standardBackground = exports.standardBackground = function standardBackground() {
167
+ exports.matchIconToPoint = matchIconToPoint;
168
+ var standardBackground = function standardBackground() {
157
169
  var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
158
170
  var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
159
171
  return _leaflet.default.icon({
@@ -163,7 +175,8 @@ var standardBackground = exports.standardBackground = function standardBackgroun
163
175
  popupAnchor: [0, -30]
164
176
  });
165
177
  };
166
- var combinedFactoryIcon = exports.combinedFactoryIcon = [_leaflet.default.icon({
178
+ exports.standardBackground = standardBackground;
179
+ var combinedFactoryIcon = [_leaflet.default.icon({
167
180
  iconUrl: _yellowCircle.default,
168
181
  iconSize: [0, 0],
169
182
  iconAnchor: [10.7, 33.7],
@@ -174,7 +187,8 @@ var combinedFactoryIcon = exports.combinedFactoryIcon = [_leaflet.default.icon({
174
187
  iconAnchor: [5, 30],
175
188
  popupAnchor: [0, -30]
176
189
  })];
177
- var combinedPumpStationIcon = exports.combinedPumpStationIcon = [_leaflet.default.icon({
190
+ exports.combinedFactoryIcon = combinedFactoryIcon;
191
+ var combinedPumpStationIcon = [_leaflet.default.icon({
178
192
  iconUrl: _greenCircle.default,
179
193
  iconSize: [0, 0],
180
194
  iconAnchor: [10.7, 33.7],
@@ -185,13 +199,15 @@ var combinedPumpStationIcon = exports.combinedPumpStationIcon = [_leaflet.defaul
185
199
  iconAnchor: [7, 32],
186
200
  popupAnchor: [0, -30]
187
201
  })];
188
- var combinedCollectorsIcon = exports.combinedCollectorsIcon = [_leaflet.default.icon({
202
+ exports.combinedPumpStationIcon = combinedPumpStationIcon;
203
+ var combinedCollectorsIcon = [_leaflet.default.icon({
189
204
  iconUrl: _pinWater.default,
190
205
  iconSize: [0, 0],
191
206
  iconAnchor: [25, 50],
192
207
  popupAnchor: [0, -30]
193
208
  })];
194
- var combinedWWTPIcon = exports.combinedWWTPIcon = [_leaflet.default.icon({
209
+ exports.combinedCollectorsIcon = combinedCollectorsIcon;
210
+ var combinedWWTPIcon = [_leaflet.default.icon({
195
211
  iconUrl: _brightBlueCircle.default,
196
212
  iconSize: [0, 0],
197
213
  iconAnchor: [10.7, 33.7],
@@ -202,7 +218,8 @@ var combinedWWTPIcon = exports.combinedWWTPIcon = [_leaflet.default.icon({
202
218
  iconAnchor: [8, 31],
203
219
  popupAnchor: [0, -30]
204
220
  })];
205
- var selectedBackground = exports.selectedBackground = function selectedBackground() {
221
+ exports.combinedWWTPIcon = combinedWWTPIcon;
222
+ var selectedBackground = function selectedBackground() {
206
223
  return _leaflet.default.icon({
207
224
  iconUrl: _redPinRedShadow.default,
208
225
  iconSize: [0, 0],
@@ -210,7 +227,8 @@ var selectedBackground = exports.selectedBackground = function selectedBackgroun
210
227
  popupAnchor: [0, -30]
211
228
  });
212
229
  };
213
- var belongsToSourceBackground = exports.belongsToSourceBackground = function belongsToSourceBackground() {
230
+ exports.selectedBackground = selectedBackground;
231
+ var belongsToSourceBackground = function belongsToSourceBackground() {
214
232
  return _leaflet.default.icon({
215
233
  iconUrl: _whitePinRedShadow.default,
216
234
  iconSize: [0, 0],
@@ -218,7 +236,8 @@ var belongsToSourceBackground = exports.belongsToSourceBackground = function bel
218
236
  popupAnchor: [0, -30]
219
237
  });
220
238
  };
221
- var markerBelongsToSelectedSource = exports.markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
239
+ exports.belongsToSourceBackground = belongsToSourceBackground;
240
+ var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
222
241
  var source;
223
242
  if (event !== null && event !== undefined) {
224
243
  source = event.sources.filter(function (source) {
@@ -227,13 +246,15 @@ var markerBelongsToSelectedSource = exports.markerBelongsToSelectedSource = func
227
246
  }
228
247
  return event !== null && source && event.selected_source === source.point_id;
229
248
  };
230
- var markerBelongsToSource = exports.markerBelongsToSource = function markerBelongsToSource(event, point) {
249
+ exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
250
+ var markerBelongsToSource = function markerBelongsToSource(event, point) {
231
251
  if (event === undefined) return;
232
252
  return event !== null && event.sources.filter(function (source) {
233
253
  return source.point_id === point.id;
234
254
  })[0];
235
255
  };
236
- var createSamplingIconPoint = exports.createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
256
+ exports.markerBelongsToSource = markerBelongsToSource;
257
+ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
237
258
  // iconSize: [width, height],
238
259
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
239
260
  var samplingIcon = [_leaflet.default.icon({
@@ -272,7 +293,8 @@ var createSamplingIconPoint = exports.createSamplingIconPoint = function createS
272
293
  layerGroup.addLayer(pointCustomIcon);
273
294
  });
274
295
  };
275
- var createObservationIconPoint = exports.createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
296
+ exports.createSamplingIconPoint = createSamplingIconPoint;
297
+ var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
276
298
  // iconSize: [width, height],
277
299
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
278
300
  var observationIcon = [_leaflet.default.icon({
@@ -309,7 +331,8 @@ var createObservationIconPoint = exports.createObservationIconPoint = function c
309
331
  layerGroup.addLayer(pointCustomIcon);
310
332
  });
311
333
  };
312
- var createSamplingIcons = exports.createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
334
+ exports.createObservationIconPoint = createObservationIconPoint;
335
+ var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
313
336
  var sampledPointIds = event.samplings.map(function (s) {
314
337
  return s.point_id;
315
338
  });
@@ -317,25 +340,28 @@ var createSamplingIcons = exports.createSamplingIcons = function createSamplingI
317
340
  createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered, layerGroup);
318
341
  }
319
342
  };
320
- var popupContent = exports.popupContent = function popupContent(obs, point) {
343
+ exports.createSamplingIcons = createSamplingIcons;
344
+ var popupContent = function popupContent(obs, point) {
321
345
  if (obs === null) {
322
346
  return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
323
347
  } else {
324
348
  return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
325
349
  }
326
350
  };
351
+ exports.popupContent = popupContent;
327
352
  var getIcon = function getIcon(point, clicked, subtitle) {
328
353
  var type = point.has_device ? point.group.type : 'Groups::default';
329
354
  var subtitleText = subtitle ? subtitle : point.group.sector_name;
330
355
  return (0, _PointIcon.getPointIconByType)(type, point.name, subtitleText, clicked, !clicked);
331
356
  };
332
- var setIcon = exports.setIcon = function setIcon(element, clicked, point) {
333
- element.setIcon(getIcon(point, clicked));
357
+ var setIcon = function setIcon(element, clicked, point, subtitle) {
358
+ element.setIcon(getIcon(point, clicked, subtitle));
334
359
  };
335
360
 
336
361
  // round to nearest thousand is used when you want to round the water consumption to the nearest thousand
337
362
  // for example: 234,567 -> 235,000
338
- var calculateWaterConsumption = exports.calculateWaterConsumption = function calculateWaterConsumption(flow_rate_unit, waterConsumption) {
363
+ exports.setIcon = setIcon;
364
+ var calculateWaterConsumption = function calculateWaterConsumption(flow_rate_unit, waterConsumption) {
339
365
  var round_to_nearest_k = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
340
366
  var calculated = '0';
341
367
  if (waterConsumption > 0) {
@@ -357,6 +383,7 @@ var calculateWaterConsumption = exports.calculateWaterConsumption = function cal
357
383
  return Math.round(parseFloat(calculated)).toLocaleString();
358
384
  }
359
385
  };
386
+ exports.calculateWaterConsumption = calculateWaterConsumption;
360
387
  var roundToNearestThousand = function roundToNearestThousand(number) {
361
388
  // if(isAlreadyRounded(number)) {
362
389
  // return number;
@@ -374,10 +401,11 @@ var roundToNearestThousand = function roundToNearestThousand(number) {
374
401
  // return number === Math.round(number);
375
402
  // }
376
403
 
377
- var translateFlowRate = exports.translateFlowRate = function translateFlowRate(flow_rate_unit) {
404
+ var translateFlowRate = function translateFlowRate(flow_rate_unit) {
378
405
  return _i18n.default.t("dashboard_v2.profile.flow_rate_unit_options.".concat(flow_rate_unit.includes('gd') ? 'gd' : flow_rate_unit));
379
406
  };
380
- var handleMarkerEvents = exports.handleMarkerEvents = function handleMarkerEvents(map, point, pointCustomIcon, handleClick) {
407
+ exports.translateFlowRate = translateFlowRate;
408
+ var handleMarkerEvents = function handleMarkerEvents(map, point, pointCustomIcon, handleClick) {
381
409
  var tooltipVisible = false;
382
410
  map.on('zoomstart', function () {
383
411
  map.closePopup();
@@ -412,7 +440,8 @@ var handleMarkerEvents = exports.handleMarkerEvents = function handleMarkerEvent
412
440
  });
413
441
  }
414
442
  };
415
- var bindPopupToMarker = exports.bindPopupToMarker = function bindPopupToMarker(point, layerGroup, flow_rate_unit) {
443
+ exports.handleMarkerEvents = handleMarkerEvents;
444
+ var bindPopupToMarker = function bindPopupToMarker(point, layerGroup, flow_rate_unit) {
416
445
  var content = "\n <div class='main-content'>\n <div class='main-content__header'>\n <div class=\"main-content__header__titles\">\n <div class='main-content__header__titles__title'>".concat(point.name, "</div>\n <div class='main-content__header__titles__subtitle'>").concat(point.group.sector_name, "</div>\n </div>\n </div>\n \n <div class='main-content__body'>\n <div class='main-content__body__item'>\n <div class='main-content__body__item__icon'>\n <img src='").concat(_water_reuse.default, "' />\n </div>\n <div class='main-content__body__item__titles'>\n <div class='main-content__body__item__titles__title'>\n ").concat(getFlowRate(point.group.water_discharge, flow_rate_unit), "\n </div>\n <div class='main-content__body__item__titles__subtitle'>").concat(_i18n.default.t('water_discharge'), "</div>\n </div>\n </div>\n </div>\n </div>\n ");
417
446
  layerGroup.bindPopup(content, {
418
447
  className: 'point-marker-popup',
@@ -421,33 +450,40 @@ var bindPopupToMarker = exports.bindPopupToMarker = function bindPopupToMarker(p
421
450
  closeButton: true
422
451
  });
423
452
  };
424
- var getFlowRate = exports.getFlowRate = function getFlowRate(waterConsumption, flowRateUnit) {
453
+ exports.bindPopupToMarker = bindPopupToMarker;
454
+ var getFlowRate = function getFlowRate(waterConsumption, flowRateUnit) {
425
455
  var isRound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
426
456
  if (waterConsumption > 0) {
427
457
  return calculateWaterConsumption(flowRateUnit, waterConsumption, isRound) + ' ' + translateFlowRate(flowRateUnit);
428
458
  }
429
459
  return _i18n.default.t('events_overview.severities.unknown');
430
460
  };
431
- var removeLayerGroup = exports.removeLayerGroup = function removeLayerGroup(map, layerGroup) {
461
+ exports.getFlowRate = getFlowRate;
462
+ var removeLayerGroup = function removeLayerGroup(map, layerGroup) {
432
463
  if (map.hasLayer(layerGroup)) {
433
464
  map.removeLayer(layerGroup);
434
465
  }
435
466
  };
436
- var _addLayerGroup = exports.addLayerGroup = function addLayerGroup(map, layerGroup) {
467
+ exports.removeLayerGroup = removeLayerGroup;
468
+ var addLayerGroup = function addLayerGroup(map, layerGroup) {
437
469
  if (!map.hasLayer(layerGroup)) {
438
470
  map.addLayer(layerGroup);
439
471
  } else {
440
472
  removeLayerGroup(map, layerGroup);
441
- _addLayerGroup(map, layerGroup);
473
+ addLayerGroup(map, layerGroup);
442
474
  }
443
475
  };
444
- var pointIsWWTP = exports.pointIsWWTP = function pointIsWWTP(point) {
476
+ exports.addLayerGroup = addLayerGroup;
477
+ var pointIsWWTP = function pointIsWWTP(point) {
445
478
  return point.group.type === 'Groups::WastewaterTreatmentPlant';
446
479
  };
447
- var pointIsFactory = exports.pointIsFactory = function pointIsFactory(point) {
480
+ exports.pointIsWWTP = pointIsWWTP;
481
+ var pointIsFactory = function pointIsFactory(point) {
448
482
  return isFactoryType(point.group.type);
449
483
  };
450
- var isFactoryType = exports.isFactoryType = function isFactoryType(type) {
484
+ exports.pointIsFactory = pointIsFactory;
485
+ var isFactoryType = function isFactoryType(type) {
451
486
  return type === 'Groups::Factory';
452
487
  };
453
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwiZXhwb3J0cyIsInBvaW50IiwiZXZlbnQiLCJfZXZlbnQkb2JzZXJ2YXRpb25zIiwib2JzZXJ2YXRpb25zIiwibGVuZ3RoIiwiaWQiLCJwb2ludF9pZCIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJjb25jYXQiLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0SWNvbiIsInd3dHBQb2ludCIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsImhhc19kZXZpY2UiLCJhZGRMYXllciIsImJpbmRQb3B1cFRvTWFya2VyIiwiaGFuZGxlTWFya2VyRXZlbnRzIiwicmVsYXRlZEV2ZW50c0Ftb3VudCIsImRpdkljb24iLCJjbGFzc05hbWUiLCJodG1sIiwiaWNvbkFuY2hvciIsImV2ZW50c0NvdW50SWNvbiIsIl96b29tIiwib3BhY2l0eSIsImNyZWF0ZU1hbmhvbGVQb2ludCIsInBvaW50SWNvbiIsIkljb24iLCJpY29uVXJsIiwid2hpdGVQb2ludCIsImljb25TaXplIiwibWFuaG9sZUljb24iLCJNYXJrZXIiLCJiaW5kVG9vbHRpcCIsIm1hdGNoSWNvblRvUG9pbnQiLCJ0eXBlIiwiY29tYmluZWRGYWN0b3J5SWNvbiIsIm1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlIiwidW5zaGlmdCIsInNlbGVjdGVkQmFja2dyb3VuZCIsIm1hcmtlckJlbG9uZ3NUb1NvdXJjZSIsImJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQiLCJzdGFuZGFyZEJhY2tncm91bmQiLCJjb21iaW5lZFB1bXBTdGF0aW9uSWNvbiIsImNvbWJpbmVkV1dUUEljb24iLCJyZWRQaW5SZWRTaGFkb3ciLCJ3YXRlckljb25Ob0JhY2tncm91bmQiLCJwb3B1cEFuY2hvciIsImNvbWJpbmVkQ29sbGVjdG9yc0ljb24iLCJzZWNvbmRhcnkiLCJ0aGlyZCIsIndoaXRlUGluQmxhY2tTaGFkb3ciLCJ5ZWxsb3dDaXJjbGVVUkwiLCJwbGFudEljb25VUkwiLCJncmVlbkNpcmNsZVVSTCIsInB1bXBTdGF0aW9uSWNvblVSTCIsImNvbGxlY3Rvckljb24iLCJicmlnaHRCbHVlQ2lyY2xlVVJMIiwiV1dUUEljb25VUkwiLCJ3aGl0ZVBpblJlZFNoYWRvdyIsInNvdXJjZSIsInNvdXJjZXMiLCJmaWx0ZXIiLCJzZWxlY3RlZF9zb3VyY2UiLCJjcmVhdGVTYW1wbGluZ0ljb25Qb2ludCIsInNlY29uZGFyeUljb24iLCJzYW1wbGluZ0ljb24iLCJibHVlQ2lyY2xlVVJMIiwic2FtcGxpbmdJY29uVVJMIiwidGhpcmRJY29uIiwiZm9yRWFjaCIsImluZGV4IiwiY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQiLCJvYnNlcnZhdGlvbkljb24iLCJwaW5rQ2lyY2xlVVJMIiwib2JzZXJ2YXRpb25JY29uVVJMIiwiY3JlYXRlU2FtcGxpbmdJY29ucyIsInNhbXBsZWRQb2ludElkcyIsInNhbXBsaW5ncyIsInMiLCJpbmNsdWRlcyIsInBvcHVwQ29udGVudCIsIm9icyIsIkdyYXBoSWNvbiIsImkxOG4iLCJ0Iiwic2V2ZXJpdHkiLCJjbGlja2VkIiwic3VidGl0bGVUZXh0IiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwic2V0SWNvbiIsImVsZW1lbnQiLCJjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uIiwid2F0ZXJDb25zdW1wdGlvbiIsInJvdW5kX3RvX25lYXJlc3RfayIsImNhbGN1bGF0ZWQiLCJ0b0ZpeGVkIiwicm91bmRUb05lYXJlc3RUaG91c2FuZCIsInBhcnNlRmxvYXQiLCJ0b0xvY2FsZVN0cmluZyIsIk1hdGgiLCJyb3VuZCIsIm51bWJlciIsInJvdW5kZWRUaG91c2FuZHMiLCJyb3VuZGVkVmFsdWUiLCJ0cmFuc2xhdGVGbG93UmF0ZSIsInRvb2x0aXBWaXNpYmxlIiwib24iLCJjbG9zZVBvcHVwIiwiaXNQb3B1cE9wZW4iLCJrYW5kb19vYmplY3RfaWQiLCJzZW5kQW5hbHl0aWNzRXZlbnQiLCJwb2ludF9uYW1lIiwiY29udGVudCIsIndhdGVyUmV1c2VJY29uIiwiZ2V0Rmxvd1JhdGUiLCJiaW5kUG9wdXAiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiY2xvc2VCdXR0b24iLCJmbG93UmF0ZVVuaXQiLCJpc1JvdW5kIiwicmVtb3ZlTGF5ZXJHcm91cCIsImhhc0xheWVyIiwicmVtb3ZlTGF5ZXIiLCJhZGRMYXllckdyb3VwIiwicG9pbnRJc1dXVFAiLCJpc0ZhY3RvcnlUeXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL1dpZGdldHMvTWFwL3BvaW50cy9Qb2ludFV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5pbXBvcnQgeyBldmVudHNDb3VudEljb24gfSBmcm9tICcuLi9NYXBVdGlscyc7XG5pbXBvcnQgeyBnZXRQb2ludEljb25CeVR5cGUgfSBmcm9tICcuL1BvaW50SWNvbic7XG5pbXBvcnQgd2F0ZXJSZXVzZUljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2ljb25zL3dhdGVyX3JldXNlLnN2Zyc7XG5pbXBvcnQgeyBzZW5kQW5hbHl0aWNzRXZlbnQgfSBmcm9tICdzcmMvcGFnZXMvRGFzaGJvYXJkTWFwL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzQ29sbGVjdG9yRm9jdXNlZCA9IChwb2ludDogSVBvaW50LCBldmVudDogSUV2ZW50KSA9PiB7XG4gIHJldHVybiAoXG4gICAgZXZlbnQ/Lm9ic2VydmF0aW9ucz8ubGVuZ3RoID09PSAxICYmXG4gICAgcG9pbnQuaWQgPT09IGV2ZW50Lm9ic2VydmF0aW9uc1swXS5wb2ludF9pZFxuICApO1xufTtcblxuY29uc3QgYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzdHJpbmcgPSBgJHtwb2ludC5ncm91cC5uYW1lfSBgO1xuXG4gIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICBzdHJpbmcgKz0gYDxici8+U2VjdG9yOiAke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfWA7XG4gICAgc3RyaW5nICs9IGA8YnIvPldhdGVyIENvbnN1bXB0aW9uOiAke3BvaW50Lmdyb3VwLndhdGVyX2Rpc2NoYXJnZX1gO1xuICB9IGVsc2Uge1xuICAgIHN0cmluZyA9IGAke3BvaW50Lm5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgYnViYmxlRm9yV1dUUCA9IChhcmdzKSA9PiB7XG4gIGNvbnN0IHBvaW50Q3VzdG9tSWNvbjogTC5NYXJrZXIgPSBMLm1hcmtlcihhcmdzLm1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogZ2V0SWNvbihhcmdzLnd3dHBQb2ludCwgZmFsc2UpLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gcG9pbnRDdXN0b21JY29uO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJ1YmJsZVBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuICBmbG93X3JhdGVfdW5pdCA9ICdnZF91cycsXG4gIGhhbmRsZUNsaWNrPyxcbikgPT4ge1xuICBjb25zdCBzdWJ0aXRsZSA9IHBvaW50SXNGYWN0b3J5KHBvaW50KSA/IHBvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lIDogJyc7XG4gIGxldCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBnZXRJY29uKHBvaW50LCBmYWxzZSwgc3VidGl0bGUpLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faGFzX2RldmljZSddID0gcG9pbnQuaGFzX2RldmljZTtcbiAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcblxuICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICBiaW5kUG9wdXBUb01hcmtlcihwb2ludCwgcG9pbnRDdXN0b21JY29uLCBmbG93X3JhdGVfdW5pdCk7XG4gIH1cblxuICBoYW5kbGVNYXJrZXJFdmVudHMobWFwLCBwb2ludCwgcG9pbnRDdXN0b21JY29uLCBoYW5kbGVDbGljayk7XG5cbiAgaWYgKHBvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQpIHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IEwuZGl2SWNvbih7XG4gICAgICAgIGNsYXNzTmFtZTogYFxuICAgICAgICAgICR7XG4gICAgICAgICAgICBwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID49IDEwMFxuICAgICAgICAgICAgICA/ICdjaXJjbGUtZXZlbnRzLWFtb3VudCBjaXJjbGUtZXZlbnRzLWFtb3VudC0tdHJpZGlnaXQnXG4gICAgICAgICAgICAgIDogJ2NpcmNsZS1ldmVudHMtYW1vdW50J1xuICAgICAgICAgIH0gXG4gICAgICAgICAgJHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID4gMiA/ICdhbGVydC1jb2xvcicgOiAnJ31cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGh0bWw6IGA8cD4ke3BvaW50LnJlbGF0ZWRFdmVudHNBbW91bnR9PC9wPmAsXG4gICAgICAgIGljb25BbmNob3I6IGV2ZW50c0NvdW50SWNvbihtYXAuX3pvb20pLmljb25BbmNob3IsXG4gICAgICB9KSxcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICAgIG9wYWNpdHk6IGhvdmVyZWQgPyAxIDogMCxcbiAgICB9KTtcblxuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXInO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXJIb3ZlcmVkJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbmhvbGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gbmV3IEwuSWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICBpY29uU2l6ZTogWzksIDldLFxuICAgIGljb25BbmNob3I6IFs0LjUsIDQuNV0sXG4gIH0pO1xuICBsZXQgbWFuaG9sZUljb246IGFueSA9IG5ldyBMLk1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IHBvaW50SWNvbixcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIG1hbmhvbGVJY29uWydrYW5kb19wb2ludF90eXBlJ10gPSAnTWFuaG9sZSc7XG4gIGlmIChob3ZlcmVkKSBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcbiAgbGF5ZXJHcm91cC5hZGRMYXllcihtYW5ob2xlSWNvbik7XG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2hJY29uVG9Qb2ludCA9IChwb2ludDogSVBvaW50LCBldmVudDogSUV2ZW50KSA9PiB7XG4gIHN3aXRjaCAocG9pbnQuZ3JvdXAudHlwZSkge1xuICAgIGNhc2UgJ0dyb3Vwczo6RmFjdG9yeSc6XG4gICAgICBpZiAoY29tYmluZWRGYWN0b3J5SWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRGYWN0b3J5SWNvbjtcbiAgICBjYXNlICdHcm91cHM6OlB1bXBTdGF0aW9uJzpcbiAgICAgIGlmIChjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRQdW1wU3RhdGlvbkljb247XG4gICAgY2FzZSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnOlxuICAgICAgaWYgKGNvbWJpbmVkV1dUUEljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkV1dUUEljb247XG5cbiAgICBjYXNlICdHcm91cHM6OkNvbGxlY3RvcnMnOlxuICAgICAgaWYgKGlzQ29sbGVjdG9yRm9jdXNlZChwb2ludCwgZXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgTC5pY29uKHtcbiAgICAgICAgICAgIGljb25Vcmw6IHJlZFBpblJlZFNoYWRvdyxcbiAgICAgICAgICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMzAsIDUyXSxcbiAgICAgICAgICB9KSxcblxuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiB3YXRlckljb25Ob0JhY2tncm91bmQsXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMjIsIDQ0XSxcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZEJhY2tncm91bmQgPSAoXG4gIHNlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgaWNvblNpemU6IHNlY29uZGFyeSA/IFswLCAwXSA6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnkgJiYgdGhpcmQgPyBbLTIsIDE5XSA6IHNlY29uZGFyeSA/IFstMiwgNDRdIDogWzIwLCA0Ml0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZEZhY3RvcnlJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHllbGxvd0NpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs1LCAzMF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBncmVlbkNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHB1bXBTdGF0aW9uSWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs3LCAzMl0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZENvbGxlY3RvcnNJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgIGljb25BbmNob3I6IFsyNSwgNTBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRXV1RQSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBicmlnaHRCbHVlQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogV1dUUEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbOCwgMzFdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMzIsIDU0XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQgPSAoKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzb3VyY2U7XG5cbiAgaWYgKGV2ZW50ICE9PSBudWxsICYmIGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzb3VyY2UgPSBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXTtcbiAgfVxuXG4gIHJldHVybiBldmVudCAhPT0gbnVsbCAmJiBzb3VyY2UgJiYgZXZlbnQuc2VsZWN0ZWRfc291cmNlID09PSBzb3VyY2UucG9pbnRfaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU291cmNlID0gKGV2ZW50OiBJRXZlbnQsIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgcmV0dXJuIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5wb2ludF9pZCA9PT0gcG9pbnQuaWQpWzBdXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IHNhbXBsaW5nSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogYmx1ZUNpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgMTVdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBzYW1wbGluZ0ljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDEzXSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgbGV0IHRoaXJkSWNvbiA9IGZhbHNlO1xuICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcmRJY29uID0gdHJ1ZTtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbiwgdGhpcmRJY29uKSk7XG4gIH1cblxuICBzYW1wbGluZ0ljb24uZm9yRWFjaCgoaWNvbiwgaW5kZXgpID0+IHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSB0aGlyZEljb24gPyBmYWxzZSA6IHNlY29uZGFyeUljb247XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb190aGlyZCddID0gdGhpcmRJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1NhbXBsaW5nJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZ0hvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IG9ic2VydmF0aW9uSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogcGlua0NpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgNDBdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBvYnNlcnZhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDM4XSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uKSk7XG4gIH1cblxuICBvYnNlcnZhdGlvbkljb24uZm9yRWFjaCgoaWNvbiwgaW5kZXgpID0+IHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IGZhbHNlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29ucyA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBldmVudDogSUV2ZW50LFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQsXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIGxldCBzYW1wbGVkUG9pbnRJZHMgPSBldmVudC5zYW1wbGluZ3MubWFwKChzKSA9PiBzLnBvaW50X2lkKTtcbiAgaWYgKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc2FtcGxpbmdzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHNhbXBsZWRQb2ludElkcy5pbmNsdWRlcyhwb2ludC5pZClcbiAgKSB7XG4gICAgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQoXG4gICAgICBtYXJrZXJMb2NhdGlvbixcbiAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQsIGV2ZW50KSAhPT0gbnVsbCxcbiAgICAgIG1hcCxcbiAgICAgIHBvaW50LFxuICAgICAgZXZlbnQsXG4gICAgICBob3ZlcmVkLFxuICAgICAgbGF5ZXJHcm91cCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuXG5jb25zdCBnZXRJY29uID0gKHBvaW50OiBJUG9pbnQsIGNsaWNrZWQ6IGJvb2xlYW4sIHN1YnRpdGxlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdHlwZSA9IHBvaW50Lmhhc19kZXZpY2UgPyBwb2ludC5ncm91cC50eXBlIDogJ0dyb3Vwczo6ZGVmYXVsdCc7XG4gIGNvbnN0IHN1YnRpdGxlVGV4dCA9IHN1YnRpdGxlID8gc3VidGl0bGUgOiBwb2ludC5ncm91cC5zZWN0b3JfbmFtZTtcbiAgcmV0dXJuIGdldFBvaW50SWNvbkJ5VHlwZSh0eXBlLCBwb2ludC5uYW1lLCBzdWJ0aXRsZVRleHQsIGNsaWNrZWQsICFjbGlja2VkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJY29uID0gKGVsZW1lbnQsIGNsaWNrZWQsIHBvaW50KSA9PiB7XG4gIGVsZW1lbnQuc2V0SWNvbihnZXRJY29uKHBvaW50LCBjbGlja2VkKSk7XG59O1xuXG4vLyByb3VuZCB0byBuZWFyZXN0IHRob3VzYW5kIGlzIHVzZWQgd2hlbiB5b3Ugd2FudCB0byByb3VuZCB0aGUgd2F0ZXIgY29uc3VtcHRpb24gdG8gdGhlIG5lYXJlc3QgdGhvdXNhbmRcbi8vIGZvciBleGFtcGxlOiAyMzQsNTY3IC0+IDIzNSwwMDBcbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uID0gKFxuICBmbG93X3JhdGVfdW5pdDogc3RyaW5nLFxuICB3YXRlckNvbnN1bXB0aW9uOiBudW1iZXIsXG4gIHJvdW5kX3RvX25lYXJlc3RfazogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGxldCBjYWxjdWxhdGVkID0gJzAnO1xuXG4gIGlmICh3YXRlckNvbnN1bXB0aW9uID4gMCkge1xuICAgIHN3aXRjaCAoZmxvd19yYXRlX3VuaXQpIHtcbiAgICAgIGNhc2UgJ20zZCc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSB3YXRlckNvbnN1bXB0aW9uLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2RfdXMnOlxuICAgICAgICBjYWxjdWxhdGVkID0gKHdhdGVyQ29uc3VtcHRpb24gKiAyNjQuMTcyKS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dkX3VrJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9ICh3YXRlckNvbnN1bXB0aW9uICogMjE5Ljk2OSkudG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChyb3VuZF90b19uZWFyZXN0X2spIHtcbiAgICByZXR1cm4gcm91bmRUb05lYXJlc3RUaG91c2FuZChwYXJzZUZsb2F0KGNhbGN1bGF0ZWQpKS50b0xvY2FsZVN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoY2FsY3VsYXRlZCkpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cbn07XG5cbmNvbnN0IHJvdW5kVG9OZWFyZXN0VGhvdXNhbmQgPSAobnVtYmVyKSA9PiB7XG4gIC8vIGlmKGlzQWxyZWFkeVJvdW5kZWQobnVtYmVyKSkge1xuICAvLyAgIHJldHVybiBudW1iZXI7XG4gIC8vIH1cblxuICBpZiAobnVtYmVyIDwgMTAwMCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gIH1cblxuICBjb25zdCByb3VuZGVkVGhvdXNhbmRzID0gTWF0aC5yb3VuZChudW1iZXIgLyAxMDAwKTtcbiAgY29uc3Qgcm91bmRlZFZhbHVlID0gcm91bmRlZFRob3VzYW5kcyAqIDEwMDA7XG5cbiAgcmV0dXJuIHJvdW5kZWRWYWx1ZTtcbn07XG5cbi8vIGNvbnN0IGlzQWxyZWFkeVJvdW5kZWQgPSAobnVtYmVyKSA9PiB7XG4vLyAgIHJldHVybiBudW1iZXIgPT09IE1hdGgucm91bmQobnVtYmVyKTtcbi8vIH1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZUZsb3dSYXRlID0gKGZsb3dfcmF0ZV91bml0KSA9PiB7XG4gIHJldHVybiBpMThuLnQoXG4gICAgYGRhc2hib2FyZF92Mi5wcm9maWxlLmZsb3dfcmF0ZV91bml0X29wdGlvbnMuJHtcbiAgICAgIGZsb3dfcmF0ZV91bml0LmluY2x1ZGVzKCdnZCcpID8gJ2dkJyA6IGZsb3dfcmF0ZV91bml0XG4gICAgfWAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlTWFya2VyRXZlbnRzID0gKFxuICBtYXAsXG4gIHBvaW50LFxuICBwb2ludEN1c3RvbUljb24sXG4gIGhhbmRsZUNsaWNrLFxuKSA9PiB7XG4gIGxldCB0b29sdGlwVmlzaWJsZSA9IGZhbHNlO1xuXG4gIG1hcC5vbignem9vbXN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgIG1hcC5jbG9zZVBvcHVwKCk7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBjbG9zZScsICgpID0+IHtcbiAgICAvLyBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgZmFsc2UsIHBvaW50KTtcbiAgICB0b29sdGlwVmlzaWJsZSA9IGZhbHNlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ3BvcHVwb3BlbicsICgpID0+IHtcbiAgICAvLyBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgdHJ1ZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdtb3VzZW92ZXInLCAoKSA9PiB7XG4gICAgaWYgKHRvb2x0aXBWaXNpYmxlKSByZXR1cm47XG5cbiAgICBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgdHJ1ZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICBpZiAocG9pbnRDdXN0b21JY29uLmlzUG9wdXBPcGVuKCkpIHJldHVybjtcblxuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCBmYWxzZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwb2ludEN1c3RvbUljb24ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgaGFuZGxlQ2xpY2socG9pbnRDdXN0b21JY29uLmthbmRvX29iamVjdF9pZCk7XG5cbiAgICAgIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICAgICAgc2VuZEFuYWx5dGljc0V2ZW50KCdNYXAgVmlldyAtIEZhY3RvcnkgY2xpY2tlZCcsICdtYXAnLCB7XG4gICAgICAgICAgcG9pbnRfaWQ6IHBvaW50LmlkLFxuICAgICAgICAgIHBvaW50X25hbWU6IHBvaW50Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYmluZFBvcHVwVG9NYXJrZXIgPSAocG9pbnQsIGxheWVyR3JvdXAsIGZsb3dfcmF0ZV91bml0KSA9PiB7XG4gIGxldCBjb250ZW50ID0gYFxuICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudCc+XG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fdGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5uYW1lXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyX190aXRsZXNfX3N1YnRpdGxlJz4ke1xuICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keSc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW0nPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9faWNvbic+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScke3dhdGVyUmV1c2VJY29ufScgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlcyc+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fdGl0bGUnPlxuICAgICAgICAgICAgICAgICAgICAke2dldEZsb3dSYXRlKHBvaW50Lmdyb3VwLndhdGVyX2Rpc2NoYXJnZSwgZmxvd19yYXRlX3VuaXQpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fc3VidGl0bGUnPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAnd2F0ZXJfZGlzY2hhcmdlJyxcbiAgICAgICAgICAgICAgICAgICl9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYDtcblxuICBsYXllckdyb3VwLmJpbmRQb3B1cChjb250ZW50LCB7XG4gICAgY2xhc3NOYW1lOiAncG9pbnQtbWFya2VyLXBvcHVwJyxcbiAgICBtaW5XaWR0aDogJzIxNHB4JyxcbiAgICBtYXhXaWR0aDogJzIxNHB4JyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmxvd1JhdGUgPSAoXG4gIHdhdGVyQ29uc3VtcHRpb246IG51bWJlcixcbiAgZmxvd1JhdGVVbml0OiBzdHJpbmcsXG4gIGlzUm91bmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICBpZiAod2F0ZXJDb25zdW1wdGlvbiA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbihmbG93UmF0ZVVuaXQsIHdhdGVyQ29uc3VtcHRpb24sIGlzUm91bmQpICtcbiAgICAgICcgJyArXG4gICAgICB0cmFuc2xhdGVGbG93UmF0ZShmbG93UmF0ZVVuaXQpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gaTE4bi50KCdldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdGllcy51bmtub3duJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKG1hcC5oYXNMYXllcihsYXllckdyb3VwKSkge1xuICAgIG1hcC5yZW1vdmVMYXllcihsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXAgPSAobWFwLCBsYXllckdyb3VwKSA9PiB7XG4gIGlmICghbWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLmFkZExheWVyKGxheWVyR3JvdXApO1xuICB9IGVsc2Uge1xuICAgIHJlbW92ZUxheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgICBhZGRMYXllckdyb3VwKG1hcCwgbGF5ZXJHcm91cCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwb2ludElzV1dUUCA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIHJldHVybiBwb2ludC5ncm91cC50eXBlID09PSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50SXNGYWN0b3J5ID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgcmV0dXJuIGlzRmFjdG9yeVR5cGUocG9pbnQuZ3JvdXAudHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNGYWN0b3J5VHlwZSA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHR5cGUgPT09ICdHcm91cHM6OkZhY3RvcnknO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFBMkMsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUcsYUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUksV0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUssZ0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQU8zQyxJQUFBTSxnQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFR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
488
+ exports.isFactoryType = isFactoryType;
489
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJjb25jYXQiLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0SWNvbiIsInd3dHBQb2ludCIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsIm1hcmtlck9uTWFwIiwiZ2V0TGF5ZXJzIiwiZmluZCIsImxheWVyIiwia2FuZG9fb2JqZWN0X2lkIiwiaGFzX2RldmljZSIsImFkZExheWVyIiwiYmluZFBvcHVwVG9NYXJrZXIiLCJoYW5kbGVNYXJrZXJFdmVudHMiLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJpY29uQW5jaG9yIiwiZXZlbnRzQ291bnRJY29uIiwiX3pvb20iLCJvcGFjaXR5IiwiY3JlYXRlTWFuaG9sZVBvaW50IiwicG9pbnRJY29uIiwiSWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsIk1hcmtlciIsImJpbmRUb29sdGlwIiwibWF0Y2hJY29uVG9Qb2ludCIsInR5cGUiLCJjb21iaW5lZEZhY3RvcnlJY29uIiwibWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UiLCJ1bnNoaWZ0Iiwic2VsZWN0ZWRCYWNrZ3JvdW5kIiwibWFya2VyQmVsb25nc1RvU291cmNlIiwiYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCIsInN0YW5kYXJkQmFja2dyb3VuZCIsImNvbWJpbmVkUHVtcFN0YXRpb25JY29uIiwiY29tYmluZWRXV1RQSWNvbiIsInJlZFBpblJlZFNoYWRvdyIsIndhdGVySWNvbk5vQmFja2dyb3VuZCIsInBvcHVwQW5jaG9yIiwiY29tYmluZWRDb2xsZWN0b3JzSWNvbiIsInNlY29uZGFyeSIsInRoaXJkIiwid2hpdGVQaW5CbGFja1NoYWRvdyIsInllbGxvd0NpcmNsZVVSTCIsInBsYW50SWNvblVSTCIsImdyZWVuQ2lyY2xlVVJMIiwicHVtcFN0YXRpb25JY29uVVJMIiwiY29sbGVjdG9ySWNvbiIsImJyaWdodEJsdWVDaXJjbGVVUkwiLCJXV1RQSWNvblVSTCIsIndoaXRlUGluUmVkU2hhZG93Iiwic291cmNlIiwic291cmNlcyIsImZpbHRlciIsInNlbGVjdGVkX3NvdXJjZSIsImNyZWF0ZVNhbXBsaW5nSWNvblBvaW50Iiwic2Vjb25kYXJ5SWNvbiIsInNhbXBsaW5nSWNvbiIsImJsdWVDaXJjbGVVUkwiLCJzYW1wbGluZ0ljb25VUkwiLCJ0aGlyZEljb24iLCJmb3JFYWNoIiwiaW5kZXgiLCJjcmVhdGVPYnNlcnZhdGlvbkljb25Qb2ludCIsIm9ic2VydmF0aW9uSWNvbiIsInBpbmtDaXJjbGVVUkwiLCJvYnNlcnZhdGlvbkljb25VUkwiLCJjcmVhdGVTYW1wbGluZ0ljb25zIiwic2FtcGxlZFBvaW50SWRzIiwic2FtcGxpbmdzIiwicyIsImluY2x1ZGVzIiwicG9wdXBDb250ZW50Iiwib2JzIiwiR3JhcGhJY29uIiwiaTE4biIsInQiLCJzZXZlcml0eSIsImNsaWNrZWQiLCJzdWJ0aXRsZVRleHQiLCJnZXRQb2ludEljb25CeVR5cGUiLCJzZXRJY29uIiwiZWxlbWVudCIsImNhbGN1bGF0ZVdhdGVyQ29uc3VtcHRpb24iLCJ3YXRlckNvbnN1bXB0aW9uIiwicm91bmRfdG9fbmVhcmVzdF9rIiwiY2FsY3VsYXRlZCIsInRvRml4ZWQiLCJyb3VuZFRvTmVhcmVzdFRob3VzYW5kIiwicGFyc2VGbG9hdCIsInRvTG9jYWxlU3RyaW5nIiwiTWF0aCIsInJvdW5kIiwibnVtYmVyIiwicm91bmRlZFRob3VzYW5kcyIsInJvdW5kZWRWYWx1ZSIsInRyYW5zbGF0ZUZsb3dSYXRlIiwidG9vbHRpcFZpc2libGUiLCJvbiIsImNsb3NlUG9wdXAiLCJpc1BvcHVwT3BlbiIsInNlbmRBbmFseXRpY3NFdmVudCIsInBvaW50X25hbWUiLCJjb250ZW50Iiwid2F0ZXJSZXVzZUljb24iLCJnZXRGbG93UmF0ZSIsImJpbmRQb3B1cCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJjbG9zZUJ1dHRvbiIsImZsb3dSYXRlVW5pdCIsImlzUm91bmQiLCJyZW1vdmVMYXllckdyb3VwIiwiaGFzTGF5ZXIiLCJyZW1vdmVMYXllciIsImFkZExheWVyR3JvdXAiLCJwb2ludElzV1dUUCIsImlzRmFjdG9yeVR5cGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvV2lkZ2V0cy9NYXAvcG9pbnRzL1BvaW50VXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEdyYXBoSWNvbiBmcm9tICcuLi8uLi8uLi9hc3NldHMvbGluZS1jaGFydC5zdmcnO1xuaW1wb3J0IEwsIHsgTGF0TG5nVHVwbGUgfSBmcm9tICdsZWFmbGV0JztcbmltcG9ydCBpMThuIGZyb20gJy4uLy4uLy4uL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB7IElQb2ludCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3BvaW50cy9tb2RlbHMvSVBvaW50JztcbmltcG9ydCBibHVlQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9ibHVlLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHNhbXBsaW5nSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvc2FtcGxpbmctaWNvbi5zdmcnO1xuaW1wb3J0IHBpbmtDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3BpbmstY2lyY2xlLnN2Zyc7XG5pbXBvcnQgb2JzZXJ2YXRpb25JY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9vYnNlcnZhdGlvbi1pY29uLnN2Zyc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9ldmVudHMvbW9kZWxzL0lFdmVudCc7XG5pbXBvcnQgcmVkUGluUmVkU2hhZG93IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9yZWQtcGluLXJlZC1zaGFkb3cucG5nJztcbmltcG9ydCB3aGl0ZVBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLXJlZC1zaGFkb3cucG5nJztcbmltcG9ydCB3aGl0ZVBpbkJsYWNrU2hhZG93IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy93aGl0ZS1waW4tYmxhY2stc2hhZG93LnBuZyc7XG5pbXBvcnQgeWVsbG93Q2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy95ZWxsb3ctY2lyY2xlLnN2Zyc7XG5pbXBvcnQgcGxhbnRJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9mYWN0b3J5LWljb24uc3ZnJztcbmltcG9ydCBncmVlbkNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZ3JlZW4tY2lyY2xlLnN2Zyc7XG5pbXBvcnQgcHVtcFN0YXRpb25JY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9wdW1wLXN0YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IGNvbGxlY3Rvckljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL21hcC9waW4td2F0ZXIuc3ZnJztcbmltcG9ydCBicmlnaHRCbHVlQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9icmlnaHQtYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBXV1RQSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvV1dUUC1pY29uLnN2Zyc7XG5pbXBvcnQgd2F0ZXJJY29uTm9CYWNrZ3JvdW5kIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy93YXRlci1uby1iYWNrZ3JvdW5kLnN2Zyc7XG5pbXBvcnQgd2hpdGVQb2ludCBmcm9tICcuLi8uLi8uLi9hc3NldHMvd2hpdGUtcG9pbnQucG5nJztcbmltcG9ydCB7IGV2ZW50c0NvdW50SWNvbiB9IGZyb20gJy4uL01hcFV0aWxzJztcbmltcG9ydCB7IGdldFBvaW50SWNvbkJ5VHlwZSB9IGZyb20gJy4vUG9pbnRJY29uJztcbmltcG9ydCB3YXRlclJldXNlSWNvbiBmcm9tICcuLi8uLi8uLi9hc3NldHMvaWNvbnMvd2F0ZXJfcmV1c2Uuc3ZnJztcbmltcG9ydCB7IHNlbmRBbmFseXRpY3NFdmVudCB9IGZyb20gJ3NyYy9wYWdlcy9EYXNoYm9hcmRNYXAvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgaXNDb2xsZWN0b3JGb2N1c2VkID0gKHBvaW50OiBJUG9pbnQsIGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgcmV0dXJuIChcbiAgICBldmVudD8ub2JzZXJ2YXRpb25zPy5sZW5ndGggPT09IDEgJiZcbiAgICBwb2ludC5pZCA9PT0gZXZlbnQub2JzZXJ2YXRpb25zWzBdLnBvaW50X2lkXG4gICk7XG59O1xuXG5jb25zdCBidWlsZE1hbmhvbGVUb29sdGlwU3RyaW5nID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgbGV0IHN0cmluZyA9IGAke3BvaW50Lmdyb3VwLm5hbWV9IGA7XG5cbiAgaWYgKHBvaW50SXNGYWN0b3J5KHBvaW50KSkge1xuICAgIHN0cmluZyArPSBgPGJyLz5TZWN0b3I6ICR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9YDtcbiAgICBzdHJpbmcgKz0gYDxici8+V2F0ZXIgQ29uc3VtcHRpb246ICR7cG9pbnQuZ3JvdXAud2F0ZXJfZGlzY2hhcmdlfWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyaW5nID0gYCR7cG9pbnQubmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBidWJibGVGb3JXV1RQID0gKGFyZ3MpID0+IHtcbiAgY29uc3QgcG9pbnRDdXN0b21JY29uOiBMLk1hcmtlciA9IEwubWFya2VyKGFyZ3MubWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBnZXRJY29uKGFyZ3Mud3d0cFBvaW50LCBmYWxzZSksXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pO1xuICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gYXJncy53d3RwUG9pbnQuaWQ7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuXG4gIHJldHVybiBwb2ludEN1c3RvbUljb247XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQnViYmxlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4gIGZsb3dfcmF0ZV91bml0ID0gJ2dkX3VzJyxcbiAgaGFuZGxlQ2xpY2s/LFxuKSA9PiB7XG4gIGNvbnN0IHN1YnRpdGxlID0gcG9pbnRJc0ZhY3RvcnkocG9pbnQpID8gcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWUgOiAnJztcbiAgY29uc3QgbWFya2VyT25NYXAgPSBsYXllckdyb3VwXG4gICAgLmdldExheWVycygpXG4gICAgLmZpbmQoKGxheWVyKSA9PiBsYXllci5rYW5kb19vYmplY3RfaWQgPT09IHBvaW50LmlkKTtcblxuICBsZXQgcG9pbnRDdXN0b21JY29uOiBMLk1hcmtlciA9IG1hcmtlck9uTWFwXG4gICAgPyBtYXJrZXJPbk1hcFxuICAgIDogTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgICAgaWNvbjogZ2V0SWNvbihwb2ludCwgZmFsc2UsIHN1YnRpdGxlKSxcbiAgICAgICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gICAgICB9KTtcblxuICBpZiAoIW1hcmtlck9uTWFwKSB7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faGFzX2RldmljZSddID0gcG9pbnQuaGFzX2RldmljZTtcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludEhvdmVyZWQnO1xuXG4gICAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICAgIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICAgIGJpbmRQb3B1cFRvTWFya2VyKHBvaW50LCBwb2ludEN1c3RvbUljb24sIGZsb3dfcmF0ZV91bml0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVNYXJrZXJFdmVudHMobWFwLCBwb2ludCwgcG9pbnRDdXN0b21JY29uLCBoYW5kbGVDbGljayk7XG4gIH1cblxuICAvLyBDb25zaWRlciByZW1vdmluZyB0aGlzLCBpdCdzIG5vdCBmdW5jdGlvbmFsIGFuZCBub3R1c2VkIGFueXdoZXJlXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBldmVudHNDb3VudEljb24obWFwLl96b29tKS5pY29uQW5jaG9yLFxuICAgICAgfSksXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICBvcGFjaXR5OiBob3ZlcmVkID8gMSA6IDAsXG4gICAgfSk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgbGV0IHBvaW50SWNvbiA9IG5ldyBMLkljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUG9pbnQsXG4gICAgaWNvblNpemU6IFs5LCA5XSxcbiAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICB9KTtcbiAgbGV0IG1hbmhvbGVJY29uOiBhbnkgPSBuZXcgTC5NYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pO1xuICBtYW5ob2xlSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb29sdGlwU3RyaW5nKHBvaW50KSk7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICBtYW5ob2xlSWNvblsna2FuZG9fcG9pbnRfdHlwZSddID0gJ01hbmhvbGUnO1xuICBpZiAoaG92ZXJlZCkgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG4gIGxheWVyR3JvdXAuYWRkTGF5ZXIobWFuaG9sZUljb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoSWNvblRvUG9pbnQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICBzd2l0Y2ggKHBvaW50Lmdyb3VwLnR5cGUpIHtcbiAgICBjYXNlICdHcm91cHM6OkZhY3RvcnknOlxuICAgICAgaWYgKGNvbWJpbmVkRmFjdG9yeUljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkRmFjdG9yeUljb247XG4gICAgY2FzZSAnR3JvdXBzOjpQdW1wU3RhdGlvbic6XG4gICAgICBpZiAoY29tYmluZWRQdW1wU3RhdGlvbkljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JzpcbiAgICAgIGlmIChjb21iaW5lZFdXVFBJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFdXVFBJY29uO1xuXG4gICAgY2FzZSAnR3JvdXBzOjpDb2xsZWN0b3JzJzpcbiAgICAgIGlmIChpc0NvbGxlY3RvckZvY3VzZWQocG9pbnQsIGV2ZW50KSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzIyLCA0NF0sXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZENvbGxlY3RvcnNJY29uO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RhbmRhcmRCYWNrZ3JvdW5kID0gKFxuICBzZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgdGhpcmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpbkJsYWNrU2hhZG93LFxuICAgIGljb25TaXplOiBzZWNvbmRhcnkgPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwbGFudEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNSwgMzBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRQdW1wU3RhdGlvbkljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogZ3JlZW5DaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNywgMzJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRDb2xsZWN0b3JzSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBjb2xsZWN0b3JJY29uLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICBpY29uQW5jaG9yOiBbMjUsIDUwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkV1dUUEljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogYnJpZ2h0Qmx1ZUNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzgsIDMxXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBzYW1wbGluZ0ljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGJsdWVDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAxM10gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGxldCB0aGlyZEljb24gPSBmYWxzZTtcbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXJkSWNvbiA9IHRydWU7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24sIHRoaXJkSWNvbikpO1xuICB9XG5cbiAgc2FtcGxpbmdJY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gdGhpcmRJY29uID8gZmFsc2UgOiBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IHRoaXJkSWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gc2Vjb25kYXJ5SWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3RoaXJkJ10gPSBmYWxzZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbic7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb25Ib3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvbnMgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgZXZlbnQ6IElFdmVudCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkLFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICAgIGxheWVyR3JvdXAsXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVwQ29udGVudCA9IChvYnM6IGFueSwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBpZiAob2JzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtwb2ludC5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke0dyYXBoSWNvbn1cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2l0ZS1uYW1lXCI+PGI+JHtwb2ludC5ncm91cC5uYW1lfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8aHIvPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInNlY3RvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7b2JzLmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke1xuICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXR5YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9wdXAtY29udGVudF9fc2V2ZXJpdHktLScgKyBvYnMuc2V2ZXJpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLiR7b2JzLnNldmVyaXR5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX2hyXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fZGlzY2hhcmdlLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LmZpcnN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImZpcnN0LXNlZW4tcG9wdXBcIj48L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5sYXN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImxhc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgfVxufTtcblxuY29uc3QgZ2V0SWNvbiA9IChwb2ludDogSVBvaW50LCBjbGlja2VkOiBib29sZWFuLCBzdWJ0aXRsZT86IHN0cmluZykgPT4ge1xuICBjb25zdCB0eXBlID0gcG9pbnQuaGFzX2RldmljZSA/IHBvaW50Lmdyb3VwLnR5cGUgOiAnR3JvdXBzOjpkZWZhdWx0JztcbiAgY29uc3Qgc3VidGl0bGVUZXh0ID0gc3VidGl0bGUgPyBzdWJ0aXRsZSA6IHBvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lO1xuICByZXR1cm4gZ2V0UG9pbnRJY29uQnlUeXBlKHR5cGUsIHBvaW50Lm5hbWUsIHN1YnRpdGxlVGV4dCwgY2xpY2tlZCwgIWNsaWNrZWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEljb24gPSAoZWxlbWVudCwgY2xpY2tlZCwgcG9pbnQsIHN1YnRpdGxlKSA9PiB7XG4gIGVsZW1lbnQuc2V0SWNvbihnZXRJY29uKHBvaW50LCBjbGlja2VkLCBzdWJ0aXRsZSkpO1xufTtcblxuLy8gcm91bmQgdG8gbmVhcmVzdCB0aG91c2FuZCBpcyB1c2VkIHdoZW4geW91IHdhbnQgdG8gcm91bmQgdGhlIHdhdGVyIGNvbnN1bXB0aW9uIHRvIHRoZSBuZWFyZXN0IHRob3VzYW5kXG4vLyBmb3IgZXhhbXBsZTogMjM0LDU2NyAtPiAyMzUsMDAwXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbiA9IChcbiAgZmxvd19yYXRlX3VuaXQ6IHN0cmluZyxcbiAgd2F0ZXJDb25zdW1wdGlvbjogbnVtYmVyLFxuICByb3VuZF90b19uZWFyZXN0X2s6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICBsZXQgY2FsY3VsYXRlZCA9ICcwJztcblxuICBpZiAod2F0ZXJDb25zdW1wdGlvbiA+IDApIHtcbiAgICBzd2l0Y2ggKGZsb3dfcmF0ZV91bml0KSB7XG4gICAgICBjYXNlICdtM2QnOlxuICAgICAgICBjYWxjdWxhdGVkID0gd2F0ZXJDb25zdW1wdGlvbi50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dkX3VzJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9ICh3YXRlckNvbnN1bXB0aW9uICogMjY0LjE3MikudG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdnZF91ayc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSAod2F0ZXJDb25zdW1wdGlvbiAqIDIxOS45NjkpLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAocm91bmRfdG9fbmVhcmVzdF9rKSB7XG4gICAgcmV0dXJuIHJvdW5kVG9OZWFyZXN0VGhvdXNhbmQocGFyc2VGbG9hdChjYWxjdWxhdGVkKSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGNhbGN1bGF0ZWQpKS50b0xvY2FsZVN0cmluZygpO1xuICB9XG59O1xuXG5jb25zdCByb3VuZFRvTmVhcmVzdFRob3VzYW5kID0gKG51bWJlcikgPT4ge1xuICAvLyBpZihpc0FscmVhZHlSb3VuZGVkKG51bWJlcikpIHtcbiAgLy8gICByZXR1cm4gbnVtYmVyO1xuICAvLyB9XG5cbiAgaWYgKG51bWJlciA8IDEwMDApIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICB9XG5cbiAgY29uc3Qgcm91bmRlZFRob3VzYW5kcyA9IE1hdGgucm91bmQobnVtYmVyIC8gMTAwMCk7XG4gIGNvbnN0IHJvdW5kZWRWYWx1ZSA9IHJvdW5kZWRUaG91c2FuZHMgKiAxMDAwO1xuXG4gIHJldHVybiByb3VuZGVkVmFsdWU7XG59O1xuXG4vLyBjb25zdCBpc0FscmVhZHlSb3VuZGVkID0gKG51bWJlcikgPT4ge1xuLy8gICByZXR1cm4gbnVtYmVyID09PSBNYXRoLnJvdW5kKG51bWJlcik7XG4vLyB9XG5cbmV4cG9ydCBjb25zdCB0cmFuc2xhdGVGbG93UmF0ZSA9IChmbG93X3JhdGVfdW5pdCkgPT4ge1xuICByZXR1cm4gaTE4bi50KFxuICAgIGBkYXNoYm9hcmRfdjIucHJvZmlsZS5mbG93X3JhdGVfdW5pdF9vcHRpb25zLiR7XG4gICAgICBmbG93X3JhdGVfdW5pdC5pbmNsdWRlcygnZ2QnKSA/ICdnZCcgOiBmbG93X3JhdGVfdW5pdFxuICAgIH1gLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZU1hcmtlckV2ZW50cyA9IChcbiAgbWFwLFxuICBwb2ludCxcbiAgcG9pbnRDdXN0b21JY29uLFxuICBoYW5kbGVDbGljayxcbikgPT4ge1xuICBsZXQgdG9vbHRpcFZpc2libGUgPSBmYWxzZTtcblxuICBtYXAub24oJ3pvb21zdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICBtYXAuY2xvc2VQb3B1cCgpO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ3BvcHVwY2xvc2UnLCAoKSA9PiB7XG4gICAgLy8gc2V0SWNvbihwb2ludEN1c3RvbUljb24sIGZhbHNlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdwb3B1cG9wZW4nLCAoKSA9PiB7XG4gICAgLy8gc2V0SWNvbihwb2ludEN1c3RvbUljb24sIHRydWUsIHBvaW50KTtcbiAgICB0b29sdGlwVmlzaWJsZSA9IHRydWU7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbignbW91c2VvdmVyJywgKCkgPT4ge1xuICAgIGlmICh0b29sdGlwVmlzaWJsZSkgcmV0dXJuO1xuXG4gICAgc2V0SWNvbihwb2ludEN1c3RvbUljb24sIHRydWUsIHBvaW50KTtcbiAgICB0b29sdGlwVmlzaWJsZSA9IHRydWU7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbignbW91c2VvdXQnLCAoKSA9PiB7XG4gICAgaWYgKHBvaW50Q3VzdG9tSWNvbi5pc1BvcHVwT3BlbigpKSByZXR1cm47XG5cbiAgICBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgZmFsc2UsIHBvaW50KTtcbiAgICB0b29sdGlwVmlzaWJsZSA9IGZhbHNlO1xuICB9KTtcblxuICBpZiAodHlwZW9mIGhhbmRsZUNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcG9pbnRDdXN0b21JY29uLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgIGhhbmRsZUNsaWNrKHBvaW50Q3VzdG9tSWNvbi5rYW5kb19vYmplY3RfaWQpO1xuXG4gICAgICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgICAgIHNlbmRBbmFseXRpY3NFdmVudCgnTWFwIFZpZXcgLSBGYWN0b3J5IGNsaWNrZWQnLCAnbWFwJywge1xuICAgICAgICAgIHBvaW50X2lkOiBwb2ludC5pZCxcbiAgICAgICAgICBwb2ludF9uYW1lOiBwb2ludC5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJpbmRQb3B1cFRvTWFya2VyID0gKHBvaW50LCBsYXllckdyb3VwLCBmbG93X3JhdGVfdW5pdCkgPT4ge1xuICBsZXQgY29udGVudCA9IGBcbiAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnQnPlxuICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2hlYWRlcic+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyX190aXRsZXNfX3RpdGxlJz4ke1xuICAgICAgICAgICAgICAgICAgcG9pbnQubmFtZVxuICAgICAgICAgICAgICAgIH08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzX19zdWJ0aXRsZSc+JHtcbiAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHknPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtJz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX2ljb24nPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nJHt3YXRlclJldXNlSWNvbn0nIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX190aXRsZXMnPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX190aXRsZXNfX3RpdGxlJz5cbiAgICAgICAgICAgICAgICAgICAgJHtnZXRGbG93UmF0ZShwb2ludC5ncm91cC53YXRlcl9kaXNjaGFyZ2UsIGZsb3dfcmF0ZV91bml0KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX190aXRsZXNfX3N1YnRpdGxlJz4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgJ3dhdGVyX2Rpc2NoYXJnZScsXG4gICAgICAgICAgICAgICAgICApfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgbGF5ZXJHcm91cC5iaW5kUG9wdXAoY29udGVudCwge1xuICAgIGNsYXNzTmFtZTogJ3BvaW50LW1hcmtlci1wb3B1cCcsXG4gICAgbWluV2lkdGg6ICcyMTRweCcsXG4gICAgbWF4V2lkdGg6ICcyMTRweCcsXG4gICAgY2xvc2VCdXR0b246IHRydWUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZsb3dSYXRlID0gKFxuICB3YXRlckNvbnN1bXB0aW9uOiBudW1iZXIsXG4gIGZsb3dSYXRlVW5pdDogc3RyaW5nLFxuICBpc1JvdW5kOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgaWYgKHdhdGVyQ29uc3VtcHRpb24gPiAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNhbGN1bGF0ZVdhdGVyQ29uc3VtcHRpb24oZmxvd1JhdGVVbml0LCB3YXRlckNvbnN1bXB0aW9uLCBpc1JvdW5kKSArXG4gICAgICAnICcgK1xuICAgICAgdHJhbnNsYXRlRmxvd1JhdGUoZmxvd1JhdGVVbml0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGkxOG4udCgnZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMudW5rbm93bicpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXAgPSAobWFwLCBsYXllckdyb3VwKSA9PiB7XG4gIGlmIChtYXAuaGFzTGF5ZXIobGF5ZXJHcm91cCkpIHtcbiAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXJHcm91cCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwID0gKG1hcCwgbGF5ZXJHcm91cCkgPT4ge1xuICBpZiAoIW1hcC5oYXNMYXllcihsYXllckdyb3VwKSkge1xuICAgIG1hcC5hZGRMYXllcihsYXllckdyb3VwKTtcbiAgfSBlbHNlIHtcbiAgICByZW1vdmVMYXllckdyb3VwKG1hcCwgbGF5ZXJHcm91cCk7XG4gICAgYWRkTGF5ZXJHcm91cChtYXAsIGxheWVyR3JvdXApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9pbnRJc1dXVFAgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICByZXR1cm4gcG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50Jztcbn07XG5cbmV4cG9ydCBjb25zdCBwb2ludElzRmFjdG9yeSA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIHJldHVybiBpc0ZhY3RvcnlUeXBlKHBvaW50Lmdyb3VwLnR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRmFjdG9yeVR5cGUgPSAodHlwZTogc3RyaW5nKSA9PiB7XG4gIHJldHVybiB0eXBlID09PSAnR3JvdXBzOjpG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