kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
171 lines (146 loc) • 20.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _d3Color = require("d3-color");
var _colorLegend = _interopRequireDefault(require("../common/color-legend"));
var _defaultSettings = require("../../constants/default-settings");
var _utils = require("../../utils/utils");
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n padding: 10px 0 10px ", "px;\n font-size: 11px;\n border-bottom-color: ", ";\n border-bottom-style: solid;\n border-bottom-width: ", ";\n\n .legend--layer_name {\n font-size: 12px;\n padding-right: ", "px;\n color: ", ";\n font-weight: 500;\n }\n .legend--layer_type {\n color: ", ";\n font-weight: 500;\n font-size: 11px;\n padding-right: ", "px;\n }\n\n .legend--layer__title {\n padding-right: ", "px;\n }\n\n .legend--layer_by {\n color: ", ";\n }\n\n .legend--layer_color_field {\n color: ", ";\n font-weight: 500;\n }\n\n .legend--layer_color-legend {\n margin-top: 6px;\n }\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var StyledMapControlLegend = _styledComponents["default"].div(_templateObject(), function (props) {
return props.theme.mapControl.padding;
}, function (props) {
return props.theme.panelBorderColor;
}, function (props) {
return props.last ? 0 : '1px';
}, function (props) {
return props.theme.mapControl.padding;
}, function (props) {
return props.theme.textColorHl;
}, function (props) {
return props.theme.subtextColor;
}, function (props) {
return props.theme.mapControl.padding;
}, function (props) {
return props.theme.mapControl.padding;
}, function (props) {
return props.theme.subtextColor;
}, function (props) {
return props.theme.textColor;
});
var VisualChannelMetric = function VisualChannelMetric(_ref) {
var name = _ref.name;
return _react["default"].createElement("div", {
className: "legend--layer__title"
}, _react["default"].createElement("span", {
className: "legend--layer_by"
}, "by "), _react["default"].createElement("span", {
className: "legend--layer_color_field"
}, name));
};
var LayerSizeLegend = function LayerSizeLegend(_ref2) {
var label = _ref2.label,
name = _ref2.name;
return _react["default"].createElement("div", {
className: "legend--layer_size-schema"
}, _react["default"].createElement("p", null, _react["default"].createElement("span", {
className: "legend--layer_by"
}, label)), _react["default"].createElement(VisualChannelMetric, {
name: name
}));
};
var propTypes = {
layers: _propTypes["default"].arrayOf(_propTypes["default"].object)
};
var SingleColorLegend = function SingleColorLegend(_ref3) {
var layer = _ref3.layer,
width = _ref3.width;
return _react["default"].createElement(_colorLegend["default"], {
scaleType: "ordinal",
displayLabel: false,
domain: [''],
fieldType: null,
range: [_d3Color.rgb.apply(void 0, (0, _toConsumableArray2["default"])(layer.config.color)).toString()],
width: width
});
};
var MultiColorLegend = function MultiColorLegend(_ref4) {
var layer = _ref4.layer,
width = _ref4.width;
var _layer$config = layer.config,
visConfig = _layer$config.visConfig,
colorField = _layer$config.colorField,
colorScale = _layer$config.colorScale,
colorDomain = _layer$config.colorDomain;
return _react["default"].createElement(_colorLegend["default"], {
scaleType: colorScale,
displayLabel: true,
domain: colorDomain,
fieldType: colorField && colorField.type || 'real',
range: visConfig.colorRange.colors,
width: width
});
};
var MapLegend = function MapLegend(_ref5) {
var layers = _ref5.layers;
return _react["default"].createElement("div", null, layers.map(function (layer, index) {
if (!layer.isValidToSave()) {
return null;
}
var colorChannelConfig = layer.getVisualChannelDescription('color');
var enableColorBy = colorChannelConfig.measure;
var width = _defaultSettings.DIMENSIONS.mapControl.width - 2 * _defaultSettings.DIMENSIONS.mapControl.padding;
return _react["default"].createElement(StyledMapControlLegend, {
className: "legend--layer",
last: index === layers.length - 1,
key: index
}, _react["default"].createElement("div", {
className: "legend--layer_name"
}, layer.config.label), _react["default"].createElement("div", {
className: "legend--layer_type"
}, "".concat((0, _utils.capitalizeFirstLetter)(layer.name), " color")), _react["default"].createElement("div", {
className: "legend--layer_color-schema"
}, _react["default"].createElement("div", null, enableColorBy ? _react["default"].createElement(VisualChannelMetric, {
name: enableColorBy
}) : null, _react["default"].createElement("div", {
className: "legend--layer_color-legend"
}, enableColorBy ? _react["default"].createElement(MultiColorLegend, {
layer: layer,
width: width
}) : _react["default"].createElement(SingleColorLegend, {
layer: layer,
width: width
})))), Object.keys(layer.visualChannels).filter(function (k) {
return k !== 'color';
}).map(function (key) {
var matchCondition = !layer.visualChannels[key].condition || layer.visualChannels[key].condition(layer.config);
var enabled = layer.config[layer.visualChannels[key].field] || layer.visualChannels[key].defaultMeasure;
var visualChannelDescription = layer.getVisualChannelDescription(key);
if (matchCondition && enabled) {
return _react["default"].createElement(LayerSizeLegend, {
key: key,
label: visualChannelDescription.label,
name: visualChannelDescription.measure
});
}
return null;
}));
}));
};
MapLegend.propTypes = propTypes;
var _default = MapLegend;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21hcC9tYXAtbGVnZW5kLmpzIl0sIm5hbWVzIjpbIlN0eWxlZE1hcENvbnRyb2xMZWdlbmQiLCJzdHlsZWQiLCJkaXYiLCJwcm9wcyIsInRoZW1lIiwibWFwQ29udHJvbCIsInBhZGRpbmciLCJwYW5lbEJvcmRlckNvbG9yIiwibGFzdCIsInRleHRDb2xvckhsIiwic3VidGV4dENvbG9yIiwidGV4dENvbG9yIiwiVmlzdWFsQ2hhbm5lbE1ldHJpYyIsIm5hbWUiLCJMYXllclNpemVMZWdlbmQiLCJsYWJlbCIsInByb3BUeXBlcyIsImxheWVycyIsIlByb3BUeXBlcyIsImFycmF5T2YiLCJvYmplY3QiLCJTaW5nbGVDb2xvckxlZ2VuZCIsImxheWVyIiwid2lkdGgiLCJyZ2IiLCJjb25maWciLCJjb2xvciIsInRvU3RyaW5nIiwiTXVsdGlDb2xvckxlZ2VuZCIsInZpc0NvbmZpZyIsImNvbG9yRmllbGQiLCJjb2xvclNjYWxlIiwiY29sb3JEb21haW4iLCJ0eXBlIiwiY29sb3JSYW5nZSIsImNvbG9ycyIsIk1hcExlZ2VuZCIsIm1hcCIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsImNvbG9yQ2hhbm5lbENvbmZpZyIsImdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbiIsImVuYWJsZUNvbG9yQnkiLCJtZWFzdXJlIiwiRElNRU5TSU9OUyIsImxlbmd0aCIsIk9iamVjdCIsImtleXMiLCJ2aXN1YWxDaGFubmVscyIsImZpbHRlciIsImsiLCJrZXkiLCJtYXRjaENvbmRpdGlvbiIsImNvbmRpdGlvbiIsImVuYWJsZWQiLCJmaWVsZCIsImRlZmF1bHRNZWFzdXJlIiwidmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxzQkFBc0IsR0FBR0MsNkJBQU9DLEdBQVYs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QixDQUFqQzs7QUFHQSxVQUFJQyxjQUFjLElBQUlFLE9BQXRCLEVBQStCO0FBQzdCLGVBQ0UsZ0NBQUMsZUFBRDtBQUNFLFVBQUEsR0FBRyxFQUFFSCxHQURQO0FBRUUsVUFBQSxLQUFLLEVBQUVNLHdCQUF3QixDQUFDMUMsS0FGbEM7QUFHRSxVQUFBLElBQUksRUFBRTBDLHdCQUF3QixDQUFDZDtBQUhqQyxVQURGO0FBT0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0QsS0F2QkYsQ0F2QkgsQ0FERjtBQWtERCxHQTVEQSxDQURILENBRGdCO0FBQUEsQ0FBbEI7O0FBa0VBUCxTQUFTLENBQUNwQixTQUFWLEdBQXNCQSxTQUF0QjtlQUVlb0IsUyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge3JnYn0gZnJvbSAnZDMtY29sb3InO1xuaW1wb3J0IENvbG9yTGVnZW5kIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2NvbG9yLWxlZ2VuZCc7XG5pbXBvcnQge0RJTUVOU0lPTlN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyfSBmcm9tICd1dGlscy91dGlscyc7XG5cbmNvbnN0IFN0eWxlZE1hcENvbnRyb2xMZWdlbmQgPSBzdHlsZWQuZGl2YFxuICBwYWRkaW5nOiAxMHB4IDAgMTBweCAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1hcENvbnRyb2wucGFkZGluZ31weDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnBhbmVsQm9yZGVyQ29sb3J9O1xuICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogJHtwcm9wcyA9PiAocHJvcHMubGFzdCA/IDAgOiAnMXB4Jyl9O1xuXG4gIC5sZWdlbmQtLWxheWVyX25hbWUge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1hcENvbnRyb2wucGFkZGluZ31weDtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgfVxuICAubGVnZW5kLS1sYXllcl90eXBlIHtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3J9O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubWFwQ29udHJvbC5wYWRkaW5nfXB4O1xuICB9XG5cbiAgLmxlZ2VuZC0tbGF5ZXJfX3RpdGxlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1hcENvbnRyb2wucGFkZGluZ31weDtcbiAgfVxuXG4gIC5sZWdlbmQtLWxheWVyX2J5IHtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3J9O1xuICB9XG5cbiAgLmxlZ2VuZC0tbGF5ZXJfY29sb3JfZmllbGQge1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgfVxuXG4gIC5sZWdlbmQtLWxheWVyX2NvbG9yLWxlZ2VuZCB7XG4gICAgbWFyZ2luLXRvcDogNnB4O1xuICB9XG5gO1xuXG5jb25zdCBWaXN1YWxDaGFubmVsTWV0cmljID0gKHtuYW1lfSkgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT1cImxlZ2VuZC0tbGF5ZXJfX3RpdGxlXCI+XG4gICAgPHNwYW4gY2xhc3NOYW1lPVwibGVnZW5kLS1sYXllcl9ieVwiPmJ5IDwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzc05hbWU9XCJsZWdlbmQtLWxheWVyX2NvbG9yX2ZpZWxkXCI+e25hbWV9PC9zcGFuPlxuICA8L2Rpdj5cbik7XG5cbmNvbnN0IExheWVyU2l6ZUxlZ2VuZCA9ICh7bGFiZWwsIG5hbWV9KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwibGVnZW5kLS1sYXllcl9zaXplLXNjaGVtYVwiPlxuICAgIDxwPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGVnZW5kLS1sYXllcl9ieVwiPntsYWJlbH08L3NwYW4+XG4gICAgPC9wPlxuICAgIDxWaXN1YWxDaGFubmVsTWV0cmljIG5hbWU9e25hbWV9IC8+XG4gIDwvZGl2PlxuKTtcblxuY29uc3QgcHJvcFR5cGVzID0ge1xuICBsYXllcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpXG59O1xuXG5jb25zdCBTaW5nbGVDb2xvckxlZ2VuZCA9ICh7bGF5ZXIsIHdpZHRofSkgPT4gKFxuICA8Q29sb3JMZWdlbmRcbiAgICBzY2FsZVR5cGU9XCJvcmRpbmFsXCJcbiAgICBkaXNwbGF5TGFiZWw9e2ZhbHNlfVxuICAgIGRvbWFpbj17WycnXX1cbiAgICBmaWVsZFR5cGU9e251bGx9XG4gICAgcmFuZ2U9e1tyZ2IoLi4ubGF5ZXIuY29uZmlnLmNvbG9yKS50b1N0cmluZygpXX1cbiAgICB3aWR0aD17d2lkdGh9XG4gIC8+XG4pO1xuXG5jb25zdCBNdWx0aUNvbG9yTGVnZW5kID0gKHtsYXllciwgd2lkdGh9KSA9PiB7XG4gIGNvbnN0IHt2aXNDb25maWcsIGNvbG9yRmllbGQsIGNvbG9yU2NhbGUsIGNvbG9yRG9tYWlufSA9IGxheWVyLmNvbmZpZztcbiAgcmV0dXJuIChcbiAgICA8Q29sb3JMZWdlbmRcbiAgICAgIHNjYWxlVHlwZT17Y29sb3JTY2FsZX1cbiAgICAgIGRpc3BsYXlMYWJlbFxuICAgICAgZG9tYWluPXtjb2xvckRvbWFpbn1cbiAgICAgIGZpZWxkVHlwZT17KGNvbG9yRmllbGQgJiYgY29sb3JGaWVsZC50eXBlKSB8fCAncmVhbCd9XG4gICAgICByYW5nZT17dmlzQ29uZmlnLmNvbG9yUmFuZ2UuY29sb3JzfVxuICAgICAgd2lkdGg9e3dpZHRofVxuICAgIC8+XG4gICk7XG59O1xuXG5jb25zdCBNYXBMZWdlbmQgPSAoe2xheWVyc30pID0+IChcbiAgPGRpdj5cbiAgICB7bGF5ZXJzLm1hcCgobGF5ZXIsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWxheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sb3JDaGFubmVsQ29uZmlnID0gbGF5ZXIuZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uKCdjb2xvcicpO1xuICAgICAgY29uc3QgZW5hYmxlQ29sb3JCeSA9IGNvbG9yQ2hhbm5lbENvbmZpZy5tZWFzdXJlO1xuICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICBESU1FTlNJT05TLm1hcENvbnRyb2wud2lkdGggLSAyICogRElNRU5TSU9OUy5tYXBDb250cm9sLnBhZGRpbmc7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRNYXBDb250cm9sTGVnZW5kXG4gICAgICAgICAgY2xhc3NOYW1lPVwibGVnZW5kLS1sYXllclwiXG4gICAgICAgICAgbGFzdD17aW5kZXggPT09IGxheWVycy5sZW5ndGggLSAxfVxuICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxlZ2VuZC0tbGF5ZXJfbmFtZVwiPntsYXllci5jb25maWcubGFiZWx9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWdlbmQtLWxheWVyX3R5cGVcIj57YCR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKFxuICAgICAgICAgICAgbGF5ZXIubmFtZVxuICAgICAgICAgICl9IGNvbG9yYH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxlZ2VuZC0tbGF5ZXJfY29sb3Itc2NoZW1hXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICB7ZW5hYmxlQ29sb3JCeSA/IChcbiAgICAgICAgICAgICAgICA8VmlzdWFsQ2hhbm5lbE1ldHJpYyBuYW1lPXtlbmFibGVDb2xvckJ5fSAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWdlbmQtLWxheWVyX2NvbG9yLWxlZ2VuZFwiPlxuICAgICAgICAgICAgICAgIHtlbmFibGVDb2xvckJ5ID8gKFxuICAgICAgICAgICAgICAgICAgPE11bHRpQ29sb3JMZWdlbmQgbGF5ZXI9e2xheWVyfSB3aWR0aD17d2lkdGh9IC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxTaW5nbGVDb2xvckxlZ2VuZCBsYXllcj17bGF5ZXJ9IHdpZHRoPXt3aWR0aH0gLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhsYXllci52aXN1YWxDaGFubmVscylcbiAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrICE9PSAnY29sb3InKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaENvbmRpdGlvbiA9XG4gICAgICAgICAgICAgICAgIWxheWVyLnZpc3VhbENoYW5uZWxzW2tleV0uY29uZGl0aW9uIHx8XG4gICAgICAgICAgICAgICAgbGF5ZXIudmlzdWFsQ2hhbm5lbHNba2V5XS5jb25kaXRpb24obGF5ZXIuY29uZmlnKTtcbiAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZCA9XG4gICAgICAgICAgICAgICAgbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdIHx8XG4gICAgICAgICAgICAgICAgbGF5ZXIudmlzdWFsQ2hhbm5lbHNba2V5XS5kZWZhdWx0TWVhc3VyZTtcblxuICAgICAgICAgICAgICBjb25zdCB2aXN1YWxDaGFubmVsRGVzY3JpcHRpb24gPSBsYXllci5nZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24oXG4gICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChtYXRjaENvbmRpdGlvbiAmJiBlbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxMYXllclNpemVMZWdlbmRcbiAgICAgICAgICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXt2aXN1YWxDaGFubmVsRGVzY3JpcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9e3Zpc3VhbENoYW5uZWxEZXNjcmlwdGlvbi5tZWFzdXJlfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvU3R5bGVkTWFwQ29udHJvbExlZ2VuZD5cbiAgICAgICk7XG4gICAgfSl9XG4gIDwvZGl2PlxuKTtcblxuTWFwTGVnZW5kLnByb3BUeXBlcyA9IHByb3BUeXBlcztcblxuZXhwb3J0IGRlZmF1bHQgTWFwTGVnZW5kO1xuIl19