kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
223 lines (182 loc) • 21.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
var _class, _temp2;
var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n position: relative;\n margin-bottom: 12px;\n background-color: ', ';\n height: ', ';\n'], ['\n position: relative;\n margin-bottom: 12px;\n background-color: ', ';\n height: ', ';\n']),
_templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n flex-grow: 1;\n margin-top: ', 'px;\n'], ['\n flex-grow: 1;\n margin-top: ', 'px;\n']); // Copyright (c) 2018 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.
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _styledComponents = require('styled-components');
var _styledComponents2 = _interopRequireDefault(_styledComponents);
var _sliderHandle = require('./slider-handle');
var _sliderHandle2 = _interopRequireDefault(_sliderHandle);
var _sliderBarHandle = require('./slider-bar-handle');
var _sliderBarHandle2 = _interopRequireDefault(_sliderBarHandle);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function noop() {}
var StyledRangeSlider = _styledComponents2.default.div(_templateObject, function (props) {
return props.theme.sliderBarBgd;
}, function (props) {
return props.theme.sliderBarHeight;
});
var SliderWrapper = _styledComponents2.default.div(_templateObject2, function (props) {
return props.isRanged ? 0 : 10;
});
var Slider = (_temp2 = _class = function (_Component) {
(0, _inherits3.default)(Slider, _Component);
function Slider() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, Slider);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Slider.__proto__ || Object.getPrototypeOf(Slider)).call.apply(_ref, [this].concat(args))), _this), _this.ref = undefined, _this._saveRef = function (ref) {
_this.ref = ref;
}, _this.slide0Listener = function (x) {
var xPercent = x / _this.ref.offsetWidth;
var maxDelta = _this.props.maxValue - _this.props.minValue;
var val = xPercent * maxDelta;
_this.props.onSlider0Change.call(_this, val + _this.props.value0);
}, _this.slide1Listener = function (x) {
var xPercent = x / _this.ref.offsetWidth;
var maxDelta = _this.props.maxValue - _this.props.minValue;
var val = xPercent * maxDelta;
_this.props.onSlider1Change(val + _this.props.value1);
}, _this.sliderBarListener = function (x) {
var xPercent = x / _this.ref.offsetWidth;
var maxDelta = _this.props.maxValue - _this.props.minValue;
var val = xPercent * maxDelta;
var val0 = val + _this.props.value0;
var val1 = val + _this.props.value1;
_this.props.onSliderBarChange(val0, val1);
}, _this.calcHandleLeft0 = function (w, l, num) {
return w === 0 ? 'calc(' + l + '% - ' + _this.props.sliderHandleWidth / 2 + 'px)' : 'calc(' + l + '% - ' + _this.props.sliderHandleWidth / 2 + 'px)';
}, _this.calcHandleLeft1 = function (w, l) {
return _this.props.isRanged && w === 0 ? l + '%' : 'calc(' + (l + w) + '% - ' + _this.props.sliderHandleWidth / 2 + 'px)';
}, _this.createSlider = function (width, v0Left) {
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
StyledRangeSlider,
{ className: 'kg-range-slider' },
_react2.default.createElement(_sliderHandle2.default, {
className: 'kg-range-slider__handle',
left: _this.calcHandleLeft0(width, v0Left),
valueListener: _this.slide0Listener,
sliderHandleWidth: _this.props.sliderHandleWidth,
display: _this.props.isRanged
}),
_react2.default.createElement(_sliderHandle2.default, {
className: 'kg-range-slider__handle',
left: _this.calcHandleLeft1(width, v0Left),
valueListener: _this.slide1Listener,
sliderHandleWidth: _this.props.sliderHandleWidth
}),
_react2.default.createElement(_sliderBarHandle2.default, {
width: width,
v0Left: v0Left,
enableBarDrag: _this.props.enableBarDrag,
sliderBarListener: _this.sliderBarListener
})
)
);
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(Slider, [{
key: 'render',
value: function render() {
var _props = this.props,
classSet = _props.classSet,
isRanged = _props.isRanged,
maxValue = _props.maxValue,
minValue = _props.minValue,
value1 = _props.value1;
var value0 = !isRanged && minValue > 0 ? minValue : this.props.value0;
var currValDelta = value1 - value0;
var maxDelta = maxValue - minValue;
var width = currValDelta / maxDelta * 100;
var v0Left = (value0 - minValue) / maxDelta * 100;
return _react2.default.createElement(
SliderWrapper,
{
className: (0, _classnames2.default)('kg-slider', (0, _extends3.default)({}, classSet)),
innerRef: this._saveRef,
isRanged: isRanged
},
this.createSlider(width, v0Left)
);
}
}]);
return Slider;
}(_react.Component), _class.propTypes = {
title: _propTypes2.default.string,
isRanged: _propTypes2.default.bool,
value0: _propTypes2.default.number,
value1: _propTypes2.default.number,
minValue: _propTypes2.default.number,
maxValue: _propTypes2.default.number,
sliderHandleWidth: _propTypes2.default.number,
onSlider0Change: _propTypes2.default.func,
onInput0Change: _propTypes2.default.func,
onSlider1Change: _propTypes2.default.func,
onInput1Change: _propTypes2.default.func,
onSliderBarChange: _propTypes2.default.func,
step: _propTypes2.default.number,
enableBarDrag: _propTypes2.default.bool
}, _class.defaultProps = {
title: '',
isRanged: true,
value0: 0,
value1: 100,
minValue: 0,
maxValue: 100,
step: 1,
sliderHandleWidth: 12,
enableBarDrag: false,
onSlider0Change: noop,
onInput0Change: noop,
onSlider1Change: noop,
onInput1Change: noop,
onSliderBarChange: noop,
disabled: false
}, _temp2);
exports.default = Slider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1vbi9zbGlkZXIvc2xpZGVyLmpzIl0sIm5hbWVzIjpbIm5vb3AiLCJTdHlsZWRSYW5nZVNsaWRlciIsInN0eWxlZCIsImRpdiIsInByb3BzIiwidGhlbWUiLCJzbGlkZXJCYXJCZ2QiLCJzbGlkZXJCYXJIZWlnaHQiLCJTbGlkZXJXcmFwcGVyIiwiaXNSYW5nZWQiLCJTbGlkZXIiLCJyZWYiLCJ1bmRlZmluZWQiLCJfc2F2ZVJlZiIsInNsaWRlMExpc3RlbmVyIiwieFBlcmNlbnQiLCJ4Iiwib2Zmc2V0V2lkdGgiLCJtYXhEZWx0YSIsIm1heFZhbHVlIiwibWluVmFsdWUiLCJ2YWwiLCJvblNsaWRlcjBDaGFuZ2UiLCJjYWxsIiwidmFsdWUwIiwic2xpZGUxTGlzdGVuZXIiLCJvblNsaWRlcjFDaGFuZ2UiLCJ2YWx1ZTEiLCJzbGlkZXJCYXJMaXN0ZW5lciIsInZhbDAiLCJ2YWwxIiwib25TbGlkZXJCYXJDaGFuZ2UiLCJjYWxjSGFuZGxlTGVmdDAiLCJ3IiwibCIsIm51bSIsInNsaWRlckhhbmRsZVdpZHRoIiwiY2FsY0hhbmRsZUxlZnQxIiwiY3JlYXRlU2xpZGVyIiwid2lkdGgiLCJ2MExlZnQiLCJlbmFibGVCYXJEcmFnIiwiY2xhc3NTZXQiLCJjdXJyVmFsRGVsdGEiLCJDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJ0aXRsZSIsIlByb3BUeXBlcyIsInN0cmluZyIsImJvb2wiLCJudW1iZXIiLCJmdW5jIiwib25JbnB1dDBDaGFuZ2UiLCJvbklucHV0MUNoYW5nZSIsInN0ZXAiLCJkZWZhdWx0UHJvcHMiLCJkaXNhYmxlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2SkFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztB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QUwsQ0FBa0JDLEtBQWxCLEVBQXlCQyxNQUF6QjtBQUxILE9BREY7QUFTRDs7O0VBaElpQ0ksZ0IsVUFDM0JDLFMsR0FBWTtBQUNqQkMsU0FBT0Msb0JBQVVDLE1BREE7QUFFakJ2QyxZQUFVc0Msb0JBQVVFLElBRkg7QUFHakJ6QixVQUFRdUIsb0JBQVVHLE1BSEQ7QUFJakJ2QixVQUFRb0Isb0JBQVVHLE1BSkQ7QUFLakI5QixZQUFVMkIsb0JBQVVHLE1BTEg7QUFNakIvQixZQUFVNEIsb0JBQVVHLE1BTkg7QUFPakJkLHFCQUFtQlcsb0JBQVVHLE1BUFo7QUFRakI1QixtQkFBaUJ5QixvQkFBVUksSUFSVjtBQVNqQkMsa0JBQWdCTCxvQkFBVUksSUFUVDtBQVVqQnpCLG1CQUFpQnFCLG9CQUFVSSxJQVZWO0FBV2pCRSxrQkFBZ0JOLG9CQUFVSSxJQVhUO0FBWWpCcEIscUJBQW1CZ0Isb0JBQVVJLElBWlo7QUFhakJHLFFBQU1QLG9CQUFVRyxNQWJDO0FBY2pCVCxpQkFBZU0sb0JBQVVFO0FBZFIsQyxTQWlCWk0sWSxHQUFlO0FBQ3BCVCxTQUFPLEVBRGE7QUFFcEJyQyxZQUFVLElBRlU7QUFHcEJlLFVBQVEsQ0FIWTtBQUlwQkcsVUFBUSxHQUpZO0FBS3BCUCxZQUFVLENBTFU7QUFNcEJELFlBQVUsR0FOVTtBQU9wQm1DLFFBQU0sQ0FQYztBQVFwQmxCLHFCQUFtQixFQVJDO0FBU3BCSyxpQkFBZSxLQVRLO0FBVXBCbkIsbUJBQWlCdEIsSUFWRztBQVdwQm9ELGtCQUFnQnBELElBWEk7QUFZcEIwQixtQkFBaUIxQixJQVpHO0FBYXBCcUQsa0JBQWdCckQsSUFiSTtBQWNwQitCLHFCQUFtQi9CLElBZEM7QUFlcEJ3RCxZQUFVO0FBZlUsQztrQkFsQkg5QyxNIiwiZmlsZSI6InNsaWRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCBTbGlkZXJIYW5kbGUgZnJvbSAnLi9zbGlkZXItaGFuZGxlJztcbmltcG9ydCBTbGlkZXJCYXJIYW5kbGUgZnJvbSAnLi9zbGlkZXItYmFyLWhhbmRsZSc7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5jb25zdCBTdHlsZWRSYW5nZVNsaWRlciA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zbGlkZXJCYXJCZ2R9O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2xpZGVyQmFySGVpZ2h0fTtcbmA7XG5cbmNvbnN0IFNsaWRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBmbGV4LWdyb3c6IDE7XG4gIG1hcmdpbi10b3A6ICR7cHJvcHMgPT4gcHJvcHMuaXNSYW5nZWQgPyAwIDogMTB9cHg7XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTbGlkZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlzUmFuZ2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB2YWx1ZTA6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgdmFsdWUxOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1pblZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1heFZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHNsaWRlckhhbmRsZVdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uU2xpZGVyMENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25JbnB1dDBDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2xpZGVyMUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25JbnB1dDFDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uU2xpZGVyQmFyQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzdGVwOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVuYWJsZUJhckRyYWc6IFByb3BUeXBlcy5ib29sXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB0aXRsZTogJycsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgdmFsdWUwOiAwLFxuICAgIHZhbHVlMTogMTAwLFxuICAgIG1pblZhbHVlOiAwLFxuICAgIG1heFZhbHVlOiAxMDAsXG4gICAgc3RlcDogMSxcbiAgICBzbGlkZXJIYW5kbGVXaWR0aDogMTIsXG4gICAgZW5hYmxlQmFyRHJhZzogZmFsc2UsXG4gICAgb25TbGlkZXIwQ2hhbmdlOiBub29wLFxuICAgIG9uSW5wdXQwQ2hhbmdlOiBub29wLFxuICAgIG9uU2xpZGVyMUNoYW5nZTogbm9vcCxcbiAgICBvbklucHV0MUNoYW5nZTogbm9vcCxcbiAgICBvblNsaWRlckJhckNoYW5nZTogbm9vcCxcbiAgICBkaXNhYmxlZDogZmFsc2VcbiAgfTtcblxuICByZWYgPSB1bmRlZmluZWQ7XG5cbiAgX3NhdmVSZWYgPSByZWYgPT4ge1xuICAgIHRoaXMucmVmID0gcmVmO1xuICB9O1xuXG4gIHNsaWRlMExpc3RlbmVyID0geCA9PiB7XG4gICAgY29uc3QgeFBlcmNlbnQgPSB4IC8gdGhpcy5yZWYub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgbWF4RGVsdGEgPSB0aGlzLnByb3BzLm1heFZhbHVlIC0gdGhpcy5wcm9wcy5taW5WYWx1ZTtcbiAgICBjb25zdCB2YWwgPSB4UGVyY2VudCAqIG1heERlbHRhO1xuICAgIHRoaXMucHJvcHMub25TbGlkZXIwQ2hhbmdlLmNhbGwodGhpcywgdmFsICsgdGhpcy5wcm9wcy52YWx1ZTApO1xuICB9O1xuXG4gIHNsaWRlMUxpc3RlbmVyID0geCA9PiB7XG4gICAgY29uc3QgeFBlcmNlbnQgPSB4IC8gdGhpcy5yZWYub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgbWF4RGVsdGEgPSB0aGlzLnByb3BzLm1heFZhbHVlIC0gdGhpcy5wcm9wcy5taW5WYWx1ZTtcbiAgICBjb25zdCB2YWwgPSB4UGVyY2VudCAqIG1heERlbHRhO1xuICAgIHRoaXMucHJvcHMub25TbGlkZXIxQ2hhbmdlKHZhbCArIHRoaXMucHJvcHMudmFsdWUxKTtcbiAgfTtcblxuICBzbGlkZXJCYXJMaXN0ZW5lciA9IHggPT4ge1xuICAgIGNvbnN0IHhQZXJjZW50ID0geCAvIHRoaXMucmVmLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IG1heERlbHRhID0gdGhpcy5wcm9wcy5tYXhWYWx1ZSAtIHRoaXMucHJvcHMubWluVmFsdWU7XG4gICAgY29uc3QgdmFsID0geFBlcmNlbnQgKiBtYXhEZWx0YTtcbiAgICBjb25zdCB2YWwwID0gdmFsICsgdGhpcy5wcm9wcy52YWx1ZTA7XG4gICAgY29uc3QgdmFsMSA9IHZhbCArIHRoaXMucHJvcHMudmFsdWUxO1xuICAgIHRoaXMucHJvcHMub25TbGlkZXJCYXJDaGFuZ2UodmFsMCwgdmFsMSk7XG4gIH07XG5cbiAgY2FsY0hhbmRsZUxlZnQwID0gKHcsIGwsIG51bSkgPT4ge1xuICAgIHJldHVybiB3ID09PSAwID8gYGNhbGMoJHtsfSUgLSAke3RoaXMucHJvcHMuc2xpZGVySGFuZGxlV2lkdGggLyAyfXB4KWAgOlxuICAgICAgYGNhbGMoJHtsfSUgLSAke3RoaXMucHJvcHMuc2xpZGVySGFuZGxlV2lkdGggLyAyfXB4KWA7XG4gIH07XG5cbiAgY2FsY0hhbmRsZUxlZnQxID0gKHcsIGwpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc1JhbmdlZCAmJiB3ID09PSAwXG4gICAgICA/IGAke2x9JWBcbiAgICAgIDogYGNhbGMoJHtsICsgd30lIC0gJHt0aGlzLnByb3BzLnNsaWRlckhhbmRsZVdpZHRoIC8gMn1weClgO1xuICB9O1xuXG4gIGNyZWF0ZVNsaWRlciA9ICh3aWR0aCwgdjBMZWZ0KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxTdHlsZWRSYW5nZVNsaWRlciBjbGFzc05hbWU9XCJrZy1yYW5nZS1zbGlkZXJcIj5cbiAgICAgICAgICA8U2xpZGVySGFuZGxlXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJrZy1yYW5nZS1zbGlkZXJfX2hhbmRsZVwiXG4gICAgICAgICAgICBsZWZ0PXt0aGlzLmNhbGNIYW5kbGVMZWZ0MCh3aWR0aCwgdjBMZWZ0KX1cbiAgICAgICAgICAgIHZhbHVlTGlzdGVuZXI9e3RoaXMuc2xpZGUwTGlzdGVuZXJ9XG4gICAgICAgICAgICBzbGlkZXJIYW5kbGVXaWR0aD17dGhpcy5wcm9wcy5zbGlkZXJIYW5kbGVXaWR0aH1cbiAgICAgICAgICAgIGRpc3BsYXk9e3RoaXMucHJvcHMuaXNSYW5nZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2xpZGVySGFuZGxlXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJrZy1yYW5nZS1zbGlkZXJfX2hhbmRsZVwiXG4gICAgICAgICAgICBsZWZ0PXt0aGlzLmNhbGNIYW5kbGVMZWZ0MSh3aWR0aCwgdjBMZWZ0KX1cbiAgICAgICAgICAgIHZhbHVlTGlzdGVuZXI9e3RoaXMuc2xpZGUxTGlzdGVuZXJ9XG4gICAgICAgICAgICBzbGlkZXJIYW5kbGVXaWR0aD17dGhpcy5wcm9wcy5zbGlkZXJIYW5kbGVXaWR0aH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTbGlkZXJCYXJIYW5kbGVcbiAgICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICAgIHYwTGVmdD17djBMZWZ0fVxuICAgICAgICAgICAgZW5hYmxlQmFyRHJhZz17dGhpcy5wcm9wcy5lbmFibGVCYXJEcmFnfVxuICAgICAgICAgICAgc2xpZGVyQmFyTGlzdGVuZXI9e3RoaXMuc2xpZGVyQmFyTGlzdGVuZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TdHlsZWRSYW5nZVNsaWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzU2V0LFxuICAgICAgaXNSYW5nZWQsXG4gICAgICBtYXhWYWx1ZSxcbiAgICAgIG1pblZhbHVlLFxuICAgICAgdmFsdWUxXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWUwID0gIWlzUmFuZ2VkICYmIG1pblZhbHVlID4gMCA/IG1pblZhbHVlIDogdGhpcy5wcm9wcy52YWx1ZTA7XG4gICAgY29uc3QgY3VyclZhbERlbHRhID0gdmFsdWUxIC0gdmFsdWUwO1xuICAgIGNvbnN0IG1heERlbHRhID0gbWF4VmFsdWUgLSBtaW5WYWx1ZTtcbiAgICBjb25zdCB3aWR0aCA9IGN1cnJWYWxEZWx0YSAvIG1heERlbHRhICogMTAwO1xuXG4gICAgY29uc3QgdjBMZWZ0ID0gKHZhbHVlMCAtIG1pblZhbHVlKSAvIG1heERlbHRhICogMTAwO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTbGlkZXJXcmFwcGVyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygna2ctc2xpZGVyJywgey4uLmNsYXNzU2V0fSl9XG4gICAgICAgIGlubmVyUmVmPXt0aGlzLl9zYXZlUmVmfVxuICAgICAgICBpc1JhbmdlZD17aXNSYW5nZWR9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLmNyZWF0ZVNsaWRlcih3aWR0aCwgdjBMZWZ0KX1cbiAgICAgIDwvU2xpZGVyV3JhcHBlcj5cbiAgICApO1xuICB9XG59XG4iXX0=