kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
220 lines (176 loc) • 23.3 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
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 _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
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("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reselect = require("reselect");
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _panelHeaderAction = _interopRequireDefault(require("../panel-header-action"));
var _fieldSelector = _interopRequireDefault(require("../../common/field-selector"));
var _icons = require("../../common/icons");
var _sourceDataSelector = _interopRequireDefault(require("../source-data-selector"));
var _styledComponents2 = require("../../common/styled-components");
var Filters = _interopRequireWildcard(require("../../filters"));
var _filterUtils = require("../../../utils/filter-utils");
var _defaultSettings = require("../../../constants/default-settings");
function _templateObject3() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n padding: 12px;\n"]);
_templateObject3 = function _templateObject3() {
return data;
};
return data;
}
function _templateObject2() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n cursor: pointer;\n padding: 10px 12px;\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 12px;\n border-radius: 1px;\n\n .filter-panel__filter {\n margin-top: 24px;\n }\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var StyledFilterPanel = _styledComponents["default"].div(_templateObject());
var StyledFilterHeader = _styledComponents2.StyledPanelHeader.extend(_templateObject2());
var StyledFilterContent = _styledComponents["default"].div(_templateObject3(), function (props) {
return props.theme.panelBackground;
});
function FilterPanelFactory() {
var _class, _temp;
return _temp = _class =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(FilterPanel, _Component);
function FilterPanel() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2["default"])(this, FilterPanel);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(FilterPanel)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "fieldsSelector", function (props) {
return props.filter.dataId && props.datasets[props.filter.dataId].fields || [];
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "filterSelector", function (props) {
return props.filters;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "nameSelector", function (props) {
return props.filter.name;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dataIdSelector", function (props) {
return props.filter.dataId;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "availableFieldsSelector", (0, _reselect.createSelector)(_this.fieldsSelector, _this.filterSelector, _this.nameSelector, _this.dataIdSelector, function (fields, filters, name, dataId) {
return fields.filter(function (f) {
return f.type && f.type !== _defaultSettings.ALL_FIELD_TYPES.geojson && (f.name === name || !filters.find(function (d) {
return d.name === f.name && d.dataId === dataId;
}));
});
}));
return _this;
}
(0, _createClass2["default"])(FilterPanel, [{
key: "render",
value: function render() {
var _this$props = this.props,
datasets = _this$props.datasets,
enlargeFilter = _this$props.enlargeFilter,
filter = _this$props.filter,
idx = _this$props.idx,
isAnyFilterAnimating = _this$props.isAnyFilterAnimating,
removeFilter = _this$props.removeFilter,
_setFilter = _this$props.setFilter,
toggleAnimation = _this$props.toggleAnimation;
var name = filter.name,
enlarged = filter.enlarged,
type = filter.type,
dataId = filter.dataId;
var FilterComponent = type && Filters[_filterUtils.FILTER_COMPONENTS[type]];
var allAvailableFields = this.availableFieldsSelector(this.props);
return _react["default"].createElement(StyledFilterPanel, {
className: "filter-panel"
}, _react["default"].createElement(StyledFilterHeader, {
className: "filter-panel__header",
labelRCGColorValues: datasets[dataId].color
}, _react["default"].createElement("div", {
style: {
flexGrow: 1
}
}, _react["default"].createElement(_fieldSelector["default"], {
inputTheme: "secondary",
fields: allAvailableFields,
value: name,
erasable: false,
onSelect: function onSelect(value) {
return _setFilter(idx, 'name', value.name);
}
})), _react["default"].createElement(_panelHeaderAction["default"], {
id: filter.id,
tooltip: "delete",
tooltipType: "error",
onClick: removeFilter,
hoverColor: 'errorColor',
IconComponent: _icons.Trash
}), type === _filterUtils.FILTER_TYPES.timeRange && _react["default"].createElement(_panelHeaderAction["default"], {
id: filter.id,
onClick: enlargeFilter,
tooltip: "Time Playback",
IconComponent: _icons.Clock,
active: enlarged
})), _react["default"].createElement(StyledFilterContent, {
className: "filter-panel__content"
}, Object.keys(datasets).length > 1 && _react["default"].createElement(_sourceDataSelector["default"], {
inputTheme: "secondary",
datasets: datasets,
disabled: filter.freeze,
dataId: filter.dataId,
onSelect: function onSelect(value) {
return _setFilter(idx, 'dataId', value);
}
}), type && !enlarged && _react["default"].createElement("div", {
className: "filter-panel__filter"
}, _react["default"].createElement(FilterComponent, {
filter: filter,
idx: idx,
isAnyFilterAnimating: isAnyFilterAnimating,
toggleAnimation: toggleAnimation,
setFilter: function setFilter(value) {
return _setFilter(idx, 'value', value);
}
}))));
}
}]);
return FilterPanel;
}(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", {
idx: _propTypes["default"].number,
filters: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired,
filter: _propTypes["default"].object.isRequired,
setFilter: _propTypes["default"].func.isRequired,
removeFilter: _propTypes["default"].func.isRequired,
enlargeFilter: _propTypes["default"].func.isRequired,
toggleAnimation: _propTypes["default"].func.isRequired,
datasets: _propTypes["default"].object,
showDatasetTable: _propTypes["default"].func,
isAnyFilterAnimating: _propTypes["default"].bool
}), _temp;
}
var _default = FilterPanelFactory;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvZmlsdGVyLXBhbmVsL2ZpbHRlci1wYW5lbC5qcyJdLCJuYW1lcyI6WyJTdHlsZWRGaWx0ZXJQYW5lbCIsInN0eWxlZCIsImRpdiIsIlN0eWxlZEZpbHRlckhlYWRlciIsIlN0eWxlZFBhbmVsSGVhZGVyIiwiZXh0ZW5kIiwiU3R5bGVkRmlsdGVyQ29udGVudCIsInByb3BzIiwidGhlbWUiLCJwYW5lbEJhY2tncm91bmQiLCJGaWx0ZXJQYW5lbEZhY3RvcnkiLCJmaWx0ZXIiLCJkYXRhSWQiLCJkYXRhc2V0cyIsImZpZWxkcyIsImZpbHRlcnMiLCJuYW1lIiwiZmllbGRzU2VsZWN0b3IiLCJmaWx0ZXJTZWxlY3RvciIsIm5hbWVTZWxlY3RvciIsImRhdGFJZFNlbGVjdG9yIiwiZiIsInR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJnZW9qc29uIiwiZmluZCIsImQiLCJlbmxhcmdlRmlsdGVyIiwiaWR4IiwiaXNBbnlGaWx0ZXJBbmltYXRpbmciLCJyZW1vdmVGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ0b2dnbGVBbmltYXRpb24iLCJlbmxhcmdlZCIsIkZpbHRlckNvbXBvbmVudCIsIkZpbHRlcnMiLCJGSUxURVJfQ09NUE9ORU5UUyIsImFsbEF2YWlsYWJsZUZpZWxkcyIsImF2YWlsYWJsZUZpZWxkc1NlbGVjdG9yIiwiY29sb3IiLCJmbGV4R3JvdyIsInZhbHVlIiwiaWQiLCJUcmFzaCIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsIkNsb2NrIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImZyZWV6ZSIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm51bWJlciIsImFycmF5T2YiLCJhbnkiLCJpc1JlcXVpcmVkIiwib2JqZWN0IiwiZnVuYyIsInNob3dEYXRhc2V0VGFibGUiLCJib29sIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FB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QjdCLElBQUFBLGFBQWEsRUFBRXlCLHNCQUFVTSxJQUFWLENBQWVGLFVBTmI7QUFPakJ4QixJQUFBQSxlQUFlLEVBQUVvQixzQkFBVU0sSUFBVixDQUFlRixVQVBmO0FBUWpCM0MsSUFBQUEsUUFBUSxFQUFFdUMsc0JBQVVLLE1BUkg7QUFTakJFLElBQUFBLGdCQUFnQixFQUFFUCxzQkFBVU0sSUFUWDtBQVVqQjdCLElBQUFBLG9CQUFvQixFQUFFdUIsc0JBQVVRO0FBVmYsR0FEckI7QUE4R0Q7O2VBRWNsRCxrQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFBhbmVsSGVhZGVyQWN0aW9uIGZyb20gJ2NvbXBvbmVudHMvc2lkZS1wYW5lbC9wYW5lbC1oZWFkZXItYWN0aW9uJztcbmltcG9ydCBGaWVsZFNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ZpZWxkLXNlbGVjdG9yJztcbmltcG9ydCB7VHJhc2gsIENsb2NrfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQgU291cmNlRGF0YVNlbGVjdG9yIGZyb20gJ2NvbXBvbmVudHMvc2lkZS1wYW5lbC9zb3VyY2UtZGF0YS1zZWxlY3Rvcic7XG5pbXBvcnQge1N0eWxlZFBhbmVsSGVhZGVyfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgKiBhcyBGaWx0ZXJzIGZyb20gJ2NvbXBvbmVudHMvZmlsdGVycyc7XG5cbmltcG9ydCB7RklMVEVSX1RZUEVTLCBGSUxURVJfQ09NUE9ORU5UU30gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7QUxMX0ZJRUxEX1RZUEVTfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5cbmNvbnN0IFN0eWxlZEZpbHRlclBhbmVsID0gc3R5bGVkLmRpdmBcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgYm9yZGVyLXJhZGl1czogMXB4O1xuXG4gIC5maWx0ZXItcGFuZWxfX2ZpbHRlciB7XG4gICAgbWFyZ2luLXRvcDogMjRweDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkRmlsdGVySGVhZGVyID0gU3R5bGVkUGFuZWxIZWFkZXIuZXh0ZW5kYFxuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDEwcHggMTJweDtcbmA7XG5cbmNvbnN0IFN0eWxlZEZpbHRlckNvbnRlbnQgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZH07XG4gIHBhZGRpbmc6IDEycHg7XG5gO1xuXG5mdW5jdGlvbiBGaWx0ZXJQYW5lbEZhY3RvcnkoKSB7XG4gIHJldHVybiBjbGFzcyBGaWx0ZXJQYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGlkeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGZpbHRlcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpLmlzUmVxdWlyZWQsXG4gICAgICBmaWx0ZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICAgIHNldEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHJlbW92ZUZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGVubGFyZ2VGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICB0b2dnbGVBbmltYXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIHNob3dEYXRhc2V0VGFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaXNBbnlGaWx0ZXJBbmltYXRpbmc6IFByb3BUeXBlcy5ib29sXG4gICAgfTtcblxuICAgIC8qIHNlbGVjdG9ycyAqL1xuICAgIGZpZWxkc1NlbGVjdG9yID0gcHJvcHMgPT5cbiAgICAgIChwcm9wcy5maWx0ZXIuZGF0YUlkICYmIHByb3BzLmRhdGFzZXRzW3Byb3BzLmZpbHRlci5kYXRhSWRdLmZpZWxkcykgfHwgW107XG4gICAgZmlsdGVyU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5maWx0ZXJzO1xuICAgIG5hbWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmZpbHRlci5uYW1lO1xuICAgIGRhdGFJZFNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZmlsdGVyLmRhdGFJZDtcblxuICAgIC8vIG9ubHkgc2hvdyBjdXJyZW50IGZpZWxkIGFuZCBmaWVsZCB0aGF0J3Mgbm90IGFscmVhZHkgYmVlbiB1c2VkIGFzIGEgZmlsdGVyXG4gICAgYXZhaWxhYmxlRmllbGRzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmllbGRzU2VsZWN0b3IsXG4gICAgICB0aGlzLmZpbHRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5uYW1lU2VsZWN0b3IsXG4gICAgICB0aGlzLmRhdGFJZFNlbGVjdG9yLFxuICAgICAgKGZpZWxkcywgZmlsdGVycywgbmFtZSwgZGF0YUlkKSA9PlxuICAgICAgICBmaWVsZHMuZmlsdGVyKFxuICAgICAgICAgIGYgPT5cbiAgICAgICAgICAgIGYudHlwZSAmJlxuICAgICAgICAgICAgZi50eXBlICE9PSBBTExfRklFTERfVFlQRVMuZ2VvanNvbiAmJlxuICAgICAgICAgICAgKGYubmFtZSA9PT0gbmFtZSB8fFxuICAgICAgICAgICAgICAhZmlsdGVycy5maW5kKGQgPT4gZC5uYW1lID09PSBmLm5hbWUgJiYgZC5kYXRhSWQgPT09IGRhdGFJZCkpXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgZW5sYXJnZUZpbHRlcixcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBpZHgsXG4gICAgICAgIGlzQW55RmlsdGVyQW5pbWF0aW5nLFxuICAgICAgICByZW1vdmVGaWx0ZXIsXG4gICAgICAgIHNldEZpbHRlcixcbiAgICAgICAgdG9nZ2xlQW5pbWF0aW9uXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtuYW1lLCBlbmxhcmdlZCwgdHlwZSwgZGF0YUlkfSA9IGZpbHRlcjtcbiAgICAgIGNvbnN0IEZpbHRlckNvbXBvbmVudCA9IHR5cGUgJiYgRmlsdGVyc1tGSUxURVJfQ09NUE9ORU5UU1t0eXBlXV07XG4gICAgICBjb25zdCBhbGxBdmFpbGFibGVGaWVsZHMgPSB0aGlzLmF2YWlsYWJsZUZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZEZpbHRlclBhbmVsIGNsYXNzTmFtZT1cImZpbHRlci1wYW5lbFwiPlxuICAgICAgICAgIDxTdHlsZWRGaWx0ZXJIZWFkZXJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbHRlci1wYW5lbF9faGVhZGVyXCJcbiAgICAgICAgICAgIGxhYmVsUkNHQ29sb3JWYWx1ZXM9e2RhdGFzZXRzW2RhdGFJZF0uY29sb3J9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17e2ZsZXhHcm93OiAxfX0+XG4gICAgICAgICAgICAgIDxGaWVsZFNlbGVjdG9yXG4gICAgICAgICAgICAgICAgaW5wdXRUaGVtZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgZmllbGRzPXthbGxBdmFpbGFibGVGaWVsZHN9XG4gICAgICAgICAgICAgICAgdmFsdWU9e25hbWV9XG4gICAgICAgICAgICAgICAgZXJhc2FibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0PXt2YWx1ZSA9PiBzZXRGaWx0ZXIoaWR4LCAnbmFtZScsIHZhbHVlLm5hbWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgICAgaWQ9e2ZpbHRlci5pZH1cbiAgICAgICAgICAgICAgdG9vbHRpcD1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBUeXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXtyZW1vdmVGaWx0ZXJ9XG4gICAgICAgICAgICAgIGhvdmVyQ29sb3I9eydlcnJvckNvbG9yJ31cbiAgICAgICAgICAgICAgSWNvbkNvbXBvbmVudD17VHJhc2h9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3R5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgKFxuICAgICAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgICAgICBpZD17ZmlsdGVyLmlkfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2VubGFyZ2VGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgdG9vbHRpcD1cIlRpbWUgUGxheWJhY2tcIlxuICAgICAgICAgICAgICAgIEljb25Db21wb25lbnQ9e0Nsb2NrfVxuICAgICAgICAgICAgICAgIGFjdGl2ZT17ZW5sYXJnZWR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU3R5bGVkRmlsdGVySGVhZGVyPlxuICAgICAgICAgIDxTdHlsZWRGaWx0ZXJDb250ZW50IGNsYXNzTmFtZT1cImZpbHRlci1wYW5lbF9fY29udGVudFwiPlxuICAgICAgICAgICAge09iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGggPiAxICYmIChcbiAgICAgICAgICAgICAgPFNvdXJjZURhdGFTZWxlY3RvclxuICAgICAgICAgICAgICAgIGlucHV0VGhlbWU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZmlsdGVyLmZyZWV6ZX1cbiAgICAgICAgICAgICAgICBkYXRhSWQ9e2ZpbHRlci5kYXRhSWR9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e3ZhbHVlID0+IHNldEZpbHRlcihpZHgsICdkYXRhSWQnLCB2YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3R5cGUgJiYgIWVubGFyZ2VkICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItcGFuZWxfX2ZpbHRlclwiPlxuICAgICAgICAgICAgICAgIDxGaWx0ZXJDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICAgICAgaWR4PXtpZHh9XG4gICAgICAgICAgICAgICAgICBpc0FueUZpbHRlckFuaW1hdGluZz17aXNBbnlGaWx0ZXJBbmltYXRpbmd9XG4gICAgICAgICAgICAgICAgICB0b2dnbGVBbmltYXRpb249e3RvZ2dsZUFuaW1hdGlvbn1cbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlcj17dmFsdWUgPT4gc2V0RmlsdGVyKGlkeCwgJ3ZhbHVlJywgdmFsdWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1N0eWxlZEZpbHRlckNvbnRlbnQ+XG4gICAgICAgIDwvU3R5bGVkRmlsdGVyUGFuZWw+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyUGFuZWxGYWN0b3J5O1xuIl19