@kando-env/kando-ui 1.2.234 → 1.2.236

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 (79) hide show
  1. package/lib/Widgets/Map/Map.js +100 -23
  2. package/lib/Widgets/Map/Map.scss +67 -0
  3. package/lib/Widgets/Map/MapUtils.js +27 -12
  4. package/lib/Widgets/Map/areas/AreaPolygons.js +3 -3
  5. package/lib/Widgets/Map/edges/Edge.js +2 -2
  6. package/lib/Widgets/Map/edges/Edge.scss +7 -2
  7. package/lib/Widgets/Map/edges/Edges.js +14 -2
  8. package/lib/Widgets/Map/events/EventIndicator.js +2 -2
  9. package/lib/Widgets/Map/events/EventPath.js +1 -1
  10. package/lib/Widgets/Map/events/EventUtils.js +23 -17
  11. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +6 -2
  12. package/lib/Widgets/Map/events/PointOfEvent.js +10 -7
  13. package/lib/Widgets/Map/points/PointIcon.js +44 -0
  14. package/lib/Widgets/Map/points/PointIcon.scss +230 -0
  15. package/lib/Widgets/Map/points/PointMarker.js +22 -19
  16. package/lib/Widgets/Map/points/PointMarkers.js +62 -13
  17. package/lib/Widgets/Map/points/PointUtils.js +83 -33
  18. package/lib/Widgets/MostPolluting/MostPolluting.js +19 -2
  19. package/lib/assets/icons/pin/pin-matash-white.svg +8 -42
  20. package/lib/assets/icons/plus_v.svg +13 -0
  21. package/lib/assets/icons/water_reuse.svg +27 -0
  22. package/lib/assets/map/pin-matash-clicked.svg +12 -0
  23. package/lib/assets/map/pin-matash-white.svg +8 -28
  24. package/lib/assets/map/pin-plant-clicked.svg +10 -0
  25. package/lib/assets/map/pin-plant-white.svg +6 -28
  26. package/lib/assets/map/pin-suction-clicked.svg +10 -0
  27. package/lib/assets/map/pin-suction.svg +6 -23
  28. package/lib/assets/map/pin-water-clicked.svg +11 -0
  29. package/lib/assets/map/pin-water.svg +7 -17
  30. package/lib/assets/point_icons/WWTP-icon.svg +8 -21
  31. package/lib/assets/point_icons/factory-icon.svg +6 -21
  32. package/lib/assets/point_icons/pump-station-icon.svg +6 -16
  33. package/lib/components/CustomInputs/Select/Select.js +22 -4
  34. package/lib/components/Header/InfoBar/InfoBar.js +7 -1
  35. package/lib/components/SevereEvent/Eta/Eta.js +7 -2
  36. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +4 -3
  37. package/lib/hooks/useMap.js +4 -14
  38. package/lib/i18n/en.json +41 -12
  39. package/lib/i18n/en_uk.json +26 -3
  40. package/lib/i18n/fr.json +25 -2
  41. package/lib/i18n/he.json +34 -3
  42. package/lib/i18n/it.json +25 -2
  43. package/lib/index.js +9 -1
  44. package/lib/macros/getVersion.js +1 -1
  45. package/lib/pages/AreaPage/Dashboard/Sites/Sites.js +19 -2
  46. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +4 -3
  47. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +20 -4
  48. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +4 -4
  49. package/lib/pages/EventsPage/events/event_info/EventInfo.js +3 -2
  50. package/lib/pages/EventsPage/events/events_list/EventsList.js +17 -10
  51. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +5 -1
  52. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +13 -7
  53. package/lib/pages/ProfilePage/Container.js +2 -2
  54. package/lib/pages/ProfilePage/ProfilePage.js +154 -48
  55. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +12 -6
  56. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +7 -6
  57. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +4 -2
  58. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +4 -2
  59. package/lib/pages/WbeDashboard/ExpandableComponent.js +6 -4
  60. package/lib/pages/WbeDashboard/GraphWrapper.js +5 -4
  61. package/lib/pages/WbeDashboard/SummaryGraph.js +45 -34
  62. package/lib/pages/WbeDashboard/Tabs.js +2 -1
  63. package/lib/pages/WbeDashboard/WbeDashboardPage.js +48 -55
  64. package/lib/pages/WbeDashboard/WbeSummaryBar.js +14 -10
  65. package/lib/store/events/actions.js +3 -3
  66. package/lib/store/global/models/IGlobalState.js +1 -1
  67. package/lib/store/permissions/permissionsSlice.js +3 -1
  68. package/lib/store/points/models/IGroup.js +1 -1
  69. package/lib/store/points/models/IPoint.js +1 -1
  70. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +17 -4
  71. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +9 -2
  72. package/lib/ui-kit/KandoTable/KandoTable.js +3 -1
  73. package/lib/utilities/Analytics.js +2 -1
  74. package/lib/utilities/Enum.js +12 -1
  75. package/lib/utilities/edgesMath.js +5 -3
  76. package/lib/utilities/map/icons.js +19 -7
  77. package/lib/utilities/polylinedecorator.js +383 -0
  78. package/lib/utilities/urls.js +3 -3
  79. package/package.json +9 -4
@@ -6,32 +6,44 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.matchIconToSite = void 0;
8
8
  var _pinMatashWhite = _interopRequireDefault(require("assets/map/pin-matash-white.svg"));
9
+ var _pinMatashClicked = _interopRequireDefault(require("assets/map/pin-matash-clicked.svg"));
9
10
  var _pinPlantWhite = _interopRequireDefault(require("assets/map/pin-plant-white.svg"));
11
+ var _pinPlantClicked = _interopRequireDefault(require("assets/map/pin-plant-clicked.svg"));
10
12
  var _pinSuction = _interopRequireDefault(require("assets/map/pin-suction.svg"));
13
+ var _pinSuctionClicked = _interopRequireDefault(require("assets/map/pin-suction-clicked.svg"));
11
14
  var _pinWater = _interopRequireDefault(require("assets/map/pin-water.svg"));
15
+ var _pinWaterClicked = _interopRequireDefault(require("assets/map/pin-water-clicked.svg"));
12
16
  var matchIconToSite = function matchIconToSite(site_type) {
13
- var icon;
17
+ var icon = {
18
+ default: '',
19
+ clicked: ''
20
+ };
14
21
  switch (site_type) {
15
22
  case 'Groups::WastewaterTreatmentPlant':
16
23
  case 'wastewaterTreatmentPlant':
17
- icon = _pinMatashWhite.default;
24
+ icon.default = _pinMatashWhite.default;
25
+ icon.clicked = _pinMatashClicked.default;
18
26
  break;
19
27
  case 'Groups::Factory':
20
28
  case 'factory':
21
- icon = _pinPlantWhite.default;
29
+ icon.default = _pinPlantWhite.default;
30
+ icon.clicked = _pinPlantClicked.default;
22
31
  break;
23
32
  case 'Groups::PumpStation':
24
- icon = _pinSuction.default;
33
+ icon.default = _pinSuction.default;
34
+ icon.clicked = _pinSuctionClicked.default;
25
35
  break;
26
36
  case 'Groups::Collectors':
27
37
  case 'collector':
28
- icon = _pinWater.default;
38
+ icon.default = _pinWater.default;
39
+ icon.clicked = _pinWaterClicked.default;
29
40
  break;
30
41
  default:
31
- icon = _pinWater.default;
42
+ icon.default = _pinWater.default;
43
+ icon.clicked = _pinWaterClicked.default;
32
44
  break;
33
45
  }
34
46
  return icon;
35
47
  };
36
48
  exports.matchIconToSite = matchIconToSite;
