@pie-lib/charting 5.36.3-next.2 → 5.36.4-next.0

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 (143) hide show
  1. package/CHANGELOG.md +17 -96
  2. package/lib/__tests__/axes.test.js +129 -0
  3. package/lib/__tests__/chart-setup.test.js +57 -0
  4. package/lib/__tests__/chart-type.test.js +25 -0
  5. package/lib/__tests__/chart.test.js +103 -0
  6. package/lib/__tests__/grid.test.js +39 -0
  7. package/lib/__tests__/mark-label.test.js +46 -0
  8. package/lib/__tests__/utils.js +56 -0
  9. package/lib/__tests__/utils.test.js +186 -0
  10. package/lib/actions-button.js +61 -91
  11. package/lib/actions-button.js.map +1 -1
  12. package/lib/axes.js +163 -239
  13. package/lib/axes.js.map +1 -1
  14. package/lib/bars/__tests__/bar.test.js +53 -0
  15. package/lib/bars/__tests__/histogram.test.js +53 -0
  16. package/lib/bars/__tests__/utils.js +50 -0
  17. package/lib/bars/bar.js +14 -42
  18. package/lib/bars/bar.js.map +1 -1
  19. package/lib/bars/common/__tests__/bars.test.js +76 -0
  20. package/lib/bars/common/__tests__/utils.js +50 -0
  21. package/lib/bars/common/bars.js +62 -138
  22. package/lib/bars/common/bars.js.map +1 -1
  23. package/lib/bars/common/correct-check-icon.js +6 -7
  24. package/lib/bars/common/correct-check-icon.js.map +1 -1
  25. package/lib/bars/histogram.js +14 -42
  26. package/lib/bars/histogram.js.map +1 -1
  27. package/lib/chart-setup.js +120 -196
  28. package/lib/chart-setup.js.map +1 -1
  29. package/lib/chart-type.js +53 -44
  30. package/lib/chart-type.js.map +1 -1
  31. package/lib/chart-types.js +2 -11
  32. package/lib/chart-types.js.map +1 -1
  33. package/lib/chart.js +74 -152
  34. package/lib/chart.js.map +1 -1
  35. package/lib/common/__tests__/drag-handle.test.js +74 -0
  36. package/lib/common/__tests__/utils.js +50 -0
  37. package/lib/common/correctness-indicators.js +110 -53
  38. package/lib/common/correctness-indicators.js.map +1 -1
  39. package/lib/common/drag-handle.js +66 -109
  40. package/lib/common/drag-handle.js.map +1 -1
  41. package/lib/common/drag-icon.js +13 -13
  42. package/lib/common/drag-icon.js.map +1 -1
  43. package/lib/common/styles.js +7 -25
  44. package/lib/common/styles.js.map +1 -1
  45. package/lib/grid.js +44 -84
  46. package/lib/grid.js.map +1 -1
  47. package/lib/index.js +1 -7
  48. package/lib/index.js.map +1 -1
  49. package/lib/key-legend.js +64 -88
  50. package/lib/key-legend.js.map +1 -1
  51. package/lib/line/__tests__/line-cross.test.js +47 -0
  52. package/lib/line/__tests__/line-dot.test.js +47 -0
  53. package/lib/line/__tests__/utils.js +56 -0
  54. package/lib/line/common/__tests__/drag-handle.test.js +74 -0
  55. package/lib/line/common/__tests__/line.test.js +92 -0
  56. package/lib/line/common/__tests__/utils.js +50 -0
  57. package/lib/line/common/drag-handle.js +73 -101
  58. package/lib/line/common/drag-handle.js.map +1 -1
  59. package/lib/line/common/line.js +51 -97
  60. package/lib/line/common/line.js.map +1 -1
  61. package/lib/line/line-cross.js +80 -90
  62. package/lib/line/line-cross.js.map +1 -1
  63. package/lib/line/line-dot.js +59 -77
  64. package/lib/line/line-dot.js.map +1 -1
  65. package/lib/mark-label.js +85 -120
  66. package/lib/mark-label.js.map +1 -1
  67. package/lib/plot/__tests__/dot.test.js +53 -0
  68. package/lib/plot/__tests__/line.test.js +53 -0
  69. package/lib/plot/__tests__/utils.js +50 -0
  70. package/lib/plot/common/__tests__/plot.test.js +79 -0
  71. package/lib/plot/common/__tests__/utils.js +50 -0
  72. package/lib/plot/common/plot.js +91 -149
  73. package/lib/plot/common/plot.js.map +1 -1
  74. package/lib/plot/dot.js +33 -59
  75. package/lib/plot/dot.js.map +1 -1
  76. package/lib/plot/line.js +40 -65
  77. package/lib/plot/line.js.map +1 -1
  78. package/lib/tool-menu.js +48 -84
  79. package/lib/tool-menu.js.map +1 -1
  80. package/lib/utils.js +32 -87
  81. package/lib/utils.js.map +1 -1
  82. package/package.json +22 -24
  83. package/src/__tests__/axes.test.jsx +85 -100
  84. package/src/__tests__/chart-type.test.jsx +5 -11
  85. package/src/__tests__/chart.test.jsx +41 -50
  86. package/src/__tests__/grid.test.jsx +23 -11
  87. package/src/__tests__/mark-label.test.jsx +13 -11
  88. package/src/__tests__/utils.js +8 -2
  89. package/src/actions-button.jsx +44 -39
  90. package/src/axes.jsx +67 -81
  91. package/src/bars/__tests__/bar.test.jsx +19 -11
  92. package/src/bars/__tests__/histogram.test.jsx +19 -12
  93. package/src/bars/common/__tests__/bars.test.jsx +23 -24
  94. package/src/bars/common/bars.jsx +42 -69
  95. package/src/bars/common/correct-check-icon.jsx +5 -0
  96. package/src/chart-setup.jsx +75 -88
  97. package/src/chart-type.js +45 -22
  98. package/src/chart.jsx +19 -34
  99. package/src/common/__tests__/drag-handle.test.jsx +16 -45
  100. package/src/common/correctness-indicators.jsx +91 -13
  101. package/src/common/drag-handle.jsx +44 -64
  102. package/src/common/drag-icon.jsx +9 -2
  103. package/src/common/styles.js +1 -1
  104. package/src/grid.jsx +10 -14
  105. package/src/key-legend.jsx +62 -60
  106. package/src/line/__tests__/line-cross.test.jsx +16 -13
  107. package/src/line/__tests__/line-dot.test.jsx +16 -13
  108. package/src/line/__tests__/utils.js +8 -2
  109. package/src/line/common/__tests__/drag-handle.test.jsx +20 -45
  110. package/src/line/common/__tests__/line.test.jsx +27 -30
  111. package/src/line/common/drag-handle.jsx +61 -55
  112. package/src/line/common/line.jsx +21 -11
  113. package/src/line/line-cross.js +39 -14
  114. package/src/line/line-dot.js +27 -32
  115. package/src/mark-label.jsx +51 -47
  116. package/src/plot/__tests__/dot.test.jsx +19 -12
  117. package/src/plot/__tests__/line.test.jsx +19 -12
  118. package/src/plot/common/__tests__/plot.test.jsx +23 -24
  119. package/src/plot/common/plot.jsx +29 -24
  120. package/src/plot/dot.js +11 -4
  121. package/src/plot/line.js +16 -8
  122. package/src/tool-menu.jsx +26 -30
  123. package/src/utils.js +13 -9
  124. package/esm/index.css +0 -847
  125. package/esm/index.js +0 -231130
  126. package/esm/index.js.map +0 -1
  127. package/esm/package.json +0 -3
  128. package/src/__tests__/__snapshots__/axes.test.jsx.snap +0 -569
  129. package/src/__tests__/__snapshots__/chart-type.test.jsx.snap +0 -14
  130. package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -595
  131. package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -72
  132. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -73
  133. package/src/bars/__tests__/__snapshots__/bar.test.jsx.snap +0 -43
  134. package/src/bars/__tests__/__snapshots__/histogram.test.jsx.snap +0 -45
  135. package/src/bars/common/__tests__/__snapshots__/bars.test.jsx.snap +0 -110
  136. package/src/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -48
  137. package/src/line/__tests__/__snapshots__/line-cross.test.jsx.snap +0 -45
  138. package/src/line/__tests__/__snapshots__/line-dot.test.jsx.snap +0 -45
  139. package/src/line/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -49
  140. package/src/line/common/__tests__/__snapshots__/line.test.jsx.snap +0 -143
  141. package/src/plot/__tests__/__snapshots__/dot.test.jsx.snap +0 -45
  142. package/src/plot/__tests__/__snapshots__/line.test.jsx.snap +0 -45
  143. package/src/plot/common/__tests__/__snapshots__/plot.test.jsx.snap +0 -97
package/lib/axes.js CHANGED
@@ -1,92 +1,109 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports["default"] = exports.TickComponent = exports.RawChartAxes = void 0;
9
-
10
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
24
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
15
  var _react = _interopRequireDefault(require("react"));
27
-
28
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
29
-
30
- var _styles = require("@material-ui/core/styles");
31
-
32
- var _axis = require("@vx/axis");
33
-
34
- var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
35
-
17
+ var _styles = require("@mui/material/styles");
18
+ var _axis = require("@visx/axis");
19
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
36
20
  var _plot = require("@pie-lib/plot");
