@kando-env/kando-ui 1.2.382 → 1.2.383

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 (585) hide show
  1. package/lib/Router.js +36 -73
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +25 -35
  3. package/lib/Widgets/EventsRow/EventsRow.js +27 -39
  4. package/lib/Widgets/Map/GraphUtils.js +3 -3
  5. package/lib/Widgets/Map/Map.js +86 -122
  6. package/lib/Widgets/Map/MapUtils.js +81 -95
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +53 -77
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +23 -24
  9. package/lib/Widgets/Map/areas/AreaUtils.js +47 -46
  10. package/lib/Widgets/Map/areas/Patterns.js +4 -4
  11. package/lib/Widgets/Map/edges/Edge.js +33 -37
  12. package/lib/Widgets/Map/edges/Edges.js +21 -26
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +23 -44
  14. package/lib/Widgets/Map/events/Event.js +18 -21
  15. package/lib/Widgets/Map/events/EventIndicator.js +65 -60
  16. package/lib/Widgets/Map/events/EventPath.js +49 -24
  17. package/lib/Widgets/Map/events/EventUtils.js +60 -80
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +17 -18
  19. package/lib/Widgets/Map/events/PointOfEvent.js +29 -34
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +30 -37
  21. package/lib/Widgets/Map/events/Snail.js +21 -22
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +93 -86
  23. package/lib/Widgets/Map/map/FloatingGraph.js +22 -18
  24. package/lib/Widgets/Map/map/GraphDateButton.js +25 -17
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +13 -12
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +16 -15
  27. package/lib/Widgets/Map/points/PointIcon.js +22 -15
  28. package/lib/Widgets/Map/points/PointMarker.js +71 -87
  29. package/lib/Widgets/Map/points/PointMarkers.js +45 -66
  30. package/lib/Widgets/Map/points/PointUtils.js +145 -83
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +30 -47
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +11 -10
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +11 -12
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +3 -3
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +31 -60
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +3 -3
  37. package/lib/Widgets/MostPolluting/Areas/styles.js +3 -3
  38. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +11 -8
  39. package/lib/Widgets/MostPolluting/Factories/Factories.js +39 -70
  40. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +15 -18
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +8 -8
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +12 -10
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +3 -3
  44. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +2 -2
  45. package/lib/Widgets/MostPolluting/Factories/styles.js +3 -3
  46. package/lib/Widgets/MostPolluting/MostPolluting.js +25 -35
  47. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +18 -22
  48. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +6 -4
  49. package/lib/Widgets/MostPolluting/ShowMore/styles.js +6 -4
  50. package/lib/Widgets/MostPolluting/assets/index.js +10 -10
  51. package/lib/Widgets/MostPolluting/components/ChangePercent.js +19 -13
  52. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +35 -30
  53. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +45 -35
  54. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +39 -35
  55. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +28 -27
  56. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +54 -50
  57. package/lib/Widgets/MostPolluting/styles.js +3 -3
  58. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +7 -5
  59. package/lib/Widgets/PotentialImpactSummary/Icon.js +8 -6
  60. package/lib/Widgets/PotentialImpactSummary/index.js +19 -27
  61. package/lib/Widgets/PotentialImpactSummary/index.test.js +47 -52
  62. package/lib/Widgets/PotentialImpactSummary/styles.js +7 -7
  63. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +9 -7
  64. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +22 -17
  65. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +35 -32
  66. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +26 -24
  67. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +35 -37
  68. package/lib/Widgets/QualitySummary/QualitySummary.js +9 -13
  69. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +4 -4
  70. package/lib/Widgets/QualitySummary/styles.js +23 -15
  71. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +12 -13
  72. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +27 -26
  73. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +29 -24
  74. package/lib/Widgets/UtilityInformation/UtilityInformation.js +23 -37
  75. package/lib/Widgets/UtilityInformation/styles.js +34 -25
  76. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +3 -3
  77. package/lib/assets/icons/TopNavbar/index.js +6 -6
  78. package/lib/assets/icons/TrendSvg.js +6 -6
  79. package/lib/assets/icons/index.js +15 -15
  80. package/lib/assets/icons/kandoStepper/index.js +5 -5
  81. package/lib/assets/icons/siteTypes/index.js +1 -1
  82. package/lib/components/ApplyButton/ApplyButton.js +9 -9
  83. package/lib/components/Backdrop/Backdrop.js +6 -4
  84. package/lib/components/ContentLoader/ContentLoader.js +11 -9
  85. package/lib/components/ContentLoader/index.js +1 -1
  86. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +13 -12
  87. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +3 -5
  88. package/lib/components/CustomInputs/DoubleTabs/styles.js +20 -12
  89. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +13 -20
  90. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +6 -4
  91. package/lib/components/CustomInputs/Search/Search.js +42 -63
  92. package/lib/components/CustomInputs/Select/Select.js +45 -58
  93. package/lib/components/CustomInputs/Select/Select.stories.js +4 -6
  94. package/lib/components/DamageType/DamageType.js +35 -57
  95. package/lib/components/DataLoaderError/DataLoaderError.js +8 -6
  96. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +9 -10
  97. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +70 -71
  98. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +27 -37
  99. package/lib/components/DischargeHeatmap/HighchartsOptions.js +10 -12
  100. package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -3
  101. package/lib/components/DischargeHeatmap/popupText.js +10 -10
  102. package/lib/components/DischargeHeatmap/titles.js +3 -3
  103. package/lib/components/ErrorBoundary.js +27 -41
  104. package/lib/components/Events/Events.js +41 -58
  105. package/lib/components/Graph/Graph.js +77 -96
  106. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +17 -21
  107. package/lib/components/Header/DoubleTabs/DoubleTabs.js +25 -33
  108. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +3 -5
  109. package/lib/components/Header/DoubleTabs/styles.js +4 -4
  110. package/lib/components/Header/Header.js +2 -2
  111. package/lib/components/Header/Header.stories.js +3 -5
  112. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +22 -34
  113. package/lib/components/Header/InfoBar/InfoBar.js +74 -103
  114. package/lib/components/Header/InfoBar/Search/Control.js +9 -9
  115. package/lib/components/Header/InfoBar/Search/GroupLabel.js +7 -5
  116. package/lib/components/Header/InfoBar/Search/Search.js +16 -21
  117. package/lib/components/Header/InfoBar/Search/SearchContainer.js +21 -33
  118. package/lib/components/Header/InfoBar/Search/searchStyle.js +41 -49
  119. package/lib/components/Header/InfoBar/TimeFilter.js +11 -14
  120. package/lib/components/Header/KandoNavbar/KandoNavbar.js +64 -89
  121. package/lib/components/Header/Slideshow/Slideshow.js +68 -90
  122. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +6 -4
  123. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +21 -23
  124. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +18 -18
  125. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +37 -43
  126. package/lib/components/Header/Toolbar/Toolbar.js +55 -74
  127. package/lib/components/InfoBar/InfoBar.js +10 -23
  128. package/lib/components/InfoBar/InfoBar.stories.js +3 -5
  129. package/lib/components/KandoModal/KandoModal.js +27 -41
  130. package/lib/components/Link.js +8 -7
  131. package/lib/components/Links/CustomRedirect/CustomRedirect.js +9 -8
  132. package/lib/components/Links/StyledLink/StyledLink.js +12 -12
  133. package/lib/components/Links/StyledNavLink/StyledNavLink.js +11 -10
  134. package/lib/components/LiveEvents/CarouselSlide.js +9 -7
  135. package/lib/components/LiveEvents/LiveEvents.js +5 -3
  136. package/lib/components/LoaderByPercent/LoaderByPercent.js +37 -29
  137. package/lib/components/Map/Map.js +20 -23
  138. package/lib/components/Modal/Modal.js +9 -9
  139. package/lib/components/NarrowHeader.js +17 -31
  140. package/lib/components/PointInfo/PointInfo.js +19 -17
  141. package/lib/components/PopupModal/PopupModal.js +12 -16
  142. package/lib/components/PopupModal/PopupModal.stories.js +15 -19
  143. package/lib/components/Sector/Sector.js +8 -6
  144. package/lib/components/Sector/Sector.test.js +19 -20
  145. package/lib/components/Sector/sectorIcons.js +2 -2
  146. package/lib/components/SevereEvent/Eta/Eta.js +49 -52
  147. package/lib/components/SevereEvent/Eta/styles.js +10 -6
  148. package/lib/components/SevereEvent/SevereEvent.js +30 -37
  149. package/lib/components/Spinner/Spinner.js +8 -8
  150. package/lib/components/Spinner/Spinner.stories.js +4 -6
  151. package/lib/components/Spinner/styles.js +22 -14
  152. package/lib/components/Tabs/Tabs.js +21 -29
  153. package/lib/components/Tabs/Tabs.stories.js +4 -6
  154. package/lib/components/Tabs/assets/index.js +5 -5
  155. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +12 -15
  156. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +40 -51
  157. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +19 -31
  158. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +20 -25
  159. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +13 -13
  160. package/lib/components/TimeRangeSelector/TimeRangeList.js +23 -24
  161. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +17 -25
  162. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +31 -32
  163. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +4 -6
  164. package/lib/components/TimeRangeSelector/constants.js +3 -3
  165. package/lib/components/Toggle/Toggle.js +12 -17
  166. package/lib/components/TrendGraph/TrendGraph.js +23 -39
  167. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +27 -33
  168. package/lib/development-environment/index.js +8 -12
  169. package/lib/development-environment/mock/browser.js +2 -4
  170. package/lib/development-environment/mock/get.js +8 -10
  171. package/lib/development-environment/mock/handlers.js +2 -2
  172. package/lib/development-environment/mock/mockBus.js +4 -4
  173. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +2 -2
  174. package/lib/development-environment/mock/mockObjects/areaInformation.js +2 -2
  175. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +2 -2
  176. package/lib/development-environment/mock/mockObjects/areaSitesData.js +2 -2
  177. package/lib/development-environment/mock/mockObjects/areasJson.js +2 -2
  178. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +2 -2
  179. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +2 -2
  180. package/lib/development-environment/mock/mockObjects/data-menuData.js +2 -2
  181. package/lib/development-environment/mock/mockObjects/data-search.js +2 -2
  182. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +2 -2
  183. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +2 -2
  184. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +2 -2
  185. package/lib/development-environment/mock/mockObjects/eventsJson.js +2 -2
  186. package/lib/development-environment/mock/mockObjects/metascore.js +2 -2
  187. package/lib/development-environment/mock/mockObjects/permissionsJson.js +2 -2
  188. package/lib/development-environment/mock/mockObjects/pointsJson.js +2 -2
  189. package/lib/development-environment/mock/mockObjects/site-info.js +2 -2
  190. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +2 -2
  191. package/lib/development-environment/togly/ToglyDashboard.js +13 -22
  192. package/lib/development-environment/togly/ToglyItem.js +36 -31
  193. package/lib/development-environment/togly/init.js +2 -2
  194. package/lib/development-environment/togly/macro.js +14 -10
  195. package/lib/development-environment/togly/useDoubleKeyDown.js +7 -9
  196. package/lib/development-environment/togly/useLocalStorage.js +13 -18
  197. package/lib/hooks/useApi.js +19 -55
  198. package/lib/hooks/useApiWithDashboardQuery.js +30 -49
  199. package/lib/hooks/useClickOutside.js +3 -3
  200. package/lib/hooks/useInitializeHeaders.js +5 -5
  201. package/lib/hooks/useKandoFetch.js +16 -29
  202. package/lib/hooks/useMap.js +22 -34
  203. package/lib/hooks/useNavContext.js +22 -26
  204. package/lib/hooks/useRemoveExistingLayers.js +6 -6
  205. package/lib/hooks/useUpdateEventBodyTail.js +13 -17
  206. package/lib/hooks/useUserTimeZone.js +33 -30
  207. package/lib/hooks/useUserTimeZone.test.js +19 -22
  208. package/lib/hooks/useWindowSize.js +7 -14
  209. package/lib/index.js +11 -12
  210. package/lib/macros/getVersion.js +3 -3
  211. package/lib/pages/AreaPage/AreaPage.js +34 -67
  212. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +16 -17
  213. package/lib/pages/AreaPage/Dashboard/Dashboard.js +30 -31
  214. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +17 -25
  215. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +4 -4
  216. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +8 -8
  217. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +11 -11
  218. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -3
  219. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +2 -2
  220. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +4 -4
  221. package/lib/pages/AssessmentPage/AssessmentPage.js +40 -46
  222. package/lib/pages/CannyWidget/Feedback.js +13 -13
  223. package/lib/pages/CovidPage/CovidPage.js +8 -13
  224. package/lib/pages/CovidPage/components/Body.js +25 -27
  225. package/lib/pages/CovidPage/components/Map.js +29 -39
  226. package/lib/pages/CovidPage/components/Sidebar.js +16 -15
  227. package/lib/pages/CovidPage/components/Summary.js +20 -27
  228. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +27 -33
  229. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +51 -73
  230. package/lib/pages/CovidPage/components/areas/Area.js +29 -40
  231. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +55 -46
  232. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +32 -35
  233. package/lib/pages/CovidPage/components/areas/AreasList.js +34 -46
  234. package/lib/pages/CovidPage/components/areas/Sort.js +11 -14
  235. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
  236. package/lib/pages/DashboardMap/AreaCard.js +28 -28
  237. package/lib/pages/DashboardMap/AssessmentIcon.js +8 -7
  238. package/lib/pages/DashboardMap/Capacity.js +31 -80
  239. package/lib/pages/DashboardMap/FactoryCard.js +31 -26
  240. package/lib/pages/DashboardMap/HighchartsOptions.js +5 -4
  241. package/lib/pages/DashboardMap/List.js +74 -105
  242. package/lib/pages/DashboardMap/ListContext.js +15 -19
  243. package/lib/pages/DashboardMap/Loader.js +2 -2
  244. package/lib/pages/DashboardMap/SeverityBadge.js +10 -18
  245. package/lib/pages/DashboardMap/WWTPMap.js +48 -60
  246. package/lib/pages/DashboardMap/WaterDischarge.js +8 -8
  247. package/lib/pages/DashboardMap/Widget.js +54 -71
  248. package/lib/pages/DashboardMap/utils.js +48 -65
  249. package/lib/pages/EventsPage/Body/Body.js +20 -15
  250. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +17 -19
  251. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +27 -35
  252. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +8 -6
  253. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +11 -7
  254. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +21 -30
  255. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +53 -64
  256. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +19 -31
  257. package/lib/pages/EventsPage/EventsPage.js +7 -10
  258. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +26 -38
  259. package/lib/pages/EventsPage/events/MoreInfo.js +17 -16
  260. package/lib/pages/EventsPage/events/Sidebar.js +21 -16
  261. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +7 -7
  262. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +17 -20
  263. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +30 -35
  264. package/lib/pages/EventsPage/events/event_info/EventDetails.js +40 -37
  265. package/lib/pages/EventsPage/events/event_info/EventInfo.js +44 -43
  266. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +4 -4
  267. package/lib/pages/EventsPage/events/event_info/EventSection.js +17 -19
  268. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +43 -38
  269. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +39 -47
  270. package/lib/pages/EventsPage/events/event_info/Header/Header.js +6 -4
  271. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +30 -33
  272. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +6 -6
  273. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +29 -36
  274. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +4 -6
  275. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +10 -10
  276. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +7 -9
  277. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +22 -21
  278. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +12 -19
  279. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +5 -3
  280. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +11 -9
  281. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +22 -26
  282. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +12 -8
  283. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +7 -7
  284. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +6 -4
  285. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +2 -2
  286. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +12 -10
  287. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +10 -8
  288. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +10 -12
  289. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +5 -3
  290. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +7 -5
  291. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +7 -5
  292. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +6 -4
  293. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +11 -9
  294. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +15 -15
  295. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +6 -6
  296. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +7 -5
  297. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +17 -15
  298. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +4 -4
  299. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +10 -8
  300. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +16 -11
  301. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +9 -8
  302. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +2 -2
  303. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +3 -3
  304. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +25 -38
  305. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +29 -36
  306. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +11 -9
  307. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +15 -17
  308. package/lib/pages/EventsPage/events/event_info/sources/Source.js +27 -30
  309. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +23 -26
  310. package/lib/pages/EventsPage/events/event_info/styles.js +20 -12
  311. package/lib/pages/EventsPage/events/events_list/EventItem.js +18 -19
  312. package/lib/pages/EventsPage/events/events_list/EventUtils.js +10 -10
  313. package/lib/pages/EventsPage/events/events_list/EventsList.js +124 -145
  314. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +40 -55
  315. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +79 -115
  316. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +60 -77
  317. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +38 -41
  318. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +29 -36
  319. package/lib/pages/EventsPage/events/events_list/Sort.js +13 -16
  320. package/lib/pages/ImportFileWizard/FileUploadRespones.js +13 -20
  321. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +6 -4
  322. package/lib/pages/ImportFileWizard/ImportFile.js +20 -22
  323. package/lib/pages/ImportFileWizard/ResponseBody.js +24 -33
  324. package/lib/pages/ImportFileWizard/ValidationForm.js +23 -22
  325. package/lib/pages/ImportFileWizard/ValidationResponse.js +21 -21
  326. package/lib/pages/ImportFileWizard/importFileUtils.js +1 -1
  327. package/lib/pages/ImportGisPage/ImportGisContainer.js +21 -24
  328. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +21 -23
  329. package/lib/pages/ImportGisPage/importGisUtils.js +13 -21
  330. package/lib/pages/ImportGisProcess/index.js +12 -15
  331. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +7 -12
  332. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +17 -19
  333. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +3 -3
  334. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +56 -65
  335. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +6 -8
  336. package/lib/pages/NotificationsPage/Notification/Notification.js +16 -12
  337. package/lib/pages/NotificationsPage/Notifications.mock.js +2 -2
  338. package/lib/pages/NotificationsPage/Notifications.stories.js +4 -6
  339. package/lib/pages/NotificationsPage/NotificationsPage.js +18 -36
  340. package/lib/pages/NotificationsPage/assets/index.js +9 -9
  341. package/lib/pages/NotificationsPageV2/NotificationsPage.js +71 -97
  342. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +94 -63
  343. package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +14 -16
  344. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +18 -16
  345. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +17 -21
  346. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +17 -21
  347. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +18 -22
  348. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +83 -69
  349. package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +18 -22
  350. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +74 -74
  351. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +97 -95
  352. package/lib/pages/NotificationsPageV2/notificationUtils.js +54 -48
  353. package/lib/pages/OldSitePage/OldSitePage.js +57 -132
  354. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +5 -5
  355. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +3 -5
  356. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +8 -6
  357. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +18 -20
  358. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +9 -7
  359. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +12 -18
  360. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +16 -12
  361. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +3 -5
  362. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +18 -12
  363. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +51 -63
  364. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +9 -7
  365. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +29 -53
  366. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +4 -4
  367. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  368. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +11 -10
  369. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +10 -11
  370. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +32 -28
  371. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +27 -29
  372. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +4 -4
  373. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +18 -12
  374. package/lib/pages/ProfilePage/Container.js +2 -2
  375. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +28 -44
  376. package/lib/pages/ProfilePage/ProfilePage.js +121 -214
  377. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +25 -33
  378. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +19 -16
  379. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +28 -30
  380. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +57 -117
  381. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +17 -20
  382. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +12 -10
  383. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +39 -41
  384. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +25 -26
  385. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +16 -16
  386. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +13 -15
  387. package/lib/pages/SamplingsPage/NavigationDropdown.js +45 -32
  388. package/lib/pages/SamplingsPage/NewSamplingAction.js +76 -100
  389. package/lib/pages/SamplingsPage/SamplingMobileModal.js +129 -101
  390. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +21 -22
  391. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +34 -22
  392. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +36 -59
  393. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +15 -18
  394. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +9 -7
  395. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +110 -194
  396. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +49 -55
  397. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +47 -43
  398. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +49 -45
  399. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +19 -20
  400. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +3 -3
  401. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +10 -6
  402. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +58 -54
  403. package/lib/pages/SamplingsPage/SamplingsMobileList.js +21 -28
  404. package/lib/pages/SamplingsPage/SamplingsPage.js +27 -33
  405. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +50 -58
  406. package/lib/pages/SamplingsPage/samplingsPageUtils.js +68 -76
  407. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +6 -4
  408. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +14 -13
  409. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +10 -13
  410. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
  411. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +3 -5
  412. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +14 -10
  413. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -8
  414. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +26 -23
  415. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +14 -17
  416. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +36 -32
  417. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +9 -7
  418. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +15 -24
  419. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +16 -12
  420. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +3 -5
  421. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +18 -12
  422. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +58 -70
  423. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +9 -7
  424. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +15 -26
  425. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +5 -5
  426. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  427. package/lib/pages/SitePage/SamplingParameters/body/Body.js +9 -9
  428. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +29 -37
  429. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +11 -11
  430. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +10 -11
  431. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +60 -59
  432. package/lib/pages/SitePage/SamplingParameters/dataParser.js +30 -39
  433. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +11 -9
  434. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +4 -4
  435. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +18 -12
  436. package/lib/pages/SitePage/SiteInformation/EmptyState.js +11 -7
  437. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +31 -30
  438. package/lib/pages/SitePage/SitePage.js +42 -81
  439. package/lib/pages/UploadLabResult/index.js +13 -13
  440. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +26 -35
  441. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +6 -8
  442. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +9 -8
  443. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +3 -5
  444. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +47 -48
  445. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +10 -6
  446. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +4 -4
  447. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +4 -6
  448. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +13 -12
  449. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +15 -12
  450. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +7 -7
  451. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +2 -2
  452. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +21 -29
  453. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +26 -30
  454. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +16 -17
  455. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +7 -13
  456. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +27 -31
  457. package/lib/pages/WbeDashboard/ExpandableComponent.js +9 -8
  458. package/lib/pages/WbeDashboard/GraphWrapper.js +30 -36
  459. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +17 -19
  460. package/lib/pages/WbeDashboard/SearchInput.js +15 -20
  461. package/lib/pages/WbeDashboard/SummaryGraph.js +50 -76
  462. package/lib/pages/WbeDashboard/SummaryGraphModal.js +19 -17
  463. package/lib/pages/WbeDashboard/Tabs.js +11 -11
  464. package/lib/pages/WbeDashboard/WbeDashboardPage.js +151 -213
  465. package/lib/pages/WbeDashboard/WbeSummaryBar.js +40 -48
  466. package/lib/pages/WwtpPage/DashboardCard.js +26 -23
  467. package/lib/pages/WwtpPage/DischargePatternCard.js +14 -23
  468. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +26 -22
  469. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +19 -18
  470. package/lib/pages/WwtpPage/Map.js +5 -3
  471. package/lib/pages/WwtpPage/OrganicCard.js +2 -2
  472. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +2 -2
  473. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +8 -6
  474. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +9 -8
  475. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +18 -14
  476. package/lib/pages/WwtpPage/PredictionCard.js +2 -2
  477. package/lib/pages/WwtpPage/TrendCard.js +18 -19
  478. package/lib/pages/WwtpPage/UpgradeBox.js +3 -3
  479. package/lib/pages/WwtpPage/WwtpPage.js +8 -8
  480. package/lib/pages/WwtpPage/WwtpPageContainer.js +21 -16
  481. package/lib/providers/Slideshow/SlideshowContext.js +11 -9
  482. package/lib/providers/Slideshow/SlideshowProvider.js +22 -38
  483. package/lib/providers/Slideshow/SlideshowRunner.js +17 -19
  484. package/lib/providers/UrlHistory/UrlHistoryContext.js +6 -4
  485. package/lib/providers/UrlHistory/UrlHistoryProvider.js +12 -11
  486. package/lib/providers/UrlHistory/index.js +2 -2
  487. package/lib/providers/UrlHistory/useLastVisited.js +5 -5
  488. package/lib/store/ImportGis/actionTypes.js +1 -1
  489. package/lib/store/ImportGis/actionsCreator.js +7 -5
  490. package/lib/store/ImportGis/reducer.js +40 -29
  491. package/lib/store/WBE/actionTypes.js +2 -2
  492. package/lib/store/WBE/reducer.js +13 -9
  493. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +24 -14
  494. package/lib/store/areas/actionTypes.js +4 -4
  495. package/lib/store/areas/actions.js +7 -13
  496. package/lib/store/areas/reducer.js +8 -6
  497. package/lib/store/context/actionTypes.js +3 -3
  498. package/lib/store/context/actions.js +3 -3
  499. package/lib/store/context/contextMiddlewares.js +14 -16
  500. package/lib/store/context/reducer.js +13 -9
  501. package/lib/store/dashboard/dashboardSlice.js +18 -10
  502. package/lib/store/edges/actionTypes.js +5 -5
  503. package/lib/store/edges/actions.js +4 -8
  504. package/lib/store/edges/reducer.js +13 -17
  505. package/lib/store/events/actionTypes.js +17 -17
  506. package/lib/store/events/actions.js +3 -7
  507. package/lib/store/events/models/IEvent.js +1 -1
  508. package/lib/store/events/reducer.js +42 -49
  509. package/lib/store/global/actionTypes.js +11 -11
  510. package/lib/store/global/actions.js +8 -6
  511. package/lib/store/global/reducer.js +11 -10
  512. package/lib/store/permissions/permissionsSlice.js +12 -8
  513. package/lib/store/points/actionTypes.js +3 -3
  514. package/lib/store/points/actions.js +4 -8
  515. package/lib/store/points/reducer.js +7 -5
  516. package/lib/store/rootActionTypes.js +2 -2
  517. package/lib/store/rootReducer.js +17 -12
  518. package/lib/store/rootStore.js +5 -5
  519. package/lib/store/samplings/actionTypes.js +1 -1
  520. package/lib/store/samplings/reducer.js +16 -14
  521. package/lib/styles/StylesLayout.js +5 -3
  522. package/lib/styles/theme/theme.js +26 -27
  523. package/lib/test/mocks/browser.js +2 -4
  524. package/lib/test/test-utils.js +17 -15
  525. package/lib/ui-kit/Button/Button.js +128 -80
  526. package/lib/ui-kit/Button/Button.test.js +24 -29
  527. package/lib/ui-kit/Checkbox/Checkbox.js +30 -20
  528. package/lib/ui-kit/ContentCard/ContentCard.js +15 -18
  529. package/lib/ui-kit/Dashboard/Dashboard.js +25 -22
  530. package/lib/ui-kit/DropDown/DropDown.js +23 -24
  531. package/lib/ui-kit/DropDown/DropDown.test.js +12 -12
  532. package/lib/ui-kit/DropDown/DropDownItem.js +24 -21
  533. package/lib/ui-kit/DropDown/DropdownToggle.js +12 -8
  534. package/lib/ui-kit/EmptyState/EmptyState.js +6 -4
  535. package/lib/ui-kit/IconAction/IconAction.js +7 -5
  536. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +48 -64
  537. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +69 -52
  538. package/lib/ui-kit/InletsPie/InletsPie.js +15 -13
  539. package/lib/ui-kit/InletsPie/options.js +6 -6
  540. package/lib/ui-kit/KandoList/KandoList.js +14 -12
  541. package/lib/ui-kit/KandoTable/KandoTable.js +48 -40
  542. package/lib/ui-kit/KandoTable/KandoTable.test.js +16 -22
  543. package/lib/ui-kit/Layout/Layout.js +6 -4
  544. package/lib/ui-kit/MobileInput/MobileInput.js +60 -50
  545. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +13 -16
  546. package/lib/ui-kit/OrganicEvents/GaugeChart.js +8 -6
  547. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +6 -6
  548. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +27 -20
  549. package/lib/ui-kit/OrganicEvents/TextInfo.js +15 -10
  550. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +10 -8
  551. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +14 -17
  552. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +3 -3
  553. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +20 -20
  554. package/lib/ui-kit/ScoreGauge/constant.js +3 -3
  555. package/lib/ui-kit/TimeLineChart/TrendChart.js +54 -42
  556. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +8 -7
  557. package/lib/ui-kit/Tooltip/Tooltip.js +14 -8
  558. package/lib/ui-kit/index.js +8 -8
  559. package/lib/ui-kit/kandoStepper/KandoStepper.js +12 -12
  560. package/lib/ui-kit/siteName/SiteName.js +11 -8
  561. package/lib/utilities/ActionUtility.js +7 -7
  562. package/lib/utilities/Alert.js +21 -17
  563. package/lib/utilities/Analytics.js +11 -11
  564. package/lib/utilities/Array.js +4 -5
  565. package/lib/utilities/Enum.js +15 -51
  566. package/lib/utilities/ErrorBoundary.js +27 -41
  567. package/lib/utilities/File.js +40 -69
  568. package/lib/utilities/GetDir.js +8 -7
  569. package/lib/utilities/KandoDate.js +7 -15
  570. package/lib/utilities/KandoModal.js +16 -26
  571. package/lib/utilities/LocalStorage.js +8 -10
  572. package/lib/utilities/ThousandsToK.js +3 -3
  573. package/lib/utilities/TimeFormat.js +21 -20
  574. package/lib/utilities/Truncate.js +17 -25
  575. package/lib/utilities/edgesMath.js +14 -15
  576. package/lib/utilities/i18n.js +3 -3
  577. package/lib/utilities/kql.js +12 -14
  578. package/lib/utilities/map/icons.js +3 -3
  579. package/lib/utilities/polylinedecorator.js +87 -112
  580. package/lib/utilities/scoreToData.js +17 -17
  581. package/lib/utilities/scoreToData.test.js +5 -5
  582. package/lib/utilities/time.js +8 -8
  583. package/lib/utilities/uploadToS3.js +11 -11
  584. package/lib/utilities/urls.js +61 -59
  585. package/package.json +1 -1
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
8
  var _react = _interopRequireWildcard(require("react"));
