UNPKG

kepler.gl

Version:

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

107 lines (106 loc) 15.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 _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _reactVirtualized = require("react-virtualized"); var _isEqual = _interopRequireDefault(require("lodash/isEqual")); var _excluded = ["setGridRef"]; 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; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var GridHack = exports["default"] = /*#__PURE__*/function (_PureComponent) { function GridHack() { var _this; (0, _classCallCheck2["default"])(this, GridHack); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, GridHack, [].concat(args)); (0, _defineProperty2["default"])(_this, "grid", null); (0, _defineProperty2["default"])(_this, "_preventScrollBack", function (e) { var scrollLeft = _this.props.scrollLeft; if (scrollLeft !== undefined && scrollLeft <= 0 && e.deltaX < 0) { // Prevent Scroll On Scrollable Elements, avoid browser backward navigation // https://alvarotrigo.com/blog/prevent-scroll-on-scrollable-element-js/ e.preventDefault(); e.stopPropagation(); return false; } return; }); (0, _defineProperty2["default"])(_this, "_updateRef", function (x) { if (!_this.grid && x) { var _this$grid; _this.grid = x; /* * This hack exists because we need to add wheel event listener to the div rendered by Grid * */ // @ts-expect-error _scrollingContainer not typed in Grid (_this$grid = _this.grid) === null || _this$grid === void 0 || (_this$grid = _this$grid._scrollingContainer) === null || _this$grid === void 0 || _this$grid.addEventListener('wheel', _this._preventScrollBack, { passive: false }); } }); return _this; } (0, _inherits2["default"])(GridHack, _PureComponent); return (0, _createClass2["default"])(GridHack, [{ key: "componentDidUpdate", value: function componentDidUpdate(preProps) { /* * This hack exists because in react-virtualized the * _columnWidthGetter is only called in the constructor * even though it is reassigned with new props resulting in * a new width for cells not being calculated so we must * force trigger a resize. * * https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/Grid.js#L322 * */ if (!(0, _isEqual["default"])(preProps.cellSizeCache, this.props.cellSizeCache)) { var _this$grid2; (_this$grid2 = this.grid) === null || _this$grid2 === void 0 || _this$grid2.recomputeGridSize(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { var _this$grid3; // @ts-expect-error _scrollingContainer not typed in Grid (_this$grid3 = this.grid) === null || _this$grid3 === void 0 || (_this$grid3 = _this$grid3._scrollingContainer) === null || _this$grid3 === void 0 || _this$grid3.removeEventListener('wheel', this._preventScrollBack, { passive: false }); } }, { key: "render", value: function render() { var _this2 = this; var _this$props = this.props, setGridRef = _this$props.setGridRef, rest = (0, _objectWithoutProperties2["default"])(_this$props, _excluded); return /*#__PURE__*/_react["default"].createElement(_reactVirtualized.Grid, (0, _extends2["default"])({ ref: function ref(x) { if (setGridRef) setGridRef(x); _this2._updateRef(x); }, key: "grid-hack" }, rest)); } }]); }(_react.PureComponent); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RWaXJ0dWFsaXplZCIsIl9pc0VxdWFsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9leGNsdWRlZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiR3JpZEhhY2siLCJleHBvcnRzIiwiX1B1cmVDb21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJzY3JvbGxMZWZ0IiwicHJvcHMiLCJ1bmRlZmluZWQiLCJkZWx0YVgiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIngiLCJncmlkIiwiX3RoaXMkZ3JpZCIsIl9zY3JvbGxpbmdDb250YWluZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiX3ByZXZlbnRTY3JvbGxCYWNrIiwicGFzc2l2ZSIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmVQcm9wcyIsImlzRXF1YWwiLCJjZWxsU2l6ZUNhY2hlIiwiX3RoaXMkZ3JpZDIiLCJyZWNvbXB1dGVHcmlkU2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiX3RoaXMkZ3JpZDMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMiLCJzZXRHcmlkUmVmIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJjcmVhdGVFbGVtZW50IiwiR3JpZCIsIl9leHRlbmRzMiIsInJlZiIsIl91cGRhdGVSZWYiLCJQdXJlQ29tcG9uZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi9kYXRhLXRhYmxlL2dyaWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge1B1cmVDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7R3JpZCwgR3JpZFByb3BzfSBmcm9tICdyZWFjdC12aXJ0dWFsaXplZCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyaWRIYWNrIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxHcmlkUHJvcHM+IHtcbiAgZ3JpZDogR3JpZCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmVQcm9wcykge1xuICAgIC8qXG4gICAgICogVGhpcyBoYWNrIGV4aXN0cyBiZWNhdXNlIGluIHJlYWN0LXZpcnR1YWxpemVkIHRoZVxuICAgICAqIF9jb2x1bW5XaWR0aEdldHRlciBpcyBvbmx5IGNhbGxlZCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICAgKiBldmVuIHRob3VnaCBpdCBpcyByZWFzc2lnbmVkIHdpdGggbmV3IHByb3BzIHJlc3VsdGluZyBpblxuICAgICAqIGEgbmV3IHdpZHRoIGZvciBjZWxscyBub3QgYmVpbmcgY2FsY3VsYXRlZCBzbyB3ZSBtdXN0XG4gICAgICogZm9yY2UgdHJpZ2dlciBhIHJlc2l6ZS5cbiAgICAgKlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXZpcnR1YWxpemVkL2Jsb2IvbWFzdGVyL3NvdXJjZS9HcmlkL0dyaWQuanMjTDMyMlxuICAgICAqXG4gICAgICovXG4gICAgaWYgKCFpc0VxdWFsKHByZVByb3BzLmNlbGxTaXplQ2FjaGUsIHRoaXMucHJvcHMuY2VsbFNpemVDYWNoZSkpIHtcbiAgICAgIHRoaXMuZ3JpZD8ucmVjb21wdXRlR3JpZFNpemUoKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIF9zY3JvbGxpbmdDb250YWluZXIgbm90IHR5cGVkIGluIEdyaWRcbiAgICB0aGlzLmdyaWQ/Ll9zY3JvbGxpbmdDb250YWluZXI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy5fcHJldmVudFNjcm9sbEJhY2ssIHtcbiAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBfcHJldmVudFNjcm9sbEJhY2sgPSBlID0+IHtcbiAgICBjb25zdCB7c2Nyb2xsTGVmdH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChzY3JvbGxMZWZ0ICE9PSB1bmRlZmluZWQgJiYgc2Nyb2xsTGVmdCA8PSAwICYmIGUuZGVsdGFYIDwgMCkge1xuICAgICAgLy8gUHJldmVudCBTY3JvbGwgT24gU2Nyb2xsYWJsZSBFbGVtZW50cywgYXZvaWQgYnJvd3NlciBiYWNrd2FyZCBuYXZpZ2F0aW9uXG4gICAgICAvLyBodHRwczovL2FsdmFyb3RyaWdvLmNvbS9ibG9nL3ByZXZlbnQtc2Nyb2xsLW9uLXNjcm9sbGFibGUtZWxlbWVudC1qcy9cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfTtcblxuICBfdXBkYXRlUmVmID0geCA9PiB7XG4gICAgaWYgKCF0aGlzLmdyaWQgJiYgeCkge1xuICAgICAgdGhpcy5ncmlkID0geDtcbiAgICAgIC8qXG4gICAgICAgKiBUaGlzIGhhY2sgZXhpc3RzIGJlY2F1c2Ugd2UgbmVlZCB0byBhZGQgd2hlZWwgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGRpdiByZW5kZXJlZCBieSBHcmlkXG4gICAgICAgKlxuICAgICAgICovXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIF9zY3JvbGxpbmdDb250YWluZXIgbm90IHR5cGVkIGluIEdyaWRcbiAgICAgIHRoaXMuZ3JpZD8uX3Njcm9sbGluZ0NvbnRhaW5lcj8uYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLl9wcmV2ZW50U2Nyb2xsQmFjaywge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7c2V0R3JpZFJlZiwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8R3JpZFxuICAgICAgICByZWY9e3ggPT4ge1xuICAgICAgICAgIGlmIChzZXRHcmlkUmVmKSBzZXRHcmlkUmVmKHgpO1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVJlZih4KTtcbiAgICAgICAgfX1cbiAgICAgICAga2V5PVwiZ3JpZC1oYWNrXCJcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFBcUMsSUFBQUksU0FBQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBUCx3QkFBQU8sQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFBLFNBQUFHLENBQUEsR0FBQVAsQ0FBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQWMsQ0FBQSxVQUFBRyxDQUFBLEtBQUFBLENBQUEsQ0FBQVYsR0FBQSxJQUFBVSxDQUFBLENBQUFDLEdBQUEsSUFBQVAsTUFBQSxDQUFBQyxjQUFBLENBQUFKLENBQUEsRUFBQU0sQ0FBQSxFQUFBRyxDQUFBLElBQUFULENBQUEsQ0FBQU0sQ0FBQSxJQUFBZCxDQUFBLENBQUFjLENBQUEsWUFBQU4sQ0FBQSxjQUFBUixDQUFBLEVBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZSxHQUFBLENBQUFsQixDQUFBLEVBQUFRLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFXLFdBQUFoQixDQUFBLEVBQUFpQixDQUFBLEVBQUFwQixDQUFBLFdBQUFvQixDQUFBLE9BQUFDLGdCQUFBLGFBQUFELENBQUEsT0FBQUUsMkJBQUEsYUFBQW5CLENBQUEsRUFBQW9CLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBTCxDQUFBLEVBQUFwQixDQUFBLFlBQUFxQixnQkFBQSxhQUFBbEIsQ0FBQSxFQUFBdUIsV0FBQSxJQUFBTixDQUFBLENBQUFPLEtBQUEsQ0FBQXhCLENBQUEsRUFBQUgsQ0FBQTtBQUFBLFNBQUF1QiwwQkFBQSxjQUFBcEIsQ0FBQSxJQUFBeUIsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQWQsSUFBQSxDQUFBUSxPQUFBLENBQUFDLFNBQUEsQ0FBQUcsT0FBQSxpQ0FBQXpCLENBQUEsYUFBQW9CLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFwQixDQUFBLFVBTHJDO0FBQ0E7QUFBQSxJQU1xQjRCLFFBQVEsR0FBQUMsT0FBQSxxQ0FBQUMsY0FBQTtFQUFBLFNBQUFGLFNBQUE7SUFBQSxJQUFBRyxLQUFBO0lBQUEsSUFBQUMsZ0JBQUEsbUJBQUFKLFFBQUE7SUFBQSxTQUFBSyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO01BQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7SUFBQTtJQUFBUCxLQUFBLEdBQUFmLFVBQUEsT0FBQVksUUFBQSxLQUFBVyxNQUFBLENBQUFILElBQUE7SUFBQSxJQUFBSSxnQkFBQSxhQUFBVCxLQUFBLFVBQ1AsSUFBSTtJQUFBLElBQUFTLGdCQUFBLGFBQUFULEtBQUEsd0JBeUJILFVBQUFsQyxDQUFDLEVBQUk7TUFDeEIsSUFBTzRDLFVBQVUsR0FBSVYsS0FBQSxDQUFLVyxLQUFLLENBQXhCRCxVQUFVO01BQ2pCLElBQUlBLFVBQVUsS0FBS0UsU0FBUyxJQUFJRixVQUFVLElBQUksQ0FBQyxJQUFJNUMsQ0FBQyxDQUFDK0MsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMvRDtRQUNBO1FBQ0EvQyxDQUFDLENBQUNnRCxjQUFjLENBQUMsQ0FBQztRQUNsQmhELENBQUMsQ0FBQ2lELGVBQWUsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sS0FBSztNQUNkO01BQ0E7SUFDRixDQUFDO0lBQUEsSUFBQU4sZ0JBQUEsYUFBQVQsS0FBQSxnQkFFWSxVQUFBZ0IsQ0FBQyxFQUFJO01BQ2hCLElBQUksQ0FBQ2hCLEtBQUEsQ0FBS2lCLElBQUksSUFBSUQsQ0FBQyxFQUFFO1FBQUEsSUFBQUUsVUFBQTtRQUNuQmxCLEtBQUEsQ0FBS2lCLElBQUksR0FBR0QsQ0FBQztRQUNiO0FBQ047QUFDQTtBQUNBO1FBQ007UUFDQSxDQUFBRSxVQUFBLEdBQUFsQixLQUFBLENBQUtpQixJQUFJLGNBQUFDLFVBQUEsZ0JBQUFBLFVBQUEsR0FBVEEsVUFBQSxDQUFXQyxtQkFBbUIsY0FBQUQsVUFBQSxlQUE5QkEsVUFBQSxDQUFnQ0UsZ0JBQWdCLENBQUMsT0FBTyxFQUFFcEIsS0FBQSxDQUFLcUIsa0JBQWtCLEVBQUU7VUFDakZDLE9BQU8sRUFBRTtRQUNYLENBQUMsQ0FBQztNQUNKO0lBQ0YsQ0FBQztJQUFBLE9BQUF0QixLQUFBO0VBQUE7RUFBQSxJQUFBdUIsVUFBQSxhQUFBMUIsUUFBQSxFQUFBRSxjQUFBO0VBQUEsV0FBQXlCLGFBQUEsYUFBQTNCLFFBQUE7SUFBQTRCLEdBQUE7SUFBQUMsS0FBQSxFQS9DRCxTQUFBQyxrQkFBa0JBLENBQUNDLFFBQVEsRUFBRTtNQUMzQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUNJLElBQUksQ0FBQyxJQUFBQyxtQkFBTyxFQUFDRCxRQUFRLENBQUNFLGFBQWEsRUFBRSxJQUFJLENBQUNuQixLQUFLLENBQUNtQixhQUFhLENBQUMsRUFBRTtRQUFBLElBQUFDLFdBQUE7UUFDOUQsQ0FBQUEsV0FBQSxPQUFJLENBQUNkLElBQUksY0FBQWMsV0FBQSxlQUFUQSxXQUFBLENBQVdDLGlCQUFpQixDQUFDLENBQUM7TUFDaEM7SUFDRjtFQUFDO0lBQUFQLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFPLG9CQUFvQkEsQ0FBQSxFQUFHO01BQUEsSUFBQUMsV0FBQTtNQUNyQjtNQUNBLENBQUFBLFdBQUEsT0FBSSxDQUFDakIsSUFBSSxjQUFBaUIsV0FBQSxnQkFBQUEsV0FBQSxHQUFUQSxXQUFBLENBQVdmLG1CQUFtQixjQUFBZSxXQUFBLGVBQTlCQSxXQUFBLENBQWdDQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDZCxrQkFBa0IsRUFBRTtRQUNwRkMsT0FBTyxFQUFFO01BQ1gsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBRyxHQUFBO0lBQUFDLEtBQUEsRUE0QkQsU0FBQVUsTUFBTUEsQ0FBQSxFQUFHO01BQUEsSUFBQUMsTUFBQTtNQUNQLElBQUFDLFdBQUEsR0FBOEIsSUFBSSxDQUFDM0IsS0FBSztRQUFqQzRCLFVBQVUsR0FBQUQsV0FBQSxDQUFWQyxVQUFVO1FBQUtDLElBQUksT0FBQUMseUJBQUEsYUFBQUgsV0FBQSxFQUFBMUUsU0FBQTtNQUMxQixvQkFDRU4sTUFBQSxZQUFBb0YsYUFBQSxDQUFDakYsaUJBQUEsQ0FBQWtGLElBQUksTUFBQUMsU0FBQTtRQUNIQyxHQUFHLEVBQUUsU0FBTEEsR0FBR0EsQ0FBRTdCLENBQUMsRUFBSTtVQUNSLElBQUl1QixVQUFVLEVBQUVBLFVBQVUsQ0FBQ3ZCLENBQUMsQ0FBQztVQUM3QnFCLE1BQUksQ0FBQ1MsVUFBVSxDQUFDOUIsQ0FBQyxDQUFDO1FBQ3BCLENBQUU7UUFDRlMsR0FBRyxFQUFDO01BQVcsR0FDWGUsSUFBSSxDQUNULENBQUM7SUFFTjtFQUFDO0FBQUEsRUFoRW1DTyxvQkFBYSIsImlnbm9yZUxpc3QiOltdfQ==