37
-
38
21
  var _renderUi = require("@pie-lib/render-ui");
39
-
40
22
  var _configUi = require("@pie-lib/config-ui");
41
-
42
23
  var _mathRendering = require("@pie-lib/math-rendering");
43
-
44
24
  var _correctnessIndicators = require("./common/correctness-indicators");
45
-
46
25
  var _utils = require("./utils");
47
-
48
26
  var _markLabel = _interopRequireDefault(require("./mark-label"));
49
-
50
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
51
-
52
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
53
-
54
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
55
-
56
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
57
-
58
- var TickComponent = /*#__PURE__*/function (_React$Component) {
59
- (0, _inherits2["default"])(TickComponent, _React$Component);
60
-
61
- var _super = _createSuper(TickComponent);
62
-
27
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
28
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
29
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
30
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
31
+ var StyledErrorText = (0, _styles.styled)('text')(function (_ref) {
32
+ var theme = _ref.theme;
33
+ return {
34
+ fontSize: theme.typography.fontSize - 2,
35
+ fill: theme.palette.error.main
36
+ };
37
+ });
38
+ var StyledCheckbox = (0, _styles.styled)(_Checkbox["default"])(function () {
39
+ return {
40
+ color: "".concat(_renderUi.color.tertiary(), " !important")
41
+ };
42
+ });
43
+ var StyledAxesGroup = (0, _styles.styled)('g')(function (_ref2) {
44
+ var _theme$typography$bod;
45
+ var theme = _ref2.theme;
46
+ return {
47
+ '& .vx-axis-line': {
48
+ stroke: _renderUi.color.visualElementsColors.AXIS_LINE_COLOR,
49
+ strokeWidth: 2
50
+ },
51
+ '& .vx-axis-tick': {
52
+ fill: _renderUi.color.visualElementsColors.AXIS_TICK_COLOR,
53
+ '& line': {
54
+ stroke: _renderUi.color.visualElementsColors.AXIS_TICK_COLOR,
55
+ strokeWidth: 2
56
+ },
57
+ fontFamily: (_theme$typography$bod = theme.typography.body1) === null || _theme$typography$bod === void 0 ? void 0 : _theme$typography$bod.fontFamily,
58
+ fontSize: theme.typography.fontSize,
59
+ textAnchor: 'middle'
60
+ }
61
+ };
62
+ });
63
+ var correctnessIconStyles = function correctnessIconStyles(theme) {
64
+ return {
65
+ borderRadius: theme.spacing(2),
66
+ color: _renderUi.color.defaults.WHITE,
67
+ fontSize: '16px',
68
+ width: '16px',
69
+ height: '16px',
70
+ padding: '2px',
71
+ border: "1px solid ".concat(_renderUi.color.defaults.WHITE),
72
+ boxSizing: 'unset' // to override the default border-box in IBX
73
+ };
74
+ };
75
+ var incorrectIconStyles = {
76
+ backgroundColor: _renderUi.color.incorrectWithIcon()
77
+ };
78
+ var correctIconStyles = {
79
+ backgroundColor: _renderUi.color.correct()
80
+ };
81
+ var TickComponent = exports.TickComponent = /*#__PURE__*/function (_React$Component) {
63
82
  function TickComponent(props) {
64
83
  var _this;
65
-
66
84
  (0, _classCallCheck2["default"])(this, TickComponent);
67
- _this = _super.call(this, props);
68
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleAlertDialog", function (open, callback) {
85
+ _this = _callSuper(this, TickComponent, [props]);
86
+ (0, _defineProperty2["default"])(_this, "handleAlertDialog", function (open, callback) {
69
87
  return _this.setState({
70
88
  dialog: {
71
89
  open: open
72
90
  }
73
91
  }, callback);
74
92
  });
75
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeCategory", function (index, newLabel) {
93
+ (0, _defineProperty2["default"])(_this, "changeCategory", function (index, newLabel) {
76
94
  var _this$props = _this.props,
77
- categories = _this$props.categories,
78
- onChangeCategory = _this$props.onChangeCategory;
95
+ categories = _this$props.categories,
96
+ onChangeCategory = _this$props.onChangeCategory;
79
97
  var category = categories[index];
80
98
  onChangeCategory(index, _objectSpread(_objectSpread({}, category), {}, {
81
99
  label: newLabel
82
100
  }));
83
101
  });
84
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeInteractive", function (index, value) {
102
+ (0, _defineProperty2["default"])(_this, "changeInteractive", function (index, value) {
85
103
  var _this$props2 = _this.props,
86
- categories = _this$props2.categories,
87
- onChangeCategory = _this$props2.onChangeCategory;
104
+ categories = _this$props2.categories,
105
+ onChangeCategory = _this$props2.onChangeCategory;
88
106
  var category = categories[index];
89
-
90
107
  if (!value) {
91
108
  _this.setState({
92
109
  dialog: {
@@ -109,12 +126,11 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
109
126
  }));
110
127
  }
111
128
  });
112
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeEditable", function (index, value) {
129
+ (0, _defineProperty2["default"])(_this, "changeEditable", function (index, value) {
113
130
  var _this$props3 = _this.props,
114
- categories = _this$props3.categories,
115
- onChangeCategory = _this$props3.onChangeCategory;
131
+ categories = _this$props3.categories,
132
+ onChangeCategory = _this$props3.onChangeCategory;
116
133
  var category = categories[index];
117
-
118
134
  if (!value) {
119
135
  _this.setState({
120
136
  dialog: {
@@ -137,26 +153,21 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
137
153
  }));
138
154
  }
139
155
  });
140
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "splitText", function (text, maxChar) {
156
+ (0, _defineProperty2["default"])(_this, "splitText", function (text, maxChar) {
141
157
  var chunks = [];
142
-
143
158
  while ((text || '').length > 0) {
144
159
  var indexToSplit = void 0;
145
-
146
160
  if (text.length > maxChar) {
147
161
  indexToSplit = text.lastIndexOf(' ', maxChar);
148
-
149
162
  if (indexToSplit === -1) {
150
163
  indexToSplit = maxChar;
151
164
  }
152
165
  } else {
153
166
  indexToSplit = text.length;
154
167
  }
155
-
156
168
  chunks.push(text.substring(0, indexToSplit));
157
169
  text = text.substring(indexToSplit).trim();
158
170
  }
159
-
160
171
  return chunks;
161
172
  });
162
173
  _this.state = {
@@ -166,8 +177,8 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
166
177
  };
167
178
  return _this;
168
179
  }
169
-
170
- (0, _createClass2["default"])(TickComponent, [{
180
+ (0, _inherits2["default"])(TickComponent, _React$Component);
181
+ return (0, _createClass2["default"])(TickComponent, [{
171
182
  key: "componentDidUpdate",
172
183
  value: function componentDidUpdate(prevProps) {
173
184
  if (this.props.autoFocus && !prevProps.autoFocus) {
@@ -178,47 +189,46 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
178
189
  key: "render",
179
190
  value: function render() {
180
191
  var _this2 = this;
181
-
182
192
  var _this$props4 = this.props,
183
- classes = _this$props4.classes,
184
- categories = _this$props4.categories,
185
- xBand = _this$props4.xBand,
186
- bandWidth = _this$props4.bandWidth,
187
- barWidth = _this$props4.barWidth,
188
- rotate = _this$props4.rotate,
189
- top = _this$props4.top,
190
- graphProps = _this$props4.graphProps,
191
- defineChart = _this$props4.defineChart,
192
- chartingOptions = _this$props4.chartingOptions,
193
- x = _this$props4.x,
194
- y = _this$props4.y,
195
- formattedValue = _this$props4.formattedValue,
196
- changeInteractiveEnabled = _this$props4.changeInteractiveEnabled,
197
- changeEditableEnabled = _this$props4.changeEditableEnabled,
198
- error = _this$props4.error,
199
- autoFocus = _this$props4.autoFocus,
200
- hiddenLabelRef = _this$props4.hiddenLabelRef,
201
- showCorrectness = _this$props4.showCorrectness;
202
-
193
+ categories = _this$props4.categories,
194
+ xBand = _this$props4.xBand,
195
+ bandWidth = _this$props4.bandWidth,
196
+ barWidth = _this$props4.barWidth,
197
+ rotate = _this$props4.rotate,
198
+ top = _this$props4.top,
199
+ graphProps = _this$props4.graphProps,
200
+ defineChart = _this$props4.defineChart,
201
+ chartingOptions = _this$props4.chartingOptions,
202
+ x = _this$props4.x,
203
+ y = _this$props4.y,
204
+ formattedValue = _this$props4.formattedValue,
205
+ changeInteractiveEnabled = _this$props4.changeInteractiveEnabled,
206
+ changeEditableEnabled = _this$props4.changeEditableEnabled,
207
+ error = _this$props4.error,
208
+ autoFocus = _this$props4.autoFocus,
209
+ hiddenLabelRef = _this$props4.hiddenLabelRef,
210
+ showCorrectness = _this$props4.showCorrectness;
203
211
  if (!formattedValue) {
204
212
  return null;
205
213
  }
206
214
 
215
+ // Create classes object for TickCorrectnessIndicator compatibility
216
+ var classes = {
217
+ correctnessIcon: correctnessIconStyles,
218
+ incorrectIcon: incorrectIconStyles,
219
+ correctIcon: correctIconStyles
220
+ };
207
221
  var dialog = this.state.dialog;
208
-
209
- var _ref = chartingOptions || {},
210
- changeEditable = _ref.changeEditable,
211
- changeInteractive = _ref.changeInteractive;
212
-
222
+ var _ref3 = chartingOptions || {},
223
+ changeEditable = _ref3.changeEditable,
224
+ changeInteractive = _ref3.changeInteractive;
213
225
  var index = parseInt(formattedValue.split('-')[0], 10);
214
226
  var category = categories[index];
215
-
216
- var _ref2 = category || {},
217
- editable = _ref2.editable,
218
- interactive = _ref2.interactive,
219
- label = _ref2.label,
220
- correctness = _ref2.correctness;
221
-
227
+ var _ref4 = category || {},
228
+ editable = _ref4.editable,
229
+ interactive = _ref4.interactive,
230
+ label = _ref4.label,
231
+ correctness = _ref4.correctness;
222
232
  var barX = xBand((0, _utils.bandKey)({
223
233
  label: label
224
234
  }, index));
@@ -226,6 +236,8 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
226
236
  var lengthA = a && a.label ? a.label.length : 0;
227
237
  var lengthB = b && b.label ? b.label.length : 0;
228
238
  return lengthA > lengthB ? a : b;
239
+ }, {
240
+ label: ''
229
241
  });
230
242
  var distinctMessages = error ? (0, _toConsumableArray2["default"])(new Set(Object.values(error))).join(' ') : '';
231
243
  return /*#__PURE__*/_react["default"].createElement("g", null, /*#__PURE__*/_react["default"].createElement("foreignObject", {
@@ -265,8 +277,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
265
277
  interactive: interactive,
266
278
  classes: classes
267
279
  })
268
- })), error && index === 0 && /*#__PURE__*/_react["default"].createElement("text", {
269
- className: classes.error,
280
+ })), error && index === 0 && /*#__PURE__*/_react["default"].createElement(StyledErrorText, {
270
281
  y: y + 23,
271
282
  height: 6,
272
283
  textAnchor: "start"
@@ -318,8 +329,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
318
329
  pointerEvents: 'visible',
319
330
  overflow: 'visible'
320
331
  }
321
- }, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
322
- className: classes.customColor,
332
+ }, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
323
333
  style: {
324
334
  position: 'fixed'
325
335
  },
@@ -336,8 +346,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
336
346
  pointerEvents: 'visible',
337
347
  overflow: 'visible'
338
348
  }
339
- }, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
340
- className: classes.customColor,
349
+ }, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
341
350
  style: {
342
351
  position: 'fixed'
343
352
  },
@@ -363,10 +372,7 @@ var TickComponent = /*#__PURE__*/function (_React$Component) {
363
372
  })));
