@vizzly/dashboard 0.14.4-dev-8252b10a001b6d371cf542597333bfa8f0f1ed5a → 0.14.4-dev-28ace990f8935dcd353f0b09527a2a1b32940e13

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.
@@ -57,12 +57,13 @@ var windowSize = require('@react-hook/window-size');
57
57
  var copy = _interopDefault(require('copy-to-clipboard'));
58
58
  var html2canvas = _interopDefault(require('html2canvas'));
59
59
  var jsPDF = _interopDefault(require('jspdf'));
60
- var text$3 = require('@visx/text');
61
- var axis = require('@visx/axis');
62
- var grid = require('@visx/grid');
63
60
  var clipPath = require('@visx/clip-path');
64
61
  var event = require('@visx/event');
65
62
  var d3Array = require('@visx/vendor/d3-array');
63
+ var axis = require('@visx/axis');
64
+ var text$3 = require('@visx/text');
65
+ var grid = require('@visx/grid');
66
+ require('@visx/point');
66
67
  var WaterfallChart$4 = require('./charts/src/v2/components/WaterfallChart');
67
68
  var VisibilitySensor = _interopDefault(require('react-visibility-sensor'));
68
69
  var ExcelJS = _interopDefault(require('exceljs'));
@@ -40947,72 +40948,6 @@ var Legend$1 = function Legend(_ref) {
40947
40948
  });
40948
40949
  };
40949
40950
 
40950
- var GoalLine = function GoalLine(_ref) {
40951
- var goalLine = _ref.goalLine,
40952
- innerWidth = _ref.innerWidth,
40953
- y = _ref.y,
40954
- margin = _ref.margin;
40955
- var textRef = React.useRef(null);
40956
- var _useState = React.useState(0),
40957
- labelWidth = _useState[0],
40958
- setLabelWidth = _useState[1];
40959
- React.useEffect(function () {
40960
- if (textRef.current) {
40961
- var bbox = textRef.current.getBBox();
40962
- setLabelWidth(bbox.width + 16);
40963
- }
40964
- }, [goalLine.formattedValue]);
40965
- var height = 16;
40966
- var triangleWidth = 8;
40967
- return jsxRuntime.jsxs("g", {
40968
- style: {
40969
- position: 'relative'
40970
- },
40971
- children: [jsxRuntime.jsx(shape.Line, {
40972
- from: {
40973
- x: margin.left,
40974
- y: margin.top + y
40975
- },
40976
- to: {
40977
- x: margin.left + innerWidth,
40978
- y: margin.top + y
40979
- },
40980
- stroke: goalLine.color,
40981
- strokeDasharray: goalLine.strokeStyle == 'dashed' ? goalLine.strokeWidth * 2.5 + "," + goalLine.strokeWidth * 2.5 : undefined,
40982
- strokeWidth: goalLine.strokeWidth,
40983
- strokeLinecap: "round",
40984
- shapeRendering: "smooth"
40985
- }), jsxRuntime.jsxs("g", {
40986
- transform: "translate(" + (margin.left + innerWidth - labelWidth) + "," + (y + margin.top + height / 2) + ")",
40987
- children: [jsxRuntime.jsx("path", {
40988
- d: "M 0,0\n l " + -triangleWidth + "," + -height / 2 + " \n l " + triangleWidth + "," + -height / 2 + " \n h " + labelWidth + " \n a 3,3 0 0 1 3,3 \n v " + (height - 6) + " \n a 3,3 0 0 1 -3,3 \n h " + -labelWidth + " z",
40989
- fill: goalLine.color
40990
- }), jsxRuntime.jsx("text", {
40991
- ref: textRef,
40992
- x: labelWidth / 2,
40993
- y: -1,
40994
- dy: -4,
40995
- textAnchor: "middle",
40996
- fontFamily: "Arial, sans-serif",
40997
- fontSize: 9,
40998
- fill: '#fff',
40999
- children: goalLine.formattedValue
41000
- })]
41001
- })]
41002
- });
41003
- };
41004
-
41005
- /*
41006
- const strokeWidth = 2;
41007
- const height = 16;
41008
- const triangleWidth = 8;
41009
-
41010
-
41011
-
41012
-
41013
-
41014
- */
41015
-
41016
40951
  var ASSUMED_AVERAGE_CHAR_WIDTH = 8.8;
41017
40952
  function calculateWordWidth(word, avgCharWidth) {
41018
40953
  if (avgCharWidth === void 0) {
@@ -41103,25 +41038,250 @@ function useFlattenedData(xScaleKey, xScaleDataType, chart) {
41103
41038
  }, [chart.data, xScaleKey, xScaleDataType, chart.y.keys]);
41104
41039
  }
41105
41040
 
41106
- var _excluded$e = ["formattedValue"],
41107
- _excluded2$4 = ["formattedValue"];
41041
+ var GoalLine = function GoalLine(_ref) {
41042
+ var goalLine = _ref.goalLine,
41043
+ innerWidth = _ref.innerWidth,
41044
+ y = _ref.y,
41045
+ margin = _ref.margin;
41046
+ var textRef = React.useRef(null);
41047
+ var _useState = React.useState(0),
41048
+ labelWidth = _useState[0],
41049
+ setLabelWidth = _useState[1];
41050
+ React.useEffect(function () {
41051
+ if (textRef.current) {
41052
+ var bbox = textRef.current.getBBox();
41053
+ setLabelWidth(bbox.width + 16);
41054
+ }
41055
+ }, [goalLine.formattedValue]);
41056
+ var height = 16;
41057
+ var triangleWidth = 8;
41058
+ return jsxRuntime.jsxs("g", {
41059
+ style: {
41060
+ position: 'relative'
41061
+ },
41062
+ children: [jsxRuntime.jsx(shape.Line, {
41063
+ from: {
41064
+ x: margin.left,
41065
+ y: margin.top + y
41066
+ },
41067
+ to: {
41068
+ x: margin.left + innerWidth,
41069
+ y: margin.top + y
41070
+ },
41071
+ stroke: goalLine.color,
41072
+ strokeDasharray: goalLine.strokeStyle == 'dashed' ? goalLine.strokeWidth * 2.5 + "," + goalLine.strokeWidth * 2.5 : undefined,
41073
+ strokeWidth: goalLine.strokeWidth,
41074
+ strokeLinecap: "round",
41075
+ shapeRendering: "smooth"
41076
+ }), jsxRuntime.jsxs("g", {
41077
+ transform: "translate(" + (margin.left + innerWidth - labelWidth) + "," + (y + margin.top + height / 2) + ")",
41078
+ children: [jsxRuntime.jsx("path", {
41079
+ d: "M 0,0\n l " + -triangleWidth + "," + -height / 2 + " \n l " + triangleWidth + "," + -height / 2 + " \n h " + labelWidth + " \n a 3,3 0 0 1 3,3 \n v " + (height - 6) + " \n a 3,3 0 0 1 -3,3 \n h " + -labelWidth + " z",
41080
+ fill: goalLine.color
41081
+ }), jsxRuntime.jsx("text", {
41082
+ ref: textRef,
41083
+ x: labelWidth / 2,
41084
+ y: -1,
41085
+ dy: -4,
41086
+ textAnchor: "middle",
41087
+ fontFamily: "Arial, sans-serif",
41088
+ fontSize: 9,
41089
+ fill: '#fff',
41090
+ children: goalLine.formattedValue
41091
+ })]
41092
+ })]
41093
+ });
41094
+ };
41095
+
41096
+ /*
41097
+ const strokeWidth = 2;
41098
+ const height = 16;
41099
+ const triangleWidth = 8;
41100
+
41101
+
41102
+
41103
+
41104
+
41105
+ */
41106
+
41107
+ var shouldUpdate$1 = function shouldUpdate(previousProps, nextProps) {
41108
+ return JSON.stringify(previousProps) == JSON.stringify(nextProps);
41109
+ };
41110
+ var GoalLines = function GoalLines(_ref) {
41111
+ var goalLines = _ref.goalLines,
41112
+ margin = _ref.margin,
41113
+ y = _ref.y,
41114
+ width = _ref.width;
41115
+ return jsxRuntime.jsx(React.Fragment, {
41116
+ children: goalLines.map(function (goalLine) {
41117
+ return jsxRuntime.jsx(GoalLine, {
41118
+ innerWidth: width,
41119
+ y: y(goalLine.value),
41120
+ goalLine: goalLine,
41121
+ margin: margin
41122
+ }, goalLine.value);
41123
+ })
41124
+ });
41125
+ };
41126
+ var GoalLines$1 = /*#__PURE__*/React.memo(GoalLines, shouldUpdate$1);
41127
+
41108
41128
  var AXIS_TITLE_STYLES = {
41109
41129
  opacity: '0.75',
41110
41130
  fontWeight: 'bold'
41111
41131
  };
41112
41132
 
