kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
142 lines (122 loc) • 17 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _defaultSettings = require("../../constants/default-settings");
var _icons = require("../common/icons");
var _styledComponents = require("../common/styled-components");
var _toolbarItem = _interopRequireDefault(require("../common/toolbar-item"));
var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip"));
var _mapControlPanel = _interopRequireDefault(require("./map-control-panel"));
var _mapControlToolbar = _interopRequireDefault(require("./map-control-toolbar"));
// Copyright (c) 2021 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
MapDrawPanelFactory.deps = [_mapControlTooltip["default"], _mapControlPanel["default"], _mapControlToolbar["default"]];
function MapDrawPanelFactory(MapControlTooltip, MapControlPanel, MapControlToolbar) {
var defaultActionIcons = {
visible: _icons.EyeSeen,
hidden: _icons.EyeUnseen,
polygon: _icons.DrawPolygon,
cursor: _icons.CursorClick,
innerPolygon: _icons.Polygon,
rectangle: _icons.Rectangle
};
/** @type {import('./map-draw-panel').MapDrawPanelComponent} */
var MapDrawPanel = /*#__PURE__*/_react["default"].memo(function (_ref) {
var _mapControls$mapDraw, _mapControls$mapDraw2;
var editor = _ref.editor,
mapControls = _ref.mapControls,
onToggleMapControl = _ref.onToggleMapControl,
onSetEditorMode = _ref.onSetEditorMode,
onToggleEditorVisibility = _ref.onToggleEditorVisibility,
_ref$actionIcons = _ref.actionIcons,
actionIcons = _ref$actionIcons === void 0 ? defaultActionIcons : _ref$actionIcons;
var isActive = mapControls === null || mapControls === void 0 ? void 0 : (_mapControls$mapDraw = mapControls.mapDraw) === null || _mapControls$mapDraw === void 0 ? void 0 : _mapControls$mapDraw.active;
var onToggleMenuPanel = (0, _react.useCallback)(function () {
return onToggleMapControl('mapDraw');
}, [onToggleMapControl]);
if (!(mapControls !== null && mapControls !== void 0 && (_mapControls$mapDraw2 = mapControls.mapDraw) !== null && _mapControls$mapDraw2 !== void 0 && _mapControls$mapDraw2.show)) {
return null;
}
return /*#__PURE__*/_react["default"].createElement("div", {
className: "map-draw-controls",
style: {
position: 'relative'
}
}, isActive ? /*#__PURE__*/_react["default"].createElement(MapControlToolbar, {
show: isActive
}, /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], {
className: "edit-feature",
onClick: function onClick() {
return onSetEditorMode(_defaultSettings.EDITOR_MODES.EDIT);
},
label: "toolbar.select",
icon: actionIcons.cursor,
active: editor.mode === _defaultSettings.EDITOR_MODES.EDIT
}), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], {
className: "draw-feature",
onClick: function onClick() {
return onSetEditorMode(_defaultSettings.EDITOR_MODES.DRAW_POLYGON);
},
label: "toolbar.polygon",
icon: actionIcons.innerPolygon,
active: editor.mode === _defaultSettings.EDITOR_MODES.DRAW_POLYGON
}), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], {
className: "draw-rectangle",
onClick: function onClick() {
return onSetEditorMode(_defaultSettings.EDITOR_MODES.DRAW_RECTANGLE);
},
label: "toolbar.rectangle",
icon: actionIcons.rectangle,
active: editor.mode === _defaultSettings.EDITOR_MODES.DRAW_RECTANGLE
}), /*#__PURE__*/_react["default"].createElement(_toolbarItem["default"], {
className: "toggle-features",
onClick: onToggleEditorVisibility,
label: editor.visible ? 'toolbar.hide' : 'toolbar.show',
icon: editor.visible ? actionIcons.visible : actionIcons.hidden
})) : null, /*#__PURE__*/_react["default"].createElement(_styledComponents.MapControlButton, {
onClick: function onClick(e) {
e.preventDefault();
onToggleMenuPanel();
},
active: isActive,
className: (0, _classnames["default"])('map-control-button', 'map-draw', {
isActive: isActive
}),
"data-tip": true,
"data-for": "map-draw"
}, /*#__PURE__*/_react["default"].createElement(actionIcons.polygon, {
height: "22px"
}), /*#__PURE__*/_react["default"].createElement(MapControlTooltip, {
id: "map-draw",
message: "tooltip.DrawOnMap"
})));
});
MapDrawPanel.displayName = 'MapDrawPanel';
return MapDrawPanel;
}
var _default = MapDrawPanelFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21hcC9tYXAtZHJhdy1wYW5lbC5qcyJdLCJuYW1lcyI6WyJNYXBEcmF3UGFuZWxGYWN0b3J5IiwiZGVwcyIsIk1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSIsIk1hcENvbnRyb2xQYW5lbEZhY3RvcnkiLCJNYXBDb250cm9sVG9vbGJhckZhY3RvcnkiLCJNYXBDb250cm9sVG9vbHRpcCIsIk1hcENvbnRyb2xQYW5lbCIsIk1hcENvbnRyb2xUb29sYmFyIiwiZGVmYXVsdEFjdGlvbkljb25zIiwidmlzaWJsZSIsIkV5ZVNlZW4iLCJoaWRkZW4iLCJFeWVVbnNlZW4iLCJwb2x5Z29uIiwiRHJhd1BvbHlnb24iLCJjdXJzb3IiLCJDdXJzb3JDbGljayIsImlubmVyUG9seWdvbiIsIlBvbHlnb24iLCJyZWN0YW5nbGUiLCJSZWN0YW5nbGUiLCJNYXBEcmF3UGFuZWwiLCJSZWFjdCIsIm1lbW8iLCJlZGl0b3IiLCJtYXBDb250cm9scyIsIm9uVG9nZ2xlTWFwQ29udHJvbCIsIm9uU2V0RWRpdG9yTW9kZSIsIm9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsImFjdGlvbkljb25zIiwiaXNBY3RpdmUiLCJtYXBEcmF3IiwiYWN0aXZlIiwib25Ub2dnbGVNZW51UGFuZWwiLCJzaG93IiwicG9zaXRpb24iLCJFRElUT1JfTU9ERVMiLCJFRElUIiwibW9kZSIsIkRSQVdfUE9MWUdPTiIsIkRSQVdfUkVDVEFOR0xFIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUVBOztBQUNBOztBQVFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQXBDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW9CQUEsbUJBQW1CLENBQUNDLElBQXBCLEdBQTJCLENBQ3pCQyw2QkFEeUIsRUFFekJDLDJCQUZ5QixFQUd6QkMsNkJBSHlCLENBQTNCOztBQUtBLFNBQVNKLG1CQUFULENBQTZCSyxpQkFBN0IsRUFBZ0RDLGVBQWhELEVBQWlFQyxpQkFBakUsRUFBb0Y7QUFDbEYsTUFBTUMsa0JBQWtCLEdBQUc7QUFDekJDLElBQUFBLE9BQU8sRUFBRUMsY0FEZ0I7QUFFekJDLElBQUFBLE1BQU0sRUFBRUMsZ0JBRmlCO0FBR3pCQyxJQUFBQSxPQUFPLEVBQUVDLGtCQUhnQjtBQUl6QkMsSUFBQUEsTUFBTSxFQUFFQyxrQkFKaUI7QUFLekJDLElBQUFBLFlBQVksRUFBRUMsY0FMVztBQU16QkMsSUFBQUEsU0FBUyxFQUFFQztBQU5jLEdBQTNCO0FBUUE7O0FBQ0EsTUFBTUMsWUFBWSxnQkFBR0Msa0JBQU1DLElBQU4sQ0FDbkIsZ0JBT007QUFBQTs7QUFBQSxRQU5KQyxNQU1JLFFBTkpBLE1BTUk7QUFBQSxRQUxKQyxXQUtJLFFBTEpBLFdBS0k7QUFBQSxRQUpKQyxrQkFJSSxRQUpKQSxrQkFJSTtBQUFBLFFBSEpDLGVBR0ksUUFISkEsZUFHSTtBQUFBLFFBRkpDLHdCQUVJLFFBRkpBLHdCQUVJO0FBQUEsZ0NBREpDLFdBQ0k7QUFBQSxRQURKQSxXQUNJLGlDQURVckIsa0JBQ1Y7QUFDSixRQUFNc0IsUUFBUSxHQUFHTCxXQUFILGFBQUdBLFdBQUgsK0NBQUdBLFdBQVcsQ0FBRU0sT0FBaEIseURBQUcscUJBQXNCQyxNQUF2QztBQUNBLFFBQU1DLGlCQUFpQixHQUFHLHdCQUFZO0FBQUEsYUFBTVAsa0JBQWtCLENBQUMsU0FBRCxDQUF4QjtBQUFBLEtBQVosRUFBaUQsQ0FDekVBLGtCQUR5RSxDQUFqRCxDQUExQjs7QUFHQSxRQUFJLEVBQUNELFdBQUQsYUFBQ0EsV0FBRCx3Q0FBQ0EsV0FBVyxDQUFFTSxPQUFkLGtEQUFDLHNCQUFzQkcsSUFBdkIsQ0FBSixFQUFpQztBQUMvQixhQUFPLElBQVA7QUFDRDs7QUFDRCx3QkFDRTtBQUFLLE1BQUEsU0FBUyxFQUFDLG1CQUFmO0FBQW1DLE1BQUEsS0FBSyxFQUFFO0FBQUNDLFFBQUFBLFFBQVEsRUFBRTtBQUFYO0FBQTFDLE9BQ0dMLFFBQVEsZ0JBQ1AsZ0NBQUMsaUJBQUQ7QUFBbUIsTUFBQSxJQUFJLEVBQUVBO0FBQXpCLG9CQUNFLGdDQUFDLHVCQUFEO0FBQ0UsTUFBQSxTQUFTLEVBQUMsY0FEWjtBQUVFLE1BQUEsT0FBTyxFQUFFO0FBQUEsZUFBTUgsZUFBZSxDQUFDUyw4QkFBYUMsSUFBZCxDQUFyQjtBQUFBLE9BRlg7QUFHRSxNQUFBLEtBQUssRUFBQyxnQkFIUjtBQUlFLE1BQUEsSUFBSSxFQUFFUixXQUFXLENBQUNkLE1BSnBCO0FBS0UsTUFBQSxNQUFNLEVBQUVTLE1BQU0sQ0FBQ2MsSUFBUCxLQUFnQkYsOEJBQWFDO0FBTHZDLE1BREYsZUFRRSxnQ0FBQyx1QkFBRDtBQUNFLE1BQUEsU0FBUyxFQUFDLGNBRFo7QUFFRSxNQUFBLE9BQU8sRUFBRTtBQUFBLGVBQU1WLGVBQWUsQ0FBQ1MsOEJBQWFHLFlBQWQsQ0FBckI7QUFBQSxPQUZYO0FBR0UsTUFBQSxLQUFLLEVBQUMsaUJBSFI7QUFJRSxNQUFBLElBQUksRUFBRVYsV0FBVyxDQUFDWixZQUpwQjtBQUtFLE1BQUEsTUFBTSxFQUFFTyxNQUFNLENBQUNjLElBQVAsS0FBZ0JGLDhCQUFhRztBQUx2QyxNQVJGLGVBZUUsZ0NBQUMsdUJBQUQ7QUFDRSxNQUFBLFNBQVMsRUFBQyxnQkFEWjtBQUVFLE1BQUEsT0FBTyxFQUFFO0FBQUEsZUFBTVosZUFBZSxDQUFDUyw4QkFBYUksY0FBZCxDQUFyQjtBQUFBLE9BRlg7QUFHRSxNQUFBLEtBQUssRUFBQyxtQkFIUjtBQUlFLE1BQUEsSUFBSSxFQUFFWCxXQUFXLENBQUNWLFNBSnBCO0FBS0UsTUFBQSxNQUFNLEVBQUVLLE1BQU0sQ0FBQ2MsSUFBUCxLQUFnQkYsOEJBQWFJO0FBTHZDLE1BZkYsZUFzQkUsZ0NBQUMsdUJBQUQ7QUFDRSxNQUFBLFNBQVMsRUFBQyxpQkFEWjtBQUVFLE1BQUEsT0FBTyxFQUFFWix3QkFGWDtBQUdFLE1BQUEsS0FBSyxFQUFFSixNQUFNLENBQUNmLE9BQVAsR0FBaUIsY0FBakIsR0FBa0MsY0FIM0M7QUFJRSxNQUFBLElBQUksRUFBRWUsTUFBTSxDQUFDZixPQUFQLEdBQWlCb0IsV0FBVyxDQUFDcEIsT0FBN0IsR0FBdUNvQixXQUFXLENBQUNsQjtBQUozRCxNQXRCRixDQURPLEdBOEJMLElBL0JOLGVBZ0NFLGdDQUFDLGtDQUFEO0FBQ0UsTUFBQSxPQUFPLEVBQUUsaUJBQUE4QixDQUFDLEVBQUk7QUFDWkEsUUFBQUEsQ0FBQyxDQUFDQyxjQUFGO0FBQ0FULFFBQUFBLGlCQUFpQjtBQUNsQixPQUpIO0FBS0UsTUFBQSxNQUFNLEVBQUVILFFBTFY7QUFNRSxNQUFBLFNBQVMsRUFBRSw0QkFBVyxvQkFBWCxFQUFpQyxVQUFqQyxFQUE2QztBQUFDQSxRQUFBQSxRQUFRLEVBQVJBO0FBQUQsT0FBN0MsQ0FOYjtBQU9FLHNCQVBGO0FBUUUsa0JBQVM7QUFSWCxvQkFVRSxnQ0FBQyxXQUFELENBQWEsT0FBYjtBQUFxQixNQUFBLE1BQU0sRUFBQztBQUE1QixNQVZGLGVBV0UsZ0NBQUMsaUJBQUQ7QUFBbUIsTUFBQSxFQUFFLEVBQUMsVUFBdEI7QUFBaUMsTUFBQSxPQUFPLEVBQUM7QUFBekMsTUFYRixDQWhDRixDQURGO0FBZ0RELEdBaEVrQixDQUFyQjs7QUFtRUFULEVBQUFBLFlBQVksQ0FBQ3NCLFdBQWIsR0FBMkIsY0FBM0I7QUFDQSxTQUFPdEIsWUFBUDtBQUNEOztlQUVjckIsbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjEgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCB7RURJVE9SX01PREVTfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge1xuICBDdXJzb3JDbGljayxcbiAgRHJhd1BvbHlnb24sXG4gIEV5ZVNlZW4sXG4gIEV5ZVVuc2VlbixcbiAgUG9seWdvbixcbiAgUmVjdGFuZ2xlXG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbmltcG9ydCB7TWFwQ29udHJvbEJ1dHRvbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFRvb2xiYXJJdGVtIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3Rvb2xiYXItaXRlbSc7XG5pbXBvcnQgTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5IGZyb20gJy4vbWFwLWNvbnRyb2wtdG9vbHRpcCc7XG5pbXBvcnQgTWFwQ29udHJvbFBhbmVsRmFjdG9yeSBmcm9tICcuL21hcC1jb250cm9sLXBhbmVsJztcbmltcG9ydCBNYXBDb250cm9sVG9vbGJhckZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC10b29sYmFyJztcblxuTWFwRHJhd1BhbmVsRmFjdG9yeS5kZXBzID0gW1xuICBNYXBDb250cm9sVG9vbHRpcEZhY3RvcnksXG4gIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksXG4gIE1hcENvbnRyb2xUb29sYmFyRmFjdG9yeVxuXTtcbmZ1bmN0aW9uIE1hcERyYXdQYW5lbEZhY3RvcnkoTWFwQ29udHJvbFRvb2x0aXAsIE1hcENvbnRyb2xQYW5lbCwgTWFwQ29udHJvbFRvb2xiYXIpIHtcbiAgY29uc3QgZGVmYXVsdEFjdGlvbkljb25zID0ge1xuICAgIHZpc2libGU6IEV5ZVNlZW4sXG4gICAgaGlkZGVuOiBFeWVVbnNlZW4sXG4gICAgcG9seWdvbjogRHJhd1BvbHlnb24sXG4gICAgY3Vyc29yOiBDdXJzb3JDbGljayxcbiAgICBpbm5lclBvbHlnb246IFBvbHlnb24sXG4gICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVcbiAgfTtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vbWFwLWRyYXctcGFuZWwnKS5NYXBEcmF3UGFuZWxDb21wb25lbnR9ICovXG4gIGNvbnN0IE1hcERyYXdQYW5lbCA9IFJlYWN0Lm1lbW8oXG4gICAgKHtcbiAgICAgIGVkaXRvcixcbiAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgb25Ub2dnbGVNYXBDb250cm9sLFxuICAgICAgb25TZXRFZGl0b3JNb2RlLFxuICAgICAgb25Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5LFxuICAgICAgYWN0aW9uSWNvbnMgPSBkZWZhdWx0QWN0aW9uSWNvbnNcbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IG1hcENvbnRyb2xzPy5tYXBEcmF3Py5hY3RpdmU7XG4gICAgICBjb25zdCBvblRvZ2dsZU1lbnVQYW5lbCA9IHVzZUNhbGxiYWNrKCgpID0+IG9uVG9nZ2xlTWFwQ29udHJvbCgnbWFwRHJhdycpLCBbXG4gICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbFxuICAgICAgXSk7XG4gICAgICBpZiAoIW1hcENvbnRyb2xzPy5tYXBEcmF3Py5zaG93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXAtZHJhdy1jb250cm9sc1wiIHN0eWxlPXt7cG9zaXRpb246ICdyZWxhdGl2ZSd9fT5cbiAgICAgICAgICB7aXNBY3RpdmUgPyAoXG4gICAgICAgICAgICA8TWFwQ29udHJvbFRvb2xiYXIgc2hvdz17aXNBY3RpdmV9PlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJlZGl0LWZlYXR1cmVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2V0RWRpdG9yTW9kZShFRElUT1JfTU9ERVMuRURJVCl9XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJ0b29sYmFyLnNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWNvbj17YWN0aW9uSWNvbnMuY3Vyc29yfVxuICAgICAgICAgICAgICAgIGFjdGl2ZT17ZWRpdG9yLm1vZGUgPT09IEVESVRPUl9NT0RFUy5FRElUfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkcmF3LWZlYXR1cmVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2V0RWRpdG9yTW9kZShFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OKX1cbiAgICAgICAgICAgICAgICBsYWJlbD1cInRvb2xiYXIucG9seWdvblwiXG4gICAgICAgICAgICAgICAgaWNvbj17YWN0aW9uSWNvbnMuaW5uZXJQb2x5Z29ufVxuICAgICAgICAgICAgICAgIGFjdGl2ZT17ZWRpdG9yLm1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT059XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxUb29sYmFySXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRyYXctcmVjdGFuZ2xlXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblNldEVkaXRvck1vZGUoRURJVE9SX01PREVTLkRSQVdfUkVDVEFOR0xFKX1cbiAgICAgICAgICAgICAgICBsYWJlbD1cInRvb2xiYXIucmVjdGFuZ2xlXCJcbiAgICAgICAgICAgICAgICBpY29uPXthY3Rpb25JY29ucy5yZWN0YW5nbGV9XG4gICAgICAgICAgICAgICAgYWN0aXZlPXtlZGl0b3IubW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUkVDVEFOR0xFfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VG9vbGJhckl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0b2dnbGUtZmVhdHVyZXNcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgICBsYWJlbD17ZWRpdG9yLnZpc2libGUgPyAndG9vbGJhci5oaWRlJyA6ICd0b29sYmFyLnNob3cnfVxuICAgICAgICAgICAgICAgIGljb249e2VkaXRvci52aXNpYmxlID8gYWN0aW9uSWNvbnMudmlzaWJsZSA6IGFjdGlvbkljb25zLmhpZGRlbn1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvTWFwQ29udHJvbFRvb2xiYXI+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPE1hcENvbnRyb2xCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTWVudVBhbmVsKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgYWN0aXZlPXtpc0FjdGl2ZX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnbWFwLWNvbnRyb2wtYnV0dG9uJywgJ21hcC1kcmF3Jywge2lzQWN0aXZlfSl9XG4gICAgICAgICAgICBkYXRhLXRpcFxuICAgICAgICAgICAgZGF0YS1mb3I9XCJtYXAtZHJhd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGFjdGlvbkljb25zLnBvbHlnb24gaGVpZ2h0PVwiMjJweFwiIC8+XG4gICAgICAgICAgICA8TWFwQ29udHJvbFRvb2x0aXAgaWQ9XCJtYXAtZHJhd1wiIG1lc3NhZ2U9XCJ0b29sdGlwLkRyYXdPbk1hcFwiIC8+XG4gICAgICAgICAgPC9NYXBDb250cm9sQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIE1hcERyYXdQYW5lbC5kaXNwbGF5TmFtZSA9ICdNYXBEcmF3UGFuZWwnO1xuICByZXR1cm4gTWFwRHJhd1BhbmVsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYXBEcmF3UGFuZWxGYWN0b3J5O1xuIl19