UNPKG

matrix-react-sdk

Version:
148 lines (124 loc) 18.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.getRememberedCapabilitiesForWidget = getRememberedCapabilitiesForWidget; exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); var _languageHandler = require("../../../languageHandler"); var _matrixWidgetApi = require("matrix-widget-api"); var _objects = require("../../../utils/objects"); var _StyledCheckbox = _interopRequireDefault(require("../elements/StyledCheckbox")); var _DialogButtons = _interopRequireDefault(require("../elements/DialogButtons")); var _LabelledToggleSwitch = _interopRequireDefault(require("../elements/LabelledToggleSwitch")); var _CapabilityText = require("../../../widgets/CapabilityText"); var _replaceableComponent = require("../../../utils/replaceableComponent"); var _dec, _class, _temp; function getRememberedCapabilitiesForWidget(widget /*: Widget*/ ) /*: Capability[]*/ { return JSON.parse(localStorage.getItem(`widget_${widget.id}_approved_caps`) || "[]"); } function setRememberedCapabilitiesForWidget(widget /*: Widget*/ , caps /*: Capability[]*/ ) { localStorage.setItem(`widget_${widget.id}_approved_caps`, JSON.stringify(caps)); } let WidgetCapabilitiesPromptDialog = (_dec = (0, _replaceableComponent.replaceableComponent)("views.dialogs.WidgetCapabilitiesPromptDialog"), _dec(_class = (_temp = class WidgetCapabilitiesPromptDialog extends _react.default.PureComponent /*:: <IProps, IState>*/ { constructor(props /*: IProps*/ ) { super(props); (0, _defineProperty2.default)(this, "eventPermissionsMap", new Map()); (0, _defineProperty2.default)(this, "onToggle", (capability /*: Capability*/ ) => { const newStates = (0, _objects.objectShallowClone)(this.state.booleanStates); newStates[capability] = !newStates[capability]; this.setState({ booleanStates: newStates }); }); (0, _defineProperty2.default)(this, "onRememberSelectionChange", (newVal /*: boolean*/ ) => { this.setState({ rememberSelection: newVal }); }); (0, _defineProperty2.default)(this, "onSubmit", async ev => { this.closeAndTryRemember(Object.entries(this.state.booleanStates).filter(([_, isSelected]) => isSelected).map(([cap]) => cap)); }); (0, _defineProperty2.default)(this, "onReject", async ev => { this.closeAndTryRemember([]); // nothing was approved }); const parsedEvents = _matrixWidgetApi.WidgetEventCapability.findEventCapabilities(this.props.requestedCapabilities); parsedEvents.forEach(e => this.eventPermissionsMap.set(e.raw, e)); const states /*: IBooleanStates*/ = {}; this.props.requestedCapabilities.forEach(c => states[c] = true); this.state = { booleanStates: states, rememberSelection: true }; } closeAndTryRemember(approved /*: Capability[]*/ ) { if (this.state.rememberSelection) { setRememberedCapabilitiesForWidget(this.props.widget, approved); } this.props.onFinished({ approved }); } render() { const checkboxRows = Object.entries(this.state.booleanStates).map(([cap, isChecked], i) => { const text = _CapabilityText.CapabilityText.for(cap, this.props.widgetKind); const byline = text.byline ? /*#__PURE__*/_react.default.createElement("span", { className: "mx_WidgetCapabilitiesPromptDialog_byline" }, text.byline) : null; return /*#__PURE__*/_react.default.createElement("div", { className: "mx_WidgetCapabilitiesPromptDialog_cap", key: cap + i }, /*#__PURE__*/_react.default.createElement(_StyledCheckbox.default, { checked: isChecked, onChange: () => this.onToggle(cap) }, text.primary), byline); }); return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { className: "mx_WidgetCapabilitiesPromptDialog", onFinished: this.props.onFinished, title: (0, _languageHandler._t)("Approve widget permissions") }, /*#__PURE__*/_react.default.createElement("form", { onSubmit: this.onSubmit }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_Dialog_content" }, /*#__PURE__*/_react.default.createElement("div", { className: "text-muted" }, (0, _languageHandler._t)("This widget would like to:")), checkboxRows, /*#__PURE__*/_react.default.createElement(_DialogButtons.default, { primaryButton: (0, _languageHandler._t)("Approve"), cancelButton: (0, _languageHandler._t)("Decline All"), onPrimaryButtonClick: this.onSubmit, onCancel: this.onReject, additive: /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: this.state.rememberSelection, toggleInFront: true, onChange: this.onRememberSelectionChange, label: (0, _languageHandler._t)("Remember my selection for this widget") }) })))); } }, _temp)) || _class); exports.default = WidgetCapabilitiesPromptDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvV2lkZ2V0Q2FwYWJpbGl0aWVzUHJvbXB0RGlhbG9nLnRzeCJdLCJuYW1lcyI6WyJnZXRSZW1lbWJlcmVkQ2FwYWJpbGl0aWVzRm9yV2lkZ2V0Iiwid2lkZ2V0IiwiSlNPTiIsInBhcnNlIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImlkIiwic2V0UmVtZW1iZXJlZENhcGFiaWxpdGllc0ZvcldpZGdldCIsImNhcHMiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiV2lkZ2V0Q2FwYWJpbGl0aWVzUHJvbXB0RGlhbG9nIiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIk1hcCIsImNhcGFiaWxpdHkiLCJuZXdTdGF0ZXMiLCJzdGF0ZSIsImJvb2xlYW5TdGF0ZXMiLCJzZXRTdGF0ZSIsIm5ld1ZhbCIsInJlbWVtYmVyU2VsZWN0aW9uIiwiZXYiLCJjbG9zZUFuZFRyeVJlbWVtYmVyIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbHRlciIsIl8iLCJpc1NlbGVjdGVkIiwibWFwIiwiY2FwIiwicGFyc2VkRXZlbnRzIiwiV2lkZ2V0RXZlbnRDYXBhYmlsaXR5IiwiZmluZEV2ZW50Q2FwYWJpbGl0aWVzIiwicmVxdWVzdGVkQ2FwYWJpbGl0aWVzIiwiZm9yRWFjaCIsImUiLCJldmVudFBlcm1pc3Npb25zTWFwIiwic2V0IiwicmF3Iiwic3RhdGVzIiwiYyIsImFwcHJvdmVkIiwib25GaW5pc2hlZCIsInJlbmRlciIsImNoZWNrYm94Um93cyIsImlzQ2hlY2tlZCIsImkiLCJ0ZXh0IiwiQ2FwYWJpbGl0eVRleHQiLCJmb3IiLCJ3aWRnZXRLaW5kIiwiYnlsaW5lIiwib25Ub2dnbGUiLCJwcmltYXJ5Iiwib25TdWJtaXQiLCJvblJlamVjdCIsIm9uUmVtZW1iZXJTZWxlY3Rpb25DaGFuZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQWdCQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFNQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLFNBQVNBLGtDQUFULENBQTRDQztBQUE1QztBQUFBO0FBQUE7QUFBMEU7QUFDN0UsU0FBT0MsSUFBSSxDQUFDQyxLQUFMLENBQVdDLFlBQVksQ0FBQ0MsT0FBYixDQUFzQixVQUFTSixNQUFNLENBQUNLLEVBQUcsZ0JBQXpDLEtBQTZELElBQXhFLENBQVA7QUFDSDs7QUFFRCxTQUFTQyxrQ0FBVCxDQUE0Q047QUFBNUM7QUFBQSxFQUE0RE87QUFBNUQ7QUFBQSxFQUFnRjtBQUM1RUosRUFBQUEsWUFBWSxDQUFDSyxPQUFiLENBQXNCLFVBQVNSLE1BQU0sQ0FBQ0ssRUFBRyxnQkFBekMsRUFBMERKLElBQUksQ0FBQ1EsU0FBTCxDQUFlRixJQUFmLENBQTFEO0FBQ0g7O0lBbUJvQkcsOEIsV0FEcEIsZ0RBQXFCLDhDQUFyQixDLHlCQUFELE1BQ3FCQSw4QkFEckIsU0FDNERDLGVBQU1DO0FBRGxFO0FBQ2dHO0FBRzVGQyxFQUFBQSxXQUFXLENBQUNDO0FBQUQ7QUFBQSxJQUFnQjtBQUN2QixVQUFNQSxLQUFOO0FBRHVCLCtEQUZHLElBQUlDLEdBQUosRUFFSDtBQUFBLG9EQWVSLENBQUNDO0FBQUQ7QUFBQSxTQUE0QjtBQUMzQyxZQUFNQyxTQUFTLEdBQUcsaUNBQW1CLEtBQUtDLEtBQUwsQ0FBV0MsYUFBOUIsQ0FBbEI7QUFDQUYsTUFBQUEsU0FBUyxDQUFDRCxVQUFELENBQVQsR0FBd0IsQ0FBQ0MsU0FBUyxDQUFDRCxVQUFELENBQWxDO0FBQ0EsV0FBS0ksUUFBTCxDQUFjO0FBQUNELFFBQUFBLGFBQWEsRUFBRUY7QUFBaEIsT0FBZDtBQUNILEtBbkIwQjtBQUFBLHFFQXFCUyxDQUFDSTtBQUFEO0FBQUEsU0FBcUI7QUFDckQsV0FBS0QsUUFBTCxDQUFjO0FBQUNFLFFBQUFBLGlCQUFpQixFQUFFRDtBQUFwQixPQUFkO0FBQ0gsS0F2QjBCO0FBQUEsb0RBeUJSLE1BQU9FLEVBQVAsSUFBYztBQUM3QixXQUFLQyxtQkFBTCxDQUF5QkMsTUFBTSxDQUFDQyxPQUFQLENBQWUsS0FBS1IsS0FBTCxDQUFXQyxhQUExQixFQUNwQlEsTUFEb0IsQ0FDYixDQUFDLENBQUNDLENBQUQsRUFBSUMsVUFBSixDQUFELEtBQXFCQSxVQURSLEVBRXBCQyxHQUZvQixDQUVoQixDQUFDLENBQUNDLEdBQUQsQ0FBRCxLQUFXQSxHQUZLLENBQXpCO0FBR0gsS0E3QjBCO0FBQUEsb0RBK0JSLE1BQU9SLEVBQVAsSUFBYztBQUM3QixXQUFLQyxtQkFBTCxDQUF5QixFQUF6QixFQUQ2QixDQUNDO0FBQ2pDLEtBakMwQjs7QUFHdkIsVUFBTVEsWUFBWSxHQUFHQyx1Q0FBc0JDLHFCQUF0QixDQUE0QyxLQUFLcEIsS0FBTCxDQUFXcUIscUJBQXZELENBQXJCOztBQUNBSCxJQUFBQSxZQUFZLENBQUNJLE9BQWIsQ0FBcUJDLENBQUMsSUFBSSxLQUFLQyxtQkFBTCxDQUF5QkMsR0FBekIsQ0FBNkJGLENBQUMsQ0FBQ0csR0FBL0IsRUFBb0NILENBQXBDLENBQTFCO0FBRUEsVUFBTUk7QUFBc0I7QUFBQSxNQUFHLEVBQS9CO0FBQ0EsU0FBSzNCLEtBQUwsQ0FBV3FCLHFCQUFYLENBQWlDQyxPQUFqQyxDQUF5Q00sQ0FBQyxJQUFJRCxNQUFNLENBQUNDLENBQUQsQ0FBTixHQUFZLElBQTFEO0FBRUEsU0FBS3hCLEtBQUwsR0FBYTtBQUNUQyxNQUFBQSxhQUFhLEVBQUVzQixNQUROO0FBRVRuQixNQUFBQSxpQkFBaUIsRUFBRTtBQUZWLEtBQWI7QUFJSDs7QUFzQk9FLEVBQUFBLG1CQUFSLENBQTRCbUI7QUFBNUI7QUFBQSxJQUFvRDtBQUNoRCxRQUFJLEtBQUt6QixLQUFMLENBQVdJLGlCQUFmLEVBQWtDO0FBQzlCaEIsTUFBQUEsa0NBQWtDLENBQUMsS0FBS1EsS0FBTCxDQUFXZCxNQUFaLEVBQW9CMkMsUUFBcEIsQ0FBbEM7QUFDSDs7QUFDRCxTQUFLN0IsS0FBTCxDQUFXOEIsVUFBWCxDQUFzQjtBQUFDRCxNQUFBQTtBQUFELEtBQXRCO0FBQ0g7O0FBRU1FLEVBQUFBLE1BQVAsR0FBZ0I7QUFDWixVQUFNQyxZQUFZLEdBQUdyQixNQUFNLENBQUNDLE9BQVAsQ0FBZSxLQUFLUixLQUFMLENBQVdDLGFBQTFCLEVBQXlDVyxHQUF6QyxDQUE2QyxDQUFDLENBQUNDLEdBQUQsRUFBTWdCLFNBQU4sQ0FBRCxFQUFtQkMsQ0FBbkIsS0FBeUI7QUFDdkYsWUFBTUMsSUFBSSxHQUFHQywrQkFBZUMsR0FBZixDQUFtQnBCLEdBQW5CLEVBQXdCLEtBQUtqQixLQUFMLENBQVdzQyxVQUFuQyxDQUFiOztBQUNBLFlBQU1DLE1BQU0sR0FBR0osSUFBSSxDQUFDSSxNQUFMLGdCQUNUO0FBQU0sUUFBQSxTQUFTLEVBQUM7QUFBaEIsU0FBNERKLElBQUksQ0FBQ0ksTUFBakUsQ0FEUyxHQUVULElBRk47QUFJQSwwQkFDSTtBQUFLLFFBQUEsU0FBUyxFQUFDLHVDQUFmO0FBQXVELFFBQUEsR0FBRyxFQUFFdEIsR0FBRyxHQUFHaUI7QUFBbEUsc0JBQ0ksNkJBQUMsdUJBQUQ7QUFDSSxRQUFBLE9BQU8sRUFBRUQsU0FEYjtBQUVJLFFBQUEsUUFBUSxFQUFFLE1BQU0sS0FBS08sUUFBTCxDQUFjdkIsR0FBZDtBQUZwQixTQUdFa0IsSUFBSSxDQUFDTSxPQUhQLENBREosRUFLS0YsTUFMTCxDQURKO0FBU0gsS0Fmb0IsQ0FBckI7QUFpQkEsd0JBQ0ksNkJBQUMsbUJBQUQ7QUFDSSxNQUFBLFNBQVMsRUFBQyxtQ0FEZDtBQUVJLE1BQUEsVUFBVSxFQUFFLEtBQUt2QyxLQUFMLENBQVc4QixVQUYzQjtBQUdJLE1BQUEsS0FBSyxFQUFFLHlCQUFHLDRCQUFIO0FBSFgsb0JBS0k7QUFBTSxNQUFBLFFBQVEsRUFBRSxLQUFLWTtBQUFyQixvQkFDSTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsb0JBQ0k7QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLE9BQTZCLHlCQUFHLDRCQUFILENBQTdCLENBREosRUFFS1YsWUFGTCxlQUdJLDZCQUFDLHNCQUFEO0FBQ0ksTUFBQSxhQUFhLEVBQUUseUJBQUcsU0FBSCxDQURuQjtBQUVJLE1BQUEsWUFBWSxFQUFFLHlCQUFHLGFBQUgsQ0FGbEI7QUFHSSxNQUFBLG9CQUFvQixFQUFFLEtBQUtVLFFBSC9CO0FBSUksTUFBQSxRQUFRLEVBQUUsS0FBS0MsUUFKbkI7QUFLSSxNQUFBLFFBQVEsZUFDSiw2QkFBQyw2QkFBRDtBQUNJLFFBQUEsS0FBSyxFQUFFLEtBQUt2QyxLQUFMLENBQVdJLGlCQUR0QjtBQUVJLFFBQUEsYUFBYSxFQUFFLElBRm5CO0FBR0ksUUFBQSxRQUFRLEVBQUUsS0FBS29DLHlCQUhuQjtBQUlJLFFBQUEsS0FBSyxFQUFFLHlCQUFHLHVDQUFIO0FBSlg7QUFOUixNQUhKLENBREosQ0FMSixDQURKO0FBMEJIOztBQXpGMkYsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQmFzZURpYWxvZyBmcm9tIFwiLi9CYXNlRGlhbG9nXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IElEaWFsb2dQcm9wcyB9IGZyb20gXCIuL0lEaWFsb2dQcm9wc1wiO1xuaW1wb3J0IHtcbiAgICBDYXBhYmlsaXR5LFxuICAgIFdpZGdldCxcbiAgICBXaWRnZXRFdmVudENhcGFiaWxpdHksXG4gICAgV2lkZ2V0S2luZCxcbn0gZnJvbSBcIm1hdHJpeC13aWRnZXQtYXBpXCI7XG5pbXBvcnQgeyBvYmplY3RTaGFsbG93Q2xvbmUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvb2JqZWN0c1wiO1xuaW1wb3J0IFN0eWxlZENoZWNrYm94IGZyb20gXCIuLi9lbGVtZW50cy9TdHlsZWRDaGVja2JveFwiO1xuaW1wb3J0IERpYWxvZ0J1dHRvbnMgZnJvbSBcIi4uL2VsZW1lbnRzL0RpYWxvZ0J1dHRvbnNcIjtcbmltcG9ydCBMYWJlbGxlZFRvZ2dsZVN3aXRjaCBmcm9tIFwiLi4vZWxlbWVudHMvTGFiZWxsZWRUb2dnbGVTd2l0Y2hcIjtcbmltcG9ydCB7IENhcGFiaWxpdHlUZXh0IH0gZnJvbSBcIi4uLy4uLy4uL3dpZGdldHMvQ2FwYWJpbGl0eVRleHRcIjtcbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVtZW1iZXJlZENhcGFiaWxpdGllc0ZvcldpZGdldCh3aWRnZXQ6IFdpZGdldCk6IENhcGFiaWxpdHlbXSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oYHdpZGdldF8ke3dpZGdldC5pZH1fYXBwcm92ZWRfY2Fwc2ApIHx8IFwiW11cIik7XG59XG5cbmZ1bmN0aW9uIHNldFJlbWVtYmVyZWRDYXBhYmlsaXRpZXNGb3JXaWRnZXQod2lkZ2V0OiBXaWRnZXQsIGNhcHM6IENhcGFiaWxpdHlbXSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGB3aWRnZXRfJHt3aWRnZXQuaWR9X2FwcHJvdmVkX2NhcHNgLCBKU09OLnN0cmluZ2lmeShjYXBzKSk7XG59XG5cbmludGVyZmFjZSBJUHJvcHMgZXh0ZW5kcyBJRGlhbG9nUHJvcHMge1xuICAgIHJlcXVlc3RlZENhcGFiaWxpdGllczogU2V0PENhcGFiaWxpdHk+O1xuICAgIHdpZGdldDogV2lkZ2V0O1xuICAgIHdpZGdldEtpbmQ6IFdpZGdldEtpbmQ7IC8vIFRPRE86IFJlZmFjdG9yIGludG8gdGhlIFdpZGdldCBjbGFzc1xufVxuXG5pbnRlcmZhY2UgSUJvb2xlYW5TdGF0ZXMge1xuICAgIC8vIEB0cy1pZ25vcmUgLSBUUyB3YW50cyBhIHN0cmluZyBrZXksIGJ1dCB3ZSBrbm93IGJldHRlclxuICAgIFtjYXBhYmlsaXR5OiBDYXBhYmlsaXR5XTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIElTdGF0ZSB7XG4gICAgYm9vbGVhblN0YXRlczogSUJvb2xlYW5TdGF0ZXM7XG4gICAgcmVtZW1iZXJTZWxlY3Rpb246IGJvb2xlYW47XG59XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLmRpYWxvZ3MuV2lkZ2V0Q2FwYWJpbGl0aWVzUHJvbXB0RGlhbG9nXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWRnZXRDYXBhYmlsaXRpZXNQcm9tcHREaWFsb2cgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PElQcm9wcywgSVN0YXRlPiB7XG4gICAgcHJpdmF0ZSBldmVudFBlcm1pc3Npb25zTWFwID0gbmV3IE1hcDxDYXBhYmlsaXR5LCBXaWRnZXRFdmVudENhcGFiaWxpdHk+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBjb25zdCBwYXJzZWRFdmVudHMgPSBXaWRnZXRFdmVudENhcGFiaWxpdHkuZmluZEV2ZW50Q2FwYWJpbGl0aWVzKHRoaXMucHJvcHMucmVxdWVzdGVkQ2FwYWJpbGl0aWVzKTtcbiAgICAgICAgcGFyc2VkRXZlbnRzLmZvckVhY2goZSA9PiB0aGlzLmV2ZW50UGVybWlzc2lvbnNNYXAuc2V0KGUucmF3LCBlKSk7XG5cbiAgICAgICAgY29uc3Qgc3RhdGVzOiBJQm9vbGVhblN0YXRlcyA9IHt9O1xuICAgICAgICB0aGlzLnByb3BzLnJlcXVlc3RlZENhcGFiaWxpdGllcy5mb3JFYWNoKGMgPT4gc3RhdGVzW2NdID0gdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGJvb2xlYW5TdGF0ZXM6IHN0YXRlcyxcbiAgICAgICAgICAgIHJlbWVtYmVyU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ub2dnbGUgPSAoY2FwYWJpbGl0eTogQ2FwYWJpbGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTdGF0ZXMgPSBvYmplY3RTaGFsbG93Q2xvbmUodGhpcy5zdGF0ZS5ib29sZWFuU3RhdGVzKTtcbiAgICAgICAgbmV3U3RhdGVzW2NhcGFiaWxpdHldID0gIW5ld1N0YXRlc1tjYXBhYmlsaXR5XTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Ym9vbGVhblN0YXRlczogbmV3U3RhdGVzfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25SZW1lbWJlclNlbGVjdGlvbkNoYW5nZSA9IChuZXdWYWw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cmVtZW1iZXJTZWxlY3Rpb246IG5ld1ZhbH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uU3VibWl0ID0gYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VBbmRUcnlSZW1lbWJlcihPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlLmJvb2xlYW5TdGF0ZXMpXG4gICAgICAgICAgICAuZmlsdGVyKChbXywgaXNTZWxlY3RlZF0pID0+IGlzU2VsZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChbY2FwXSkgPT4gY2FwKSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25SZWplY3QgPSBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUFuZFRyeVJlbWVtYmVyKFtdKTsgLy8gbm90aGluZyB3YXMgYXBwcm92ZWRcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjbG9zZUFuZFRyeVJlbWVtYmVyKGFwcHJvdmVkOiBDYXBhYmlsaXR5W10pIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUucmVtZW1iZXJTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHNldFJlbWVtYmVyZWRDYXBhYmlsaXRpZXNGb3JXaWRnZXQodGhpcy5wcm9wcy53aWRnZXQsIGFwcHJvdmVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BzLm9uRmluaXNoZWQoe2FwcHJvdmVkfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hSb3dzID0gT2JqZWN0LmVudHJpZXModGhpcy5zdGF0ZS5ib29sZWFuU3RhdGVzKS5tYXAoKFtjYXAsIGlzQ2hlY2tlZF0sIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBDYXBhYmlsaXR5VGV4dC5mb3IoY2FwLCB0aGlzLnByb3BzLndpZGdldEtpbmQpO1xuICAgICAgICAgICAgY29uc3QgYnlsaW5lID0gdGV4dC5ieWxpbmVcbiAgICAgICAgICAgICAgICA/IDxzcGFuIGNsYXNzTmFtZT1cIm14X1dpZGdldENhcGFiaWxpdGllc1Byb21wdERpYWxvZ19ieWxpbmVcIj57dGV4dC5ieWxpbmV9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1dpZGdldENhcGFiaWxpdGllc1Byb21wdERpYWxvZ19jYXBcIiBrZXk9e2NhcCArIGl9PlxuICAgICAgICAgICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB0aGlzLm9uVG9nZ2xlKGNhcCl9XG4gICAgICAgICAgICAgICAgICAgID57dGV4dC5wcmltYXJ5fTwvU3R5bGVkQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIHtieWxpbmV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJhc2VEaWFsb2dcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9XaWRnZXRDYXBhYmlsaXRpZXNQcm9tcHREaWFsb2dcIlxuICAgICAgICAgICAgICAgIG9uRmluaXNoZWQ9e3RoaXMucHJvcHMub25GaW5pc2hlZH1cbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJBcHByb3ZlIHdpZGdldCBwZXJtaXNzaW9uc1wiKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5vblN1Ym1pdH0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZFwiPntfdChcIlRoaXMgd2lkZ2V0IHdvdWxkIGxpa2UgdG86XCIpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoZWNrYm94Um93c31cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEaWFsb2dCdXR0b25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUJ1dHRvbj17X3QoXCJBcHByb3ZlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbj17X3QoXCJEZWNsaW5lIEFsbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblByaW1hcnlCdXR0b25DbGljaz17dGhpcy5vblN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17dGhpcy5vblJlamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGl2ZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbGxlZFRvZ2dsZVN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucmVtZW1iZXJTZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVJbkZyb250PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25SZW1lbWJlclNlbGVjdGlvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcIlJlbWVtYmVyIG15IHNlbGVjdGlvbiBmb3IgdGhpcyB3aWRnZXRcIil9IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==