kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
177 lines (145 loc) • 24.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
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 _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
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 _styledComponents = _interopRequireDefault(require("styled-components"));
var _exportImageUtils = require("../../utils/export-image-utils");
var _defaultSettings = require("../../constants/default-settings");
var _styledComponents2 = require("../common/styled-components");
var _switch = _interopRequireDefault(require("../common/switch"));
var _loadingSpinner = _interopRequireDefault(require("../common/loading-spinner"));
var _templateObject, _templateObject2;
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var ImageOptionList = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n width: 250px;\n\n .image-option-section {\n .image-option-section-title {\n font-weight: 500;\n font-size: 14px;\n }\n }\n\n .button-list {\n display: flex;\n flex-direction: row;\n padding: 8px 0px;\n }\n\n input {\n margin-right: 8px;\n }\n"])));
var PreviewImageSection = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n display: flex;\n flex-direction: column;\n flex: 1;\n justify-content: center;\n padding: 30px;\n\n .dimension,\n .instruction {\n padding: 8px 0px;\n }\n\n .preview-image {\n background: #e2e2e2;\n border-radius: 4px;\n box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.18);\n width: 100%;\n padding-bottom: ", ";\n position: relative;\n }\n\n .preview-image-placeholder {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .preview-image-spinner {\n position: absolute;\n left: calc(50% - 25px);\n top: calc(50% - 25px);\n }\n\n .preview-image--error {\n font-size: 12px;\n padding: 12px;\n color: ", ";\n text-align: center;\n }\n"])), function (props) {
return props.ratio === _defaultSettings.RATIOS.SCREEN ? "".concat(100 * props.height / props.width, "%") : props.ratio === _defaultSettings.RATIOS.SIXTEEN_BY_NINE ? '56.25%' : '75%';
}, function (props) {
return props.theme.errorColor;
});
var ExportImageModal = /*#__PURE__*/function (_Component) {
(0, _inherits2["default"])(ExportImageModal, _Component);
var _super = _createSuper(ExportImageModal);
function ExportImageModal() {
(0, _classCallCheck2["default"])(this, ExportImageModal);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(ExportImageModal, [{
key: "render",
value: function render() {
var _this$props = this.props,
height = _this$props.height,
legend = _this$props.legend,
ratio = _this$props.ratio,
error = _this$props.error,
resolution = _this$props.resolution,
width = _this$props.width,
exporting = _this$props.exporting,
imageDataUri = _this$props.imageDataUri,
onChangeRatio = _this$props.onChangeRatio,
onChangeResolution = _this$props.onChangeResolution,
onToggleLegend = _this$props.onToggleLegend;
var exportImageSize = (0, _exportImageUtils.calculateExportImageSize)({
width: width,
height: height,
ratio: ratio,
resolution: resolution
});
return (/*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledModalContent, {
className: "export-image-modal"
}, /*#__PURE__*/_react["default"].createElement(ImageOptionList, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "image-option-section"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "image-option-section-title"
}, "Ratio"), "Choose the ratio for various usages.", /*#__PURE__*/_react["default"].createElement("div", {
className: "button-list"
}, _defaultSettings.RATIO_OPTIONS.map(function (op) {
return (/*#__PURE__*/_react["default"].createElement(_styledComponents2.SelectionButton, {
key: op.id,
selected: ratio === op.id,
onClick: function onClick() {
return onChangeRatio({
ratio: op.id
});
}
}, op.label)
);
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "image-option-section"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "image-option-section-title"
}, "Resolution"), "High resolution is better for prints.", /*#__PURE__*/_react["default"].createElement("div", {
className: "button-list"
}, _defaultSettings.RESOLUTION_OPTIONS.map(function (op) {
return (/*#__PURE__*/_react["default"].createElement(_styledComponents2.SelectionButton, {
key: op.id,
selected: resolution === op.id,
onClick: function onClick() {
return op.available && onChangeResolution({
resolution: op.id
});
}
}, op.label)
);
}))), /*#__PURE__*/_react["default"].createElement("div", {
className: "image-option-section"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "image-option-section-title"
}, "Map Legend"), /*#__PURE__*/_react["default"].createElement(_switch["default"], {
type: "checkbox",
id: "add-map-legend",
checked: legend,
label: "Add legend on map",
onChange: onToggleLegend
}))), /*#__PURE__*/_react["default"].createElement(PreviewImageSection, {
ratio: ratio,
width: width,
height: height
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "dimension"
}, "".concat(exportImageSize.width, " x ").concat(exportImageSize.height)), /*#__PURE__*/_react["default"].createElement("div", {
className: "preview-image"
}, exporting ? /*#__PURE__*/_react["default"].createElement("div", {
className: "preview-image-spinner"
}, /*#__PURE__*/_react["default"].createElement(_loadingSpinner["default"], null)) : error ? /*#__PURE__*/_react["default"].createElement("div", {
className: "preview-image--error"
}, /*#__PURE__*/_react["default"].createElement("span", null, " ", error.message || 'Generate map image failed!')) : /*#__PURE__*/_react["default"].createElement("img", {
className: "preview-image-placeholder",
src: imageDataUri
}))))
);
}
}]);
return ExportImageModal;
}(_react.Component);
(0, _defineProperty2["default"])(ExportImageModal, "propTypes", {
height: _propTypes["default"].number.isRequired,
ratio: _propTypes["default"].string.isRequired,
resolution: _propTypes["default"].string.isRequired,
width: _propTypes["default"].number.isRequired,
exporting: _propTypes["default"].bool.isRequired,
imageDataUri: _propTypes["default"].string,
// callbacks
onChangeRatio: _propTypes["default"].func.isRequired,
onChangeResolution: _propTypes["default"].func.isRequired,
onToggleLegend: _propTypes["default"].func.isRequired
});
var ExportImageModalFactory = function ExportImageModalFactory() {
return ExportImageModal;
};
var _default = exports["default"] = ExportImageModalFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vZGFscy9leHBvcnQtaW1hZ2UtbW9kYWwuanMiXSwibmFtZXMiOlsiSW1hZ2VPcHRpb25MaXN0Iiwic3R5bGVkIiwiZGl2IiwiUHJldmlld0ltYWdlU2VjdGlvbiIsInByb3BzIiwicmF0aW8iLCJSQVRJT1MiLCJTQ1JFRU4iLCJoZWlnaHQiLCJ3aWR0aCIsIlNJWFRFRU5fQllfTklORSIsInRoZW1lIiwiZXJyb3JDb2xvciIsIkV4cG9ydEltYWdlTW9kYWwiLCJsZWdlbmQiLCJlcnJvciIsInJlc29sdXRpb24iLCJleHBvcnRpbmciLCJpbWFnZURhdGFVcmkiLCJvbkNoYW5nZVJhdGlvIiwib25DaGFuZ2VSZXNvbHV0aW9uIiwib25Ub2dnbGVMZWdlbmQiLCJleHBvcnRJbWFnZVNpemUiLCJSQVRJT19PUFRJT05TIiwibWFwIiwib3AiLCJpZCIsImxhYmVsIiwiUkVTT0xVVElPTl9PUFRJT05TIiwiYXZhaWxhYmxlIiwibWVzc2FnZSIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJib29sIiwiZnVuYyIsIkV4cG9ydEltYWdlTW9kYWxGYWN0b3J5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQU1BOztBQUlBOztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxlQUFlLEdBQUdDLDZCQUFPQyxHQUFWLDZiQUFyQjs7QUF3QkEsSUFBTUMsbUJBQW1CLEdBQUdGLDZCQUFPQyxHQUFWLDQwQkFrQkgsVUFBQUUsS0FBSztBQUFBLFNBQ3JCQSxLQUFLLENBQUNDLEtBQU4sS0FBZ0JDLHdCQUFPQyxNQUF2QixhQUNRLE1BQU1ILEtBQUssQ0FBQ0ksTUFBYixHQUF1QkosS0FBSyxDQUFDSyxLQURwQyxTQUVJTCxLQUFLLENBQUNDLEtBQU4sS0FBZ0JDLHdCQUFPSSxlQUF2QixHQUNB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QUF1QixHQUFHLFNBQTFCQSx1QkFBMEI7QUFBQSxTQUFNekIsZ0JBQU47QUFBQSxDQUFoQzs7b0NBQ2V5Qix1QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge2NhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZX0gZnJvbSAndXRpbHMvZXhwb3J0LWltYWdlLXV0aWxzJztcbmltcG9ydCB7XG4gIFJBVElPX09QVElPTlMsXG4gIFJBVElPUyxcbiAgUkVTT0xVVElPTl9PUFRJT05TXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuaW1wb3J0IHtcbiAgU3R5bGVkTW9kYWxDb250ZW50LFxuICBTZWxlY3Rpb25CdXR0b25cbn0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFN3aXRjaCBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9zd2l0Y2gnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2xvYWRpbmctc3Bpbm5lcic7XG5cbmNvbnN0IEltYWdlT3B0aW9uTGlzdCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICB3aWR0aDogMjUwcHg7XG5cbiAgLmltYWdlLW9wdGlvbi1zZWN0aW9uIHtcbiAgICAuaW1hZ2Utb3B0aW9uLXNlY3Rpb24tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB9XG4gIH1cblxuICAuYnV0dG9uLWxpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBwYWRkaW5nOiA4cHggMHB4O1xuICB9XG5cbiAgaW5wdXQge1xuICAgIG1hcmdpbi1yaWdodDogOHB4O1xuICB9XG5gO1xuXG5jb25zdCBQcmV2aWV3SW1hZ2VTZWN0aW9uID0gc3R5bGVkLmRpdmBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleDogMTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDMwcHg7XG5cbiAgLmRpbWVuc2lvbixcbiAgLmluc3RydWN0aW9uIHtcbiAgICBwYWRkaW5nOiA4cHggMHB4O1xuICB9XG5cbiAgLnByZXZpZXctaW1hZ2Uge1xuICAgIGJhY2tncm91bmQ6ICNlMmUyZTI7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJveC1zaGFkb3c6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIDAuMTgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctYm90dG9tOiAke3Byb3BzID0+XG4gICAgICBwcm9wcy5yYXRpbyA9PT0gUkFUSU9TLlNDUkVFTlxuICAgICAgICA/IGAkeygxMDAgKiBwcm9wcy5oZWlnaHQpIC8gcHJvcHMud2lkdGh9JWBcbiAgICAgICAgOiBwcm9wcy5yYXRpbyA9PT0gUkFUSU9TLlNJWFRFRU5fQllfTklORVxuICAgICAgICA/ICc1Ni4yNSUnXG4gICAgICAgIDogJzc1JSd9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5wcmV2aWV3LWltYWdlLXBsYWNlaG9sZGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLnByZXZpZXctaW1hZ2Utc3Bpbm5lciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjVweCk7XG4gICAgdG9wOiBjYWxjKDUwJSAtIDI1cHgpO1xuICB9XG5cbiAgLnByZXZpZXctaW1hZ2UtLWVycm9yIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lcnJvckNvbG9yfTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbmA7XG5cbmNsYXNzIEV4cG9ydEltYWdlTW9kYWwgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGhlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHJhdGlvOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x1dGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgZXhwb3J0aW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGltYWdlRGF0YVVyaTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvLyBjYWxsYmFja3NcbiAgICBvbkNoYW5nZVJhdGlvOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlUmVzb2x1dGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblRvZ2dsZUxlZ2VuZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBoZWlnaHQsXG4gICAgICBsZWdlbmQsXG4gICAgICByYXRpbyxcbiAgICAgIGVycm9yLFxuICAgICAgcmVzb2x1dGlvbixcbiAgICAgIHdpZHRoLFxuICAgICAgZXhwb3J0aW5nLFxuICAgICAgaW1hZ2VEYXRhVXJpLFxuICAgICAgLy8gY2FsbGJhY2tzOlxuICAgICAgb25DaGFuZ2VSYXRpbyxcbiAgICAgIG9uQ2hhbmdlUmVzb2x1dGlvbixcbiAgICAgIG9uVG9nZ2xlTGVnZW5kXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBleHBvcnRJbWFnZVNpemUgPSBjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICByYXRpbyxcbiAgICAgIHJlc29sdXRpb25cbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkTW9kYWxDb250ZW50IGNsYXNzTmFtZT1cImV4cG9ydC1pbWFnZS1tb2RhbFwiPlxuICAgICAgICA8SW1hZ2VPcHRpb25MaXN0PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2Utb3B0aW9uLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2Utb3B0aW9uLXNlY3Rpb24tdGl0bGVcIj5SYXRpbzwvZGl2PlxuICAgICAgICAgICAgQ2hvb3NlIHRoZSByYXRpbyBmb3IgdmFyaW91cyB1c2FnZXMuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ1dHRvbi1saXN0XCI+XG4gICAgICAgICAgICAgIHtSQVRJT19PUFRJT05TLm1hcChvcCA9PiAoXG4gICAgICAgICAgICAgICAgPFNlbGVjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PXtvcC5pZH1cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtyYXRpbyA9PT0gb3AuaWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZVJhdGlvKHtyYXRpbzogb3AuaWR9KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7b3AubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9TZWxlY3Rpb25CdXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbWFnZS1vcHRpb24tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbWFnZS1vcHRpb24tc2VjdGlvbi10aXRsZVwiPlJlc29sdXRpb248L2Rpdj5cbiAgICAgICAgICAgIEhpZ2ggcmVzb2x1dGlvbiBpcyBiZXR0ZXIgZm9yIHByaW50cy5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYnV0dG9uLWxpc3RcIj5cbiAgICAgICAgICAgICAge1JFU09MVVRJT05fT1BUSU9OUy5tYXAob3AgPT4gKFxuICAgICAgICAgICAgICAgIDxTZWxlY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17b3AuaWR9XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZD17cmVzb2x1dGlvbiA9PT0gb3AuaWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvcC5hdmFpbGFibGUgJiYgb25DaGFuZ2VSZXNvbHV0aW9uKHtyZXNvbHV0aW9uOiBvcC5pZH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge29wLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvU2VsZWN0aW9uQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2Utb3B0aW9uLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2Utb3B0aW9uLXNlY3Rpb24tdGl0bGVcIj5NYXAgTGVnZW5kPC9kaXY+XG4gICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwiYWRkLW1hcC1sZWdlbmRcIlxuICAgICAgICAgICAgICBjaGVja2VkPXtsZWdlbmR9XG4gICAgICAgICAgICAgIGxhYmVsPVwiQWRkIGxlZ2VuZCBvbiBtYXBcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17b25Ub2dnbGVMZWdlbmR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0ltYWdlT3B0aW9uTGlzdD5cbiAgICAgICAgPFByZXZpZXdJbWFnZVNlY3Rpb24gcmF0aW89e3JhdGlvfSB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRpbWVuc2lvblwiPntgJHtleHBvcnRJbWFnZVNpemUud2lkdGh9IHggJHtcbiAgICAgICAgICAgIGV4cG9ydEltYWdlU2l6ZS5oZWlnaHRcbiAgICAgICAgICB9YH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInByZXZpZXctaW1hZ2VcIj5cbiAgICAgICAgICAgIHtleHBvcnRpbmcgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJldmlldy1pbWFnZS1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IGVycm9yID8gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInByZXZpZXctaW1hZ2UtLWVycm9yXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+IHtlcnJvci5tZXNzYWdlIHx8ICdHZW5lcmF0ZSBtYXAgaW1hZ2UgZmFpbGVkISd9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwicHJldmlldy1pbWFnZS1wbGFjZWhvbGRlclwiIHNyYz17aW1hZ2VEYXRhVXJpfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9QcmV2aWV3SW1hZ2VTZWN0aW9uPlxuICAgICAgPC9TdHlsZWRNb2RhbENvbnRlbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBFeHBvcnRJbWFnZU1vZGFsRmFjdG9yeSA9ICgpID0+IEV4cG9ydEltYWdlTW9kYWw7XG5leHBvcnQgZGVmYXVsdCBFeHBvcnRJbWFnZU1vZGFsRmFjdG9yeTtcbiJdfQ==