kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
132 lines (131 loc) • 21.5 kB
JavaScript
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 _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _d3Scale = require("d3-scale");
var _constants = require("@kepler.gl/constants");
var _utils = require("@kepler.gl/utils");
var _d3Array = require("d3-array");
var _window = require("global/window");
var _templateObject, _templateObject2, _templateObject3; // 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 StyledLegend = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", "px;\n height: ", "px;\n position: relative;\n svg {\n circle {\n stroke: ", ";\n fill: none;\n }\n line {\n stroke: ", ";\n stroke-dasharray: 2, 1;\n }\n }\n"])), function (props) {
return props.width;
}, function (props) {
return props.height;
}, function (props) {
return props.theme.borderColorLT;
}, function (props) {
return props.theme.borderColor;
});
var LabelsOuter = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n text-align: right;\n position: absolute;\n left: 0;\n top: 0;\n width: ", "px;\n height: ", "px;\n"])), function (props) {
return props.width;
}, function (props) {
return props.height;
});
var tickHeight = 9;
var ValueLabel = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n font-size: ", "px;\n height: ", "px;\n line-height: ", "px;\n margin-top: -", "px;\n color: ", ";\n background-color: ", ";\n padding: 0 2px;\n border-radius: 2px;\n"])), tickHeight, tickHeight, tickHeight, tickHeight / 2, function (props) {
return props.theme.textColor;
}, function (props) {
return props.theme.mapPanelBackgroundColor;
});
var margin = {
left: 1,
top: 5,
right: 2,
bottom: 5
};
var RadiusLegend = function RadiusLegend(_ref) {
var scaleType = _ref.scaleType,
width = _ref.width,
domain = _ref.domain,
range = _ref.range,
fieldType = _ref.fieldType;
var radiusScale = (0, _react.useMemo)(function () {
if (scaleType !== _constants.SCALE_TYPES.sqrt) {
_window.console.warn("Unsupported radius scale type: ".concat(scaleType));
return undefined;
}
if (!Array.isArray(domain) || !domain.every(Number.isFinite)) {
return undefined;
}
return (0, _d3Scale.scaleSqrt)().domain(domain).range(range);
}, [domain, range, scaleType]);
var radiusTicks = (0, _react.useMemo)(function () {
if (radiusScale === undefined) return [];
var numTicksToFit = Math.min(10, (range[1] - range[0]) * 2 / tickHeight);
var ticks = radiusScale.ticks(numTicksToFit);
// Add min and max values
if (ticks[0] > domain[0]) {
ticks.unshift(domain[0]);
}
if (ticks[ticks.length - 1] < domain[1]) {
ticks.push(domain[1]);
}
// Make sure there is no overlap
return ticks.reduceRight(function (acc, v) {
if (acc.length === 0 || Math.abs(radiusScale(acc[0]) - radiusScale(v)) * 2 > tickHeight) {
// @ts-ignore
acc.unshift(v);
}
return acc;
}, new Array());
}, [radiusScale, domain, range]);
if (!radiusScale || !radiusTicks.length) {
return null;
}
var maxR = Math.ceil(radiusScale((0, _d3Array.max)(radiusTicks) || 0));
var w = width - margin.left - margin.right;
var h = maxR * 2;
var height = h + margin.top + margin.bottom;
return /*#__PURE__*/_react["default"].createElement(StyledLegend, {
width: width,
height: height
}, /*#__PURE__*/_react["default"].createElement("svg", {
width: width,
height: height
}, /*#__PURE__*/_react["default"].createElement("g", {
transform: "translate(".concat(margin.left, ",").concat(margin.top, ")")
}, /*#__PURE__*/_react["default"].createElement("g", null, radiusTicks.map(function (v, i) {
return /*#__PURE__*/_react["default"].createElement("g", {
key: i
}, /*#__PURE__*/_react["default"].createElement("g", {
transform: "translate(".concat(w, ",").concat(h - radiusScale(v) * 2, ")")
}, /*#__PURE__*/_react["default"].createElement("line", {
x1: 0,
x2: maxR - w
})));
})), /*#__PURE__*/_react["default"].createElement("g", null, radiusTicks.map(function (v, i) {
var r = radiusScale(v);
return /*#__PURE__*/_react["default"].createElement("g", {
key: i
}, /*#__PURE__*/_react["default"].createElement("g", {
transform: "translate(0,".concat(h - r * 2, ")")
}, /*#__PURE__*/_react["default"].createElement("circle", {
cx: maxR,
cy: r,
r: Math.max(0, r - 1) /* stroke is drawn outside, hence r-1 */
})));
})))), /*#__PURE__*/_react["default"].createElement(LabelsOuter, {
width: width,
height: height
}, radiusTicks.map(function (v, i) {
return /*#__PURE__*/_react["default"].createElement(ValueLabel, {
key: i,
style: {
right: margin.right,
top: margin.top + h - radiusScale(v) * 2
}
}, (0, _utils.formatNumber)(v, fieldType));
})));
};
var _default = exports["default"] = RadiusLegend;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZDNTY2FsZSIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfZDNBcnJheSIsIl93aW5kb3ciLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlN0eWxlZExlZ2VuZCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ3aWR0aCIsImhlaWdodCIsInRoZW1lIiwiYm9yZGVyQ29sb3JMVCIsImJvcmRlckNvbG9yIiwiTGFiZWxzT3V0ZXIiLCJ0aWNrSGVpZ2h0IiwiVmFsdWVMYWJlbCIsInRleHRDb2xvciIsIm1hcFBhbmVsQmFja2dyb3VuZENvbG9yIiwibWFyZ2luIiwibGVmdCIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwiUmFkaXVzTGVnZW5kIiwiX3JlZiIsInNjYWxlVHlwZSIsImRvbWFpbiIsInJhbmdlIiwiZmllbGRUeXBlIiwicmFkaXVzU2NhbGUiLCJ1c2VNZW1vIiwiU0NBTEVfVFlQRVMiLCJzcXJ0IiwiQ29uc29sZSIsIndhcm4iLCJjb25jYXQiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJldmVyeSIsIk51bWJlciIsImlzRmluaXRlIiwic2NhbGVTcXJ0IiwicmFkaXVzVGlja3MiLCJudW1UaWNrc1RvRml0IiwiTWF0aCIsIm1pbiIsInRpY2tzIiwidW5zaGlmdCIsImxlbmd0aCIsInB1c2giLCJyZWR1Y2VSaWdodCIsImFjYyIsInYiLCJhYnMiLCJtYXhSIiwiY2VpbCIsIm1heCIsInciLCJoIiwiY3JlYXRlRWxlbWVudCIsInRyYW5zZm9ybSIsIm1hcCIsImtleSIsIngxIiwieDIiLCJjeCIsImN5Iiwic3R5bGUiLCJmb3JtYXROdW1iZXIiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbW9uL3JhZGl1cy1sZWdlbmQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZU1lbW8sIEZDfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7c2NhbGVTcXJ0fSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge1NDQUxFX1RZUEVTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2Zvcm1hdE51bWJlcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge21heH0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuXG5jb25zdCBTdHlsZWRMZWdlbmQgPSBzdHlsZWQuZGl2PHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn0+YFxuICB3aWR0aDogJHtwcm9wcyA9PiBwcm9wcy53aWR0aH1weDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLmhlaWdodH1weDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBzdmcge1xuICAgIGNpcmNsZSB7XG4gICAgICBzdHJva2U6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9yZGVyQ29sb3JMVH07XG4gICAgICBmaWxsOiBub25lO1xuICAgIH1cbiAgICBsaW5lIHtcbiAgICAgIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5ib3JkZXJDb2xvcn07XG4gICAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAxO1xuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgTGFiZWxzT3V0ZXIgPSBzdHlsZWQuZGl2PHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn0+YFxuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMuaGVpZ2h0fXB4O1xuYDtcblxuY29uc3QgdGlja0hlaWdodCA9IDk7XG5cbmNvbnN0IFZhbHVlTGFiZWwgPSBzdHlsZWQuZGl2YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGZvbnQtc2l6ZTogJHt0aWNrSGVpZ2h0fXB4O1xuICBoZWlnaHQ6ICR7dGlja0hlaWdodH1weDtcbiAgbGluZS1oZWlnaHQ6ICR7dGlja0hlaWdodH1weDtcbiAgbWFyZ2luLXRvcDogLSR7dGlja0hlaWdodCAvIDJ9cHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubWFwUGFuZWxCYWNrZ3JvdW5kQ29sb3J9O1xuICBwYWRkaW5nOiAwIDJweDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuYDtcblxuY29uc3QgbWFyZ2luID0ge2xlZnQ6IDEsIHRvcDogNSwgcmlnaHQ6IDIsIGJvdHRvbTogNX07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIHNjYWxlVHlwZTogc3RyaW5nO1xuICBkb21haW46IFtudW1iZXIsIG51bWJlcl07XG4gIGZpZWxkVHlwZTogc3RyaW5nO1xuICByYW5nZTogW251bWJlciwgbnVtYmVyXTtcbn07XG5cbmNvbnN0IFJhZGl1c0xlZ2VuZDogRkM8UHJvcHM+ID0gKHtzY2FsZVR5cGUsIHdpZHRoLCBkb21haW4sIHJhbmdlLCBmaWVsZFR5cGV9KSA9PiB7XG4gIGNvbnN0IHJhZGl1c1NjYWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHNjYWxlVHlwZSAhPT0gU0NBTEVfVFlQRVMuc3FydCkge1xuICAgICAgQ29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCByYWRpdXMgc2NhbGUgdHlwZTogJHtzY2FsZVR5cGV9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZG9tYWluKSB8fCAhZG9tYWluLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZVNxcnQoKS5kb21haW4oZG9tYWluKS5yYW5nZShyYW5nZSk7XG4gIH0sIFtkb21haW4sIHJhbmdlLCBzY2FsZVR5cGVdKTtcblxuICBjb25zdCByYWRpdXNUaWNrcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChyYWRpdXNTY2FsZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW107XG4gICAgY29uc3QgbnVtVGlja3NUb0ZpdCA9IE1hdGgubWluKDEwLCAoKHJhbmdlWzFdIC0gcmFuZ2VbMF0pICogMikgLyB0aWNrSGVpZ2h0KTtcbiAgICBjb25zdCB0aWNrcyA9IHJhZGl1c1NjYWxlLnRpY2tzKG51bVRpY2tzVG9GaXQpO1xuICAgIC8vIEFkZCBtaW4gYW5kIG1heCB2YWx1ZXNcbiAgICBpZiAodGlja3NbMF0gPiBkb21haW5bMF0pIHtcbiAgICAgIHRpY2tzLnVuc2hpZnQoZG9tYWluWzBdKTtcbiAgICB9XG4gICAgaWYgKHRpY2tzW3RpY2tzLmxlbmd0aCAtIDFdIDwgZG9tYWluWzFdKSB7XG4gICAgICB0aWNrcy5wdXNoKGRvbWFpblsxXSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBvdmVybGFwXG4gICAgcmV0dXJuIHRpY2tzLnJlZHVjZVJpZ2h0KChhY2MsIHYpID0+IHtcbiAgICAgIGlmIChhY2MubGVuZ3RoID09PSAwIHx8IE1hdGguYWJzKHJhZGl1c1NjYWxlKGFjY1swXSkgLSByYWRpdXNTY2FsZSh2KSkgKiAyID4gdGlja0hlaWdodCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGFjYy51bnNoaWZ0KHYpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXcgQXJyYXk8bnVtYmVyPigpKTtcbiAgfSwgW3JhZGl1c1NjYWxlLCBkb21haW4sIHJhbmdlXSk7XG5cbiAgaWYgKCFyYWRpdXNTY2FsZSB8fCAhcmFkaXVzVGlja3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbWF4UiA9IE1hdGguY2VpbChyYWRpdXNTY2FsZShtYXgocmFkaXVzVGlja3MpIHx8IDApKTtcbiAgY29uc3QgdyA9IHdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gIGNvbnN0IGggPSBtYXhSICogMjtcbiAgY29uc3QgaGVpZ2h0ID0gaCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tO1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZExlZ2VuZCB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fT5cbiAgICAgIDxzdmcgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0+XG4gICAgICAgIDxnIHRyYW5zZm9ybT17YHRyYW5zbGF0ZSgke21hcmdpbi5sZWZ0fSwke21hcmdpbi50b3B9KWB9PlxuICAgICAgICAgIDxnPlxuICAgICAgICAgICAge3JhZGl1c1RpY2tzLm1hcCgodiwgaSkgPT4gKFxuICAgICAgICAgICAgICA8ZyBrZXk9e2l9PlxuICAgICAgICAgICAgICAgIDxnIHRyYW5zZm9ybT17YHRyYW5zbGF0ZSgke3d9LCR7aCAtIHJhZGl1c1NjYWxlKHYpICogMn0pYH0+XG4gICAgICAgICAgICAgICAgICA8bGluZSB4MT17MH0geDI9e21heFIgLSB3fSAvPlxuICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9nPlxuICAgICAgICAgIDxnPlxuICAgICAgICAgICAge3JhZGl1c1RpY2tzLm1hcCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByID0gcmFkaXVzU2NhbGUodik7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGcga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgIDxnIHRyYW5zZm9ybT17YHRyYW5zbGF0ZSgwLCR7aCAtIHIgKiAyfSlgfT5cbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgIGN4PXttYXhSfVxuICAgICAgICAgICAgICAgICAgICAgIGN5PXtyfVxuICAgICAgICAgICAgICAgICAgICAgIHI9e01hdGgubWF4KDAsIHIgLSAxKX0gLyogc3Ryb2tlIGlzIGRyYXduIG91dHNpZGUsIGhlbmNlIHItMSAqL1xuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9zdmc+XG4gICAgICA8TGFiZWxzT3V0ZXIgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0+XG4gICAgICAgIHtyYWRpdXNUaWNrcy5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICA8VmFsdWVMYWJlbFxuICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcmlnaHQ6IG1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgICAgdG9wOiBtYXJnaW4udG9wICsgaCAtIHJhZGl1c1NjYWxlKHYpICogMlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Zm9ybWF0TnVtYmVyKHYsIGZpZWxkVHlwZSl9XG4gICAgICAgICAgPC9WYWx1ZUxhYmVsPlxuICAgICAgICApKX1cbiAgICAgIDwvTGFiZWxzT3V0ZXI+XG4gICAgPC9TdHlsZWRMZWdlbmQ+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSYWRpdXNMZWdlbmQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFBaUQsSUFBQVEsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQVRqRDtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFiLHdCQUFBYSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJ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
;