kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
172 lines (128 loc) • 18.6 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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _switch = _interopRequireDefault(require("../../common/switch"));
var _brushConfig = _interopRequireDefault(require("./brush-config"));
var _tooltipConfig = _interopRequireDefault(require("./tooltip-config"));
var _styledComponents2 = require("../../common/styled-components");
var _templateObject, _templateObject2;
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var StyledPanelContent = (0, _styledComponents["default"])(_styledComponents2.PanelContent)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-top: 1px solid ", ";\n"])), function (props) {
return props.theme.panelBorderColor;
});
var StyledInteractionPanel = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n padding-bottom: 6px;\n"])));
InteractionPanelFactory.deps = [_tooltipConfig["default"], _brushConfig["default"]];
function InteractionPanelFactory(TooltipConfig, BrushConfig) {
var _class, _temp;
return _temp = _class = /*#__PURE__*/function (_Component) {
(0, _inherits2["default"])(InteractionPanel, _Component);
var _super = _createSuper(InteractionPanel);
function InteractionPanel() {
var _this;
(0, _classCallCheck2["default"])(this, InteractionPanel);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
isConfigActive: false
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_updateConfig", function (newProp) {
_this.props.onConfigChange(_objectSpread(_objectSpread({}, _this.props.config), newProp));
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_enableConfig", function () {
_this.setState({
isConfigActive: !_this.state.isConfigActive
});
});
return _this;
}
(0, _createClass2["default"])(InteractionPanel, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
config = _this$props.config,
datasets = _this$props.datasets;
var onChange = function onChange(newConfig) {
return _this2._updateConfig({
config: newConfig
});
};
var template = null;
switch (config.id) {
case 'tooltip':
template = /*#__PURE__*/_react["default"].createElement(TooltipConfig, {
datasets: datasets,
config: config.config,
onChange: onChange
});
break;
case 'brush':
template = /*#__PURE__*/_react["default"].createElement(BrushConfig, {
config: config.config,
onChange: onChange
});
break;
default:
break;
}
return (/*#__PURE__*/_react["default"].createElement(StyledInteractionPanel, {
className: "interaction-panel"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledPanelHeader, {
className: "interaction-panel__header",
onClick: this._enableConfig
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelHeaderContent, {
className: "interaction-panel__header__content"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "interaction-panel__header__icon icon"
}, /*#__PURE__*/_react["default"].createElement(config.iconComponent, {
height: "12px"
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "interaction-panel__header__title"
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelHeaderTitle, null, config.id))), /*#__PURE__*/_react["default"].createElement("div", {
className: "interaction-panel__header__actions"
}, /*#__PURE__*/_react["default"].createElement(_switch["default"], {
checked: config.enabled,
id: "".concat(config.id, "-toggle"),
onChange: function onChange() {
return _this2._updateConfig({
enabled: !config.enabled
});
},
secondary: true
}))), config.enabled && template && /*#__PURE__*/_react["default"].createElement(StyledPanelContent, {
className: "interaction-panel__content"
}, template))
);
}
}]);
return InteractionPanel;
}(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", {
datasets: _propTypes["default"].object.isRequired,
config: _propTypes["default"].object.isRequired,
onConfigChange: _propTypes["default"].func.isRequired
}), _temp;
}
var _default = exports["default"] = InteractionPanelFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvaW50ZXJhY3Rpb24tcGFuZWwvaW50ZXJhY3Rpb24tcGFuZWwuanMiXSwibmFtZXMiOlsiU3R5bGVkUGFuZWxDb250ZW50IiwiUGFuZWxDb250ZW50IiwicHJvcHMiLCJ0aGVtZSIsInBhbmVsQm9yZGVyQ29sb3IiLCJTdHlsZWRJbnRlcmFjdGlvblBhbmVsIiwic3R5bGVkIiwiZGl2IiwiSW50ZXJhY3Rpb25QYW5lbEZhY3RvcnkiLCJkZXBzIiwiVG9vbHRpcENvbmZpZ0ZhY3RvcnkiLCJCcnVzaENvbmZpZ0ZhY3RvcnkiLCJUb29sdGlwQ29uZmlnIiwiQnJ1c2hDb25maWciLCJpc0NvbmZpZ0FjdGl2ZSIsIm5ld1Byb3AiLCJvbkNvbmZpZ0NoYW5nZSIsImNvbmZpZyIsInNldFN0YXRlIiwic3RhdGUiLCJkYXRhc2V0cyIsIm9uQ2hhbmdlIiwibmV3Q29uZmlnIiwiX3VwZGF0ZUNvbmZpZyIsInRlbXBsYXRlIiwiaWQiLCJfZW5hYmxlQ29uZmlnIiwiZW5hYmxlZCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJmdW5jIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxJQUFNQSxrQkFBa0IsR0FBRyxrQ0FBT0MsK0JBQVAsQ0FBSCx3SEFDRSxVQUFBQyxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlDLGdCQUFoQjtBQUFBLENBRFAsQ0FBeEI7O0FBSUEsSUFBTUMsc0JBQXNCLEdBQUdDLDZCQUFPQyxHQUFWLGtIQUE1Qjs7QUFJQUMsdUJBQXVCLENBQUNDLElBQXhCLEdBQStCLENBQUNDLHlCQUFELEVBQXVCQyx1QkFBdkIsQ0FBL0I7O0FBRUEsU0FBU0gsdUJBQVQsQ0FBaUNJLGFBQWpDLEVB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Q0FBaUJDLFVBRlI7QUFHakJmLElBQUFBLGNBQWMsRUFBRWEsc0JBQVVHLElBQVYsQ0FBZUQ7QUFIZCxHQURyQjtBQTRFRDs7b0NBRWN2Qix1QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFN3aXRjaCBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zd2l0Y2gnO1xuXG5pbXBvcnQgQnJ1c2hDb25maWdGYWN0b3J5IGZyb20gJy4vYnJ1c2gtY29uZmlnJztcbmltcG9ydCBUb29sdGlwQ29uZmlnRmFjdG9yeSBmcm9tICcuL3Rvb2x0aXAtY29uZmlnJztcblxuaW1wb3J0IHtcbiAgU3R5bGVkUGFuZWxIZWFkZXIsXG4gIFBhbmVsSGVhZGVyVGl0bGUsXG4gIFBhbmVsSGVhZGVyQ29udGVudCxcbiAgUGFuZWxDb250ZW50XG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcblxuY29uc3QgU3R5bGVkUGFuZWxDb250ZW50ID0gc3R5bGVkKFBhbmVsQ29udGVudClgXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQm9yZGVyQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkSW50ZXJhY3Rpb25QYW5lbCA9IHN0eWxlZC5kaXZgXG4gIHBhZGRpbmctYm90dG9tOiA2cHg7XG5gO1xuXG5JbnRlcmFjdGlvblBhbmVsRmFjdG9yeS5kZXBzID0gW1Rvb2x0aXBDb25maWdGYWN0b3J5LCBCcnVzaENvbmZpZ0ZhY3RvcnldO1xuXG5mdW5jdGlvbiBJbnRlcmFjdGlvblBhbmVsRmFjdG9yeShUb29sdGlwQ29uZmlnLCBCcnVzaENvbmZpZykge1xuICByZXR1cm4gY2xhc3MgSW50ZXJhY3Rpb25QYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGRhdGFzZXRzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBjb25maWc6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIG9uQ29uZmlnQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfTtcblxuICAgIHN0YXRlID0ge2lzQ29uZmlnQWN0aXZlOiBmYWxzZX07XG5cbiAgICBfdXBkYXRlQ29uZmlnID0gbmV3UHJvcCA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uQ29uZmlnQ2hhbmdlKHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5jb25maWcsXG4gICAgICAgIC4uLm5ld1Byb3BcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfZW5hYmxlQ29uZmlnID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNDb25maWdBY3RpdmU6ICF0aGlzLnN0YXRlLmlzQ29uZmlnQWN0aXZlfSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtjb25maWcsIGRhdGFzZXRzfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBvbkNoYW5nZSA9IG5ld0NvbmZpZyA9PiB0aGlzLl91cGRhdGVDb25maWcoe2NvbmZpZzogbmV3Q29uZmlnfSk7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBudWxsO1xuXG4gICAgICBzd2l0Y2ggKGNvbmZpZy5pZCkge1xuICAgICAgICBjYXNlICd0b29sdGlwJzpcbiAgICAgICAgICB0ZW1wbGF0ZSA9IChcbiAgICAgICAgICAgIDxUb29sdGlwQ29uZmlnXG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgY29uZmlnPXtjb25maWcuY29uZmlnfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYnJ1c2gnOlxuICAgICAgICAgIHRlbXBsYXRlID0gPEJydXNoQ29uZmlnIGNvbmZpZz17Y29uZmlnLmNvbmZpZ30gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkSW50ZXJhY3Rpb25QYW5lbCBjbGFzc05hbWU9XCJpbnRlcmFjdGlvbi1wYW5lbFwiPlxuICAgICAgICAgIDxTdHlsZWRQYW5lbEhlYWRlclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW50ZXJhY3Rpb24tcGFuZWxfX2hlYWRlclwiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLl9lbmFibGVDb25maWd9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFBhbmVsSGVhZGVyQ29udGVudCBjbGFzc05hbWU9XCJpbnRlcmFjdGlvbi1wYW5lbF9faGVhZGVyX19jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW50ZXJhY3Rpb24tcGFuZWxfX2hlYWRlcl9faWNvbiBpY29uXCI+XG4gICAgICAgICAgICAgICAgPGNvbmZpZy5pY29uQ29tcG9uZW50IGhlaWdodD1cIjEycHhcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnRlcmFjdGlvbi1wYW5lbF9faGVhZGVyX190aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxQYW5lbEhlYWRlclRpdGxlPntjb25maWcuaWR9PC9QYW5lbEhlYWRlclRpdGxlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvUGFuZWxIZWFkZXJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnRlcmFjdGlvbi1wYW5lbF9faGVhZGVyX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICBjaGVja2VkPXtjb25maWcuZW5hYmxlZH1cbiAgICAgICAgICAgICAgICBpZD17YCR7Y29uZmlnLmlkfS10b2dnbGVgfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB0aGlzLl91cGRhdGVDb25maWcoe2VuYWJsZWQ6ICFjb25maWcuZW5hYmxlZH0pfVxuICAgICAgICAgICAgICAgIHNlY29uZGFyeVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9TdHlsZWRQYW5lbEhlYWRlcj5cbiAgICAgICAgICB7KGNvbmZpZy5lbmFibGVkICYmIHRlbXBsYXRlKSAmJiAgKFxuICAgICAgICAgICAgPFN0eWxlZFBhbmVsQ29udGVudCBjbGFzc05hbWU9XCJpbnRlcmFjdGlvbi1wYW5lbF9fY29udGVudFwiPlxuICAgICAgICAgICAgICB7dGVtcGxhdGV9XG4gICAgICAgICAgICA8L1N0eWxlZFBhbmVsQ29udGVudD5cbiAgICAgICAgICApfVxuICAgICAgICA8L1N0eWxlZEludGVyYWN0aW9uUGFuZWw+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJhY3Rpb25QYW5lbEZhY3Rvcnk7XG4iXX0=