matrix-react-sdk
Version:
SDK for matrix.org using React
112 lines (109 loc) • 29.1 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _languageHandler = require("../../../languageHandler");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _AliasSettings = _interopRequireDefault(require("../room_settings/AliasSettings"));
var _useStateToggle = require("../../../hooks/useStateToggle");
var _LabelledToggleSwitch = _interopRequireDefault(require("../elements/LabelledToggleSwitch"));
var _useLocalEcho = require("../../../hooks/useLocalEcho");
var _JoinRuleSettings = _interopRequireDefault(require("../settings/JoinRuleSettings"));
var _useRoomState = require("../../../hooks/useRoomState");
var _SettingsFieldset = _interopRequireDefault(require("../settings/SettingsFieldset"));
var _useAsyncMemo = require("../../../hooks/useAsyncMemo");
var _SettingsSection = require("../settings/shared/SettingsSection");
var _SettingsTab = _interopRequireDefault(require("../settings/tabs/SettingsTab"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/*
Copyright 2024 New Vector Ltd.
Copyright 2021-2023 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.
*/
const SpaceSettingsVisibilityTab = ({
matrixClient: cli,
space,
closeSettingsFn
}) => {
const [error, setError] = (0, _react.useState)("");
const serverSupportsExploringSpaces = (0, _useAsyncMemo.useAsyncMemo)(async () => {
return cli.isVersionSupported("v1.4").then(supported => {
return supported || cli.doesServerSupportUnstableFeature("org.matrix.msc3827.stable");
});
}, [cli], false);
const userId = cli.getUserId();
const joinRule = (0, _useRoomState.useRoomState)(space, state => state.getJoinRule());
const [guestAccessEnabled, setGuestAccessEnabled] = (0, _useLocalEcho.useLocalEcho)(() => space.currentState.getStateEvents(_matrix.EventType.RoomGuestAccess, "")?.getContent()?.guest_access === _matrix.GuestAccess.CanJoin, guestAccessEnabled => cli.sendStateEvent(space.roomId, _matrix.EventType.RoomGuestAccess, {
guest_access: guestAccessEnabled ? _matrix.GuestAccess.CanJoin : _matrix.GuestAccess.Forbidden
}, ""), () => setError((0, _languageHandler._t)("room_settings|visibility|error_update_guest_access")));
const [historyVisibility, setHistoryVisibility] = (0, _useLocalEcho.useLocalEcho)(() => space.currentState.getStateEvents(_matrix.EventType.RoomHistoryVisibility, "")?.getContent()?.history_visibility || _matrix.HistoryVisibility.Shared, historyVisibility => cli.sendStateEvent(space.roomId, _matrix.EventType.RoomHistoryVisibility, {
history_visibility: historyVisibility
}, ""), () => setError((0, _languageHandler._t)("room_settings|visibility|error_update_history_visibility")));
const [showAdvancedSection, toggleAdvancedSection] = (0, _useStateToggle.useStateToggle)();
const canSetGuestAccess = space.currentState.maySendStateEvent(_matrix.EventType.RoomGuestAccess, userId);
const canSetHistoryVisibility = space.currentState.maySendStateEvent(_matrix.EventType.RoomHistoryVisibility, userId);
const canSetCanonical = space.currentState.mayClientSendStateEvent(_matrix.EventType.RoomCanonicalAlias, cli);
const canonicalAliasEv = space.currentState.getStateEvents(_matrix.EventType.RoomCanonicalAlias, "");
let advancedSection;
if (joinRule === _matrix.JoinRule.Public) {
advancedSection = /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
"data-testid": "toggle-guest-access-btn",
onClick: toggleAdvancedSection,
kind: "link",
className: "mx_SettingsTab_showAdvanced",
"aria-expanded": showAdvancedSection
}, showAdvancedSection ? (0, _languageHandler._t)("action|hide_advanced") : (0, _languageHandler._t)("action|show_advanced")), showAdvancedSection && /*#__PURE__*/_react.default.createElement("div", {
className: "mx_SettingsTab_toggleWithDescription"
}, /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, {
value: guestAccessEnabled,
onChange: setGuestAccessEnabled,
disabled: !canSetGuestAccess,
label: (0, _languageHandler._t)("room_settings|visibility|guest_access_label")
}), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("room_settings|visibility|guest_access_explainer"), /*#__PURE__*/_react.default.createElement("br", null), (0, _languageHandler._t)("room_settings|visibility|guest_access_explainer_public_space"))));
}
let addressesSection;
if (space.getJoinRule() === _matrix.JoinRule.Public) {
addressesSection = /*#__PURE__*/_react.default.createElement(_SettingsSection.SettingsSection, {
heading: (0, _languageHandler._t)("room_settings|visibility|alias_section")
}, /*#__PURE__*/_react.default.createElement(_AliasSettings.default, {
roomId: space.roomId,
canSetCanonicalAlias: canSetCanonical,
canSetAliases: true,
canonicalAliasEvent: canonicalAliasEv ?? undefined,
hidePublishSetting: !serverSupportsExploringSpaces
}));
}
return /*#__PURE__*/_react.default.createElement(_SettingsTab.default, null, /*#__PURE__*/_react.default.createElement(_SettingsSection.SettingsSection, {
heading: (0, _languageHandler._t)("room_settings|visibility|title")
}, error && /*#__PURE__*/_react.default.createElement("div", {
"data-testid": "space-settings-error",
className: "mx_SpaceRoomView_errorText"
}, error), /*#__PURE__*/_react.default.createElement(_SettingsFieldset.default, {
"data-testid": "access-fieldset",
legend: (0, _languageHandler._t)("room_settings|access|title"),
description: (0, _languageHandler._t)("room_settings|access|description_space", {
spaceName: space.name
})
}, /*#__PURE__*/_react.default.createElement(_JoinRuleSettings.default, {
room: space,
onError: () => setError((0, _languageHandler._t)("room_settings|visibility|error_failed_save")),
closeSettingsFn: closeSettingsFn
}), advancedSection, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_SettingsTab_toggleWithDescription"
}, /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, {
value: historyVisibility === _matrix.HistoryVisibility.WorldReadable,
onChange: checked => {
setHistoryVisibility(checked ? _matrix.HistoryVisibility.WorldReadable : _matrix.HistoryVisibility.Shared);
},
disabled: !canSetHistoryVisibility,
label: (0, _languageHandler._t)("room_settings|visibility|history_visibility_anyone_space")
}), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("room_settings|visibility|history_visibility_anyone_space_description"), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("strong", null, (0, _languageHandler._t)("room_settings|visibility|history_visibility_anyone_space_recommendation"))))), addressesSection));
};
var _default = exports.default = SpaceSettingsVisibilityTab;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2xhbmd1YWdlSGFuZGxlciIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9BbGlhc1NldHRpbmdzIiwiX3VzZVN0YXRlVG9nZ2xlIiwiX0xhYmVsbGVkVG9nZ2xlU3dpdGNoIiwiX3VzZUxvY2FsRWNobyIsIl9Kb2luUnVsZVNldHRpbmdzIiwiX3VzZVJvb21TdGF0ZSIsIl9TZXR0aW5nc0ZpZWxkc2V0IiwiX3VzZUFzeW5jTWVtbyIsIl9TZXR0aW5nc1NlY3Rpb24iLCJfU2V0dGluZ3NUYWIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTcGFjZVNldHRpbmdzVmlzaWJpbGl0eVRhYiIsIm1hdHJpeENsaWVudCIsImNsaSIsInNwYWNlIiwiY2xvc2VTZXR0aW5nc0ZuIiwiZXJyb3IiLCJzZXRFcnJvciIsInVzZVN0YXRlIiwic2VydmVyU3VwcG9ydHNFeHBsb3JpbmdTcGFjZXMiLCJ1c2VBc3luY01lbW8iLCJpc1ZlcnNpb25TdXBwb3J0ZWQiLCJ0aGVuIiwic3VwcG9ydGVkIiwiZG9lc1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmUiLCJ1c2VySWQiLCJnZXRVc2VySWQiLCJqb2luUnVsZSIsInVzZVJvb21TdGF0ZSIsInN0YXRlIiwiZ2V0Sm9pblJ1bGUiLCJndWVzdEFjY2Vzc0VuYWJsZWQiLCJzZXRHdWVzdEFjY2Vzc0VuYWJsZWQiLCJ1c2VMb2NhbEVjaG8iLCJjdXJyZW50U3RhdGUiLCJnZXRTdGF0ZUV2ZW50cyIsIkV2ZW50VHlwZSIsIlJvb21HdWVzdEFjY2VzcyIsImdldENvbnRlbnQiLCJndWVzdF9hY2Nlc3MiLCJHdWVzdEFjY2VzcyIsIkNhbkpvaW4iLCJzZW5kU3RhdGVFdmVudCIsInJvb21JZCIsIkZvcmJpZGRlbiIsIl90IiwiaGlzdG9yeVZpc2liaWxpdHkiLCJzZXRIaXN0b3J5VmlzaWJpbGl0eSIsIlJvb21IaXN0b3J5VmlzaWJpbGl0eSIsImhpc3RvcnlfdmlzaWJpbGl0eSIsIkhpc3RvcnlWaXNpYmlsaXR5IiwiU2hhcmVkIiwic2hvd0FkdmFuY2VkU2VjdGlvbiIsInRvZ2dsZUFkdmFuY2VkU2VjdGlvbiIsInVzZVN0YXRlVG9nZ2xlIiwiY2FuU2V0R3Vlc3RBY2Nlc3MiLCJtYXlTZW5kU3RhdGVFdmVudCIsImNhblNldEhpc3RvcnlWaXNpYmlsaXR5IiwiY2FuU2V0Q2Fub25pY2FsIiwibWF5Q2xpZW50U2VuZFN0YXRlRXZlbnQiLCJSb29tQ2Fub25pY2FsQWxpYXMiLCJjYW5vbmljYWxBbGlhc0V2IiwiYWR2YW5jZWRTZWN0aW9uIiwiSm9pblJ1bGUiLCJQdWJsaWMiLCJjcmVhdGVFbGVtZW50Iiwib25DbGljayIsImtpbmQiLCJjbGFzc05hbWUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZGlzYWJsZWQiLCJsYWJlbCIsImFkZHJlc3Nlc1NlY3Rpb24iLCJTZXR0aW5nc1NlY3Rpb24iLCJoZWFkaW5nIiwiY2FuU2V0Q2Fub25pY2FsQWxpYXMiLCJjYW5TZXRBbGlhc2VzIiwiY2Fub25pY2FsQWxpYXNFdmVudCIsInVuZGVmaW5lZCIsImhpZGVQdWJsaXNoU2V0dGluZyIsImxlZ2VuZCIsImRlc2NyaXB0aW9uIiwic3BhY2VOYW1lIiwibmFtZSIsInJvb20iLCJvbkVycm9yIiwiV29ybGRSZWFkYWJsZSIsImNoZWNrZWQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9zcGFjZXMvU3BhY2VTZXR0aW5nc1Zpc2liaWxpdHlUYWIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxLTIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tLCBFdmVudFR5cGUsIEd1ZXN0QWNjZXNzLCBIaXN0b3J5VmlzaWJpbGl0eSwgSm9pblJ1bGUsIE1hdHJpeENsaWVudCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IEFsaWFzU2V0dGluZ3MgZnJvbSBcIi4uL3Jvb21fc2V0dGluZ3MvQWxpYXNTZXR0aW5nc1wiO1xuaW1wb3J0IHsgdXNlU3RhdGVUb2dnbGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlU3RhdGVUb2dnbGVcIjtcbmltcG9ydCBMYWJlbGxlZFRvZ2dsZVN3aXRjaCBmcm9tIFwiLi4vZWxlbWVudHMvTGFiZWxsZWRUb2dnbGVTd2l0Y2hcIjtcbmltcG9ydCB7IHVzZUxvY2FsRWNobyB9IGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VMb2NhbEVjaG9cIjtcbmltcG9ydCBKb2luUnVsZVNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy9Kb2luUnVsZVNldHRpbmdzXCI7XG5pbXBvcnQgeyB1c2VSb29tU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlUm9vbVN0YXRlXCI7XG5pbXBvcnQgU2V0dGluZ3NGaWVsZHNldCBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NGaWVsZHNldFwiO1xuaW1wb3J0IHsgdXNlQXN5bmNNZW1vIH0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZUFzeW5jTWVtb1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NTZWN0aW9uIH0gZnJvbSBcIi4uL3NldHRpbmdzL3NoYXJlZC9TZXR0aW5nc1NlY3Rpb25cIjtcbmltcG9ydCBTZXR0aW5nc1RhYiBmcm9tIFwiLi4vc2V0dGluZ3MvdGFicy9TZXR0aW5nc1RhYlwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudDtcbiAgICBzcGFjZTogUm9vbTtcbiAgICBjbG9zZVNldHRpbmdzRm4oKTogdm9pZDtcbn1cblxuY29uc3QgU3BhY2VTZXR0aW5nc1Zpc2liaWxpdHlUYWI6IFJlYWN0LkZDPElQcm9wcz4gPSAoeyBtYXRyaXhDbGllbnQ6IGNsaSwgc3BhY2UsIGNsb3NlU2V0dGluZ3NGbiB9KSA9PiB7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgICBjb25zdCBzZXJ2ZXJTdXBwb3J0c0V4cGxvcmluZ1NwYWNlcyA9IHVzZUFzeW5jTWVtbzxib29sZWFuPihcbiAgICAgICAgYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNsaS5pc1ZlcnNpb25TdXBwb3J0ZWQoXCJ2MS40XCIpLnRoZW4oKHN1cHBvcnRlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWQgfHwgY2xpLmRvZXNTZXJ2ZXJTdXBwb3J0VW5zdGFibGVGZWF0dXJlKFwib3JnLm1hdHJpeC5tc2MzODI3LnN0YWJsZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbY2xpXSxcbiAgICAgICAgZmFsc2UsXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJJZCA9IGNsaS5nZXRVc2VySWQoKSE7XG5cbiAgICBjb25zdCBqb2luUnVsZSA9IHVzZVJvb21TdGF0ZShzcGFjZSwgKHN0YXRlKSA9PiBzdGF0ZS5nZXRKb2luUnVsZSgpKTtcbiAgICBjb25zdCBbZ3Vlc3RBY2Nlc3NFbmFibGVkLCBzZXRHdWVzdEFjY2Vzc0VuYWJsZWRdID0gdXNlTG9jYWxFY2hvPGJvb2xlYW4+KFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgc3BhY2UuY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKEV2ZW50VHlwZS5Sb29tR3Vlc3RBY2Nlc3MsIFwiXCIpPy5nZXRDb250ZW50KCk/Lmd1ZXN0X2FjY2VzcyA9PT1cbiAgICAgICAgICAgIEd1ZXN0QWNjZXNzLkNhbkpvaW4sXG4gICAgICAgIChndWVzdEFjY2Vzc0VuYWJsZWQpID0+XG4gICAgICAgICAgICBjbGkuc2VuZFN0YXRlRXZlbnQoXG4gICAgICAgICAgICAgICAgc3BhY2Uucm9vbUlkLFxuICAgICAgICAgICAgICAgIEV2ZW50VHlwZS5Sb29tR3Vlc3RBY2Nlc3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBndWVzdF9hY2Nlc3M6IGd1ZXN0QWNjZXNzRW5hYmxlZCA/IEd1ZXN0QWNjZXNzLkNhbkpvaW4gOiBHdWVzdEFjY2Vzcy5Gb3JiaWRkZW4sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKCkgPT4gc2V0RXJyb3IoX3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8ZXJyb3JfdXBkYXRlX2d1ZXN0X2FjY2Vzc1wiKSksXG4gICAgKTtcbiAgICBjb25zdCBbaGlzdG9yeVZpc2liaWxpdHksIHNldEhpc3RvcnlWaXNpYmlsaXR5XSA9IHVzZUxvY2FsRWNobzxIaXN0b3J5VmlzaWJpbGl0eT4oXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBzcGFjZS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoRXZlbnRUeXBlLlJvb21IaXN0b3J5VmlzaWJpbGl0eSwgXCJcIik/LmdldENvbnRlbnQoKT8uaGlzdG9yeV92aXNpYmlsaXR5IHx8XG4gICAgICAgICAgICBIaXN0b3J5VmlzaWJpbGl0eS5TaGFyZWQsXG4gICAgICAgIChoaXN0b3J5VmlzaWJpbGl0eSkgPT5cbiAgICAgICAgICAgIGNsaS5zZW5kU3RhdGVFdmVudChcbiAgICAgICAgICAgICAgICBzcGFjZS5yb29tSWQsXG4gICAgICAgICAgICAgICAgRXZlbnRUeXBlLlJvb21IaXN0b3J5VmlzaWJpbGl0eSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpc3RvcnlfdmlzaWJpbGl0eTogaGlzdG9yeVZpc2liaWxpdHksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKCkgPT4gc2V0RXJyb3IoX3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8ZXJyb3JfdXBkYXRlX2hpc3RvcnlfdmlzaWJpbGl0eVwiKSksXG4gICAgKTtcblxuICAgIGNvbnN0IFtzaG93QWR2YW5jZWRTZWN0aW9uLCB0b2dnbGVBZHZhbmNlZFNlY3Rpb25dID0gdXNlU3RhdGVUb2dnbGUoKTtcblxuICAgIGNvbnN0IGNhblNldEd1ZXN0QWNjZXNzID0gc3BhY2UuY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KEV2ZW50VHlwZS5Sb29tR3Vlc3RBY2Nlc3MsIHVzZXJJZCk7XG4gICAgY29uc3QgY2FuU2V0SGlzdG9yeVZpc2liaWxpdHkgPSBzcGFjZS5jdXJyZW50U3RhdGUubWF5U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlJvb21IaXN0b3J5VmlzaWJpbGl0eSwgdXNlcklkKTtcbiAgICBjb25zdCBjYW5TZXRDYW5vbmljYWwgPSBzcGFjZS5jdXJyZW50U3RhdGUubWF5Q2xpZW50U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlJvb21DYW5vbmljYWxBbGlhcywgY2xpKTtcbiAgICBjb25zdCBjYW5vbmljYWxBbGlhc0V2ID0gc3BhY2UuY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKEV2ZW50VHlwZS5Sb29tQ2Fub25pY2FsQWxpYXMsIFwiXCIpO1xuXG4gICAgbGV0IGFkdmFuY2VkU2VjdGlvbjtcbiAgICBpZiAoam9pblJ1bGUgPT09IEpvaW5SdWxlLlB1YmxpYykge1xuICAgICAgICBhZHZhbmNlZFNlY3Rpb24gPSAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9nZ2xlLWd1ZXN0LWFjY2Vzcy1idG5cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVBZHZhbmNlZFNlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NUYWJfc2hvd0FkdmFuY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17c2hvd0FkdmFuY2VkU2VjdGlvbn1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtzaG93QWR2YW5jZWRTZWN0aW9uID8gX3QoXCJhY3Rpb258aGlkZV9hZHZhbmNlZFwiKSA6IF90KFwiYWN0aW9ufHNob3dfYWR2YW5jZWRcIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuXG4gICAgICAgICAgICAgICAge3Nob3dBZHZhbmNlZFNlY3Rpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NldHRpbmdzVGFiX3RvZ2dsZVdpdGhEZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsbGVkVG9nZ2xlU3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2d1ZXN0QWNjZXNzRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0R3Vlc3RBY2Nlc3NFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuU2V0R3Vlc3RBY2Nlc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwicm9vbV9zZXR0aW5nc3x2aXNpYmlsaXR5fGd1ZXN0X2FjY2Vzc19sYWJlbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8Z3Vlc3RfYWNjZXNzX2V4cGxhaW5lclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8Z3Vlc3RfYWNjZXNzX2V4cGxhaW5lcl9wdWJsaWNfc3BhY2VcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgYWRkcmVzc2VzU2VjdGlvbjogSlNYLkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHNwYWNlLmdldEpvaW5SdWxlKCkgPT09IEpvaW5SdWxlLlB1YmxpYykge1xuICAgICAgICBhZGRyZXNzZXNTZWN0aW9uID0gKFxuICAgICAgICAgICAgPFNldHRpbmdzU2VjdGlvbiBoZWFkaW5nPXtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxhbGlhc19zZWN0aW9uXCIpfT5cbiAgICAgICAgICAgICAgICA8QWxpYXNTZXR0aW5nc1xuICAgICAgICAgICAgICAgICAgICByb29tSWQ9e3NwYWNlLnJvb21JZH1cbiAgICAgICAgICAgICAgICAgICAgY2FuU2V0Q2Fub25pY2FsQWxpYXM9e2NhblNldENhbm9uaWNhbH1cbiAgICAgICAgICAgICAgICAgICAgY2FuU2V0QWxpYXNlcz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgY2Fub25pY2FsQWxpYXNFdmVudD17Y2Fub25pY2FsQWxpYXNFdiA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgIGhpZGVQdWJsaXNoU2V0dGluZz17IXNlcnZlclN1cHBvcnRzRXhwbG9yaW5nU3BhY2VzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NldHRpbmdzU2VjdGlvbj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8U2V0dGluZ3NUYWI+XG4gICAgICAgICAgICA8U2V0dGluZ3NTZWN0aW9uIGhlYWRpbmc9e190KFwicm9vbV9zZXR0aW5nc3x2aXNpYmlsaXR5fHRpdGxlXCIpfT5cbiAgICAgICAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwic3BhY2Utc2V0dGluZ3MtZXJyb3JcIiBjbGFzc05hbWU9XCJteF9TcGFjZVJvb21WaWV3X2Vycm9yVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgPFNldHRpbmdzRmllbGRzZXRcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhY2Nlc3MtZmllbGRzZXRcIlxuICAgICAgICAgICAgICAgICAgICBsZWdlbmQ9e190KFwicm9vbV9zZXR0aW5nc3xhY2Nlc3N8dGl0bGVcIil9XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfdChcInJvb21fc2V0dGluZ3N8YWNjZXNzfGRlc2NyaXB0aW9uX3NwYWNlXCIsIHsgc3BhY2VOYW1lOiBzcGFjZS5uYW1lIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEpvaW5SdWxlU2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb209e3NwYWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcj17KCk6IHZvaWQgPT4gc2V0RXJyb3IoX3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8ZXJyb3JfZmFpbGVkX3NhdmVcIikpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VTZXR0aW5nc0ZuPXtjbG9zZVNldHRpbmdzRm59XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIHthZHZhbmNlZFNlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NUYWJfdG9nZ2xlV2l0aERlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxsZWRUb2dnbGVTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aGlzdG9yeVZpc2liaWxpdHkgPT09IEhpc3RvcnlWaXNpYmlsaXR5LldvcmxkUmVhZGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjaGVja2VkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhpc3RvcnlWaXNpYmlsaXR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA/IEhpc3RvcnlWaXNpYmlsaXR5LldvcmxkUmVhZGFibGUgOiBIaXN0b3J5VmlzaWJpbGl0eS5TaGFyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhblNldEhpc3RvcnlWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxoaXN0b3J5X3Zpc2liaWxpdHlfYW55b25lX3NwYWNlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxoaXN0b3J5X3Zpc2liaWxpdHlfYW55b25lX3NwYWNlX2Rlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxoaXN0b3J5X3Zpc2liaWxpdHlfYW55b25lX3NwYWNlX3JlY29tbWVuZGF0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1NldHRpbmdzRmllbGRzZXQ+XG5cbiAgICAgICAgICAgICAgICB7YWRkcmVzc2VzU2VjdGlvbn1cbiAgICAgICAgICAgIDwvU2V0dGluZ3NTZWN0aW9uPlxuICAgICAgICA8L1NldHRpbmdzVGFiPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTcGFjZVNldHRpbmdzVmlzaWJpbGl0eVRhYjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtB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