41113
- /*
41114
- NOTES
41115
- -----
41116
- 1. Control width of margins via props and truncate ticks using a fixed width
41117
- 2. (somehow) prevent overlapping of ticks
41118
- 3. Split out conditional formatting colours to show operator and values for each color
41119
- 4. Add axis titles
41120
- 5. Account for no xKey and showing 1 dot for a single yKey
41121
- */
41133
+ var _excluded$e = ["formattedValue"];
41134
+ var AxisBottom = function AxisBottom(_ref) {
41135
+ var _x$ticks;
41136
+ var x = _ref.x,
41137
+ margin = _ref.margin,
41138
+ themeCSS = _ref.themeCSS,
41139
+ show = _ref.show,
41140
+ removeStroke = _ref.removeStroke,
41141
+ xScaleDataType = _ref.xScaleDataType,
41142
+ xScale = _ref.xScale,
41143
+ height = _ref.height;
41144
+ var tickFormat = React.useCallback(function (value) {
41145
+ var tick = null;
41146
+ if (xScaleDataType === 'date_time' && value instanceof Date) {
41147
+ var matchingTickValue = x.ticks.find(function (tickValue) {
41148
+ return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41149
+ });
41150
+ tick = matchingTickValue || null;
41151
+ } else {
41152
+ var _matchingTickValue = x.ticks.find(function (tickValue) {
41153
+ return tickValue.scaleValue === value;
41154
+ });
41155
+ tick = _matchingTickValue || null;
41156
+ }
41157
+ if (tick) {
41158
+ if (tick.formattedValue) {
41159
+ return tick.formattedValue;
41160
+ }
41161
+ return tick.value.toString();
41162
+ }
41163
+ return '';
41164
+ }, [x.ticks, xScaleDataType]);
41165
+ if (!show) return null;
41166
+ if (!xScale) return null;
41167
+ return jsxRuntime.jsx(axis.AxisBottom, {
41168
+ label: x.title || undefined,
41169
+ labelProps: {
41170
+ style: AXIS_TITLE_STYLES
41171
+ },
41172
+ labelOffset: margin.bottomTitleOffset,
41173
+ hideTicks: true,
41174
+ top: height,
41175
+ scale: xScale,
41176
+ tickFormat: tickFormat,
41177
+ tickValues: ((_x$ticks = x.ticks) == null ? void 0 : _x$ticks.length) > 0 ? x.ticks.map(function (tick) {
41178
+ return (tick == null ? void 0 : tick.scaleValue) !== null ? tick == null ? void 0 : tick.scaleValue : 0;
41179
+ }) : undefined,
41180
+ tickComponent: function tickComponent(_ref2) {
41181
+ var formattedValue = _ref2.formattedValue,
41182
+ tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$e);
41183
+ return jsxRuntime.jsx(text$3.Text, _extends({
41184
+ style: themeCSS.labels
41185
+ }, tickProps, {
41186
+ children: formattedValue
41187
+ }));
41188
+ },
41189
+ stroke: themeCSS.axis.stroke,
41190
+ strokeWidth: removeStroke ? 0 : 1
41191
+ });
41192
+ };
41193
+
41194
+ var _excluded$f = ["formattedValue"];
41195
+ var AxisLeft = function AxisLeft(_ref) {
41196
+ var show = _ref.show,
41197
+ y = _ref.y,
41198
+ margin = _ref.margin,
41199
+ themeCSS = _ref.themeCSS,
41200
+ yScale = _ref.yScale,
41201
+ ticks = _ref.ticks,
41202
+ stroke = _ref.stroke;
41203
+ var tickFormat = React.useCallback(function (value) {
41204
+ var item = y.ticks.filter(function (tick) {
41205
+ return tick.value === value;
41206
+ })[0];
41207
+ if (item) {
41208
+ if (item.formattedValue) {
41209
+ return item.formattedValue;
41210
+ } else {
41211
+ return item.value.toString();
41212
+ }
41213
+ } else {
41214
+ return '';
41215
+ }
41216
+ }, [y.ticks]);
41217
+ if (!show) return null;
41218
+ return jsxRuntime.jsx(axis.AxisLeft, {
41219
+ labelOffset: margin.leftTitleOffset,
41220
+ label: y.title || undefined,
41221
+ labelProps: {
41222
+ style: AXIS_TITLE_STYLES
41223
+ },
41224
+ hideTicks: true,
41225
+ left: 0,
41226
+ top: 0,
41227
+ scale: yScale,
41228
+ tickFormat: tickFormat,
41229
+ tickValues: ticks,
41230
+ tickComponent: function tickComponent(_ref2) {
41231
+ var formattedValue = _ref2.formattedValue,
41232
+ tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$f);
41233
+ return jsxRuntime.jsx(text$3.Text, _extends({
41234
+ width: 10,
41235
+ style: themeCSS.labels
41236
+ }, tickProps, {
41237
+ children: formattedValue
41238
+ }));
41239
+ },
41240
+ stroke: stroke != null ? stroke : 'transparent'
41241
+ });
41242
+ };
41243
+
41244
+ var GridRows = function GridRows(_ref) {
41245
+ var ticks = _ref.ticks,
41246
+ yScale = _ref.yScale,
41247
+ removeStroke = _ref.removeStroke,
41248
+ width = _ref.width,
41249
+ height = _ref.height,
41250
+ themeCSS = _ref.themeCSS;
41251
+ return jsxRuntime.jsx(grid.GridRows, {
41252
+ tickValues: ticks.length > 0 ? ticks : undefined,
41253
+ scale: yScale,
41254
+ width: width,
41255
+ height: height,
41256
+ pointerEvents: "none",
41257
+ strokeDasharray: "0.5 5",
41258
+ strokeWidth: removeStroke ? 0 : 2,
41259
+ lineStyle: {
41260
+ strokeLinecap: 'round',
41261
+ stroke: themeCSS.grid.stroke
41262
+ }
41263
+ });
41264
+ };
41265
+
41266
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$7() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
41267
+ var ChartWrapper$1 = function ChartWrapper(props) {
41268
+ return jsxRuntime.jsx("svg", {
41269
+ width: props.width,
41270
+ height: props.height - (props.showLegend ? 40 : 0),
41271
+ onMouseMove: props.onMouseMove,
41272
+ onMouseLeave: props.onMouseLeave,
41273
+ className: /*#__PURE__*/css$1.css( {
41274
+ name: "fx4tbw-ChartWrapper",
41275
+ styles: "display:block;label:ChartWrapper;",
41276
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYXJ0V3JhcHBlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JpQiIsImZpbGUiOiJDaGFydFdyYXBwZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcblxuZXhwb3J0IGNvbnN0IENoYXJ0V3JhcHBlciA9IChwcm9wczoge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcbiAgb25Nb3VzZU1vdmU/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxTVkdTVkdFbGVtZW50PjtcbiAgb25Nb3VzZUxlYXZlPzogUmVhY3QuTW91c2VFdmVudEhhbmRsZXI8U1ZHU1ZHRWxlbWVudD47XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPHN2Z1xuICAgICAgd2lkdGg9e3Byb3BzLndpZHRofVxuICAgICAgaGVpZ2h0PXtwcm9wcy5oZWlnaHQgLSAocHJvcHMuc2hvd0xlZ2VuZCA/IDQwIDogMCl9XG4gICAgICBvbk1vdXNlTW92ZT17cHJvcHMub25Nb3VzZU1vdmV9XG4gICAgICBvbk1vdXNlTGVhdmU9e3Byb3BzLm9uTW91c2VMZWF2ZX1cbiAgICAgIGNsYXNzTmFtZT17Y3NzKHsgZGlzcGxheTogJ2Jsb2NrJyB9KX1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9zdmc+XG4gICk7XG59O1xuIl19 */",
41277
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$7
41278
+ }),
41279
+ children: props.children
41280
+ });
41281
+ };
41122
41282
 
41123
41283
  var LineChart$5 = function LineChart(_ref) {
41124
- var _theme$axis$stroke, _theme$axis;
41284
+ var _theme$axis;
41125
41285
  var chart = _ref.chart,
41126
41286
  options = _ref.options,
41127
41287
  theme = _ref.theme,
@@ -41191,21 +41351,6 @@ var LineChart$5 = function LineChart(_ref) {
41191
41351
  });
41192
41352
  }, [innerHeight, chart.y]);
41193
41353
  var dataFlattened = useFlattenedData(xScaleKey, xScaleDataType, chart);
