matrix-react-sdk
Version:
SDK for matrix.org using React
126 lines (124 loc) • 25 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _languageHandler = require("../../../languageHandler");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _BaseDialog = _interopRequireDefault(require("./BaseDialog"));
var _Event = require("./devtools/Event");
var _ServersInRoom = _interopRequireDefault(require("./devtools/ServersInRoom"));
var _VerificationExplorer = _interopRequireDefault(require("./devtools/VerificationExplorer"));
var _SettingExplorer = _interopRequireDefault(require("./devtools/SettingExplorer"));
var _RoomState = require("./devtools/RoomState");
var _BaseTool = _interopRequireWildcard(require("./devtools/BaseTool"));
var _WidgetExplorer = _interopRequireDefault(require("./devtools/WidgetExplorer"));
var _AccountData = require("./devtools/AccountData");
var _SettingsFlag = _interopRequireDefault(require("../elements/SettingsFlag"));
var _SettingLevel = require("../../../settings/SettingLevel");
var _ServerInfo = _interopRequireDefault(require("./devtools/ServerInfo"));
var _Settings = require("../../../settings/Settings");
var _CopyableText = _interopRequireDefault(require("../elements/CopyableText"));
var _RoomNotifications = _interopRequireDefault(require("./devtools/RoomNotifications"));
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 2018-2023 The Matrix.org Foundation C.I.C.
Copyright 2022 Michael Telatynski <7t3chguy@gmail.com>
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
var Category = /*#__PURE__*/function (Category) {
Category[Category["Room"] = 0] = "Room";
Category[Category["Other"] = 1] = "Other";
return Category;
}(Category || {});
const categoryLabels = {
[Category.Room]: (0, _languageHandler._td)("devtools|category_room"),
[Category.Other]: (0, _languageHandler._td)("devtools|category_other")
};
const Tools = {
[Category.Room]: [[(0, _languageHandler._td)("devtools|send_custom_timeline_event"), _Event.TimelineEventEditor], [(0, _languageHandler._td)("devtools|explore_room_state"), _RoomState.RoomStateExplorer], [(0, _languageHandler._td)("devtools|explore_room_account_data"), _AccountData.RoomAccountDataExplorer], [(0, _languageHandler._td)("devtools|view_servers_in_room"), _ServersInRoom.default], [(0, _languageHandler._td)("devtools|notifications_debug"), _RoomNotifications.default], [(0, _languageHandler._td)("devtools|verification_explorer"), _VerificationExplorer.default], [(0, _languageHandler._td)("devtools|active_widgets"), _WidgetExplorer.default]],
[Category.Other]: [[(0, _languageHandler._td)("devtools|explore_account_data"), _AccountData.AccountDataExplorer], [(0, _languageHandler._td)("devtools|settings_explorer"), _SettingExplorer.default], [(0, _languageHandler._td)("devtools|server_info"), _ServerInfo.default]]
};
const DevtoolsDialog = ({
roomId,
threadRootId,
onFinished
}) => {
const [tool, setTool] = (0, _react.useState)(null);
let body;
let onBack;
if (tool) {
onBack = () => {
setTool(null);
};
const Tool = tool[1];
body = /*#__PURE__*/_react.default.createElement(Tool, {
onBack: onBack,
setTool: (label, tool) => setTool([label, tool])
});
} else {
const onBack = () => {
onFinished(false);
};
body = /*#__PURE__*/_react.default.createElement(_BaseTool.default, {
onBack: onBack
}, Object.entries(Tools).map(([category, tools]) => /*#__PURE__*/_react.default.createElement("div", {
key: category
}, /*#__PURE__*/_react.default.createElement("h3", null, (0, _languageHandler._t)(categoryLabels[category])), tools.map(([label, tool]) => {
const onClick = () => {
setTool([label, tool]);
};
return /*#__PURE__*/_react.default.createElement("button", {
className: "mx_DevTools_button",
key: label,
onClick: onClick
}, (0, _languageHandler._t)(label));
}))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("h3", null, (0, _languageHandler._t)("common|options")), /*#__PURE__*/_react.default.createElement(_SettingsFlag.default, {
name: "developerMode",
level: _SettingLevel.SettingLevel.ACCOUNT
}), /*#__PURE__*/_react.default.createElement(_SettingsFlag.default, {
name: "showHiddenEventsInTimeline",
level: _SettingLevel.SettingLevel.DEVICE
}), /*#__PURE__*/_react.default.createElement(_SettingsFlag.default, {
name: "enableWidgetScreenshots",
level: _SettingLevel.SettingLevel.ACCOUNT
}), /*#__PURE__*/_react.default.createElement(_SettingsFlag.default, {
name: _Settings.Features.VoiceBroadcastForceSmallChunks,
level: _SettingLevel.SettingLevel.DEVICE
})));
}
const label = tool ? (0, _languageHandler._t)(tool[0]) : (0, _languageHandler._t)("devtools|toolbox");
return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, {
className: "mx_QuestionDialog",
onFinished: onFinished,
title: (0, _languageHandler._t)("devtools|developer_tools")
}, /*#__PURE__*/_react.default.createElement(_MatrixClientContext.default.Consumer, null, cli => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_DevTools_label_left"
}, label), /*#__PURE__*/_react.default.createElement(_CopyableText.default, {
className: "mx_DevTools_label_right",
getTextToCopy: () => roomId,
border: false
}, (0, _languageHandler._t)("devtools|room_id", {
roomId
})), !threadRootId ? null : /*#__PURE__*/_react.default.createElement(_CopyableText.default, {
className: "mx_DevTools_label_right",
getTextToCopy: () => threadRootId,
border: false
}, (0, _languageHandler._t)("devtools|thread_root_id", {
threadRootId
})), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_DevTools_label_bottom"
}), cli.getRoom(roomId) && /*#__PURE__*/_react.default.createElement(_BaseTool.DevtoolsContext.Provider, {
value: {
room: cli.getRoom(roomId),
threadRootId
}
}, body))));
};
var _default = exports.default = DevtoolsDialog;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0Jhc2VEaWFsb2ciLCJfRXZlbnQiLCJfU2VydmVyc0luUm9vbSIsIl9WZXJpZmljYXRpb25FeHBsb3JlciIsIl9TZXR0aW5nRXhwbG9yZXIiLCJfUm9vbVN0YXRlIiwiX0Jhc2VUb29sIiwiX1dpZGdldEV4cGxvcmVyIiwiX0FjY291bnREYXRhIiwiX1NldHRpbmdzRmxhZyIsIl9TZXR0aW5nTGV2ZWwiLCJfU2VydmVySW5mbyIsIl9TZXR0aW5ncyIsIl9Db3B5YWJsZVRleHQiLCJfUm9vbU5vdGlmaWNhdGlvbnMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJDYXRlZ29yeSIsImNhdGVnb3J5TGFiZWxzIiwiUm9vbSIsIl90ZCIsIk90aGVyIiwiVG9vbHMiLCJUaW1lbGluZUV2ZW50RWRpdG9yIiwiUm9vbVN0YXRlRXhwbG9yZXIiLCJSb29tQWNjb3VudERhdGFFeHBsb3JlciIsIlNlcnZlcnNJblJvb20iLCJSb29tTm90aWZpY2F0aW9ucyIsIlZlcmlmaWNhdGlvbkV4cGxvcmVyIiwiV2lkZ2V0RXhwbG9yZXIiLCJBY2NvdW50RGF0YUV4cGxvcmVyIiwiU2V0dGluZ0V4cGxvcmVyIiwiU2VydmVySW5mbyIsIkRldnRvb2xzRGlhbG9nIiwicm9vbUlkIiwidGhyZWFkUm9vdElkIiwib25GaW5pc2hlZCIsInRvb2wiLCJzZXRUb29sIiwidXNlU3RhdGUiLCJib2R5Iiwib25CYWNrIiwiVG9vbCIsImNyZWF0ZUVsZW1lbnQiLCJsYWJlbCIsImVudHJpZXMiLCJtYXAiLCJjYXRlZ29yeSIsInRvb2xzIiwia2V5IiwiX3QiLCJvbkNsaWNrIiwiY2xhc3NOYW1lIiwibmFtZSIsImxldmVsIiwiU2V0dGluZ0xldmVsIiwiQUNDT1VOVCIsIkRFVklDRSIsIkZlYXR1cmVzIiwiVm9pY2VCcm9hZGNhc3RGb3JjZVNtYWxsQ2h1bmtzIiwidGl0bGUiLCJDb25zdW1lciIsImNsaSIsIkZyYWdtZW50IiwiZ2V0VGV4dFRvQ29weSIsImJvcmRlciIsImdldFJvb20iLCJEZXZ0b29sc0NvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwicm9vbSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvRGV2dG9vbHNEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE4LTIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDIyIE1pY2hhZWwgVGVsYXR5bnNraSA8N3QzY2hndXlAZ21haWwuY29tPlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgX3QsIF90ZCwgVHJhbnNsYXRpb25LZXkgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IEJhc2VEaWFsb2cgZnJvbSBcIi4vQmFzZURpYWxvZ1wiO1xuaW1wb3J0IHsgVGltZWxpbmVFdmVudEVkaXRvciB9IGZyb20gXCIuL2RldnRvb2xzL0V2ZW50XCI7XG5pbXBvcnQgU2VydmVyc0luUm9vbSBmcm9tIFwiLi9kZXZ0b29scy9TZXJ2ZXJzSW5Sb29tXCI7XG5pbXBvcnQgVmVyaWZpY2F0aW9uRXhwbG9yZXIgZnJvbSBcIi4vZGV2dG9vbHMvVmVyaWZpY2F0aW9uRXhwbG9yZXJcIjtcbmltcG9ydCBTZXR0aW5nRXhwbG9yZXIgZnJvbSBcIi4vZGV2dG9vbHMvU2V0dGluZ0V4cGxvcmVyXCI7XG5pbXBvcnQgeyBSb29tU3RhdGVFeHBsb3JlciB9IGZyb20gXCIuL2RldnRvb2xzL1Jvb21TdGF0ZVwiO1xuaW1wb3J0IEJhc2VUb29sLCB7IERldnRvb2xzQ29udGV4dCwgSURldnRvb2xzUHJvcHMgfSBmcm9tIFwiLi9kZXZ0b29scy9CYXNlVG9vbFwiO1xuaW1wb3J0IFdpZGdldEV4cGxvcmVyIGZyb20gXCIuL2RldnRvb2xzL1dpZGdldEV4cGxvcmVyXCI7XG5pbXBvcnQgeyBBY2NvdW50RGF0YUV4cGxvcmVyLCBSb29tQWNjb3VudERhdGFFeHBsb3JlciB9IGZyb20gXCIuL2RldnRvb2xzL0FjY291bnREYXRhXCI7XG5pbXBvcnQgU2V0dGluZ3NGbGFnIGZyb20gXCIuLi9lbGVtZW50cy9TZXR0aW5nc0ZsYWdcIjtcbmltcG9ydCB7IFNldHRpbmdMZXZlbCB9IGZyb20gXCIuLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5nTGV2ZWxcIjtcbmltcG9ydCBTZXJ2ZXJJbmZvIGZyb20gXCIuL2RldnRvb2xzL1NlcnZlckluZm9cIjtcbmltcG9ydCB7IEZlYXR1cmVzIH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1NldHRpbmdzXCI7XG5pbXBvcnQgQ29weWFibGVUZXh0IGZyb20gXCIuLi9lbGVtZW50cy9Db3B5YWJsZVRleHRcIjtcbmltcG9ydCBSb29tTm90aWZpY2F0aW9ucyBmcm9tIFwiLi9kZXZ0b29scy9Sb29tTm90aWZpY2F0aW9uc1wiO1xuXG5lbnVtIENhdGVnb3J5IHtcbiAgICBSb29tLFxuICAgIE90aGVyLFxufVxuXG5jb25zdCBjYXRlZ29yeUxhYmVsczogUmVjb3JkPENhdGVnb3J5LCBUcmFuc2xhdGlvbktleT4gPSB7XG4gICAgW0NhdGVnb3J5LlJvb21dOiBfdGQoXCJkZXZ0b29sc3xjYXRlZ29yeV9yb29tXCIpLFxuICAgIFtDYXRlZ29yeS5PdGhlcl06IF90ZChcImRldnRvb2xzfGNhdGVnb3J5X290aGVyXCIpLFxufTtcblxuZXhwb3J0IHR5cGUgVG9vbCA9IFJlYWN0LkZDPElEZXZ0b29sc1Byb3BzPiB8ICgocHJvcHM6IElEZXZ0b29sc1Byb3BzKSA9PiBKU1guRWxlbWVudCk7XG5jb25zdCBUb29sczogUmVjb3JkPENhdGVnb3J5LCBbbGFiZWw6IFRyYW5zbGF0aW9uS2V5LCB0b29sOiBUb29sXVtdPiA9IHtcbiAgICBbQ2F0ZWdvcnkuUm9vbV06IFtcbiAgICAgICAgW190ZChcImRldnRvb2xzfHNlbmRfY3VzdG9tX3RpbWVsaW5lX2V2ZW50XCIpLCBUaW1lbGluZUV2ZW50RWRpdG9yXSxcbiAgICAgICAgW190ZChcImRldnRvb2xzfGV4cGxvcmVfcm9vbV9zdGF0ZVwiKSwgUm9vbVN0YXRlRXhwbG9yZXJdLFxuICAgICAgICBbX3RkKFwiZGV2dG9vbHN8ZXhwbG9yZV9yb29tX2FjY291bnRfZGF0YVwiKSwgUm9vbUFjY291bnREYXRhRXhwbG9yZXJdLFxuICAgICAgICBbX3RkKFwiZGV2dG9vbHN8dmlld19zZXJ2ZXJzX2luX3Jvb21cIiksIFNlcnZlcnNJblJvb21dLFxuICAgICAgICBbX3RkKFwiZGV2dG9vbHN8bm90aWZpY2F0aW9uc19kZWJ1Z1wiKSwgUm9vbU5vdGlmaWNhdGlvbnNdLFxuICAgICAgICBbX3RkKFwiZGV2dG9vbHN8dmVyaWZpY2F0aW9uX2V4cGxvcmVyXCIpLCBWZXJpZmljYXRpb25FeHBsb3Jlcl0sXG4gICAgICAgIFtfdGQoXCJkZXZ0b29sc3xhY3RpdmVfd2lkZ2V0c1wiKSwgV2lkZ2V0RXhwbG9yZXJdLFxuICAgIF0sXG4gICAgW0NhdGVnb3J5Lk90aGVyXTogW1xuICAgICAgICBbX3RkKFwiZGV2dG9vbHN8ZXhwbG9yZV9hY2NvdW50X2RhdGFcIiksIEFjY291bnREYXRhRXhwbG9yZXJdLFxuICAgICAgICBbX3RkKFwiZGV2dG9vbHN8c2V0dGluZ3NfZXhwbG9yZXJcIiksIFNldHRpbmdFeHBsb3Jlcl0sXG4gICAgICAgIFtfdGQoXCJkZXZ0b29sc3xzZXJ2ZXJfaW5mb1wiKSwgU2VydmVySW5mb10sXG4gICAgXSxcbn07XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIHJvb21JZDogc3RyaW5nO1xuICAgIHRocmVhZFJvb3RJZD86IHN0cmluZyB8IG51bGw7XG4gICAgb25GaW5pc2hlZChmaW5pc2hlZD86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG50eXBlIFRvb2xJbmZvID0gW2xhYmVsOiBUcmFuc2xhdGlvbktleSwgdG9vbDogVG9vbF07XG5cbmNvbnN0IERldnRvb2xzRGlhbG9nOiBSZWFjdC5GQzxJUHJvcHM+ID0gKHsgcm9vbUlkLCB0aHJlYWRSb290SWQsIG9uRmluaXNoZWQgfSkgPT4ge1xuICAgIGNvbnN0IFt0b29sLCBzZXRUb29sXSA9IHVzZVN0YXRlPFRvb2xJbmZvIHwgbnVsbD4obnVsbCk7XG5cbiAgICBsZXQgYm9keTogSlNYLkVsZW1lbnQ7XG4gICAgbGV0IG9uQmFjazogKCkgPT4gdm9pZDtcblxuICAgIGlmICh0b29sKSB7XG4gICAgICAgIG9uQmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgIHNldFRvb2wobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgVG9vbCA9IHRvb2xbMV07XG4gICAgICAgIGJvZHkgPSA8VG9vbCBvbkJhY2s9e29uQmFja30gc2V0VG9vbD17KGxhYmVsLCB0b29sKSA9PiBzZXRUb29sKFtsYWJlbCwgdG9vbF0pfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvbkJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBvbkZpbmlzaGVkKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgYm9keSA9IChcbiAgICAgICAgICAgIDxCYXNlVG9vbCBvbkJhY2s9e29uQmFja30+XG4gICAgICAgICAgICAgICAge09iamVjdC5lbnRyaWVzKFRvb2xzKS5tYXAoKFtjYXRlZ29yeSwgdG9vbHNdKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtjYXRlZ29yeX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+e190KGNhdGVnb3J5TGFiZWxzW2NhdGVnb3J5IGFzIHVua25vd24gYXMgQ2F0ZWdvcnldKX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Rvb2xzLm1hcCgoW2xhYmVsLCB0b29sXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9uQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvb2woW2xhYmVsLCB0b29sXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm14X0RldlRvb2xzX2J1dHRvblwiIGtleT17bGFiZWx9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge190KGxhYmVsKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aDM+e190KFwiY29tbW9ufG9wdGlvbnNcIil9PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPFNldHRpbmdzRmxhZyBuYW1lPVwiZGV2ZWxvcGVyTW9kZVwiIGxldmVsPXtTZXR0aW5nTGV2ZWwuQUNDT1VOVH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPFNldHRpbmdzRmxhZyBuYW1lPVwic2hvd0hpZGRlbkV2ZW50c0luVGltZWxpbmVcIiBsZXZlbD17U2V0dGluZ0xldmVsLkRFVklDRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPFNldHRpbmdzRmxhZyBuYW1lPVwiZW5hYmxlV2lkZ2V0U2NyZWVuc2hvdHNcIiBsZXZlbD17U2V0dGluZ0xldmVsLkFDQ09VTlR9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxTZXR0aW5nc0ZsYWcgbmFtZT17RmVhdHVyZXMuVm9pY2VCcm9hZGNhc3RGb3JjZVNtYWxsQ2h1bmtzfSBsZXZlbD17U2V0dGluZ0xldmVsLkRFVklDRX0gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQmFzZVRvb2w+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFiZWwgPSB0b29sID8gX3QodG9vbFswXSkgOiBfdChcImRldnRvb2xzfHRvb2xib3hcIik7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJhc2VEaWFsb2cgY2xhc3NOYW1lPVwibXhfUXVlc3Rpb25EaWFsb2dcIiBvbkZpbmlzaGVkPXtvbkZpbmlzaGVkfSB0aXRsZT17X3QoXCJkZXZ0b29sc3xkZXZlbG9wZXJfdG9vbHNcIil9PlxuICAgICAgICAgICAgPE1hdHJpeENsaWVudENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgeyhjbGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfRGV2VG9vbHNfbGFiZWxfbGVmdFwiPntsYWJlbH08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDb3B5YWJsZVRleHQgY2xhc3NOYW1lPVwibXhfRGV2VG9vbHNfbGFiZWxfcmlnaHRcIiBnZXRUZXh0VG9Db3B5PXsoKSA9PiByb29tSWR9IGJvcmRlcj17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcImRldnRvb2xzfHJvb21faWRcIiwgeyByb29tSWQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NvcHlhYmxlVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHshdGhyZWFkUm9vdElkID8gbnVsbCA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29weWFibGVUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0RldlRvb2xzX2xhYmVsX3JpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VGV4dFRvQ29weT17KCkgPT4gdGhyZWFkUm9vdElkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFwiZGV2dG9vbHN8dGhyZWFkX3Jvb3RfaWRcIiwgeyB0aHJlYWRSb290SWQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db3B5YWJsZVRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9EZXZUb29sc19sYWJlbF9ib3R0b21cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NsaS5nZXRSb29tKHJvb21JZCkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEZXZ0b29sc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgcm9vbTogY2xpLmdldFJvb20ocm9vbUlkKSEsIHRocmVhZFJvb3RJZCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2JvZHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9EZXZ0b29sc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9NYXRyaXhDbGllbnRDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICA8L0Jhc2VEaWFsb2c+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERldnRvb2xzRGlhbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLG9CQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFILHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTyxxQkFBQSxHQUFBSixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVEsZ0JBQUEsR0FBQUwsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFTLFVBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFNBQUEsR0FBQVgsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLGVBQUEsR0FBQVIsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFZLFlBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLGFBQUEsR0FBQVYsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFjLGFBQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLFdBQUEsR0FBQVosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFnQixTQUFBLEdBQUFoQixPQUFBO0FBQ0EsSUFBQWlCLGFBQUEsR0FBQWQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFrQixrQkFBQSxHQUFBZixzQkFBQSxDQUFBSCxPQUFBO0FBQTZELFNBQUFtQix5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBckIsd0JBQUFxQixDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsV0FBQUssT0FBQSxFQUFBTCxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsQ0FBQUgsT0FBQSxHQUFBTCxDQUFBLEVBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZSxHQUFBLENBQUFsQixDQUFBLEVBQUFRLENBQUEsR0FBQUEsQ0FBQTtBQTNCN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBLElBNkJLVyxRQUFRLDBCQUFSQSxRQUFRO0VBQVJBLFFBQVEsQ0FBUkEsUUFBUTtFQUFSQSxRQUFRLENBQVJBLFFBQVE7RUFBQSxPQUFSQSxRQUFRO0FBQUEsRUFBUkEsUUFBUTtBQUtiLE1BQU1DLGNBQWdELEdBQUc7RUFDckQsQ0FBQ0QsUUFBUSxDQUFDRSxJQUFJLEdBQUcsSUFBQUMsb0JBQUcsRUFBQyx3QkFBd0IsQ0FBQztFQUM5QyxDQUFDSCxRQUFRLENBQUNJLEtBQUssR0FBRyxJQUFBRCxvQkFBRyxFQUFDLHlCQUF5QjtBQUNuRCxDQUFDO0FBR0QsTUFBTUUsS0FBOEQsR0FBRztFQUNuRSxDQUFDTCxRQUFRLENBQUNFLElBQUksR0FBRyxDQUNiLENBQUMsSUFBQUMsb0JBQUcsRUFBQyxxQ0FBcUMsQ0FBQyxFQUFFRywwQkFBbUIsQ0FBQyxFQUNqRSxDQUFDLElBQUFILG9CQUFHLEVBQUMsNkJBQTZCLENBQUMsRUFBRUksNEJBQWlCLENBQUMsRUFDdkQsQ0FBQyxJQUFBSixvQkFBRyxFQUFDLG9DQUFvQyxDQUFDLEVBQUVLLG9DQUF1QixDQUFDLEVBQ3BFLENBQUMsSUFBQUwsb0JBQUcsRUFBQywrQkFBK0IsQ0FBQyxFQUFFTSxzQkFBYSxDQUFDLEVBQ3JELENBQUMsSUFBQU4sb0JBQUcsRUFBQyw4QkFBOEIsQ0FBQyxFQUFFTywwQkFBaUIsQ0FBQyxFQUN4RCxDQUFDLElBQUFQLG9CQUFHLEVBQUMsZ0NBQWdDLENBQUMsRUFBRVEsNkJBQW9CLENBQUMsRUFDN0QsQ0FBQyxJQUFBUixvQkFBRyxFQUFDLHlCQUF5QixDQUFDLEVBQUVTLHVCQUFjLENBQUMsQ0FDbkQ7RUFDRCxDQUFDWixRQUFRLENBQUNJLEtBQUssR0FBRyxDQUNkLENBQUMsSUFBQUQsb0JBQUcsRUFBQywrQkFBK0IsQ0FBQyxFQUFFVSxnQ0FBbUIsQ0FBQyxFQUMzRCxDQUFDLElBQUFWLG9CQUFHLEVBQUMsNEJBQTRCLENBQUMsRUFBRVcsd0JBQWUsQ0FBQyxFQUNwRCxDQUFDLElBQUFYLG9CQUFHLEVBQUMsc0JBQXNCLENBQUMsRUFBRVksbUJBQVUsQ0FBQztBQUVqRCxDQUFDO0FBVUQsTUFBTUMsY0FBZ0MsR0FBR0EsQ0FBQztFQUFFQyxNQUFNO0VBQUVDLFlBQVk7RUFBRUM7QUFBVyxDQUFDLEtBQUs7RUFDL0UsTUFBTSxDQUFDQyxJQUFJLEVBQUVDLE9BQU8sQ0FBQyxHQUFHLElBQUFDLGVBQVEsRUFBa0IsSUFBSSxDQUFDO0VBRXZELElBQUlDLElBQWlCO0VBQ3JCLElBQUlDLE1BQWtCO0VBRXRCLElBQUlKLElBQUksRUFBRTtJQUNOSSxNQUFNLEdBQUdBLENBQUEsS0FBTTtNQUNYSCxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNSSxJQUFJLEdBQUdMLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEJHLElBQUksZ0JBQUdoRSxNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLENBQUNELElBQUk7TUFBQ0QsTUFBTSxFQUFFQSxNQUFPO01BQUNILE9BQU8sRUFBRUEsQ0FBQ00sS0FBSyxFQUFFUCxJQUFJLEtBQUtDLE9BQU8sQ0FBQyxDQUFDTSxLQUFLLEVBQUVQLElBQUksQ0FBQztJQUFFLENBQUUsQ0FBQztFQUNyRixDQUFDLE1BQU07SUFDSCxNQUFNSSxNQUFNLEdBQUdBLENBQUEsS0FBWTtNQUN2QkwsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBQ0RJLElBQUksZ0JBQ0FoRSxNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLENBQUN2RCxTQUFBLENBQUFlLE9BQVE7TUFBQ3NDLE1BQU0sRUFBRUE7SUFBTyxHQUNwQmhDLE1BQU0sQ0FBQ29DLE9BQU8sQ0FBQ3ZCLEtBQUssQ0FBQyxDQUFDd0IsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxFQUFFQyxLQUFLLENBQUMsa0JBQ3pDeEUsTUFBQSxDQUFBMkIsT0FBQSxDQUFBd0MsYUFBQTtNQUFLTSxHQUFHLEVBQUVGO0lBQVMsZ0JBQ2Z2RSxNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLGFBQUssSUFBQU8sbUJBQUUsRUFBQ2hDLGNBQWMsQ0FBQzZCLFFBQVEsQ0FBd0IsQ0FBTSxDQUFDLEVBQzdEQyxLQUFLLENBQUNGLEdBQUcsQ0FBQyxDQUFDLENBQUNGLEtBQUssRUFBRVAsSUFBSSxDQUFDLEtBQUs7TUFDMUIsTUFBTWMsT0FBTyxHQUFHQSxDQUFBLEtBQVk7UUFDeEJiLE9BQU8sQ0FBQyxDQUFDTSxLQUFLLEVBQUVQLElBQUksQ0FBQyxDQUFDO01BQzFCLENBQUM7TUFDRCxvQkFDSTdELE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQXdDLGFBQUE7UUFBUVMsU0FBUyxFQUFDLG9CQUFvQjtRQUFDSCxHQUFHLEVBQUVMLEtBQU07UUFBQ08sT0FBTyxFQUFFQTtNQUFRLEdBQy9ELElBQUFELG1CQUFFLEVBQUNOLEtBQUssQ0FDTCxDQUFDO0lBRWpCLENBQUMsQ0FDQSxDQUNSLENBQUMsZUFDRnBFLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQXdDLGFBQUEsMkJBQ0luRSxNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLGFBQUssSUFBQU8sbUJBQUUsRUFBQyxnQkFBZ0IsQ0FBTSxDQUFDLGVBQy9CMUUsTUFBQSxDQUFBMkIsT0FBQSxDQUFBd0MsYUFBQSxDQUFDcEQsYUFBQSxDQUFBWSxPQUFZO01BQUNrRCxJQUFJLEVBQUMsZUFBZTtNQUFDQyxLQUFLLEVBQUVDLDBCQUFZLENBQUNDO0lBQVEsQ0FBRSxDQUFDLGVBQ2xFaEYsTUFBQSxDQUFBMkIsT0FBQSxDQUFBd0MsYUFBQSxDQUFDcEQsYUFBQSxDQUFBWSxPQUFZO01BQUNrRCxJQUFJLEVBQUMsNEJBQTRCO01BQUNDLEtBQUssRUFBRUMsMEJBQVksQ0FBQ0U7SUFBTyxDQUFFLENBQUMsZUFDOUVqRixNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLENBQUNwRCxhQUFBLENBQUFZLE9BQVk7TUFBQ2tELElBQUksRUFBQyx5QkFBeUI7TUFBQ0MsS0FBSyxFQUFFQywwQkFBWSxDQUFDQztJQUFRLENBQUUsQ0FBQyxlQUM1RWhGLE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQXdDLGFBQUEsQ0FBQ3BELGFBQUEsQ0FBQVksT0FBWTtNQUFDa0QsSUFBSSxFQUFFSyxrQkFBUSxDQUFDQyw4QkFBK0I7TUFBQ0wsS0FBSyxFQUFFQywwQkFBWSxDQUFDRTtJQUFPLENBQUUsQ0FDekYsQ0FDQyxDQUNiO0VBQ0w7RUFFQSxNQUFNYixLQUFLLEdBQUdQLElBQUksR0FBRyxJQUFBYSxtQkFBRSxFQUFDYixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFBYSxtQkFBRSxFQUFDLGtCQUFrQixDQUFDO0VBQ3pELG9CQUNJMUUsTUFBQSxDQUFBMkIsT0FBQSxDQUFBd0MsYUFBQSxDQUFDN0QsV0FBQSxDQUFBcUIsT0FBVTtJQUFDaUQsU0FBUyxFQUFDLG1CQUFtQjtJQUFDaEIsVUFBVSxFQUFFQSxVQUFXO0lBQUN3QixLQUFLLEVBQUUsSUFBQVYsbUJBQUUsRUFBQywwQkFBMEI7RUFBRSxnQkFDcEcxRSxNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLENBQUMvRCxvQkFBQSxDQUFBdUIsT0FBbUIsQ0FBQzBELFFBQVEsUUFDdkJDLEdBQUcsaUJBQ0R0RixNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLENBQUFuRSxNQUFBLENBQUEyQixPQUFBLENBQUE0RCxRQUFBLHFCQUNJdkYsTUFBQSxDQUFBMkIsT0FBQSxDQUFBd0MsYUFBQTtJQUFLUyxTQUFTLEVBQUM7RUFBd0IsR0FBRVIsS0FBVyxDQUFDLGVBQ3JEcEUsTUFBQSxDQUFBMkIsT0FBQSxDQUFBd0MsYUFBQSxDQUFDaEQsYUFBQSxDQUFBUSxPQUFZO0lBQUNpRCxTQUFTLEVBQUMseUJBQXlCO0lBQUNZLGFBQWEsRUFBRUEsQ0FBQSxLQUFNOUIsTUFBTztJQUFDK0IsTUFBTSxFQUFFO0VBQU0sR0FDeEYsSUFBQWYsbUJBQUUsRUFBQyxrQkFBa0IsRUFBRTtJQUFFaEI7RUFBTyxDQUFDLENBQ3hCLENBQUMsRUFDZCxDQUFDQyxZQUFZLEdBQUcsSUFBSSxnQkFDakIzRCxNQUFBLENBQUEyQixPQUFBLENBQUF3QyxhQUFBLENBQUNoRCxhQUFBLENBQUFRLE9BQVk7SUFDVGlELFNBQVMsRUFBQyx5QkFBeUI7SUFDbkNZLGFBQWEsRUFBRUEsQ0FBQSxLQUFNN0IsWUFBYTtJQUNsQzhCLE1BQU0sRUFBRTtFQUFNLEdBRWIsSUFBQWYsbUJBQUUsRUFBQyx5QkFBeUIsRUFBRTtJQUFFZjtFQUFhLENBQUMsQ0FDckMsQ0FDakIsZUFDRDNELE1BQUEsQ0FBQTJCLE9BQUEsQ0FBQXdDLGFBQUE7SUFBS1MsU0FBUyxFQUFDO0VBQTBCLENBQUUsQ0FBQyxFQUMzQ1UsR0FBRyxDQUFDSSxPQUFPLENBQUNoQyxNQUFNLENBQUMsaUJBQ2hCMUQsTUFBQSxDQUFBMkIsT0FBQSxDQUFBd0MsYUFBQSxDQUFDdkQsU0FBQSxDQUFBK0UsZUFBZSxDQUFDQyxRQUFRO0lBQUNDLEtBQUssRUFBRTtNQUFFQyxJQUFJLEVBQUVSLEdBQUcsQ0FBQ0ksT0FBTyxDQUFDaEMsTUFBTSxDQUFFO01BQUVDO0lBQWE7RUFBRSxHQUN6RUssSUFDcUIsQ0FFaEMsQ0FFb0IsQ0FDdEIsQ0FBQztBQUVyQixDQUFDO0FBQUMsSUFBQStCLFFBQUEsR0FBQUMsT0FBQSxDQUFBckUsT0FBQSxHQUVhOEIsY0FBYyIsImlnbm9yZUxpc3QiOltdfQ==