matrix-react-sdk
Version:
SDK for matrix.org using React
156 lines (150 loc) • 25.4 kB
JavaScript
"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==