UNPKG

matrix-react-sdk

Version:
77 lines (71 loc) 17.2 kB
"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 _cryptoApi = require("matrix-js-sdk/src/crypto-api"); var _crypto = require("matrix-js-sdk/src/crypto"); var _useEventEmitter = require("../../../../hooks/useEventEmitter"); var _languageHandler = require("../../../../languageHandler"); var _MatrixClientContext = _interopRequireDefault(require("../../../../contexts/MatrixClientContext")); var _BaseTool = _interopRequireWildcard(require("./BaseTool")); 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 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. */ const PHASE_MAP = { [_cryptoApi.VerificationPhase.Unsent]: (0, _languageHandler._td)("common|unsent"), [_cryptoApi.VerificationPhase.Requested]: (0, _languageHandler._td)("devtools|phase_requested"), [_cryptoApi.VerificationPhase.Ready]: (0, _languageHandler._td)("devtools|phase_ready"), [_cryptoApi.VerificationPhase.Done]: (0, _languageHandler._td)("action|done"), [_cryptoApi.VerificationPhase.Started]: (0, _languageHandler._td)("devtools|phase_started"), [_cryptoApi.VerificationPhase.Cancelled]: (0, _languageHandler._td)("devtools|phase_cancelled") }; const VerificationRequestExplorer = ({ txnId, request }) => { const [, updateState] = (0, _react.useState)(); const [timeout, setRequestTimeout] = (0, _react.useState)(request.timeout); /* Re-render if something changes state */ (0, _useEventEmitter.useTypedEventEmitter)(request, _cryptoApi.VerificationRequestEvent.Change, updateState); /* Keep re-rendering if there's a timeout */ (0, _react.useEffect)(() => { if (request.timeout == 0) return; /* Note that request.timeout is a getter, so its value changes */ const id = window.setInterval(() => { setRequestTimeout(request.timeout); }, 500); return () => { clearInterval(id); }; }, [request]); return /*#__PURE__*/_react.default.createElement("div", { className: "mx_DevTools_VerificationRequest" }, /*#__PURE__*/_react.default.createElement("dl", null, /*#__PURE__*/_react.default.createElement("dt", null, (0, _languageHandler._t)("devtools|phase_transaction")), /*#__PURE__*/_react.default.createElement("dd", null, txnId), /*#__PURE__*/_react.default.createElement("dt", null, (0, _languageHandler._t)("devtools|phase")), /*#__PURE__*/_react.default.createElement("dd", null, PHASE_MAP[request.phase] ? (0, _languageHandler._t)(PHASE_MAP[request.phase]) : request.phase), /*#__PURE__*/_react.default.createElement("dt", null, (0, _languageHandler._t)("devtools|timeout")), /*#__PURE__*/_react.default.createElement("dd", null, timeout === null ? (0, _languageHandler._t)("devtools|timeout_none") : Math.floor(timeout / 1000)), /*#__PURE__*/_react.default.createElement("dt", null, (0, _languageHandler._t)("devtools|methods")), /*#__PURE__*/_react.default.createElement("dd", null, request.methods && request.methods.join(", ")), /*#__PURE__*/_react.default.createElement("dt", null, (0, _languageHandler._t)("devtools|other_user")), /*#__PURE__*/_react.default.createElement("dd", null, request.otherUserId))); }; const VerificationExplorer = ({ onBack }) => { const cli = (0, _react.useContext)(_MatrixClientContext.default); const context = (0, _react.useContext)(_BaseTool.DevtoolsContext); const requests = (0, _useEventEmitter.useTypedEventEmitterState)(cli, _crypto.CryptoEvent.VerificationRequestReceived, () => { return cli.crypto?.inRoomVerificationRequests["requestsByRoomId"]?.get(context.room.roomId) ?? new Map(); }); return /*#__PURE__*/_react.default.createElement(_BaseTool.default, { onBack: onBack }, Array.from(requests.entries()).reverse().map(([txnId, request]) => /*#__PURE__*/_react.default.createElement(VerificationRequestExplorer, { txnId: txnId, request: request, key: txnId })), requests.size < 1 && (0, _languageHandler._t)("devtools|no_verification_requests_found")); }; var _default = exports.default = VerificationExplorer; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY3J5cHRvQXBpIiwiX2NyeXB0byIsIl91c2VFdmVudEVtaXR0ZXIiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0Jhc2VUb29sIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiUEhBU0VfTUFQIiwiUGhhc2UiLCJVbnNlbnQiLCJfdGQiLCJSZXF1ZXN0ZWQiLCJSZWFkeSIsIkRvbmUiLCJTdGFydGVkIiwiQ2FuY2VsbGVkIiwiVmVyaWZpY2F0aW9uUmVxdWVzdEV4cGxvcmVyIiwidHhuSWQiLCJyZXF1ZXN0IiwidXBkYXRlU3RhdGUiLCJ1c2VTdGF0ZSIsInRpbWVvdXQiLCJzZXRSZXF1ZXN0VGltZW91dCIsInVzZVR5cGVkRXZlbnRFbWl0dGVyIiwiVmVyaWZpY2F0aW9uUmVxdWVzdEV2ZW50IiwiQ2hhbmdlIiwidXNlRWZmZWN0IiwiaWQiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX3QiLCJwaGFzZSIsIk1hdGgiLCJmbG9vciIsIm1ldGhvZHMiLCJqb2luIiwib3RoZXJVc2VySWQiLCJWZXJpZmljYXRpb25FeHBsb3JlciIsIm9uQmFjayIsImNsaSIsInVzZUNvbnRleHQiLCJNYXRyaXhDbGllbnRDb250ZXh0IiwiY29udGV4dCIsIkRldnRvb2xzQ29udGV4dCIsInJlcXVlc3RzIiwidXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZSIsIkNyeXB0b0V2ZW50IiwiVmVyaWZpY2F0aW9uUmVxdWVzdFJlY2VpdmVkIiwiY3J5cHRvIiwiaW5Sb29tVmVyaWZpY2F0aW9uUmVxdWVzdHMiLCJyb29tIiwicm9vbUlkIiwiTWFwIiwiQXJyYXkiLCJmcm9tIiwiZW50cmllcyIsInJldmVyc2UiLCJtYXAiLCJrZXkiLCJzaXplIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZGlhbG9ncy9kZXZ0b29scy9WZXJpZmljYXRpb25FeHBsb3Jlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDIyIE1pY2hhZWwgVGVsYXR5bnNraSA8N3QzY2hndXlAZ21haWwuY29tPlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgICBWZXJpZmljYXRpb25QaGFzZSBhcyBQaGFzZSxcbiAgICBWZXJpZmljYXRpb25SZXF1ZXN0LFxuICAgIFZlcmlmaWNhdGlvblJlcXVlc3RFdmVudCxcbn0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2NyeXB0by1hcGlcIjtcbmltcG9ydCB7IENyeXB0b0V2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2NyeXB0b1wiO1xuXG5pbXBvcnQgeyB1c2VUeXBlZEV2ZW50RW1pdHRlciwgdXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9ob29rcy91c2VFdmVudEVtaXR0ZXJcIjtcbmltcG9ydCB7IF90LCBfdGQsIFRyYW5zbGF0aW9uS2V5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IE1hdHJpeENsaWVudENvbnRleHQgZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcbmltcG9ydCBCYXNlVG9vbCwgeyBEZXZ0b29sc0NvbnRleHQsIElEZXZ0b29sc1Byb3BzIH0gZnJvbSBcIi4vQmFzZVRvb2xcIjtcbmltcG9ydCB7IFRvb2wgfSBmcm9tIFwiLi4vRGV2dG9vbHNEaWFsb2dcIjtcblxuY29uc3QgUEhBU0VfTUFQOiBSZWNvcmQ8UGhhc2UsIFRyYW5zbGF0aW9uS2V5PiA9IHtcbiAgICBbUGhhc2UuVW5zZW50XTogX3RkKFwiY29tbW9ufHVuc2VudFwiKSxcbiAgICBbUGhhc2UuUmVxdWVzdGVkXTogX3RkKFwiZGV2dG9vbHN8cGhhc2VfcmVxdWVzdGVkXCIpLFxuICAgIFtQaGFzZS5SZWFkeV06IF90ZChcImRldnRvb2xzfHBoYXNlX3JlYWR5XCIpLFxuICAgIFtQaGFzZS5Eb25lXTogX3RkKFwiYWN0aW9ufGRvbmVcIiksXG4gICAgW1BoYXNlLlN0YXJ0ZWRdOiBfdGQoXCJkZXZ0b29sc3xwaGFzZV9zdGFydGVkXCIpLFxuICAgIFtQaGFzZS5DYW5jZWxsZWRdOiBfdGQoXCJkZXZ0b29sc3xwaGFzZV9jYW5jZWxsZWRcIiksXG59O1xuXG5jb25zdCBWZXJpZmljYXRpb25SZXF1ZXN0RXhwbG9yZXI6IFJlYWN0LkZDPHtcbiAgICB0eG5JZDogc3RyaW5nO1xuICAgIHJlcXVlc3Q6IFZlcmlmaWNhdGlvblJlcXVlc3Q7XG59PiA9ICh7IHR4bklkLCByZXF1ZXN0IH0pID0+IHtcbiAgICBjb25zdCBbLCB1cGRhdGVTdGF0ZV0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFt0aW1lb3V0LCBzZXRSZXF1ZXN0VGltZW91dF0gPSB1c2VTdGF0ZShyZXF1ZXN0LnRpbWVvdXQpO1xuXG4gICAgLyogUmUtcmVuZGVyIGlmIHNvbWV0aGluZyBjaGFuZ2VzIHN0YXRlICovXG4gICAgdXNlVHlwZWRFdmVudEVtaXR0ZXIocmVxdWVzdCwgVmVyaWZpY2F0aW9uUmVxdWVzdEV2ZW50LkNoYW5nZSwgdXBkYXRlU3RhdGUpO1xuXG4gICAgLyogS2VlcCByZS1yZW5kZXJpbmcgaWYgdGhlcmUncyBhIHRpbWVvdXQgKi9cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC50aW1lb3V0ID09IDApIHJldHVybjtcblxuICAgICAgICAvKiBOb3RlIHRoYXQgcmVxdWVzdC50aW1lb3V0IGlzIGEgZ2V0dGVyLCBzbyBpdHMgdmFsdWUgY2hhbmdlcyAqL1xuICAgICAgICBjb25zdCBpZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRSZXF1ZXN0VGltZW91dChyZXF1ZXN0LnRpbWVvdXQpO1xuICAgICAgICB9LCA1MDApO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbcmVxdWVzdF0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9EZXZUb29sc19WZXJpZmljYXRpb25SZXF1ZXN0XCI+XG4gICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgPGR0PntfdChcImRldnRvb2xzfHBoYXNlX3RyYW5zYWN0aW9uXCIpfTwvZHQ+XG4gICAgICAgICAgICAgICAgPGRkPnt0eG5JZH08L2RkPlxuICAgICAgICAgICAgICAgIDxkdD57X3QoXCJkZXZ0b29sc3xwaGFzZVwiKX08L2R0PlxuICAgICAgICAgICAgICAgIDxkZD57UEhBU0VfTUFQW3JlcXVlc3QucGhhc2VdID8gX3QoUEhBU0VfTUFQW3JlcXVlc3QucGhhc2VdKSA6IHJlcXVlc3QucGhhc2V9PC9kZD5cbiAgICAgICAgICAgICAgICA8ZHQ+e190KFwiZGV2dG9vbHN8dGltZW91dFwiKX08L2R0PlxuICAgICAgICAgICAgICAgIDxkZD57dGltZW91dCA9PT0gbnVsbCA/IF90KFwiZGV2dG9vbHN8dGltZW91dF9ub25lXCIpIDogTWF0aC5mbG9vcih0aW1lb3V0IC8gMTAwMCl9PC9kZD5cbiAgICAgICAgICAgICAgICA8ZHQ+e190KFwiZGV2dG9vbHN8bWV0aG9kc1wiKX08L2R0PlxuICAgICAgICAgICAgICAgIDxkZD57cmVxdWVzdC5tZXRob2RzICYmIHJlcXVlc3QubWV0aG9kcy5qb2luKFwiLCBcIil9PC9kZD5cbiAgICAgICAgICAgICAgICA8ZHQ+e190KFwiZGV2dG9vbHN8b3RoZXJfdXNlclwiKX08L2R0PlxuICAgICAgICAgICAgICAgIDxkZD57cmVxdWVzdC5vdGhlclVzZXJJZH08L2RkPlxuICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmNvbnN0IFZlcmlmaWNhdGlvbkV4cGxvcmVyOiBUb29sID0gKHsgb25CYWNrIH06IElEZXZ0b29sc1Byb3BzKSA9PiB7XG4gICAgY29uc3QgY2xpID0gdXNlQ29udGV4dChNYXRyaXhDbGllbnRDb250ZXh0KTtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChEZXZ0b29sc0NvbnRleHQpO1xuXG4gICAgY29uc3QgcmVxdWVzdHMgPSB1c2VUeXBlZEV2ZW50RW1pdHRlclN0YXRlKGNsaSwgQ3J5cHRvRXZlbnQuVmVyaWZpY2F0aW9uUmVxdWVzdFJlY2VpdmVkLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjbGkuY3J5cHRvPy5pblJvb21WZXJpZmljYXRpb25SZXF1ZXN0c1tcInJlcXVlc3RzQnlSb29tSWRcIl0/LmdldChjb250ZXh0LnJvb20ucm9vbUlkKSA/P1xuICAgICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIFZlcmlmaWNhdGlvblJlcXVlc3Q+KClcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCYXNlVG9vbCBvbkJhY2s9e29uQmFja30+XG4gICAgICAgICAgICB7QXJyYXkuZnJvbShyZXF1ZXN0cy5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgIC5tYXAoKFt0eG5JZCwgcmVxdWVzdF0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFZlcmlmaWNhdGlvblJlcXVlc3RFeHBsb3JlciB0eG5JZD17dHhuSWR9IHJlcXVlc3Q9e3JlcXVlc3R9IGtleT17dHhuSWR9IC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7cmVxdWVzdHMuc2l6ZSA8IDEgJiYgX3QoXCJkZXZ0b29sc3xub192ZXJpZmljYXRpb25fcmVxdWVzdHNfZm91bmRcIil9XG4gICAgICAgIDwvQmFzZVRvb2w+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZlcmlmaWNhdGlvbkV4cGxvcmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBS0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsZ0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBUix1QkFBQSxDQUFBQyxPQUFBO0FBQXVFLFNBQUFRLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFWLHdCQUFBVSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsV0FBQUssT0FBQSxFQUFBTCxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsQ0FBQUgsT0FBQSxHQUFBTCxDQUFBLEVBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZSxHQUFBLENBQUFsQixDQUFBLEVBQUFRLENBQUEsR0FBQUEsQ0FBQTtBQXBCdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFnQkEsTUFBTVcsU0FBd0MsR0FBRztFQUM3QyxDQUFDQyw0QkFBSyxDQUFDQyxNQUFNLEdBQUcsSUFBQUMsb0JBQUcsRUFBQyxlQUFlLENBQUM7RUFDcEMsQ0FBQ0YsNEJBQUssQ0FBQ0csU0FBUyxHQUFHLElBQUFELG9CQUFHLEVBQUMsMEJBQTBCLENBQUM7RUFDbEQsQ0FBQ0YsNEJBQUssQ0FBQ0ksS0FBSyxHQUFHLElBQUFGLG9CQUFHLEVBQUMsc0JBQXNCLENBQUM7RUFDMUMsQ0FBQ0YsNEJBQUssQ0FBQ0ssSUFBSSxHQUFHLElBQUFILG9CQUFHLEVBQUMsYUFBYSxDQUFDO0VBQ2hDLENBQUNGLDRCQUFLLENBQUNNLE9BQU8sR0FBRyxJQUFBSixvQkFBRyxFQUFDLHdCQUF3QixDQUFDO0VBQzlDLENBQUNGLDRCQUFLLENBQUNPLFNBQVMsR0FBRyxJQUFBTCxvQkFBRyxFQUFDLDBCQUEwQjtBQUNyRCxDQUFDO0FBRUQsTUFBTU0sMkJBR0osR0FBR0EsQ0FBQztFQUFFQyxLQUFLO0VBQUVDO0FBQVEsQ0FBQyxLQUFLO0VBQ3pCLE1BQU0sR0FBR0MsV0FBVyxDQUFDLEdBQUcsSUFBQUMsZUFBUSxFQUFDLENBQUM7RUFDbEMsTUFBTSxDQUFDQyxPQUFPLEVBQUVDLGlCQUFpQixDQUFDLEdBQUcsSUFBQUYsZUFBUSxFQUFDRixPQUFPLENBQUNHLE9BQU8sQ0FBQzs7RUFFOUQ7RUFDQSxJQUFBRSxxQ0FBb0IsRUFBQ0wsT0FBTyxFQUFFTSxtQ0FBd0IsQ0FBQ0MsTUFBTSxFQUFFTixXQUFXLENBQUM7O0VBRTNFO0VBQ0EsSUFBQU8sZ0JBQVMsRUFBQyxNQUFNO0lBQ1osSUFBSVIsT0FBTyxDQUFDRyxPQUFPLElBQUksQ0FBQyxFQUFFOztJQUUxQjtJQUNBLE1BQU1NLEVBQUUsR0FBR0MsTUFBTSxDQUFDQyxXQUFXLENBQUMsTUFBTTtNQUNoQ1AsaUJBQWlCLENBQUNKLE9BQU8sQ0FBQ0csT0FBTyxDQUFDO0lBQ3RDLENBQUMsRUFBRSxHQUFHLENBQUM7SUFFUCxPQUFPLE1BQU07TUFDVFMsYUFBYSxDQUFDSCxFQUFFLENBQUM7SUFDckIsQ0FBQztFQUNMLENBQUMsRUFBRSxDQUFDVCxPQUFPLENBQUMsQ0FBQztFQUViLG9CQUNJekMsTUFBQSxDQUFBZ0IsT0FBQSxDQUFBc0MsYUFBQTtJQUFLQyxTQUFTLEVBQUM7RUFBaUMsZ0JBQzVDdkQsTUFBQSxDQUFBZ0IsT0FBQSxDQUFBc0MsYUFBQSwwQkFDSXRELE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQXNDLGFBQUEsYUFBSyxJQUFBRSxtQkFBRSxFQUFDLDRCQUE0QixDQUFNLENBQUMsZUFDM0N4RCxNQUFBLENBQUFnQixPQUFBLENBQUFzQyxhQUFBLGFBQUtkLEtBQVUsQ0FBQyxlQUNoQnhDLE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQXNDLGFBQUEsYUFBSyxJQUFBRSxtQkFBRSxFQUFDLGdCQUFnQixDQUFNLENBQUMsZUFDL0J4RCxNQUFBLENBQUFnQixPQUFBLENBQUFzQyxhQUFBLGFBQUt4QixTQUFTLENBQUNXLE9BQU8sQ0FBQ2dCLEtBQUssQ0FBQyxHQUFHLElBQUFELG1CQUFFLEVBQUMxQixTQUFTLENBQUNXLE9BQU8sQ0FBQ2dCLEtBQUssQ0FBQyxDQUFDLEdBQUdoQixPQUFPLENBQUNnQixLQUFVLENBQUMsZUFDbEZ6RCxNQUFBLENBQUFnQixPQUFBLENBQUFzQyxhQUFBLGFBQUssSUFBQUUsbUJBQUUsRUFBQyxrQkFBa0IsQ0FBTSxDQUFDLGVBQ2pDeEQsTUFBQSxDQUFBZ0IsT0FBQSxDQUFBc0MsYUFBQSxhQUFLVixPQUFPLEtBQUssSUFBSSxHQUFHLElBQUFZLG1CQUFFLEVBQUMsdUJBQXVCLENBQUMsR0FBR0UsSUFBSSxDQUFDQyxLQUFLLENBQUNmLE9BQU8sR0FBRyxJQUFJLENBQU0sQ0FBQyxlQUN0RjVDLE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQXNDLGFBQUEsYUFBSyxJQUFBRSxtQkFBRSxFQUFDLGtCQUFrQixDQUFNLENBQUMsZUFDakN4RCxNQUFBLENBQUFnQixPQUFBLENBQUFzQyxhQUFBLGFBQUtiLE9BQU8sQ0FBQ21CLE9BQU8sSUFBSW5CLE9BQU8sQ0FBQ21CLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBTSxDQUFDLGVBQ3hEN0QsTUFBQSxDQUFBZ0IsT0FBQSxDQUFBc0MsYUFBQSxhQUFLLElBQUFFLG1CQUFFLEVBQUMscUJBQXFCLENBQU0sQ0FBQyxlQUNwQ3hELE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQXNDLGFBQUEsYUFBS2IsT0FBTyxDQUFDcUIsV0FBZ0IsQ0FDN0IsQ0FDSCxDQUFDO0FBRWQsQ0FBQztBQUVELE1BQU1DLG9CQUEwQixHQUFHQSxDQUFDO0VBQUVDO0FBQXVCLENBQUMsS0FBSztFQUMvRCxNQUFNQyxHQUFHLEdBQUcsSUFBQUMsaUJBQVUsRUFBQ0MsNEJBQW1CLENBQUM7RUFDM0MsTUFBTUMsT0FBTyxHQUFHLElBQUFGLGlCQUFVLEVBQUNHLHlCQUFlLENBQUM7RUFFM0MsTUFBTUMsUUFBUSxHQUFHLElBQUFDLDBDQUF5QixFQUFDTixHQUFHLEVBQUVPLG1CQUFXLENBQUNDLDJCQUEyQixFQUFFLE1BQU07SUFDM0YsT0FDSVIsR0FBRyxDQUFDUyxNQUFNLEVBQUVDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLEVBQUV6RCxHQUFHLENBQUNrRCxPQUFPLENBQUNRLElBQUksQ0FBQ0MsTUFBTSxDQUFDLElBQ3BGLElBQUlDLEdBQUcsQ0FBOEIsQ0FBQztFQUU5QyxDQUFDLENBQUM7RUFFRixvQkFDSTlFLE1BQUEsQ0FBQWdCLE9BQUEsQ0FBQXNDLGFBQUEsQ0FBQzdDLFNBQUEsQ0FBQU8sT0FBUTtJQUFDZ0QsTUFBTSxFQUFFQTtFQUFPLEdBQ3BCZSxLQUFLLENBQUNDLElBQUksQ0FBQ1YsUUFBUSxDQUFDVyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQzFCQyxPQUFPLENBQUMsQ0FBQyxDQUNUQyxHQUFHLENBQUMsQ0FBQyxDQUFDM0MsS0FBSyxFQUFFQyxPQUFPLENBQUMsa0JBQ2xCekMsTUFBQSxDQUFBZ0IsT0FBQSxDQUFBc0MsYUFBQSxDQUFDZiwyQkFBMkI7SUFBQ0MsS0FBSyxFQUFFQSxLQUFNO0lBQUNDLE9BQU8sRUFBRUEsT0FBUTtJQUFDMkMsR0FBRyxFQUFFNUM7RUFBTSxDQUFFLENBQzdFLENBQUMsRUFDTDhCLFFBQVEsQ0FBQ2UsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFBN0IsbUJBQUUsRUFBQyx5Q0FBeUMsQ0FDNUQsQ0FBQztBQUVuQixDQUFDO0FBQUMsSUFBQThCLFFBQUEsR0FBQUMsT0FBQSxDQUFBdkUsT0FBQSxHQUVhK0Msb0JBQW9CIiwiaWdub3JlTGlzdCI6W119