UNPKG

matrix-react-sdk

Version:
156 lines (150 loc) 25.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.inviteMultipleToRoom = inviteMultipleToRoom; exports.inviteUsersToRoom = inviteUsersToRoom; exports.isValid3pidInvite = isValid3pidInvite; exports.showAnyInviteErrors = showAnyInviteErrors; exports.showRoomInviteDialog = showRoomInviteDialog; exports.showStartChatInviteDialog = showStartChatInviteDialog; var _react = _interopRequireDefault(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _logger = require("matrix-js-sdk/src/logger"); var _MultiInviter = _interopRequireDefault(require("./utils/MultiInviter")); var _Modal = _interopRequireDefault(require("./Modal")); var _languageHandler = require("./languageHandler"); var _InviteDialog = _interopRequireDefault(require("./components/views/dialogs/InviteDialog")); var _BaseAvatar = _interopRequireDefault(require("./components/views/avatars/BaseAvatar")); var _Media = require("./customisations/Media"); var _ErrorDialog = _interopRequireDefault(require("./components/views/dialogs/ErrorDialog")); var _InviteDialogTypes = require("./components/views/dialogs/InviteDialogTypes"); /* Copyright 2024 New Vector Ltd. Copyright 2016-2021 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ /** * Invites multiple addresses to a room * Simpler interface to utils/MultiInviter but with * no option to cancel. * * @param {string} roomId The ID of the room to invite to * @param {string[]} addresses Array of strings of addresses to invite. May be matrix IDs or 3pids. * @param {function} progressCallback optional callback, fired after each invite. * @returns {Promise} Promise */ function inviteMultipleToRoom(client, roomId, addresses, progressCallback) { const inviter = new _MultiInviter.default(client, roomId, progressCallback); return inviter.invite(addresses, undefined).then(states => Promise.resolve({ states, inviter })); } function showStartChatInviteDialog(initialText = "") { // This dialog handles the room creation internally - we don't need to worry about it. _Modal.default.createDialog(_InviteDialog.default, { kind: _InviteDialogTypes.InviteKind.Dm, initialText }, /*className=*/"mx_InviteDialog_flexWrapper", /*isPriority=*/false, /*isStatic=*/true); } function showRoomInviteDialog(roomId, initialText = "") { // This dialog handles the room creation internally - we don't need to worry about it. _Modal.default.createDialog(_InviteDialog.default, { kind: _InviteDialogTypes.InviteKind.Invite, initialText, roomId }, /*className=*/"mx_InviteDialog_flexWrapper", /*isPriority=*/false, /*isStatic=*/true); } /** * Checks if the given MatrixEvent is a valid 3rd party user invite. * @param {MatrixEvent} event The event to check * @returns {boolean} True if valid, false otherwise */ function isValid3pidInvite(event) { if (!event || event.getType() !== _matrix.EventType.RoomThirdPartyInvite) return false; // any events without these keys are not valid 3pid invites, so we ignore them const requiredKeys = ["key_validity_url", "public_key", "display_name"]; if (requiredKeys.some(key => !event.getContent()[key])) { return false; } // Valid enough by our standards return true; } function inviteUsersToRoom(client, roomId, userIds, progressCallback) { return inviteMultipleToRoom(client, roomId, userIds, progressCallback).then(result => { const room = client.getRoom(roomId); showAnyInviteErrors(result.states, room, result.inviter); }).catch(err => { _logger.logger.error(err.stack); _Modal.default.createDialog(_ErrorDialog.default, { title: (0, _languageHandler._t)("invite|failed_title"), description: err && err.message ? err.message : (0, _languageHandler._t)("invite|failed_generic") }); }); } function showAnyInviteErrors(states, room, inviter, userMap) { // Show user any errors const failedUsers = Object.keys(states).filter(a => states[a] === "error"); if (failedUsers.length === 1 && inviter.fatal) { // Just get the first message because there was a fatal problem on the first // user. This usually means that no other users were attempted, making it // pointless for us to list who failed exactly. _Modal.default.createDialog(_ErrorDialog.default, { title: (0, _languageHandler._t)("invite|room_failed_title", { roomName: room.name }), description: inviter.getErrorText(failedUsers[0]) }); return false; } else { const errorList = []; for (const addr of failedUsers) { if (states[addr] === "error") { const reason = inviter.getErrorText(addr); errorList.push(addr + ": " + reason); } } const cli = room.client; if (errorList.length > 0) { // React 16 doesn't let us use `errorList.join(<br />)` anymore, so this is our solution const description = /*#__PURE__*/_react.default.createElement("div", { className: "mx_InviteDialog_multiInviterError" }, /*#__PURE__*/_react.default.createElement("h4", null, (0, _languageHandler._t)("invite|room_failed_partial", {}, { RoomName: () => /*#__PURE__*/_react.default.createElement("strong", null, room.name) })), /*#__PURE__*/_react.default.createElement("div", null, failedUsers.map(addr => { const user = userMap?.get(addr) || cli.getUser(addr); const name = user.name || user.rawDisplayName; const avatarUrl = user.getMxcAvatarUrl?.() || user.avatarUrl; return /*#__PURE__*/_react.default.createElement("div", { key: addr, className: "mx_InviteDialog_tile mx_InviteDialog_tile--inviterError" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_InviteDialog_tile_avatarStack" }, /*#__PURE__*/_react.default.createElement(_BaseAvatar.default, { url: (avatarUrl && (0, _Media.mediaFromMxc)(avatarUrl).getSquareThumbnailHttp(24)) ?? undefined, name: name, idName: user?.userId, size: "36px" })), /*#__PURE__*/_react.default.createElement("div", { className: "mx_InviteDialog_tile_nameStack" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_InviteDialog_tile_nameStack_name" }, name), /*#__PURE__*/_react.default.createElement("span", { className: "mx_InviteDialog_tile_nameStack_userId" }, user?.userId)), /*#__PURE__*/_react.default.createElement("div", { className: "mx_InviteDialog_tile--inviterError_errorText" }, inviter.getErrorText(addr))); }))); _Modal.default.createDialog(_ErrorDialog.default, { title: (0, _languageHandler._t)("invite|room_failed_partial_title"), description }); return false; } } return true; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfbG9nZ2VyIiwiX011bHRpSW52aXRlciIsIl9Nb2RhbCIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfSW52aXRlRGlhbG9nIiwiX0Jhc2VBdmF0YXIiLCJfTWVkaWEiLCJfRXJyb3JEaWFsb2ciLCJfSW52aXRlRGlhbG9nVHlwZXMiLCJpbnZpdGVNdWx0aXBsZVRvUm9vbSIsImNsaWVudCIsInJvb21JZCIsImFkZHJlc3NlcyIsInByb2dyZXNzQ2FsbGJhY2siLCJpbnZpdGVyIiwiTXVsdGlJbnZpdGVyIiwiaW52aXRlIiwidW5kZWZpbmVkIiwidGhlbiIsInN0YXRlcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvd1N0YXJ0Q2hhdEludml0ZURpYWxvZyIsImluaXRpYWxUZXh0IiwiTW9kYWwiLCJjcmVhdGVEaWFsb2ciLCJJbnZpdGVEaWFsb2ciLCJraW5kIiwiSW52aXRlS2luZCIsIkRtIiwic2hvd1Jvb21JbnZpdGVEaWFsb2ciLCJJbnZpdGUiLCJpc1ZhbGlkM3BpZEludml0ZSIsImV2ZW50IiwiZ2V0VHlwZSIsIkV2ZW50VHlwZSIsIlJvb21UaGlyZFBhcnR5SW52aXRlIiwicmVxdWlyZWRLZXlzIiwic29tZSIsImtleSIsImdldENvbnRlbnQiLCJpbnZpdGVVc2Vyc1RvUm9vbSIsInVzZXJJZHMiLCJyZXN1bHQiLCJyb29tIiwiZ2V0Um9vbSIsInNob3dBbnlJbnZpdGVFcnJvcnMiLCJjYXRjaCIsImVyciIsImxvZ2dlciIsImVycm9yIiwic3RhY2siLCJFcnJvckRpYWxvZyIsInRpdGxlIiwiX3QiLCJkZXNjcmlwdGlvbiIsIm1lc3NhZ2UiLCJ1c2VyTWFwIiwiZmFpbGVkVXNlcnMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiYSIsImxlbmd0aCIsImZhdGFsIiwicm9vbU5hbWUiLCJuYW1lIiwiZ2V0RXJyb3JUZXh0IiwiZXJyb3JMaXN0IiwiYWRkciIsInJlYXNvbiIsInB1c2giLCJjbGkiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIlJvb21OYW1lIiwibWFwIiwidXNlciIsImdldCIsImdldFVzZXIiLCJyYXdEaXNwbGF5TmFtZSIsImF2YXRhclVybCIsImdldE14Y0F2YXRhclVybCIsInVybCIsIm1lZGlhRnJvbU14YyIsImdldFNxdWFyZVRodW1ibmFpbEh0dHAiLCJpZE5hbWUiLCJ1c2VySWQiLCJzaXplIl0sInNvdXJjZXMiOlsiLi4vc3JjL1Jvb21JbnZpdGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE2LTIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudFByb3BzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tLCBNYXRyaXhFdmVudCwgTWF0cml4Q2xpZW50LCBVc2VyLCBFdmVudFR5cGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCBNdWx0aUludml0ZXIsIHsgQ29tcGxldGlvblN0YXRlcyB9IGZyb20gXCIuL3V0aWxzL011bHRpSW52aXRlclwiO1xuaW1wb3J0IE1vZGFsIGZyb20gXCIuL01vZGFsXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IEludml0ZURpYWxvZyBmcm9tIFwiLi9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvSW52aXRlRGlhbG9nXCI7XG5pbXBvcnQgQmFzZUF2YXRhciBmcm9tIFwiLi9jb21wb25lbnRzL3ZpZXdzL2F2YXRhcnMvQmFzZUF2YXRhclwiO1xuaW1wb3J0IHsgbWVkaWFGcm9tTXhjIH0gZnJvbSBcIi4vY3VzdG9taXNhdGlvbnMvTWVkaWFcIjtcbmltcG9ydCBFcnJvckRpYWxvZyBmcm9tIFwiLi9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvRXJyb3JEaWFsb2dcIjtcbmltcG9ydCB7IEludml0ZUtpbmQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvSW52aXRlRGlhbG9nVHlwZXNcIjtcbmltcG9ydCB7IE1lbWJlciB9IGZyb20gXCIuL3V0aWxzL2RpcmVjdC1tZXNzYWdlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnZpdGVSZXN1bHQge1xuICAgIHN0YXRlczogQ29tcGxldGlvblN0YXRlcztcbiAgICBpbnZpdGVyOiBNdWx0aUludml0ZXI7XG59XG5cbi8qKlxuICogSW52aXRlcyBtdWx0aXBsZSBhZGRyZXNzZXMgdG8gYSByb29tXG4gKiBTaW1wbGVyIGludGVyZmFjZSB0byB1dGlscy9NdWx0aUludml0ZXIgYnV0IHdpdGhcbiAqIG5vIG9wdGlvbiB0byBjYW5jZWwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJvb21JZCBUaGUgSUQgb2YgdGhlIHJvb20gdG8gaW52aXRlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhZGRyZXNzZXMgQXJyYXkgb2Ygc3RyaW5ncyBvZiBhZGRyZXNzZXMgdG8gaW52aXRlLiBNYXkgYmUgbWF0cml4IElEcyBvciAzcGlkcy5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHByb2dyZXNzQ2FsbGJhY2sgb3B0aW9uYWwgY2FsbGJhY2ssIGZpcmVkIGFmdGVyIGVhY2ggaW52aXRlLlxuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludml0ZU11bHRpcGxlVG9Sb29tKFxuICAgIGNsaWVudDogTWF0cml4Q2xpZW50LFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIGFkZHJlc3Nlczogc3RyaW5nW10sXG4gICAgcHJvZ3Jlc3NDYWxsYmFjaz86ICgpID0+IHZvaWQsXG4pOiBQcm9taXNlPElJbnZpdGVSZXN1bHQ+IHtcbiAgICBjb25zdCBpbnZpdGVyID0gbmV3IE11bHRpSW52aXRlcihjbGllbnQsIHJvb21JZCwgcHJvZ3Jlc3NDYWxsYmFjayk7XG4gICAgcmV0dXJuIGludml0ZXIuaW52aXRlKGFkZHJlc3NlcywgdW5kZWZpbmVkKS50aGVuKChzdGF0ZXMpID0+IFByb21pc2UucmVzb2x2ZSh7IHN0YXRlcywgaW52aXRlciB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93U3RhcnRDaGF0SW52aXRlRGlhbG9nKGluaXRpYWxUZXh0ID0gXCJcIik6IHZvaWQge1xuICAgIC8vIFRoaXMgZGlhbG9nIGhhbmRsZXMgdGhlIHJvb20gY3JlYXRpb24gaW50ZXJuYWxseSAtIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaXQuXG4gICAgTW9kYWwuY3JlYXRlRGlhbG9nKFxuICAgICAgICBJbnZpdGVEaWFsb2csXG4gICAgICAgIHsga2luZDogSW52aXRlS2luZC5EbSwgaW5pdGlhbFRleHQgfSxcbiAgICAgICAgLypjbGFzc05hbWU9Ki8gXCJteF9JbnZpdGVEaWFsb2dfZmxleFdyYXBwZXJcIixcbiAgICAgICAgLyppc1ByaW9yaXR5PSovIGZhbHNlLFxuICAgICAgICAvKmlzU3RhdGljPSovIHRydWUsXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dSb29tSW52aXRlRGlhbG9nKHJvb21JZDogc3RyaW5nLCBpbml0aWFsVGV4dCA9IFwiXCIpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGRpYWxvZyBoYW5kbGVzIHRoZSByb29tIGNyZWF0aW9uIGludGVybmFsbHkgLSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LlxuICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhcbiAgICAgICAgSW52aXRlRGlhbG9nLFxuICAgICAgICB7XG4gICAgICAgICAgICBraW5kOiBJbnZpdGVLaW5kLkludml0ZSxcbiAgICAgICAgICAgIGluaXRpYWxUZXh0LFxuICAgICAgICAgICAgcm9vbUlkLFxuICAgICAgICB9IGFzIE9taXQ8Q29tcG9uZW50UHJvcHM8dHlwZW9mIEludml0ZURpYWxvZz4sIFwib25GaW5pc2hlZFwiPixcbiAgICAgICAgLypjbGFzc05hbWU9Ki8gXCJteF9JbnZpdGVEaWFsb2dfZmxleFdyYXBwZXJcIixcbiAgICAgICAgLyppc1ByaW9yaXR5PSovIGZhbHNlLFxuICAgICAgICAvKmlzU3RhdGljPSovIHRydWUsXG4gICAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIE1hdHJpeEV2ZW50IGlzIGEgdmFsaWQgM3JkIHBhcnR5IHVzZXIgaW52aXRlLlxuICogQHBhcmFtIHtNYXRyaXhFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkM3BpZEludml0ZShldmVudDogTWF0cml4RXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmdldFR5cGUoKSAhPT0gRXZlbnRUeXBlLlJvb21UaGlyZFBhcnR5SW52aXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBhbnkgZXZlbnRzIHdpdGhvdXQgdGhlc2Uga2V5cyBhcmUgbm90IHZhbGlkIDNwaWQgaW52aXRlcywgc28gd2UgaWdub3JlIHRoZW1cbiAgICBjb25zdCByZXF1aXJlZEtleXMgPSBbXCJrZXlfdmFsaWRpdHlfdXJsXCIsIFwicHVibGljX2tleVwiLCBcImRpc3BsYXlfbmFtZVwiXTtcbiAgICBpZiAocmVxdWlyZWRLZXlzLnNvbWUoKGtleSkgPT4gIWV2ZW50LmdldENvbnRlbnQoKVtrZXldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVmFsaWQgZW5vdWdoIGJ5IG91ciBzdGFuZGFyZHNcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludml0ZVVzZXJzVG9Sb29tKFxuICAgIGNsaWVudDogTWF0cml4Q2xpZW50LFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIHVzZXJJZHM6IHN0cmluZ1tdLFxuICAgIHByb2dyZXNzQ2FsbGJhY2s/OiAoKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGludml0ZU11bHRpcGxlVG9Sb29tKGNsaWVudCwgcm9vbUlkLCB1c2VySWRzLCBwcm9ncmVzc0NhbGxiYWNrKVxuICAgICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb29tID0gY2xpZW50LmdldFJvb20ocm9vbUlkKSE7XG4gICAgICAgICAgICBzaG93QW55SW52aXRlRXJyb3JzKHJlc3VsdC5zdGF0ZXMsIHJvb20sIHJlc3VsdC5pbnZpdGVyKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnIuc3RhY2spO1xuICAgICAgICAgICAgTW9kYWwuY3JlYXRlRGlhbG9nKEVycm9yRGlhbG9nLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IF90KFwiaW52aXRlfGZhaWxlZF90aXRsZVwiKSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBfdChcImludml0ZXxmYWlsZWRfZ2VuZXJpY1wiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dBbnlJbnZpdGVFcnJvcnMoXG4gICAgc3RhdGVzOiBDb21wbGV0aW9uU3RhdGVzLFxuICAgIHJvb206IFJvb20sXG4gICAgaW52aXRlcjogTXVsdGlJbnZpdGVyLFxuICAgIHVzZXJNYXA/OiBNYXA8c3RyaW5nLCBNZW1iZXI+LFxuKTogYm9vbGVhbiB7XG4gICAgLy8gU2hvdyB1c2VyIGFueSBlcnJvcnNcbiAgICBjb25zdCBmYWlsZWRVc2VycyA9IE9iamVjdC5rZXlzKHN0YXRlcykuZmlsdGVyKChhKSA9PiBzdGF0ZXNbYV0gPT09IFwiZXJyb3JcIik7XG4gICAgaWYgKGZhaWxlZFVzZXJzLmxlbmd0aCA9PT0gMSAmJiBpbnZpdGVyLmZhdGFsKSB7XG4gICAgICAgIC8vIEp1c3QgZ2V0IHRoZSBmaXJzdCBtZXNzYWdlIGJlY2F1c2UgdGhlcmUgd2FzIGEgZmF0YWwgcHJvYmxlbSBvbiB0aGUgZmlyc3RcbiAgICAgICAgLy8gdXNlci4gVGhpcyB1c3VhbGx5IG1lYW5zIHRoYXQgbm8gb3RoZXIgdXNlcnMgd2VyZSBhdHRlbXB0ZWQsIG1ha2luZyBpdFxuICAgICAgICAvLyBwb2ludGxlc3MgZm9yIHVzIHRvIGxpc3Qgd2hvIGZhaWxlZCBleGFjdGx5LlxuICAgICAgICBNb2RhbC5jcmVhdGVEaWFsb2coRXJyb3JEaWFsb2csIHtcbiAgICAgICAgICAgIHRpdGxlOiBfdChcImludml0ZXxyb29tX2ZhaWxlZF90aXRsZVwiLCB7IHJvb21OYW1lOiByb29tLm5hbWUgfSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogaW52aXRlci5nZXRFcnJvclRleHQoZmFpbGVkVXNlcnNbMF0pLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBhZGRyIG9mIGZhaWxlZFVzZXJzKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGVzW2FkZHJdID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWFzb24gPSBpbnZpdGVyLmdldEVycm9yVGV4dChhZGRyKTtcbiAgICAgICAgICAgICAgICBlcnJvckxpc3QucHVzaChhZGRyICsgXCI6IFwiICsgcmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsaSA9IHJvb20uY2xpZW50O1xuICAgICAgICBpZiAoZXJyb3JMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIFJlYWN0IDE2IGRvZXNuJ3QgbGV0IHVzIHVzZSBgZXJyb3JMaXN0LmpvaW4oPGJyIC8+KWAgYW55bW9yZSwgc28gdGhpcyBpcyBvdXIgc29sdXRpb25cbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfSW52aXRlRGlhbG9nX211bHRpSW52aXRlckVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoND5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImludml0ZXxyb29tX2ZhaWxlZF9wYXJ0aWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb29tTmFtZTogKCkgPT4gPHN0cm9uZz57cm9vbS5uYW1lfTwvc3Ryb25nPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtmYWlsZWRVc2Vycy5tYXAoKGFkZHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gdXNlck1hcD8uZ2V0KGFkZHIpIHx8IGNsaS5nZXRVc2VyKGFkZHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSAodXNlciBhcyBNZW1iZXIpLm5hbWUgfHwgKHVzZXIgYXMgVXNlcikucmF3RGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXZhdGFyVXJsID0gKHVzZXIgYXMgTWVtYmVyKS5nZXRNeGNBdmF0YXJVcmw/LigpIHx8ICh1c2VyIGFzIFVzZXIpLmF2YXRhclVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17YWRkcn0gY2xhc3NOYW1lPVwibXhfSW52aXRlRGlhbG9nX3RpbGUgbXhfSW52aXRlRGlhbG9nX3RpbGUtLWludml0ZXJFcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9JbnZpdGVEaWFsb2dfdGlsZV9hdmF0YXJTdGFja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCYXNlQXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXZhdGFyVXJsICYmIG1lZGlhRnJvbU14YyhhdmF0YXJVcmwpLmdldFNxdWFyZVRodW1ibmFpbEh0dHAoMjQpKSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZSF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkTmFtZT17dXNlcj8udXNlcklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiMzZweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9JbnZpdGVEaWFsb2dfdGlsZV9uYW1lU3RhY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteF9JbnZpdGVEaWFsb2dfdGlsZV9uYW1lU3RhY2tfbmFtZVwiPntuYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteF9JbnZpdGVEaWFsb2dfdGlsZV9uYW1lU3RhY2tfdXNlcklkXCI+e3VzZXI/LnVzZXJJZH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfSW52aXRlRGlhbG9nX3RpbGUtLWludml0ZXJFcnJvcl9lcnJvclRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW52aXRlci5nZXRFcnJvclRleHQoYWRkcil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhFcnJvckRpYWxvZywge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBfdChcImludml0ZXxyb29tX2ZhaWxlZF9wYXJ0aWFsX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsYUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssZ0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGFBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLE1BQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFlBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLGtCQUFBLEdBQUFWLE9BQUE7QUFuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU1csb0JBQW9CQSxDQUNoQ0MsTUFBb0IsRUFDcEJDLE1BQWMsRUFDZEMsU0FBbUIsRUFDbkJDLGdCQUE2QixFQUNQO0VBQ3RCLE1BQU1DLE9BQU8sR0FBRyxJQUFJQyxxQkFBWSxDQUFDTCxNQUFNLEVBQUVDLE1BQU0sRUFBRUUsZ0JBQWdCLENBQUM7RUFDbEUsT0FBT0MsT0FBTyxDQUFDRSxNQUFNLENBQUNKLFNBQVMsRUFBRUssU0FBUyxDQUFDLENBQUNDLElBQUksQ0FBRUMsTUFBTSxJQUFLQyxP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TUFBTVMsSUFBSSxHQUFHckIsT0FBTyxFQUFFc0IsR0FBRyxDQUFDVixJQUFJLENBQUMsSUFBSUcsR0FBRyxDQUFDUSxPQUFPLENBQUNYLElBQUksQ0FBQztRQUNwRCxNQUFNSCxJQUFJLEdBQUlZLElBQUksQ0FBWVosSUFBSSxJQUFLWSxJQUFJLENBQVVHLGNBQWM7UUFDbkUsTUFBTUMsU0FBUyxHQUFJSixJQUFJLENBQVlLLGVBQWUsR0FBRyxDQUFDLElBQUtMLElBQUksQ0FBVUksU0FBUztRQUNsRixvQkFDSXRGLE1BQUEsQ0FBQTZFLE9BQUEsQ0FBQUMsYUFBQTtVQUFLbkMsR0FBRyxFQUFFOEIsSUFBSztVQUFDTSxTQUFTLEVBQUM7UUFBeUQsZ0JBQy9FL0UsTUFBQSxDQUFBNkUsT0FBQSxDQUFBQyxhQUFBO1VBQUtDLFNBQVMsRUFBQztRQUFrQyxnQkFDN0MvRSxNQUFBLENBQUE2RSxPQUFBLENBQUFDLGFBQUEsQ0FBQ3JFLFdBQUEsQ0FBQW9FLE9BQVU7VUFDUFcsR0FBRyxFQUNDLENBQUNGLFNBQVMsSUFBSSxJQUFBRyxtQkFBWSxFQUFDSCxTQUFTLENBQUMsQ0FBQ0ksc0JBQXNCLENBQUMsRUFBRSxDQUFDLEtBQ2hFckUsU0FDSDtVQUNEaUQsSUFBSSxFQUFFQSxJQUFNO1VBQ1pxQixNQUFNLEVBQUVULElBQUksRUFBRVUsTUFBTztVQUNyQkMsSUFBSSxFQUFDO1FBQU0sQ0FDZCxDQUNBLENBQUMsZUFDTjdGLE1BQUEsQ0FBQTZFLE9BQUEsQ0FBQUMsYUFBQTtVQUFLQyxTQUFTLEVBQUM7UUFBZ0MsZ0JBQzNDL0UsTUFBQSxDQUFBNkUsT0FBQSxDQUFBQyxhQUFBO1VBQU1DLFNBQVMsRUFBQztRQUFxQyxHQUFFVCxJQUFXLENBQUMsZUFDbkV0RSxNQUFBLENBQUE2RSxPQUFBLENBQUFDLGFBQUE7VUFBTUMsU0FBUyxFQUFDO1FBQXVDLEdBQUVHLElBQUksRUFBRVUsTUFBYSxDQUMzRSxDQUFDLGVBQ041RixNQUFBLENBQUE2RSxPQUFBLENBQUFDLGFBQUE7VUFBS0MsU0FBUyxFQUFDO1FBQThDLEdBQ3hEN0QsT0FBTyxDQUFDcUQsWUFBWSxDQUFDRSxJQUFJLENBQ3pCLENBQ0osQ0FBQztNQUVkLENBQUMsQ0FDQSxDQUNKLENBQ1I7TUFFRDdDLGNBQUssQ0FBQ0MsWUFBWSxDQUFDMkIsb0JBQVcsRUFBRTtRQUM1QkMsS0FBSyxFQUFFLElBQUFDLG1CQUFFLEVBQUMsa0NBQWtDLENBQUM7UUFDN0NDO01BQ0osQ0FBQyxDQUFDO01BQ0YsT0FBTyxLQUFLO0lBQ2hCO0VBQ0o7RUFFQSxPQUFPLElBQUk7QUFDZiIsImlnbm9yZUxpc3QiOltdfQ==