12
9
  var _reactBootstrap = require("react-bootstrap");
13
10
  var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
@@ -22,71 +19,52 @@ require("./FilterStyle.scss");
22
19
  var _Filter = _interopRequireDefault(require("./Filter"));
23
20
  var _FiltersDropDown = _interopRequireDefault(require("./FiltersDropDown"));
24
21
  var _actionsCreator = require("store/samplings/actionsCreator");
25
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
24
  function mapStateToProps(state) {
28
- var global_data = state.global_data,
29
- nav_context_data = state.nav_context_data,
30
- points_data = state.points_data;
25
+ const {
26
+ global_data,
27
+ nav_context_data,
28
+ points_data
29
+ } = state;
31
30
  return {
32
- global_data: global_data,
33
- nav_context_data: nav_context_data,
34
- points_data: points_data
31
+ global_data,
32
+ nav_context_data,
33
+ points_data
35
34
  };
36
35
  }
37
- var FilterContainer = function FilterContainer(props) {
38
- var global_data = props.global_data,
39
- nav_context_data = props.nav_context_data,
40
- points_data = props.points_data,
41
- filterPopupOpen = props.filterPopupOpen,
42
- applyLogic = props.applyLogic,
43
- _props$fetchType = props.fetchType,
44
- fetchType = _props$fetchType === void 0 ? 'EventFilters' : _props$fetchType;
45
- var dispatch = (0, _reactRedux.useDispatch)();
46
- var nameInput = (0, _react.useRef)(null);
47
- var filterContent = (0, _react.useRef)(null);
48
- var _useState = (0, _react.useState)([]),
49
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
50
- filters = _useState2[0],
51
- setFilters = _useState2[1];
52
- var _useState3 = (0, _react.useState)([]),
53
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
54
- availableFilterItems = _useState4[0],
55
- setAvailableFilterItems = _useState4[1];
56
- var _useState5 = (0, _react.useState)(false),
57
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
58
- rendered = _useState6[0],
59
- setRendered = _useState6[1];
60
- var _useState7 = (0, _react.useState)(),
61
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
62
- WaId = _useState8[0],
63
- setWaId = _useState8[1];
36
+ const FilterContainer = props => {
37
+ const {
38
+ global_data,
39
+ nav_context_data,
40
+ points_data,
41
+ filterPopupOpen,
42
+ applyLogic,
43
+ fetchType = 'EventFilters'
44
+ } = props;
45
+ const dispatch = (0, _reactRedux.useDispatch)();
46
+ const nameInput = (0, _react.useRef)(null);
47
+ const filterContent = (0, _react.useRef)(null);
48
+ const [filters, setFilters] = (0, _react.useState)([]);
49
+ const [availableFilterItems, setAvailableFilterItems] = (0, _react.useState)([]);
50
+ const [rendered, setRendered] = (0, _react.useState)(false);
51
+ const [WaId, setWaId] = (0, _react.useState)();
64
52
  //eslint-disable-next-line
65
- var _useState9 = (0, _react.useState)(undefined),
66
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
67
- activeFilter = _useState10[0],
68
- setActiveFilter = _useState10[1];
69
- var _useState11 = (0, _react.useState)(undefined),
70
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
71
- activeFilterCopy = _useState12[0],
72
- setActiveFilterCopy = _useState12[1];
53
+ const [activeFilter, setActiveFilter] = (0, _react.useState)(undefined);
54
+ const [activeFilterCopy, setActiveFilterCopy] = (0, _react.useState)(undefined);
73
55
  // @ts-ignore
74
- var csrf = document.querySelector("meta[name='csrf-token']").getAttribute('content');
75
- var useQuery = function useQuery() {
56
+ const csrf = document.querySelector("meta[name='csrf-token']").getAttribute('content');
57
+ const useQuery = () => {
76
58
  return new URLSearchParams((0, _reactRouterDom.useLocation)().search);
77
59
  };
78
- var history = (0, _reactRouterDom.useHistory)();
79
- var query = useQuery();
80
- var getKQLFromURL = function getKQLFromURL() {
60
+ const history = (0, _reactRouterDom.useHistory)();
61
+ const query = useQuery();
62
+ const getKQLFromURL = () => {
81
63
  return query.get('valuesFromKQL');
82
64
  };
83
- var getPointsToFilters = function getPointsToFilters(availableFilterItems, filters) {
84
- var interestPointFilterItem = availableFilterItems.find(function (f) {
85
- return f.type === 'InterestPointFilterItem';
86
- });
87
- var filteredPointsData = points_data.items.filter(function (point) {
88
- return point.part_of_observation === true;
89
- }).map(function (point) {
65
+ const getPointsToFilters = (availableFilterItems, filters) => {
66
+ let interestPointFilterItem = availableFilterItems.find(f => f.type === 'InterestPointFilterItem');
67
+ let filteredPointsData = points_data.items.filter(point => point.part_of_observation === true).map(point => {
90
68
  return {
91
69
  id: point.id,
92
70
  name: point.group.name
@@ -95,18 +73,16 @@ var FilterContainer = function FilterContainer(props) {
95
73
  if (interestPointFilterItem !== undefined) {
96
74
  interestPointFilterItem.options = filteredPointsData;
97
75
  }
98
- filters.forEach(function (f) {
99
- var filterItem = f.filter_items.find(function (fi) {
100
- return fi.type === 'InterestPointFilterItem';
101
- });
76
+ filters.forEach(f => {
77
+ let filterItem = f.filter_items.find(fi => fi.type === 'InterestPointFilterItem');
102
78
  if (filterItem !== undefined) {
103
79
  filterItem.available_options = filteredPointsData;
104
80
  }
105
81
  });
106
82
  setFilters(filters);
107
83
  };
108
- var fetchEventFilters = function fetchEventFilters(preparedParams, method, url) {
109
- var filter = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
84
+ const fetchEventFilters = function (preparedParams, method, url) {
85
+ let filter = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
110
86
  if (csrf !== null) {
111
87
  fetch(url, {
112
88
  method: method,
@@ -116,31 +92,25 @@ var FilterContainer = function FilterContainer(props) {
116
92
  Accept: 'application/json'
117
93
  },
118
94
  body: JSON.stringify(preparedParams)
119
- }).then(function (response) {
120
- return response.json();
121
- }).then(function (data) {
95
+ }).then(response => response.json()).then(data => {
122
96
  getPointsToFilters(data.available_filter_items, data.filters);
123
97
  if (filter !== null) {
124
- var saved = data.filters.find(function (f) {
125
- return f.name === filter.name;
126
- });
98
+ let saved = data.filters.find(f => f.name === filter.name);
127
99
  setActiveFilter(saved);
128
100
  setActiveFilterCopy(saved);
129
101
  }
130
102
  });
131
103
  }
132
104
  };
133
- var deepClone = function deepClone(data) {
105
+ const deepClone = data => {
134
106
  return JSON.parse(JSON.stringify(data));
135
107
  };
136
- var getData = function getData() {
137
- fetch("/ui_filters.json?water_authority_id=".concat(global_data.waterAuthorityId, "&filter_type=").concat(fetchType, "&valuesFromKQL=").concat(getKQLFromURL())).then(function (response) {
138
- return response.json();
139
- }).then(function (json) {
108
+ const getData = () => {
109
+ fetch(`/ui_filters.json?water_authority_id=${global_data.waterAuthorityId}&filter_type=${fetchType}&valuesFromKQL=${getKQLFromURL()}`).then(response => response.json()).then(json => {
140
110
  getPointsToFilters(json.available_filter_items, json.filters);
141
- var jsonShallowCopy = Object.assign({}, json);
111
+ let jsonShallowCopy = Object.assign({}, json);
142
112
  jsonShallowCopy.filters = deepClone(jsonShallowCopy.filters);
143
- var active = jsonShallowCopy.displayed_filter;
113
+ let active = jsonShallowCopy.displayed_filter;
144
114
  if (global_data.selectedPeriod !== undefined && global_data.selectedPeriod !== null) {
145
115
  active.filter_items[1].selected_options = [global_data.selectedPeriod];
146
116
  }
@@ -154,17 +124,15 @@ var FilterContainer = function FilterContainer(props) {
154
124
  applyFilter(active);
155
125
  });
156
126
  };
157
- var handleFilterChange = function handleFilterChange(filter) {
127
+ const handleFilterChange = filter => {
158
128
  setActiveFilter(deepClone(filter));
159
129
  setActiveFilterCopy(deepClone(filter));
160
130
  filterContent.current.click();
161
131
  };
162
- var saveActiveFilter = function saveActiveFilter(filter) {
163
- var clonedFilters = deepClone(filters);
164
- var filterToModifyIndex = clonedFilters.indexOf(clonedFilters.find(function (f) {
165
- return f.id === filter.id;
166
- }));
167
- var preparedParams = {
132
+ const saveActiveFilter = filter => {
133
+ let clonedFilters = deepClone(filters);
134
+ let filterToModifyIndex = clonedFilters.indexOf(clonedFilters.find(f => f.id === filter.id));
135
+ let preparedParams = {
168
136
  filter_type: fetchType,
169
137
  ui_filter: {
170
138
  name: filter.name,
@@ -177,36 +145,32 @@ var FilterContainer = function FilterContainer(props) {
177
145
  setActiveFilter(filter);
178
146
  setActiveFilterCopy(filter);
179
147
  if (Math.sign(filter.id) > 0) {
180
- fetchEventFilters(preparedParams, 'PUT', "/ui_filters/".concat(filter.id, "?water_authority_id=").concat(global_data.waterAuthorityId), filter);
148
+ fetchEventFilters(preparedParams, 'PUT', `/ui_filters/${filter.id}?water_authority_id=${global_data.waterAuthorityId}`, filter);
181
149
  } else {
182
- fetchEventFilters(preparedParams, 'POST', "/ui_filters?water_authority_id=".concat(global_data.waterAuthorityId), filter);
150
+ fetchEventFilters(preparedParams, 'POST', `/ui_filters?water_authority_id=${global_data.waterAuthorityId}`, filter);
183
151
  }
184
152
  };
185
- var createFilter = function createFilter(filter, name) {
186
- var newFilter = {
153
+ const createFilter = (filter, name) => {
154
+ let newFilter = {
187
155
  id: -1,
188
156
  name: name,
189
157
  filter_items: filter.filter_items,
190
158
  is_active: false
191
159
  };
192
- setFilters([].concat((0, _toConsumableArray2.default)(filters), [newFilter]));
160
+ setFilters([...filters, newFilter]);
193
161
  setActiveFilterCopy(newFilter);
194
162
  setActiveFilter(newFilter);
195
163
  saveActiveFilter(newFilter);
196
164
  };
197
- var deleteFilter = function deleteFilter(filter) {
165
+ const deleteFilter = filter => {
198
166
  if (csrf !== null && filter.id !== -1) {
199
- fetch("/ui_filters/".concat(filter.id, "?water_authority_id=").concat(global_data.waterAuthorityId, "&filter_type=").concat(fetchType), {
167
+ fetch(`/ui_filters/${filter.id}?water_authority_id=${global_data.waterAuthorityId}&filter_type=${fetchType}`, {
200
168
  method: 'DELETE',
201
169
  headers: {
202
170
  'X-CSRF-Token': csrf
203
171
  }
204
- }).then(function (response) {
205
- return response.json();
206
- }).then(function (data) {
207
- var active = data.filters.find(function (filter) {
208
- return filter.is_active === true;
209
- });
172
+ }).then(response => response.json()).then(data => {
173
+ let active = data.filters.find(filter => filter.is_active === true);
210
174
  if (active !== undefined) {
211
175
  setFilters(data.filters);
212
176
  setActiveFilter(active);
@@ -224,21 +188,21 @@ var FilterContainer = function FilterContainer(props) {
224
188
  });
225
189
  }
226
190
  };
227
- var getEventIdFromURL = function getEventIdFromURL() {
191
+ const getEventIdFromURL = () => {
228
192
  return query.get('eventId');
229
193
  };
230
- var getWaIdFromURL = function getWaIdFromURL() {
194
+ const getWaIdFromURL = () => {
231
195
  return query.get('water_authority_id');
232
196
  };
233
- var getKQLValuesFromURL = function getKQLValuesFromURL() {
197
+ const getKQLValuesFromURL = () => {
234
198
  return query.get('valuesFromKQL');
235
199
  };
236
- var activateFilter = function activateFilter(filter) {
237
- fetchEventFilters({}, 'PUT', "/ui_filters/activate/".concat(filter.id, "?water_authority_id=").concat(global_data.waterAuthorityId, "&filter_type=").concat(fetchType), filter);
200
+ const activateFilter = filter => {
201
+ fetchEventFilters({}, 'PUT', `/ui_filters/activate/${filter.id}?water_authority_id=${global_data.waterAuthorityId}&filter_type=${fetchType}`, filter);
238
202
  };
239
- var applyFilter = function applyFilter() {
240
- var filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeFilterCopy;
241
- var value = 'severity';
203
+ const applyFilter = function () {
204
+ let filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeFilterCopy;
205
+ let value = 'severity';
242
206
  if (nav_context_data.navContext.name === 'samplings-list') {
243
207
  value = 'newest';
244
208
  } else {
@@ -253,10 +217,10 @@ var FilterContainer = function FilterContainer(props) {
253
217
  }
254
218
  }
255
219
  if (nav_context_data.navContext.name === 'events_view') {
256
- history.push("/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&locale=").concat(nav_context_data.navContext.locale, "&eventId=").concat(getEventIdFromURL(), "&valuesFromKQL=").concat((0, _kql.buildKQLQuery)(filter, value)));
220
+ history.push(`/${nav_context_data.navContext.name}/index?water_authority_id=${global_data.waterAuthorityId}&locale=${nav_context_data.navContext.locale}&eventId=${getEventIdFromURL()}&valuesFromKQL=${(0, _kql.buildKQLQuery)(filter, value)}`);
257
221
  }
258
222
  if (nav_context_data.navContext.name === 'samplings-list') {
259
- history.push("/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&locale=").concat(nav_context_data.navContext.locale, "&valuesFromKQL=").concat((0, _kql.buildKQLQuery)(filter, value)));
223
+ history.push(`/${nav_context_data.navContext.name}/index?water_authority_id=${global_data.waterAuthorityId}&locale=${nav_context_data.navContext.locale}&valuesFromKQL=${(0, _kql.buildKQLQuery)(filter, value)}`);
260
224
  if (applyLogic !== undefined) applyLogic((0, _kql.buildKQLQuery)(filter, value));
261
225
  }
262
226
  dispatch((0, _actions.setEventFilterParam)((0, _kql.buildKQLQuery)(filter, value)));
@@ -267,19 +231,19 @@ var FilterContainer = function FilterContainer(props) {
267
231
  isFetch: false
268
232
  }));
269
233
  };
270
- var handleCreationClick = function handleCreationClick() {
234
+ const handleCreationClick = () => {
271
235
  createFilter(activeFilterCopy, nameInput.current.value);
272
236
  nameInput.current.value = '';
273
237
  filterContent.current.click();
274
238
  };
275
- (0, _react.useEffect)(function () {
239
+ (0, _react.useEffect)(() => {
276
240
  setWaId(getWaIdFromURL());
277
241
  if (!rendered) {
278
242
  setRendered(true);
279
243
  getData();
280
244
  } else {
281
245
  if (global_data.eventFilterParam === '' && filters.length !== 0) {
282
- var filter = filters.find(function (filter) {
246
+ let filter = filters.find(filter => {
283
247
  return filter.is_active;
284
248
  });
285
249
  setActiveFilterCopy(filter);
@@ -290,7 +254,7 @@ var FilterContainer = function FilterContainer(props) {
290
254
  };
291
255
  }, [global_data.waterAuthorityId, WaId]);
292
256
  return /*#__PURE__*/_react.default.createElement("div", {
293
- className: "filter-container ".concat(filterPopupOpen ? '' : 'filter-container--hidden')
257
+ className: `filter-container ${filterPopupOpen ? '' : 'filter-container--hidden'}`
294
258
  }, activeFilterCopy !== undefined && /*#__PURE__*/_react.default.createElement("div", {
295
259
  className: 'filter-container__content',
296
260
  ref: filterContent
@@ -328,7 +292,7 @@ var FilterContainer = function FilterContainer(props) {
328
292
  fill: "#1d1d1d"
329
293
  }), /*#__PURE__*/_react.default.createElement("span", null, _i18n.default.t('events_overview.filter.save.label'))), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Menu, null, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
330
294
  disabled: activeFilterCopy.id === -1 ? true : false,
331
- onClick: function onClick() {
295
+ onClick: () => {
332
296
  saveActiveFilter(activeFilterCopy);
333
297
  }
334
298
  }, _i18n.default.t('events_overview.filter.save.existing')), /*#__PURE__*/_react.default.createElement(_Dropdown.default, {
@@ -345,7 +309,7 @@ var FilterContainer = function FilterContainer(props) {
345
309
  ref: nameInput,
346
310
  autoFocus: true
347
311
  }), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
348
- onClick: function onClick() {
312
+ onClick: () => {
349
313
  handleCreationClick();
350
314
  },
351
315
  variant: "success"
@@ -359,7 +323,7 @@ var FilterContainer = function FilterContainer(props) {
359
323
  applyFilter: applyFilter
360
324
  }))));
361
325
  };
362
- var connector = (0, _reactRedux.connect)(mapStateToProps);
326
+ const connector = (0, _reactRedux.connect)(mapStateToProps);
363
327
  var _default = connector(FilterContainer);
364
328
  exports.default = _default;
365
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RCb290c3RyYXAiLCJfRHJvcGRvd24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0UmVkdXgiLCJfcmVhY3RSb3V0ZXJEb20iLCJfZGlza2V0dGUiLCJfbGlzdCIsIl9hY3Rpb25zIiwiX2kxOG4iLCJfa3FsIiwiX0ZpbHRlciIsIl9GaWx0ZXJzRHJvcERvd24iLCJfYWN0aW9uc0NyZWF0b3IiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIm1hcFN0YXRlVG9Qcm9wcyIsInN0YXRlIiwiZ2xvYmFsX2RhdGEiLCJuYXZfY29udGV4dF9kYXRhIiwicG9pbnRzX2RhdGEiLCJGaWx0ZXJDb250YWluZXIiLCJwcm9wcyIsImZpbHRlclBvcHVwT3BlbiIsImFwcGx5TG9naWMiLCJfcHJvcHMkZmV0Y2hUeXBlIiwiZmV0Y2hUeXBlIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsIm5hbWVJbnB1dCIsInVzZVJlZiIsImZpbHRlckNvbnRlbnQiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJmaWx0ZXJzIiwic2V0RmlsdGVycyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYXZhaWxhYmxlRmlsdGVySXRlbXMiLCJzZXRBdmFpbGFibGVGaWx0ZXJJdGVtcyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwicmVuZGVyZWQiLCJzZXRSZW5kZXJlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiV2FJZCIsInNldFdhSWQiLCJfdXNlU3RhdGU5IiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlMTAiLCJhY3RpdmVGaWx0ZXIiLCJzZXRBY3RpdmVGaWx0ZXIiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiYWN0aXZlRmlsdGVyQ29weSIsInNldEFjdGl2ZUZpbHRlckNvcHkiLCJjc3JmIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidXNlUXVlcnkiLCJVUkxTZWFyY2hQYXJhbXMiLCJ1c2VMb2NhdGlvbiIsInNlYXJjaCIsImhpc3RvcnkiLCJ1c2VIaXN0b3J5IiwicXVlcnkiLCJnZXRLUUxGcm9tVVJMIiwiZ2V0UG9pbnRzVG9GaWx0ZXJzIiwiaW50ZXJlc3RQb2ludEZpbHRlckl0ZW0iLCJmaW5kIiwiZiIsInR5cGUiLCJmaWx0ZXJlZFBvaW50c0RhdGEiLCJpdGVtcyIsImZpbHRlciIsInBvaW50IiwicGFydF9vZl9vYnNlcnZhdGlvbiIsIm1hcCIsImlkIiwibmFtZSIsImdyb3VwIiwib3B0aW9ucyIsImZvckVhY2giLCJmaWx0ZXJJdGVtIiwiZmlsdGVyX2l0ZW1zIiwiZmkiLCJhdmFpbGFibGVfb3B0aW9ucyIsImZldGNoRXZlbnRGaWx0ZXJzIiwicHJlcGFyZWRQYXJhbXMiLCJtZXRob2QiLCJ1cmwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmZXRjaCIsImhlYWRlcnMiLCJBY2NlcHQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJkYXRhIiwiYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcyIsInNhdmVkIiwiZGVlcENsb25lIiwicGFyc2UiLCJnZXREYXRhIiwiY29uY2F0Iiwid2F0ZXJBdXRob3JpdHlJZCIsImpzb25TaGFsbG93Q29weSIsImFzc2lnbiIsImFjdGl2ZSIsImRpc3BsYXllZF9maWx0ZXIiLCJzZWxlY3RlZFBlcmlvZCIsInNlbGVjdGVkX29wdGlvbnMiLCJhY3RpdmF0ZUZpbHRlciIsImFwcGx5RmlsdGVyIiwiaGFuZGxlRmlsdGVyQ2hhbmdlIiwiY3VycmVudCIsImNsaWNrIiwic2F2ZUFjdGl2ZUZpbHRlciIsImNsb25lZEZpbHRlcnMiLCJmaWx0ZXJUb01vZGlmeUluZGV4IiwiaW5kZXhPZiIsImZpbHRlcl90eXBlIiwidWlfZmlsdGVyIiwiaXNfYWN0aXZlIiwiTWF0aCIsInNpZ24iLCJjcmVhdGVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZGVsZXRlRmlsdGVyIiwiZ2V0RXZlbnRJZEZyb21VUkwiLCJnZXRXYUlkRnJvbVVSTCIsImdldEtRTFZhbHVlc0Zyb21VUkwiLCJ2YWx1ZSIsIm5hdkNvbnRleHQiLCJpbmNsdWRlcyIsInB1c2giLCJsb2NhbGUiLCJidWlsZEtRTFF1ZXJ5Iiwic2V0RXZlbnRGaWx0ZXJQYXJhbSIsInNldEFjdGl2ZUZpbHRlckdsb2JhbGx5Iiwic2V0U2FtcGxpbmdEYXRhIiwiY3VycmVudFBhZ2UiLCJpc0ZldGNoIiwiaGFuZGxlQ3JlYXRpb25DbGljayIsInVzZUVmZmVjdCIsImV2ZW50RmlsdGVyUGFyYW0iLCJjbGVhbnVwIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInJlZiIsImkxOG4iLCJ0IiwiVG9nZ2xlIiwidmFyaWFudCIsIlJlYWN0Q29tcG9uZW50IiwiaGVpZ2h0Iiwid2lkdGgiLCJmaWxsIiwiTWVudSIsIkl0ZW0iLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJGb3JtQ29udHJvbCIsInBsYWNlaG9sZGVyIiwiYXV0b0ZvY3VzIiwiQnV0dG9uIiwicGFyc2VTZWxlY3RlZEl0ZW1zIiwiY29ubmVjdG9yIiwiY29ubmVjdCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wYWdlcy9FdmVudHNQYWdlL2V2ZW50cy9ldmVudHNfbGlzdC9GaWx0ZXIvRmlsdGVyQ29udGFpbmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQnV0dG9uLCBGb3JtQ29udHJvbCB9IGZyb20gJ3JlYWN0LWJvb3RzdHJhcCc7XG5pbXBvcnQgRHJvcGRvd24gZnJvbSAncmVhY3QtYm9vdHN0cmFwL0Ryb3Bkb3duJztcbmltcG9ydCB7IGNvbm5lY3QsIENvbm5lY3RlZFByb3BzLCB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZUxvY2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBSZWFjdENvbXBvbmVudCBhcyBTYXZlSWNvbiB9IGZyb20gJ3NyYy9hc3NldHMvaWNvbnMvZGlza2V0dGUuc3ZnJztcbmltcG9ydCB7IFJlYWN0Q29tcG9uZW50IGFzIExpc3RJY29uIH0gZnJvbSAnc3JjL2Fzc2V0cy9pY29ucy9saXN0LnN2Zyc7XG5pbXBvcnQgeyBJQXBwU3RhdGUgfSBmcm9tICdzcmMvbW9kZWxzL0lBcHBTdGF0ZSc7XG5pbXBvcnQgeyBJRmlsdGVyIH0gZnJvbSAnc3JjL3N0b3JlL2ZpbHRlcnMvSUZpbHRlcic7XG5pbXBvcnQgeyBJRmlsdGVySXRlbSB9IGZyb20gJ3NyYy9zdG9yZS9maWx0ZXJzL0lGaWx0ZXJJdGVtJztcbmltcG9ydCB7XG4gIHNldEFjdGl2ZUZpbHRlckdsb2JhbGx5LFxuICBzZXRFdmVudEZpbHRlclBhcmFtLFxufSBmcm9tICdzcmMvc3RvcmUvZ2xvYmFsL2FjdGlvbnMnO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnc3JjL3N0b3JlL3BvaW50cy9tb2RlbHMvSVBvaW50JztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBidWlsZEtRTFF1ZXJ5LCBwYXJzZVNlbGVjdGVkSXRlbXMgfSBmcm9tICdzcmMvdXRpbGl0aWVzL2txbCc7XG5pbXBvcnQgJy4vRmlsdGVyU3R5bGUuc2Nzcyc7XG5pbXBvcnQgRmlsdGVyIGZyb20gJy4vRmlsdGVyJztcbmltcG9ydCBGaWx0ZXJzRHJvcERvd24gZnJvbSAnLi9GaWx0ZXJzRHJvcERvd24nO1xuaW1wb3J0IHsgc2V0U2FtcGxpbmdEYXRhIH0gZnJvbSAnc3JjL3N0b3JlL3NhbXBsaW5ncy9hY3Rpb25zQ3JlYXRvcic7XG5mdW5jdGlvbiBtYXBTdGF0ZVRvUHJvcHMoc3RhdGU6IElBcHBTdGF0ZSkge1xuICBjb25zdCB7IGdsb2JhbF9kYXRhLCBuYXZfY29udGV4dF9kYXRhLCBwb2ludHNfZGF0YSB9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICBnbG9iYWxfZGF0YSxcbiAgICBuYXZfY29udGV4dF9kYXRhLFxuICAgIHBvaW50c19kYXRhLFxuICB9O1xufVxuXG50eXBlIElQcm9wcyA9IENvbm5lY3RlZFByb3BzPHR5cGVvZiBjb25uZWN0b3I+ICYge1xuICBmaWx0ZXJQb3B1cE9wZW46IGJvb2xlYW47XG4gIGZldGNoVHlwZTogc3RyaW5nO1xuICBhcHBseUxvZ2ljPzogKHZhbHVlczogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuY29uc3QgRmlsdGVyQ29udGFpbmVyOiBSZWFjdC5GQzxJUHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBnbG9iYWxfZGF0YSxcbiAgICBuYXZfY29udGV4dF9kYXRhLFxuICAgIHBvaW50c19kYXRhLFxuICAgIGZpbHRlclBvcHVwT3BlbixcbiAgICBhcHBseUxvZ2ljLFxuICAgIGZldGNoVHlwZSA9ICdFdmVudEZpbHRlcnMnLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgbmFtZUlucHV0ID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBmaWx0ZXJDb250ZW50ID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2ZpbHRlcnMsIHNldEZpbHRlcnNdID0gdXNlU3RhdGU8YW55PihbXSk7XG4gIGNvbnN0IFthdmFpbGFibGVGaWx0ZXJJdGVtcywgc2V0QXZhaWxhYmxlRmlsdGVySXRlbXNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbcmVuZGVyZWQsIHNldFJlbmRlcmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW1dhSWQsIHNldFdhSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4oKTtcbiAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgY29uc3QgW2FjdGl2ZUZpbHRlciwgc2V0QWN0aXZlRmlsdGVyXSA9IHVzZVN0YXRlPGFueT4odW5kZWZpbmVkKTtcbiAgY29uc3QgW2FjdGl2ZUZpbHRlckNvcHksIHNldEFjdGl2ZUZpbHRlckNvcHldID0gdXNlU3RhdGU8YW55Pih1bmRlZmluZWQpO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGNzcmYgPSBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdjc3JmLXRva2VuJ11cIilcbiAgICAuZ2V0QXR0cmlidXRlKCdjb250ZW50Jyk7XG4gIGNvbnN0IHVzZVF1ZXJ5ID0gKCkgPT4ge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHVzZUxvY2F0aW9uKCkuc2VhcmNoKTtcbiAgfTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB1c2VRdWVyeSgpO1xuICBjb25zdCBnZXRLUUxGcm9tVVJMID0gKCkgPT4ge1xuICAgIHJldHVybiBxdWVyeS5nZXQoJ3ZhbHVlc0Zyb21LUUwnKTtcbiAgfTtcblxuICBjb25zdCBnZXRQb2ludHNUb0ZpbHRlcnMgPSAoYXZhaWxhYmxlRmlsdGVySXRlbXM6IGFueSwgZmlsdGVyczogYW55KSA9PiB7XG4gICAgbGV0IGludGVyZXN0UG9pbnRGaWx0ZXJJdGVtID0gYXZhaWxhYmxlRmlsdGVySXRlbXMuZmluZChcbiAgICAgIChmOiBJRmlsdGVySXRlbSkgPT4gZi50eXBlID09PSAnSW50ZXJlc3RQb2ludEZpbHRlckl0ZW0nLFxuICAgICk7XG4gICAgbGV0IGZpbHRlcmVkUG9pbnRzRGF0YSA9IHBvaW50c19kYXRhLml0ZW1zXG4gICAgICAuZmlsdGVyKChwb2ludDogSVBvaW50KSA9PiBwb2ludC5wYXJ0X29mX29ic2VydmF0aW9uID09PSB0cnVlKVxuICAgICAgLm1hcCgocG9pbnQ6IElQb2ludCkgPT4ge1xuICAgICAgICByZXR1cm4geyBpZDogcG9pbnQuaWQsIG5hbWU6IHBvaW50Lmdyb3VwLm5hbWUgfTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKGludGVyZXN0UG9pbnRGaWx0ZXJJdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGludGVyZXN0UG9pbnRGaWx0ZXJJdGVtLm9wdGlvbnMgPSBmaWx0ZXJlZFBvaW50c0RhdGE7XG4gICAgfVxuXG4gICAgZmlsdGVycy5mb3JFYWNoKChmOiBJRmlsdGVyKSA9PiB7XG4gICAgICBsZXQgZmlsdGVySXRlbSA9IGYuZmlsdGVyX2l0ZW1zLmZpbmQoXG4gICAgICAgIChmaTogSUZpbHRlckl0ZW0pID0+IGZpLnR5cGUgPT09ICdJbnRlcmVzdFBvaW50RmlsdGVySXRlbScsXG4gICAgICApO1xuXG4gICAgICBpZiAoZmlsdGVySXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZpbHRlckl0ZW0uYXZhaWxhYmxlX29wdGlvbnMgPSBmaWx0ZXJlZFBvaW50c0RhdGE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzZXRGaWx0ZXJzKGZpbHRlcnMpO1xuICB9O1xuXG4gIGNvbnN0IGZldGNoRXZlbnRGaWx0ZXJzID0gKFxuICAgIHByZXBhcmVkUGFyYW1zOiBhbnksXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZmlsdGVyOiBhbnkgPSBudWxsLFxuICApID0+IHtcbiAgICBpZiAoY3NyZiAhPT0gbnVsbCkge1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnWC1DU1JGLVRva2VuJzogY3NyZixcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocHJlcGFyZWRQYXJhbXMpLFxuICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgZ2V0UG9pbnRzVG9GaWx0ZXJzKGRhdGEuYXZhaWxhYmxlX2ZpbHRlcl9pdGVtcywgZGF0YS5maWx0ZXJzKTtcblxuICAgICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBzYXZlZCA9IGRhdGEuZmlsdGVycy5maW5kKFxuICAgICAgICAgICAgICAoZjogSUZpbHRlcikgPT4gZi5uYW1lID09PSBmaWx0ZXIubmFtZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXIoc2F2ZWQpO1xuICAgICAgICAgICAgc2V0QWN0aXZlRmlsdGVyQ29weShzYXZlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGVlcENsb25lID0gKGRhdGE6IGFueSkgPT4ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgfTtcblxuICBjb25zdCBnZXREYXRhID0gKCkgPT4ge1xuICAgIGZldGNoKFxuICAgICAgYC91aV9maWx0ZXJzLmpzb24/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgIH0mZmlsdGVyX3R5cGU9JHtmZXRjaFR5cGV9JnZhbHVlc0Zyb21LUUw9JHtnZXRLUUxGcm9tVVJMKCl9YCxcbiAgICApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgIGdldFBvaW50c1RvRmlsdGVycyhqc29uLmF2YWlsYWJsZV9maWx0ZXJfaXRlbXMsIGpzb24uZmlsdGVycyk7XG5cbiAgICAgICAgbGV0IGpzb25TaGFsbG93Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIGpzb24pO1xuICAgICAgICBqc29uU2hhbGxvd0NvcHkuZmlsdGVycyA9IGRlZXBDbG9uZShqc29uU2hhbGxvd0NvcHkuZmlsdGVycyk7XG4gICAgICAgIGxldCBhY3RpdmUgPSBqc29uU2hhbGxvd0NvcHkuZGlzcGxheWVkX2ZpbHRlcjtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2xvYmFsX2RhdGEuc2VsZWN0ZWRQZXJpb2QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGdsb2JhbF9kYXRhLnNlbGVjdGVkUGVyaW9kICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGFjdGl2ZS5maWx0ZXJfaXRlbXNbMV0uc2VsZWN0ZWRfb3B0aW9ucyA9IFtcbiAgICAgICAgICAgIGdsb2JhbF9kYXRhLnNlbGVjdGVkUGVyaW9kLFxuICAgICAgICAgIF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0aXZlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RpdmF0ZUZpbHRlcihqc29uU2hhbGxvd0NvcHkuZmlsdGVyc1swXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0QXZhaWxhYmxlRmlsdGVySXRlbXMoanNvblNoYWxsb3dDb3B5LmF2YWlsYWJsZV9maWx0ZXJfaXRlbXMpO1xuICAgICAgICAgIHNldEFjdGl2ZUZpbHRlcihhY3RpdmUpO1xuICAgICAgICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoYWN0aXZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGx5RmlsdGVyKGFjdGl2ZSk7XG4gICAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGaWx0ZXJDaGFuZ2UgPSAoZmlsdGVyOiBJRmlsdGVyKSA9PiB7XG4gICAgc2V0QWN0aXZlRmlsdGVyKGRlZXBDbG9uZShmaWx0ZXIpKTtcbiAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGRlZXBDbG9uZShmaWx0ZXIpKTtcbiAgICBmaWx0ZXJDb250ZW50LmN1cnJlbnQhLmNsaWNrKCk7XG4gIH07XG5cbiAgY29uc3Qgc2F2ZUFjdGl2ZUZpbHRlciA9IChcbiAgICBmaWx0ZXI6XG4gICAgICB8IElGaWx0ZXJcbiAgICAgIHwge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIGZpbHRlcl9pdGVtczogSUZpbHRlckl0ZW1bXTtcbiAgICAgICAgICBpc19hY3RpdmU6IGJvb2xlYW47XG4gICAgICAgIH0sXG4gICkgPT4ge1xuICAgIGxldCBjbG9uZWRGaWx0ZXJzID0gZGVlcENsb25lKGZpbHRlcnMpO1xuICAgIGxldCBmaWx0ZXJUb01vZGlmeUluZGV4ID0gY2xvbmVkRmlsdGVycy5pbmRleE9mKFxuICAgICAgY2xvbmVkRmlsdGVycy5maW5kKChmOiBhbnkpID0+IGYuaWQgPT09IGZpbHRlci5pZCksXG4gICAgKTtcbiAgICBsZXQgcHJlcGFyZWRQYXJhbXMgPSB7XG4gICAgICBmaWx0ZXJfdHlwZTogZmV0Y2hUeXBlLFxuICAgICAgdWlfZmlsdGVyOiB7XG4gICAgICAgIG5hbWU6IGZpbHRlci5uYW1lLFxuICAgICAgICBpc19hY3RpdmU6IGZpbHRlci5pc19hY3RpdmUsXG4gICAgICAgIGZpbHRlcl9pdGVtczogSlNPTi5zdHJpbmdpZnkoZmlsdGVyLmZpbHRlcl9pdGVtcyksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjbG9uZWRGaWx0ZXJzW2ZpbHRlclRvTW9kaWZ5SW5kZXhdID0gZmlsdGVyO1xuICAgIHNldEZpbHRlcnMoY2xvbmVkRmlsdGVycyk7XG4gICAgc2V0QWN0aXZlRmlsdGVyKGZpbHRlcik7XG4gICAgc2V0QWN0aXZlRmlsdGVyQ29weShmaWx0ZXIpO1xuXG4gICAgaWYgKE1hdGguc2lnbihmaWx0ZXIuaWQpID4gMCkge1xuICAgICAgZmV0Y2hFdmVudEZpbHRlcnMoXG4gICAgICAgIHByZXBhcmVkUGFyYW1zLFxuICAgICAgICAnUFVUJyxcbiAgICAgICAgYC91aV9maWx0ZXJzLyR7ZmlsdGVyLmlkfT93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgICAgIGZpbHRlcixcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZldGNoRXZlbnRGaWx0ZXJzKFxuICAgICAgICBwcmVwYXJlZFBhcmFtcyxcbiAgICAgICAgJ1BPU1QnLFxuICAgICAgICBgL3VpX2ZpbHRlcnM/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7Z2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgICAgICBmaWx0ZXIsXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjcmVhdGVGaWx0ZXIgPSAoZmlsdGVyOiBJRmlsdGVyLCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgbmV3RmlsdGVyID0ge1xuICAgICAgaWQ6IC0xLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIGZpbHRlcl9pdGVtczogZmlsdGVyLmZpbHRlcl9pdGVtcyxcbiAgICAgIGlzX2FjdGl2ZTogZmFsc2UsXG4gICAgfTtcblxuICAgIHNldEZpbHRlcnMoWy4uLmZpbHRlcnMsIG5ld0ZpbHRlcl0pO1xuICAgIHNldEFjdGl2ZUZpbHRlckNvcHkobmV3RmlsdGVyKTtcbiAgICBzZXRBY3RpdmVGaWx0ZXIobmV3RmlsdGVyKTtcbiAgICBzYXZlQWN0aXZlRmlsdGVyKG5ld0ZpbHRlcik7XG4gIH07XG5cbiAgY29uc3QgZGVsZXRlRmlsdGVyID0gKGZpbHRlcjogSUZpbHRlcikgPT4ge1xuICAgIGlmIChjc3JmICE9PSBudWxsICYmIGZpbHRlci5pZCAhPT0gLTEpIHtcbiAgICAgIGZldGNoKFxuICAgICAgICBgL3VpX2ZpbHRlcnMvJHtmaWx0ZXIuaWR9P3dhdGVyX2F1dGhvcml0eV9pZD0ke2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWR9JmZpbHRlcl90eXBlPSR7ZmV0Y2hUeXBlfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdYLUNTUkYtVG9rZW4nOiBjc3JmLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGxldCBhY3RpdmUgPSBkYXRhLmZpbHRlcnMuZmluZChcbiAgICAgICAgICAgIChmaWx0ZXI6IElGaWx0ZXIpID0+IGZpbHRlci5pc19hY3RpdmUgPT09IHRydWUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChhY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0RmlsdGVycyhkYXRhLmZpbHRlcnMpO1xuICAgICAgICAgICAgc2V0QWN0aXZlRmlsdGVyKGFjdGl2ZSk7XG4gICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGFjdGl2ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGdldERhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRhdGEuZmlsdGVyc1swXS5pc19hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXIoZGF0YS5maWx0ZXJzWzBdKTtcbiAgICAgICAgICAgICAgc2V0QWN0aXZlRmlsdGVyQ29weShkYXRhLmZpbHRlcnNbMF0pO1xuICAgICAgICAgICAgICBzZXRGaWx0ZXJzKGRhdGEuZmlsdGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0RXZlbnRJZEZyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgnZXZlbnRJZCcpO1xuICB9O1xuXG4gIGNvbnN0IGdldFdhSWRGcm9tVVJMID0gKCkgPT4ge1xuICAgIHJldHVybiBxdWVyeS5nZXQoJ3dhdGVyX2F1dGhvcml0eV9pZCcpO1xuICB9O1xuXG4gIGNvbnN0IGdldEtRTFZhbHVlc0Zyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgndmFsdWVzRnJvbUtRTCcpO1xuICB9O1xuXG4gIGNvbnN0IGFjdGl2YXRlRmlsdGVyID0gKGZpbHRlcjogSUZpbHRlcikgPT4ge1xuICAgIGZldGNoRXZlbnRGaWx0ZXJzKFxuICAgICAge30sXG4gICAgICAnUFVUJyxcbiAgICAgIGAvdWlfZmlsdGVycy9hY3RpdmF0ZS8ke2ZpbHRlci5pZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7Z2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZH0mZmlsdGVyX3R5cGU9JHtmZXRjaFR5cGV9YCxcbiAgICAgIGZpbHRlcixcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGFwcGx5RmlsdGVyID0gKGZpbHRlciA9IGFjdGl2ZUZpbHRlckNvcHkpID0+IHtcbiAgICBsZXQgdmFsdWUgPSAnc2V2ZXJpdHknO1xuXG4gICAgaWYgKG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lID09PSAnc2FtcGxpbmdzLWxpc3QnKSB7XG4gICAgICB2YWx1ZSA9ICduZXdlc3QnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZ2V0S1FMVmFsdWVzRnJvbVVSTCgpICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCdPUkRFUl9CWScpICYmXG4gICAgICAgICAgZ2V0S1FMVmFsdWVzRnJvbVVSTCgpIS5pbmNsdWRlcygnbmV3ZXN0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSAnbmV3ZXN0JztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCdPUkRFUl9CWScpICYmXG4gICAgICAgICAgZ2V0S1FMVmFsdWVzRnJvbVVSTCgpIS5pbmNsdWRlcygnb2xkZXN0JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSAnb2xkZXN0JztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkhLmluY2x1ZGVzKCdPUkRFUl9CWScpICYmXG4gICAgICAgICAgZ2V0S1FMVmFsdWVzRnJvbVVSTCgpIS5pbmNsdWRlcygnc2V2ZXJpdHknKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9ICdzZXZlcml0eSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWUgPT09ICdldmVudHNfdmlldycpIHtcbiAgICAgIGhpc3RvcnkucHVzaChcbiAgICAgICAgYC8ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtcbiAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgIH0mbG9jYWxlPSR7XG4gICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICB9JmV2ZW50SWQ9JHtnZXRFdmVudElkRnJvbVVSTCgpfSZ2YWx1ZXNGcm9tS1FMPSR7YnVpbGRLUUxRdWVyeShcbiAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lID09PSAnc2FtcGxpbmdzLWxpc3QnKSB7XG4gICAgICBoaXN0b3J5LnB1c2goXG4gICAgICAgIGAvJHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZX0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgICB9JmxvY2FsZT0ke1xuICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5sb2NhbGVcbiAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7YnVpbGRLUUxRdWVyeShmaWx0ZXIsIHZhbHVlKX1gLFxuICAgICAgKTtcblxuICAgICAgaWYgKGFwcGx5TG9naWMgIT09IHVuZGVmaW5lZCkgYXBwbHlMb2dpYyhidWlsZEtRTFF1ZXJ5KGZpbHRlciwgdmFsdWUpKTtcbiAgICB9XG5cbiAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKGJ1aWxkS1FMUXVlcnkoZmlsdGVyLCB2YWx1ZSkpKTtcbiAgICBkaXNwYXRjaChzZXRBY3RpdmVGaWx0ZXJHbG9iYWxseShmaWx0ZXIpKTtcbiAgICAvLyBBbHdheXMgcmVzZXQgcGFnZSB0byAxIHdoZW4gYSBuZXcgZmlsdGVyIGlzIGFwcGxpZWRcbiAgICBkaXNwYXRjaChzZXRTYW1wbGluZ0RhdGEoeyBjdXJyZW50UGFnZTogMSwgaXNGZXRjaDogZmFsc2UgfSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNyZWF0aW9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgY3JlYXRlRmlsdGVyKGFjdGl2ZUZpbHRlckNvcHksIG5hbWVJbnB1dC5jdXJyZW50IS52YWx1ZSk7XG4gICAgbmFtZUlucHV0LmN1cnJlbnQhLnZhbHVlID0gJyc7XG4gICAgZmlsdGVyQ29udGVudC5jdXJyZW50IS5jbGljaygpO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0V2FJZChnZXRXYUlkRnJvbVVSTCgpKTtcbiAgICBpZiAoIXJlbmRlcmVkKSB7XG4gICAgICBzZXRSZW5kZXJlZCh0cnVlKTtcbiAgICAgIGdldERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGdsb2JhbF9kYXRhLmV2ZW50RmlsdGVyUGFyYW0gPT09ICcnICYmIGZpbHRlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxldCBmaWx0ZXIgPSBmaWx0ZXJzLmZpbmQoKGZpbHRlcjogSUZpbHRlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBmaWx0ZXIuaXNfYWN0aXZlO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0QWN0aXZlRmlsdGVyQ29weShmaWx0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgIHNldFJlbmRlcmVkKGZhbHNlKTtcbiAgICB9O1xuICB9LCBbZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZCwgV2FJZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtgZmlsdGVyLWNvbnRhaW5lciAke1xuICAgICAgICBmaWx0ZXJQb3B1cE9wZW4gPyAnJyA6ICdmaWx0ZXItY29udGFpbmVyLS1oaWRkZW4nXG4gICAgICB9YH1cbiAgICA+XG4gICAgICB7YWN0aXZlRmlsdGVyQ29weSAhPT0gdW5kZWZpbmVkICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9eydmaWx0ZXItY29udGFpbmVyX19jb250ZW50J30gcmVmPXtmaWx0ZXJDb250ZW50fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2ZpbHRlci1jb250YWluZXJfX2NvbnRlbnRfX2hlYWRlcid9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eyd0aXRsZSd9PlxuICAgICAgICAgICAgICA8aDQ+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5maWx0ZXInKX08L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnYWN0aW9ucyd9PlxuICAgICAgICAgICAgICA8RHJvcGRvd24gY2xhc3NOYW1lPXsnYWN0aW9uJ30+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duLlRvZ2dsZSB2YXJpYW50PVwic3VjY2Vzc1wiIGlkPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgIDxMaXN0SWNvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwcmVzZXQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFkMWQxZFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge2FjdGl2ZUZpbHRlckNvcHkubmFtZX17JyAnfVxuICAgICAgICAgICAgICAgICAge2FjdGl2ZUZpbHRlckNvcHkuaWQgPT09IC0xID8gKFxuICAgICAgICAgICAgICAgICAgICA8Yj4gKHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIudW5zYXZlZCcpfSkgPC9iPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Ecm9wZG93bi5Ub2dnbGU+XG5cbiAgICAgICAgICAgICAgICA8RmlsdGVyc0Ryb3BEb3duXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICAgICAgICAgICAgaGFuZGxlRmlsdGVyQ2hhbmdlPXtoYW5kbGVGaWx0ZXJDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBhY3RpdmVGaWx0ZXJDb3B5PXthY3RpdmVGaWx0ZXJDb3B5fVxuICAgICAgICAgICAgICAgICAgYWN0aXZhdGVGaWx0ZXI9e2FjdGl2YXRlRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgZGVsZXRlRmlsdGVyPXtkZWxldGVGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Ecm9wZG93bj5cblxuICAgICAgICAgICAgICA8RHJvcGRvd24gY2xhc3NOYW1lPXsnYWN0aW9uJ30+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duLlRvZ2dsZSB2YXJpYW50PVwic3VjY2Vzc1wiIGlkPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgIDxTYXZlSWNvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzYXZlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxM3B4XCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxM3B4XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxZDFkMWRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPntpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuc2F2ZS5sYWJlbCcpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLlRvZ2dsZT5cblxuICAgICAgICAgICAgICAgIDxEcm9wZG93bi5NZW51PlxuICAgICAgICAgICAgICAgICAgPERyb3Bkb3duLkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2FjdGl2ZUZpbHRlckNvcHkuaWQgPT09IC0xID8gdHJ1ZSA6IGZhbHNlfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2F2ZUFjdGl2ZUZpbHRlcihhY3RpdmVGaWx0ZXJDb3B5KTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5zYXZlLmV4aXN0aW5nJyl9XG4gICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLkl0ZW0+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd24gY2xhc3NOYW1lPXsnYWN0aW9uIGFjdGlvbi0tc2F2ZSd9PlxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24uVG9nZ2xlIHZhcmlhbnQ9XCJzdWNjZXNzXCIgaWQ9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuc2F2ZS5uZXcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bi5Ub2dnbGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eyduZXctZmlsdGVyLXBvcHVwJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5zYXZlLmZpZWxkX3BsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5hbWUgdGhpcyBmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiYmFzaWMtYWRkb24yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtuYW1lSW5wdXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNyZWF0aW9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aTE4bi50KCdkZXZpY2VfaGVhbHRoX3N0YXR1cy5vaycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uTWVudT5cbiAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9Ecm9wZG93bi5NZW51PlxuICAgICAgICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2ZpbHRlci1jb250YWluZXJfX2NvbnRlbnRfX2JvZHknfT5cbiAgICAgICAgICAgIDxGaWx0ZXJcbiAgICAgICAgICAgICAgc2V0QWN0aXZlRmlsdGVyQ29weT17c2V0QWN0aXZlRmlsdGVyQ29weX1cbiAgICAgICAgICAgICAgYWN0aXZlRmlsdGVyQ29weT17YWN0aXZlRmlsdGVyQ29weX1cbiAgICAgICAgICAgICAgYXZhaWxhYmxlRmlsdGVySXRlbXM9e2F2YWlsYWJsZUZpbHRlckl0ZW1zfVxuICAgICAgICAgICAgICBwYXJzZVNlbGVjdGVkSXRlbXM9e3BhcnNlU2VsZWN0ZWRJdGVtc31cbiAgICAgICAgICAgICAgYXBwbHlGaWx0ZXI9e2FwcGx5RmlsdGVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgY29ubmVjdG9yID0gY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMpO1xuZXhwb3J0IGRlZmF1bHQgY29ubmVjdG9yKEZpbHRlckNvbnRhaW5lcik7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxlQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxlQUFBLEdBQUFMLE9BQUE7QUFBMkQsSUFBQU0sU0FBQSxHQUFBTixPQUFBO0FBQUEsSUFBQU8sS0FBQSxHQUFBUCxPQUFBO0FBTTNELElBQUFRLFFBQUEsR0FBQVIsT0FBQTtBQUtBLElBQUFTLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVYsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQVcsT0FBQSxHQUFBUixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVksZ0JBQUEsR0FBQVQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFhLGVBQUEsR0FBQWIsT0FBQTtBQUFxRSxTQUFBYyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLFdBQUEsV0FBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxLQUFBRixXQUFBO0FBQUEsU0FBQWhCLHdCQUFBb0IsR0FBQSxFQUFBSixXQUFBLFNBQUFBLFdBQUEsSUFBQUksR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsV0FBQUQsR0FBQSxRQUFBQSxHQUFBLGFBQUFFLE9BQUEsQ0FBQUYsR0FBQSx5QkFBQUEsR0FBQSw0QkFBQUcsT0FBQSxFQUFBSCxHQUFB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
329
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RCb290c3RyYXAiLCJfRHJvcGRvd24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0UmVkdXgiLCJfcmVhY3RSb3V0ZXJEb20iLCJfZGlza2V0dGUiLCJfbGlzdCIsIl9hY3Rpb25zIiwiX2kxOG4iLCJfa3FsIiwiX0ZpbHRlciIsIl9GaWx0ZXJzRHJvcERvd24iLCJfYWN0aW9uc0NyZWF0b3IiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwibWFwU3RhdGVUb1Byb3BzIiwic3RhdGUiLCJnbG9iYWxfZGF0YSIsIm5hdl9jb250ZXh0X2RhdGEiLCJwb2ludHNfZGF0YSIsIkZpbHRlckNvbnRhaW5lciIsInByb3BzIiwiZmlsdGVyUG9wdXBPcGVuIiwiYXBwbHlMb2dpYyIsImZldGNoVHlwZSIsImRpc3BhdGNoIiwidXNlRGlzcGF0Y2giLCJuYW1lSW5wdXQiLCJ1c2VSZWYiLCJmaWx0ZXJDb250ZW50IiwiZmlsdGVycyIsInNldEZpbHRlcnMiLCJ1c2VTdGF0ZSIsImF2YWlsYWJsZUZpbHRlckl0ZW1zIiwic2V0QXZhaWxhYmxlRmlsdGVySXRlbXMiLCJyZW5kZXJlZCIsInNldFJlbmRlcmVkIiwiV2FJZCIsInNldFdhSWQiLCJhY3RpdmVGaWx0ZXIiLCJzZXRBY3RpdmVGaWx0ZXIiLCJ1bmRlZmluZWQiLCJhY3RpdmVGaWx0ZXJDb3B5Iiwic2V0QWN0aXZlRmlsdGVyQ29weSIsImNzcmYiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRBdHRyaWJ1dGUiLCJ1c2VRdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInVzZUxvY2F0aW9uIiwic2VhcmNoIiwiaGlzdG9yeSIsInVzZUhpc3RvcnkiLCJxdWVyeSIsImdldEtRTEZyb21VUkwiLCJnZXRQb2ludHNUb0ZpbHRlcnMiLCJpbnRlcmVzdFBvaW50RmlsdGVySXRlbSIsImZpbmQiLCJmIiwidHlwZSIsImZpbHRlcmVkUG9pbnRzRGF0YSIsIml0ZW1zIiwiZmlsdGVyIiwicG9pbnQiLCJwYXJ0X29mX29ic2VydmF0aW9uIiwibWFwIiwiaWQiLCJuYW1lIiwiZ3JvdXAiLCJvcHRpb25zIiwiZm9yRWFjaCIsImZpbHRlckl0ZW0iLCJmaWx0ZXJfaXRlbXMiLCJmaSIsImF2YWlsYWJsZV9vcHRpb25zIiwiZmV0Y2hFdmVudEZpbHRlcnMiLCJwcmVwYXJlZFBhcmFtcyIsIm1ldGhvZCIsInVybCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZldGNoIiwiaGVhZGVycyIsIkFjY2VwdCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwidGhlbiIsInJlc3BvbnNlIiwianNvbiIsImRhdGEiLCJhdmFpbGFibGVfZmlsdGVyX2l0ZW1zIiwic2F2ZWQiLCJkZWVwQ2xvbmUiLCJwYXJzZSIsImdldERhdGEiLCJ3YXRlckF1dGhvcml0eUlkIiwianNvblNoYWxsb3dDb3B5IiwiYXNzaWduIiwiYWN0aXZlIiwiZGlzcGxheWVkX2ZpbHRlciIsInNlbGVjdGVkUGVyaW9kIiwic2VsZWN0ZWRfb3B0aW9ucyIsImFjdGl2YXRlRmlsdGVyIiwiYXBwbHlGaWx0ZXIiLCJoYW5kbGVGaWx0ZXJDaGFuZ2UiLCJjdXJyZW50IiwiY2xpY2siLCJzYXZlQWN0aXZlRmlsdGVyIiwiY2xvbmVkRmlsdGVycyIsImZpbHRlclRvTW9kaWZ5SW5kZXgiLCJpbmRleE9mIiwiZmlsdGVyX3R5cGUiLCJ1aV9maWx0ZXIiLCJpc19hY3RpdmUiLCJNYXRoIiwic2lnbiIsImNyZWF0ZUZpbHRlciIsIm5ld0ZpbHRlciIsImRlbGV0ZUZpbHRlciIsImdldEV2ZW50SWRGcm9tVVJMIiwiZ2V0V2FJZEZyb21VUkwiLCJnZXRLUUxWYWx1ZXNGcm9tVVJMIiwidmFsdWUiLCJuYXZDb250ZXh0IiwiaW5jbHVkZXMiLCJwdXNoIiwibG9jYWxlIiwiYnVpbGRLUUxRdWVyeSIsInNldEV2ZW50RmlsdGVyUGFyYW0iLCJzZXRBY3RpdmVGaWx0ZXJHbG9iYWxseSIsInNldFNhbXBsaW5nRGF0YSIsImN1cnJlbnRQYWdlIiwiaXNGZXRjaCIsImhhbmRsZUNyZWF0aW9uQ2xpY2siLCJ1c2VFZmZlY3QiLCJldmVudEZpbHRlclBhcmFtIiwiY2xlYW51cCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJyZWYiLCJpMThuIiwidCIsIlRvZ2dsZSIsInZhcmlhbnQiLCJSZWFjdENvbXBvbmVudCIsImhlaWdodCIsIndpZHRoIiwiZmlsbCIsIk1lbnUiLCJJdGVtIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiRm9ybUNvbnRyb2wiLCJwbGFjZWhvbGRlciIsImF1dG9Gb2N1cyIsIkJ1dHRvbiIsInBhcnNlU2VsZWN0ZWRJdGVtcyIsImNvbm5lY3RvciIsImNvbm5lY3QiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcGFnZXMvRXZlbnRzUGFnZS9ldmVudHMvZXZlbnRzX2xpc3QvRmlsdGVyL0ZpbHRlckNvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJ1dHRvbiwgRm9ybUNvbnRyb2wgfSBmcm9tICdyZWFjdC1ib290c3RyYXAnO1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJ3JlYWN0LWJvb3RzdHJhcC9Ecm9wZG93bic7XG5pbXBvcnQgeyBjb25uZWN0LCBDb25uZWN0ZWRQcm9wcywgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyB1c2VIaXN0b3J5LCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgUmVhY3RDb21wb25lbnQgYXMgU2F2ZUljb24gfSBmcm9tICdzcmMvYXNzZXRzL2ljb25zL2Rpc2tldHRlLnN2Zyc7XG5pbXBvcnQgeyBSZWFjdENvbXBvbmVudCBhcyBMaXN0SWNvbiB9IGZyb20gJ3NyYy9hc3NldHMvaWNvbnMvbGlzdC5zdmcnO1xuaW1wb3J0IHsgSUFwcFN0YXRlIH0gZnJvbSAnc3JjL21vZGVscy9JQXBwU3RhdGUnO1xuaW1wb3J0IHsgSUZpbHRlciB9IGZyb20gJ3NyYy9zdG9yZS9maWx0ZXJzL0lGaWx0ZXInO1xuaW1wb3J0IHsgSUZpbHRlckl0ZW0gfSBmcm9tICdzcmMvc3RvcmUvZmlsdGVycy9JRmlsdGVySXRlbSc7XG5pbXBvcnQge1xuICBzZXRBY3RpdmVGaWx0ZXJHbG9iYWxseSxcbiAgc2V0RXZlbnRGaWx0ZXJQYXJhbSxcbn0gZnJvbSAnc3JjL3N0b3JlL2dsb2JhbC9hY3Rpb25zJztcbmltcG9ydCB7IElQb2ludCB9IGZyb20gJ3NyYy9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgaTE4biBmcm9tICdzcmMvdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgYnVpbGRLUUxRdWVyeSwgcGFyc2VTZWxlY3RlZEl0ZW1zIH0gZnJvbSAnc3JjL3V0aWxpdGllcy9rcWwnO1xuaW1wb3J0ICcuL0ZpbHRlclN0eWxlLnNjc3MnO1xuaW1wb3J0IEZpbHRlciBmcm9tICcuL0ZpbHRlcic7XG5pbXBvcnQgRmlsdGVyc0Ryb3BEb3duIGZyb20gJy4vRmlsdGVyc0Ryb3BEb3duJztcbmltcG9ydCB7IHNldFNhbXBsaW5nRGF0YSB9IGZyb20gJ3NyYy9zdG9yZS9zYW1wbGluZ3MvYWN0aW9uc0NyZWF0b3InO1xuZnVuY3Rpb24gbWFwU3RhdGVUb1Byb3BzKHN0YXRlOiBJQXBwU3RhdGUpIHtcbiAgY29uc3QgeyBnbG9iYWxfZGF0YSwgbmF2X2NvbnRleHRfZGF0YSwgcG9pbnRzX2RhdGEgfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgZ2xvYmFsX2RhdGEsXG4gICAgbmF2X2NvbnRleHRfZGF0YSxcbiAgICBwb2ludHNfZGF0YSxcbiAgfTtcbn1cblxudHlwZSBJUHJvcHMgPSBDb25uZWN0ZWRQcm9wczx0eXBlb2YgY29ubmVjdG9yPiAmIHtcbiAgZmlsdGVyUG9wdXBPcGVuOiBib29sZWFuO1xuICBmZXRjaFR5cGU6IHN0cmluZztcbiAgYXBwbHlMb2dpYz86ICh2YWx1ZXM6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmNvbnN0IEZpbHRlckNvbnRhaW5lcjogUmVhY3QuRkM8SVByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgZ2xvYmFsX2RhdGEsXG4gICAgbmF2X2NvbnRleHRfZGF0YSxcbiAgICBwb2ludHNfZGF0YSxcbiAgICBmaWx0ZXJQb3B1cE9wZW4sXG4gICAgYXBwbHlMb2dpYyxcbiAgICBmZXRjaFR5cGUgPSAnRXZlbnRGaWx0ZXJzJyxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IG5hbWVJbnB1dCA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZmlsdGVyQ29udGVudCA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtmaWx0ZXJzLCBzZXRGaWx0ZXJzXSA9IHVzZVN0YXRlPGFueT4oW10pO1xuICBjb25zdCBbYXZhaWxhYmxlRmlsdGVySXRlbXMsIHNldEF2YWlsYWJsZUZpbHRlckl0ZW1zXSA9IHVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW3JlbmRlcmVkLCBzZXRSZW5kZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtXYUlkLCBzZXRXYUlkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KCk7XG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvbnN0IFthY3RpdmVGaWx0ZXIsIHNldEFjdGl2ZUZpbHRlcl0gPSB1c2VTdGF0ZTxhbnk+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFthY3RpdmVGaWx0ZXJDb3B5LCBzZXRBY3RpdmVGaWx0ZXJDb3B5XSA9IHVzZVN0YXRlPGFueT4odW5kZWZpbmVkKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjc3JmID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0nY3NyZi10b2tlbiddXCIpXG4gICAgLmdldEF0dHJpYnV0ZSgnY29udGVudCcpO1xuICBjb25zdCB1c2VRdWVyeSA9ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh1c2VMb2NhdGlvbigpLnNlYXJjaCk7XG4gIH07XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnkoKTtcbiAgY29uc3QgZ2V0S1FMRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCd2YWx1ZXNGcm9tS1FMJyk7XG4gIH07XG5cbiAgY29uc3QgZ2V0UG9pbnRzVG9GaWx0ZXJzID0gKGF2YWlsYWJsZUZpbHRlckl0ZW1zOiBhbnksIGZpbHRlcnM6IGFueSkgPT4ge1xuICAgIGxldCBpbnRlcmVzdFBvaW50RmlsdGVySXRlbSA9IGF2YWlsYWJsZUZpbHRlckl0ZW1zLmZpbmQoXG4gICAgICAoZjogSUZpbHRlckl0ZW0pID0+IGYudHlwZSA9PT0gJ0ludGVyZXN0UG9pbnRGaWx0ZXJJdGVtJyxcbiAgICApO1xuICAgIGxldCBmaWx0ZXJlZFBvaW50c0RhdGEgPSBwb2ludHNfZGF0YS5pdGVtc1xuICAgICAgLmZpbHRlcigocG9pbnQ6IElQb2ludCkgPT4gcG9pbnQucGFydF9vZl9vYnNlcnZhdGlvbiA9PT0gdHJ1ZSlcbiAgICAgIC5tYXAoKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHBvaW50LmlkLCBuYW1lOiBwb2ludC5ncm91cC5uYW1lIH07XG4gICAgICB9KTtcblxuICAgIGlmIChpbnRlcmVzdFBvaW50RmlsdGVySXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnRlcmVzdFBvaW50RmlsdGVySXRlbS5vcHRpb25zID0gZmlsdGVyZWRQb2ludHNEYXRhO1xuICAgIH1cblxuICAgIGZpbHRlcnMuZm9yRWFjaCgoZjogSUZpbHRlcikgPT4ge1xuICAgICAgbGV0IGZpbHRlckl0ZW0gPSBmLmZpbHRlcl9pdGVtcy5maW5kKFxuICAgICAgICAoZmk6IElGaWx0ZXJJdGVtKSA9PiBmaS50eXBlID09PSAnSW50ZXJlc3RQb2ludEZpbHRlckl0ZW0nLFxuICAgICAgKTtcblxuICAgICAgaWYgKGZpbHRlckl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmaWx0ZXJJdGVtLmF2YWlsYWJsZV9vcHRpb25zID0gZmlsdGVyZWRQb2ludHNEYXRhO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc2V0RmlsdGVycyhmaWx0ZXJzKTtcbiAgfTtcblxuICBjb25zdCBmZXRjaEV2ZW50RmlsdGVycyA9IChcbiAgICBwcmVwYXJlZFBhcmFtczogYW55LFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGZpbHRlcjogYW55ID0gbnVsbCxcbiAgKSA9PiB7XG4gICAgaWYgKGNzcmYgIT09IG51bGwpIHtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgJ1gtQ1NSRi1Ub2tlbic6IGNzcmYsXG4gICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHByZXBhcmVkUGFyYW1zKSxcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGdldFBvaW50c1RvRmlsdGVycyhkYXRhLmF2YWlsYWJsZV9maWx0ZXJfaXRlbXMsIGRhdGEuZmlsdGVycyk7XG5cbiAgICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2F2ZWQgPSBkYXRhLmZpbHRlcnMuZmluZChcbiAgICAgICAgICAgICAgKGY6IElGaWx0ZXIpID0+IGYubmFtZSA9PT0gZmlsdGVyLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2V0QWN0aXZlRmlsdGVyKHNhdmVkKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoc2F2ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlZXBDbG9uZSA9IChkYXRhOiBhbnkpID0+IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gIH07XG5cbiAgY29uc3QgZ2V0RGF0YSA9ICgpID0+IHtcbiAgICBmZXRjaChcbiAgICAgIGAvdWlfZmlsdGVycy5qc29uP3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICB9JmZpbHRlcl90eXBlPSR7ZmV0Y2hUeXBlfSZ2YWx1ZXNGcm9tS1FMPSR7Z2V0S1FMRnJvbVVSTCgpfWAsXG4gICAgKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICBnZXRQb2ludHNUb0ZpbHRlcnMoanNvbi5hdmFpbGFibGVfZmlsdGVyX2l0ZW1zLCBqc29uLmZpbHRlcnMpO1xuXG4gICAgICAgIGxldCBqc29uU2hhbGxvd0NvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBqc29uKTtcbiAgICAgICAganNvblNoYWxsb3dDb3B5LmZpbHRlcnMgPSBkZWVwQ2xvbmUoanNvblNoYWxsb3dDb3B5LmZpbHRlcnMpO1xuICAgICAgICBsZXQgYWN0aXZlID0ganNvblNoYWxsb3dDb3B5LmRpc3BsYXllZF9maWx0ZXI7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdsb2JhbF9kYXRhLnNlbGVjdGVkUGVyaW9kICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBnbG9iYWxfZGF0YS5zZWxlY3RlZFBlcmlvZCAhPT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICBhY3RpdmUuZmlsdGVyX2l0ZW1zWzFdLnNlbGVjdGVkX29wdGlvbnMgPSBbXG4gICAgICAgICAgICBnbG9iYWxfZGF0YS5zZWxlY3RlZFBlcmlvZCxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0aXZhdGVGaWx0ZXIoanNvblNoYWxsb3dDb3B5LmZpbHRlcnNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEF2YWlsYWJsZUZpbHRlckl0ZW1zKGpzb25TaGFsbG93Q29weS5hdmFpbGFibGVfZmlsdGVyX2l0ZW1zKTtcbiAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXIoYWN0aXZlKTtcbiAgICAgICAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KGFjdGl2ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBseUZpbHRlcihhY3RpdmUpO1xuICAgICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRmlsdGVyQ2hhbmdlID0gKGZpbHRlcjogSUZpbHRlcikgPT4ge1xuICAgIHNldEFjdGl2ZUZpbHRlcihkZWVwQ2xvbmUoZmlsdGVyKSk7XG4gICAgc2V0QWN0aXZlRmlsdGVyQ29weShkZWVwQ2xvbmUoZmlsdGVyKSk7XG4gICAgZmlsdGVyQ29udGVudC5jdXJyZW50IS5jbGljaygpO1xuICB9O1xuXG4gIGNvbnN0IHNhdmVBY3RpdmVGaWx0ZXIgPSAoXG4gICAgZmlsdGVyOlxuICAgICAgfCBJRmlsdGVyXG4gICAgICB8IHtcbiAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICBmaWx0ZXJfaXRlbXM6IElGaWx0ZXJJdGVtW107XG4gICAgICAgICAgaXNfYWN0aXZlOiBib29sZWFuO1xuICAgICAgICB9LFxuICApID0+IHtcbiAgICBsZXQgY2xvbmVkRmlsdGVycyA9IGRlZXBDbG9uZShmaWx0ZXJzKTtcbiAgICBsZXQgZmlsdGVyVG9Nb2RpZnlJbmRleCA9IGNsb25lZEZpbHRlcnMuaW5kZXhPZihcbiAgICAgIGNsb25lZEZpbHRlcnMuZmluZCgoZjogYW55KSA9PiBmLmlkID09PSBmaWx0ZXIuaWQpLFxuICAgICk7XG4gICAgbGV0IHByZXBhcmVkUGFyYW1zID0ge1xuICAgICAgZmlsdGVyX3R5cGU6IGZldGNoVHlwZSxcbiAgICAgIHVpX2ZpbHRlcjoge1xuICAgICAgICBuYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgaXNfYWN0aXZlOiBmaWx0ZXIuaXNfYWN0aXZlLFxuICAgICAgICBmaWx0ZXJfaXRlbXM6IEpTT04uc3RyaW5naWZ5KGZpbHRlci5maWx0ZXJfaXRlbXMpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xvbmVkRmlsdGVyc1tmaWx0ZXJUb01vZGlmeUluZGV4XSA9IGZpbHRlcjtcbiAgICBzZXRGaWx0ZXJzKGNsb25lZEZpbHRlcnMpO1xuICAgIHNldEFjdGl2ZUZpbHRlcihmaWx0ZXIpO1xuICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoZmlsdGVyKTtcblxuICAgIGlmIChNYXRoLnNpZ24oZmlsdGVyLmlkKSA+IDApIHtcbiAgICAgIGZldGNoRXZlbnRGaWx0ZXJzKFxuICAgICAgICBwcmVwYXJlZFBhcmFtcyxcbiAgICAgICAgJ1BVVCcsXG4gICAgICAgIGAvdWlfZmlsdGVycy8ke2ZpbHRlci5pZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7Z2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgICAgICBmaWx0ZXIsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmZXRjaEV2ZW50RmlsdGVycyhcbiAgICAgICAgcHJlcGFyZWRQYXJhbXMsXG4gICAgICAgICdQT1NUJyxcbiAgICAgICAgYC91aV9maWx0ZXJzP3dhdGVyX2F1dGhvcml0eV9pZD0ke2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICAgICAgZmlsdGVyLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlRmlsdGVyID0gKGZpbHRlcjogSUZpbHRlciwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgbGV0IG5ld0ZpbHRlciA9IHtcbiAgICAgIGlkOiAtMSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBmaWx0ZXJfaXRlbXM6IGZpbHRlci5maWx0ZXJfaXRlbXMsXG4gICAgICBpc19hY3RpdmU6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzZXRGaWx0ZXJzKFsuLi5maWx0ZXJzLCBuZXdGaWx0ZXJdKTtcbiAgICBzZXRBY3RpdmVGaWx0ZXJDb3B5KG5ld0ZpbHRlcik7XG4gICAgc2V0QWN0aXZlRmlsdGVyKG5ld0ZpbHRlcik7XG4gICAgc2F2ZUFjdGl2ZUZpbHRlcihuZXdGaWx0ZXIpO1xuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZUZpbHRlciA9IChmaWx0ZXI6IElGaWx0ZXIpID0+IHtcbiAgICBpZiAoY3NyZiAhPT0gbnVsbCAmJiBmaWx0ZXIuaWQgIT09IC0xKSB7XG4gICAgICBmZXRjaChcbiAgICAgICAgYC91aV9maWx0ZXJzLyR7ZmlsdGVyLmlkfT93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfSZmaWx0ZXJfdHlwZT0ke2ZldGNoVHlwZX1gLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnWC1DU1JGLVRva2VuJzogY3NyZixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICBsZXQgYWN0aXZlID0gZGF0YS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAoZmlsdGVyOiBJRmlsdGVyKSA9PiBmaWx0ZXIuaXNfYWN0aXZlID09PSB0cnVlLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoYWN0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNldEZpbHRlcnMoZGF0YS5maWx0ZXJzKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlcihhY3RpdmUpO1xuICAgICAgICAgICAgc2V0QWN0aXZlRmlsdGVyQ29weShhY3RpdmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5maWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBnZXREYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkYXRhLmZpbHRlcnNbMF0uaXNfYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgc2V0QWN0aXZlRmlsdGVyKGRhdGEuZmlsdGVyc1swXSk7XG4gICAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoZGF0YS5maWx0ZXJzWzBdKTtcbiAgICAgICAgICAgICAgc2V0RmlsdGVycyhkYXRhLmZpbHRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldEV2ZW50SWRGcm9tVVJMID0gKCkgPT4ge1xuICAgIHJldHVybiBxdWVyeS5nZXQoJ2V2ZW50SWQnKTtcbiAgfTtcblxuICBjb25zdCBnZXRXYUlkRnJvbVVSTCA9ICgpID0+IHtcbiAgICByZXR1cm4gcXVlcnkuZ2V0KCd3YXRlcl9hdXRob3JpdHlfaWQnKTtcbiAgfTtcblxuICBjb25zdCBnZXRLUUxWYWx1ZXNGcm9tVVJMID0gKCkgPT4ge1xuICAgIHJldHVybiBxdWVyeS5nZXQoJ3ZhbHVlc0Zyb21LUUwnKTtcbiAgfTtcblxuICBjb25zdCBhY3RpdmF0ZUZpbHRlciA9IChmaWx0ZXI6IElGaWx0ZXIpID0+IHtcbiAgICBmZXRjaEV2ZW50RmlsdGVycyhcbiAgICAgIHt9LFxuICAgICAgJ1BVVCcsXG4gICAgICBgL3VpX2ZpbHRlcnMvYWN0aXZhdGUvJHtmaWx0ZXIuaWR9P3dhdGVyX2F1dGhvcml0eV9pZD0ke2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWR9JmZpbHRlcl90eXBlPSR7ZmV0Y2hUeXBlfWAsXG4gICAgICBmaWx0ZXIsXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBhcHBseUZpbHRlciA9IChmaWx0ZXIgPSBhY3RpdmVGaWx0ZXJDb3B5KSA9PiB7XG4gICAgbGV0IHZhbHVlID0gJ3NldmVyaXR5JztcblxuICAgIGlmIChuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZSA9PT0gJ3NhbXBsaW5ncy1saXN0Jykge1xuICAgICAgdmFsdWUgPSAnbmV3ZXN0JztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGdldEtRTFZhbHVlc0Zyb21VUkwoKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2V0S1FMVmFsdWVzRnJvbVVSTCgpIS5pbmNsdWRlcygnT1JERVJfQlknKSAmJlxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ25ld2VzdCcpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gJ25ld2VzdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZ2V0S1FMVmFsdWVzRnJvbVVSTCgpIS5pbmNsdWRlcygnT1JERVJfQlknKSAmJlxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ29sZGVzdCcpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gJ29sZGVzdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZ2V0S1FMVmFsdWVzRnJvbVVSTCgpIS5pbmNsdWRlcygnT1JERVJfQlknKSAmJlxuICAgICAgICAgIGdldEtRTFZhbHVlc0Zyb21VUkwoKSEuaW5jbHVkZXMoJ3NldmVyaXR5JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSAnc2V2ZXJpdHknO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lID09PSAnZXZlbnRzX3ZpZXcnKSB7XG4gICAgICBoaXN0b3J5LnB1c2goXG4gICAgICAgIGAvJHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZX0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgICB9JmxvY2FsZT0ke1xuICAgICAgICAgIG5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5sb2NhbGVcbiAgICAgICAgfSZldmVudElkPSR7Z2V0RXZlbnRJZEZyb21VUkwoKX0mdmFsdWVzRnJvbUtRTD0ke2J1aWxkS1FMUXVlcnkoXG4gICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZSA9PT0gJ3NhbXBsaW5ncy1saXN0Jykge1xuICAgICAgaGlzdG9yeS5wdXNoKFxuICAgICAgICBgLyR7bmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWV9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgfSZsb2NhbGU9JHtcbiAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlXG4gICAgICAgIH0mdmFsdWVzRnJvbUtRTD0ke2J1aWxkS1FMUXVlcnkoZmlsdGVyLCB2YWx1ZSl9YCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChhcHBseUxvZ2ljICE9PSB1bmRlZmluZWQpIGFwcGx5TG9naWMoYnVpbGRLUUxRdWVyeShmaWx0ZXIsIHZhbHVlKSk7XG4gICAgfVxuXG4gICAgZGlzcGF0Y2goc2V0RXZlbnRGaWx0ZXJQYXJhbShidWlsZEtRTFF1ZXJ5KGZpbHRlciwgdmFsdWUpKSk7XG4gICAgZGlzcGF0Y2goc2V0QWN0aXZlRmlsdGVyR2xvYmFsbHkoZmlsdGVyKSk7XG4gICAgLy8gQWx3YXlzIHJlc2V0IHBhZ2UgdG8gMSB3aGVuIGEgbmV3IGZpbHRlciBpcyBhcHBsaWVkXG4gICAgZGlzcGF0Y2goc2V0U2FtcGxpbmdEYXRhKHsgY3VycmVudFBhZ2U6IDEsIGlzRmV0Y2g6IGZhbHNlIH0pKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDcmVhdGlvbkNsaWNrID0gKCkgPT4ge1xuICAgIGNyZWF0ZUZpbHRlcihhY3RpdmVGaWx0ZXJDb3B5LCBuYW1lSW5wdXQuY3VycmVudCEudmFsdWUpO1xuICAgIG5hbWVJbnB1dC5jdXJyZW50IS52YWx1ZSA9ICcnO1xuICAgIGZpbHRlckNvbnRlbnQuY3VycmVudCEuY2xpY2soKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFdhSWQoZ2V0V2FJZEZyb21VUkwoKSk7XG4gICAgaWYgKCFyZW5kZXJlZCkge1xuICAgICAgc2V0UmVuZGVyZWQodHJ1ZSk7XG4gICAgICBnZXREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnbG9iYWxfZGF0YS5ldmVudEZpbHRlclBhcmFtID09PSAnJyAmJiBmaWx0ZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBsZXQgZmlsdGVyID0gZmlsdGVycy5maW5kKChmaWx0ZXI6IElGaWx0ZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyLmlzX2FjdGl2ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldEFjdGl2ZUZpbHRlckNvcHkoZmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICBzZXRSZW5kZXJlZChmYWxzZSk7XG4gICAgfTtcbiAgfSwgW2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWQsIFdhSWRdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YGZpbHRlci1jb250YWluZXIgJHtcbiAgICAgICAgZmlsdGVyUG9wdXBPcGVuID8gJycgOiAnZmlsdGVyLWNvbnRhaW5lci0taGlkZGVuJ1xuICAgICAgfWB9XG4gICAgPlxuICAgICAge2FjdGl2ZUZpbHRlckNvcHkgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnZmlsdGVyLWNvbnRhaW5lcl9fY29udGVudCd9IHJlZj17ZmlsdGVyQ29udGVudH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydmaWx0ZXItY29udGFpbmVyX19jb250ZW50X19oZWFkZXInfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsndGl0bGUnfT5cbiAgICAgICAgICAgICAgPGg0PntpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuZmlsdGVyJyl9PC9oND5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17J2FjdGlvbnMnfT5cbiAgICAgICAgICAgICAgPERyb3Bkb3duIGNsYXNzTmFtZT17J2FjdGlvbid9PlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bi5Ub2dnbGUgdmFyaWFudD1cInN1Y2Nlc3NcIiBpZD1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICA8TGlzdEljb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHJlc2V0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxZDFkMWRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHthY3RpdmVGaWx0ZXJDb3B5Lm5hbWV9eycgJ31cbiAgICAgICAgICAgICAgICAgIHthY3RpdmVGaWx0ZXJDb3B5LmlkID09PSAtMSA/IChcbiAgICAgICAgICAgICAgICAgICAgPGI+ICh7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLnVuc2F2ZWQnKX0pIDwvYj5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uVG9nZ2xlPlxuXG4gICAgICAgICAgICAgICAgPEZpbHRlcnNEcm9wRG93blxuICAgICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICAgIGhhbmRsZUZpbHRlckNoYW5nZT17aGFuZGxlRmlsdGVyQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgYWN0aXZlRmlsdGVyQ29weT17YWN0aXZlRmlsdGVyQ29weX1cbiAgICAgICAgICAgICAgICAgIGFjdGl2YXRlRmlsdGVyPXthY3RpdmF0ZUZpbHRlcn1cbiAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbHRlcj17ZGVsZXRlRmlsdGVyfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd24+XG5cbiAgICAgICAgICAgICAgPERyb3Bkb3duIGNsYXNzTmFtZT17J2FjdGlvbid9PlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bi5Ub2dnbGUgdmFyaWFudD1cInN1Y2Nlc3NcIiBpZD1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICA8U2F2ZUljb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2F2ZS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTNweFwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTNweFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMWQxZDFkXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLnNhdmUubGFiZWwnKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9Ecm9wZG93bi5Ub2dnbGU+XG5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd24uTWVudT5cbiAgICAgICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXthY3RpdmVGaWx0ZXJDb3B5LmlkID09PSAtMSA/IHRydWUgOiBmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNhdmVBY3RpdmVGaWx0ZXIoYWN0aXZlRmlsdGVyQ29weSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuc2F2ZS5leGlzdGluZycpfVxuICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bi5JdGVtPlxuICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIGNsYXNzTmFtZT17J2FjdGlvbiBhY3Rpb24tLXNhdmUnfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duLlRvZ2dsZSB2YXJpYW50PVwic3VjY2Vzc1wiIGlkPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLnNhdmUubmV3Jyl9XG4gICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uVG9nZ2xlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bi5NZW51PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnbmV3LWZpbHRlci1wb3B1cCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1Db250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuc2F2ZS5maWVsZF9wbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOYW1lIHRoaXMgZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImJhc2ljLWFkZG9uMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17bmFtZUlucHV0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDcmVhdGlvbkNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2kxOG4udCgnZGV2aWNlX2hlYWx0aF9zdGF0dXMub2snKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwvRHJvcGRvd24uTWVudT5cbiAgICAgICAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydmaWx0ZXItY29udGFpbmVyX19jb250ZW50X19ib2R5J30+XG4gICAgICAgICAgICA8RmlsdGVyXG4gICAgICAgICAgICAgIHNldEFjdGl2ZUZpbHRlckNvcHk9e3NldEFjdGl2ZUZpbHRlckNvcHl9XG4gICAgICAgICAgICAgIGFjdGl2ZUZpbHRlckNvcHk9e2FjdGl2ZUZpbHRlckNvcHl9XG4gICAgICAgICAgICAgIGF2YWlsYWJsZUZpbHRlckl0ZW1zPXthdmFpbGFibGVGaWx0ZXJJdGVtc31cbiAgICAgICAgICAgICAgcGFyc2VTZWxlY3RlZEl0ZW1zPXtwYXJzZVNlbGVjdGVkSXRlbXN9XG4gICAgICAgICAgICAgIGFwcGx5RmlsdGVyPXthcHBseUZpbHRlcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKTtcbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3RvcihGaWx0ZXJDb250YWluZXIpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsU0FB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