kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
187 lines (185 loc) • 35.4 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.InputBoxContainer = exports.ColorSelectorInput = exports.ColorBlock = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react"));
var _reactIntl = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-intl");
var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components"));
var _react2 = require("@floating-ui/react");
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src");
var _rangeSlider = _interopRequireDefault(require("../../common/range-slider"));
var _styledComponents2 = require("../../common/styled-components");
var _colorPalette = _interopRequireDefault(require("./color-palette"));
var _colorRangeSelector = _interopRequireDefault(require("./color-range-selector"));
var _singleColorPalette = _interopRequireDefault(require("./single-color-palette"));
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5; // 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 OpacitySliderWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0px 12px 12px 12px;\n"])));
var OPACITY_SLIDER_PROPS = {
type: 'number',
range: [0, 1],
value0: 0,
step: 0.01,
isRanged: false,
label: 'Opacity',
showInput: true
};
var ColorBlock = exports.ColorBlock = _styledComponents["default"].div.withConfig({
shouldForwardProp: _styledComponents2.shouldForwardProp
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: 32px;\n height: 18px;\n border-radius: 1px;\n background-color: ", ";\n"])), function (props) {
return Array.isArray(props.backgroundcolor) ? "rgb(".concat(props.backgroundcolor.slice(0, 3).join(','), ")") : 'transparent';
});
var StyledColorSelectorWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n .selector__dropdown {\n max-height: 600px; /* increase from the default 500px defined by StyledPanelDropdown */\n }\n"])));
var ColorSelectorInput = exports.ColorSelectorInput = _styledComponents["default"].div.withConfig({
shouldForwardProp: _styledComponents2.shouldForwardProp
})(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n height: ", ";\n\n .color-selector__selector__label {\n text-transform: capitalize;\n font-size: 12px;\n text-align: center;\n color: ", ";\n }\n"])), function (props) {
return props.inputTheme === 'secondary' ? props.theme.secondaryInput : props.theme.input;
}, function (props) {
return props.theme.inputBoxHeight;
}, function (props) {
return props.theme.inputPlaceholderColor;
});
var InputBoxContainer = exports.InputBoxContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n\n .color-select__input-group {\n flex-grow: 1;\n }\n .color-select__input-group:nth-child(2) {\n margin-left: 12px;\n }\n"])));
ColorSelectorFactory.deps = [_colorRangeSelector["default"], _rangeSlider["default"]];
function ColorSelectorFactory(ColorRangeSelector, RangeSlider) {
var ColorSelector = function ColorSelector(_ref) {
var _ref$colorSets = _ref.colorSets,
colorSets = _ref$colorSets === void 0 ? [] : _ref$colorSets,
colorUI = _ref.colorUI,
inputTheme = _ref.inputTheme,
disabled = _ref.disabled,
useOpacity = _ref.useOpacity,
setColorUI = _ref.setColorUI;
var _useState = (0, _react.useState)(colorUI ? colorUI.showDropdown : false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
showDropdown = _useState2[0],
setShowDropdown = _useState2[1];
var showSketcher = colorUI ? colorUI.showSketcher : false;
var editingLookup = colorUI ? colorUI.showDropdown : showDropdown;
var editingColorSet = typeof editingLookup === 'number' && colorSets[editingLookup] ? colorSets[editingLookup] : false;
var closePanelDropdown = (0, _react.useCallback)(function () {
if (editingLookup === false) {
return;
}
if (setColorUI) {
setColorUI({
showDropdown: false,
showSketcher: false
});
} else {
setShowDropdown(false);
}
}, [editingLookup, setColorUI, setShowDropdown]);
var handleClickOutside = (0, _react.useCallback)(function () {
if (Number.isInteger(showSketcher)) {
// if sketcher is open, let sketch to close itself first
return;
}
closePanelDropdown();
}, [showSketcher, closePanelDropdown]);
// floating-ui boilerplate to establish close on outside click
var _useFloating = (0, _react2.useFloating)({
open: true,
onOpenChange: function onOpenChange(v) {
if (!v) {
handleClickOutside();
}
}
}),
refs = _useFloating.refs,
context = _useFloating.context;
var dismiss = (0, _react2.useDismiss)(context);
var _useInteractions = (0, _react2.useInteractions)([dismiss]),
getFloatingProps = _useInteractions.getFloatingProps;
var setColor = (0, _react.useCallback)(function (colorSet, color, opacity) {
var _ref2 = colorSet || {},
setColor = _ref2.setColor;
if (!setColor) {
return;
}
if (useOpacity && Array.isArray(color)) {
setColor([].concat((0, _toConsumableArray2["default"])(color.slice(0, 3)), [opacity]));
} else {
setColor(color);
}
}, [useOpacity]);
var onSelectColor = (0, _react.useCallback)(function (color, e) {
if (e) e.stopPropagation();
var colorSet = editingColorSet;
if (colorSet) {
setColor(colorSet, color, colorSet.selectedColor[3]);
}
}, [editingColorSet, setColor]);
var onSelectOpacity = (0, _react.useCallback)(function (opacity, e) {
if (e) e.stopPropagation();
var colorSet = editingColorSet;
if (colorSet) {
setColor(colorSet, colorSet.selectedColor, Math.round(opacity[1] * 255));
}
}, [editingColorSet, setColor]);
var onToggleDropdown = (0, _react.useCallback)(function (e, i) {
e.stopPropagation();
e.preventDefault();
var showDropdownValue = editingLookup === false ? i // open it for the specific color set index
: false; // close it
if (setColorUI) {
setColorUI({
showDropdown: showDropdownValue
});
} else {
setShowDropdown(showDropdownValue);
}
}, [editingLookup, setColorUI, setShowDropdown]);
return /*#__PURE__*/_react["default"].createElement(StyledColorSelectorWrapper, (0, _extends2["default"])({
className: "color-selector",
ref: refs.setFloating
}, getFloatingProps()), /*#__PURE__*/_react["default"].createElement(InputBoxContainer, null, colorSets.map(function (cSet, i) {
return /*#__PURE__*/_react["default"].createElement("div", {
className: "color-select__input-group",
key: i
}, /*#__PURE__*/_react["default"].createElement(ColorSelectorInput, {
className: "color-selector__selector",
active: editingLookup === i,
disabled: disabled,
inputTheme: inputTheme,
onClick: function onClick(e) {
return onToggleDropdown(e, i);
}
}, cSet.isRange ? /*#__PURE__*/_react["default"].createElement(_colorPalette["default"], {
colors: cSet.selectedColor.colors
}) : /*#__PURE__*/_react["default"].createElement(ColorBlock, {
className: "color-selector__selector__block",
backgroundcolor: cSet.selectedColor
}), cSet.label ? /*#__PURE__*/_react["default"].createElement("div", {
className: "color-selector__selector__label"
}, cSet.label) : null));
})), editingColorSet ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledPanelDropdown, {
className: "color-selector__dropdown"
}, editingColorSet.isRange && colorUI && setColorUI ? /*#__PURE__*/_react["default"].createElement(ColorRangeSelector, {
selectedColorRange: editingColorSet.selectedColor,
onSelectColorRange: onSelectColor,
setColorPaletteUI: setColorUI,
colorPaletteUI: colorUI
}) : /*#__PURE__*/_react["default"].createElement(_singleColorPalette["default"], {
selectedColor: (0, _src.rgbToHex)(editingColorSet.selectedColor),
onSelectColor: onSelectColor
}), useOpacity ? /*#__PURE__*/_react["default"].createElement(OpacitySliderWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_reactIntl.FormattedMessage, {
id: "color.opacity"
})), /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, OPACITY_SLIDER_PROPS, {
value1: editingColorSet.selectedColor[3] / 255,
onChange: onSelectOpacity
}))) : null) : null);
};
return ColorSelector;
}
var _default = exports["default"] = ColorSelectorFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0MiIsIl9zcmMiLCJfcmFuZ2VTbGlkZXIiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29sb3JQYWxldHRlIiwiX2NvbG9yUmFuZ2VTZWxlY3RvciIsIl9zaW5nbGVDb2xvclBhbGV0dGUiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiT3BhY2l0eVNsaWRlcldyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIk9QQUNJVFlfU0xJREVSX1BST1BTIiwidHlwZSIsInJhbmdlIiwidmFsdWUwIiwic3RlcCIsImlzUmFuZ2VkIiwibGFiZWwiLCJzaG93SW5wdXQiLCJDb2xvckJsb2NrIiwiZXhwb3J0cyIsIndpdGhDb25maWciLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiYmFja2dyb3VuZGNvbG9yIiwiY29uY2F0Iiwic2xpY2UiLCJqb2luIiwiU3R5bGVkQ29sb3JTZWxlY3RvcldyYXBwZXIiLCJDb2xvclNlbGVjdG9ySW5wdXQiLCJpbnB1dFRoZW1lIiwidGhlbWUiLCJzZWNvbmRhcnlJbnB1dCIsImlucHV0IiwiaW5wdXRCb3hIZWlnaHQiLCJpbnB1dFBsYWNlaG9sZGVyQ29sb3IiLCJJbnB1dEJveENvbnRhaW5lciIsIkNvbG9yU2VsZWN0b3JGYWN0b3J5IiwiZGVwcyIsIkNvbG9yUmFuZ2VTZWxlY3RvckZhY3RvcnkiLCJSYW5nZVNsaWRlckZhY3RvcnkiLCJDb2xvclJhbmdlU2VsZWN0b3IiLCJSYW5nZVNsaWRlciIsIkNvbG9yU2VsZWN0b3IiLCJfcmVmIiwiX3JlZiRjb2xvclNldHMiLCJjb2xvclNldHMiLCJjb2xvclVJIiwiZGlzYWJsZWQiLCJ1c2VPcGFjaXR5Iiwic2V0Q29sb3JVSSIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwic2hvd0Ryb3Bkb3duIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInNldFNob3dEcm9wZG93biIsInNob3dTa2V0Y2hlciIsImVkaXRpbmdMb29rdXAiLCJlZGl0aW5nQ29sb3JTZXQiLCJjbG9zZVBhbmVsRHJvcGRvd24iLCJ1c2VDYWxsYmFjayIsImhhbmRsZUNsaWNrT3V0c2lkZSIsIk51bWJlciIsImlzSW50ZWdlciIsIl91c2VGbG9hdGluZyIsInVzZUZsb2F0aW5nIiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsInYiLCJyZWZzIiwiY29udGV4dCIsImRpc21pc3MiLCJ1c2VEaXNtaXNzIiwiX3VzZUludGVyYWN0aW9ucyIsInVzZUludGVyYWN0aW9ucyIsImdldEZsb2F0aW5nUHJvcHMiLCJzZXRDb2xvciIsImNvbG9yU2V0IiwiY29sb3IiLCJvcGFjaXR5IiwiX3JlZjIiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwib25TZWxlY3RDb2xvciIsInN0b3BQcm9wYWdhdGlvbiIsInNlbGVjdGVkQ29sb3IiLCJvblNlbGVjdE9wYWNpdHkiLCJNYXRoIiwicm91bmQiLCJvblRvZ2dsZURyb3Bkb3duIiwicHJldmVudERlZmF1bHQiLCJzaG93RHJvcGRvd25WYWx1ZSIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJjbGFzc05hbWUiLCJyZWYiLCJzZXRGbG9hdGluZyIsIm1hcCIsImNTZXQiLCJrZXkiLCJhY3RpdmUiLCJvbkNsaWNrIiwiaXNSYW5nZSIsImNvbG9ycyIsIlN0eWxlZFBhbmVsRHJvcGRvd24iLCJzZWxlY3RlZENvbG9yUmFuZ2UiLCJvblNlbGVjdENvbG9yUmFuZ2UiLCJzZXRDb2xvclBhbGV0dGVVSSIsImNvbG9yUGFsZXR0ZVVJIiwicmdiVG9IZXgiLCJQYW5lbExhYmVsIiwiRm9ybWF0dGVkTWVzc2FnZSIsImlkIiwidmFsdWUxIiwib25DaGFuZ2UiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2NvbG9yLXNlbGVjdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlU3RhdGUsIE1vdXNlRXZlbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7dXNlRGlzbWlzcywgdXNlRmxvYXRpbmcsIHVzZUludGVyYWN0aW9uc30gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0JztcblxuaW1wb3J0IHtDb2xvclJhbmdlfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7Q29sb3JVSSwgTmVzdGVkUGFydGlhbCwgUkdCQUNvbG9yLCBSR0JDb2xvcn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge3JnYlRvSGV4fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IFJhbmdlU2xpZGVyRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vcmFuZ2Utc2xpZGVyJztcbmltcG9ydCB7UGFuZWxMYWJlbCwgc2hvdWxkRm9yd2FyZFByb3AsIFN0eWxlZFBhbmVsRHJvcGRvd259IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgQ29sb3JQYWxldHRlIGZyb20gJy4vY29sb3ItcGFsZXR0ZSc7XG5pbXBvcnQgQ29sb3JSYW5nZVNlbGVjdG9yRmFjdG9yeSBmcm9tICcuL2NvbG9yLXJhbmdlLXNlbGVjdG9yJztcbmltcG9ydCBTaW5nbGVDb2xvclBhbGV0dGUgZnJvbSAnLi9zaW5nbGUtY29sb3ItcGFsZXR0ZSc7XG5cbnR5cGUgQ29sb3JTZWxlY3RvcklucHV0UHJvcHMgPSB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29sb3JTZXQgPSB7XG4gIHNlbGVjdGVkQ29sb3I6IFJHQkNvbG9yIHwgUkdCQUNvbG9yIHwgQ29sb3JSYW5nZTtcbiAgc2V0Q29sb3I6ICh2OiBSR0JDb2xvciB8IFJHQkFDb2xvciB8IENvbG9yUmFuZ2UpID0+IHZvaWQ7XG4gIGlzUmFuZ2U/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbn07XG5cbnR5cGUgQ29sb3JTZWxlY3RvclByb3BzID0ge1xuICBjb2xvclNldHM6IENvbG9yU2V0W107XG4gIGNvbG9yVUk/OiBDb2xvclVJO1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHVzZU9wYWNpdHk/OiBib29sZWFuO1xuICBzZXRDb2xvclVJPzogKG5ld0NvbmZpZzogTmVzdGVkUGFydGlhbDxDb2xvclVJPikgPT4gdm9pZDtcbn07XG5cbmNvbnN0IE9wYWNpdHlTbGlkZXJXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZzogMHB4IDEycHggMTJweCAxMnB4O1xuYDtcblxuY29uc3QgT1BBQ0lUWV9TTElERVJfUFJPUFMgPSB7XG4gIHR5cGU6ICdudW1iZXInLFxuICByYW5nZTogWzAsIDFdLFxuICB2YWx1ZTA6IDAsXG4gIHN0ZXA6IDAuMDEsXG4gIGlzUmFuZ2VkOiBmYWxzZSxcbiAgbGFiZWw6ICdPcGFjaXR5JyxcbiAgc2hvd0lucHV0OiB0cnVlXG59O1xuXG5leHBvcnQgY29uc3QgQ29sb3JCbG9jayA9IHN0eWxlZC5kaXYud2l0aENvbmZpZyh7XG4gIHNob3VsZEZvcndhcmRQcm9wXG59KTx7YmFja2dyb3VuZGNvbG9yOiBSR0JDb2xvcn0+YFxuICB3aWR0aDogMzJweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT5cbiAgICBBcnJheS5pc0FycmF5KHByb3BzLmJhY2tncm91bmRjb2xvcilcbiAgICAgID8gYHJnYigke3Byb3BzLmJhY2tncm91bmRjb2xvci5zbGljZSgwLCAzKS5qb2luKCcsJyl9KWBcbiAgICAgIDogJ3RyYW5zcGFyZW50J307XG5gO1xuXG5jb25zdCBTdHlsZWRDb2xvclNlbGVjdG9yV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIC5zZWxlY3Rvcl9fZHJvcGRvd24ge1xuICAgIG1heC1oZWlnaHQ6IDYwMHB4OyAvKiBpbmNyZWFzZSBmcm9tIHRoZSBkZWZhdWx0IDUwMHB4IGRlZmluZWQgYnkgU3R5bGVkUGFuZWxEcm9wZG93biAqL1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgQ29sb3JTZWxlY3RvcklucHV0ID0gc3R5bGVkLmRpdi53aXRoQ29uZmlnKHtcbiAgc2hvdWxkRm9yd2FyZFByb3Bcbn0pPENvbG9yU2VsZWN0b3JJbnB1dFByb3BzPmBcbiAgJHtwcm9wcyA9PiAocHJvcHMuaW5wdXRUaGVtZSA9PT0gJ3NlY29uZGFyeScgPyBwcm9wcy50aGVtZS5zZWNvbmRhcnlJbnB1dCA6IHByb3BzLnRoZW1lLmlucHV0KX07XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEJveEhlaWdodH07XG5cbiAgLmNvbG9yLXNlbGVjdG9yX19zZWxlY3Rvcl9fbGFiZWwge1xuICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRQbGFjZWhvbGRlckNvbG9yfTtcbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IElucHV0Qm94Q29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5jb2xvci1zZWxlY3RfX2lucHV0LWdyb3VwIHtcbiAgICBmbGV4LWdyb3c6IDE7XG4gIH1cbiAgLmNvbG9yLXNlbGVjdF9faW5wdXQtZ3JvdXA6bnRoLWNoaWxkKDIpIHtcbiAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgfVxuYDtcblxuQ29sb3JTZWxlY3RvckZhY3RvcnkuZGVwcyA9IFtDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5LCBSYW5nZVNsaWRlckZhY3RvcnldO1xuXG5mdW5jdGlvbiBDb2xvclNlbGVjdG9yRmFjdG9yeShcbiAgQ29sb3JSYW5nZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBDb2xvclJhbmdlU2VsZWN0b3JGYWN0b3J5PixcbiAgUmFuZ2VTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFJhbmdlU2xpZGVyRmFjdG9yeT5cbik6IFJlYWN0LkZDPENvbG9yU2VsZWN0b3JQcm9wcz4ge1xuICBjb25zdCBDb2xvclNlbGVjdG9yOiBSZWFjdC5GQzxDb2xvclNlbGVjdG9yUHJvcHM+ID0gKHtcbiAgICBjb2xvclNldHMgPSBbXSxcbiAgICBjb2xvclVJLFxuICAgIGlucHV0VGhlbWUsXG4gICAgZGlzYWJsZWQsXG4gICAgdXNlT3BhY2l0eSxcbiAgICBzZXRDb2xvclVJXG4gIH06IENvbG9yU2VsZWN0b3JQcm9wcykgPT4ge1xuICAgIGNvbnN0IFtzaG93RHJvcGRvd24sIHNldFNob3dEcm9wZG93bl0gPSB1c2VTdGF0ZShjb2xvclVJID8gY29sb3JVSS5zaG93RHJvcGRvd24gOiBmYWxzZSk7XG4gICAgY29uc3Qgc2hvd1NrZXRjaGVyID0gY29sb3JVSSA/IGNvbG9yVUkuc2hvd1NrZXRjaGVyIDogZmFsc2U7XG4gICAgY29uc3QgZWRpdGluZ0xvb2t1cCA9IGNvbG9yVUkgPyBjb2xvclVJLnNob3dEcm9wZG93biA6IHNob3dEcm9wZG93bjtcbiAgICBjb25zdCBlZGl0aW5nQ29sb3JTZXQ6IENvbG9yU2V0IHwgZmFsc2UgPVxuICAgICAgdHlwZW9mIGVkaXRpbmdMb29rdXAgPT09ICdudW1iZXInICYmIGNvbG9yU2V0c1tlZGl0aW5nTG9va3VwXVxuICAgICAgICA/IGNvbG9yU2V0c1tlZGl0aW5nTG9va3VwXVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgY29uc3QgY2xvc2VQYW5lbERyb3Bkb3duID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgaWYgKGVkaXRpbmdMb29rdXAgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzZXRDb2xvclVJKSB7XG4gICAgICAgIHNldENvbG9yVUkoe3Nob3dEcm9wZG93bjogZmFsc2UsIHNob3dTa2V0Y2hlcjogZmFsc2V9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNob3dEcm9wZG93bihmYWxzZSk7XG4gICAgICB9XG4gICAgfSwgW2VkaXRpbmdMb29rdXAsIHNldENvbG9yVUksIHNldFNob3dEcm9wZG93bl0pO1xuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoc2hvd1NrZXRjaGVyKSkge1xuICAgICAgICAvLyBpZiBza2V0Y2hlciBpcyBvcGVuLCBsZXQgc2tldGNoIHRvIGNsb3NlIGl0c2VsZiBmaXJzdFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjbG9zZVBhbmVsRHJvcGRvd24oKTtcbiAgICB9LCBbc2hvd1NrZXRjaGVyLCBjbG9zZVBhbmVsRHJvcGRvd25dKTtcblxuICAgIC8vIGZsb2F0aW5nLXVpIGJvaWxlcnBsYXRlIHRvIGVzdGFibGlzaCBjbG9zZSBvbiBvdXRzaWRlIGNsaWNrXG4gICAgY29uc3Qge3JlZnMsIGNvbnRleHR9ID0gdXNlRmxvYXRpbmcoe1xuICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIG9uT3BlbkNoYW5nZTogdiA9PiB7XG4gICAgICAgIGlmICghdikge1xuICAgICAgICAgIGhhbmRsZUNsaWNrT3V0c2lkZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZGlzbWlzcyA9IHVzZURpc21pc3MoY29udGV4dCk7XG4gICAgY29uc3Qge2dldEZsb2F0aW5nUHJvcHN9ID0gdXNlSW50ZXJhY3Rpb25zKFtkaXNtaXNzXSk7XG5cbiAgICBjb25zdCBzZXRDb2xvciA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGNvbG9yU2V0OiBDb2xvclNldCwgY29sb3I6IFJHQkNvbG9yIHwgUkdCQUNvbG9yIHwgQ29sb3JSYW5nZSwgb3BhY2l0eTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHtzZXRDb2xvcn0gPSBjb2xvclNldCB8fCB7fTtcbiAgICAgICAgaWYgKCFzZXRDb2xvcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlT3BhY2l0eSAmJiBBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgICAgICAgIHNldENvbG9yKFsuLi5jb2xvci5zbGljZSgwLCAzKSwgb3BhY2l0eV0gYXMgUkdCQUNvbG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRDb2xvcihjb2xvcik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbdXNlT3BhY2l0eV1cbiAgICApO1xuXG4gICAgY29uc3Qgb25TZWxlY3RDb2xvciA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGNvbG9yOiBSR0JDb2xvciB8IENvbG9yUmFuZ2UsIGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGUpIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnN0IGNvbG9yU2V0ID0gZWRpdGluZ0NvbG9yU2V0O1xuICAgICAgICBpZiAoY29sb3JTZXQpIHtcbiAgICAgICAgICBzZXRDb2xvcihjb2xvclNldCwgY29sb3IsIGNvbG9yU2V0LnNlbGVjdGVkQ29sb3JbM10pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2VkaXRpbmdDb2xvclNldCwgc2V0Q29sb3JdXG4gICAgKTtcblxuICAgIGNvbnN0IG9uU2VsZWN0T3BhY2l0eSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKG9wYWNpdHk6IG51bWJlcltdLCBlOiBFdmVudCB8IG51bGwgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKGUpIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnN0IGNvbG9yU2V0ID0gZWRpdGluZ0NvbG9yU2V0O1xuICAgICAgICBpZiAoY29sb3JTZXQpIHtcbiAgICAgICAgICBzZXRDb2xvcihjb2xvclNldCwgY29sb3JTZXQuc2VsZWN0ZWRDb2xvciwgTWF0aC5yb3VuZChvcGFjaXR5WzFdICogMjU1KSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbZWRpdGluZ0NvbG9yU2V0LCBzZXRDb2xvcl1cbiAgICApO1xuXG4gICAgY29uc3Qgb25Ub2dnbGVEcm9wZG93biA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGUsIGkpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBzaG93RHJvcGRvd25WYWx1ZSA9XG4gICAgICAgICAgZWRpdGluZ0xvb2t1cCA9PT0gZmFsc2VcbiAgICAgICAgICAgID8gaSAvLyBvcGVuIGl0IGZvciB0aGUgc3BlY2lmaWMgY29sb3Igc2V0IGluZGV4XG4gICAgICAgICAgICA6IGZhbHNlOyAvLyBjbG9zZSBpdFxuICAgICAgICBpZiAoc2V0Q29sb3JVSSkge1xuICAgICAgICAgIHNldENvbG9yVUkoe3Nob3dEcm9wZG93bjogc2hvd0Ryb3Bkb3duVmFsdWV9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRTaG93RHJvcGRvd24oc2hvd0Ryb3Bkb3duVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2VkaXRpbmdMb29rdXAsIHNldENvbG9yVUksIHNldFNob3dEcm9wZG93bl1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRDb2xvclNlbGVjdG9yV3JhcHBlclxuICAgICAgICBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3RvclwiXG4gICAgICAgIHJlZj17cmVmcy5zZXRGbG9hdGluZ31cbiAgICAgICAgey4uLmdldEZsb2F0aW5nUHJvcHMoKX1cbiAgICAgID5cbiAgICAgICAgPElucHV0Qm94Q29udGFpbmVyPlxuICAgICAgICAgIHtjb2xvclNldHMubWFwKChjU2V0LCBpKSA9PiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbG9yLXNlbGVjdF9faW5wdXQtZ3JvdXBcIiBrZXk9e2l9PlxuICAgICAgICAgICAgICA8Q29sb3JTZWxlY3RvcklucHV0XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0b3JfX3NlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICBhY3RpdmU9e2VkaXRpbmdMb29rdXAgPT09IGl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiBvblRvZ2dsZURyb3Bkb3duKGUsIGkpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NTZXQuaXNSYW5nZSA/IChcbiAgICAgICAgICAgICAgICAgIDxDb2xvclBhbGV0dGUgY29sb3JzPXsoY1NldC5zZWxlY3RlZENvbG9yIGFzIENvbG9yUmFuZ2UpLmNvbG9yc30gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPENvbG9yQmxvY2tcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0b3JfX3NlbGVjdG9yX19ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRjb2xvcj17Y1NldC5zZWxlY3RlZENvbG9yIGFzIFJHQkNvbG9yfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtjU2V0LmxhYmVsID8gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2xvci1zZWxlY3Rvcl9fc2VsZWN0b3JfX2xhYmVsXCI+e2NTZXQubGFiZWx9PC9kaXY+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvQ29sb3JTZWxlY3RvcklucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvSW5wdXRCb3hDb250YWluZXI+XG4gICAgICAgIHtlZGl0aW5nQ29sb3JTZXQgPyAoXG4gICAgICAgICAgPFN0eWxlZFBhbmVsRHJvcGRvd24gY2xhc3NOYW1lPVwiY29sb3Itc2VsZWN0b3JfX2Ryb3Bkb3duXCI+XG4gICAgICAgICAgICB7ZWRpdGluZ0NvbG9yU2V0LmlzUmFuZ2UgJiYgY29sb3JVSSAmJiBzZXRDb2xvclVJID8gKFxuICAgICAgICAgICAgICA8Q29sb3JSYW5nZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvclJhbmdlPXtlZGl0aW5nQ29sb3JTZXQuc2VsZWN0ZWRDb2xvciBhcyBDb2xvclJhbmdlfVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0Q29sb3JSYW5nZT17b25TZWxlY3RDb2xvcn1cbiAgICAgICAgICAgICAgICBzZXRDb2xvclBhbGV0dGVVST17c2V0Q29sb3JVSX1cbiAgICAgICAgICAgICAgICBjb2xvclBhbGV0dGVVST17Y29sb3JVSSBhcyBDb2xvclVJfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFNpbmdsZUNvbG9yUGFsZXR0ZVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I9e3JnYlRvSGV4KGVkaXRpbmdDb2xvclNldC5zZWxlY3RlZENvbG9yIGFzIFJHQkNvbG9yKX1cbiAgICAgICAgICAgICAgICBvblNlbGVjdENvbG9yPXtvblNlbGVjdENvbG9yfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHt1c2VPcGFjaXR5ID8gKFxuICAgICAgICAgICAgICA8T3BhY2l0eVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbG9yLm9wYWNpdHlcIiAvPlxuICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbD5cbiAgICAgICAgICAgICAgICA8UmFuZ2VTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5PUEFDSVRZX1NMSURFUl9QUk9QU31cbiAgICAgICAgICAgICAgICAgIHZhbHVlMT17ZWRpdGluZ0NvbG9yU2V0LnNlbGVjdGVkQ29sb3JbM10gLyAyNTV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25TZWxlY3RPcGFjaXR5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvT3BhY2l0eVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1N0eWxlZFBhbmVsRHJvcGRvd24+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TdHlsZWRDb2xvclNlbGVjdG9yV3JhcHBlcj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBDb2xvclNlbGVjdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclNlbGVjdG9yRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUlBLElBQUFLLElBQUEsR0FBQUwsT0FBQTtBQUVBLElBQUFNLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFPLGtCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxhQUFBLEdBQUFMLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBUyxtQkFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsbUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUgsT0FBQTtBQUF3RCxJQUFBVyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBaEJ4RDtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFsQix3QkFBQWtCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVB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
;