37
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYXRjaEljb25Ub1NpdGUiLCJzaXRlX3R5cGUiLCJpY29uIiwiV3d0cEljb24iLCJGYWN0b3J5SWNvbiIsIlB1bXBTdGF0aW9uSWNvbiIsImNvbGxlY3Rvckljb24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxpdGllcy9tYXAvaWNvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFd3dHBJY29uIGZyb20gJ3NyYy9hc3NldHMvbWFwL3Bpbi1tYXRhc2gtd2hpdGUuc3ZnJztcbmltcG9ydCBGYWN0b3J5SWNvbiBmcm9tICdzcmMvYXNzZXRzL21hcC9waW4tcGxhbnQtd2hpdGUuc3ZnJztcbmltcG9ydCBQdW1wU3RhdGlvbkljb24gZnJvbSAnc3JjL2Fzc2V0cy9tYXAvcGluLXN1Y3Rpb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJ3NyYy9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuXG5leHBvcnQgY29uc3QgbWF0Y2hJY29uVG9TaXRlID0gKHNpdGVfdHlwZTogc3RyaW5nKSA9PiB7XG4gIGxldCBpY29uO1xuICBzd2l0Y2ggKHNpdGVfdHlwZSkge1xuICAgIGNhc2UgJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JzpcbiAgICBjYXNlICd3YXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnOlxuICAgICAgaWNvbiA9IFd3dHBJY29uO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnR3JvdXBzOjpGYWN0b3J5JzpcbiAgICBjYXNlICdmYWN0b3J5JzpcbiAgICAgIGljb24gPSBGYWN0b3J5SWNvbjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgaWNvbiA9IFB1bXBTdGF0aW9uSWNvbjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0dyb3Vwczo6Q29sbGVjdG9ycyc6XG4gICAgY2FzZSAnY29sbGVjdG9yJzpcbiAgICAgIGljb24gPSBjb2xsZWN0b3JJY29uO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGljb24gPSBjb2xsZWN0b3JJY29uO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gaWNvbjtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBS08sSUFBTUEsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJQyxTQUFpQixFQUFLO0VBQ3BELElBQUlDLElBQUk7RUFDUixRQUFRRCxTQUFTO0lBQ2YsS0FBSyxrQ0FBa0M7SUFDdkMsS0FBSywwQkFBMEI7TUFDN0JDLElBQUksR0FBR0MsdUJBQVE7TUFDZjtJQUNGLEtBQUssaUJBQWlCO0lBQ3RCLEtBQUssU0FBUztNQUNaRCxJQUFJLEdBQUdFLHNCQUFXO01BQ2xCO0lBQ0YsS0FBSyxxQkFBcUI7TUFDeEJGLElBQUksR0FBR0csbUJBQWU7TUFDdEI7SUFDRixLQUFLLG9CQUFvQjtJQUN6QixLQUFLLFdBQVc7TUFDZEgsSUFBSSxHQUFHSSxpQkFBYTtNQUNwQjtJQUNGO01BQ0VKLElBQUksR0FBR0ksaUJBQWE7TUFDcEI7RUFDSjtFQUVBLE9BQU9KLElBQUk7QUFDYixDQUFDO0FBQUNLLE9BQUEsQ0FBQVAsZUFBQSxHQUFBQSxlQUFBIn0=
49
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYXRjaEljb25Ub1NpdGUiLCJzaXRlX3R5cGUiLCJpY29uIiwiZGVmYXVsdCIsImNsaWNrZWQiLCJXd3RwSWNvbiIsIld3dHBDbGlja2VkSWNvbiIsIkZhY3RvcnlJY29uIiwiRmFjdG9yeUNsaWNrZWRJY29uIiwiUHVtcFN0YXRpb25JY29uIiwiUHVtcFN0YXRpb25DbGlja2VkSWNvbiIsImNvbGxlY3Rvckljb24iLCJjb2xsZWN0b3JDbGlja2VkSWNvbiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbGl0aWVzL21hcC9pY29ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV3d0cEljb24gZnJvbSAnc3JjL2Fzc2V0cy9tYXAvcGluLW1hdGFzaC13aGl0ZS5zdmcnO1xuaW1wb3J0IFd3dHBDbGlja2VkSWNvbiBmcm9tICdzcmMvYXNzZXRzL21hcC9waW4tbWF0YXNoLWNsaWNrZWQuc3ZnJztcbmltcG9ydCBGYWN0b3J5SWNvbiBmcm9tICdzcmMvYXNzZXRzL21hcC9waW4tcGxhbnQtd2hpdGUuc3ZnJztcbmltcG9ydCBGYWN0b3J5Q2xpY2tlZEljb24gZnJvbSAnc3JjL2Fzc2V0cy9tYXAvcGluLXBsYW50LWNsaWNrZWQuc3ZnJztcbmltcG9ydCBQdW1wU3RhdGlvbkljb24gZnJvbSAnc3JjL2Fzc2V0cy9tYXAvcGluLXN1Y3Rpb24uc3ZnJztcbmltcG9ydCBQdW1wU3RhdGlvbkNsaWNrZWRJY29uIGZyb20gJ3NyYy9hc3NldHMvbWFwL3Bpbi1zdWN0aW9uLWNsaWNrZWQuc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJ3NyYy9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuaW1wb3J0IGNvbGxlY3RvckNsaWNrZWRJY29uIGZyb20gJ3NyYy9hc3NldHMvbWFwL3Bpbi13YXRlci1jbGlja2VkLnN2Zyc7XG5cbmV4cG9ydCBjb25zdCBtYXRjaEljb25Ub1NpdGUgPSAoc2l0ZV90eXBlOiBzdHJpbmcpID0+IHtcbiAgbGV0IGljb246IHsgZGVmYXVsdDogc3RyaW5nOyBjbGlja2VkOiBzdHJpbmcgfSA9IHsgZGVmYXVsdDogJycsIGNsaWNrZWQ6ICcnIH07XG4gIHN3aXRjaCAoc2l0ZV90eXBlKSB7XG4gICAgY2FzZSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnOlxuICAgIGNhc2UgJ3dhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc6XG4gICAgICBpY29uLmRlZmF1bHQgPSBXd3RwSWNvbjtcbiAgICAgIGljb24uY2xpY2tlZCA9IFd3dHBDbGlja2VkSWNvbjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0dyb3Vwczo6RmFjdG9yeSc6XG4gICAgY2FzZSAnZmFjdG9yeSc6XG4gICAgICBpY29uLmRlZmF1bHQgPSBGYWN0b3J5SWNvbjtcbiAgICAgIGljb24uY2xpY2tlZCA9IEZhY3RvcnlDbGlja2VkSWNvbjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgaWNvbi5kZWZhdWx0ID0gUHVtcFN0YXRpb25JY29uO1xuICAgICAgaWNvbi5jbGlja2VkID0gUHVtcFN0YXRpb25DbGlja2VkSWNvbjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0dyb3Vwczo6Q29sbGVjdG9ycyc6XG4gICAgY2FzZSAnY29sbGVjdG9yJzpcbiAgICAgIGljb24uZGVmYXVsdCA9IGNvbGxlY3Rvckljb247XG4gICAgICBpY29uLmNsaWNrZWQgPSBjb2xsZWN0b3JDbGlja2VkSWNvbjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpY29uLmRlZmF1bHQgPSBjb2xsZWN0b3JJY29uO1xuICAgICAgaWNvbi5jbGlja2VkID0gY29sbGVjdG9yQ2xpY2tlZEljb247XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBpY29uO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBU08sSUFBTUEsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJQyxTQUFpQixFQUFLO0VBQ3BELElBQUlDLElBQTBDLEdBQUc7SUFBRUMsT0FBTyxFQUFFLEVBQUU7SUFBRUMsT0FBTyxFQUFFO0VBQUcsQ0FBQztFQUM3RSxRQUFRSCxTQUFTO0lBQ2YsS0FBSyxrQ0FBa0M7SUFDdkMsS0FBSywwQkFBMEI7TUFDN0JDLElBQUksQ0FBQ0MsT0FBTyxHQUFHRSx1QkFBUTtNQUN2QkgsSUFBSSxDQUFDRSxPQUFPLEdBQUdFLHlCQUFlO01BQzlCO0lBQ0YsS0FBSyxpQkFBaUI7SUFDdEIsS0FBSyxTQUFTO01BQ1pKLElBQUksQ0FBQ0MsT0FBTyxHQUFHSSxzQkFBVztNQUMxQkwsSUFBSSxDQUFDRSxPQUFPLEdBQUdJLHdCQUFrQjtNQUNqQztJQUNGLEtBQUsscUJBQXFCO01BQ3hCTixJQUFJLENBQUNDLE9BQU8sR0FBR00sbUJBQWU7TUFDOUJQLElBQUksQ0FBQ0UsT0FBTyxHQUFHTSwwQkFBc0I7TUFDckM7SUFDRixLQUFLLG9CQUFvQjtJQUN6QixLQUFLLFdBQVc7TUFDZFIsSUFBSSxDQUFDQyxPQUFPLEdBQUdRLGlCQUFhO01BQzVCVCxJQUFJLENBQUNFLE9BQU8sR0FBR1Esd0JBQW9CO01BQ25DO0lBQ0Y7TUFDRVYsSUFBSSxDQUFDQyxPQUFPLEdBQUdRLGlCQUFhO01BQzVCVCxJQUFJLENBQUNFLE9BQU8sR0FBR1Esd0JBQW9CO01BQ25DO0VBQ0o7RUFFQSxPQUFPVixJQUFJO0FBQ2IsQ0FBQztBQUFDVyxPQUFBLENBQUFiLGVBQUEsR0FBQUEsZUFBQSJ9
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.computeSegmentHeading = exports.asRatioToPathLength = void 0;
8
+ exports.parseRelativeOrAbsoluteValue = parseRelativeOrAbsoluteValue;
9
+ exports.projectPatternOnPointPath = projectPatternOnPointPath;
10
+ var _leaflet = _interopRequireDefault(require("leaflet"));
11
+ require("leaflet-rotatedmarker");
12
+ // enable rotationAngle and rotationOrigin support on L.Marker
13
+
14
+ /**
15
+ * Defines several classes of symbol factories,
16
+ * to be used with L.PolylineDecorator
17
+ */
18
+
19
+ _leaflet.default.Symbol = _leaflet.default.Symbol || {};
20
+
21
+ /**
22
+ * A simple dash symbol, drawn as a Polyline.
23
+ * Can also be used for dots, if 'pixelSize' option is given the 0 value.
24
+ */
25
+ _leaflet.default.Symbol.Dash = _leaflet.default.Class.extend({
26
+ options: {
27
+ pixelSize: 10,
28
+ pathOptions: {}
29
+ },
30
+ initialize: function initialize(options) {
31
+ _leaflet.default.Util.setOptions(this, options);
32
+ this.options.pathOptions.clickable = false;
33
+ },
34
+ buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
35
+ var opts = this.options;
36
+ var d2r = Math.PI / 180;
37
+
38
+ // for a dot, nothing more to compute
39
+ if (opts.pixelSize <= 1) {
40
+ return _leaflet.default.polyline([dirPoint.latLng, dirPoint.latLng], opts.pathOptions);
41
+ }
42
+ var midPoint = map.project(dirPoint.latLng);
43
+ var angle = -(dirPoint.heading - 90) * d2r;
44
+ var a = _leaflet.default.point(midPoint.x + opts.pixelSize * Math.cos(angle + Math.PI) / 2, midPoint.y + opts.pixelSize * Math.sin(angle) / 2);
45
+ // compute second point by central symmetry to avoid unecessary cos/sin
46
+ var b = midPoint.add(midPoint.subtract(a));
47
+ return _leaflet.default.polyline([map.unproject(a), map.unproject(b)], opts.pathOptions);
48
+ }
49
+ });
50
+ _leaflet.default.Symbol.dash = function (options) {
51
+ return new _leaflet.default.Symbol.Dash(options);
52
+ };
53
+ _leaflet.default.Symbol.ArrowHead = _leaflet.default.Class.extend({
54
+ options: {
55
+ polygon: true,
56
+ pixelSize: 10,
57
+ headAngle: 60,
58
+ pathOptions: {
59
+ stroke: false,
60
+ weight: 2
61
+ }
62
+ },
63
+ initialize: function initialize(options) {
64
+ _leaflet.default.Util.setOptions(this, options);
65
+ this.options.pathOptions.clickable = false;
66
+ },
67
+ buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
68
+ return this.options.polygon ? _leaflet.default.polygon(this._buildArrowPath(dirPoint, map), this.options.pathOptions) : _leaflet.default.polyline(this._buildArrowPath(dirPoint, map), this.options.pathOptions);
69
+ },
70
+ _buildArrowPath: function _buildArrowPath(dirPoint, map) {
71
+ var d2r = Math.PI / 180;
72
+ var tipPoint = map.project(dirPoint.latLng);
73
+ var direction = -(dirPoint.heading - 90) * d2r;
74
+ var radianArrowAngle = this.options.headAngle / 2 * d2r;
75
+ var headAngle1 = direction + radianArrowAngle;
76
+ var headAngle2 = direction - radianArrowAngle;
77
+ var arrowHead1 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle1), tipPoint.y + this.options.pixelSize * Math.sin(headAngle1));
78
+ var arrowHead2 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle2), tipPoint.y + this.options.pixelSize * Math.sin(headAngle2));
79
+ return [map.unproject(arrowHead1), dirPoint.latLng, map.unproject(arrowHead2)];
80
+ }
81
+ });
82
+ _leaflet.default.Symbol.arrowHead = function (options) {
83
+ return new _leaflet.default.Symbol.ArrowHead(options);
84
+ };
85
+ _leaflet.default.Symbol.Marker = _leaflet.default.Class.extend({
86
+ options: {
87
+ markerOptions: {},
88
+ rotate: false
89
+ },
90
+ initialize: function initialize(options) {
91
+ _leaflet.default.Util.setOptions(this, options);
92
+ this.options.markerOptions.clickable = false;
93
+ this.options.markerOptions.draggable = false;
94
+ },
95
+ buildSymbol: function buildSymbol(directionPoint, latLngs, map, index, total) {
96
+ if (this.options.rotate) {
97
+ this.options.markerOptions.rotationAngle = directionPoint.heading + (this.options.angleCorrection || 0);
98
+ }
99
+ return _leaflet.default.marker(directionPoint.latLng, this.options.markerOptions);
100
+ }
101
+ });
102
+ _leaflet.default.Symbol.marker = function (options) {
103
+ return new _leaflet.default.Symbol.Marker(options);
104
+ };
105
+ var isCoord = function isCoord(c) {
106
+ return c instanceof _leaflet.default.LatLng || Array.isArray(c) && c.length === 2 && typeof c[0] === 'number';
107
+ };
108
+ var isCoordArray = function isCoordArray(ll) {
109
+ return Array.isArray(ll) && isCoord(ll[0]);
110
+ };
111
+ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
112
+ options: {
113
+ patterns: []
114
+ },
115
+ initialize: function initialize(paths, options) {
116
+ _leaflet.default.FeatureGroup.prototype.initialize.call(this);
117
+ _leaflet.default.Util.setOptions(this, options);
118
+ this._map = null;
119
+ this._paths = this._initPaths(paths);
120
+ this._bounds = this._initBounds();
121
+ this._patterns = this._initPatterns(this.options.patterns);
122
+ },
123
+ /**
124
+ * Deals with all the different cases. input can be one of these types:
125
+ * array of LatLng, array of 2-number arrays, Polyline, Polygon,
126
+ * array of one of the previous.
127
+ */
128
+ _initPaths: function _initPaths(input, isPolygon) {
129
+ var _this = this;
130
+ if (isCoordArray(input)) {
131
+ // Leaflet Polygons don't need the first point to be repeated, but we do
132
+ var coords = isPolygon ? input.concat([input[0]]) : input;
133
+ return [coords];
134
+ }
135
+ if (input instanceof _leaflet.default.Polyline) {
136
+ // we need some recursivity to support multi-poly*
137
+ return this._initPaths(input.getLatLngs(), input instanceof _leaflet.default.Polygon);
138
+ }
139
+ if (Array.isArray(input)) {
140
+ // flatten everything, we just need coordinate lists to apply patterns
141
+ return input.reduce(function (flatArray, p) {
142
+ return flatArray.concat(_this._initPaths(p, isPolygon));
143
+ }, []);
144
+ }
145
+ return [];
146
+ },
147
+ // parse pattern definitions and precompute some values
148
+ _initPatterns: function _initPatterns(patternDefs) {
149
+ return patternDefs.map(this._parsePatternDef);
150
+ },
151
+ /**
152
+ * Changes the patterns used by this decorator
153
+ * and redraws the new one.
154
+ */
155
+ setPatterns: function setPatterns(patterns) {
156
+ this.options.patterns = patterns;
157
+ this._patterns = this._initPatterns(this.options.patterns);
158
+ this.redraw();
159
+ },
160
+ /**
161
+ * Changes the patterns used by this decorator
162
+ * and redraws the new one.
163
+ */
164
+ setPaths: function setPaths(paths) {
165
+ this._paths = this._initPaths(paths);
166
+ this._bounds = this._initBounds();
167
+ this.redraw();
168
+ },
169
+ /**
170
+ * Parse the pattern definition
171
+ */
172
+ _parsePatternDef: function _parsePatternDef(patternDef, latLngs) {
173
+ return {
174
+ symbolFactory: patternDef.symbol,
175
+ // Parse offset and repeat values, managing the two cases:
176
+ // absolute (in pixels) or relative (in percentage of the polyline length)
177
+ offset: parseRelativeOrAbsoluteValue(patternDef.offset),
178
+ endOffset: parseRelativeOrAbsoluteValue(patternDef.endOffset),
179
+ repeat: parseRelativeOrAbsoluteValue(patternDef.repeat)
180
+ };
181
+ },
182
+ onAdd: function onAdd(map) {
183
+ this._map = map;
184
+ this._draw();
185
+ this._map.on('moveend', this.redraw, this);
186
+ },
187
+ onRemove: function onRemove(map) {
188
+ this._map.off('moveend', this.redraw, this);
189
+ this._map = null;
190
+ _leaflet.default.FeatureGroup.prototype.onRemove.call(this, map);
191
+ },
192
+ /**
193
+ * As real pattern bounds depends on map zoom and bounds,
194
+ * we just compute the total bounds of all paths decorated by this instance.
195
+ */
196
+ _initBounds: function _initBounds() {
197
+ var allPathCoords = this._paths.reduce(function (acc, path) {
198
+ return acc.concat(path);
199
+ }, []);
200
+ return _leaflet.default.latLngBounds(allPathCoords);
201
+ },
202
+ getBounds: function getBounds() {
203
+ return this._bounds;
204
+ },
205
+ /**
206
+ * Returns an array of ILayers object
207
+ */
208
+ _buildSymbols: function _buildSymbols(latLngs, symbolFactory, directionPoints) {
209
+ var _this2 = this;
210
+ return directionPoints.map(function (directionPoint, i) {
211
+ return symbolFactory.buildSymbol(directionPoint, latLngs, _this2._map, i, directionPoints.length);
212
+ });
213
+ },
214
+ /**
215
+ * Compute pairs of LatLng and heading angle,
216
+ * that define positions and directions of the symbols on the path
217
+ */
218
+ _getDirectionPoints: function _getDirectionPoints(latLngs, pattern) {
219
+ var _this3 = this;
220
+ if (latLngs.length < 2) {
221
+ return [];
222
+ }
223
+ var pathAsPoints = latLngs.map(function (latLng) {
224
+ return _this3._map.project(latLng);
225
+ });
226
+ return projectPatternOnPointPath(pathAsPoints, pattern).map(function (point) {
227
+ return {
228
+ latLng: _this3._map.unproject(_leaflet.default.point(point.pt)),
229
+ heading: point.heading
230
+ };
231
+ });
232
+ },
233
+ redraw: function redraw() {
234
+ if (!this._map) {
235
+ return;
236
+ }
237
+ this.clearLayers();
238
+ this._draw();
239
+ },
240
+ /**
241
+ * Returns all symbols for a given pattern as an array of FeatureGroup
242
+ */
243
+ _getPatternLayers: function _getPatternLayers(pattern) {
244
+ var _this4 = this;
245
+ var mapBounds = this._map.getBounds().pad(0.1);
246
+ return this._paths.map(function (path) {
247
+ var directionPoints = _this4._getDirectionPoints(path, pattern)
248
+ // filter out invisible points
249
+ .filter(function (point) {
250
+ return mapBounds.contains(point.latLng);
251
+ });
252
+ return _leaflet.default.featureGroup(_this4._buildSymbols(path, pattern.symbolFactory, directionPoints));
253
+ });
254
+ },
255
+ /**
256
+ * Draw all patterns
257
+ */
258
+ _draw: function _draw() {
259
+ var _this5 = this;
260
+ this._patterns.map(function (pattern) {
261
+ return _this5._getPatternLayers(pattern);
262
+ }).forEach(function (layers) {
263
+ _this5.addLayer(_leaflet.default.featureGroup(layers));
264
+ });
265
+ }
266
+ });
267
+ /*
268
+ * Allows compact syntax to be used
269
+ */
270
+ _leaflet.default.polylineDecorator = function (paths, options) {
271
+ return new _leaflet.default.PolylineDecorator(paths, options);
272
+ };
273
+
274
+ // functional re-impl of L.Point.distanceTo,
275
+ // with no dependency on Leaflet for easier testing
276
+ function pointDistance(ptA, ptB) {
277
+ var x = ptB.x - ptA.x;
278
+ var y = ptB.y - ptA.y;
279
+ return Math.sqrt(x * x + y * y);
280
+ }
281
+ var computeSegmentHeading = function computeSegmentHeading(a, b) {
282
+ return (Math.atan2(b.y - a.y, b.x - a.x) * 180 / Math.PI + 90 + 360) % 360;
283
+ };
284
+ exports.computeSegmentHeading = computeSegmentHeading;
285
+ var asRatioToPathLength = function asRatioToPathLength(_ref, totalPathLength) {
286
+ var value = _ref.value,
287
+ isInPixels = _ref.isInPixels;
288
+ return isInPixels ? value / totalPathLength : value;
289
+ };
290
+ exports.asRatioToPathLength = asRatioToPathLength;
291
+ function parseRelativeOrAbsoluteValue(value) {
292
+ if (typeof value === 'string' && value.indexOf('%') !== -1) {
293
+ return {
294
+ value: parseFloat(value) / 100,
295
+ isInPixels: false
296
+ };
297
+ }
298
+ var parsedValue = value ? parseFloat(value) : 0;
299
+ return {
300
+ value: parsedValue,
301
+ isInPixels: parsedValue > 0
302
+ };
303
+ }
304
+ var pointsEqual = function pointsEqual(a, b) {
305
+ return a.x === b.x && a.y === b.y;
306
+ };
307
+ function pointsToSegments(pts) {
308
+ return pts.reduce(function (segments, b, idx, points) {
309
+ // this test skips same adjacent points
310
+ if (idx > 0 && !pointsEqual(b, points[idx - 1])) {
311
+ var a = points[idx - 1];
312
+ var distA = segments.length > 0 ? segments[segments.length - 1].distB : 0;
313
+ var distAB = pointDistance(a, b);
314
+ segments.push({
315
+ a: a,
316
+ b: b,
317
+ distA: distA,
318
+ distB: distA + distAB,
319
+ heading: computeSegmentHeading(a, b)
320
+ });
321
+ }
322
+ return segments;
323
+ }, []);
324
+ }
325
+ function projectPatternOnPointPath(pts, pattern) {
326
+ // 1. split the path into segment infos
327
+ var segments = pointsToSegments(pts);
328
+ var nbSegments = segments.length;
329
+ if (nbSegments === 0) {
330
+ return [];
331
+ }
332
+ var totalPathLength = segments[nbSegments - 1].distB;
333
+ var offset = asRatioToPathLength(pattern.offset, totalPathLength);
334
+ var endOffset = asRatioToPathLength(pattern.endOffset, totalPathLength);
335
+ var repeat = asRatioToPathLength(pattern.repeat, totalPathLength);
336
+ var repeatIntervalPixels = totalPathLength * repeat;
337
+ var startOffsetPixels = offset > 0 ? totalPathLength * offset : 0;
338
+ var endOffsetPixels = endOffset > 0 ? totalPathLength * endOffset : 0;
339
+
340
+ // 2. generate the positions of the pattern as offsets from the path start
341
+ var positionOffsets = [];
342
+ var positionOffset = startOffsetPixels;
343
+ do {
344
+ positionOffsets.push(positionOffset);
345
+ positionOffset += repeatIntervalPixels;
346
+ } while (repeatIntervalPixels > 0 && positionOffset < totalPathLength - endOffsetPixels);
347
+
348
+ // 3. projects offsets to segments
349
+ var segmentIndex = 0;
350
+ var segment = segments[0];
351
+ return positionOffsets.map(function (positionOffset) {
352
+ // find the segment matching the offset,
353
+ // starting from the previous one as offsets are ordered
354
+ while (positionOffset > segment.distB && segmentIndex < nbSegments - 1) {
355
+ segmentIndex++;
356
+ segment = segments[segmentIndex];
357
+ }
358
+ var segmentRatio = (positionOffset - segment.distA) / (segment.distB - segment.distA);
359
+ return {
360
+ pt: interpolateBetweenPoints(segment.a, segment.b, segmentRatio),
361
+ heading: segment.heading
362
+ };
363
+ });
364
+ }
365
+
366
+ /**
367
+ * Finds the point which lies on the segment defined by points A and B,
368
+ * at the given ratio of the distance from A to B, by linear interpolation.
369
+ */
370
+ function interpolateBetweenPoints(ptA, ptB, ratio) {
371
+ if (ptB.x !== ptA.x) {
372
+ return {
373
+ x: ptA.x + ratio * (ptB.x - ptA.x),
374
+ y: ptA.y + ratio * (ptB.y - ptA.y)
375
+ };
376
+ }
377
+ // special case where points lie on the same vertical axis
378
+ return {
379
+ x: ptA.x,
380
+ y: ptA.y + (ptB.y - ptA.y) * ratio
381
+ };
382
+ }
383
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTCIsIlN5bWJvbCIsIkRhc2giLCJDbGFzcyIsImV4dGVuZCIsIm9wdGlvbnMiLCJwaXhlbFNpemUiLCJwYXRoT3B0aW9ucyIsImluaXRpYWxpemUiLCJVdGlsIiwic2V0T3B0aW9ucyIsImNsaWNrYWJsZSIsImJ1aWxkU3ltYm9sIiwiZGlyUG9pbnQiLCJsYXRMbmdzIiwibWFwIiwiaW5kZXgiLCJ0b3RhbCIsIm9wdHMiLCJkMnIiLCJNYXRoIiwiUEkiLCJwb2x5bGluZSIsImxhdExuZyIsIm1pZFBvaW50IiwicHJvamVjdCIsImFuZ2xlIiwiaGVhZGluZyIsImEiLCJwb2ludCIsIngiLCJjb3MiLCJ5Iiwic2luIiwiYiIsImFkZCIsInN1YnRyYWN0IiwidW5wcm9qZWN0IiwiZGFzaCIsIkFycm93SGVhZCIsInBvbHlnb24iLCJoZWFkQW5nbGUiLCJzdHJva2UiLCJ3ZWlnaHQiLCJfYnVpbGRBcnJvd1BhdGgiLCJ0aXBQb2ludCIsImRpcmVjdGlvbiIsInJhZGlhbkFycm93QW5nbGUiLCJoZWFkQW5nbGUxIiwiaGVhZEFuZ2xlMiIsImFycm93SGVhZDEiLCJhcnJvd0hlYWQyIiwiYXJyb3dIZWFkIiwiTWFya2VyIiwibWFya2VyT3B0aW9ucyIsInJvdGF0ZSIsImRyYWdnYWJsZSIsImRpcmVjdGlvblBvaW50Iiwicm90YXRpb25BbmdsZSIsImFuZ2xlQ29ycmVjdGlvbiIsIm1hcmtlciIsImlzQ29vcmQiLCJjIiwiTGF0TG5nIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNDb29yZEFycmF5IiwibGwiLCJQb2x5bGluZURlY29yYXRvciIsIkZlYXR1cmVHcm91cCIsInBhdHRlcm5zIiwicGF0aHMiLCJwcm90b3R5cGUiLCJjYWxsIiwiX21hcCIsIl9wYXRocyIsIl9pbml0UGF0aHMiLCJfYm91bmRzIiwiX2luaXRCb3VuZHMiLCJfcGF0dGVybnMiLCJfaW5pdFBhdHRlcm5zIiwiaW5wdXQiLCJpc1BvbHlnb24iLCJfdGhpcyIsImNvb3JkcyIsImNvbmNhdCIsIlBvbHlsaW5lIiwiZ2V0TGF0TG5ncyIsIlBvbHlnb24iLCJyZWR1Y2UiLCJmbGF0QXJyYXkiLCJwIiwicGF0dGVybkRlZnMiLCJfcGFyc2VQYXR0ZXJuRGVmIiwic2V0UGF0dGVybnMiLCJyZWRyYXciLCJzZXRQYXRocyIsInBhdHRlcm5EZWYiLCJzeW1ib2xGYWN0b3J5Iiwic3ltYm9sIiwib2Zmc2V0IiwicGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSIsImVuZE9mZnNldCIsInJlcGVhdCIsIm9uQWRkIiwiX2RyYXciLCJvbiIsIm9uUmVtb3ZlIiwib2ZmIiwiYWxsUGF0aENvb3JkcyIsImFjYyIsInBhdGgiLCJsYXRMbmdCb3VuZHMiLCJnZXRCb3VuZHMiLCJfYnVpbGRTeW1ib2xzIiwiZGlyZWN0aW9uUG9pbnRzIiwiX3RoaXMyIiwiaSIsIl9nZXREaXJlY3Rpb25Qb2ludHMiLCJwYXR0ZXJuIiwiX3RoaXMzIiwicGF0aEFzUG9pbnRzIiwicHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCIsInB0IiwiY2xlYXJMYXllcnMiLCJfZ2V0UGF0dGVybkxheWVycyIsIl90aGlzNCIsIm1hcEJvdW5kcyIsInBhZCIsImZpbHRlciIsImNvbnRhaW5zIiwiZmVhdHVyZUdyb3VwIiwiX3RoaXM1IiwiZm9yRWFjaCIsImxheWVycyIsImFkZExheWVyIiwicG9seWxpbmVEZWNvcmF0b3IiLCJwb2ludERpc3RhbmNlIiwicHRBIiwicHRCIiwic3FydCIsImNvbXB1dGVTZWdtZW50SGVhZGluZyIsImF0YW4yIiwiZXhwb3J0cyIsImFzUmF0aW9Ub1BhdGhMZW5ndGgiLCJfcmVmIiwidG90YWxQYXRoTGVuZ3RoIiwidmFsdWUiLCJpc0luUGl4ZWxzIiwiaW5kZXhPZiIsInBhcnNlRmxvYXQiLCJwYXJzZWRWYWx1ZSIsInBvaW50c0VxdWFsIiwicG9pbnRzVG9TZWdtZW50cyIsInB0cyIsInNlZ21lbnRzIiwiaWR4IiwicG9pbnRzIiwiZGlzdEEiLCJkaXN0QiIsImRpc3RBQiIsInB1c2giLCJuYlNlZ21lbnRzIiwicmVwZWF0SW50ZXJ2YWxQaXhlbHMiLCJzdGFydE9mZnNldFBpeGVscyIsImVuZE9mZnNldFBpeGVscyIsInBvc2l0aW9uT2Zmc2V0cyIsInBvc2l0aW9uT2Zmc2V0Iiwic2VnbWVudEluZGV4Iiwic2VnbWVudCIsInNlZ21lbnRSYXRpbyIsImludGVycG9sYXRlQmV0d2VlblBvaW50cyIsInJhdGlvIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9wb2x5bGluZWRlY29yYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTCBmcm9tICdsZWFmbGV0Jztcbi8vIGVuYWJsZSByb3RhdGlvbkFuZ2xlIGFuZCByb3RhdGlvbk9yaWdpbiBzdXBwb3J0IG9uIEwuTWFya2VyXG5pbXBvcnQgJ2xlYWZsZXQtcm90YXRlZG1hcmtlcic7XG5cbi8qKlxuICogRGVmaW5lcyBzZXZlcmFsIGNsYXNzZXMgb2Ygc3ltYm9sIGZhY3RvcmllcyxcbiAqIHRvIGJlIHVzZWQgd2l0aCBMLlBvbHlsaW5lRGVjb3JhdG9yXG4gKi9cblxuTC5TeW1ib2wgPSBMLlN5bWJvbCB8fCB7fTtcblxuLyoqXG4gKiBBIHNpbXBsZSBkYXNoIHN5bWJvbCwgZHJhd24gYXMgYSBQb2x5bGluZS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgZm9yIGRvdHMsIGlmICdwaXhlbFNpemUnIG9wdGlvbiBpcyBnaXZlbiB0aGUgMCB2YWx1ZS5cbiAqL1xuTC5TeW1ib2wuRGFzaCA9IEwuQ2xhc3MuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgcGF0aE9wdGlvbnM6IHt9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBkMnIgPSBNYXRoLlBJIC8gMTgwO1xuXG4gICAgLy8gZm9yIGEgZG90LCBub3RoaW5nIG1vcmUgdG8gY29tcHV0ZVxuICAgIGlmIChvcHRzLnBpeGVsU2l6ZSA8PSAxKSB7XG4gICAgICByZXR1cm4gTC5wb2x5bGluZShbZGlyUG9pbnQubGF0TG5nLCBkaXJQb2ludC5sYXRMbmddLCBvcHRzLnBhdGhPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaWRQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgYW5nbGUgPSAtKGRpclBvaW50LmhlYWRpbmcgLSA5MCkgKiBkMnI7XG4gICAgY29uc3QgYSA9IEwucG9pbnQoXG4gICAgICBtaWRQb2ludC54ICsgKG9wdHMucGl4ZWxTaXplICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJKSkgLyAyLFxuICAgICAgbWlkUG9pbnQueSArIChvcHRzLnBpeGVsU2l6ZSAqIE1hdGguc2luKGFuZ2xlKSkgLyAyLFxuICAgICk7XG4gICAgLy8gY29tcHV0ZSBzZWNvbmQgcG9pbnQgYnkgY2VudHJhbCBzeW1tZXRyeSB0byBhdm9pZCB1bmVjZXNzYXJ5IGNvcy9zaW5cbiAgICBjb25zdCBiID0gbWlkUG9pbnQuYWRkKG1pZFBvaW50LnN1YnRyYWN0KGEpKTtcbiAgICByZXR1cm4gTC5wb2x5bGluZShbbWFwLnVucHJvamVjdChhKSwgbWFwLnVucHJvamVjdChiKV0sIG9wdHMucGF0aE9wdGlvbnMpO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmRhc2ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLkRhc2gob3B0aW9ucyk7XG59O1xuXG5MLlN5bWJvbC5BcnJvd0hlYWQgPSBMLkNsYXNzLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwb2x5Z29uOiB0cnVlLFxuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgaGVhZEFuZ2xlOiA2MCxcbiAgICBwYXRoT3B0aW9uczoge1xuICAgICAgc3Ryb2tlOiBmYWxzZSxcbiAgICAgIHdlaWdodDogMixcbiAgICB9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb2x5Z29uXG4gICAgICA/IEwucG9seWdvbih0aGlzLl9idWlsZEFycm93UGF0aChkaXJQb2ludCwgbWFwKSwgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zKVxuICAgICAgOiBMLnBvbHlsaW5lKFxuICAgICAgICAgIHRoaXMuX2J1aWxkQXJyb3dQYXRoKGRpclBvaW50LCBtYXApLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucyxcbiAgICAgICAgKTtcbiAgfSxcblxuICBfYnVpbGRBcnJvd1BhdGg6IGZ1bmN0aW9uIChkaXJQb2ludCwgbWFwKSB7XG4gICAgY29uc3QgZDJyID0gTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCB0aXBQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gLShkaXJQb2ludC5oZWFkaW5nIC0gOTApICogZDJyO1xuICAgIGNvbnN0IHJhZGlhbkFycm93QW5nbGUgPSAodGhpcy5vcHRpb25zLmhlYWRBbmdsZSAvIDIpICogZDJyO1xuXG4gICAgY29uc3QgaGVhZEFuZ2xlMSA9IGRpcmVjdGlvbiArIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgaGVhZEFuZ2xlMiA9IGRpcmVjdGlvbiAtIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgYXJyb3dIZWFkMSA9IEwucG9pbnQoXG4gICAgICB0aXBQb2ludC54IC0gdGhpcy5vcHRpb25zLnBpeGVsU2l6ZSAqIE1hdGguY29zKGhlYWRBbmdsZTEpLFxuICAgICAgdGlwUG9pbnQueSArIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLnNpbihoZWFkQW5nbGUxKSxcbiAgICApO1xuICAgIGNvbnN0IGFycm93SGVhZDIgPSBMLnBvaW50KFxuICAgICAgdGlwUG9pbnQueCAtIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLmNvcyhoZWFkQW5nbGUyKSxcbiAgICAgIHRpcFBvaW50LnkgKyB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5zaW4oaGVhZEFuZ2xlMiksXG4gICAgKTtcblxuICAgIHJldHVybiBbXG4gICAgICBtYXAudW5wcm9qZWN0KGFycm93SGVhZDEpLFxuICAgICAgZGlyUG9pbnQubGF0TG5nLFxuICAgICAgbWFwLnVucHJvamVjdChhcnJvd0hlYWQyKSxcbiAgICBdO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmFycm93SGVhZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5TeW1ib2wuQXJyb3dIZWFkKG9wdGlvbnMpO1xufTtcblxuTC5TeW1ib2wuTWFya2VyID0gTC5DbGFzcy5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgbWFya2VyT3B0aW9uczoge30sXG4gICAgcm90YXRlOiBmYWxzZSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmRyYWdnYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyZWN0aW9uUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yb3RhdGUpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLnJvdGF0aW9uQW5nbGUgPVxuICAgICAgICBkaXJlY3Rpb25Qb2ludC5oZWFkaW5nICsgKHRoaXMub3B0aW9ucy5hbmdsZUNvcnJlY3Rpb24gfHwgMCk7XG4gICAgfVxuICAgIHJldHVybiBMLm1hcmtlcihkaXJlY3Rpb25Qb2ludC5sYXRMbmcsIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zKTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5tYXJrZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLk1hcmtlcihvcHRpb25zKTtcbn07XG5cbmNvbnN0IGlzQ29vcmQgPSAoYykgPT5cbiAgYyBpbnN0YW5jZW9mIEwuTGF0TG5nIHx8XG4gIChBcnJheS5pc0FycmF5KGMpICYmIGMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBjWzBdID09PSAnbnVtYmVyJyk7XG5cbmNvbnN0IGlzQ29vcmRBcnJheSA9IChsbCkgPT4gQXJyYXkuaXNBcnJheShsbCkgJiYgaXNDb29yZChsbFswXSk7XG5cbkwuUG9seWxpbmVEZWNvcmF0b3IgPSBMLkZlYXR1cmVHcm91cC5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgcGF0dGVybnM6IFtdLFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChwYXRocywgb3B0aW9ucykge1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICB0aGlzLl9wYXRocyA9IHRoaXMuX2luaXRQYXRocyhwYXRocyk7XG4gICAgdGhpcy5fYm91bmRzID0gdGhpcy5faW5pdEJvdW5kcygpO1xuICAgIHRoaXMuX3BhdHRlcm5zID0gdGhpcy5faW5pdFBhdHRlcm5zKHRoaXMub3B0aW9ucy5wYXR0ZXJucyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlYWxzIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgY2FzZXMuIGlucHV0IGNhbiBiZSBvbmUgb2YgdGhlc2UgdHlwZXM6XG4gICAqIGFycmF5IG9mIExhdExuZywgYXJyYXkgb2YgMi1udW1iZXIgYXJyYXlzLCBQb2x5bGluZSwgUG9seWdvbixcbiAgICogYXJyYXkgb2Ygb25lIG9mIHRoZSBwcmV2aW91cy5cbiAgICovXG4gIF9pbml0UGF0aHM6IGZ1bmN0aW9uIChpbnB1dCwgaXNQb2x5Z29uKSB7XG4gICAgaWYgKGlzQ29vcmRBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIExlYWZsZXQgUG9seWdvbnMgZG9uJ3QgbmVlZCB0aGUgZmlyc3QgcG9pbnQgdG8gYmUgcmVwZWF0ZWQsIGJ1dCB3ZSBkb1xuICAgICAgY29uc3QgY29vcmRzID0gaXNQb2x5Z29uID8gaW5wdXQuY29uY2F0KFtpbnB1dFswXV0pIDogaW5wdXQ7XG4gICAgICByZXR1cm4gW2Nvb3Jkc107XG4gICAgfVxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEwuUG9seWxpbmUpIHtcbiAgICAgIC8vIHdlIG5lZWQgc29tZSByZWN1cnNpdml0eSB0byBzdXBwb3J0IG11bHRpLXBvbHkqXG4gICAgICByZXR1cm4gdGhpcy5faW5pdFBhdGhzKGlucHV0LmdldExhdExuZ3MoKSwgaW5wdXQgaW5zdGFuY2VvZiBMLlBvbHlnb24pO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIGZsYXR0ZW4gZXZlcnl0aGluZywgd2UganVzdCBuZWVkIGNvb3JkaW5hdGUgbGlzdHMgdG8gYXBwbHkgcGF0dGVybnNcbiAgICAgIHJldHVybiBpbnB1dC5yZWR1Y2UoXG4gICAgICAgIChmbGF0QXJyYXksIHApID0+IGZsYXRBcnJheS5jb25jYXQodGhpcy5faW5pdFBhdGhzKHAsIGlzUG9seWdvbikpLFxuICAgICAgICBbXSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcblxuICAvLyBwYXJzZSBwYXR0ZXJuIGRlZmluaXRpb25zIGFuZCBwcmVjb21wdXRlIHNvbWUgdmFsdWVzXG4gIF9pbml0UGF0dGVybnM6IGZ1bmN0aW9uIChwYXR0ZXJuRGVmcykge1xuICAgIHJldHVybiBwYXR0ZXJuRGVmcy5tYXAodGhpcy5fcGFyc2VQYXR0ZXJuRGVmKTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgcGF0dGVybnMgdXNlZCBieSB0aGlzIGRlY29yYXRvclxuICAgKiBhbmQgcmVkcmF3cyB0aGUgbmV3IG9uZS5cbiAgICovXG4gIHNldFBhdHRlcm5zOiBmdW5jdGlvbiAocGF0dGVybnMpIHtcbiAgICB0aGlzLm9wdGlvbnMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICB0aGlzLl9wYXR0ZXJucyA9IHRoaXMuX2luaXRQYXR0ZXJucyh0aGlzLm9wdGlvbnMucGF0dGVybnMpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIHBhdHRlcm5zIHVzZWQgYnkgdGhpcyBkZWNvcmF0b3JcbiAgICogYW5kIHJlZHJhd3MgdGhlIG5ldyBvbmUuXG4gICAqL1xuICBzZXRQYXRoczogZnVuY3Rpb24gKHBhdGhzKSB7XG4gICAgdGhpcy5fcGF0aHMgPSB0aGlzLl9pbml0UGF0aHMocGF0aHMpO1xuICAgIHRoaXMuX2JvdW5kcyA9IHRoaXMuX2luaXRCb3VuZHMoKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcGF0dGVybiBkZWZpbml0aW9uXG4gICAqL1xuICBfcGFyc2VQYXR0ZXJuRGVmOiBmdW5jdGlvbiAocGF0dGVybkRlZiwgbGF0TG5ncykge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xGYWN0b3J5OiBwYXR0ZXJuRGVmLnN5bWJvbCxcbiAgICAgIC8vIFBhcnNlIG9mZnNldCBhbmQgcmVwZWF0IHZhbHVlcywgbWFuYWdpbmcgdGhlIHR3byBjYXNlczpcbiAgICAgIC8vIGFic29sdXRlIChpbiBwaXhlbHMpIG9yIHJlbGF0aXZlIChpbiBwZXJjZW50YWdlIG9mIHRoZSBwb2x5bGluZSBsZW5ndGgpXG4gICAgICBvZmZzZXQ6IHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUocGF0dGVybkRlZi5vZmZzZXQpLFxuICAgICAgZW5kT2Zmc2V0OiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHBhdHRlcm5EZWYuZW5kT2Zmc2V0KSxcbiAgICAgIHJlcGVhdDogcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZShwYXR0ZXJuRGVmLnJlcGVhdCksXG4gICAgfTtcbiAgfSxcblxuICBvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICB0aGlzLl9kcmF3KCk7XG4gICAgdGhpcy5fbWFwLm9uKCdtb3ZlZW5kJywgdGhpcy5yZWRyYXcsIHRoaXMpO1xuICB9LFxuXG4gIG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgdGhpcy5fbWFwLm9mZignbW92ZWVuZCcsIHRoaXMucmVkcmF3LCB0aGlzKTtcbiAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFzIHJlYWwgcGF0dGVybiBib3VuZHMgZGVwZW5kcyBvbiBtYXAgem9vbSBhbmQgYm91bmRzLFxuICAgKiB3ZSBqdXN0IGNvbXB1dGUgdGhlIHRvdGFsIGJvdW5kcyBvZiBhbGwgcGF0aHMgZGVjb3JhdGVkIGJ5IHRoaXMgaW5zdGFuY2UuXG4gICAqL1xuICBfaW5pdEJvdW5kczogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFsbFBhdGhDb29yZHMgPSB0aGlzLl9wYXRocy5yZWR1Y2UoXG4gICAgICAoYWNjLCBwYXRoKSA9PiBhY2MuY29uY2F0KHBhdGgpLFxuICAgICAgW10sXG4gICAgKTtcbiAgICByZXR1cm4gTC5sYXRMbmdCb3VuZHMoYWxsUGF0aENvb3Jkcyk7XG4gIH0sXG5cbiAgZ2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBJTGF5ZXJzIG9iamVjdFxuICAgKi9cbiAgX2J1aWxkU3ltYm9sczogZnVuY3Rpb24gKGxhdExuZ3MsIHN5bWJvbEZhY3RvcnksIGRpcmVjdGlvblBvaW50cykge1xuICAgIHJldHVybiBkaXJlY3Rpb25Qb2ludHMubWFwKChkaXJlY3Rpb25Qb2ludCwgaSkgPT5cbiAgICAgIHN5bWJvbEZhY3RvcnkuYnVpbGRTeW1ib2woXG4gICAgICAgIGRpcmVjdGlvblBvaW50LFxuICAgICAgICBsYXRMbmdzLFxuICAgICAgICB0aGlzLl9tYXAsXG4gICAgICAgIGksXG4gICAgICAgIGRpcmVjdGlvblBvaW50cy5sZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXB1dGUgcGFpcnMgb2YgTGF0TG5nIGFuZCBoZWFkaW5nIGFuZ2xlLFxuICAgKiB0aGF0IGRlZmluZSBwb3NpdGlvbnMgYW5kIGRpcmVjdGlvbnMgb2YgdGhlIHN5bWJvbHMgb24gdGhlIHBhdGhcbiAgICovXG4gIF9nZXREaXJlY3Rpb25Qb2ludHM6IGZ1bmN0aW9uIChsYXRMbmdzLCBwYXR0ZXJuKSB7XG4gICAgaWYgKGxhdExuZ3MubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBwYXRoQXNQb2ludHMgPSBsYXRMbmdzLm1hcCgobGF0TG5nKSA9PiB0aGlzLl9tYXAucHJvamVjdChsYXRMbmcpKTtcbiAgICByZXR1cm4gcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aChwYXRoQXNQb2ludHMsIHBhdHRlcm4pLm1hcCgocG9pbnQpID0+ICh7XG4gICAgICBsYXRMbmc6IHRoaXMuX21hcC51bnByb2plY3QoTC5wb2ludChwb2ludC5wdCkpLFxuICAgICAgaGVhZGluZzogcG9pbnQuaGVhZGluZyxcbiAgICB9KSk7XG4gIH0sXG5cbiAgcmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbGVhckxheWVycygpO1xuICAgIHRoaXMuX2RyYXcoKTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgc3ltYm9scyBmb3IgYSBnaXZlbiBwYXR0ZXJuIGFzIGFuIGFycmF5IG9mIEZlYXR1cmVHcm91cFxuICAgKi9cbiAgX2dldFBhdHRlcm5MYXllcnM6IGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgY29uc3QgbWFwQm91bmRzID0gdGhpcy5fbWFwLmdldEJvdW5kcygpLnBhZCgwLjEpO1xuICAgIHJldHVybiB0aGlzLl9wYXRocy5tYXAoKHBhdGgpID0+IHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvblBvaW50cyA9IHRoaXMuX2dldERpcmVjdGlvblBvaW50cyhwYXRoLCBwYXR0ZXJuKVxuICAgICAgICAvLyBmaWx0ZXIgb3V0IGludmlzaWJsZSBwb2ludHNcbiAgICAgICAgLmZpbHRlcigocG9pbnQpID0+IG1hcEJvdW5kcy5jb250YWlucyhwb2ludC5sYXRMbmcpKTtcbiAgICAgIHJldHVybiBMLmZlYXR1cmVHcm91cChcbiAgICAgICAgdGhpcy5fYnVpbGRTeW1ib2xzKHBhdGgsIHBhdHRlcm4uc3ltYm9sRmFjdG9yeSwgZGlyZWN0aW9uUG9pbnRzKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERyYXcgYWxsIHBhdHRlcm5zXG4gICAqL1xuICBfZHJhdzogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3BhdHRlcm5zXG4gICAgICAubWFwKChwYXR0ZXJuKSA9PiB0aGlzLl9nZXRQYXR0ZXJuTGF5ZXJzKHBhdHRlcm4pKVxuICAgICAgLmZvckVhY2goKGxheWVycykgPT4ge1xuICAgICAgICB0aGlzLmFkZExheWVyKEwuZmVhdHVyZUdyb3VwKGxheWVycykpO1xuICAgICAgfSk7XG4gIH0sXG59KTtcbi8qXG4gKiBBbGxvd3MgY29tcGFjdCBzeW50YXggdG8gYmUgdXNlZFxuICovXG5MLnBvbHlsaW5lRGVjb3JhdG9yID0gZnVuY3Rpb24gKHBhdGhzLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5Qb2x5bGluZURlY29yYXRvcihwYXRocywgb3B0aW9ucyk7XG59O1xuXG4vLyBmdW5jdGlvbmFsIHJlLWltcGwgb2YgTC5Qb2ludC5kaXN0YW5jZVRvLFxuLy8gd2l0aCBubyBkZXBlbmRlbmN5IG9uIExlYWZsZXQgZm9yIGVhc2llciB0ZXN0aW5nXG5mdW5jdGlvbiBwb2ludERpc3RhbmNlKHB0QSwgcHRCKSB7XG4gIGNvbnN0IHggPSBwdEIueCAtIHB0QS54O1xuICBjb25zdCB5ID0gcHRCLnkgLSBwdEEueTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuY29uc3QgY29tcHV0ZVNlZ21lbnRIZWFkaW5nID0gKGEsIGIpID0+XG4gICgoTWF0aC5hdGFuMihiLnkgLSBhLnksIGIueCAtIGEueCkgKiAxODApIC8gTWF0aC5QSSArIDkwICsgMzYwKSAlIDM2MDtcblxuY29uc3QgYXNSYXRpb1RvUGF0aExlbmd0aCA9ICh7IHZhbHVlLCBpc0luUGl4ZWxzIH0sIHRvdGFsUGF0aExlbmd0aCkgPT5cbiAgaXNJblBpeGVscyA/IHZhbHVlIC8gdG90YWxQYXRoTGVuZ3RoIDogdmFsdWU7XG5cbmZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAsXG4gICAgICBpc0luUGl4ZWxzOiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHBhcnNlZFZhbHVlID0gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDA7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHBhcnNlZFZhbHVlLFxuICAgIGlzSW5QaXhlbHM6IHBhcnNlZFZhbHVlID4gMCxcbiAgfTtcbn1cblxuY29uc3QgcG9pbnRzRXF1YWwgPSAoYSwgYikgPT4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnk7XG5cbmZ1bmN0aW9uIHBvaW50c1RvU2VnbWVudHMocHRzKSB7XG4gIHJldHVybiBwdHMucmVkdWNlKChzZWdtZW50cywgYiwgaWR4LCBwb2ludHMpID0+IHtcbiAgICAvLyB0aGlzIHRlc3Qgc2tpcHMgc2FtZSBhZGphY2VudCBwb2ludHNcbiAgICBpZiAoaWR4ID4gMCAmJiAhcG9pbnRzRXF1YWwoYiwgcG9pbnRzW2lkeCAtIDFdKSkge1xuICAgICAgY29uc3QgYSA9IHBvaW50c1tpZHggLSAxXTtcbiAgICAgIGNvbnN0IGRpc3RBID1cbiAgICAgICAgc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmRpc3RCIDogMDtcbiAgICAgIGNvbnN0IGRpc3RBQiA9IHBvaW50RGlzdGFuY2UoYSwgYik7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgYSxcbiAgICAgICAgYixcbiAgICAgICAgZGlzdEEsXG4gICAgICAgIGRpc3RCOiBkaXN0QSArIGRpc3RBQixcbiAgICAgICAgaGVhZGluZzogY29tcHV0ZVNlZ21lbnRIZWFkaW5nKGEsIGIpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50cztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0UGF0dGVybk9uUG9pbnRQYXRoKHB0cywgcGF0dGVybikge1xuICAvLyAxLiBzcGxpdCB0aGUgcGF0aCBpbnRvIHNlZ21lbnQgaW5mb3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwb2ludHNUb1NlZ21lbnRzKHB0cyk7XG4gIGNvbnN0IG5iU2VnbWVudHMgPSBzZWdtZW50cy5sZW5ndGg7XG4gIGlmIChuYlNlZ21lbnRzID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgdG90YWxQYXRoTGVuZ3RoID0gc2VnbWVudHNbbmJTZWdtZW50cyAtIDFdLmRpc3RCO1xuXG4gIGNvbnN0IG9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5vZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IGVuZE9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5lbmRPZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IHJlcGVhdCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5yZXBlYXQsIHRvdGFsUGF0aExlbmd0aCk7XG5cbiAgY29uc3QgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPSB0b3RhbFBhdGhMZW5ndGggKiByZXBlYXQ7XG4gIGNvbnN0IHN0YXJ0T2Zmc2V0UGl4ZWxzID0gb2Zmc2V0ID4gMCA/IHRvdGFsUGF0aExlbmd0aCAqIG9mZnNldCA6IDA7XG4gIGNvbnN0IGVuZE9mZnNldFBpeGVscyA9IGVuZE9mZnNldCA+IDAgPyB0b3RhbFBhdGhMZW5ndGggKiBlbmRPZmZzZXQgOiAwO1xuXG4gIC8vIDIuIGdlbmVyYXRlIHRoZSBwb3NpdGlvbnMgb2YgdGhlIHBhdHRlcm4gYXMgb2Zmc2V0cyBmcm9tIHRoZSBwYXRoIHN0YXJ0XG4gIGNvbnN0IHBvc2l0aW9uT2Zmc2V0cyA9IFtdO1xuICBsZXQgcG9zaXRpb25PZmZzZXQgPSBzdGFydE9mZnNldFBpeGVscztcbiAgZG8ge1xuICAgIHBvc2l0aW9uT2Zmc2V0cy5wdXNoKHBvc2l0aW9uT2Zmc2V0KTtcbiAgICBwb3NpdGlvbk9mZnNldCArPSByZXBlYXRJbnRlcnZhbFBpeGVscztcbiAgfSB3aGlsZSAoXG4gICAgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPiAwICYmXG4gICAgcG9zaXRpb25PZmZzZXQgPCB0b3RhbFBhdGhMZW5ndGggLSBlbmRPZmZzZXRQaXhlbHNcbiAgKTtcblxuICAvLyAzLiBwcm9qZWN0cyBvZmZzZXRzIHRvIHNlZ21lbnRzXG4gIGxldCBzZWdtZW50SW5kZXggPSAwO1xuICBsZXQgc2VnbWVudCA9IHNlZ21lbnRzWzBdO1xuICByZXR1cm4gcG9zaXRpb25PZmZzZXRzLm1hcCgocG9zaXRpb25PZmZzZXQpID0+IHtcbiAgICAvLyBmaW5kIHRoZSBzZWdtZW50IG1hdGNoaW5nIHRoZSBvZmZzZXQsXG4gICAgLy8gc3RhcnRpbmcgZnJvbSB0aGUgcHJldmlvdXMgb25lIGFzIG9mZnNldHMgYXJlIG9yZGVyZWRcbiAgICB3aGlsZSAocG9zaXRpb25PZmZzZXQgPiBzZWdtZW50LmRpc3RCICYmIHNlZ21lbnRJbmRleCA8IG5iU2VnbWVudHMgLSAxKSB7XG4gICAgICBzZWdtZW50SW5kZXgrKztcbiAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdtZW50SW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ21lbnRSYXRpbyA9XG4gICAgICAocG9zaXRpb25PZmZzZXQgLSBzZWdtZW50LmRpc3RBKSAvIChzZWdtZW50LmRpc3RCIC0gc2VnbWVudC5kaXN0QSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB0OiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMoc2VnbWVudC5hLCBzZWdtZW50LmIsIHNlZ21lbnRSYXRpbyksXG4gICAgICBoZWFkaW5nOiBzZWdtZW50LmhlYWRpbmcsXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHBvaW50IHdoaWNoIGxpZXMgb24gdGhlIHNlZ21lbnQgZGVmaW5lZCBieSBwb2ludHMgQSBhbmQgQixcbiAqIGF0IHRoZSBnaXZlbiByYXRpbyBvZiB0aGUgZGlzdGFuY2UgZnJvbSBBIHRvIEIsIGJ5IGxpbmVhciBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMocHRBLCBwdEIsIHJhdGlvKSB7XG4gIGlmIChwdEIueCAhPT0gcHRBLngpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcHRBLnggKyByYXRpbyAqIChwdEIueCAtIHB0QS54KSxcbiAgICAgIHk6IHB0QS55ICsgcmF0aW8gKiAocHRCLnkgLSBwdEEueSksXG4gICAgfTtcbiAgfVxuICAvLyBzcGVjaWFsIGNhc2Ugd2hlcmUgcG9pbnRzIGxpZSBvbiB0aGUgc2FtZSB2ZXJ0aWNhbCBheGlzXG4gIHJldHVybiB7XG4gICAgeDogcHRBLngsXG4gICAgeTogcHRBLnkgKyAocHRCLnkgLSBwdEEueSkgKiByYXRpbyxcbiAgfTtcbn1cblxuZXhwb3J0IHtcbiAgcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCxcbiAgcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSxcbiAgLy8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhcmUgZXhwb3J0ZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VcbiAgY29tcHV0ZVNlZ21lbnRIZWFkaW5nLFxuICBhc1JhdGlvVG9QYXRoTGVuZ3RoLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUFBLE9BQUE7QUFEQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUMsZ0JBQUMsQ0FBQ0MsTUFBTSxHQUFHRCxnQkFBQyxDQUFDQyxNQUFNLElBQUksQ0FBQyxDQUFDOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBRCxnQkFBQyxDQUFDQyxNQUFNLENBQUNDLElBQUksR0FBR0YsZ0JBQUMsQ0FBQ0csS0FBSyxDQUFDQyxNQUFNLENBQUM7RUFDN0JDLE9BQU8sRUFBRTtJQUNQQyxTQUFTLEVBQUUsRUFBRTtJQUNiQyxXQUFXLEVBQUUsQ0FBQztFQUNoQixDQUFDO0VBRURDLFVBQVUsRUFB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
@@ -82,13 +82,13 @@ var urls = function urls() {
82
82
  },
