kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
255 lines (254 loc) • 40.8 kB
JavaScript
"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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
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 _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _uniqBy = _interopRequireDefault(require("lodash/uniqBy"));
var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components"));
var _accessor = _interopRequireDefault(require("./accessor"));
var _chickletedInput = _interopRequireDefault(require("./chickleted-input"));
var _typeahead = _interopRequireDefault(require("./typeahead"));
var _dropdownList = _interopRequireWildcard(require("./dropdown-list"));
var _portaled = _interopRequireDefault(require("../../common/portaled"));
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src");
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/common-utils/src");
var _reactIntl = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-intl");
var _dropdownSelect = _interopRequireDefault(require("./dropdown-select"));
var _styledComponents2 = require("../styled-components");
var _templateObject; // 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; }
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; })(); }
var DropdownWrapper = _styledComponents["default"].div.withConfig({
shouldForwardProp: _styledComponents2.shouldForwardProp
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border: 0;\n width: 100%;\n left: 0;\n z-index: ", ";\n width: ", "px;\n"])), function (props) {
return props.theme.dropdownWrapperZ;
}, function (props) {
return props.width;
});
var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
function ItemSelectorUnmemoized() {
var _this;
(0, _classCallCheck2["default"])(this, ItemSelectorUnmemoized);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, ItemSelectorUnmemoized, [].concat(args));
(0, _defineProperty2["default"])(_this, "state", {
showTypeahead: false,
dimensions: {
width: 200
}
});
(0, _defineProperty2["default"])(_this, "root", (0, _react.createRef)());
(0, _defineProperty2["default"])(_this, "handleClickOutside", function () {
_this._hideTypeahead();
});
(0, _defineProperty2["default"])(_this, "_handleResize", function (dimensions) {
_this.setState({
dimensions: dimensions
});
});
(0, _defineProperty2["default"])(_this, "_hideTypeahead", function () {
_this.setState({
showTypeahead: false
});
_this._onBlur();
});
(0, _defineProperty2["default"])(_this, "_onBlur", function () {
// note: chickleted input is not a real form element so we call onBlur()
// when we feel the events are appropriate
if (_this.props.onBlur) {
_this.props.onBlur();
}
});
(0, _defineProperty2["default"])(_this, "_removeItem", function (item, e) {
// only used when multiSelect = true
e.preventDefault();
e.stopPropagation();
var multiSelectedItems = (0, _src2.toArray)(_this.props.selectedItems);
var index = multiSelectedItems.findIndex(function (t) {
return t === item;
});
if (index < 0) {
return;
}
var items = [].concat((0, _toConsumableArray2["default"])(multiSelectedItems.slice(0, index)), (0, _toConsumableArray2["default"])(multiSelectedItems.slice(index + 1, multiSelectedItems.length)));
_this.props.onChange(items);
if (_this.props.closeOnSelect) {
_this.setState({
showTypeahead: false
});
_this._onBlur();
}
});
(0, _defineProperty2["default"])(_this, "_selectItem", function (item) {
var getValue = _accessor["default"].generateOptionToStringFor(_this.props.getOptionValue || _this.props.displayOption);
var previousSelected = (0, _src2.toArray)(_this.props.selectedItems);
if (_this.props.multiSelect) {
var items = (0, _uniqBy["default"])(previousSelected.concat((0, _src2.toArray)(item)), getValue);
_this.props.onChange(items);
} else {
_this.props.onChange(getValue(item));
}
if (_this.props.closeOnSelect) {
_this.setState({
showTypeahead: false
});
_this._onBlur();
}
});
(0, _defineProperty2["default"])(_this, "_onErase", function (e) {
e.stopPropagation();
_this.props.onChange(null);
});
(0, _defineProperty2["default"])(_this, "_showTypeahead", function (e) {
e.stopPropagation();
if (!_this.props.disabled) {
if (_this.props.onOpen) {
_this.props.onOpen();
}
_this.setState({
showTypeahead: true
});
}
});
return _this;
}
(0, _inherits2["default"])(ItemSelectorUnmemoized, _Component);
return (0, _createClass2["default"])(ItemSelectorUnmemoized, [{
key: "componentDidMount",
value: function componentDidMount() {
if (this.props.showDropdownOnMount) {
this.setState({
showTypeahead: true
});
}
if (this.root.current instanceof HTMLElement) {
(0, _src.observeDimensions)(this.root.current, this._handleResize);
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.root.current instanceof HTMLElement) {
(0, _src.unobserveDimensions)(this.root.current);
}
}
}, {
key: "_renderDropdown",
value: function _renderDropdown(intl) {
var _this$props$placement = this.props.placement,
placement = _this$props$placement === void 0 ? 'bottom' : _this$props$placement;
var dimensions = this.state.dimensions;
var DropDownWrapperComponent = this.props.DropDownWrapperComponent;
return /*#__PURE__*/_react["default"].createElement(_portaled["default"], {
left: 0,
top: 0,
isOpened: this.state.showTypeahead,
onClose: this._hideTypeahead
}, /*#__PURE__*/_react["default"].createElement(DropDownWrapperComponent, {
placement: placement,
width: dimensions === null || dimensions === void 0 ? void 0 : dimensions.width
}, /*#__PURE__*/_react["default"].createElement(_typeahead["default"], {
customClasses: {
results: 'list-selector',
input: 'typeahead__input',
listItem: 'list__item',
listAnchor: 'list__item__anchor'
},
options: this.props.options,
filterOption: this.props.filterOption,
fixedOptions: this.props.fixedOptions,
placeholder: this.props.typeaheadPlaceholder || intl ? intl.formatMessage({
id: 'placeholder.search'
}) : 'Search',
onOptionSelected: this._selectItem,
customListComponent: this.props.DropDownRenderComponent,
customListHeaderComponent: this.props.DropdownHeaderComponent,
customListItemComponent: this.props.DropDownLineItemRenderComponent,
displayOption: _accessor["default"].generateOptionToStringFor(this.props.displayOption),
searchable: this.props.searchable,
searchOptions: this.props.searchOptions,
showOptionsWhenEmpty: true,
selectedItems: (0, _src2.toArray)(this.props.selectedItems),
light: this.props.inputTheme === 'light'
})));
}
}, {
key: "render",
value: function render() {
var selected = (0, _src2.toArray)(this.props.selectedItems);
var displayOption = _accessor["default"].generateOptionToStringFor(this.props.displayOption);
var _this$props = this.props,
disabled = _this$props.disabled,
_this$props$inputThem = _this$props.inputTheme,
inputTheme = _this$props$inputThem === void 0 ? 'primary' : _this$props$inputThem;
var dropdownSelectProps = {
className: (0, _classnames["default"])({
active: this.state.showTypeahead
}),
displayOption: displayOption,
disabled: disabled,
onClick: this._showTypeahead,
error: this.props.isError,
inputTheme: inputTheme,
size: this.props.size
};
var intl = this.props.intl;
return /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])('item-selector', this.props.className),
ref: this.root
}, /*#__PURE__*/_react["default"].createElement("div", {
style: {
position: 'relative'
}
}, this.props.multiSelect ? /*#__PURE__*/_react["default"].createElement(_chickletedInput["default"], (0, _extends2["default"])({}, dropdownSelectProps, {
selectedItems: (0, _src2.toArray)(this.props.selectedItems),
placeholder: this.props.placeholder,
removeItem: this._removeItem,
reorderItems: this.props.reorderItems,
CustomChickletComponent: this.props.CustomChickletComponent,
inputTheme: inputTheme
})) : /*#__PURE__*/_react["default"].createElement(_dropdownSelect["default"], (0, _extends2["default"])({}, dropdownSelectProps, {
value: selected[0],
placeholder: this.props.placeholder,
erasable: this.props.erasable,
showArrow: this.props.showArrow,
onErase: this._onErase,
showDropdown: this._showTypeahead,
DropDownLineItemRenderComponent: this.props.DropDownLineItemRenderComponent
})), this._renderDropdown(intl)));
}
}]);
}(_react.Component);
(0, _defineProperty2["default"])(ItemSelectorUnmemoized, "defaultProps", {
multiSelect: true,
placeholder: 'placeholder.enterValue',
closeOnSelect: true,
searchable: true,
DropDownRenderComponent: _dropdownList["default"],
DropDownLineItemRenderComponent: _dropdownList.ListItem,
DropDownWrapperComponent: DropdownWrapper,
reorderItems: undefined,
className: ''
});
var ItemSelector = _react["default"].memo(ItemSelectorUnmemoized);
ItemSelector.displayName = 'ItemSelector';
var _default = exports["default"] = (0, _reactIntl.injectIntl)(ItemSelector);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdW5pcUJ5IiwiX3N0eWxlZENvbXBvbmVudHMiLCJfYWNjZXNzb3IiLCJfY2hpY2tsZXRlZElucHV0IiwiX3R5cGVhaGVhZCIsIl9kcm9wZG93bkxpc3QiLCJfcG9ydGFsZWQiLCJfc3JjIiwiX3NyYzIiLCJfcmVhY3RJbnRsIiwiX2Ryb3Bkb3duU2VsZWN0IiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJEcm9wZG93bldyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJ3aXRoQ29uZmlnIiwic2hvdWxkRm9yd2FyZFByb3AiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJkcm9wZG93bldyYXBwZXJaIiwid2lkdGgiLCJJdGVtU2VsZWN0b3JVbm1lbW9pemVkIiwiX0NvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiX2RlZmluZVByb3BlcnR5MiIsInNob3dUeXBlYWhlYWQiLCJkaW1lbnNpb25zIiwiY3JlYXRlUmVmIiwiX2hpZGVUeXBlYWhlYWQiLCJzZXRTdGF0ZSIsIl9vbkJsdXIiLCJvbkJsdXIiLCJpdGVtIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJtdWx0aVNlbGVjdGVkSXRlbXMiLCJ0b0FycmF5Iiwic2VsZWN0ZWRJdGVtcyIsImluZGV4IiwiZmluZEluZGV4IiwiaXRlbXMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwic2xpY2UiLCJvbkNoYW5nZSIsImNsb3NlT25TZWxlY3QiLCJnZXRWYWx1ZSIsIkFjY2Vzc29yIiwiZ2VuZXJhdGVPcHRpb25Ub1N0cmluZ0ZvciIsImdldE9wdGlvblZhbHVlIiwiZGlzcGxheU9wdGlvbiIsInByZXZpb3VzU2VsZWN0ZWQiLCJtdWx0aVNlbGVjdCIsInVuaXFCeSIsImRpc2FibGVkIiwib25PcGVuIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImNvbXBvbmVudERpZE1vdW50Iiwic2hvd0Ryb3Bkb3duT25Nb3VudCIsInJvb3QiLCJjdXJyZW50IiwiSFRNTEVsZW1lbnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVub2JzZXJ2ZURpbWVuc2lvbnMiLCJfcmVuZGVyRHJvcGRvd24iLCJpbnRsIiwiX3RoaXMkcHJvcHMkcGxhY2VtZW50IiwicGxhY2VtZW50Iiwic3RhdGUiLCJEcm9wRG93bldyYXBwZXJDb21wb25lbnQiLCJjcmVhdGVFbGVtZW50IiwibGVmdCIsInRvcCIsImlzT3BlbmVkIiwib25DbG9zZSIsImN1c3RvbUNsYXNzZXMiLCJyZXN1bHRzIiwiaW5wdXQiLCJsaXN0SXRlbSIsImxpc3RBbmNob3IiLCJvcHRpb25zIiwiZmlsdGVyT3B0aW9uIiwiZml4ZWRPcHRpb25zIiwicGxhY2Vob2xkZXIiLCJ0eXBlYWhlYWRQbGFjZWhvbGRlciIsImZvcm1hdE1lc3NhZ2UiLCJpZCIsIm9uT3B0aW9uU2VsZWN0ZWQiLCJfc2VsZWN0SXRlbSIsImN1c3RvbUxpc3RDb21wb25lbnQiLCJEcm9wRG93blJlbmRlckNvbXBvbmVudCIsImN1c3RvbUxpc3RIZWFkZXJDb21wb25lbnQiLCJEcm9wZG93bkhlYWRlckNvbXBvbmVudCIsImN1c3RvbUxpc3RJdGVtQ29tcG9uZW50IiwiRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudCIsInNlYXJjaGFibGUiLCJzZWFyY2hPcHRpb25zIiwic2hvd09wdGlvbnNXaGVuRW1wdHkiLCJsaWdodCIsImlucHV0VGhlbWUiLCJyZW5kZXIiLCJzZWxlY3RlZCIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkaW5wdXRUaGVtIiwiZHJvcGRvd25TZWxlY3RQcm9wcyIsImNsYXNzTmFtZSIsImNsYXNzbmFtZXMiLCJhY3RpdmUiLCJvbkNsaWNrIiwiX3Nob3dUeXBlYWhlYWQiLCJlcnJvciIsImlzRXJyb3IiLCJzaXplIiwicmVmIiwic3R5bGUiLCJwb3NpdGlvbiIsIl9leHRlbmRzMiIsInJlbW92ZUl0ZW0iLCJfcmVtb3ZlSXRlbSIsInJlb3JkZXJJdGVtcyIsIkN1c3RvbUNoaWNrbGV0Q29tcG9uZW50IiwiZXJhc2FibGUiLCJzaG93QXJyb3ciLCJvbkVyYXNlIiwiX29uRXJhc2UiLCJzaG93RHJvcGRvd24iLCJDb21wb25lbnQiLCJEcm9wZG93bkxpc3QiLCJMaXN0SXRlbSIsInVuZGVmaW5lZCIsIkl0ZW1TZWxlY3RvciIsIlJlYWN0IiwibWVtbyIsImRpc3BsYXlOYW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiaW5qZWN0SW50bCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZiwgQ29tcG9uZW50VHlwZSwgTW91c2VFdmVudEhhbmRsZXIsIFJlZk9iamVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC91bmlxQnknO1xuaW1wb3J0IHN0eWxlZCwge0lTdHlsZWRDb21wb25lbnR9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IEFjY2Vzc29yIGZyb20gJy4vYWNjZXNzb3InO1xuaW1wb3J0IENoaWNrbGV0ZWRJbnB1dCBmcm9tICcuL2NoaWNrbGV0ZWQtaW5wdXQnO1xuaW1wb3J0IFR5cGVhaGVhZCBmcm9tICcuL3R5cGVhaGVhZCc7XG5pbXBvcnQgRHJvcGRvd25MaXN0LCB7TGlzdEl0ZW19IGZyb20gJy4vZHJvcGRvd24tbGlzdCc7XG5pbXBvcnQgUG9ydGFsZWQgZnJvbSAnLi4vLi4vY29tbW9uL3BvcnRhbGVkJztcbmltcG9ydCB7b2JzZXJ2ZURpbWVuc2lvbnMsIHVub2JzZXJ2ZURpbWVuc2lvbnN9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHt0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge2luamVjdEludGwsIEludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge0xpc3RJdGVtUHJvcHN9IGZyb20gJy4vZHJvcGRvd24tc2VsZWN0JztcbmltcG9ydCBEcm9wZG93blNlbGVjdCBmcm9tICcuL2Ryb3Bkb3duLXNlbGVjdCc7XG5pbXBvcnQge3Nob3VsZEZvcndhcmRQcm9wfSBmcm9tICcuLi9zdHlsZWQtY29tcG9uZW50cyc7XG5cbmV4cG9ydCB0eXBlIERyb3Bkb3duV3JhcHBlclByb3BzID0ge1xuICBwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG59O1xuXG5jb25zdCBEcm9wZG93bldyYXBwZXI6IElTdHlsZWRDb21wb25lbnQ8J3dlYicsIERyb3Bkb3duV3JhcHBlclByb3BzPiA9IHN0eWxlZC5kaXYud2l0aENvbmZpZyh7XG4gIHNob3VsZEZvcndhcmRQcm9wXG59KTxEcm9wZG93bldyYXBwZXJQcm9wcz5gXG4gIGJvcmRlcjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25XcmFwcGVyWn07XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuYDtcblxuZXhwb3J0IHR5cGUgSXRlbVNlbGVjdG9yUHJvcHM8T3B0aW9uPiA9IHtcbiAgc2VsZWN0ZWRJdGVtcz86IFJlYWRvbmx5QXJyYXk8T3B0aW9uPiB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCBudWxsO1xuICBvcHRpb25zOiBSZWFkb25seUFycmF5PE9wdGlvbj47XG4gIG9uQ2hhbmdlOiAoaXRlbXM6IFJlYWRvbmx5QXJyYXk8T3B0aW9uPiB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCBudWxsKSA9PiB2b2lkO1xuICBmaXhlZE9wdGlvbnM/OiBSZWFkb25seUFycmF5PE9wdGlvbj4gfCBudWxsO1xuICBlcmFzYWJsZT86IGJvb2xlYW47XG4gIHNob3dBcnJvdz86IGJvb2xlYW47XG4gIHNlYXJjaE9wdGlvbnM/OiAodmFsdWU6IGFueSwgb3B0OiBPcHRpb24pID0+IGFueTtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIGRpc3BsYXlPcHRpb24/OiBzdHJpbmcgfCAoKG9wdDogT3B0aW9uKSA9PiBzdHJpbmcpO1xuICBnZXRPcHRpb25WYWx1ZT86IHN0cmluZyB8ICgob3B0OiBPcHRpb24pID0+IGFueSk7XG4gIGZpbHRlck9wdGlvbj86IHN0cmluZyB8ICgob3B0OiBPcHRpb24pID0+IGJvb2xlYW4pO1xuICBwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNFcnJvcj86IGJvb2xlYW47XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgaW5wdXRUaGVtZT86IHN0cmluZztcbiAgb25PcGVuPzogKCkgPT4gdm9pZDtcbiAgc2l6ZT86IHN0cmluZztcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuO1xuICB0eXBlYWhlYWRQbGFjZWhvbGRlcj86IHN0cmluZztcbiAgRHJvcERvd25XcmFwcGVyQ29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxhbnk+IHwgbnVsbDtcbiAgRHJvcGRvd25IZWFkZXJDb21wb25lbnQ/OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsO1xuICBEcm9wRG93blJlbmRlckNvbXBvbmVudD86IENvbXBvbmVudFR5cGU8YW55PjtcbiAgRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudD86IENvbXBvbmVudFR5cGU8TGlzdEl0ZW1Qcm9wczxPcHRpb24+PjtcbiAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQ/OiBDb21wb25lbnRUeXBlPGFueT47XG4gIGludGw6IEludGxTaGFwZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICByZW9yZGVySXRlbXM/OiAobmV3T3JkZXI6IGFueSkgPT4gdm9pZDtcbiAgc2hvd0Ryb3Bkb3duT25Nb3VudD86IGJvb2xlYW47XG59O1xuXG5jbGFzcyBJdGVtU2VsZWN0b3JVbm1lbW9pemVkIGV4dGVuZHMgQ29tcG9uZW50PEl0ZW1TZWxlY3RvclByb3BzPGFueT4+IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICBwbGFjZWhvbGRlcjogJ3BsYWNlaG9sZGVyLmVudGVyVmFsdWUnLFxuICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICBEcm9wRG93blJlbmRlckNvbXBvbmVudDogRHJvcGRvd25MaXN0LFxuICAgIERyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnQ6IExpc3RJdGVtLFxuICAgIERyb3BEb3duV3JhcHBlckNvbXBvbmVudDogRHJvcGRvd25XcmFwcGVyLFxuICAgIHJlb3JkZXJJdGVtczogdW5kZWZpbmVkLFxuICAgIGNsYXNzTmFtZTogJydcbiAgfTtcblxuICBzdGF0ZSA9IHtcbiAgICBzaG93VHlwZWFoZWFkOiBmYWxzZSxcbiAgICBkaW1lbnNpb25zOiB7XG4gICAgICB3aWR0aDogMjAwXG4gICAgfVxuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dEcm9wZG93bk9uTW91bnQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dUeXBlYWhlYWQ6IHRydWV9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb290LmN1cnJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5yb290LmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5yb290LmN1cnJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJvb3Q6IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD4gPSBjcmVhdGVSZWYoKTtcblxuICBoYW5kbGVDbGlja091dHNpZGUgPSAoKSA9PiB7XG4gICAgdGhpcy5faGlkZVR5cGVhaGVhZCgpO1xuICB9O1xuXG4gIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtkaW1lbnNpb25zfSk7XG4gIH07XG5cbiAgX2hpZGVUeXBlYWhlYWQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1R5cGVhaGVhZDogZmFsc2V9KTtcbiAgICB0aGlzLl9vbkJsdXIoKTtcbiAgfTtcblxuICBfb25CbHVyID0gKCkgPT4ge1xuICAgIC8vIG5vdGU6IGNoaWNrbGV0ZWQgaW5wdXQgaXMgbm90IGEgcmVhbCBmb3JtIGVsZW1lbnQgc28gd2UgY2FsbCBvbkJsdXIoKVxuICAgIC8vIHdoZW4gd2UgZmVlbCB0aGUgZXZlbnRzIGFyZSBhcHByb3ByaWF0ZVxuICAgIGlmICh0aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgdGhpcy5wcm9wcy5vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgX3JlbW92ZUl0ZW0gPSAoaXRlbSwgZSkgPT4ge1xuICAgIC8vIG9ubHkgdXNlZCB3aGVuIG11bHRpU2VsZWN0ID0gdHJ1ZVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG11bHRpU2VsZWN0ZWRJdGVtcyA9IHRvQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICBjb25zdCBpbmRleCA9IG11bHRpU2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgodCA9PiB0ID09PSBpdGVtKTtcblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtcyA9IFtcbiAgICAgIC4uLm11bHRpU2VsZWN0ZWRJdGVtcy5zbGljZSgwLCBpbmRleCksXG4gICAgICAuLi5tdWx0aVNlbGVjdGVkSXRlbXMuc2xpY2UoaW5kZXggKyAxLCBtdWx0aVNlbGVjdGVkSXRlbXMubGVuZ3RoKVxuICAgIF07XG5cbiAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGl0ZW1zKTtcblxuICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dUeXBlYWhlYWQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLl9vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgX3NlbGVjdEl0ZW0gPSBpdGVtID0+IHtcbiAgICBjb25zdCBnZXRWYWx1ZSA9IEFjY2Vzc29yLmdlbmVyYXRlT3B0aW9uVG9TdHJpbmdGb3IoXG4gICAgICB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlIHx8IHRoaXMucHJvcHMuZGlzcGxheU9wdGlvblxuICAgICk7XG5cbiAgICBjb25zdCBwcmV2aW91c1NlbGVjdGVkID0gdG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdW5pcUJ5KHByZXZpb3VzU2VsZWN0ZWQuY29uY2F0KHRvQXJyYXkoaXRlbSkpLCBnZXRWYWx1ZSk7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShnZXRWYWx1ZShpdGVtKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7c2hvd1R5cGVhaGVhZDogZmFsc2V9KTtcbiAgICAgIHRoaXMuX29uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBfb25FcmFzZTogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobnVsbCk7XG4gIH07XG5cbiAgX3Nob3dUeXBlYWhlYWQ6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uT3Blbikge1xuICAgICAgICB0aGlzLnByb3BzLm9uT3BlbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNob3dUeXBlYWhlYWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcmVuZGVyRHJvcGRvd24oaW50bDogSW50bFNoYXBlKSB7XG4gICAgY29uc3Qge3BsYWNlbWVudCA9ICdib3R0b20nfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge2RpbWVuc2lvbnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IERyb3BEb3duV3JhcHBlckNvbXBvbmVudCA9IHRoaXMucHJvcHNcbiAgICAgIC5Ecm9wRG93bldyYXBwZXJDb21wb25lbnQgYXMgUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxQb3J0YWxlZCBsZWZ0PXswfSB0b3A9ezB9IGlzT3BlbmVkPXt0aGlzLnN0YXRlLnNob3dUeXBlYWhlYWR9IG9uQ2xvc2U9e3RoaXMuX2hpZGVUeXBlYWhlYWR9PlxuICAgICAgICA8RHJvcERvd25XcmFwcGVyQ29tcG9uZW50IHBsYWNlbWVudD17cGxhY2VtZW50fSB3aWR0aD17ZGltZW5zaW9ucz8ud2lkdGh9PlxuICAgICAgICAgIDxUeXBlYWhlYWRcbiAgICAgICAgICAgIGN1c3RvbUNsYXNzZXM9e3tcbiAgICAgICAgICAgICAgcmVzdWx0czogJ2xpc3Qtc2VsZWN0b3InLFxuICAgICAgICAgICAgICBpbnB1dDogJ3R5cGVhaGVhZF9faW5wdXQnLFxuICAgICAgICAgICAgICBsaXN0SXRlbTogJ2xpc3RfX2l0ZW0nLFxuICAgICAgICAgICAgICBsaXN0QW5jaG9yOiAnbGlzdF9faXRlbV9fYW5jaG9yJ1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9wdGlvbnM9e3RoaXMucHJvcHMub3B0aW9uc31cbiAgICAgICAgICAgIGZpbHRlck9wdGlvbj17dGhpcy5wcm9wcy5maWx0ZXJPcHRpb259XG4gICAgICAgICAgICBmaXhlZE9wdGlvbnM9e3RoaXMucHJvcHMuZml4ZWRPcHRpb25zfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLnR5cGVhaGVhZFBsYWNlaG9sZGVyIHx8IGludGxcbiAgICAgICAgICAgICAgICA/IGludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdwbGFjZWhvbGRlci5zZWFyY2gnfSlcbiAgICAgICAgICAgICAgICA6ICdTZWFyY2gnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbk9wdGlvblNlbGVjdGVkPXt0aGlzLl9zZWxlY3RJdGVtfVxuICAgICAgICAgICAgY3VzdG9tTGlzdENvbXBvbmVudD17dGhpcy5wcm9wcy5Ecm9wRG93blJlbmRlckNvbXBvbmVudH1cbiAgICAgICAgICAgIGN1c3RvbUxpc3RIZWFkZXJDb21wb25lbnQ9e3RoaXMucHJvcHMuRHJvcGRvd25IZWFkZXJDb21wb25lbnR9XG4gICAgICAgICAgICBjdXN0b21MaXN0SXRlbUNvbXBvbmVudD17dGhpcy5wcm9wcy5Ecm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50fVxuICAgICAgICAgICAgZGlzcGxheU9wdGlvbj17QWNjZXNzb3IuZ2VuZXJhdGVPcHRpb25Ub1N0cmluZ0Zvcih0aGlzLnByb3BzLmRpc3BsYXlPcHRpb24pfVxuICAgICAgICAgICAgc2VhcmNoYWJsZT17dGhpcy5wcm9wcy5zZWFyY2hhYmxlfVxuICAgICAgICAgICAgc2VhcmNoT3B0aW9ucz17dGhpcy5wcm9wcy5zZWFyY2hPcHRpb25zfVxuICAgICAgICAgICAgc2hvd09wdGlvbnNXaGVuRW1wdHlcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e3RvQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zKX1cbiAgICAgICAgICAgIGxpZ2h0PXt0aGlzLnByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Ecm9wRG93bldyYXBwZXJDb21wb25lbnQ+XG4gICAgICA8L1BvcnRhbGVkPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0b0FycmF5KHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgY29uc3QgZGlzcGxheU9wdGlvbiA9IEFjY2Vzc29yLmdlbmVyYXRlT3B0aW9uVG9TdHJpbmdGb3IodGhpcy5wcm9wcy5kaXNwbGF5T3B0aW9uKTtcbiAgICBjb25zdCB7ZGlzYWJsZWQsIGlucHV0VGhlbWUgPSAncHJpbWFyeSd9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IGRyb3Bkb3duU2VsZWN0UHJvcHMgPSB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzbmFtZXMoe1xuICAgICAgICBhY3RpdmU6IHRoaXMuc3RhdGUuc2hvd1R5cGVhaGVhZFxuICAgICAgfSksXG4gICAgICBkaXNwbGF5T3B0aW9uLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBvbkNsaWNrOiB0aGlzLl9zaG93VHlwZWFoZWFkLFxuICAgICAgZXJyb3I6IHRoaXMucHJvcHMuaXNFcnJvcixcbiAgICAgIGlucHV0VGhlbWUsXG4gICAgICBzaXplOiB0aGlzLnByb3BzLnNpemVcbiAgICB9O1xuICAgIGNvbnN0IGludGwgPSB0aGlzLnByb3BzLmludGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2l0ZW0tc2VsZWN0b3InLCB0aGlzLnByb3BzLmNsYXNzTmFtZSl9IHJlZj17dGhpcy5yb290fT5cbiAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiAncmVsYXRpdmUnfX0+XG4gICAgICAgICAgey8qIHRoaXMgcGFydCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIGxhYmVsICovfVxuICAgICAgICAgIHt0aGlzLnByb3BzLm11bHRpU2VsZWN0ID8gKFxuICAgICAgICAgICAgPENoaWNrbGV0ZWRJbnB1dFxuICAgICAgICAgICAgICB7Li4uZHJvcGRvd25TZWxlY3RQcm9wc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17dG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgcmVtb3ZlSXRlbT17dGhpcy5fcmVtb3ZlSXRlbX1cbiAgICAgICAgICAgICAgcmVvcmRlckl0ZW1zPXt0aGlzLnByb3BzLnJlb3JkZXJJdGVtc31cbiAgICAgICAgICAgICAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQ9e3RoaXMucHJvcHMuQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnR9XG4gICAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8RHJvcGRvd25TZWxlY3RcbiAgICAgICAgICAgICAgey4uLmRyb3Bkb3duU2VsZWN0UHJvcHN9XG4gICAgICAgICAgICAgIHZhbHVlPXtzZWxlY3RlZFswXX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIGVyYXNhYmxlPXt0aGlzLnByb3BzLmVyYXNhYmxlfVxuICAgICAgICAgICAgICBzaG93QXJyb3c9e3RoaXMucHJvcHMuc2hvd0Fycm93fVxuICAgICAgICAgICAgICBvbkVyYXNlPXt0aGlzLl9vbkVyYXNlfVxuICAgICAgICAgICAgICBzaG93RHJvcGRvd249e3RoaXMuX3Nob3dUeXBlYWhlYWR9XG4gICAgICAgICAgICAgIERyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnQ9e3RoaXMucHJvcHMuRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7LyogdGhpcyBwYXJ0IGlzIHVzZWQgdG8gYnVpbHQgdGhlIGxpc3QgKi99XG4gICAgICAgICAge3RoaXMuX3JlbmRlckRyb3Bkb3duKGludGwpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgSXRlbVNlbGVjdG9yID0gUmVhY3QubWVtbyhJdGVtU2VsZWN0b3JVbm1lbW9pemVkKTtcbkl0ZW1TZWxlY3Rvci5kaXNwbGF5TmFtZSA9ICdJdGVtU2VsZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBpbmplY3RJbnRsKEl0ZW1TZWxlY3Rvcik7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFLLFNBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLGdCQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxhQUFBLEdBQUFULHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxTQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxJQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxLQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxVQUFBLEdBQUFaLE9BQUE7QUFFQSxJQUFBYSxlQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBYyxrQkFBQSxHQUFBZCxPQUFBO0FBQXVELElBQUFlLGVBQUEsRUFsQnZEO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWxCLHdCQUFBa0IsQ0FBQSxFQUFBRSxD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