UNPKG

matrix-react-sdk

Version:
117 lines (110 loc) 24.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _compoundWeb = require("@vector-im/compound-web"); var _icons = require("@vector-im/compound-design-tokens/assets/web/icons"); var _languageHandler = require("../../../languageHandler"); var _SdkConfig = _interopRequireDefault(require("../../../SdkConfig")); var _WidgetUtils = _interopRequireDefault(require("../../../utils/WidgetUtils")); var _MatrixClientPeg = require("../../../MatrixClientPeg"); var _MemberAvatar = _interopRequireDefault(require("../avatars/MemberAvatar")); var _BaseAvatar = _interopRequireDefault(require("../avatars/BaseAvatar")); var _Heading = _interopRequireDefault(require("../typography/Heading")); var _AccessibleButton = _interopRequireDefault(require("./AccessibleButton")); var _UrlUtils = require("../../../utils/UrlUtils"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Copyright 2018, 2019 New Vector Ltd Copyright 2017 Vector Creations Ltd SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ class AppPermission extends _react.default.Component { constructor(props) { super(props); // The first step is to pick apart the widget so we can render information about it const urlInfo = this.parseWidgetUrl(); // The second step is to find the user's profile so we can show it on the prompt const room = _MatrixClientPeg.MatrixClientPeg.safeGet().getRoom(this.props.roomId); let roomMember = null; if (room) roomMember = room.getMember(this.props.creatorUserId); // Set all this into the initial state this.state = _objectSpread({ roomMember }, urlInfo); } parseWidgetUrl() { const widgetUrl = (0, _UrlUtils.parseUrl)(this.props.url); // HACK: We're relying on the query params when we should be relying on the widget's `data`. // This is a workaround for Scalar. if (_WidgetUtils.default.isScalarUrl(this.props.url) && widgetUrl.searchParams.has("url")) { const unwrappedUrl = (0, _UrlUtils.parseUrl)(widgetUrl.searchParams.get("url")); return { widgetDomain: unwrappedUrl.host || unwrappedUrl.hostname, isWrapped: true }; } else { return { widgetDomain: widgetUrl.host || widgetUrl.hostname, isWrapped: false }; } } render() { const brand = _SdkConfig.default.get().brand; const displayName = this.state.roomMember ? this.state.roomMember.name : this.props.creatorUserId; const userId = displayName === this.props.creatorUserId ? null : this.props.creatorUserId; const avatar = this.state.roomMember ? /*#__PURE__*/_react.default.createElement(_MemberAvatar.default, { member: this.state.roomMember, size: "38px" }) : /*#__PURE__*/_react.default.createElement(_BaseAvatar.default, { name: this.props.creatorUserId, size: "38px" }); const warningTooltip = /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, { label: (0, _languageHandler._t)("analytics|shared_data_heading"), caption: /*#__PURE__*/_react.default.createElement("ul", null, /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_name")), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_avatar")), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_mxid")), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_device_id")), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_theme")), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_lang")), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_url", { brand })), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_room_id")), /*#__PURE__*/_react.default.createElement("li", null, (0, _languageHandler._t)("widget|shared_data_widget_id"))) }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_TextWithTooltip_target mx_TextWithTooltip_target--helpIcon" }, /*#__PURE__*/_react.default.createElement(_icons.HelpIcon, { className: "mx_Icon mx_Icon_12" }))); // Due to i18n limitations, we can't dedupe the code for variables in these two messages. const warning = this.state.isWrapped ? (0, _languageHandler._t)("widget|shared_data_warning_im", { widgetDomain: this.state.widgetDomain }, { helpIcon: () => warningTooltip }) : (0, _languageHandler._t)("widget|shared_data_warning", { widgetDomain: this.state.widgetDomain }, { helpIcon: () => warningTooltip }); const encryptionWarning = this.props.isRoomEncrypted ? (0, _languageHandler._t)("widget|unencrypted_warning") : null; return /*#__PURE__*/_react.default.createElement("div", { className: "mx_AppPermission" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_AppPermission_content" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_AppPermission_content_bolder" }, (0, _languageHandler._t)("widget|added_by")), /*#__PURE__*/_react.default.createElement("div", null, avatar, /*#__PURE__*/_react.default.createElement(_Heading.default, { size: "4" }, displayName), /*#__PURE__*/_react.default.createElement("div", null, userId)), /*#__PURE__*/_react.default.createElement("div", null, warning), /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("widget|cookie_warning"), "\xA0", encryptionWarning), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary_sm", onClick: this.props.onPermissionGranted }, (0, _languageHandler._t)("action|continue"))))); } } exports.default = AppPermission; (0, _defineProperty2.default)(AppPermission, "defaultProps", { onPermissionGranted: () => {} }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jb21wb3VuZFdlYiIsIl9pY29ucyIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfU2RrQ29uZmlnIiwiX1dpZGdldFV0aWxzIiwiX01hdHJpeENsaWVudFBlZyIsIl9NZW1iZXJBdmF0YXIiLCJfQmFzZUF2YXRhciIsIl9IZWFkaW5nIiwiX0FjY2Vzc2libGVCdXR0b24iLCJfVXJsVXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJBcHBQZXJtaXNzaW9uIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwidXJsSW5mbyIsInBhcnNlV2lkZ2V0VXJsIiwicm9vbSIsIk1hdHJpeENsaWVudFBlZyIsInNhZmVHZXQiLCJnZXRSb29tIiwicm9vbUlkIiwicm9vbU1lbWJlciIsImdldE1lbWJlciIsImNyZWF0b3JVc2VySWQiLCJzdGF0ZSIsIndpZGdldFVybCIsInBhcnNlVXJsIiwidXJsIiwiV2lkZ2V0VXRpbHMiLCJpc1NjYWxhclVybCIsInNlYXJjaFBhcmFtcyIsImhhcyIsInVud3JhcHBlZFVybCIsImdldCIsIndpZGdldERvbWFpbiIsImhvc3QiLCJob3N0bmFtZSIsImlzV3JhcHBlZCIsInJlbmRlciIsImJyYW5kIiwiU2RrQ29uZmlnIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwidXNlcklkIiwiYXZhdGFyIiwiY3JlYXRlRWxlbWVudCIsIm1lbWJlciIsInNpemUiLCJ3YXJuaW5nVG9vbHRpcCIsIlRvb2x0aXAiLCJsYWJlbCIsIl90IiwiY2FwdGlvbiIsImNsYXNzTmFtZSIsIkhlbHBJY29uIiwid2FybmluZyIsImhlbHBJY29uIiwiZW5jcnlwdGlvbldhcm5pbmciLCJpc1Jvb21FbmNyeXB0ZWQiLCJraW5kIiwib25DbGljayIsIm9uUGVybWlzc2lvbkdyYW50ZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZWxlbWVudHMvQXBwUGVybWlzc2lvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTksIDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDE4LCAyMDE5IE5ldyBWZWN0b3IgTHRkXG5Db3B5cmlnaHQgMjAxNyBWZWN0b3IgQ3JlYXRpb25zIEx0ZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tTWVtYmVyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuaW1wb3J0IHsgSGVscEljb24gfSBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC1kZXNpZ24tdG9rZW5zL2Fzc2V0cy93ZWIvaWNvbnNcIjtcblxuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgU2RrQ29uZmlnIGZyb20gXCIuLi8uLi8uLi9TZGtDb25maWdcIjtcbmltcG9ydCBXaWRnZXRVdGlscyBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvV2lkZ2V0VXRpbHNcIjtcbmltcG9ydCB7IE1hdHJpeENsaWVudFBlZyB9IGZyb20gXCIuLi8uLi8uLi9NYXRyaXhDbGllbnRQZWdcIjtcbmltcG9ydCBNZW1iZXJBdmF0YXIgZnJvbSBcIi4uL2F2YXRhcnMvTWVtYmVyQXZhdGFyXCI7XG5pbXBvcnQgQmFzZUF2YXRhciBmcm9tIFwiLi4vYXZhdGFycy9CYXNlQXZhdGFyXCI7XG5pbXBvcnQgSGVhZGluZyBmcm9tIFwiLi4vdHlwb2dyYXBoeS9IZWFkaW5nXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgeyBwYXJzZVVybCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9VcmxVdGlsc1wiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBjcmVhdG9yVXNlcklkOiBzdHJpbmc7XG4gICAgcm9vbUlkOiBzdHJpbmc7XG4gICAgb25QZXJtaXNzaW9uR3JhbnRlZDogKCkgPT4gdm9pZDtcbiAgICBpc1Jvb21FbmNyeXB0ZWQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSVN0YXRlIHtcbiAgICByb29tTWVtYmVyOiBSb29tTWVtYmVyIHwgbnVsbDtcbiAgICBpc1dyYXBwZWQ6IGJvb2xlYW47XG4gICAgd2lkZ2V0RG9tYWluOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBQZXJtaXNzaW9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElQcm9wcywgSVN0YXRlPiB7XG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0UHJvcHM6IFBhcnRpYWw8SVByb3BzPiA9IHtcbiAgICAgICAgb25QZXJtaXNzaW9uR3JhbnRlZDogKCkgPT4ge30sXG4gICAgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICAvLyBUaGUgZmlyc3Qgc3RlcCBpcyB0byBwaWNrIGFwYXJ0IHRoZSB3aWRnZXQgc28gd2UgY2FuIHJlbmRlciBpbmZvcm1hdGlvbiBhYm91dCBpdFxuICAgICAgICBjb25zdCB1cmxJbmZvID0gdGhpcy5wYXJzZVdpZGdldFVybCgpO1xuXG4gICAgICAgIC8vIFRoZSBzZWNvbmQgc3RlcCBpcyB0byBmaW5kIHRoZSB1c2VyJ3MgcHJvZmlsZSBzbyB3ZSBjYW4gc2hvdyBpdCBvbiB0aGUgcHJvbXB0XG4gICAgICAgIGNvbnN0IHJvb20gPSBNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpLmdldFJvb20odGhpcy5wcm9wcy5yb29tSWQpO1xuICAgICAgICBsZXQgcm9vbU1lbWJlcjogUm9vbU1lbWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAocm9vbSkgcm9vbU1lbWJlciA9IHJvb20uZ2V0TWVtYmVyKHRoaXMucHJvcHMuY3JlYXRvclVzZXJJZCk7XG5cbiAgICAgICAgLy8gU2V0IGFsbCB0aGlzIGludG8gdGhlIGluaXRpYWwgc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJvb21NZW1iZXIsXG4gICAgICAgICAgICAuLi51cmxJbmZvLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VXaWRnZXRVcmwoKTogeyBpc1dyYXBwZWQ6IGJvb2xlYW47IHdpZGdldERvbWFpbjogc3RyaW5nIHwgbnVsbCB9IHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0VXJsID0gcGFyc2VVcmwodGhpcy5wcm9wcy51cmwpO1xuXG4gICAgICAgIC8vIEhBQ0s6IFdlJ3JlIHJlbHlpbmcgb24gdGhlIHF1ZXJ5IHBhcmFtcyB3aGVuIHdlIHNob3VsZCBiZSByZWx5aW5nIG9uIHRoZSB3aWRnZXQncyBgZGF0YWAuXG4gICAgICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBTY2FsYXIuXG4gICAgICAgIGlmIChXaWRnZXRVdGlscy5pc1NjYWxhclVybCh0aGlzLnByb3BzLnVybCkgJiYgd2lkZ2V0VXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJ1cmxcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZFVybCA9IHBhcnNlVXJsKHdpZGdldFVybC5zZWFyY2hQYXJhbXMuZ2V0KFwidXJsXCIpISk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZGdldERvbWFpbjogdW53cmFwcGVkVXJsLmhvc3QgfHwgdW53cmFwcGVkVXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgICAgIGlzV3JhcHBlZDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZGdldERvbWFpbjogd2lkZ2V0VXJsLmhvc3QgfHwgd2lkZ2V0VXJsLmhvc3RuYW1lLFxuICAgICAgICAgICAgICAgIGlzV3JhcHBlZDogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICBjb25zdCBicmFuZCA9IFNka0NvbmZpZy5nZXQoKS5icmFuZDtcblxuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuc3RhdGUucm9vbU1lbWJlciA/IHRoaXMuc3RhdGUucm9vbU1lbWJlci5uYW1lIDogdGhpcy5wcm9wcy5jcmVhdG9yVXNlcklkO1xuICAgICAgICBjb25zdCB1c2VySWQgPSBkaXNwbGF5TmFtZSA9PT0gdGhpcy5wcm9wcy5jcmVhdG9yVXNlcklkID8gbnVsbCA6IHRoaXMucHJvcHMuY3JlYXRvclVzZXJJZDtcblxuICAgICAgICBjb25zdCBhdmF0YXIgPSB0aGlzLnN0YXRlLnJvb21NZW1iZXIgPyAoXG4gICAgICAgICAgICA8TWVtYmVyQXZhdGFyIG1lbWJlcj17dGhpcy5zdGF0ZS5yb29tTWVtYmVyfSBzaXplPVwiMzhweFwiIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgICA8QmFzZUF2YXRhciBuYW1lPXt0aGlzLnByb3BzLmNyZWF0b3JVc2VySWR9IHNpemU9XCIzOHB4XCIgLz5cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB3YXJuaW5nVG9vbHRpcCA9IChcbiAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiYW5hbHl0aWNzfHNoYXJlZF9kYXRhX2hlYWRpbmdcIil9XG4gICAgICAgICAgICAgICAgY2FwdGlvbj17XG4gICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT57X3QoXCJ3aWRnZXR8c2hhcmVkX2RhdGFfbmFtZVwiKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpPntfdChcIndpZGdldHxzaGFyZWRfZGF0YV9hdmF0YXJcIil9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT57X3QoXCJ3aWRnZXR8c2hhcmVkX2RhdGFfbXhpZFwiKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpPntfdChcIndpZGdldHxzaGFyZWRfZGF0YV9kZXZpY2VfaWRcIil9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT57X3QoXCJ3aWRnZXR8c2hhcmVkX2RhdGFfdGhlbWVcIil9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT57X3QoXCJ3aWRnZXR8c2hhcmVkX2RhdGFfbGFuZ1wiKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpPntfdChcIndpZGdldHxzaGFyZWRfZGF0YV91cmxcIiwgeyBicmFuZCB9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpPntfdChcIndpZGdldHxzaGFyZWRfZGF0YV9yb29tX2lkXCIpfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+e190KFwid2lkZ2V0fHNoYXJlZF9kYXRhX3dpZGdldF9pZFwiKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1RleHRXaXRoVG9vbHRpcF90YXJnZXQgbXhfVGV4dFdpdGhUb29sdGlwX3RhcmdldC0taGVscEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPEhlbHBJY29uIGNsYXNzTmFtZT1cIm14X0ljb24gbXhfSWNvbl8xMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRHVlIHRvIGkxOG4gbGltaXRhdGlvbnMsIHdlIGNhbid0IGRlZHVwZSB0aGUgY29kZSBmb3IgdmFyaWFibGVzIGluIHRoZXNlIHR3byBtZXNzYWdlcy5cbiAgICAgICAgY29uc3Qgd2FybmluZyA9IHRoaXMuc3RhdGUuaXNXcmFwcGVkXG4gICAgICAgICAgICA/IF90KFxuICAgICAgICAgICAgICAgICAgXCJ3aWRnZXR8c2hhcmVkX2RhdGFfd2FybmluZ19pbVwiLFxuICAgICAgICAgICAgICAgICAgeyB3aWRnZXREb21haW46IHRoaXMuc3RhdGUud2lkZ2V0RG9tYWluIH0sXG4gICAgICAgICAgICAgICAgICB7IGhlbHBJY29uOiAoKSA9PiB3YXJuaW5nVG9vbHRpcCB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF90KFxuICAgICAgICAgICAgICAgICAgXCJ3aWRnZXR8c2hhcmVkX2RhdGFfd2FybmluZ1wiLFxuICAgICAgICAgICAgICAgICAgeyB3aWRnZXREb21haW46IHRoaXMuc3RhdGUud2lkZ2V0RG9tYWluIH0sXG4gICAgICAgICAgICAgICAgICB7IGhlbHBJY29uOiAoKSA9PiB3YXJuaW5nVG9vbHRpcCB9LFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGVuY3J5cHRpb25XYXJuaW5nID0gdGhpcy5wcm9wcy5pc1Jvb21FbmNyeXB0ZWQgPyBfdChcIndpZGdldHx1bmVuY3J5cHRlZF93YXJuaW5nXCIpIDogbnVsbDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9BcHBQZXJtaXNzaW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9BcHBQZXJtaXNzaW9uX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9BcHBQZXJtaXNzaW9uX2NvbnRlbnRfYm9sZGVyXCI+e190KFwid2lkZ2V0fGFkZGVkX2J5XCIpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge2F2YXRhcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxIZWFkaW5nIHNpemU9XCI0XCI+e2Rpc3BsYXlOYW1lfTwvSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3VzZXJJZH08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3dhcm5pbmd9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJ3aWRnZXR8Y29va2llX3dhcm5pbmdcIil9Jm5ic3A7e2VuY3J5cHRpb25XYXJuaW5nfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIGtpbmQ9XCJwcmltYXJ5X3NtXCIgb25DbGljaz17dGhpcy5wcm9wcy5vblBlcm1pc3Npb25HcmFudGVkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJhY3Rpb258Y29udGludWVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVVBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxnQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsUUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsaUJBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLFNBQUEsR0FBQVgsT0FBQTtBQUFtRCxTQUFBWSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFB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