364
373
  }
365
374
  }]);
366
- return TickComponent;
367
375
  }(_react["default"].Component);
368
-
369
- exports.TickComponent = TickComponent;
370
376
  (0, _defineProperty2["default"])(TickComponent, "propTypes", {
371
377
  defineChart: _propTypes["default"].bool,
372
378
  error: _propTypes["default"].any
@@ -384,7 +390,6 @@ TickComponent.propTypes = {
384
390
  formattedValue: _propTypes["default"].string,
385
391
  onChangeCategory: _propTypes["default"].func,
386
392
  onChange: _propTypes["default"].func,
387
- classes: _propTypes["default"].object,
388
393
  error: _propTypes["default"].object,
389
394
  defineChart: _propTypes["default"].bool,
390
395
  chartingOptions: _propTypes["default"].object,
@@ -392,47 +397,41 @@ TickComponent.propTypes = {
392
397
  changeEditableEnabled: _propTypes["default"].bool,
393
398
  autoFocus: _propTypes["default"].bool,
394
399
  onAutoFocusUsed: _propTypes["default"].func,
395
- showCorrectness: _propTypes["default"].bool
400
+ showCorrectness: _propTypes["default"].bool,
401
+ hiddenLabelRef: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].shape({
402
+ current: _propTypes["default"].instanceOf(Element)
403
+ })])
396
404
  };