41194
- var goalLines = React.useMemo(function () {
41195
- return chart.goalLines.map(function (goalLine) {
41196
- return jsxRuntime.jsx(GoalLine, {
41197
- innerWidth: innerWidth,
41198
- y: yScale(goalLine.value),
41199
- goalLine: goalLine,
41200
- margin: {
41201
- top: margin.top,
41202
- left: margin.left,
41203
- right: margin.right,
41204
- bottom: margin.bottom
41205
- }
41206
- }, goalLine.value);
41207
- });
41208
- }, [chart.goalLines, margin, innerWidth, yScale]);
41209
41354
  var handleMouseMove = React.useCallback(function (event) {
41210
41355
  if (!xKey || !xScaleKey || xScale === null) return;
41211
41356
  var tooltipData = getTooltipData({
@@ -41232,112 +41377,39 @@ var LineChart$5 = function LineChart(_ref) {
41232
41377
  return Number(tick.value);
41233
41378
  });
41234
41379
  return jsxRuntime.jsxs(React__default.Fragment, {
41235
- children: [jsxRuntime.jsxs("svg", {
41380
+ children: [jsxRuntime.jsxs(ChartWrapper$1, {
41236
41381
  width: width,
41237
- height: height - (options.showLegend ? 40 : 0),
41382
+ height: height,
41383
+ showLegend: options.showLegend,
41238
41384
  onMouseMove: handleMouseMove,
41239
41385
  onMouseLeave: handleMouseLeave,
41240
- style: {
41241
- display: 'block'
41242
- },
41243
41386
  children: [jsxRuntime.jsxs(group.Group, {
41244
41387
  left: margin.left,
41245
41388
  top: margin.top,
41246
- children: [jsxRuntime.jsx(grid.GridRows, {
41247
- tickValues: yTickValues.length > 0 ? yTickValues : undefined,
41248
- scale: yScale,
41389
+ children: [jsxRuntime.jsx(GridRows, {
41390
+ ticks: yTickValues,
41391
+ yScale: yScale,
41249
41392
  width: innerWidth,
41250
41393
  height: innerHeight,
41251
- pointerEvents: "none",
41252
- strokeDasharray: "0.5 5",
41253
- strokeWidth: options.removeStroke ? 0 : 2,
41254
- lineStyle: {
41255
- strokeLinecap: 'round',
41256
- stroke: themeCSS.grid.stroke
41257
- }
41258
- }), options.axis.showXAxisLabels && jsxRuntime.jsx(axis.AxisBottom, {
41259
- label: chart.x.title || undefined,
41260
- labelProps: {
41261
- style: AXIS_TITLE_STYLES
41262
- },
41263
- labelOffset: margin.bottomTitleOffset,
41264
- hideTicks: true,
41265
- top: innerHeight,
41266
- scale: xScale,
41267
- tickFormat: function tickFormat(value) {
41268
- var tick = null;
41269
- if (xScaleDataType === 'date_time' && value instanceof Date) {
41270
- // if chart.x.scale.key !== chart.x.key, use tickValue.scaleValue NOT tickValuevalue
41271
- var matchingTickValue = chart.x.ticks.find(function (tickValue) {
41272
- return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41273
- });
41274
- tick = matchingTickValue || null;
41275
- } else {
41276
- var _matchingTickValue = chart.x.ticks.find(function (tickValue) {
41277
- return tickValue.scaleValue === value;
41278
- });
41279
- tick = _matchingTickValue || null;
41280
- }
41281
- if (tick) {
41282
- if (tick.formattedValue) {
41283
- return tick.formattedValue;
41284
- } else {
41285
- return tick.value.toString();
41286
- }
41287
- } else {
41288
- return ''; // ?
41289
- }
41290
- },
41291
- tickValues: chart.x.ticks.length > 0 ? chart.x.ticks.map(function (tick) {
41292
- return tick.scaleValue !== null ? tick.scaleValue : 0;
41293
- }) : undefined,
41294
- tickComponent: function tickComponent(_ref2) {
41295
- var formattedValue = _ref2.formattedValue,
41296
- tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$e);
41297
- return jsxRuntime.jsx(text$3.Text, _extends({
41298
- style: themeCSS.labels
41299
- }, tickProps, {
41300
- children: formattedValue
41301
- }));
41302
- },
41303
- stroke: themeCSS.axis.stroke,
41304
- strokeWidth: options.removeStroke ? 0 : 1
41305
- }), options.axis.showYAxisLabels && jsxRuntime.jsx(axis.AxisLeft, {
41306
- labelOffset: margin.leftTitleOffset,
41307
- label: chart.y.title || undefined,
41308
- labelProps: {
41309
- style: AXIS_TITLE_STYLES
41310
- },
41311
- hideTicks: true,
41312
- left: 0,
41313
- top: 0,
41314
- scale: yScale,
41315
- tickFormat: function tickFormat(value) {
41316
- var item = chart.y.ticks.filter(function (tick) {
41317
- return tick.value === value;
41318
- })[0];
41319
- if (item) {
41320
- if (item.formattedValue) {
41321
- return item.formattedValue;
41322
- } else {
41323
- return item.value.toString();
41324
- }
41325
- } else {
41326
- return '';
41327
- }
41328
- },
41329
- tickValues: yTickValues,
41330
- tickComponent: function tickComponent(_ref3) {
41331
- var formattedValue = _ref3.formattedValue,
41332
- tickProps = _objectWithoutPropertiesLoose(_ref3, _excluded2$4);
41333
- return jsxRuntime.jsx(text$3.Text, _extends({
41334
- width: 10,
41335
- style: themeCSS.labels
41336
- }, tickProps, {
41337
- children: formattedValue
41338
- }));
41339
- },
41340
- stroke: (_theme$axis$stroke = theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke) != null ? _theme$axis$stroke : 'transparent'
41394
+ removeStroke: options.removeStroke,
41395
+ themeCSS: themeCSS
41396
+ }), jsxRuntime.jsx(AxisBottom, {
41397
+ x: chart.x,
41398
+ margin: margin,
41399
+ themeCSS: themeCSS,
41400
+ show: options.axis.showXAxisLabels,
41401
+ removeStroke: options.removeStroke,
41402
+ xScaleDataType: xScaleDataType,
41403
+ xScale: xScale,
41404
+ height: innerHeight
41405
+ }), jsxRuntime.jsx(AxisLeft, {
41406
+ show: options.axis.showYAxisLabels,
41407
+ y: chart.y,
41408
+ margin: margin,
41409
+ themeCSS: themeCSS,
41410
+ yScale: yScale,
41411
+ ticks: yTickValues,
41412
+ stroke: theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke
41341
41413
  }), jsxRuntime.jsxs(group.Group, {
41342
41414
  children: [chart.y.keys.map(function (yKey) {
41343
41415
  var _chart$lines$filter$;
@@ -41467,7 +41539,14 @@ var LineChart$5 = function LineChart(_ref) {
41467
41539
  return null;
41468
41540
  }
41469
41541
  })]
41470
- }), goalLines]
41542
+ }), jsxRuntime.jsx(GoalLines$1, {
41543
+ goalLines: chart.goalLines,
41544
+ y: function y(d) {
41545
+ return yScale(d);
41546
+ },
41547
+ margin: margin,
41548
+ width: innerWidth
41549
+ })]
41471
41550
  }), options.showLegend && jsxRuntime.jsx(Legend$1, {
41472
41551
  legendItems: chart.lines,
41473
41552
  visibleYKeys: visibleYKeys,
@@ -41515,20 +41594,14 @@ function getBarFill(bars, conditionalFormattingRules, barKey, barValues) {
41515
41594
  return fill;
41516
41595
  }
41517
41596
 
41518
- var _excluded$f = ["formattedValue"],
41519
- _excluded2$5 = ["formattedValue"];
41520
- function _EMOTION_STRINGIFIED_CSS_ERROR__$7() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
41521
- var AXIS_TITLE_STYLES$1 = {
41522
- opacity: '0.75',
41523
- fontWeight: 'bold'
41524
- };
41597
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$8() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
41525
41598
  var BAR_RADIUS = 2;
41526
41599
  var PADDING = {
41527
41600
  paddingOuter: 0.05,
41528
41601
  paddingInner: 0.3
41529
41602
  };
41530
41603
  var BarChart$5 = function BarChart(_ref) {
41531
- var _chart$x2, _theme$axis$stroke, _theme$axis;
41604
+ var _theme$axis;
41532
41605
  var chart = _ref.chart,
41533
41606
  width = _ref.width,
41534
41607
  height = _ref.height,
@@ -41601,21 +41674,6 @@ var BarChart$5 = function BarChart(_ref) {
41601
41674
  return undefined;
41602
41675
  }, [xScale, yScaleKeys, options.stacked, xScaleDataType]);
41603
41676
  var dataFlattened = useFlattenedData(xScaleKey, xScaleDataType, chart);
41604
- var goalLines = React.useMemo(function () {
41605
- return chart.goalLines.map(function (goalLine) {
41606
- return jsxRuntime.jsx(GoalLine, {
41607
- innerWidth: innerWidth,
41608
- y: yScale(goalLine.value),
41609
- goalLine: goalLine,
41610
- margin: {
41611
- top: margin.top,
41612
- left: margin.left,
41613
- right: margin.right,
41614
- bottom: margin.bottom
41615
- }
41616
- }, goalLine.value);
41617
- });
41618
- }, [chart.goalLines, margin, innerWidth, yScale]);
41619
41677
  var handleMouseMove = React.useCallback(function (event) {
41620
41678
  if (!xKey || !xScaleKey || xScale === null) return;
41621
41679
  var tooltipData = getTooltipData({
@@ -41661,115 +41719,39 @@ var BarChart$5 = function BarChart(_ref) {
41661
41719
  return Number(tick.value);
41662
41720
  });
41663
41721
  return jsxRuntime.jsxs(React.Fragment, {
41664
- children: [jsxRuntime.jsxs("svg", {
41722
+ children: [jsxRuntime.jsxs(ChartWrapper$1, {
41665
41723
  width: width,
41666
- height: height - (options.showLegend ? 40 : 0),
41724
+ height: height,
41667
41725
  onMouseMove: handleMouseMove,
41668
41726
  onMouseLeave: handleMouseLeave,
41669
- style: {
41670
- display: 'block'
41671
- },
41727
+ showLegend: options.showLegend,
41672
41728
  children: [jsxRuntime.jsxs(group.Group, {
41673
41729
  left: margin.left,
41674
41730
  top: margin.top,
41675
- children: [jsxRuntime.jsx(grid.GridRows, {
41676
- tickValues: yTickValues.length > 0 ? yTickValues : undefined,
41677
- scale: yScale,
41731
+ children: [jsxRuntime.jsx(GridRows, {
41732
+ ticks: yTickValues,
41733
+ yScale: yScale,
41678
41734
  width: innerWidth,
41679
41735
  height: innerHeight,
41680
- pointerEvents: "none",
41681
- strokeDasharray: "0.5 5",
41682
- strokeWidth: options.removeStroke ? 0 : 2,
41683
- lineStyle: {
41684
- strokeLinecap: 'round',
41685
- stroke: themeCSS.grid.stroke
41686
- }
41687
- }), options.axis.showXAxisLabels && jsxRuntime.jsx(axis.AxisBottom, {
41688
- label: chart.x.title || undefined,
41689
- labelProps: {
41690
- style: AXIS_TITLE_STYLES$1
41691
- },
41692
- labelOffset: margin.bottomTitleOffset,
41693
- hideTicks: true,
41694
- top: innerHeight
41695
- // @ts-ignore
41696
- ,
41697
- scale: xScale,
41698
- tickFormat: function tickFormat(value) {
41699
- var tick = null;
41700
- if (xScaleDataType === 'date_time' && value instanceof Date) {
41701
- // if chart.x.scale.key !== chart.x.key, use tickValue.scaleValue NOT tickValuevalue
41702
- var matchingTickValue = chart.x.ticks.find(function (tickValue) {
41703
- return tickValue.scaleValue && new Date(tickValue.scaleValue).valueOf() === value.valueOf();
41704
- });
41705
- tick = matchingTickValue || null;
41706
- } else {
41707
- var _chart$x;
41708
- var _matchingTickValue = chart == null || (_chart$x = chart.x) == null ? void 0 : _chart$x.ticks.find(function (tickValue) {
41709
- return ((tickValue == null ? void 0 : tickValue.scaleValue) !== null ? tickValue == null ? void 0 : tickValue.scaleValue : 0) === value;
41710
- });
41711
- tick = _matchingTickValue || null;
41712
- }
41713
- if (tick) {
41714
- if (tick.formattedValue) {
41715
- return tick.formattedValue;
41716
- } else {
41717
- return tick.value.toString();
41718
- }
41719
- } else {
41720
- return ''; // ?
41721
- }
41722
- },
41723
- tickValues: (chart == null || (_chart$x2 = chart.x) == null || (_chart$x2 = _chart$x2.ticks) == null ? void 0 : _chart$x2.length) > 0 ? chart.x.ticks.map(function (tick) {
41724
- return (tick == null ? void 0 : tick.scaleValue) !== null ? tick == null ? void 0 : tick.scaleValue : 0;
41725
- }) : undefined,
41726
- tickComponent: function tickComponent(_ref2) {
41727
- var formattedValue = _ref2.formattedValue,
41728
- tickProps = _objectWithoutPropertiesLoose(_ref2, _excluded$f);
41729
- return jsxRuntime.jsx(text$3.Text, _extends({
41730
- style: themeCSS.labels
41731
- }, tickProps, {
41732
- children: formattedValue
41733
- }));
41734
- },
41735
- stroke: themeCSS.axis.stroke,
41736
- strokeWidth: options.removeStroke ? 0 : 1
41737
- }), options.axis.showYAxisLabels && jsxRuntime.jsx(axis.AxisLeft, {
41738
- labelOffset: margin.leftTitleOffset,
41739
- label: chart.y.title || undefined,
41740
- labelProps: {
41741
- style: AXIS_TITLE_STYLES$1
41742
- },
41743
- hideTicks: true,
41744
- left: 0,
41745
- top: 0,
41746
- scale: yScale,
41747
- tickFormat: function tickFormat(value) {
41748
- var item = chart.y.ticks.filter(function (tick) {
41749
- return tick.value === value;
41750
- })[0];
41751
- if (item) {
41752
- if (item.formattedValue) {
41753
- return item.formattedValue;
41754
- } else {
41755
- return item.value.toString();
41756
- }
41757
- } else {
41758
- return '';
41759
- }
41760
- },
41761
- tickValues: yTickValues,
41762
- tickComponent: function tickComponent(_ref3) {
41763
- var formattedValue = _ref3.formattedValue,
41764
- tickProps = _objectWithoutPropertiesLoose(_ref3, _excluded2$5);
41765
- return jsxRuntime.jsx(text$3.Text, _extends({
41766
- width: 10,
41767
- style: themeCSS.labels
41768
- }, tickProps, {
41769
- children: formattedValue
41770
- }));
41771
- },
41772
- stroke: (_theme$axis$stroke = theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke) != null ? _theme$axis$stroke : 'transparent'
41736
+ removeStroke: options.removeStroke,
41737
+ themeCSS: themeCSS
41738
+ }), jsxRuntime.jsx(AxisBottom, {
41739
+ x: chart.x,
41740
+ margin: margin,
41741
+ themeCSS: themeCSS,
41742
+ show: options.axis.showXAxisLabels,
41743
+ removeStroke: options.removeStroke,
41744
+ xScaleDataType: xScaleDataType,
41745
+ xScale: xScale,
41746
+ height: innerHeight
41747
+ }), jsxRuntime.jsx(AxisLeft, {
41748
+ show: options.axis.showYAxisLabels,
41749
+ y: chart.y,
41750
+ margin: margin,
41751
+ themeCSS: themeCSS,
41752
+ yScale: yScale,
41753
+ ticks: yTickValues,
41754
+ stroke: theme == null || (_theme$axis = theme.axis) == null ? void 0 : _theme$axis.stroke
41773
41755
  }), jsxRuntime.jsxs(group.Group, {
41774
41756
  children: [!options.stacked && jsxRuntime.jsx(shape.BarGroup, {
41775
41757
  data: dataFlattened,
@@ -41869,7 +41851,14 @@ var BarChart$5 = function BarChart(_ref) {
41869
41851
  pointerEvents: "none",
41870
41852
  opacity: 0.8
41871
41853
  })
41872
- }), goalLines]
41854
+ }), jsxRuntime.jsx(GoalLines$1, {
41855
+ goalLines: chart.goalLines,
41856
+ y: function y(d) {
41857
+ return yScale(d);
41858
+ },
41859
+ margin: margin,
41860
+ width: innerWidth
41861
+ })]
41873
41862
  }), options.showLegend && jsxRuntime.jsx(Legend$1, {
41874
41863
  legendItems: chart.bars,
41875
41864
  visibleYKeys: chart.bars.map(function (legendItem) {
@@ -41917,8 +41906,8 @@ var Bar = function Bar(props) {
41917
41906
  className: props.enableHover ? /*#__PURE__*/css$1.css( {
41918
41907
  name: "4nk3o1-Bar",
41919
41908
  styles: "cursor:pointer;label:Bar;",
41920
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhckNoYXJ0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4ZHFDIiwiZmlsZSI6IkJhckNoYXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhckNoYXJ0UmVwcmVzZW50YXRpb24gfSBmcm9tICdzaGFyZWQtbG9naWMvc3JjL0JhckNoYXJ0VjIvdHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSAnQHZpc3gvZ3JvdXAnO1xuaW1wb3J0IHsgZ2V0Q2hhcnRUaGVtZUNTUywgZ2V0VG9vbHRpcERhdGEgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBeGlzTGVmdCwgQXhpc0JvdHRvbSB9IGZyb20gJ0B2aXN4L2F4aXMnO1xuaW1wb3J0IHsgR3JpZFJvd3MgfSBmcm9tICdAdmlzeC9ncmlkJztcbmltcG9ydCB7IEZyYWdtZW50LCB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnLi4vVG9vbHRpcCc7XG5pbXBvcnQgeyB1c2VUb29sdGlwIH0gZnJvbSAnQHZpc3gvdG9vbHRpcCc7XG5pbXBvcnQgeyBMZWdlbmQgfSBmcm9tICcuLi9MZWdlbmQnO1xuaW1wb3J0IHsgR29hbExpbmUgfSBmcm9tICcuLi9Hb2FsTGluZSc7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHZpc3gvdGV4dCc7XG5pbXBvcnQgeyBCYXJHcm91cCwgQmFyU3RhY2ssIExpbmUgfSBmcm9tICdAdmlzeC9zaGFwZSc7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJ3NoYXJlZC1sb2dpYy9zcmMvRmllbGQvdHlwZXMnO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIsIHNjYWxlQmFuZCB9IGZyb20gJ0B2aXN4L3NjYWxlJztcbmltcG9ydCB7IGdldEJhckZpbGwgfSBmcm9tICcuL2dldEJhckZpbGwnO1xuaW1wb3J0IHsgYnVpbGRNYXJnaW4gfSBmcm9tICcuLi8uLi91dGlscy9idWlsZE1hcmdpbic7XG5pbXBvcnQgeyBDaGFydE9uVmlld0NsaWNrLCBEYXRhSXRlbSwgVGljayB9IGZyb20gJ3NoYXJlZC1sb2dpYy9zcmMvQ2hhcnRzVjIvdHlwZXMnO1xuaW1wb3J0IHsgbGlnaHRlbkNvbG9yIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbG9yLmZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9jc3MnO1xuaW1wb3J0IHsgQmFyR3JvdXBCYXIsIEJhckdyb3VwIGFzIEJhckdyb3VwVHlwZSB9IGZyb20gJ0B2aXN4L3NoYXBlL2xpYi90eXBlcyc7XG5pbXBvcnQgeyB1c2VGbGF0dGVuZWREYXRhIH0gZnJvbSAnLi4vaG9va3MvdXNlRmxhdHRlbmVkRGF0YSc7XG5cbi8vIE5lZWQgdG8gbG9vayBhdCB1cGRhdGluZyBCYXJDaGFydCB0byB1c2UgdGhpcyB0eXBlIG1ldGhvZCBvZiByZW5kZXJpbmcgLSBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC92aXN4LWJhci1jaGFydC1qOXNtcGo/ZmlsZT0lMkZFeGFtcGxlLnRzeFxuLy8gQ3VycmVudGx5IGl0J3MgdXNpbmcgU3RhY2tlZCBDaGFydCB3aGljaCBpc24ndCB0ZWNobmljYWxseSBjb3JyZWN0XG5cbmNvbnN0IEFYSVNfVElUTEVfU1RZTEVTOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyBvcGFjaXR5OiAnMC43NScsIGZvbnRXZWlnaHQ6ICdib2xkJyB9O1xuXG5leHBvcnQgdHlwZSBCYXJDaGFydFByb3BzID0ge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgdGhlbWU/OiBDaGFydFRoZW1lO1xuICBjaGFydDogQmFyQ2hhcnRSZXByZXNlbnRhdGlvbjtcbiAgb3B0aW9uczoge1xuICAgIHN0YWNrZWQ6IGJvb2xlYW47XG4gICAgc2hvd1JvdW5kZWRUb3RhbDogYm9vbGVhbjtcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xuICAgIHJlbW92ZVN0cm9rZTogYm9vbGVhbjtcbiAgICBheGlzOiB7XG4gICAgICBzaG93WEF4aXNMYWJlbHM6IGJvb2xlYW47XG4gICAgICBzaG93WUF4aXNMYWJlbHM6IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbiAgb25DbGljazogKHBhcmFtczogQ2hhcnRPblZpZXdDbGljaykgPT4gdm9pZDtcbiAgZW5hYmxlSG92ZXI/OiBib29sZWFuO1xufTtcblxuY29uc3QgQkFSX1JBRElVUyA9IDI7XG5cbmNvbnN0IFBBRERJTkcgPSB7XG4gIHBhZGRpbmdPdXRlcjogMC4wNSxcbiAgcGFkZGluZ0lubmVyOiAwLjMsXG59O1xuXG5leHBvcnQgY29uc3QgQmFyQ2hhcnQgPSAoeyBjaGFydCwgd2lkdGgsIGhlaWdodCwgb3B0aW9ucywgdGhlbWUsIG9uQ2xpY2ssIGVuYWJsZUhvdmVyIH06IEJhckNoYXJ0UHJvcHMpID0+IHtcbiAgY29uc3QgeyB0b29sdGlwT3BlbiwgdG9vbHRpcExlZnQgPSAwLCB0b29sdGlwVG9wID0gMCwgdG9vbHRpcERhdGEsIGhpZGVUb29sdGlwLCBzaG93VG9vbHRpcCB9ID0gdXNlVG9vbHRpcDx7XG4gICAgW2tleUlkOiBzdHJpbmddOiBEYXRhSXRlbTtcbiAgfSB8IG51bGw+KCk7XG5cbiAgY29uc3QgbWFyZ2luID0gYnVpbGRNYXJnaW4oY2hhcnQueS50aWNrcywgb3B0aW9ucy5heGlzLnNob3dZQXhpc0xhYmVscywgY2hhcnQueS50aXRsZSAhPSBudWxsLCBjaGFydC54LnRpdGxlICE9IG51bGwpO1xuXG4gIC8vIGNvbnN0IFt2aXNpYmxlWUtleXMsIHNldFZpc2libGVZS2V5c10gPSB1c2VTdGF0ZShjaGFydC5iYXJzLm1hcCgobGVnZW5kSXRlbSkgPT4gbGVnZW5kSXRlbS55S2V5KSk7XG5cbiAgY29uc3QgaW5uZXJXaWR0aCA9IHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gIGNvbnN0IGlubmVySGVpZ2h0ID0gaGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSAob3B0aW9ucy5zaG93TGVnZW5kID8gNDAgOiAwKTtcbiAgY29uc3QgeEtleSA9IGNoYXJ0Lngua2V5O1xuICBjb25zdCB4U2NhbGVLZXkgPSBjaGFydC54LnNjYWxlLmtleTtcbiAgY29uc3QgeVNjYWxlS2V5cyA9IGNoYXJ0Lnkua2V5cztcbiAgY29uc3QgeFNjYWxlRGF0YVR5cGU6IERhdGFUeXBlID0gY2hhcnQueC5zY2FsZS5kYXRhVHlwZTtcblxuICBjb25zdCB4U2NhbGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoeFNjYWxlRGF0YVR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPHN0cmluZz4oe1xuICAgICAgICByYW5nZTogWzAsIGlubmVyV2lkdGhdLFxuICAgICAgICBkb21haW46IHhTY2FsZUtleVxuICAgICAgICAgID8gWy4uLmNoYXJ0LmRhdGEubWFwKGQgPT4gKGRbeFNjYWxlS2V5XSAmJiBkW3hTY2FsZUtleV0udmFsdWUgIT09IG51bGwgPyBTdHJpbmcoZFt4U2NhbGVLZXldLnZhbHVlKSA6ICcnKSldXG4gICAgICAgICAgOiBbXSxcbiAgICAgICAgLi4uUEFERElORyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh4U2NhbGVEYXRhVHlwZSA9PT0gJ2RhdGVfdGltZScgJiYgeFNjYWxlS2V5KSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPERhdGU+KHtcbiAgICAgICAgcmFuZ2U6IFswLCBpbm5lcldpZHRoXSxcbiAgICAgICAgZG9tYWluOiBjaGFydC5kYXRhLm1hcChkID0+IG5ldyBEYXRlKGRbeFNjYWxlS2V5XS52YWx1ZSBhcyBzdHJpbmcpKSxcbiAgICAgICAgLi4uUEFERElORyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh4U2NhbGVEYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgeFNjYWxlS2V5KSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPG51bWJlcj4oe1xuICAgICAgICByYW5nZTogWzAsIGlubmVyV2lkdGhdLFxuICAgICAgICBkb21haW46IGNoYXJ0LmRhdGEubWFwKGQgPT4gKGRbeFNjYWxlS2V5XSAmJiBkW3hTY2FsZUtleV0udmFsdWUgIT09IG51bGwgPyBOdW1iZXIoZFt4U2NhbGVLZXldLnZhbHVlKSA6IDApKSxcbiAgICAgICAgLi4uUEFERElORyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9LCBbaW5uZXJXaWR0aCwgY2hhcnQueCwgY2hhcnQuZGF0YV0pO1xuXG4gIGNvbnN0IHlTY2FsZSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNjYWxlTGluZWFyPG51bWJlcj4oe1xuICAgICAgICByYW5nZTogW2lubmVySGVpZ2h0LCAwXSxcbiAgICAgICAgZG9tYWluOlxuICAgICAgICAgIGNoYXJ0Lnkuc2NhbGUub3JkZXJpbmcgPT09ICdhc2MnXG4gICAgICAgICAgICA/IFtjaGFydC55LnNjYWxlLm1pbiBhcyBudW1iZXIsIGNoYXJ0Lnkuc2NhbGUubWF4IGFzIG51bWJlcl1cbiAgICAgICAgICAgIDogW2NoYXJ0Lnkuc2NhbGUubWF4IGFzIG51bWJlciwgY2hhcnQueS5zY2FsZS5taW4gYXMgbnVtYmVyXSxcbiAgICAgICAgbmljZTogdHJ1ZSxcbiAgICAgICAgcm91bmQ6IHRydWUsXG4gICAgICB9KSxcbiAgICBbaW5uZXJIZWlnaHQsIGNoYXJ0LnldXG4gICk7XG5cbiAgY29uc3QgaW5uZXJYU2NhbGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMuc3RhY2tlZCAmJiB4U2NhbGUgJiYgJ2JhbmR3aWR0aCcgaW4geFNjYWxlKSB7XG4gICAgICByZXR1cm4gc2NhbGVCYW5kPHN0cmluZz4oe1xuICAgICAgICByYW5nZTogWzAsIHhTY2FsZT8uYmFuZHdpZHRoKCldLFxuICAgICAgICBkb21haW46IHlTY2FsZUtleXMsXG4gICAgICAgIHBhZGRpbmc6IDAuMSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFt4U2NhbGUsIHlTY2FsZUtleXMsIG9wdGlvbnMuc3RhY2tlZCwgeFNjYWxlRGF0YVR5cGVdKTtcblxuICBjb25zdCBkYXRhRmxhdHRlbmVkID0gdXNlRmxhdHRlbmVkRGF0YTxCYXJDaGFydFJlcHJlc2VudGF0aW9uPih4U2NhbGVLZXksIHhTY2FsZURhdGFUeXBlLCBjaGFydCk7XG5cbiAgY29uc3QgZ29hbExpbmVzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY2hhcnQuZ29hbExpbmVzLm1hcChnb2FsTGluZSA9PiAoXG4gICAgICAgIDxHb2FsTGluZVxuICAgICAgICAgIGtleT17Z29hbExpbmUudmFsdWV9XG4gICAgICAgICAgaW5uZXJXaWR0aD17aW5uZXJXaWR0aH1cbiAgICAgICAgICB5PXt5U2NhbGUoZ29hbExpbmUudmFsdWUpfVxuICAgICAgICAgIGdvYWxMaW5lPXtnb2FsTGluZX1cbiAgICAgICAgICBtYXJnaW49e3tcbiAgICAgICAgICAgIHRvcDogbWFyZ2luLnRvcCxcbiAgICAgICAgICAgIGxlZnQ6IG1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IG1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgIGJvdHRvbTogbWFyZ2luLmJvdHRvbSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKSksXG4gICAgW2NoYXJ0LmdvYWxMaW5lcywgbWFyZ2luLCBpbm5lcldpZHRoLCB5U2NhbGVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PFNWR0VsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIXhLZXkgfHwgIXhTY2FsZUtleSB8fCB4U2NhbGUgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgY29uc3QgdG9vbHRpcERhdGEgPSBnZXRUb29sdGlwRGF0YSh7XG4gICAgICAgIGRhdGE6IGNoYXJ0LmRhdGEsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBtYXJnaW4sXG4gICAgICAgIHhTY2FsZUtleSxcbiAgICAgICAgeFNjYWxlRGF0YVR5cGUsXG4gICAgICAgIHhPcmRlcmluZzogY2hhcnQueC5zY2FsZS5vcmRlcmluZyxcbiAgICAgICAgeFNjYWxlLFxuICAgICAgICBjaGFydFR5cGU6ICdiYXInLFxuICAgICAgfSk7XG5cbiAgICAgIHNob3dUb29sdGlwKHtcbiAgICAgICAgdG9vbHRpcExlZnQ6IHRvb2x0aXBEYXRhPy50b29sdGlwTGVmdCxcbiAgICAgICAgdG9vbHRpcFRvcDogdG9vbHRpcERhdGE/LnRvb2x0aXBUb3AsXG4gICAgICAgIHRvb2x0aXBEYXRhOiB0b29sdGlwRGF0YT8udG9vbHRpcERhdGEsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzaG93VG9vbHRpcCwgeFNjYWxlLCBtYXJnaW4sIHhLZXksIHhTY2FsZUtleSwgeFNjYWxlRGF0YVR5cGUsIGNoYXJ0Lnguc2NhbGUub3JkZXJpbmcsIGNoYXJ0LmRhdGFdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoaWRlVG9vbHRpcCgpO1xuICB9LCBbaGlkZVRvb2x0aXBdKTtcblxuICBjb25zdCBoYW5kbGVPbkJhckNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PFNWR1JlY3RFbGVtZW50LCBNb3VzZUV2ZW50PiwgYmFyR3JvdXA6IEJhckdyb3VwVHlwZTxzdHJpbmc+LCBiYXI6IEJhckdyb3VwQmFyPHN0cmluZz4pID0+IHtcbiAgICAgIG9uQ2xpY2soe1xuICAgICAgICBjbGlja2VkVmFsdWU6IHtcbiAgICAgICAgICBpbmRleDogYmFyR3JvdXAuaW5kZXgsXG4gICAgICAgICAgeToge1xuICAgICAgICAgICAga2V5OiBiYXIua2V5LFxuICAgICAgICAgICAgdmFsdWU6IGJhci52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgIC4uLmNoYXJ0LngudGlja3NbYmFyR3JvdXAuaW5kZXhdLFxuICAgICAgICAgICAgdmFsdWU6IGNoYXJ0LmRhdGFbYmFyR3JvdXAuaW5kZXhdW3hLZXldLnZhbHVlID8/ICcnLFxuICAgICAgICAgICAga2V5OiB4S2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNsaWNrRXZlbnQ6IGV2ZW50LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbb25DbGljaywgY2hhcnQuZGF0YSwgeEtleV1cbiAgKTtcblxuICBjb25zdCB0aGVtZUNTUyA9IHVzZU1lbW8oKCkgPT4gZ2V0Q2hhcnRUaGVtZUNTUyh0aGVtZSksIFt0aGVtZV0pO1xuXG4gIGNvbnN0IHlUaWNrVmFsdWVzID0gY2hhcnQueS50aWNrcy5tYXAodGljayA9PiBOdW1iZXIodGljay52YWx1ZSkpO1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgey8qIHdpZHRoL2hlaWdodCAxMDAlIHJlcXVpcmVkIG9yIHVzZVBhcmVudFNpemUoKSBjb250aW51b3VzbHkgc2NhbGVzIGFzIHBhcmVudCBlbGVtZW50IGhhcyBubyBzcGVjaWZpZWQgaGVpZ2h0ICovfVxuICAgICAgPHN2Z1xuICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgIGhlaWdodD17aGVpZ2h0IC0gKG9wdGlvbnMuc2hvd0xlZ2VuZCA/IDQwIDogMCl9XG4gICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVNb3VzZU1vdmV9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlTW91c2VMZWF2ZX1cbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJyB9fVxuICAgICAgPlxuICAgICAgICA8R3JvdXAgbGVmdD17bWFyZ2luLmxlZnR9IHRvcD17bWFyZ2luLnRvcH0+XG4gICAgICAgICAgPEdyaWRSb3dzXG4gICAgICAgICAgICB0aWNrVmFsdWVzPXt5VGlja1ZhbHVlcy5sZW5ndGggPiAwID8geVRpY2tWYWx1ZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBzY2FsZT17eVNjYWxlfVxuICAgICAgICAgICAgd2lkdGg9e2lubmVyV2lkdGh9XG4gICAgICAgICAgICBoZWlnaHQ9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgcG9pbnRlckV2ZW50cz1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5PVwiMC41IDVcIlxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg9e29wdGlvbnMucmVtb3ZlU3Ryb2tlID8gMCA6IDJ9XG4gICAgICAgICAgICBsaW5lU3R5bGU9e3tcbiAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgc3Ryb2tlOiB0aGVtZUNTUy5ncmlkLnN0cm9rZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7b3B0aW9ucy5heGlzLnNob3dYQXhpc0xhYmVscyAmJiAoXG4gICAgICAgICAgICA8QXhpc0JvdHRvbVxuICAgICAgICAgICAgICBsYWJlbD17Y2hhcnQueC50aXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGxhYmVsUHJvcHM9e3sgc3R5bGU6IEFYSVNfVElUTEVfU1RZTEVTIH19XG4gICAgICAgICAgICAgIGxhYmVsT2Zmc2V0PXttYXJnaW4uYm90dG9tVGl0bGVPZmZzZXR9XG4gICAgICAgICAgICAgIGhpZGVUaWNrc1xuICAgICAgICAgICAgICB0b3A9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHNjYWxlPXt4U2NhbGV9XG4gICAgICAgICAgICAgIHRpY2tGb3JtYXQ9e3ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdGljazogVGljazxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGlmIGNoYXJ0Lnguc2NhbGUua2V5ICE9PSBjaGFydC54LmtleSwgdXNlIHRpY2tWYWx1ZS5zY2FsZVZhbHVlIE5PVCB0aWNrVmFsdWV2YWx1ZVxuICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdUaWNrVmFsdWUgPSBjaGFydC54LnRpY2tzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIHRpY2tWYWx1ZSA9PiB0aWNrVmFsdWUuc2NhbGVWYWx1ZSAmJiBuZXcgRGF0ZSh0aWNrVmFsdWUuc2NhbGVWYWx1ZSkudmFsdWVPZigpID09PSB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIHRpY2sgPSBtYXRjaGluZ1RpY2tWYWx1ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1RpY2tWYWx1ZSA9IGNoYXJ0Py54Py50aWNrcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICB0aWNrVmFsdWUgPT4gKHRpY2tWYWx1ZT8uc2NhbGVWYWx1ZSAhPT0gbnVsbCA/IHRpY2tWYWx1ZT8uc2NhbGVWYWx1ZSA6IDApID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHRpY2sgPSBtYXRjaGluZ1RpY2tWYWx1ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aWNrKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGljay5mb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGljay5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aWNrLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsgLy8gP1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGlja1ZhbHVlcz17XG4gICAgICAgICAgICAgICAgY2hhcnQ/Lng/LnRpY2tzPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IGNoYXJ0LngudGlja3MubWFwKHRpY2sgPT4gKHRpY2s/LnNjYWxlVmFsdWUgIT09IG51bGwgPyB0aWNrPy5zY2FsZVZhbHVlIDogMCkpXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRpY2tDb21wb25lbnQ9eyh7IGZvcm1hdHRlZFZhbHVlLCAuLi50aWNrUHJvcHMgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt0aGVtZUNTUy5sYWJlbHN9IHsuLi50aWNrUHJvcHN9PlxuICAgICAgICAgICAgICAgICAge2Zvcm1hdHRlZFZhbHVlfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgc3Ryb2tlPXt0aGVtZUNTUy5heGlzLnN0cm9rZX1cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9e29wdGlvbnMucmVtb3ZlU3Ryb2tlID8gMCA6IDF9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge29wdGlvbnMuYXhpcy5zaG93WUF4aXNMYWJlbHMgJiYgKFxuICAgICAgICAgICAgPEF4aXNMZWZ0XG4gICAgICAgICAgICAgIGxhYmVsT2Zmc2V0PXttYXJnaW4ubGVmdFRpdGxlT2Zmc2V0fVxuICAgICAgICAgICAgICBsYWJlbD17Y2hhcnQueS50aXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGxhYmVsUHJvcHM9e3sgc3R5bGU6IEFYSVNfVElUTEVfU1RZTEVTIH19XG4gICAgICAgICAgICAgIGhpZGVUaWNrc1xuICAgICAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgICAgICB0b3A9ezB9XG4gICAgICAgICAgICAgIHNjYWxlPXt5U2NhbGV9XG4gICAgICAgICAgICAgIHRpY2tGb3JtYXQ9e3ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY2hhcnQueS50aWNrcy5maWx0ZXIodGljayA9PiB0aWNrLnZhbHVlID09PSB2YWx1ZSlbMF07XG5cbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0aWNrVmFsdWVzPXt5VGlja1ZhbHVlc31cbiAgICAgICAgICAgICAgdGlja0NvbXBvbmVudD17KHsgZm9ybWF0dGVkVmFsdWUsIC4uLnRpY2tQcm9wcyB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPFRleHQgd2lkdGg9ezEwfSBzdHlsZT17dGhlbWVDU1MubGFiZWxzfSB7Li4udGlja1Byb3BzfT5cbiAgICAgICAgICAgICAgICAgIHtmb3JtYXR0ZWRWYWx1ZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHN0cm9rZT17dGhlbWU/LmF4aXM/LnN0cm9rZSA/PyAndHJhbnNwYXJlbnQnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxHcm91cD5cbiAgICAgICAgICAgIHshb3B0aW9ucy5zdGFja2VkICYmIChcbiAgICAgICAgICAgICAgPEJhckdyb3VwXG4gICAgICAgICAgICAgICAgZGF0YT17ZGF0YUZsYXR0ZW5lZH1cbiAgICAgICAgICAgICAgICBrZXlzPXt5U2NhbGVLZXlzfVxuICAgICAgICAgICAgICAgIGhlaWdodD17aW5uZXJIZWlnaHR9XG4gICAgICAgICAgICAgICAgeDA9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoeFNjYWxlRGF0YVR5cGUgPT09ICdzdHJpbmcnKSByZXR1cm4geFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCB4VmFsdWVBZGp1c3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJ1xuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogeFNjYWxlRGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgPyBOdW1iZXIoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKHhWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFZhbHVlQWRqdXN0ZWQ7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgeDBTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB4MVNjYWxlPXtpbm5lclhTY2FsZX1cbiAgICAgICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgICAgICBjb2xvcj17KCkgPT4gJyd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YmFyR3JvdXBzID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJHcm91cHMubWFwKGJhckdyb3VwID0+IChcbiAgICAgICAgICAgICAgICAgICAgPEdyb3VwIGtleT17YGJhci1ncm91cC0ke2Jhckdyb3VwLmluZGV4fS0ke2Jhckdyb3VwLngwfWB9IGxlZnQ9e2Jhckdyb3VwLngwfT5cbiAgICAgICAgICAgICAgICAgICAgICB7YmFyR3JvdXAuYmFycy5tYXAoYmFyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIudmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhci5oZWlnaHQgPCAwIHx8IGJhci53aWR0aCA8IDApIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1ncm91cC1iYXItJHtiYXJHcm91cC5pbmRleH0tJHtiYXIuaW5kZXh9LSR7YmFyLnZhbHVlfS0ke2Jhci5rZXl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PXtiYXIueX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17YmFyLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4gaGFuZGxlT25CYXJDbGljayhlLCBiYXJHcm91cCwgYmFyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVIb3Zlcj17ZW5hYmxlSG92ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9CYXJHcm91cD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBIb3cgdG8gd2UgZ2V0ICdzY2FsZVZhbHVlJyBoZXJlPyBXaWxsIHdlIG5lZWQgdG8gc3RhcnQgc3RvcmluZyBzY2FsZUtleSBhcyB3ZWxsIGFzIHhLZXk/ICovfVxuICAgICAgICAgICAge29wdGlvbnMuc3RhY2tlZCAmJiAoXG4gICAgICAgICAgICAgIDxCYXJTdGFja1xuICAgICAgICAgICAgICAgIHg9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuICAgICAgICAgICAgICAgICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnc3RyaW5nJykgcmV0dXJuIHhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlQWRqdXN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB4U2NhbGVEYXRhVHlwZSA9PT0gJ2RhdGVfdGltZSdcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHhTY2FsZURhdGFUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyh4VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhWYWx1ZUFkanVzdGVkO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHhTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIHlTY2FsZT17eVNjYWxlfVxuICAgICAgICAgICAgICAgIGRhdGE9e2RhdGFGbGF0dGVuZWR9XG4gICAgICAgICAgICAgICAga2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgICAgICAgIGNvbG9yPXsoKSA9PiAnJ31cbiAgICAgICAgICAgICAgICBoZWlnaHQ9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXtpbm5lcldpZHRofVxuICAgICAgICAgICAgICAgIG9mZnNldD1cIm5vbmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2JhclN0YWNrcyA9PlxuICAgICAgICAgICAgICAgICAgYmFyU3RhY2tzLm1hcChiYXJTdGFjayA9PlxuICAgICAgICAgICAgICAgICAgICBiYXJTdGFjay5iYXJzLm1hcChiYXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIuaGVpZ2h0IDwgMykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQkFSX1BBRERJTkcgPSAxLjU7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1zdGFjay0ke2JhclN0YWNrLmluZGV4fS0ke2Jhci5pbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeT17YmFyLnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtiYXIud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodCAtIEJBUl9QQURESU5HfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIuYmFyLmRhdGEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByeD17QkFSX1JBRElVU31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvQmFyU3RhY2s+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgIDwvR3JvdXA+XG4gICAgICAgIHsvKiAtLS0tLSBUT09MVElQIENST1NTSEFJUiAtLS0tLSAqL31cbiAgICAgICAge3Rvb2x0aXBEYXRhICYmIChcbiAgICAgICAgICA8Zz5cbiAgICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICAgIGZyb209e3sgeDogdG9vbHRpcExlZnQsIHk6IG1hcmdpbi50b3AgfX1cbiAgICAgICAgICAgICAgdG89e3sgeDogdG9vbHRpcExlZnQsIHk6IGlubmVySGVpZ2h0ICsgbWFyZ2luLnRvcCB9fVxuICAgICAgICAgICAgICBzdHJva2U9eycjYWFhJ31cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJub25lXCJcbiAgICAgICAgICAgICAgb3BhY2l0eT17MC44fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICl9XG4gICAgICAgIHsvKiAtLS0tLSBHT0FMIExJTkVTIC0tLS0tLSAqL31cbiAgICAgICAge2dvYWxMaW5lc31cbiAgICAgIDwvc3ZnPlxuICAgICAgey8qIC0tLS0tIExFR0VORCAtLS0tLSAqL31cbiAgICAgIHtvcHRpb25zLnNob3dMZWdlbmQgJiYgKFxuICAgICAgICA8TGVnZW5kXG4gICAgICAgICAgbGVnZW5kSXRlbXM9e2NoYXJ0LmJhcnN9XG4gICAgICAgICAgdmlzaWJsZVlLZXlzPXtjaGFydC5iYXJzLm1hcChsZWdlbmRJdGVtID0+IGxlZ2VuZEl0ZW0ueUtleSl9XG4gICAgICAgICAgc2V0VmlzaWJsZVlLZXlzPXsoKSA9PiB7fX1cbiAgICAgICAgICBrZXlzPXtjaGFydC5rZXlzfVxuICAgICAgICAgIGNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzPXtjaGFydC5jb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlc31cbiAgICAgICAgICBtYXJnaW5MZWZ0PXttYXJnaW4ubGVmdCAtIG1hcmdpbi5sZWZ0VGl0bGVPZmZzZXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgey8qIC0tLS0tIFRPT0xUSVAgLS0tLS0gKi99XG4gICAgICB7dG9vbHRpcE9wZW4gJiYgdG9vbHRpcERhdGEgJiYgeEtleSAmJiAoXG4gICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgdG9vbHRpcERhdGE9e3Rvb2x0aXBEYXRhfVxuICAgICAgICAgIHRvb2x0aXBMZWZ0PXt0b29sdGlwTGVmdH1cbiAgICAgICAgICB0b29sdGlwVG9wPXt0b29sdGlwVG9wfVxuICAgICAgICAgIHhLZXk9e3hLZXl9XG4gICAgICAgICAga2V5cz17Y2hhcnQua2V5c31cbiAgICAgICAgICB2aXNpYmxlWUtleXM9e2NoYXJ0LmJhcnMubWFwKGxlZ2VuZEl0ZW0gPT4gbGVnZW5kSXRlbS55S2V5KX1cbiAgICAgICAgICB5S2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgIGxlZ2VuZEl0ZW1zPXtjaGFydC5iYXJzfVxuICAgICAgICAgIHNob3dSb3VuZGVkVG90YWw9e29wdGlvbnMuc2hvd1JvdW5kZWRUb3RhbH1cbiAgICAgICAgICBjb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlcz17Y2hhcnQuY29uZGl0aW9uYWxGb3JtYXR0aW5nUnVsZXN9XG4gICAgICAgICAgdGhlbWU9e3RoZW1lQ1NTLnBvcG92ZXJNZW51c31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9GcmFnbWVudD5cbiAgKTtcbn07XG5cbmNvbnN0IEJhciA9IChwcm9wczoge1xuICBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudDxTVkdSZWN0RWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIGZpbGw/OiBzdHJpbmc7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAga2V5OiBzdHJpbmc7XG4gIGVuYWJsZUhvdmVyPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgW2ZpbGxDb2xvciwgc2V0RmlsbENvbG9yXSA9IHVzZVN0YXRlKHByb3BzLmZpbGwpO1xuICByZXR1cm4gKFxuICAgIDxyZWN0XG4gICAgICBrZXk9e3Byb3BzLmtleX1cbiAgICAgIHg9e3Byb3BzLnh9XG4gICAgICB5PXtwcm9wcy55fVxuICAgICAgd2lkdGg9e3Byb3BzLndpZHRofVxuICAgICAgaGVpZ2h0PXtwcm9wcy5oZWlnaHR9XG4gICAgICBmaWxsPXtmaWxsQ29sb3J9XG4gICAgICByeD17QkFSX1JBRElVU31cbiAgICAgIG9uQ2xpY2s9e3Byb3BzLm9uQ2xpY2t9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihsaWdodGVuQ29sb3IocHJvcHMuZmlsbCwgMC44KSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihwcm9wcy5maWxsKX1cbiAgICAgIGNsYXNzTmFtZT17cHJvcHMuZW5hYmxlSG92ZXIgPyBjc3MoeyBjdXJzb3I6ICdwb2ludGVyJyB9KSA6ICcnfVxuICAgIC8+XG4gICk7XG59O1xuIl19 */",
41921
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__$7
41909
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhckNoYXJ0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1WXFDIiwiZmlsZSI6IkJhckNoYXJ0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhckNoYXJ0UmVwcmVzZW50YXRpb24gfSBmcm9tICdzaGFyZWQtbG9naWMvc3JjL0JhckNoYXJ0VjIvdHlwZXMnO1xuaW1wb3J0IHsgQ2hhcnRUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSAnQHZpc3gvZ3JvdXAnO1xuaW1wb3J0IHsgZ2V0Q2hhcnRUaGVtZUNTUywgZ2V0VG9vbHRpcERhdGEgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL1Rvb2x0aXAnO1xuaW1wb3J0IHsgdXNlVG9vbHRpcCB9IGZyb20gJ0B2aXN4L3Rvb2x0aXAnO1xuaW1wb3J0IHsgTGVnZW5kIH0gZnJvbSAnLi4vTGVnZW5kJztcbmltcG9ydCB7IEJhckdyb3VwLCBCYXJTdGFjaywgTGluZSB9IGZyb20gJ0B2aXN4L3NoYXBlJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnc2hhcmVkLWxvZ2ljL3NyYy9GaWVsZC90eXBlcyc7XG5pbXBvcnQgeyBzY2FsZUxpbmVhciwgc2NhbGVCYW5kIH0gZnJvbSAnQHZpc3gvc2NhbGUnO1xuaW1wb3J0IHsgZ2V0QmFyRmlsbCB9IGZyb20gJy4vZ2V0QmFyRmlsbCc7XG5pbXBvcnQgeyBidWlsZE1hcmdpbiB9IGZyb20gJy4uLy4uL3V0aWxzL2J1aWxkTWFyZ2luJztcbmltcG9ydCB7IENoYXJ0T25WaWV3Q2xpY2ssIERhdGFJdGVtLCBUaWNrIH0gZnJvbSAnc2hhcmVkLWxvZ2ljL3NyYy9DaGFydHNWMi90eXBlcyc7XG5pbXBvcnQgeyBsaWdodGVuQ29sb3IgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvY29sb3IuZnVuY3Rpb25zJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBCYXJHcm91cEJhciwgQmFyR3JvdXAgYXMgQmFyR3JvdXBUeXBlIH0gZnJvbSAnQHZpc3gvc2hhcGUvbGliL3R5cGVzJztcbmltcG9ydCB7IHVzZUZsYXR0ZW5lZERhdGEgfSBmcm9tICcuLi9ob29rcy91c2VGbGF0dGVuZWREYXRhJztcbmltcG9ydCBHb2FsTGluZXMgZnJvbSAnLi4vR29hbExpbmUvR29hbExpbmVzJztcbmltcG9ydCB7IEF4aXNCb3R0b20gfSBmcm9tICcuLi9BeGlzL0F4aXNCb3R0b20nO1xuaW1wb3J0IHsgQXhpc0xlZnQgfSBmcm9tICcuLi9BeGlzL0F4aXNMZWZ0JztcbmltcG9ydCB7IEdyaWRSb3dzIH0gZnJvbSAnLi4vR3JpZFJvd3MvR3JpZFJvd3MnO1xuaW1wb3J0IHsgQ2hhcnRXcmFwcGVyIH0gZnJvbSAnLi4vQ2hhcnRXcmFwcGVyL0NoYXJ0V3JhcHBlcic7XG5cbi8vIE5lZWQgdG8gbG9vayBhdCB1cGRhdGluZyBCYXJDaGFydCB0byB1c2UgdGhpcyB0eXBlIG1ldGhvZCBvZiByZW5kZXJpbmcgLSBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC92aXN4LWJhci1jaGFydC1qOXNtcGo/ZmlsZT0lMkZFeGFtcGxlLnRzeFxuLy8gQ3VycmVudGx5IGl0J3MgdXNpbmcgU3RhY2tlZCBDaGFydCB3aGljaCBpc24ndCB0ZWNobmljYWxseSBjb3JyZWN0XG5cbmV4cG9ydCB0eXBlIEJhckNoYXJ0UHJvcHMgPSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB0aGVtZT86IENoYXJ0VGhlbWU7XG4gIGNoYXJ0OiBCYXJDaGFydFJlcHJlc2VudGF0aW9uO1xuICBvcHRpb25zOiB7XG4gICAgc3RhY2tlZDogYm9vbGVhbjtcbiAgICBzaG93Um91bmRlZFRvdGFsOiBib29sZWFuO1xuICAgIHNob3dMZWdlbmQ6IGJvb2xlYW47XG4gICAgcmVtb3ZlU3Ryb2tlOiBib29sZWFuO1xuICAgIGF4aXM6IHtcbiAgICAgIHNob3dYQXhpc0xhYmVsczogYm9vbGVhbjtcbiAgICAgIHNob3dZQXhpc0xhYmVsczogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuICBvbkNsaWNrOiAocGFyYW1zOiBDaGFydE9uVmlld0NsaWNrKSA9PiB2b2lkO1xuICBlbmFibGVIb3Zlcj86IGJvb2xlYW47XG59O1xuXG5jb25zdCBCQVJfUkFESVVTID0gMjtcblxuY29uc3QgUEFERElORyA9IHtcbiAgcGFkZGluZ091dGVyOiAwLjA1LFxuICBwYWRkaW5nSW5uZXI6IDAuMyxcbn07XG5cbmV4cG9ydCBjb25zdCBCYXJDaGFydCA9ICh7IGNoYXJ0LCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zLCB0aGVtZSwgb25DbGljaywgZW5hYmxlSG92ZXIgfTogQmFyQ2hhcnRQcm9wcykgPT4ge1xuICBjb25zdCB7IHRvb2x0aXBPcGVuLCB0b29sdGlwTGVmdCA9IDAsIHRvb2x0aXBUb3AgPSAwLCB0b29sdGlwRGF0YSwgaGlkZVRvb2x0aXAsIHNob3dUb29sdGlwIH0gPSB1c2VUb29sdGlwPHtcbiAgICBba2V5SWQ6IHN0cmluZ106IERhdGFJdGVtO1xuICB9IHwgbnVsbD4oKTtcblxuICBjb25zdCBtYXJnaW4gPSBidWlsZE1hcmdpbihjaGFydC55LnRpY2tzLCBvcHRpb25zLmF4aXMuc2hvd1lBeGlzTGFiZWxzLCBjaGFydC55LnRpdGxlICE9IG51bGwsIGNoYXJ0LngudGl0bGUgIT0gbnVsbCk7XG5cbiAgLy8gY29uc3QgW3Zpc2libGVZS2V5cywgc2V0VmlzaWJsZVlLZXlzXSA9IHVzZVN0YXRlKGNoYXJ0LmJhcnMubWFwKChsZWdlbmRJdGVtKSA9PiBsZWdlbmRJdGVtLnlLZXkpKTtcblxuICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgY29uc3QgaW5uZXJIZWlnaHQgPSBoZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIChvcHRpb25zLnNob3dMZWdlbmQgPyA0MCA6IDApO1xuICBjb25zdCB4S2V5ID0gY2hhcnQueC5rZXk7XG4gIGNvbnN0IHhTY2FsZUtleSA9IGNoYXJ0Lnguc2NhbGUua2V5O1xuICBjb25zdCB5U2NhbGVLZXlzID0gY2hhcnQueS5rZXlzO1xuICBjb25zdCB4U2NhbGVEYXRhVHlwZTogRGF0YVR5cGUgPSBjaGFydC54LnNjYWxlLmRhdGFUeXBlO1xuXG4gIGNvbnN0IHhTY2FsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh4U2NhbGVEYXRhVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8c3RyaW5nPih7XG4gICAgICAgIHJhbmdlOiBbMCwgaW5uZXJXaWR0aF0sXG4gICAgICAgIGRvbWFpbjogeFNjYWxlS2V5XG4gICAgICAgICAgPyBbLi4uY2hhcnQuZGF0YS5tYXAoZCA9PiAoZFt4U2NhbGVLZXldICYmIGRbeFNjYWxlS2V5XS52YWx1ZSAhPT0gbnVsbCA/IFN0cmluZyhkW3hTY2FsZUtleV0udmFsdWUpIDogJycpKV1cbiAgICAgICAgICA6IFtdLFxuICAgICAgICAuLi5QQURESU5HLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJyAmJiB4U2NhbGVLZXkpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8RGF0ZT4oe1xuICAgICAgICByYW5nZTogWzAsIGlubmVyV2lkdGhdLFxuICAgICAgICBkb21haW46IGNoYXJ0LmRhdGEubWFwKGQgPT4gbmV3IERhdGUoZFt4U2NhbGVLZXldLnZhbHVlIGFzIHN0cmluZykpLFxuICAgICAgICAuLi5QQURESU5HLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnbnVtYmVyJyAmJiB4U2NhbGVLZXkpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8bnVtYmVyPih7XG4gICAgICAgIHJhbmdlOiBbMCwgaW5uZXJXaWR0aF0sXG4gICAgICAgIGRvbWFpbjogY2hhcnQuZGF0YS5tYXAoZCA9PiAoZFt4U2NhbGVLZXldICYmIGRbeFNjYWxlS2V5XS52YWx1ZSAhPT0gbnVsbCA/IE51bWJlcihkW3hTY2FsZUtleV0udmFsdWUpIDogMCkpLFxuICAgICAgICAuLi5QQURESU5HLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFtpbm5lcldpZHRoLCBjaGFydC54LCBjaGFydC5kYXRhXSk7XG5cbiAgY29uc3QgeVNjYWxlID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgc2NhbGVMaW5lYXI8bnVtYmVyPih7XG4gICAgICAgIHJhbmdlOiBbaW5uZXJIZWlnaHQsIDBdLFxuICAgICAgICBkb21haW46XG4gICAgICAgICAgY2hhcnQueS5zY2FsZS5vcmRlcmluZyA9PT0gJ2FzYydcbiAgICAgICAgICAgID8gW2NoYXJ0Lnkuc2NhbGUubWluIGFzIG51bWJlciwgY2hhcnQueS5zY2FsZS5tYXggYXMgbnVtYmVyXVxuICAgICAgICAgICAgOiBbY2hhcnQueS5zY2FsZS5tYXggYXMgbnVtYmVyLCBjaGFydC55LnNjYWxlLm1pbiBhcyBudW1iZXJdLFxuICAgICAgICBuaWNlOiB0cnVlLFxuICAgICAgICByb3VuZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgIFtpbm5lckhlaWdodCwgY2hhcnQueV1cbiAgKTtcblxuICBjb25zdCBpbm5lclhTY2FsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghb3B0aW9ucy5zdGFja2VkICYmIHhTY2FsZSAmJiAnYmFuZHdpZHRoJyBpbiB4U2NhbGUpIHtcbiAgICAgIHJldHVybiBzY2FsZUJhbmQ8c3RyaW5nPih7XG4gICAgICAgIHJhbmdlOiBbMCwgeFNjYWxlPy5iYW5kd2lkdGgoKV0sXG4gICAgICAgIGRvbWFpbjogeVNjYWxlS2V5cyxcbiAgICAgICAgcGFkZGluZzogMC4xLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW3hTY2FsZSwgeVNjYWxlS2V5cywgb3B0aW9ucy5zdGFja2VkLCB4U2NhbGVEYXRhVHlwZV0pO1xuXG4gIGNvbnN0IGRhdGFGbGF0dGVuZWQgPSB1c2VGbGF0dGVuZWREYXRhPEJhckNoYXJ0UmVwcmVzZW50YXRpb24+KHhTY2FsZUtleSwgeFNjYWxlRGF0YVR5cGUsIGNoYXJ0KTtcblxuICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8U1ZHRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICgheEtleSB8fCAheFNjYWxlS2V5IHx8IHhTY2FsZSA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB0b29sdGlwRGF0YSA9IGdldFRvb2x0aXBEYXRhKHtcbiAgICAgICAgZGF0YTogY2hhcnQuZGF0YSxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG1hcmdpbixcbiAgICAgICAgeFNjYWxlS2V5LFxuICAgICAgICB4U2NhbGVEYXRhVHlwZSxcbiAgICAgICAgeE9yZGVyaW5nOiBjaGFydC54LnNjYWxlLm9yZGVyaW5nLFxuICAgICAgICB4U2NhbGUsXG4gICAgICAgIGNoYXJ0VHlwZTogJ2JhcicsXG4gICAgICB9KTtcblxuICAgICAgc2hvd1Rvb2x0aXAoe1xuICAgICAgICB0b29sdGlwTGVmdDogdG9vbHRpcERhdGE/LnRvb2x0aXBMZWZ0LFxuICAgICAgICB0b29sdGlwVG9wOiB0b29sdGlwRGF0YT8udG9vbHRpcFRvcCxcbiAgICAgICAgdG9vbHRpcERhdGE6IHRvb2x0aXBEYXRhPy50b29sdGlwRGF0YSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3Nob3dUb29sdGlwLCB4U2NhbGUsIG1hcmdpbiwgeEtleSwgeFNjYWxlS2V5LCB4U2NhbGVEYXRhVHlwZSwgY2hhcnQueC5zY2FsZS5vcmRlcmluZywgY2hhcnQuZGF0YV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGhpZGVUb29sdGlwKCk7XG4gIH0sIFtoaWRlVG9vbHRpcF0pO1xuXG4gIGNvbnN0IGhhbmRsZU9uQmFyQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8U1ZHUmVjdEVsZW1lbnQsIE1vdXNlRXZlbnQ+LCBiYXJHcm91cDogQmFyR3JvdXBUeXBlPHN0cmluZz4sIGJhcjogQmFyR3JvdXBCYXI8c3RyaW5nPikgPT4ge1xuICAgICAgb25DbGljayh7XG4gICAgICAgIGNsaWNrZWRWYWx1ZToge1xuICAgICAgICAgIGluZGV4OiBiYXJHcm91cC5pbmRleCxcbiAgICAgICAgICB5OiB7XG4gICAgICAgICAgICBrZXk6IGJhci5rZXksXG4gICAgICAgICAgICB2YWx1ZTogYmFyLnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeDoge1xuICAgICAgICAgICAgLi4uY2hhcnQueC50aWNrc1tiYXJHcm91cC5pbmRleF0sXG4gICAgICAgICAgICB2YWx1ZTogY2hhcnQuZGF0YVtiYXJHcm91cC5pbmRleF1beEtleV0udmFsdWUgPz8gJycsXG4gICAgICAgICAgICBrZXk6IHhLZXksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xpY2tFdmVudDogZXZlbnQsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtvbkNsaWNrLCBjaGFydC5kYXRhLCB4S2V5XVxuICApO1xuXG4gIGNvbnN0IHRoZW1lQ1NTID0gdXNlTWVtbygoKSA9PiBnZXRDaGFydFRoZW1lQ1NTKHRoZW1lKSwgW3RoZW1lXSk7XG5cbiAgY29uc3QgeVRpY2tWYWx1ZXMgPSBjaGFydC55LnRpY2tzLm1hcCh0aWNrID0+IE51bWJlcih0aWNrLnZhbHVlKSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RnJhZ21lbnQ+XG4gICAgICB7Lyogd2lkdGgvaGVpZ2h0IDEwMCUgcmVxdWlyZWQgb3IgdXNlUGFyZW50U2l6ZSgpIGNvbnRpbnVvdXNseSBzY2FsZXMgYXMgcGFyZW50IGVsZW1lbnQgaGFzIG5vIHNwZWNpZmllZCBoZWlnaHQgKi99XG4gICAgICA8Q2hhcnRXcmFwcGVyXG4gICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgaGVpZ2h0PXtoZWlnaHR9XG4gICAgICAgIG9uTW91c2VNb3ZlPXtoYW5kbGVNb3VzZU1vdmV9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlTW91c2VMZWF2ZX1cbiAgICAgICAgc2hvd0xlZ2VuZD17b3B0aW9ucy5zaG93TGVnZW5kfVxuICAgICAgPlxuICAgICAgICA8R3JvdXAgbGVmdD17bWFyZ2luLmxlZnR9IHRvcD17bWFyZ2luLnRvcH0+XG4gICAgICAgICAgPEdyaWRSb3dzXG4gICAgICAgICAgICB0aWNrcz17eVRpY2tWYWx1ZXN9XG4gICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgIHdpZHRoPXtpbm5lcldpZHRofVxuICAgICAgICAgICAgaGVpZ2h0PXtpbm5lckhlaWdodH1cbiAgICAgICAgICAgIHJlbW92ZVN0cm9rZT17b3B0aW9ucy5yZW1vdmVTdHJva2V9XG4gICAgICAgICAgICB0aGVtZUNTUz17dGhlbWVDU1N9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QXhpc0JvdHRvbVxuICAgICAgICAgICAgeD17Y2hhcnQueH1cbiAgICAgICAgICAgIG1hcmdpbj17bWFyZ2lufVxuICAgICAgICAgICAgdGhlbWVDU1M9e3RoZW1lQ1NTfVxuICAgICAgICAgICAgc2hvdz17b3B0aW9ucy5heGlzLnNob3dYQXhpc0xhYmVsc31cbiAgICAgICAgICAgIHJlbW92ZVN0cm9rZT17b3B0aW9ucy5yZW1vdmVTdHJva2V9XG4gICAgICAgICAgICB4U2NhbGVEYXRhVHlwZT17eFNjYWxlRGF0YVR5cGV9XG4gICAgICAgICAgICB4U2NhbGU9e3hTY2FsZX1cbiAgICAgICAgICAgIGhlaWdodD17aW5uZXJIZWlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QXhpc0xlZnRcbiAgICAgICAgICAgIHNob3c9e29wdGlvbnMuYXhpcy5zaG93WUF4aXNMYWJlbHN9XG4gICAgICAgICAgICB5PXtjaGFydC55fVxuICAgICAgICAgICAgbWFyZ2luPXttYXJnaW59XG4gICAgICAgICAgICB0aGVtZUNTUz17dGhlbWVDU1N9XG4gICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgIHRpY2tzPXt5VGlja1ZhbHVlc31cbiAgICAgICAgICAgIHN0cm9rZT17dGhlbWU/LmF4aXM/LnN0cm9rZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxHcm91cD5cbiAgICAgICAgICAgIHshb3B0aW9ucy5zdGFja2VkICYmIChcbiAgICAgICAgICAgICAgPEJhckdyb3VwXG4gICAgICAgICAgICAgICAgZGF0YT17ZGF0YUZsYXR0ZW5lZH1cbiAgICAgICAgICAgICAgICBrZXlzPXt5U2NhbGVLZXlzfVxuICAgICAgICAgICAgICAgIGhlaWdodD17aW5uZXJIZWlnaHR9XG4gICAgICAgICAgICAgICAgeDA9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoeFNjYWxlRGF0YVR5cGUgPT09ICdzdHJpbmcnKSByZXR1cm4geFZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCB4VmFsdWVBZGp1c3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIHhTY2FsZURhdGFUeXBlID09PSAnZGF0ZV90aW1lJ1xuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogeFNjYWxlRGF0YVR5cGUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgPyBOdW1iZXIoeFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKHhWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFZhbHVlQWRqdXN0ZWQ7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgeDBTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB4MVNjYWxlPXtpbm5lclhTY2FsZX1cbiAgICAgICAgICAgICAgICB5U2NhbGU9e3lTY2FsZX1cbiAgICAgICAgICAgICAgICBjb2xvcj17KCkgPT4gJyd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YmFyR3JvdXBzID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJHcm91cHMubWFwKGJhckdyb3VwID0+IChcbiAgICAgICAgICAgICAgICAgICAgPEdyb3VwIGtleT17YGJhci1ncm91cC0ke2Jhckdyb3VwLmluZGV4fS0ke2Jhckdyb3VwLngwfWB9IGxlZnQ9e2Jhckdyb3VwLngwfT5cbiAgICAgICAgICAgICAgICAgICAgICB7YmFyR3JvdXAuYmFycy5tYXAoYmFyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIudmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhci5oZWlnaHQgPCAwIHx8IGJhci53aWR0aCA8IDApIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1ncm91cC1iYXItJHtiYXJHcm91cC5pbmRleH0tJHtiYXIuaW5kZXh9LSR7YmFyLnZhbHVlfS0ke2Jhci5rZXl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PXtiYXIueX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17YmFyLndpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4gaGFuZGxlT25CYXJDbGljayhlLCBiYXJHcm91cCwgYmFyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVIb3Zlcj17ZW5hYmxlSG92ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9CYXJHcm91cD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBIb3cgdG8gd2UgZ2V0ICdzY2FsZVZhbHVlJyBoZXJlPyBXaWxsIHdlIG5lZWQgdG8gc3RhcnQgc3RvcmluZyBzY2FsZUtleSBhcyB3ZWxsIGFzIHhLZXk/ICovfVxuICAgICAgICAgICAge29wdGlvbnMuc3RhY2tlZCAmJiAoXG4gICAgICAgICAgICAgIDxCYXJTdGFja1xuICAgICAgICAgICAgICAgIHg9e2QgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gZFt4U2NhbGVLZXldO1xuICAgICAgICAgICAgICAgICAgaWYgKHhTY2FsZURhdGFUeXBlID09PSAnc3RyaW5nJykgcmV0dXJuIHhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgeFZhbHVlQWRqdXN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICB4U2NhbGVEYXRhVHlwZSA9PT0gJ2RhdGVfdGltZSdcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHhTY2FsZURhdGFUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHhWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyh4VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhWYWx1ZUFkanVzdGVkO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHhTY2FsZT17eFNjYWxlfVxuICAgICAgICAgICAgICAgIHlTY2FsZT17eVNjYWxlfVxuICAgICAgICAgICAgICAgIGRhdGE9e2RhdGFGbGF0dGVuZWR9XG4gICAgICAgICAgICAgICAga2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgICAgICAgIGNvbG9yPXsoKSA9PiAnJ31cbiAgICAgICAgICAgICAgICBoZWlnaHQ9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgICAgIHdpZHRoPXtpbm5lcldpZHRofVxuICAgICAgICAgICAgICAgIG9mZnNldD1cIm5vbmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2JhclN0YWNrcyA9PlxuICAgICAgICAgICAgICAgICAgYmFyU3RhY2tzLm1hcChiYXJTdGFjayA9PlxuICAgICAgICAgICAgICAgICAgICBiYXJTdGFjay5iYXJzLm1hcChiYXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXIuaGVpZ2h0IDwgMykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQkFSX1BBRERJTkcgPSAxLjU7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGJhci1zdGFjay0ke2JhclN0YWNrLmluZGV4fS0ke2Jhci5pbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB4PXtiYXIueH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeT17YmFyLnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtiYXIud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17YmFyLmhlaWdodCAtIEJBUl9QQURESU5HfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXtnZXRCYXJGaWxsKGNoYXJ0LmJhcnMsIGNoYXJ0LmNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzLCBiYXIua2V5LCBiYXIuYmFyLmRhdGEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByeD17QkFSX1JBRElVU31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvQmFyU3RhY2s+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgIDwvR3JvdXA+XG4gICAgICAgIHsvKiAtLS0tLSBUT09MVElQIENST1NTSEFJUiAtLS0tLSAqL31cbiAgICAgICAge3Rvb2x0aXBEYXRhICYmIChcbiAgICAgICAgICA8Zz5cbiAgICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICAgIGZyb209e3sgeDogdG9vbHRpcExlZnQsIHk6IG1hcmdpbi50b3AgfX1cbiAgICAgICAgICAgICAgdG89e3sgeDogdG9vbHRpcExlZnQsIHk6IGlubmVySGVpZ2h0ICsgbWFyZ2luLnRvcCB9fVxuICAgICAgICAgICAgICBzdHJva2U9eycjYWFhJ31cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezJ9XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM9XCJub25lXCJcbiAgICAgICAgICAgICAgb3BhY2l0eT17MC44fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2c+XG4gICAgICAgICl9XG4gICAgICAgIHsvKiAtLS0tLSBHT0FMIExJTkVTIC0tLS0tLSAqL31cbiAgICAgICAgPEdvYWxMaW5lcyBnb2FsTGluZXM9e2NoYXJ0LmdvYWxMaW5lc30geT17ZCA9PiB5U2NhbGUoZCl9IG1hcmdpbj17bWFyZ2lufSB3aWR0aD17aW5uZXJXaWR0aH0gLz5cbiAgICAgIDwvQ2hhcnRXcmFwcGVyPlxuICAgICAgey8qIC0tLS0tIExFR0VORCAtLS0tLSAqL31cbiAgICAgIHtvcHRpb25zLnNob3dMZWdlbmQgJiYgKFxuICAgICAgICA8TGVnZW5kXG4gICAgICAgICAgbGVnZW5kSXRlbXM9e2NoYXJ0LmJhcnN9XG4gICAgICAgICAgdmlzaWJsZVlLZXlzPXtjaGFydC5iYXJzLm1hcChsZWdlbmRJdGVtID0+IGxlZ2VuZEl0ZW0ueUtleSl9XG4gICAgICAgICAgc2V0VmlzaWJsZVlLZXlzPXsoKSA9PiB7fX1cbiAgICAgICAgICBrZXlzPXtjaGFydC5rZXlzfVxuICAgICAgICAgIGNvbmRpdGlvbmFsRm9ybWF0dGluZ1J1bGVzPXtjaGFydC5jb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlc31cbiAgICAgICAgICBtYXJnaW5MZWZ0PXttYXJnaW4ubGVmdCAtIG1hcmdpbi5sZWZ0VGl0bGVPZmZzZXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgey8qIC0tLS0tIFRPT0xUSVAgLS0tLS0gKi99XG4gICAgICB7dG9vbHRpcE9wZW4gJiYgdG9vbHRpcERhdGEgJiYgeEtleSAmJiAoXG4gICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgdG9vbHRpcERhdGE9e3Rvb2x0aXBEYXRhfVxuICAgICAgICAgIHRvb2x0aXBMZWZ0PXt0b29sdGlwTGVmdH1cbiAgICAgICAgICB0b29sdGlwVG9wPXt0b29sdGlwVG9wfVxuICAgICAgICAgIHhLZXk9e3hLZXl9XG4gICAgICAgICAga2V5cz17Y2hhcnQua2V5c31cbiAgICAgICAgICB2aXNpYmxlWUtleXM9e2NoYXJ0LmJhcnMubWFwKGxlZ2VuZEl0ZW0gPT4gbGVnZW5kSXRlbS55S2V5KX1cbiAgICAgICAgICB5S2V5cz17Y2hhcnQueS5rZXlzfVxuICAgICAgICAgIGxlZ2VuZEl0ZW1zPXtjaGFydC5iYXJzfVxuICAgICAgICAgIHNob3dSb3VuZGVkVG90YWw9e29wdGlvbnMuc2hvd1JvdW5kZWRUb3RhbH1cbiAgICAgICAgICBjb25kaXRpb25hbEZvcm1hdHRpbmdSdWxlcz17Y2hhcnQuY29uZGl0aW9uYWxGb3JtYXR0aW5nUnVsZXN9XG4gICAgICAgICAgdGhlbWU9e3RoZW1lQ1NTLnBvcG92ZXJNZW51c31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9GcmFnbWVudD5cbiAgKTtcbn07XG5cbmNvbnN0IEJhciA9IChwcm9wczoge1xuICBvbkNsaWNrOiAoZTogUmVhY3QuTW91c2VFdmVudDxTVkdSZWN0RWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIGZpbGw/OiBzdHJpbmc7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAga2V5OiBzdHJpbmc7XG4gIGVuYWJsZUhvdmVyPzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgW2ZpbGxDb2xvciwgc2V0RmlsbENvbG9yXSA9IHVzZVN0YXRlKHByb3BzLmZpbGwpO1xuICByZXR1cm4gKFxuICAgIDxyZWN0XG4gICAgICBrZXk9e3Byb3BzLmtleX1cbiAgICAgIHg9e3Byb3BzLnh9XG4gICAgICB5PXtwcm9wcy55fVxuICAgICAgd2lkdGg9e3Byb3BzLndpZHRofVxuICAgICAgaGVpZ2h0PXtwcm9wcy5oZWlnaHR9XG4gICAgICBmaWxsPXtmaWxsQ29sb3J9XG4gICAgICByeD17QkFSX1JBRElVU31cbiAgICAgIG9uQ2xpY2s9e3Byb3BzLm9uQ2xpY2t9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihsaWdodGVuQ29sb3IocHJvcHMuZmlsbCwgMC44KSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHByb3BzLmVuYWJsZUhvdmVyICYmIHNldEZpbGxDb2xvcihwcm9wcy5maWxsKX1cbiAgICAgIGNsYXNzTmFtZT17cHJvcHMuZW5hYmxlSG92ZXIgPyBjc3MoeyBjdXJzb3I6ICdwb2ludGVyJyB9KSA6ICcnfVxuICAgIC8+XG4gICk7XG59O1xuIl19 */",
41910
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$8
41922
41911
  }) : ''
41923
41912
  }, props.key);
41924
41913
  };