83
83
  wbeDashboard: {
84
84
  trendGraph: {
85
- url: "/api_ui/wbe_dashboard/trend_graph/wa/".concat(param.waterAuthorityId, "?water_authority_id=").concat(param.waterAuthorityId)
85
+ url: "/api_ui/wbe_dashboard/".concat(param.pathogen, "/trend_graph/wa/").concat(param.waterAuthorityId, "?water_authority_id=").concat(param.waterAuthorityId)
86
86
  },
87
87
  govData: {
88
88
  url: "https://data.gov.il/api/3/action/datastore_search?resource_id=bd7b8fa9-7120-4e8d-933f-a1449dae8dad&q=".concat(param.week)
89
89
  },
90
90
  summaryBar: {
91
- url: "/api_ui/wbe_dashboard/summary_bar/".concat(param.waterAuthorityId)
91
+ url: "/api_ui/wbe_dashboard/".concat(param.pathogen, "/summary_bar/").concat(param.waterAuthorityId)
92
92
  }
93
93
  },
94
94
  uploadLabResult: {
@@ -129,4 +129,4 @@ var HTTP_METHODS = {
129
129
  DELETE: 'DELETE'
130
130
  };
131
131
  exports.HTTP_METHODS = HTTP_METHODS;
132
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcXVlcnlTdHJpbmciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9leGNsdWRlZCIsInF1ZXJ5VXJsIiwiX3JlZiIsInVybCIsInF1ZXJ5Iiwic29ydCIsInJlc3RRdWVyeSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJkZWZhdWx0Iiwic3RyIiwiY29uY2F0IiwicXVlcnlTdHJpbmciLCJzdHJpbmdpZnkiLCJtIiwic2xpY2UiLCJzb3J0U3RyIiwiZXhwb3J0cyIsInVybHMiLCJwYXJhbSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm5vdGlmaWNhdGlvbnNQYWdlIiwiZ2V0Tm90aWZpY2F0aW9ucyIsIndhdGVyQXV0aG9yaXR5SWQiLCJkZWxldGVOb3RpZmljYXRpb24iLCJ1cGRhdGVOb3RpZmljYXRpb25zIiwic2FtcGxpbmdzUGFnZSIsImdldEFsbCIsImN1cnJlbnRQYWdlIiwib3JkZXJCeSIsIm9yZGVyRGlyZWN0aW9uIiwicGVyUGFnZSIsImxvY2FsZSIsImtxbCIsImRvd25sb2FkU2FtcGxpbmdzIiwiZG93bmxvYWRMYWJSZXN1bHRzIiwiZ2V0UG9pbnRzIiwiY3JlYXRlTmV3U2FtcGxpbmciLCJzYW1wbGluZ1Byb3BlcnRpZXNSb3V0ZSIsImlkIiwib3AiLCJzYW1wbGluZ3NMaXN0Um91dGUiLCJ1cGxvYWRMYWJSZXN1bHQiLCJ2aWV3TGFiUmVzdWx0Iiwic2FtcGxpbmdJZCIsInNhbXBsaW5nUHJvcGVydGllcyIsImZldGNoU2FtcGxpbmciLCJ1cGRhdGVTYW1wbGluZyIsImRlbGV0ZVNhbXBsaW5nIiwiY3JlYXRlU2FtcGxpbmciLCJnZXRQcmVzaWduZWRVcmwiLCJ3YmVEYXNoYm9hcmQiLCJ0cmVuZEdyYXBoIiwiZ292RGF0YSIsIndlZWsiLCJzdW1tYXJ5QmFyIiwidmFsaWRhdGUiLCJ1cGxvYWQiLCJpbXBvcnRHaXNGaWxlIiwiZ2V0QWxsRmlsZXNCeVdhdGVyQXV0aG9yaXR5IiwiaW1wb3J0R2lzUHJvY2Vzc1BhZ2UiLCJuZXdGaWxlIiwidmFsaWRhdGVGaWxlIiwib3ZlcnZpZXciLCJwb2xsdXRpb25Db250cmlidXRvciIsInBvaW50SWQiLCJIVFRQX01FVEhPRFMiLCJQT1NUIiwiUFVUIiwiUEFUQ0giLCJHRVQiLCJERUxFVEUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL3VybHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gJ3F1ZXJ5LXN0cmluZyc7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVVybCA9ICh7IHVybCwgcXVlcnkgfSkgPT4ge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gdXJsO1xuICBjb25zdCB7IHNvcnQsIC4uLnJlc3RRdWVyeSB9ID0gcXVlcnk7XG4gIGNvbnN0IHN0ciA9IGAke3F1ZXJ5U3RyaW5nLnN0cmluZ2lmeShyZXN0UXVlcnkpfWA7XG4gIGNvbnN0IG0gPSB1cmwuc2xpY2UoLTEpID09PSAnJicgPyAnJyA6ICc/JztcbiAgY29uc3Qgc29ydFN0ciA9IHNvcnQgPyBgJnNvcnQ9JHtzb3J0fWAgOiAnJztcbiAgcmV0dXJuIGAke3VybH0ke219JHtzdHJ9JHtzb3J0U3RyfWA7XG59O1xuXG5leHBvcnQgY29uc3QgdXJscyA9IChwYXJhbSA9IHt9KSA9PiAoe1xuICBub3RpZmljYXRpb25zUGFnZToge1xuICAgIGdldE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvbm90aWZpY2F0aW9uX3BhZ2UvaW5kZXguanNvbj93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICBkZWxldGVOb3RpZmljYXRpb246IHtcbiAgICAgIHVybDogJy91c2VyX3ByZWZlcmVuY2VzL3JlbW92ZV9hbGVydC5qcycsXG4gICAgfSxcbiAgICB1cGRhdGVOb3RpZmljYXRpb25zOiB7XG4gICAgICB1cmw6ICcvdXNlcl9wcmVmZXJlbmNlcy91cGRhdGVfYWxlcnRfcmVnaXN0cmF0aW9ucy5qc29uJyxcbiAgICB9LFxuICB9LFxuICBzYW1wbGluZ3NQYWdlOiB7XG4gICAgZ2V0QWxsOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3NhbXBsaW5nX3BhZ2Uvc2FtcGxpbmdzX2RhdGEuanNvbj9wYWdlPSR7cGFyYW0uY3VycmVudFBhZ2V9Jm9yZGVyX2J5PSR7cGFyYW0ub3JkZXJCeX0tJHtwYXJhbS5vcmRlckRpcmVjdGlvbn0mcGVyX3BhZ2U9JHtwYXJhbS5wZXJQYWdlfSZ3YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfSZsb2NhbGU9JHtwYXJhbS5sb2NhbGV9JnZhbHVlc0Zyb21LUUw9JHtwYXJhbS5rcWx9YCxcbiAgICB9LFxuICAgIGRvd25sb2FkU2FtcGxpbmdzOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3NhbXBsaW5nX3BhZ2Uvc2FtcGxpbmdfcmVwb3J0X2RhdGEuY3N2P29yZGVyX2J5PSR7cGFyYW0ub3JkZXJCeX0tJHtwYXJhbS5vcmRlckRpcmVjdGlvbn0md2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH0mbG9jYWxlPSR7cGFyYW0ubG9jYWxlfSZ2YWx1ZXNGcm9tS1FMPSR7cGFyYW0ua3FsfWAsXG4gICAgfSxcbiAgICBkb3dubG9hZExhYlJlc3VsdHM6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS9sYWJfcmVzdWx0X3JlcG9ydF9kYXRhLmNzdj9vcmRlcl9ieT0ke3BhcmFtLm9yZGVyQnl9LSR7cGFyYW0ub3JkZXJEaXJlY3Rpb259JndhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9JmxvY2FsZT0ke3BhcmFtLmxvY2FsZX0mdmFsdWVzRnJvbUtRTD0ke3BhcmFtLmtxbH1gLFxuICAgIH0sXG4gICAgZ2V0UG9pbnRzOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3NhbXBsaW5nX3BhZ2Uvd2F0ZXJfYXV0aG9yaXR5X3BvaW50cz9sb2NhbGU9ZW4md2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgY3JlYXRlTmV3U2FtcGxpbmc6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS9jcmVhdGVfbmV3X3NhbXBsaW5nP3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICAgIHNhbXBsaW5nUHJvcGVydGllc1JvdXRlOiB7XG4gICAgICB1cmw6IGAvc2FtcGxpbmctcHJvcGVydGllcy8ke3BhcmFtLmlkfT9vcD0ke3BhcmFtLm9wfSZsb2NhbGU9JHtwYXJhbS5sb2NhbGV9JndhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICAgIHNhbXBsaW5nc0xpc3RSb3V0ZToge1xuICAgICAgdXJsOiBgL3NhbXBsaW5ncy1saXN0L2luZGV4P2xvY2FsZT0ke3BhcmFtLmxvY2FsZX0md2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgdXBsb2FkTGFiUmVzdWx0OiB7XG4gICAgICB1cmw6IGAvc2FtcGxpbmdzLWxpc3QvdXBsb2FkX2xhYl9yZXN1bHQ/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH0mbG9jYWxlPSR7cGFyYW0ubG9jYWxlfWAsXG4gICAgfSxcbiAgICB2aWV3TGFiUmVzdWx0OiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3NhbXBsaW5nX3BhZ2Uvdmlld19sYWJfcmVzdWx0LyR7cGFyYW0uc2FtcGxpbmdJZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH0mbG9jYWxlPSR7cGFyYW0ubG9jYWxlfWAsXG4gICAgfSxcbiAgfSxcbiAgc2FtcGxpbmdQcm9wZXJ0aWVzOiB7XG4gICAgZmV0Y2hTYW1wbGluZzoge1xuICAgICAgdXJsOiBgL2FwaV91aS9zYW1wbGluZ19wYWdlL3NhbXBsaW5nX3Byb3BlcnRpZXMvJHtwYXJhbS5zYW1wbGluZ0lkfWAsXG4gICAgfSxcbiAgICB1cGRhdGVTYW1wbGluZzoge1xuICAgICAgdXJsOiBgL3NhbXBsaW5ncy8ke3BhcmFtLnNhbXBsaW5nSWR9P3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICAgIGRlbGV0ZVNhbXBsaW5nOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3NhbXBsaW5nX3BhZ2UvZGVsZXRlX3NhbXBsaW5nLyR7cGFyYW0uc2FtcGxpbmdJZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgY3JlYXRlU2FtcGxpbmc6IHtcbiAgICAgIHVybDogYC9zYW1wbGluZ3M/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgZ2V0UHJlc2lnbmVkVXJsOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3NhbXBsaW5nX3BhZ2Uvc2FtcGxpbmdzLyR7cGFyYW0uc2FtcGxpbmdJZH0vcHJlc2lnbmVkX3VybD93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgfSxcbiAgd2JlRGFzaGJvYXJkOiB7XG4gICAgdHJlbmRHcmFwaDoge1xuICAgICAgdXJsOiBgL2FwaV91aS93YmVfZGFzaGJvYXJkL3RyZW5kX2dyYXBoL3dhLyR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgZ292RGF0YToge1xuICAgICAgdXJsOiBgaHR0cHM6Ly9kYXRhLmdvdi5pbC9hcGkvMy9hY3Rpb24vZGF0YXN0b3JlX3NlYXJjaD9yZXNvdXJjZV9pZD1iZDdiOGZhOS03MTIwLTRlOGQtOTMzZi1hMTQ0OWRhZThkYWQmcT0ke3BhcmFtLndlZWt9YCxcbiAgICB9LFxuICAgIHN1bW1hcnlCYXI6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvd2JlX2Rhc2hib2FyZC9zdW1tYXJ5X2Jhci8ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICB9LFxuICB1cGxvYWRMYWJSZXN1bHQ6IHtcbiAgICB2YWxpZGF0ZToge1xuICAgICAgdXJsOiBgL2FwaV91aS9pbXBvcnRfbGFiX3Jlc3VsdC92YWxpZGF0ZT93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfSZsb2NhbGU9JHtwYXJhbS5sb2NhbGV9YCxcbiAgICB9LFxuICAgIHVwbG9hZDoge1xuICAgICAgdXJsOiBgL2FwaV91aS9pbXBvcnRfbGFiX3Jlc3VsdC91cGxvYWRfbGFiX3Jlc3VsdD93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgfSxcbiAgaW1wb3J0R2lzRmlsZToge1xuICAgIGdldEFsbEZpbGVzQnlXYXRlckF1dGhvcml0eToge1xuICAgICAgdXJsOiBgL2FwaV91aS9pbXBvcnRfZ2lzL3dhdGVyX2F1dGhvcml0eV9kYXRhLz93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICBpbXBvcnRHaXNQcm9jZXNzUGFnZToge1xuICAgICAgdXJsOiBgL2ltcG9ydF9naXNfcHJvY2Vzcy9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICBuZXdGaWxlOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL2ltcG9ydF9naXMvdXBsb2FkX2dpcz93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICB2YWxpZGF0ZUZpbGU6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvaW1wb3J0X2dpcy92YWxpZGF0ZV9naXM/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gIH0sXG4gIG92ZXJ2aWV3OiB7XG4gICAgcG9sbHV0aW9uQ29udHJpYnV0b3I6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvb3ZlcnZpZXcvcG9sbHV0aW9uX2NvbnRyaWJ1dG9yLyR7cGFyYW0ucG9pbnRJZH1gLFxuICAgIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IEhUVFBfTUVUSE9EUyA9IHtcbiAgUE9TVDogJ1BPU1QnLFxuICBQVVQ6ICdQVVQnLFxuICBQQVRDSDogJ1BBVENIJyxcbiAgR0VUOiAnR0VUJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXVDLElBQUFDLFNBQUE7QUFFaEMsSUFBTUMsUUFBUSxHQUFHLFNBQVhBLFFBQVFBLENBQUFDLElBQUEsRUFBdUI7RUFBQSxJQUFqQkMsR0FBRyxHQUFBRCxJQUFBLENBQUhDLEdBQUc7SUFBRUMsS0FBSyxHQUFBRixJQUFBLENBQUxFLEtBQUs7RUFDbkMsSUFBSSxDQUFDQSxLQUFLLEVBQUUsT0FBT0QsR0FBRztFQUN0QixJQUFRRSxJQUFJLEdBQW1CRCxLQUFLLENBQTVCQyxJQUFJO0lBQUtDLFNBQVMsT0FBQUMseUJBQUEsQ0FBQUMsT0FBQSxFQUFLSixLQUFLLEVBQUFKLFNBQUE7RUFDcEMsSUFBTVMsR0FBRyxNQUFBQyxNQUFBLENBQU1DLG9CQUFXLENBQUNDLFNBQVMsQ0FBQ04sU0FBUyxDQUFDLENBQUU7RUFDakQsSUFBTU8sQ0FBQyxHQUFHVixHQUFHLENBQUNXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRztFQUMxQyxJQUFNQyxPQUFPLEdBQUdWLElBQUksWUFBQUssTUFBQSxDQUFZTCxJQUFJLElBQUssRUFBRTtFQUMzQyxVQUFBSyxNQUFBLENBQVVQLEdB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
132
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcXVlcnlTdHJpbmciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9leGNsdWRlZCIsInF1ZXJ5VXJsIiwiX3JlZiIsInVybCIsInF1ZXJ5Iiwic29ydCIsInJlc3RRdWVyeSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJkZWZhdWx0Iiwic3RyIiwiY29uY2F0IiwicXVlcnlTdHJpbmciLCJzdHJpbmdpZnkiLCJtIiwic2xpY2UiLCJzb3J0U3RyIiwiZXhwb3J0cyIsInVybHMiLCJwYXJhbSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm5vdGlmaWNhdGlvbnNQYWdlIiwiZ2V0Tm90aWZpY2F0aW9ucyIsIndhdGVyQXV0aG9yaXR5SWQiLCJkZWxldGVOb3RpZmljYXRpb24iLCJ1cGRhdGVOb3RpZmljYXRpb25zIiwic2FtcGxpbmdzUGFnZSIsImdldEFsbCIsImN1cnJlbnRQYWdlIiwib3JkZXJCeSIsIm9yZGVyRGlyZWN0aW9uIiwicGVyUGFnZSIsImxvY2FsZSIsImtxbCIsImRvd25sb2FkU2FtcGxpbmdzIiwiZG93bmxvYWRMYWJSZXN1bHRzIiwiZ2V0UG9pbnRzIiwiY3JlYXRlTmV3U2FtcGxpbmciLCJzYW1wbGluZ1Byb3BlcnRpZXNSb3V0ZSIsImlkIiwib3AiLCJzYW1wbGluZ3NMaXN0Um91dGUiLCJ1cGxvYWRMYWJSZXN1bHQiLCJ2aWV3TGFiUmVzdWx0Iiwic2FtcGxpbmdJZCIsInNhbXBsaW5nUHJvcGVydGllcyIsImZldGNoU2FtcGxpbmciLCJ1cGRhdGVTYW1wbGluZyIsImRlbGV0ZVNhbXBsaW5nIiwiY3JlYXRlU2FtcGxpbmciLCJnZXRQcmVzaWduZWRVcmwiLCJ3YmVEYXNoYm9hcmQiLCJ0cmVuZEdyYXBoIiwicGF0aG9nZW4iLCJnb3ZEYXRhIiwid2VlayIsInN1bW1hcnlCYXIiLCJ2YWxpZGF0ZSIsInVwbG9hZCIsImltcG9ydEdpc0ZpbGUiLCJnZXRBbGxGaWxlc0J5V2F0ZXJBdXRob3JpdHkiLCJpbXBvcnRHaXNQcm9jZXNzUGFnZSIsIm5ld0ZpbGUiLCJ2YWxpZGF0ZUZpbGUiLCJvdmVydmlldyIsInBvbGx1dGlvbkNvbnRyaWJ1dG9yIiwicG9pbnRJZCIsIkhUVFBfTUVUSE9EUyIsIlBPU1QiLCJQVVQiLCJQQVRDSCIsIkdFVCIsIkRFTEVURSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdXJscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcXVlcnlTdHJpbmcgZnJvbSAncXVlcnktc3RyaW5nJztcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VXJsID0gKHsgdXJsLCBxdWVyeSB9KSA9PiB7XG4gIGlmICghcXVlcnkpIHJldHVybiB1cmw7XG4gIGNvbnN0IHsgc29ydCwgLi4ucmVzdFF1ZXJ5IH0gPSBxdWVyeTtcbiAgY29uc3Qgc3RyID0gYCR7cXVlcnlTdHJpbmcuc3RyaW5naWZ5KHJlc3RRdWVyeSl9YDtcbiAgY29uc3QgbSA9IHVybC5zbGljZSgtMSkgPT09ICcmJyA/ICcnIDogJz8nO1xuICBjb25zdCBzb3J0U3RyID0gc29ydCA/IGAmc29ydD0ke3NvcnR9YCA6ICcnO1xuICByZXR1cm4gYCR7dXJsfSR7bX0ke3N0cn0ke3NvcnRTdHJ9YDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cmxzID0gKHBhcmFtID0ge30pID0+ICh7XG4gIG5vdGlmaWNhdGlvbnNQYWdlOiB7XG4gICAgZ2V0Tm90aWZpY2F0aW9uczoge1xuICAgICAgdXJsOiBgL2FwaV91aS9ub3RpZmljYXRpb25fcGFnZS9pbmRleC5qc29uP3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICAgIGRlbGV0ZU5vdGlmaWNhdGlvbjoge1xuICAgICAgdXJsOiAnL3VzZXJfcHJlZmVyZW5jZXMvcmVtb3ZlX2FsZXJ0LmpzJyxcbiAgICB9LFxuICAgIHVwZGF0ZU5vdGlmaWNhdGlvbnM6IHtcbiAgICAgIHVybDogJy91c2VyX3ByZWZlcmVuY2VzL3VwZGF0ZV9hbGVydF9yZWdpc3RyYXRpb25zLmpzb24nLFxuICAgIH0sXG4gIH0sXG4gIHNhbXBsaW5nc1BhZ2U6IHtcbiAgICBnZXRBbGw6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS9zYW1wbGluZ3NfZGF0YS5qc29uP3BhZ2U9JHtwYXJhbS5jdXJyZW50UGFnZX0mb3JkZXJfYnk9JHtwYXJhbS5vcmRlckJ5fS0ke3BhcmFtLm9yZGVyRGlyZWN0aW9ufSZwZXJfcGFnZT0ke3BhcmFtLnBlclBhZ2V9JndhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9JmxvY2FsZT0ke3BhcmFtLmxvY2FsZX0mdmFsdWVzRnJvbUtRTD0ke3BhcmFtLmtxbH1gLFxuICAgIH0sXG4gICAgZG93bmxvYWRTYW1wbGluZ3M6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS9zYW1wbGluZ19yZXBvcnRfZGF0YS5jc3Y/b3JkZXJfYnk9JHtwYXJhbS5vcmRlckJ5fS0ke3BhcmFtLm9yZGVyRGlyZWN0aW9ufSZ3YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfSZsb2NhbGU9JHtwYXJhbS5sb2NhbGV9JnZhbHVlc0Zyb21LUUw9JHtwYXJhbS5rcWx9YCxcbiAgICB9LFxuICAgIGRvd25sb2FkTGFiUmVzdWx0czoge1xuICAgICAgdXJsOiBgL2FwaV91aS9zYW1wbGluZ19wYWdlL2xhYl9yZXN1bHRfcmVwb3J0X2RhdGEuY3N2P29yZGVyX2J5PSR7cGFyYW0ub3JkZXJCeX0tJHtwYXJhbS5vcmRlckRpcmVjdGlvbn0md2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH0mbG9jYWxlPSR7cGFyYW0ubG9jYWxlfSZ2YWx1ZXNGcm9tS1FMPSR7cGFyYW0ua3FsfWAsXG4gICAgfSxcbiAgICBnZXRQb2ludHM6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS93YXRlcl9hdXRob3JpdHlfcG9pbnRzP2xvY2FsZT1lbiZ3YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICBjcmVhdGVOZXdTYW1wbGluZzoge1xuICAgICAgdXJsOiBgL2FwaV91aS9zYW1wbGluZ19wYWdlL2NyZWF0ZV9uZXdfc2FtcGxpbmc/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgc2FtcGxpbmdQcm9wZXJ0aWVzUm91dGU6IHtcbiAgICAgIHVybDogYC9zYW1wbGluZy1wcm9wZXJ0aWVzLyR7cGFyYW0uaWR9P29wPSR7cGFyYW0ub3B9JmxvY2FsZT0ke3BhcmFtLmxvY2FsZX0md2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgc2FtcGxpbmdzTGlzdFJvdXRlOiB7XG4gICAgICB1cmw6IGAvc2FtcGxpbmdzLWxpc3QvaW5kZXg/bG9jYWxlPSR7cGFyYW0ubG9jYWxlfSZ3YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICB1cGxvYWRMYWJSZXN1bHQ6IHtcbiAgICAgIHVybDogYC9zYW1wbGluZ3MtbGlzdC91cGxvYWRfbGFiX3Jlc3VsdD93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfSZsb2NhbGU9JHtwYXJhbS5sb2NhbGV9YCxcbiAgICB9LFxuICAgIHZpZXdMYWJSZXN1bHQ6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS92aWV3X2xhYl9yZXN1bHQvJHtwYXJhbS5zYW1wbGluZ0lkfT93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfSZsb2NhbGU9JHtwYXJhbS5sb2NhbGV9YCxcbiAgICB9LFxuICB9LFxuICBzYW1wbGluZ1Byb3BlcnRpZXM6IHtcbiAgICBmZXRjaFNhbXBsaW5nOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3NhbXBsaW5nX3BhZ2Uvc2FtcGxpbmdfcHJvcGVydGllcy8ke3BhcmFtLnNhbXBsaW5nSWR9YCxcbiAgICB9LFxuICAgIHVwZGF0ZVNhbXBsaW5nOiB7XG4gICAgICB1cmw6IGAvc2FtcGxpbmdzLyR7cGFyYW0uc2FtcGxpbmdJZH0/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gICAgZGVsZXRlU2FtcGxpbmc6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS9kZWxldGVfc2FtcGxpbmcvJHtwYXJhbS5zYW1wbGluZ0lkfT93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICBjcmVhdGVTYW1wbGluZzoge1xuICAgICAgdXJsOiBgL3NhbXBsaW5ncz93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICBnZXRQcmVzaWduZWRVcmw6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvc2FtcGxpbmdfcGFnZS9zYW1wbGluZ3MvJHtwYXJhbS5zYW1wbGluZ0lkfS9wcmVzaWduZWRfdXJsP3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICB9LFxuICB3YmVEYXNoYm9hcmQ6IHtcbiAgICB0cmVuZEdyYXBoOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL3diZV9kYXNoYm9hcmQvJHtwYXJhbS5wYXRob2dlbn0vdHJlbmRfZ3JhcGgvd2EvJHtwYXJhbS53YXRlckF1dGhvcml0eUlkfT93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgICBnb3ZEYXRhOiB7XG4gICAgICB1cmw6IGBodHRwczovL2RhdGEuZ292LmlsL2FwaS8zL2FjdGlvbi9kYXRhc3RvcmVfc2VhcmNoP3Jlc291cmNlX2lkPWJkN2I4ZmE5LTcxMjAtNGU4ZC05MzNmLWExNDQ5ZGFlOGRhZCZxPSR7cGFyYW0ud2Vla31gLFxuICAgIH0sXG4gICAgc3VtbWFyeUJhcjoge1xuICAgICAgdXJsOiBgL2FwaV91aS93YmVfZGFzaGJvYXJkLyR7cGFyYW0ucGF0aG9nZW59L3N1bW1hcnlfYmFyLyR7cGFyYW0ud2F0ZXJBdXRob3JpdHlJZH1gLFxuICAgIH0sXG4gIH0sXG4gIHVwbG9hZExhYlJlc3VsdDoge1xuICAgIHZhbGlkYXRlOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL2ltcG9ydF9sYWJfcmVzdWx0L3ZhbGlkYXRlP3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9JmxvY2FsZT0ke3BhcmFtLmxvY2FsZX1gLFxuICAgIH0sXG4gICAgdXBsb2FkOiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL2ltcG9ydF9sYWJfcmVzdWx0L3VwbG9hZF9sYWJfcmVzdWx0P3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICB9LFxuICBpbXBvcnRHaXNGaWxlOiB7XG4gICAgZ2V0QWxsRmlsZXNCeVdhdGVyQXV0aG9yaXR5OiB7XG4gICAgICB1cmw6IGAvYXBpX3VpL2ltcG9ydF9naXMvd2F0ZXJfYXV0aG9yaXR5X2RhdGEvP3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICAgIGltcG9ydEdpc1Byb2Nlc3NQYWdlOiB7XG4gICAgICB1cmw6IGAvaW1wb3J0X2dpc19wcm9jZXNzL2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICAgIG5ld0ZpbGU6IHtcbiAgICAgIHVybDogYC9hcGlfdWkvaW1wb3J0X2dpcy91cGxvYWRfZ2lzP3dhdGVyX2F1dGhvcml0eV9pZD0ke3BhcmFtLndhdGVyQXV0aG9yaXR5SWR9YCxcbiAgICB9LFxuICAgIHZhbGlkYXRlRmlsZToge1xuICAgICAgdXJsOiBgL2FwaV91aS9pbXBvcnRfZ2lzL3ZhbGlkYXRlX2dpcz93YXRlcl9hdXRob3JpdHlfaWQ9JHtwYXJhbS53YXRlckF1dGhvcml0eUlkfWAsXG4gICAgfSxcbiAgfSxcbiAgb3ZlcnZpZXc6IHtcbiAgICBwb2xsdXRpb25Db250cmlidXRvcjoge1xuICAgICAgdXJsOiBgL2FwaV91aS9vdmVydmlldy9wb2xsdXRpb25fY29udHJpYnV0b3IvJHtwYXJhbS5wb2ludElkfWAsXG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSFRUUF9NRVRIT0RTID0ge1xuICBQT1NUOiAnUE9TVCcsXG4gIFBVVDogJ1BVVCcsXG4gIFBBVENIOiAnUEFUQ0gnLFxuICBHRVQ6ICdHRVQnLFxuICBERUxFVEU6ICdERUxFVEUnLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBdUMsSUFBQUMsU0FBQTtBQUVoQyxJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBQUMsSUFBQSxFQUF1QjtFQUFBLElBQWpCQyxHQUFHLEdBQUFELElBQUEsQ0FBSEMsR0FBRztJQUFFQyxLQUFLLEdBQUFGLElBQUEsQ0FBTEUsS0FBSztFQUNuQyxJQUFJLENBQUNBLEtBQUssRUFBRSxPQUFPRCxHQUFHO0VBQ3RCLElBQVFFLElBQUksR0FBbUJELEtBQUssQ0FBNUJDLElBQUk7SUFBS0MsU0FBUyxPQUFBQyx5QkFBQSxDQUFBQyxPQUFBLEVBQUtKLEtBQUssRUFBQUosU0FBQTtFQUNwQyxJQUFNUyxHQUFHLE1BQUFDLE1BQUEsQ0FBTUMsb0JBQVcsQ0FBQ0MsU0FBUyxDQUFDTixTQUFTLENBQUMsQ0FBRTtFQUNqRCxJQUFNTyxDQUFDLEdBQUdWLEdBQUcsQ0FBQ1csS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHO0VBQzFDLElBQU1DLE9BQU8sR0FBR1YsSUFBSSxZQUFBSyxNQUFB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