UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

120 lines (119 loc) 20.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _reactVis = require("react-vis"); var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components")); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src"); var _templateObject, _templateObject2; // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } var LineChartWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n .rv-xy-plot {\n /* important for rendering hint */\n position: relative;\n }\n .rv-xy-plot__inner {\n /* important to show axis */\n overflow: visible;\n }\n\n .rv-xy-plot__grid-lines__line {\n stroke: ", ";\n stroke-dasharray: 1px 4px;\n }\n\n .rv-xy-plot__axis__tick__text {\n font-size: 9px;\n fill: ", ";\n }\n"])), function (props) { return props.theme.histogramFillOutRange; }, function (props) { return props.theme.textColor; }); var StyledHint = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: #d3d8e0;\n border-radius: 2px;\n color: ", ";\n font-size: 9px;\n margin: 4px;\n padding: 3px 6px;\n pointer-events: none;\n user-select: none;\n"])), function (props) { return props.theme.textColorLT; }); var HintContent = function HintContent(_ref) { var x = _ref.x, y = _ref.y, format = _ref.format; return /*#__PURE__*/_react["default"].createElement(StyledHint, null, /*#__PURE__*/_react["default"].createElement("div", { className: "hint--x" }, format(x)), /*#__PURE__*/_react["default"].createElement("div", { className: "row" }, y)); }; var MARGIN = { top: 0, bottom: 0, left: 0, right: 0 }; function LineChartFactory() { var LineChartComponent = function LineChartComponent(_ref2) { var brushComponent = _ref2.brushComponent, brushing = _ref2.brushing, color = _ref2.color, enableChartHover = _ref2.enableChartHover, height = _ref2.height, hoveredDP = _ref2.hoveredDP, isEnlarged = _ref2.isEnlarged, lineChart = _ref2.lineChart, margin = _ref2.margin, onMouseMove = _ref2.onMouseMove, width = _ref2.width, timezone = _ref2.timezone, timeFormat = _ref2.timeFormat; var _ref3 = lineChart || {}, yDomain = _ref3.yDomain, xDomain = _ref3.xDomain; // @ts-expect-error seems lineChart.series has ambiguous types. Requires refactoring. var series = lineChart === null || lineChart === void 0 ? void 0 : lineChart.series; var paddedYDomain = (0, _react.useMemo)(function () { return yDomain && yDomain[0] && yDomain[1] ? [yDomain[0], yDomain[1] + (yDomain[1] - yDomain[0]) * 0.2] : []; }, [yDomain]); var brushData = (0, _react.useMemo)(function () { return xDomain && paddedYDomain ? [{ x: xDomain[0], y: paddedYDomain[1], customComponent: function customComponent() { return brushComponent; } }] : []; }, [xDomain, paddedYDomain, brushComponent]); var hintFormatter = (0, _react.useMemo)(function () { return (0, _src.datetimeFormatter)(timezone)(timeFormat); }, [timezone, timeFormat]); return /*#__PURE__*/_react["default"].createElement(LineChartWrapper, { style: { marginTop: "".concat(margin.top, "px") } }, /*#__PURE__*/_react["default"].createElement(_reactVis.XYPlot, { xType: "time", width: width, height: height, margin: MARGIN, onMouseLeave: function onMouseLeave() { onMouseMove(null); }, yDomain: paddedYDomain, xDomain: xDomain }, /*#__PURE__*/_react["default"].createElement(_reactVis.HorizontalGridLines, { tickTotal: 3 }), series.lines.map(function (d, i) { return /*#__PURE__*/_react["default"].createElement(_reactVis.LineSeries, { key: i, style: { fill: 'none' }, color: color, data: d, onNearestX: series.markers.length || !enableChartHover ? undefined : onMouseMove }); }), /*#__PURE__*/_react["default"].createElement(_reactVis.MarkSeries, { data: hoveredDP ? [hoveredDP] : [], color: color }), /*#__PURE__*/_react["default"].createElement(_reactVis.CustomSVGSeries, { data: brushData }), isEnlarged && /*#__PURE__*/_react["default"].createElement(_reactVis.YAxis, { tickTotal: 3 }), hoveredDP && enableChartHover && !brushing ? /*#__PURE__*/_react["default"].createElement(_reactVis.Hint, { value: hoveredDP }, /*#__PURE__*/_react["default"].createElement(HintContent, (0, _extends2["default"])({}, hoveredDP, { format: hintFormatter }))) : null)); }; return LineChartComponent; } var _default = exports["default"] = LineChartFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RWaXMiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3JjIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkxpbmVDaGFydFdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJoaXN0b2dyYW1GaWxsT3V0UmFuZ2UiLCJ0ZXh0Q29sb3IiLCJTdHlsZWRIaW50IiwidGV4dENvbG9yTFQiLCJIaW50Q29udGVudCIsIl9yZWYiLCJ4IiwieSIsImZvcm1hdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJNQVJHSU4iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJMaW5lQ2hhcnRGYWN0b3J5IiwiTGluZUNoYXJ0Q29tcG9uZW50IiwiX3JlZjIiLCJicnVzaENvbXBvbmVudCIsImJydXNoaW5nIiwiY29sb3IiLCJlbmFibGVDaGFydEhvdmVyIiwiaGVpZ2h0IiwiaG92ZXJlZERQIiwiaXNFbmxhcmdlZCIsImxpbmVDaGFydCIsIm1hcmdpbiIsIm9uTW91c2VNb3ZlIiwid2lkdGgiLCJ0aW1lem9uZSIsInRpbWVGb3JtYXQiLCJfcmVmMyIsInlEb21haW4iLCJ4RG9tYWluIiwic2VyaWVzIiwicGFkZGVkWURvbWFpbiIsInVzZU1lbW8iLCJicnVzaERhdGEiLCJjdXN0b21Db21wb25lbnQiLCJoaW50Rm9ybWF0dGVyIiwiZGF0ZXRpbWVGb3JtYXR0ZXIiLCJzdHlsZSIsIm1hcmdpblRvcCIsImNvbmNhdCIsIlhZUGxvdCIsInhUeXBlIiwib25Nb3VzZUxlYXZlIiwiSG9yaXpvbnRhbEdyaWRMaW5lcyIsInRpY2tUb3RhbCIsImxpbmVzIiwibWFwIiwiZCIsIkxpbmVTZXJpZXMiLCJrZXkiLCJmaWxsIiwiZGF0YSIsIm9uTmVhcmVzdFgiLCJtYXJrZXJzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiTWFya1NlcmllcyIsIkN1c3RvbVNWR1NlcmllcyIsIllBeGlzIiwiSGludCIsInZhbHVlIiwiX2V4dGVuZHMyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3JjL2NvbW1vbi9saW5lLWNoYXJ0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBIb3Jpem9udGFsR3JpZExpbmVzLFxuICBMaW5lU2VyaWVzLFxuICBYWVBsb3QsXG4gIEN1c3RvbVNWR1NlcmllcyxcbiAgSGludCxcbiAgWUF4aXMsXG4gIE1hcmtTZXJpZXMsXG4gIExpbmVTZXJpZXNQb2ludCxcbiAgUlZOZWFyZXN0WERhdGFcbn0gZnJvbSAncmVhY3QtdmlzJztcbmltcG9ydCB7TGluZUNoYXJ0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtkYXRldGltZUZvcm1hdHRlcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmNvbnN0IExpbmVDaGFydFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICAucnYteHktcGxvdCB7XG4gICAgLyogaW1wb3J0YW50IGZvciByZW5kZXJpbmcgaGludCAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuICAucnYteHktcGxvdF9faW5uZXIge1xuICAgIC8qIGltcG9ydGFudCB0byBzaG93IGF4aXMgKi9cbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5ydi14eS1wbG90X19ncmlkLWxpbmVzX19saW5lIHtcbiAgICBzdHJva2U6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaGlzdG9ncmFtRmlsbE91dFJhbmdlfTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxcHggNHB4O1xuICB9XG5cbiAgLnJ2LXh5LXBsb3RfX2F4aXNfX3RpY2tfX3RleHQge1xuICAgIGZvbnQtc2l6ZTogOXB4O1xuICAgIGZpbGw6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkSGludCA9IHN0eWxlZC5kaXZgXG4gIGJhY2tncm91bmQtY29sb3I6ICNkM2Q4ZTA7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICBmb250LXNpemU6IDlweDtcbiAgbWFyZ2luOiA0cHg7XG4gIHBhZGRpbmc6IDNweCA2cHg7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbmA7XG5cbmludGVyZmFjZSBIaW50Q29udGVudFByb3BzIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIGZvcm1hdDogKHRzOiBudW1iZXIpID0+IHN0cmluZztcbn1cblxuY29uc3QgSGludENvbnRlbnQgPSAoe3gsIHksIGZvcm1hdH06IEhpbnRDb250ZW50UHJvcHMpID0+IChcbiAgPFN0eWxlZEhpbnQ+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJoaW50LS14XCI+e2Zvcm1hdCh4KX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPnt5fTwvZGl2PlxuICA8L1N0eWxlZEhpbnQ+XG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvdmVyRFAge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgY29sb3I/OiBzdHJpbmcgfCBudW1iZXI7XG4gIG9wYWNpdHk/OiBzdHJpbmcgfCBudW1iZXI7XG4gIHN0cm9rZT86IHN0cmluZyB8IG51bWJlcjtcbiAgZmlsbD86IHN0cmluZyB8IG51bWJlcjtcbiAgc2l6ZT86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIExpbmVDaGFydFByb3BzIHtcbiAgYnJ1c2hDb21wb25lbnQ/OiBhbnk7XG4gIGJydXNoaW5nPzogYm9vbGVhbjtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGVuYWJsZUNoYXJ0SG92ZXI/OiBib29sZWFuO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgaG92ZXJlZERQPzogSG92ZXJEUCB8IG51bGw7XG4gIGlzRW5sYXJnZWQ/OiBib29sZWFuO1xuICBsaW5lQ2hhcnQ/OiBMaW5lQ2hhcnQ7XG4gIG1hcmdpbjoge3RvcD86IG51bWJlcjsgYm90dG9tPzogbnVtYmVyOyBsZWZ0PzogbnVtYmVyOyByaWdodD86IG51bWJlcn07XG4gIG9uTW91c2VNb3ZlOiAoZGF0YXBvaW50OiBMaW5lU2VyaWVzUG9pbnQgfCBudWxsLCBkYXRhPzogUlZOZWFyZXN0WERhdGE8TGluZVNlcmllc1BvaW50PikgPT4gdm9pZDtcbiAgd2lkdGg6IG51bWJlcjtcbiAgdGltZXpvbmU/OiBzdHJpbmcgfCBudWxsO1xuICB0aW1lRm9ybWF0Pzogc3RyaW5nO1xufVxuXG5jb25zdCBNQVJHSU4gPSB7dG9wOiAwLCBib3R0b206IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwfTtcbmZ1bmN0aW9uIExpbmVDaGFydEZhY3RvcnkoKSB7XG4gIGNvbnN0IExpbmVDaGFydENvbXBvbmVudCA9ICh7XG4gICAgYnJ1c2hDb21wb25lbnQsXG4gICAgYnJ1c2hpbmcsXG4gICAgY29sb3IsXG4gICAgZW5hYmxlQ2hhcnRIb3ZlcixcbiAgICBoZWlnaHQsXG4gICAgaG92ZXJlZERQLFxuICAgIGlzRW5sYXJnZWQsXG4gICAgbGluZUNoYXJ0LFxuICAgIG1hcmdpbixcbiAgICBvbk1vdXNlTW92ZSxcbiAgICB3aWR0aCxcbiAgICB0aW1lem9uZSxcbiAgICB0aW1lRm9ybWF0XG4gIH06IExpbmVDaGFydFByb3BzKSA9PiB7XG4gICAgY29uc3Qge3lEb21haW4sIHhEb21haW59ID0gbGluZUNoYXJ0IHx8IHt9O1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc2VlbXMgbGluZUNoYXJ0LnNlcmllcyBoYXMgYW1iaWd1b3VzIHR5cGVzLiBSZXF1aXJlcyByZWZhY3RvcmluZy5cbiAgICBjb25zdCBzZXJpZXM6IHtsaW5lczogYW55W107IG1hcmtlcnM6IGFueVtdfSA9IGxpbmVDaGFydD8uc2VyaWVzO1xuXG4gICAgY29uc3QgcGFkZGVkWURvbWFpbiA9IHVzZU1lbW8oXG4gICAgICAoKSA9PlxuICAgICAgICB5RG9tYWluICYmIHlEb21haW5bMF0gJiYgeURvbWFpblsxXVxuICAgICAgICAgID8gW3lEb21haW5bMF0sIHlEb21haW5bMV0gKyAoeURvbWFpblsxXSAtIHlEb21haW5bMF0pICogMC4yXVxuICAgICAgICAgIDogW10sXG4gICAgICBbeURvbWFpbl1cbiAgICApO1xuICAgIGNvbnN0IGJydXNoRGF0YSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIHhEb21haW4gJiYgcGFkZGVkWURvbWFpblxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeDogeERvbWFpblswXSxcbiAgICAgICAgICAgICAgeTogcGFkZGVkWURvbWFpblsxXSxcbiAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50OiAoKSA9PiBicnVzaENvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXTtcbiAgICB9LCBbeERvbWFpbiwgcGFkZGVkWURvbWFpbiwgYnJ1c2hDb21wb25lbnRdKTtcblxuICAgIGNvbnN0IGhpbnRGb3JtYXR0ZXIgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gZGF0ZXRpbWVGb3JtYXR0ZXIodGltZXpvbmUpKHRpbWVGb3JtYXQpLFxuICAgICAgW3RpbWV6b25lLCB0aW1lRm9ybWF0XVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPExpbmVDaGFydFdyYXBwZXIgc3R5bGU9e3ttYXJnaW5Ub3A6IGAke21hcmdpbi50b3B9cHhgfX0+XG4gICAgICAgIDxYWVBsb3RcbiAgICAgICAgICB4VHlwZT1cInRpbWVcIlxuICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e2hlaWdodH1cbiAgICAgICAgICBtYXJnaW49e01BUkdJTn1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHtcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlKG51bGwpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgeURvbWFpbj17cGFkZGVkWURvbWFpbn1cbiAgICAgICAgICB4RG9tYWluPXt4RG9tYWlufVxuICAgICAgICA+XG4gICAgICAgICAgPEhvcml6b250YWxHcmlkTGluZXMgdGlja1RvdGFsPXszfSAvPlxuICAgICAgICAgIHtzZXJpZXMubGluZXMubWFwKChkLCBpKSA9PiAoXG4gICAgICAgICAgICA8TGluZVNlcmllc1xuICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgIHN0eWxlPXt7ZmlsbDogJ25vbmUnfX1cbiAgICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgICBkYXRhPXtkfVxuICAgICAgICAgICAgICBvbk5lYXJlc3RYPXtzZXJpZXMubWFya2Vycy5sZW5ndGggfHwgIWVuYWJsZUNoYXJ0SG92ZXIgPyB1bmRlZmluZWQgOiBvbk1vdXNlTW92ZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPE1hcmtTZXJpZXMgZGF0YT17aG92ZXJlZERQID8gW2hvdmVyZWREUF0gOiBbXX0gY29sb3I9e2NvbG9yfSAvPlxuICAgICAgICAgIDxDdXN0b21TVkdTZXJpZXMgZGF0YT17YnJ1c2hEYXRhfSAvPlxuICAgICAgICAgIHtpc0VubGFyZ2VkICYmIDxZQXhpcyB0aWNrVG90YWw9ezN9IC8+fVxuICAgICAgICAgIHtob3ZlcmVkRFAgJiYgZW5hYmxlQ2hhcnRIb3ZlciAmJiAhYnJ1c2hpbmcgPyAoXG4gICAgICAgICAgICA8SGludCB2YWx1ZT17aG92ZXJlZERQfT5cbiAgICAgICAgICAgICAgPEhpbnRDb250ZW50IHsuLi5ob3ZlcmVkRFB9IGZvcm1hdD17aGludEZvcm1hdHRlcn0gLz5cbiAgICAgICAgICAgIDwvSGludD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9YWVBsb3Q+XG4gICAgICA8L0xpbmVDaGFydFdyYXBwZXI+XG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIExpbmVDaGFydENvbXBvbmVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZUNoYXJ0RmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQVlBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxJQUFBLEdBQUFKLE9BQUE7QUFBbUQsSUFBQUssZUFBQSxFQUFBQyxnQkFBQSxFQWpCbkQ7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBVCx3QkFBQVMsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FB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