kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
165 lines (164 loc) • 35.3 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
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 _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _localization = require("@kepler.gl/localization");
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _icons = require("../../common/icons");
var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
var _rangeSlider = _interopRequireDefault(require("../../common/range-slider"));
var _styledComponents2 = require("../../common/styled-components");
var _switch = _interopRequireDefault(require("../../common/switch"));
var _layerConfigGroup = _interopRequireWildcard(require("./layer-config-group"));
var _constants = require("@kepler.gl/constants");
var _fieldSelector = _interopRequireDefault(require("../../common/field-selector"));
var _colorSelector = _interopRequireDefault(require("./color-selector"));
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 SwitchWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n line-height: 11px;\n margin-bottom: 8px;\n"])));
TextLabelPanelFactory.deps = [_rangeSlider["default"], _layerConfigGroup["default"], _fieldSelector["default"], _colorSelector["default"]];
function TextLabelPanelFactory(RangeSlider, LayerConfigGroup, FieldSelector, ColorSelector) {
var TextLabelPanel = /*#__PURE__*/function (_Component) {
function TextLabelPanel() {
(0, _classCallCheck2["default"])(this, TextLabelPanel);
return _callSuper(this, TextLabelPanel, arguments);
}
(0, _inherits2["default"])(TextLabelPanel, _Component);
return (0, _createClass2["default"])(TextLabelPanel, [{
key: "render",
value: function render() {
var _this = this;
var _this$props = this.props,
updateLayerTextLabel = _this$props.updateLayerTextLabel,
textLabel = _this$props.textLabel,
fields = _this$props.fields;
var currentFields = textLabel.map(function (tl) {
return tl.field && tl.field.name;
}).filter(function (d) {
return Boolean(d);
});
return /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, {
label: 'panel.text.label',
collapsible: true
}, /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleHeader, null, /*#__PURE__*/_react["default"].createElement(FieldSelector, {
fields: fields,
value: currentFields,
onSelect: function onSelect(selected) {
return updateLayerTextLabel('all', 'fields', selected);
},
multiSelect: true
})), /*#__PURE__*/_react["default"].createElement(_layerConfigGroup.ConfigGroupCollapsibleContent, null, textLabel.map(function (tl, idx) {
return /*#__PURE__*/_react["default"].createElement("div", {
key: tl.field ? tl.field.name : "null-".concat(idx)
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: 'panel.text.labelWithId',
values: {
labelId: idx + 1
}
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(FieldSelector, {
fields: fields,
value: tl.field && tl.field.name || 'placeholder.selectField',
placeholder: 'placeholder.empty',
onSelect: function onSelect(v) {
return updateLayerTextLabel(idx, 'field', v);
},
erasable: true
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.fontSize"
})), /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, _constants.LAYER_TEXT_CONFIGS.fontSize, {
value1: tl.size,
isRanged: false,
onChange: function onChange(v) {
return updateLayerTextLabel(idx, 'size', v[1]);
}
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.fontColor"
})), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
colorSets: [{
selectedColor: tl.color,
setColor: function setColor(v) {
return updateLayerTextLabel(idx, 'color', v);
}
}]
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.outlineWidth"
})), /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, _constants.LAYER_TEXT_CONFIGS.outlineWidth, {
value1: tl.outlineWidth,
isRanged: false,
onChange: function onChange(v) {
return updateLayerTextLabel(idx, 'outlineWidth', v[1]);
}
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.outlineColor"
})), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
colorSets: [{
selectedColor: tl.outlineColor,
setColor: function setColor(v) {
return updateLayerTextLabel(idx, 'outlineColor', v);
}
}],
useOpacity: true
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(SwitchWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.backgroundColor"
})), /*#__PURE__*/_react["default"].createElement(_switch["default"], {
checked: tl.background,
id: "".concat(_this.props.id, "-textBackgroundEnabled-").concat(idx),
onChange: function onChange() {
return updateLayerTextLabel(idx, 'background', !tl.background);
}
})), /*#__PURE__*/_react["default"].createElement(ColorSelector, {
colorSets: [{
selectedColor: tl.backgroundColor,
setColor: function setColor(v) {
return updateLayerTextLabel(idx, 'backgroundColor', v);
}
}],
useOpacity: true,
disabled: !tl.background
})), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.SpaceBetweenFlexbox, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.SBFlexboxItem, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.textAnchor"
})), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], (0, _extends2["default"])({}, _constants.LAYER_TEXT_CONFIGS.textAnchor, {
selectedItems: tl.anchor,
onChange: function onChange(val) {
return updateLayerTextLabel(idx, 'anchor', val);
}
}))), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SBFlexboxItem, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.alignment"
})), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], (0, _extends2["default"])({}, _constants.LAYER_TEXT_CONFIGS.textAlignment, {
selectedItems: tl.alignment,
onChange: function onChange(val) {
return updateLayerTextLabel(idx, 'alignment', val);
}
}))))));
}), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, {
link: true,
onClick: function onClick() {
return updateLayerTextLabel(textLabel.length, '', null);
}
}, /*#__PURE__*/_react["default"].createElement(_icons.Add, {
height: "12px"
}), /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: "panel.text.addMoreLabel"
})))));
}
}]);
}(_react.Component);
return TextLabelPanel;
}
var _default = exports["default"] = TextLabelPanelFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9jYWxpemF0aW9uIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2ljb25zIiwiX2l0ZW1TZWxlY3RvciIsIl9yYW5nZVNsaWRlciIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9zd2l0Y2giLCJfbGF5ZXJDb25maWdHcm91cCIsIl9jb25zdGFudHMiLCJfZmllbGRTZWxlY3RvciIsIl9jb2xvclNlbGVjdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJTd2l0Y2hXcmFwcGVyIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJUZXh0TGFiZWxQYW5lbEZhY3RvcnkiLCJkZXBzIiwiUmFuZ2VTbGlkZXJGYWN0b3J5IiwiTGF5ZXJDb25maWdHcm91cEZhY3RvcnkiLCJGaWVsZFNlbGVjdG9yRmFjdG9yeSIsIkNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiUmFuZ2VTbGlkZXIiLCJMYXllckNvbmZpZ0dyb3VwIiwiRmllbGRTZWxlY3RvciIsIkNvbG9yU2VsZWN0b3IiLCJUZXh0TGFiZWxQYW5lbCIsIl9Db21wb25lbnQiLCJfY2xhc3NDYWxsQ2hlY2syIiwiYXJndW1lbnRzIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsInJlbmRlciIsIl90aGlzIiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsInVwZGF0ZUxheWVyVGV4dExhYmVsIiwidGV4dExhYmVsIiwiZmllbGRzIiwiY3VycmVudEZpZWxkcyIsIm1hcCIsInRsIiwiZmllbGQiLCJuYW1lIiwiZmlsdGVyIiwiZCIsImNyZWF0ZUVsZW1lbnQiLCJsYWJlbCIsImNvbGxhcHNpYmxlIiwiQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUhlYWRlciIsIm9uU2VsZWN0Iiwic2VsZWN0ZWQiLCJtdWx0aVNlbGVjdCIsIkNvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50IiwiaWR4IiwiY29uY2F0IiwiUGFuZWxMYWJlbCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJpZCIsInZhbHVlcyIsImxhYmVsSWQiLCJTaWRlUGFuZWxTZWN0aW9uIiwicGxhY2Vob2xkZXIiLCJ2IiwiZXJhc2FibGUiLCJfZXh0ZW5kczIiLCJMQVlFUl9URVhUX0NPTkZJR1MiLCJmb250U2l6ZSIsInZhbHVlMSIsInNpemUiLCJpc1JhbmdlZCIsIm9uQ2hhbmdlIiwiY29sb3JTZXRzIiwic2VsZWN0ZWRDb2xvciIsImNvbG9yIiwic2V0Q29sb3IiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lQ29sb3IiLCJ1c2VPcGFjaXR5IiwiY2hlY2tlZCIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlZCIsIlNwYWNlQmV0d2VlbkZsZXhib3giLCJTQkZsZXhib3hJdGVtIiwidGV4dEFuY2hvciIsInNlbGVjdGVkSXRlbXMiLCJhbmNob3IiLCJ2YWwiLCJ0ZXh0QWxpZ25tZW50IiwiYWxpZ25tZW50IiwiQnV0dG9uIiwibGluayIsIm9uQ2xpY2siLCJsZW5ndGgiLCJBZGQiLCJoZWlnaHQiLCJDb21wb25lbnQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2lkZS1wYW5lbC9sYXllci1wYW5lbC90ZXh0LWxhYmVsLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NvbG9yUmFuZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge0FkZH0gZnJvbSAnLi4vLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCBJdGVtU2VsZWN0b3IgZnJvbSAnLi4vLi4vY29tbW9uL2l0ZW0tc2VsZWN0b3IvaXRlbS1zZWxlY3Rvcic7XG5pbXBvcnQgUmFuZ2VTbGlkZXJGYWN0b3J5IGZyb20gJy4uLy4uL2NvbW1vbi9yYW5nZS1zbGlkZXInO1xuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBQYW5lbExhYmVsLFxuICBTQkZsZXhib3hJdGVtLFxuICBTaWRlUGFuZWxTZWN0aW9uLFxuICBTcGFjZUJldHdlZW5GbGV4Ym94XG59IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgU3dpdGNoIGZyb20gJy4uLy4uL2NvbW1vbi9zd2l0Y2gnO1xuaW1wb3J0IExheWVyQ29uZmlnR3JvdXBGYWN0b3J5LCB7XG4gIENvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50LFxuICBDb25maWdHcm91cENvbGxhcHNpYmxlSGVhZGVyXG59IGZyb20gJy4vbGF5ZXItY29uZmlnLWdyb3VwJztcblxuaW1wb3J0IHtMQVlFUl9URVhUX0NPTkZJR1N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7RmllbGQsIExheWVyVGV4dExhYmVsLCBSR0JBQ29sb3IsIFJHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCBGaWVsZFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vZmllbGQtc2VsZWN0b3InO1xuaW1wb3J0IENvbG9yU2VsZWN0b3JGYWN0b3J5IGZyb20gJy4vY29sb3Itc2VsZWN0b3InO1xuXG5jb25zdCBTd2l0Y2hXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBsaW5lLWhlaWdodDogMTFweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxudHlwZSBUZXh0TGFiZWxQYW5lbFByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgZmllbGRzOiBGaWVsZFtdO1xuICB0ZXh0TGFiZWw6IExheWVyVGV4dExhYmVsW107XG4gIHVwZGF0ZUxheWVyVGV4dExhYmVsOiAoaWR4OiBudW1iZXIgfCAnYWxsJywgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xufTtcblxuVGV4dExhYmVsUGFuZWxGYWN0b3J5LmRlcHMgPSBbXG4gIFJhbmdlU2xpZGVyRmFjdG9yeSxcbiAgTGF5ZXJDb25maWdHcm91cEZhY3RvcnksXG4gIEZpZWxkU2VsZWN0b3JGYWN0b3J5LFxuICBDb2xvclNlbGVjdG9yRmFjdG9yeVxuXTtcblxuZnVuY3Rpb24gVGV4dExhYmVsUGFuZWxGYWN0b3J5KFxuICBSYW5nZVNsaWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgUmFuZ2VTbGlkZXJGYWN0b3J5PixcbiAgTGF5ZXJDb25maWdHcm91cDogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb25maWdHcm91cEZhY3Rvcnk+LFxuICBGaWVsZFNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBGaWVsZFNlbGVjdG9yRmFjdG9yeT4sXG4gIENvbG9yU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIENvbG9yU2VsZWN0b3JGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxUZXh0TGFiZWxQYW5lbFByb3BzPiB7XG4gIGNsYXNzIFRleHRMYWJlbFBhbmVsIGV4dGVuZHMgQ29tcG9uZW50PFRleHRMYWJlbFBhbmVsUHJvcHM+IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7dXBkYXRlTGF5ZXJUZXh0TGFiZWwsIHRleHRMYWJlbCwgZmllbGRzfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBCb29sZWFuKGQpKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgbGFiZWw9eydwYW5lbC50ZXh0LmxhYmVsJ30gY29sbGFwc2libGU+XG4gICAgICAgICAgPENvbmZpZ0dyb3VwQ29sbGFwc2libGVIZWFkZXI+XG4gICAgICAgICAgICA8RmllbGRTZWxlY3RvclxuICAgICAgICAgICAgICBmaWVsZHM9e2ZpZWxkc31cbiAgICAgICAgICAgICAgdmFsdWU9e2N1cnJlbnRGaWVsZHMgYXMgc3RyaW5nW119XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtzZWxlY3RlZCA9PiB1cGRhdGVMYXllclRleHRMYWJlbCgnYWxsJywgJ2ZpZWxkcycsIHNlbGVjdGVkKX1cbiAgICAgICAgICAgICAgbXVsdGlTZWxlY3RcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Db25maWdHcm91cENvbGxhcHNpYmxlSGVhZGVyPlxuICAgICAgICAgIDxDb25maWdHcm91cENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgIHt0ZXh0TGFiZWwubWFwKCh0bCwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgIDxkaXYga2V5PXt0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBgbnVsbC0ke2lkeH1gfT5cbiAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsncGFuZWwudGV4dC5sYWJlbFdpdGhJZCd9IHZhbHVlcz17e2xhYmVsSWQ6IGlkeCArIDF9fSAvPlxuICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxGaWVsZFNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcz17ZmllbGRzfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17KHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpIHx8ICdwbGFjZWhvbGRlci5zZWxlY3RGaWVsZCd9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsncGxhY2Vob2xkZXIuZW1wdHknfVxuICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17diA9PiB1cGRhdGVMYXllclRleHRMYWJlbChpZHgsICdmaWVsZCcsIHYpfVxuICAgICAgICAgICAgICAgICAgICBlcmFzYWJsZVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJwYW5lbC50ZXh0LmZvbnRTaXplXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgICAgICAgICAgICB7Li4uTEFZRVJfVEVYVF9DT05GSUdTLmZvbnRTaXplfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTE9e3RsLnNpemV9XG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VkPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3YgPT4gdXBkYXRlTGF5ZXJUZXh0TGFiZWwoaWR4LCAnc2l6ZScsIHZbMV0pfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJwYW5lbC50ZXh0LmZvbnRDb2xvclwiIC8+XG4gICAgICAgICAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgICAgICA8Q29sb3JTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICBjb2xvclNldHM9e1tcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiB0bC5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbG9yOiAodjogUkdCQ29sb3IgfCBSR0JBQ29sb3IgfCBDb2xvclJhbmdlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVMYXllclRleHRMYWJlbChpZHgsICdjb2xvcicsIHYpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cInBhbmVsLnRleHQub3V0bGluZVdpZHRoXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgICAgICAgICAgICB7Li4uTEFZRVJfVEVYVF9DT05GSUdTLm91dGxpbmVXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUxPXt0bC5vdXRsaW5lV2lkdGh9XG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VkPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3YgPT4gdXBkYXRlTGF5ZXJUZXh0TGFiZWwoaWR4LCAnb3V0bGluZVdpZHRoJywgdlsxXSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cInBhbmVsLnRleHQub3V0bGluZUNvbG9yXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU2V0cz17W1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IHRsLm91dGxpbmVDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbG9yOiB2ID0+IHVwZGF0ZUxheWVyVGV4dExhYmVsKGlkeCwgJ291dGxpbmVDb2xvcicsIHYpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICAgICAgICB1c2VPcGFjaXR5PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxTd2l0Y2hXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cInBhbmVsLnRleHQuYmFja2dyb3VuZENvbG9yXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dGwuYmFja2dyb3VuZH1cbiAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7dGhpcy5wcm9wcy5pZH0tdGV4dEJhY2tncm91bmRFbmFibGVkLSR7aWR4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHVwZGF0ZUxheWVyVGV4dExhYmVsKGlkeCwgJ2JhY2tncm91bmQnLCAhdGwuYmFja2dyb3VuZCl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1N3aXRjaFdyYXBwZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxDb2xvclNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU2V0cz17W1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IHRsLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbG9yOiB2ID0+IHVwZGF0ZUxheWVyVGV4dExhYmVsKGlkeCwgJ2JhY2tncm91bmRDb2xvcicsIHYpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICAgICAgICB1c2VPcGFjaXR5PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXRsLmJhY2tncm91bmR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPFNwYWNlQmV0d2VlbkZsZXhib3g+XG4gICAgICAgICAgICAgICAgICAgIDxTQkZsZXhib3hJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJwYW5lbC50ZXh0LnRleHRBbmNob3JcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4uTEFZRVJfVEVYVF9DT05GSUdTLnRleHRBbmNob3J9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXt0bC5hbmNob3J9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dmFsID0+IHVwZGF0ZUxheWVyVGV4dExhYmVsKGlkeCwgJ2FuY2hvcicsIHZhbCl9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQkZsZXhib3hJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8U0JGbGV4Ym94SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwicGFuZWwudGV4dC5hbGlnbm1lbnRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4uTEFZRVJfVEVYVF9DT05GSUdTLnRleHRBbGlnbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXt0bC5hbGlnbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dmFsID0+IHVwZGF0ZUxheWVyVGV4dExhYmVsKGlkeCwgJ2FsaWdubWVudCcsIHZhbCl9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQkZsZXhib3hJdGVtPlxuICAgICAgICAgICAgICAgICAgPC9TcGFjZUJldHdlZW5GbGV4Ym94PlxuICAgICAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICA8QnV0dG9uIGxpbmsgb25DbGljaz17KCkgPT4gdXBkYXRlTGF5ZXJUZXh0TGFiZWwodGV4dExhYmVsLmxlbmd0aCwgJycsIG51bGwpfT5cbiAgICAgICAgICAgICAgICA8QWRkIGhlaWdodD1cIjEycHhcIiAvPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwicGFuZWwudGV4dC5hZGRNb3JlTGFiZWxcIiAvPlxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICA8L0NvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBUZXh0TGFiZWxQYW5lbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dExhYmVsUGFuZWxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FB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
;