397
-
398
- var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
399
- (0, _inherits2["default"])(RawChartAxes, _React$Component2);
400
-
401
- var _super2 = _createSuper(RawChartAxes);
402
-
405
+ var RawChartAxes = exports.RawChartAxes = /*#__PURE__*/function (_React$Component2) {
403
406
  function RawChartAxes() {
404
407
  var _this3;
405
-
406
408
  (0, _classCallCheck2["default"])(this, RawChartAxes);
407
-
408
409
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
409
410
  args[_key] = arguments[_key];
410
411
  }
411
-
412
- _this3 = _super2.call.apply(_super2, [this].concat(args));
413
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "state", {
412
+ _this3 = _callSuper(this, RawChartAxes, [].concat(args));
413
+ (0, _defineProperty2["default"])(_this3, "state", {
414
414
  height: 0,
415
415
  width: 0
416
416
  });
417
417
  return _this3;
418
418
  }
419
-
420
- (0, _createClass2["default"])(RawChartAxes, [{
419
+ (0, _inherits2["default"])(RawChartAxes, _React$Component2);
420
+ return (0, _createClass2["default"])(RawChartAxes, [{
421
421
  key: "componentDidMount",
422
422
  value: function componentDidMount() {
423
423
  if (this.hiddenLabelRef) {
424
424
  var boundingClientRect = this.hiddenLabelRef.getBoundingClientRect();
425
- var hiddenEl = this.hiddenLabelRef.current; // same logic used in dropdown.jsx for hidden labels width calculation
425
+ var hiddenEl = this.hiddenLabelRef;
426
426
 
427
+ // same logic used in dropdown.jsx for hidden labels width calculation
427
428
  if (hiddenEl) {
428
429
  var containsLatex = hiddenEl.querySelector('[data-latex], [data-raw]');
429
430
  var hasMathJax = hiddenEl.querySelector('mjx-container');
430
431
  var mathHandled = hiddenEl.querySelector('[data-math-handled="true"]');
431
-
432
432
  if (containsLatex && (!mathHandled || !hasMathJax)) {
433
433
  (0, _mathRendering.renderMath)(this.hiddenLabelRef);
434
434
  }
435
-
436
435
  this.setState({
437
436
  height: Math.floor(boundingClientRect.height),
438
437
  width: Math.floor(boundingClientRect.width)
@@ -442,10 +441,9 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
442
441
  }
443
442
  }, {
444
443
  key: "componentDidUpdate",
445
- value: function componentDidUpdate(prevProps, prevState, snapshot) {
444
+ value: function componentDidUpdate() {
446
445
  if (this.hiddenLabelRef) {
447
446
  var width = Math.floor(this.hiddenLabelRef.getBoundingClientRect().width);
448
-
449
447
  if (width !== this.state.width) {
450
448
  this.setState({
451
449
  width: width
@@ -457,69 +455,59 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
457
455
  key: "render",
458
456
  value: function render() {
459
457
  var _this4 = this;
460
-
461
458
  var _this$props5 = this.props,
462
- classes = _this$props5.classes,
463
- graphProps = _this$props5.graphProps,
464
- xBand = _this$props5.xBand,
465
- leftAxis = _this$props5.leftAxis,
466
- onChange = _this$props5.onChange,
467
- onChangeCategory = _this$props5.onChangeCategory,
468
- _this$props5$categori = _this$props5.categories,
469
- categories = _this$props5$categori === void 0 ? [] : _this$props5$categori,
470
- top = _this$props5.top,
471
- defineChart = _this$props5.defineChart,
472
- chartingOptions = _this$props5.chartingOptions,
473
- changeInteractiveEnabled = _this$props5.changeInteractiveEnabled,
474
- changeEditableEnabled = _this$props5.changeEditableEnabled,
475
- theme = _this$props5.theme,
476
- autoFocus = _this$props5.autoFocus,
477
- onAutoFocusUsed = _this$props5.onAutoFocusUsed,
478
- error = _this$props5.error,
479
- showCorrectness = _this$props5.showCorrectness;
480
- var axis = classes.axis,
481
- axisLine = classes.axisLine,
482
- tick = classes.tick;
483
-
484
- var _ref3 = graphProps || {},
485
- _ref3$scale = _ref3.scale,
486
- scale = _ref3$scale === void 0 ? {} : _ref3$scale,
487
- _ref3$range = _ref3.range,
488
- range = _ref3$range === void 0 ? {} : _ref3$range,
489
- _ref3$domain = _ref3.domain,
490
- domain = _ref3$domain === void 0 ? {} : _ref3$domain,
491
- _ref3$size = _ref3.size,
492
- size = _ref3$size === void 0 ? {} : _ref3$size;
493
-
459
+ graphProps = _this$props5.graphProps,
460
+ xBand = _this$props5.xBand,
461
+ leftAxis = _this$props5.leftAxis,
462
+ onChange = _this$props5.onChange,
463
+ onChangeCategory = _this$props5.onChangeCategory,
464
+ _this$props5$categori = _this$props5.categories,
465
+ categories = _this$props5$categori === void 0 ? [] : _this$props5$categori,
466
+ top = _this$props5.top,
467
+ defineChart = _this$props5.defineChart,
468
+ chartingOptions = _this$props5.chartingOptions,
469
+ changeInteractiveEnabled = _this$props5.changeInteractiveEnabled,
470
+ changeEditableEnabled = _this$props5.changeEditableEnabled,
471
+ theme = _this$props5.theme,
472
+ autoFocus = _this$props5.autoFocus,
473
+ onAutoFocusUsed = _this$props5.onAutoFocusUsed,
474
+ error = _this$props5.error,
475
+ showCorrectness = _this$props5.showCorrectness;
476
+ var _ref5 = graphProps || {},
477
+ _ref5$scale = _ref5.scale,
478
+ scale = _ref5$scale === void 0 ? {} : _ref5$scale,
479
+ _ref5$range = _ref5.range,
480
+ range = _ref5$range === void 0 ? {} : _ref5$range,
481
+ _ref5$domain = _ref5.domain,
482
+ domain = _ref5$domain === void 0 ? {} : _ref5$domain,
483
+ _ref5$size = _ref5.size,
484
+ size = _ref5$size === void 0 ? {} : _ref5$size;
494
485
  var _this$state = this.state,
495
- height = _this$state.height,
496
- width = _this$state.width;
486
+ height = _this$state.height,
487
+ width = _this$state.width;
497
488
  var bottomScale = xBand && typeof xBand.rangeRound === 'function' && xBand.rangeRound([0, size.width]);
498
- var bandWidth = xBand && typeof xBand.bandwidth === 'function' && xBand.bandwidth(); // for chartType "line", bandWidth will be 0, so we have to calculate it
499
-
489
+ var bandWidth = xBand && typeof xBand.bandwidth === 'function' && xBand.bandwidth();
490
+ // for chartType "line", bandWidth will be 0, so we have to calculate it
500
491
  var barWidth = bandWidth || scale.x && scale.x(domain.max) / categories.length;
501
492
  var rowTickValues = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, range), {}, {
502
493
  step: range.labelStep
503
494
  }));
504
- var fontSize = theme && theme.typography ? theme.typography.fontSize : 14; // this mostly applies for labels that are not editable
505
-
506
- var rotateBecauseOfHeight = (0, _utils.getRotateAngle)(fontSize, height); // this applies for labels that are editable
507
-
495
+ var fontSize = theme && theme.typography ? theme.typography.fontSize : 14;
496
+ // this mostly applies for labels that are not editable
497
+ var rotateBecauseOfHeight = (0, _utils.getRotateAngle)(fontSize, height);
498
+ // this applies for labels that are editable
508
499
  var rotateBecauseOfWidth = width > barWidth ? 25 : 0;
509
-
510
500
  var getTickLabelProps = function getTickLabelProps(value) {
511
501
  return {
512
502
  dy: 4,
513
503
  dx: -10 - (value.toLocaleString().length || 1) * 5
514
504
  };
515
505
  };
516
-
517
506
  var getTickComponent = function getTickComponent(props) {
518
507
  var properties = {
519
508
  hiddenLabelRef: function hiddenLabelRef(ref) {
520
509
  _this4.hiddenLabelRef = ref;
521
510
  },
522
- classes: classes,
523
511
  categories: categories,
524
512
  xBand: xBand,
525
513
  bandWidth: bandWidth,
@@ -543,21 +531,15 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
543
531
  };
544
532
  return /*#__PURE__*/_react["default"].createElement(TickComponent, properties);
545
533
  };
546
-
547
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, leftAxis && /*#__PURE__*/_react["default"].createElement(_axis.AxisLeft, {
534
+ return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, leftAxis && /*#__PURE__*/_react["default"].createElement(_axis.AxisLeft, {
548
535
  scale: scale.y,
549
- className: axis,
550
- axisLineClassName: axisLine,
551
536
  tickLength: 10,
552
- tickClassName: tick,
553
537
  tickFormat: function tickFormat(value) {
554
538
  return value;
555
539
  },
556
540
  tickValues: rowTickValues,
557
541
  tickLabelProps: getTickLabelProps
558
542
  }), /*#__PURE__*/_react["default"].createElement(_axis.AxisBottom, {
559
- axisLineClassName: axisLine,
560
- tickClassName: tick,
561
543
  scale: bottomScale,
562
544
  labelProps: {
563
545
  y: 60 + top
@@ -577,13 +559,9 @@ var RawChartAxes = /*#__PURE__*/function (_React$Component2) {
577
559
  }));
578
560
  }
579
561
  }]);
580
- return RawChartAxes;
581
562
  }(_react["default"].Component);
582
-
583
- exports.RawChartAxes = RawChartAxes;
584
563
  (0, _defineProperty2["default"])(RawChartAxes, "propTypes", {
585
564
  bottomScale: _propTypes["default"].func,
586
- classes: _propTypes["default"].object.isRequired,
587
565
  categories: _propTypes["default"].array,
588
566
  defineChart: _propTypes["default"].bool,
589
567
  error: _propTypes["default"].any,
@@ -599,64 +577,10 @@ exports.RawChartAxes = RawChartAxes;
599
577
  changeEditableEnabled: _propTypes["default"].bool,
600
578
  autoFocus: _propTypes["default"].bool,
601
579
  onAutoFocusUsed: _propTypes["default"].func,
602
- showCorrectness: _propTypes["default"].bool
580
+ showCorrectness: _propTypes["default"].bool,
581
+ hiddenLabelRef: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].shape({
582
+ current: _propTypes["default"].instanceOf(Element)
583
+ })])
603
584
  });
604
- var ChartAxes = (0, _styles.withStyles)(function (theme) {
605
- return {
606
- axis: {
607
- stroke: _renderUi.color.primaryDark(),
608
- strokeWidth: 2
609
- },
610
- axisLine: {
611
- stroke: _renderUi.color.visualElementsColors.AXIS_LINE_COLOR,
612
- strokeWidth: 2
613
- },
614
- tick: {
615
- '& > line': {
616
- stroke: _renderUi.color.primaryDark(),
617
- strokeWidth: 2
618
- },
619
- fontFamily: theme.typography.body1.fontFamily,
620
- fontSize: theme.typography.fontSize,
621
- textAnchor: 'middle'
622
- },
623
- dottedLine: {
624
- stroke: _renderUi.color.primaryLight(),
625
- opacity: 0.2
626
- },
627
- error: {
628
- fontSize: theme.typography.fontSize - 2,
629
- fill: theme.palette.error.main
630
- },
631
- customColor: {
632
- color: "".concat(_renderUi.color.tertiary(), " !important")
633
- },
634
- correctnessIcon: {
635
- borderRadius: theme.spacing.unit * 2,
636
- color: _renderUi.color.defaults.WHITE,
637
- fontSize: '16px',
638
- width: '16px',
639
- height: '16px',
640
- padding: '2px',
641
- border: "1px solid ".concat(_renderUi.color.defaults.WHITE),
642
- boxSizing: 'unset' // to override the default border-box in IBX
643
-
644
- },
645
- incorrectIcon: {
646
- backgroundColor: _renderUi.color.incorrectWithIcon()
647
- },
648
- correctIcon: {
649
- backgroundColor: _renderUi.color.correct()
650
- },
651
- tickContainer: {
652
- display: 'flex',
653
- flexDirection: 'column',
654
- alignItems: 'center'
655
- }
656
- };
657
- }, {
658
- withTheme: true
659
- })(RawChartAxes);
660
- var _default = ChartAxes;
661
- exports["default"] = _default;
662
- //# sourceMappingURL=axes.js.map
585
+ var _default = exports["default"] = RawChartAxes;
586
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfc3R5bGVzIiwiX2F4aXMiLCJfQ2hlY2tib3giLCJfcGxvdCIsIl9yZW5kZXJVaSIsIl9jb25maWdVaSIsIl9tYXRoUmVuZGVyaW5nIiwiX2NvcnJlY3RuZXNzSW5kaWNhdG9ycyIsIl91dGlscyIsIl9tYXJrTGFiZWwiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIlN0eWxlZEVycm9yVGV4dCIsInN0eWxlZCIsIl9yZWYiLCJ0aGVtZSIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsImZpbGwiLCJwYWxldHRlIiwiZXJyb3IiLCJtYWluIiwiU3R5bGVkQ2hlY2tib3giLCJDaGVja2JveCIsImNvbG9yIiwiY29uY2F0IiwidGVydGlhcnkiLCJTdHlsZWRBeGVzR3JvdXAiLCJfcmVmMiIsIl90aGVtZSR0eXBvZ3JhcGh5JGJvZCIsInN0cm9rZSIsInZpc3VhbEVsZW1lbnRzQ29sb3JzIiwiQVhJU19MSU5FX0NPTE9SIiwic3Ryb2tlV2lkdGgiLCJBWElTX1RJQ0tfQ09MT1IiLCJmb250RmFtaWx5IiwiYm9keTEiLCJ0ZXh0QW5jaG9yIiwiY29ycmVjdG5lc3NJY29uU3R5bGVzIiwiYm9yZGVyUmFkaXVzIiwic3BhY2luZyIsImRlZmF1bHRzIiwiV0hJVEUiLCJ3aWR0aCIsImhlaWdodCIsInBhZGRpbmciLCJib3JkZXIiLCJib3hTaXppbmciLCJpbmNvcnJlY3RJY29uU3R5bGVzIiwiYmFja2dyb3VuZENvbG9yIiwiaW5jb3JyZWN0V2l0aEljb24iLCJjb3JyZWN0SWNvblN0eWxlcyIsImNvcnJlY3QiLCJUaWNrQ29tcG9uZW50IiwiZXhwb3J0cyIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIm9wZW4iLCJjYWxsYmFjayIsInNldFN0YXRlIiwiZGlhbG9nIiwiaW5kZXgiLCJuZXdMYWJlbCIsIl90aGlzJHByb3BzIiwiY2F0ZWdvcmllcyIsIm9uQ2hhbmdlQ2F0ZWdvcnkiLCJjYXRlZ29yeSIsImxhYmVsIiwidmFsdWUiLCJfdGhpcyRwcm9wczIiLCJ0aXRsZSIsInRleHQiLCJvbkNvbmZpcm0iLCJoYW5kbGVBbGVydERpYWxvZyIsImludGVyYWN0aXZlIiwib25DbG9zZSIsIl90aGlzJHByb3BzMyIsImVkaXRhYmxlIiwibWF4Q2hhciIsImNodW5rcyIsImluZGV4VG9TcGxpdCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwidHJpbSIsInN0YXRlIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJhdXRvRm9jdXMiLCJvbkF1dG9Gb2N1c1VzZWQiLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wczQiLCJ4QmFuZCIsImJhbmRXaWR0aCIsImJhcldpZHRoIiwicm90YXRlIiwidG9wIiwiZ3JhcGhQcm9wcyIsImRlZmluZUNoYXJ0IiwiY2hhcnRpbmdPcHRpb25zIiwieCIsInkiLCJmb3JtYXR0ZWRWYWx1ZSIsImNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCIsImNoYW5nZUVkaXRhYmxlRW5hYmxlZCIsImhpZGRlbkxhYmVsUmVmIiwic2hvd0NvcnJlY3RuZXNzIiwiY2xhc3NlcyIsImNvcnJlY3RuZXNzSWNvbiIsImluY29ycmVjdEljb24iLCJjb3JyZWN0SWNvbiIsIl9yZWYzIiwiY2hhbmdlRWRpdGFibGUiLCJjaGFuZ2VJbnRlcmFjdGl2ZSIsInBhcnNlSW50Iiwic3BsaXQiLCJfcmVmNCIsImNvcnJlY3RuZXNzIiwiYmFyWCIsImJhbmRLZXkiLCJsb25nZXN0Q2F0ZWdvcnkiLCJyZWR1Y2UiLCJhIiwiYiIsImxlbmd0aEEiLCJsZW5ndGhCIiwiZGlzdGluY3RNZXNzYWdlcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJTZXQiLCJ2YWx1ZXMiLCJqb2luIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwicG9pbnRlckV2ZW50cyIsIm92ZXJmbG93IiwiaXNIaWRkZW5MYWJlbCIsImlucHV0UmVmIiwiZGlzYWJsZWQiLCJtYXJrIiwiaW5wdXQiLCJvbkNoYW5nZSIsImNoYW5nZUNhdGVnb3J5IiwibGltaXRDaGFyYWN0ZXJzIiwiY29ycmVjdG5lc3NJbmRpY2F0b3IiLCJUaWNrQ29ycmVjdG5lc3NJbmRpY2F0b3IiLCJwb3NpdGlvbiIsIndvcmRCcmVhayIsIm1heFdpZHRoIiwiZGlzcGxheSIsInNwbGl0VGV4dCIsImF1dGhvcmluZ0xhYmVsIiwibWFwIiwid29yZCIsImR5IiwiY2hlY2tlZCIsInRhcmdldCIsIkFsZXJ0RGlhbG9nIiwiUmVhY3QiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJib29sIiwiYW55IiwicHJvcFR5cGVzIiwiYXJyYXkiLCJmdW5jIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIiwib25lT2ZUeXBlIiwic2hhcGUiLCJjdXJyZW50IiwiaW5zdGFuY2VPZiIsIkVsZW1lbnQiLCJSYXdDaGFydEF4ZXMiLCJfUmVhY3QkQ29tcG9uZW50MiIsIl90aGlzMyIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29tcG9uZW50RGlkTW91bnQiLCJib3VuZGluZ0NsaWVudFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJoaWRkZW5FbCIsImNvbnRhaW5zTGF0ZXgiLCJxdWVyeVNlbGVjdG9yIiwiaGFzTWF0aEpheCIsIm1hdGhIYW5kbGVkIiwicmVuZGVyTWF0aCIsIk1hdGgiLCJmbG9vciIsIl90aGlzNCIsIl90aGlzJHByb3BzNSIsImxlZnRBeGlzIiwiX3RoaXMkcHJvcHM1JGNhdGVnb3JpIiwiX3JlZjUiLCJfcmVmNSRzY2FsZSIsInNjYWxlIiwiX3JlZjUkcmFuZ2UiLCJyYW5nZSIsIl9yZWY1JGRvbWFpbiIsImRvbWFpbiIsIl9yZWY1JHNpemUiLCJzaXplIiwiX3RoaXMkc3RhdGUiLCJib3R0b21TY2FsZSIsInJhbmdlUm91bmQiLCJiYW5kd2lkdGgiLCJtYXgiLCJyb3dUaWNrVmFsdWVzIiwiZ2V0VGlja1ZhbHVlcyIsInN0ZXAiLCJsYWJlbFN0ZXAiLCJyb3RhdGVCZWNhdXNlT2ZIZWlnaHQiLCJnZXRSb3RhdGVBbmdsZSIsInJvdGF0ZUJlY2F1c2VPZldpZHRoIiwiZ2V0VGlja0xhYmVsUHJvcHMiLCJkeCIsInRvTG9jYWxlU3RyaW5nIiwiZ2V0VGlja0NvbXBvbmVudCIsInByb3BlcnRpZXMiLCJyZWYiLCJBeGlzTGVmdCIsInRpY2tMZW5ndGgiLCJ0aWNrRm9ybWF0IiwidGlja1ZhbHVlcyIsInRpY2tMYWJlbFByb3BzIiwiQXhpc0JvdHRvbSIsImxhYmVsUHJvcHMiLCJtaW4iLCJ0ZXh0TGFiZWxQcm9wcyIsImNvdW50IiwidGlja0NvbXBvbmVudCIsInR5cGVzIiwiR3JhcGhQcm9wc1R5cGUiLCJpc1JlcXVpcmVkIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvYXhlcy5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgeyBBeGlzTGVmdCwgQXhpc0JvdHRvbSB9IGZyb20gJ0B2aXN4L2F4aXMnO1xuaW1wb3J0IENoZWNrYm94IGZyb20gJ0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gnO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IHsgY29sb3IgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IHsgQWxlcnREaWFsb2cgfSBmcm9tICdAcGllLWxpYi9jb25maWctdWknO1xuaW1wb3J0IHsgcmVuZGVyTWF0aCB9IGZyb20gJ0BwaWUtbGliL21hdGgtcmVuZGVyaW5nJztcblxuaW1wb3J0IHsgVGlja0NvcnJlY3RuZXNzSW5kaWNhdG9yIH0gZnJvbSAnLi9jb21tb24vY29ycmVjdG5lc3MtaW5kaWNhdG9ycyc7XG5pbXBvcnQgeyBiYW5kS2V5LCBnZXRUaWNrVmFsdWVzLCBnZXRSb3RhdGVBbmdsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IE1hcmtMYWJlbCBmcm9tICcuL21hcmstbGFiZWwnO1xuXG5jb25zdCBTdHlsZWRFcnJvclRleHQgPSBzdHlsZWQoJ3RleHQnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSAtIDIsXG4gIGZpbGw6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbn0pKTtcblxuY29uc3QgU3R5bGVkQ2hlY2tib3ggPSBzdHlsZWQoQ2hlY2tib3gpKCgpID0+ICh7XG4gIGNvbG9yOiBgJHtjb2xvci50ZXJ0aWFyeSgpfSAhaW1wb3J0YW50YCxcbn0pKTtcblxuY29uc3QgU3R5bGVkQXhlc0dyb3VwID0gc3R5bGVkKCdnJykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgJyYgLnZ4LWF4aXMtbGluZSc6IHtcbiAgICBzdHJva2U6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLkFYSVNfTElORV9DT0xPUixcbiAgICBzdHJva2VXaWR0aDogMixcbiAgfSxcbiAgJyYgLnZ4LWF4aXMtdGljayc6IHtcbiAgICBmaWxsOiBjb2xvci52aXN1YWxFbGVtZW50c0NvbG9ycy5BWElTX1RJQ0tfQ09MT1IsXG4gICAgJyYgbGluZSc6IHtcbiAgICAgIHN0cm9rZTogY29sb3IudmlzdWFsRWxlbWVudHNDb2xvcnMuQVhJU19USUNLX0NPTE9SLFxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgfSxcbiAgICBmb250RmFtaWx5OiB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxPy5mb250RmFtaWx5LFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplLFxuICAgIHRleHRBbmNob3I6ICdtaWRkbGUnLFxuICB9LFxufSkpO1xuXG5jb25zdCBjb3JyZWN0bmVzc0ljb25TdHlsZXMgPSAodGhlbWUpID0+ICh7XG4gIGJvcmRlclJhZGl1czogdGhlbWUuc3BhY2luZygyKSxcbiAgY29sb3I6IGNvbG9yLmRlZmF1bHRzLldISVRFLFxuICBmb250U2l6ZTogJzE2cHgnLFxuICB3aWR0aDogJzE2cHgnLFxuICBoZWlnaHQ6ICcxNnB4JyxcbiAgcGFkZGluZzogJzJweCcsXG4gIGJvcmRlcjogYDFweCBzb2xpZCAke2NvbG9yLmRlZmF1bHRzLldISVRFfWAsXG4gIGJveFNpemluZzogJ3Vuc2V0JywgLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYm9yZGVyLWJveCBpbiBJQlhcbn0pO1xuXG5jb25zdCBpbmNvcnJlY3RJY29uU3R5bGVzID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmluY29ycmVjdFdpdGhJY29uKCksXG59O1xuXG5jb25zdCBjb3JyZWN0SWNvblN0eWxlcyA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5jb3JyZWN0KCksXG59O1xuXG5leHBvcnQgY2xhc3MgVGlja0NvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGVycm9yOiBQcm9wVHlwZXMuYW55LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkaWFsb2c6IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzICYmICFwcmV2UHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQXV0b0ZvY3VzVXNlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFsZXJ0RGlhbG9nID0gKG9wZW4sIGNhbGxiYWNrKSA9PlxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGRpYWxvZzogeyBvcGVuIH0sXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2ssXG4gICAgKTtcblxuICBjaGFuZ2VDYXRlZ29yeSA9IChpbmRleCwgbmV3TGFiZWwpID0+IHtcbiAgICBjb25zdCB7IGNhdGVnb3JpZXMsIG9uQ2hhbmdlQ2F0ZWdvcnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2luZGV4XTtcblxuICAgIG9uQ2hhbmdlQ2F0ZWdvcnkoaW5kZXgsIHsgLi4uY2F0ZWdvcnksIGxhYmVsOiBuZXdMYWJlbCB9KTtcbiAgfTtcblxuICBjaGFuZ2VJbnRlcmFjdGl2ZSA9IChpbmRleCwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGNhdGVnb3JpZXMsIG9uQ2hhbmdlQ2F0ZWdvcnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2luZGV4XTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkaWFsb2c6IHtcbiAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgIHRpdGxlOiAnV2FybmluZycsXG4gICAgICAgICAgdGV4dDogJ1RoaXMgd2lsbCByZW1vdmUgdGhlIGNvcnJlY3QgYW5zd2VyIHZhbHVlIHRoYXQgaGFzIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBjYXRlZ29yeS4nLFxuICAgICAgICAgIG9uQ29uZmlybTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWxlcnREaWFsb2coZmFsc2UsIG9uQ2hhbmdlQ2F0ZWdvcnkoaW5kZXgsIHsgLi4uY2F0ZWdvcnksIGludGVyYWN0aXZlOiAhY2F0ZWdvcnkuaW50ZXJhY3RpdmUgfSkpLFxuICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHRoaXMuaGFuZGxlQWxlcnREaWFsb2coZmFsc2UpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlQ2F0ZWdvcnkoaW5kZXgsIHsgLi4uY2F0ZWdvcnksIGludGVyYWN0aXZlOiAhY2F0ZWdvcnkuaW50ZXJhY3RpdmUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNoYW5nZUVkaXRhYmxlID0gKGluZGV4LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgY2F0ZWdvcmllcywgb25DaGFuZ2VDYXRlZ29yeSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjYXRlZ29yeSA9IGNhdGVnb3JpZXNbaW5kZXhdO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRpYWxvZzoge1xuICAgICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgICAgdGl0bGU6ICdXYXJuaW5nJyxcbiAgICAgICAgICB0ZXh0OiAnVGhpcyB3aWxsIHJlbW92ZSB0aGUgY29ycmVjdCBhbnN3ZXIgY2F0ZWdvcnkgbmFtZSB0aGF0IGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoaXMgY2F0ZWdvcnkuJyxcbiAgICAgICAgICBvbkNvbmZpcm06ICgpID0+XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFsZXJ0RGlhbG9nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgb25DaGFuZ2VDYXRlZ29yeShpbmRleCwgeyAuLi5jYXRlZ29yeSwgZWRpdGFibGU6ICFjYXRlZ29yeS5lZGl0YWJsZSB8fCBmYWxzZSB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgb25DbG9zZTogKCkgPT4gdGhpcy5oYW5kbGVBbGVydERpYWxvZyhmYWxzZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2VDYXRlZ29yeShpbmRleCwgeyAuLi5jYXRlZ29yeSwgZWRpdGFibGU6ICFjYXRlZ29yeS5lZGl0YWJsZSB8fCBmYWxzZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3BsaXRUZXh0ID0gKHRleHQsIG1heENoYXIpID0+IHtcbiAgICBsZXQgY2h1bmtzID0gW107XG4gICAgd2hpbGUgKCh0ZXh0IHx8ICcnKS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaW5kZXhUb1NwbGl0O1xuICAgICAgaWYgKHRleHQubGVuZ3RoID4gbWF4Q2hhcikge1xuICAgICAgICBpbmRleFRvU3BsaXQgPSB0ZXh0Lmxhc3RJbmRleE9mKCcgJywgbWF4Q2hhcik7XG4gICAgICAgIGlmIChpbmRleFRvU3BsaXQgPT09IC0xKSB7XG4gICAgICAgICAgaW5kZXhUb1NwbGl0ID0gbWF4Q2hhcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhUb1NwbGl0ID0gdGV4dC5sZW5ndGg7XG4gICAgICB9XG4gICAgICBjaHVua3MucHVzaCh0ZXh0LnN1YnN0cmluZygwLCBpbmRleFRvU3BsaXQpKTtcbiAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhpbmRleFRvU3BsaXQpLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIGNodW5rcztcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2F0ZWdvcmllcyxcbiAgICAgIHhCYW5kLFxuICAgICAgYmFuZFdpZHRoLFxuICAgICAgYmFyV2lkdGgsXG4gICAgICByb3RhdGUsXG4gICAgICB0b3AsXG4gICAgICBncmFwaFByb3BzLFxuICAgICAgZGVmaW5lQ2hhcnQsXG4gICAgICBjaGFydGluZ09wdGlvbnMsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGZvcm1hdHRlZFZhbHVlLFxuICAgICAgY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkLFxuICAgICAgY2hhbmdlRWRpdGFibGVFbmFibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBoaWRkZW5MYWJlbFJlZixcbiAgICAgIHNob3dDb3JyZWN0bmVzcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghZm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjbGFzc2VzIG9iamVjdCBmb3IgVGlja0NvcnJlY3RuZXNzSW5kaWNhdG9yIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgY29ycmVjdG5lc3NJY29uOiBjb3JyZWN0bmVzc0ljb25TdHlsZXMsXG4gICAgICBpbmNvcnJlY3RJY29uOiBpbmNvcnJlY3RJY29uU3R5bGVzLFxuICAgICAgY29ycmVjdEljb246IGNvcnJlY3RJY29uU3R5bGVzLFxuICAgIH07XG5cbiAgICBjb25zdCB7IGRpYWxvZyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGNoYW5nZUVkaXRhYmxlLCBjaGFuZ2VJbnRlcmFjdGl2ZSB9ID0gY2hhcnRpbmdPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoZm9ybWF0dGVkVmFsdWUuc3BsaXQoJy0nKVswXSwgMTApO1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tpbmRleF07XG4gICAgY29uc3QgeyBlZGl0YWJsZSwgaW50ZXJhY3RpdmUsIGxhYmVsLCBjb3JyZWN0bmVzcyB9ID0gY2F0ZWdvcnkgfHwge307XG4gICAgY29uc3QgYmFyWCA9IHhCYW5kKGJhbmRLZXkoeyBsYWJlbCB9LCBpbmRleCkpO1xuICAgIGNvbnN0IGxvbmdlc3RDYXRlZ29yeSA9IChjYXRlZ29yaWVzIHx8IFtdKS5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGxlbmd0aEEgPSBhICYmIGEubGFiZWwgPyBhLmxhYmVsLmxlbmd0aCA6IDA7XG4gICAgICBjb25zdCBsZW5ndGhCID0gYiAmJiBiLmxhYmVsID8gYi5sYWJlbC5sZW5ndGggOiAwO1xuXG4gICAgICByZXR1cm4gbGVuZ3RoQSA+IGxlbmd0aEIgPyBhIDogYjtcbiAgICB9LCB7IGxhYmVsOiAnJyB9KTtcbiAgICBjb25zdCBkaXN0aW5jdE1lc3NhZ2VzID0gZXJyb3IgPyBbLi4ubmV3IFNldChPYmplY3QudmFsdWVzKGVycm9yKSldLmpvaW4oJyAnKSA6ICcnO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxnPlxuICAgICAgICA8Zm9yZWlnbk9iamVjdFxuICAgICAgICAgIHg9e2JhbmRXaWR0aCA/IGJhclggOiB4IC0gYmFyV2lkdGggLyAyfVxuICAgICAgICAgIHk9ezE4fVxuICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICBoZWlnaHQ9ezR9XG4gICAgICAgICAgc3R5bGU9e3sgcG9pbnRlckV2ZW50czogJ25vbmUnLCBvdmVyZmxvdzogJ3Zpc2libGUnIH19XG4gICAgICAgID5cbiAgICAgICAgICB7aW5kZXggPT09IDAgJiYgKFxuICAgICAgICAgICAgPE1hcmtMYWJlbFxuICAgICAgICAgICAgICBpc0hpZGRlbkxhYmVsPXt0cnVlfVxuICAgICAgICAgICAgICBpbnB1dFJlZj17aGlkZGVuTGFiZWxSZWZ9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxuICAgICAgICAgICAgICBtYXJrPXtsb25nZXN0Q2F0ZWdvcnl9XG4gICAgICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgICAgIGJhcldpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgIGF1dG9Gb2N1cz17ZGVmaW5lQ2hhcnQgJiYgYXV0b0ZvY3VzfVxuICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dCA9IHIpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFkZWZpbmVDaGFydCAmJiAhZWRpdGFibGV9XG4gICAgICAgICAgICBtYXJrPXtjYXRlZ29yeX1cbiAgICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgICBvbkNoYW5nZT17KG5ld0xhYmVsKSA9PiB0aGlzLmNoYW5nZUNhdGVnb3J5KGluZGV4LCBuZXdMYWJlbCl9XG4gICAgICAgICAgICBiYXJXaWR0aD17YmFyV2lkdGh9XG4gICAgICAgICAgICByb3RhdGU9e3JvdGF0ZX1cbiAgICAgICAgICAgIGNvcnJlY3RuZXNzPXtjb3JyZWN0bmVzc31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciAmJiBlcnJvcltpbmRleF19XG4gICAgICAgICAgICBsaW1pdENoYXJhY3RlcnNcbiAgICAgICAgICAgIGNvcnJlY3RuZXNzSW5kaWNhdG9yPXtcbiAgICAgICAgICAgICAgc2hvd0NvcnJlY3RuZXNzICYmXG4gICAgICAgICAgICAgIGNvcnJlY3RuZXNzICYmIChcbiAgICAgICAgICAgICAgICA8VGlja0NvcnJlY3RuZXNzSW5kaWNhdG9yIGNvcnJlY3RuZXNzPXtjb3JyZWN0bmVzc30gaW50ZXJhY3RpdmU9e2ludGVyYWN0aXZlfSBjbGFzc2VzPXtjbGFzc2VzfSAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuXG4gICAgICAgIHtlcnJvciAmJiBpbmRleCA9PT0gMCAmJiAoXG4gICAgICAgICAgPFN0eWxlZEVycm9yVGV4dCB5PXt5ICsgMjN9IGhlaWdodD17Nn0gdGV4dEFuY2hvcj1cInN0YXJ0XCI+XG4gICAgICAgICAgICB7ZGlzdGluY3RNZXNzYWdlc31cbiAgICAgICAgICA8L1N0eWxlZEVycm9yVGV4dD5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZGVmaW5lQ2hhcnQgJiYgaW5kZXggPT09IDAgJiYgKFxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHg9ey01NX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8dGV4dFxuICAgICAgICAgICAgICAgIHk9e3kgKyA5MCArIHRvcH1cbiAgICAgICAgICAgICAgICB3aWR0aD17YmFyV2lkdGh9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXs0fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJhcldpZHRoLFxuICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0aGlzLnNwbGl0VGV4dChjaGFuZ2VJbnRlcmFjdGl2ZT8uYXV0aG9yaW5nTGFiZWwsIDIwKS5tYXAoKHdvcmQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8dHNwYW4ga2V5PXtpbmRleH0geD1cIjBcIiBkeT17YCR7aW5kZXggPiAwID8gJzEuMmVtJyA6ICcuNmVtJ31gfT5cbiAgICAgICAgICAgICAgICAgICAge3dvcmR9XG4gICAgICAgICAgICAgICAgICA8L3RzcGFuPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7Y2hhbmdlRWRpdGFibGVFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgPHRleHRcbiAgICAgICAgICAgICAgICB5PXt5ICsgMTQ1ICsgdG9wfVxuICAgICAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgICAgICBoZWlnaHQ9ezR9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmFyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RoaXMuc3BsaXRUZXh0KGNoYW5nZUVkaXRhYmxlPy5hdXRob3JpbmdMYWJlbCwgMjApLm1hcCgod29yZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDx0c3BhbiBrZXk9e2luZGV4fSB4PVwiMFwiIGR5PXtgJHtpbmRleCA+IDAgPyAnMS4yZW0nIDogJy42ZW0nfWB9PlxuICAgICAgICAgICAgICAgICAgICB7d29yZH1cbiAgICAgICAgICAgICAgICAgIDwvdHNwYW4+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICl9XG5cbiAgICAgICAge2RlZmluZUNoYXJ0ICYmIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICAgIHg9e3ggLSAyNH1cbiAgICAgICAgICAgIHk9e3kgKyA4MCArIHRvcH1cbiAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgIGhlaWdodD17NH1cbiAgICAgICAgICAgIHN0eWxlPXt7IHBvaW50ZXJFdmVudHM6ICd2aXNpYmxlJywgb3ZlcmZsb3c6ICd2aXNpYmxlJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFxuICAgICAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogJ2ZpeGVkJyB9fVxuICAgICAgICAgICAgICBjaGVja2VkPXtpbnRlcmFjdGl2ZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLmNoYW5nZUludGVyYWN0aXZlKGluZGV4LCBlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgICApfVxuXG4gICAgICAgIHtkZWZpbmVDaGFydCAmJiBjaGFuZ2VFZGl0YWJsZUVuYWJsZWQgJiYgKFxuICAgICAgICAgIDxmb3JlaWduT2JqZWN0XG4gICAgICAgICAgICB4PXt4IC0gMjR9XG4gICAgICAgICAgICB5PXt5ICsgMTMwICsgdG9wfVxuICAgICAgICAgICAgd2lkdGg9e2JhcldpZHRofVxuICAgICAgICAgICAgaGVpZ2h0PXs0fVxuICAgICAgICAgICAgc3R5bGU9e3sgcG9pbnRlckV2ZW50czogJ3Zpc2libGUnLCBvdmVyZmxvdzogJ3Zpc2libGUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN0eWxlZENoZWNrYm94XG4gICAgICAgICAgICAgIHN0eWxlPXt7IHBvc2l0aW9uOiAnZml4ZWQnIH19XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2VkaXRhYmxlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuY2hhbmdlRWRpdGFibGUoaW5kZXgsIGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XG4gICAgICAgICl9XG5cbiAgICAgICAgPGZvcmVpZ25PYmplY3RcbiAgICAgICAgICB4PXt4IC0gMjR9XG4gICAgICAgICAgeT17eSArIDEwMCArIHRvcH1cbiAgICAgICAgICB3aWR0aD17YmFyV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXs0fVxuICAgICAgICAgIHN0eWxlPXt7IHBvaW50ZXJFdmVudHM6ICd2aXNpYmxlJywgb3ZlcmZsb3c6ICd2aXNpYmxlJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgPEFsZXJ0RGlhbG9nXG4gICAgICAgICAgICBvcGVuPXtkaWFsb2cub3Blbn1cbiAgICAgICAgICAgIHRpdGxlPXtkaWFsb2cudGl0bGV9XG4gICAgICAgICAgICB0ZXh0PXtkaWFsb2cudGV4dH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2RpYWxvZy5vbkNsb3NlfVxuICAgICAgICAgICAgb25Db25maXJtPXtkaWFsb2cub25Db25maXJtfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgIDwvZz5cbiAgICApO1xuICB9XG59XG5cblRpY2tDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICBjYXRlZ29yaWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gIHhCYW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgYmFuZFdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBiYXJXaWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgcm90YXRlOiBQcm9wVHlwZXMubnVtYmVyLFxuICB0b3A6IFByb3BUeXBlcy5udW1iZXIsXG4gIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHk6IFByb3BUeXBlcy5udW1iZXIsXG4gIGdyYXBoUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGZvcm1hdHRlZFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNoYW5nZUNhdGVnb3J5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBlcnJvcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGFydGluZ09wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoYW5nZUVkaXRhYmxlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQXV0b0ZvY3VzVXNlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dDb3JyZWN0bmVzczogUHJvcFR5cGVzLmJvb2wsXG4gIGhpZGRlbkxhYmVsUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHsgY3VycmVudDogUHJvcFR5cGVzLmluc3RhbmNlT2YoRWxlbWVudCkgfSldKSxcbn07XG5cbmV4cG9ydCBjbGFzcyBSYXdDaGFydEF4ZXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGJvdHRvbVNjYWxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjYXRlZ29yaWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGVycm9yOiBQcm9wVHlwZXMuYW55LFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gICAgeEJhbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxlZnRBeGlzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2VDYXRlZ29yeTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgdG9wOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHRoZW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNoYXJ0aW5nT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkF1dG9Gb2N1c1VzZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNob3dDb3JyZWN0bmVzczogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGlkZGVuTGFiZWxSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoeyBjdXJyZW50OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihFbGVtZW50KSB9KV0pLFxuICB9O1xuXG4gIHN0YXRlID0geyBoZWlnaHQ6IDAsIHdpZHRoOiAwIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuaGlkZGVuTGFiZWxSZWYpIHtcbiAgICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHRoaXMuaGlkZGVuTGFiZWxSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBoaWRkZW5FbCA9IHRoaXMuaGlkZGVuTGFiZWxSZWY7XG5cbiAgICAgIC8vIHNhbWUgbG9naWMgdXNlZCBpbiBkcm9wZG93bi5qc3ggZm9yIGhpZGRlbiBsYWJlbHMgd2lkdGggY2FsY3VsYXRpb25cbiAgICAgIGlmIChoaWRkZW5FbCkge1xuICAgICAgICBjb25zdCBjb250YWluc0xhdGV4ID0gaGlkZGVuRWwucXVlcnlTZWxlY3RvcignW2RhdGEtbGF0ZXhdLCBbZGF0YS1yYXddJyk7XG4gICAgICAgIGNvbnN0IGhhc01hdGhKYXggPSBoaWRkZW5FbC5xdWVyeVNlbGVjdG9yKCdtangtY29udGFpbmVyJyk7XG4gICAgICAgIGNvbnN0IG1hdGhIYW5kbGVkID0gaGlkZGVuRWwucXVlcnlTZWxlY3RvcignW2RhdGEtbWF0aC1oYW5kbGVkPVwidHJ1ZVwiXScpO1xuXG4gICAgICAgIGlmIChjb250YWluc0xhdGV4ICYmICghbWF0aEhhbmRsZWQgfHwgIWhhc01hdGhKYXgpKSB7XG4gICAgICAgICAgcmVuZGVyTWF0aCh0aGlzLmhpZGRlbkxhYmVsUmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhlaWdodDogTWF0aC5mbG9vcihib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0KSxcbiAgICAgICAgICB3aWR0aDogTWF0aC5mbG9vcihib3VuZGluZ0NsaWVudFJlY3Qud2lkdGgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuaGlkZGVuTGFiZWxSZWYpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5mbG9vcih0aGlzLmhpZGRlbkxhYmVsUmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblxuICAgICAgaWYgKHdpZHRoICE9PSB0aGlzLnN0YXRlLndpZHRoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB3aWR0aCB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZ3JhcGhQcm9wcyxcbiAgICAgIHhCYW5kLFxuICAgICAgbGVmdEF4aXMsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2hhbmdlQ2F0ZWdvcnksXG4gICAgICBjYXRlZ29yaWVzID0gW10sXG4gICAgICB0b3AsXG4gICAgICBkZWZpbmVDaGFydCxcbiAgICAgIGNoYXJ0aW5nT3B0aW9ucyxcbiAgICAgIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCxcbiAgICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZCxcbiAgICAgIHRoZW1lLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgb25BdXRvRm9jdXNVc2VkLFxuICAgICAgZXJyb3IsXG4gICAgICBzaG93Q29ycmVjdG5lc3MsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCB7IHNjYWxlID0ge30sIHJhbmdlID0ge30sIGRvbWFpbiA9IHt9LCBzaXplID0ge30gfSA9IGdyYXBoUHJvcHMgfHwge307XG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgYm90dG9tU2NhbGUgPSB4QmFuZCAmJiB0eXBlb2YgeEJhbmQucmFuZ2VSb3VuZCA9PT0gJ2Z1bmN0aW9uJyAmJiB4QmFuZC5yYW5nZVJvdW5kKFswLCBzaXplLndpZHRoXSk7XG5cbiAgICBjb25zdCBiYW5kV2lkdGggPSB4QmFuZCAmJiB0eXBlb2YgeEJhbmQuYmFuZHdpZHRoID09PSAnZnVuY3Rpb24nICYmIHhCYW5kLmJhbmR3aWR0aCgpO1xuICAgIC8vIGZvciBjaGFydFR5cGUgXCJsaW5lXCIsIGJhbmRXaWR0aCB3aWxsIGJlIDAsIHNvIHdlIGhhdmUgdG8gY2FsY3VsYXRlIGl0XG4gICAgY29uc3QgYmFyV2lkdGggPSBiYW5kV2lkdGggfHwgKHNjYWxlLnggJiYgc2NhbGUueChkb21haW4ubWF4KSAvIGNhdGVnb3JpZXMubGVuZ3RoKTtcblxuICAgIGNvbnN0IHJvd1RpY2tWYWx1ZXMgPSBnZXRUaWNrVmFsdWVzKHsgLi4ucmFuZ2UsIHN0ZXA6IHJhbmdlLmxhYmVsU3RlcCB9KTtcbiAgICBjb25zdCBmb250U2l6ZSA9IHRoZW1lICYmIHRoZW1lLnR5cG9ncmFwaHkgPyB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplIDogMTQ7XG4gICAgLy8gdGhpcyBtb3N0bHkgYXBwbGllcyBmb3IgbGFiZWxzIHRoYXQgYXJlIG5vdCBlZGl0YWJsZVxuICAgIGNvbnN0IHJvdGF0ZUJlY2F1c2VPZkhlaWdodCA9IGdldFJvdGF0ZUFuZ2xlKGZvbnRTaXplLCBoZWlnaHQpO1xuICAgIC8vIHRoaXMgYXBwbGllcyBmb3IgbGFiZWxzIHRoYXQgYXJlIGVkaXRhYmxlXG4gICAgY29uc3Qgcm90YXRlQmVjYXVzZU9mV2lkdGggPSB3aWR0aCA+IGJhcldpZHRoID8gMjUgOiAwO1xuXG4gICAgY29uc3QgZ2V0VGlja0xhYmVsUHJvcHMgPSAodmFsdWUpID0+ICh7XG4gICAgICBkeTogNCxcbiAgICAgIGR4OiAtMTAgLSAodmFsdWUudG9Mb2NhbGVTdHJpbmcoKS5sZW5ndGggfHwgMSkgKiA1LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0VGlja0NvbXBvbmVudCA9IChwcm9wcykgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgICAgaGlkZGVuTGFiZWxSZWY6IChyZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkxhYmVsUmVmID0gcmVmO1xuICAgICAgICB9LFxuICAgICAgICBjYXRlZ29yaWVzLFxuICAgICAgICB4QmFuZCxcbiAgICAgICAgYmFuZFdpZHRoLFxuICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgcm90YXRlOiByb3RhdGVCZWNhdXNlT2ZIZWlnaHQgfHwgcm90YXRlQmVjYXVzZU9mV2lkdGgsXG4gICAgICAgIHRvcCxcbiAgICAgICAgZGVmaW5lQ2hhcnQsXG4gICAgICAgIGNoYXJ0aW5nT3B0aW9ucyxcbiAgICAgICAgYXV0b0ZvY3VzLFxuICAgICAgICBvbkF1dG9Gb2N1c1VzZWQsXG4gICAgICAgIGVycm9yLFxuICAgICAgICBvbkNoYW5nZUNhdGVnb3J5LFxuICAgICAgICBjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQsXG4gICAgICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZCxcbiAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgIGdyYXBoUHJvcHMsXG4gICAgICAgIHg6IHByb3BzLngsXG4gICAgICAgIHk6IHByb3BzLnksXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlOiBwcm9wcy5mb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgc2hvd0NvcnJlY3RuZXNzLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIDxUaWNrQ29tcG9uZW50IHsuLi5wcm9wZXJ0aWVzfSAvPjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRBeGVzR3JvdXA+XG4gICAgICAgIHtsZWZ0QXhpcyAmJiAoXG4gICAgICAgICAgPEF4aXNMZWZ0XG4gICAgICAgICAgICBzY2FsZT17c2NhbGUueX1cbiAgICAgICAgICAgIHRpY2tMZW5ndGg9ezEwfVxuICAgICAgICAgICAgdGlja0Zvcm1hdD17KHZhbHVlKSA9PiB2YWx1ZX1cbiAgICAgICAgICAgIHRpY2tWYWx1ZXM9e3Jvd1RpY2tWYWx1ZXN9XG4gICAgICAgICAgICB0aWNrTGFiZWxQcm9wcz17Z2V0VGlja0xhYmVsUHJvcHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPEF4aXNCb3R0b21cbiAgICAgICAgICBzY2FsZT17Ym90dG9tU2NhbGV9XG4gICAgICAgICAgbGFiZWxQcm9wcz17eyB5OiA2MCArIHRvcCB9fVxuICAgICAgICAgIHRvcD17c2NhbGUueSAmJiBzY2FsZS55KHJhbmdlLm1pbil9XG4gICAgICAgICAgdGV4dExhYmVsUHJvcHM9eygpID0+ICh7IHRleHRBbmNob3I6ICdtaWRkbGUnIH0pfVxuICAgICAgICAgIHRpY2tGb3JtYXQ9eyhjb3VudCkgPT4gY291bnR9XG4gICAgICAgICAgdGlja0NvbXBvbmVudD17Z2V0VGlja0NvbXBvbmVudH1cbiAgICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgICBvbkF1dG9Gb2N1c1VzZWQ9e29uQXV0b0ZvY3VzVXNlZH1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkQXhlc0dyb3VwPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmF3Q2hhcnRBeGVzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FB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