matrix-react-sdk
Version:
SDK for matrix.org using React
108 lines (101 loc) • 17.5 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 _logger = require("matrix-js-sdk/src/logger");
var _languageHandler = require("../../../languageHandler");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _dispatcher = _interopRequireWildcard(require("../../../dispatcher/dispatcher"));
var _actions = require("../../../dispatcher/actions");
var _Call = require("../../../models/Call");
var _useCall = require("../../../hooks/useCall");
var _useEventEmitter = require("../../../hooks/useEventEmitter");
var _OwnBeaconStore = require("../../../stores/OwnBeaconStore");
var _CallDuration = require("../voip/CallDuration");
var _SDKContext = require("../../../contexts/SDKContext");
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 2022 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 RoomCallBannerInner = ({
roomId,
call
}) => {
const connect = (0, _react.useCallback)(ev => {
ev.preventDefault();
_dispatcher.defaultDispatcher.dispatch({
action: _actions.Action.ViewRoom,
room_id: roomId,
view_call: true,
skipLobby: "shiftKey" in ev ? ev.shiftKey : false,
metricsTrigger: undefined
});
}, [roomId]);
// TODO matrix rtc
const onClick = (0, _react.useCallback)(() => {
_logger.logger.log("clicking on the call banner is not supported anymore - there are no timeline events anymore.");
let messageLikeEventId;
if (!messageLikeEventId) {
// Until we have a timeline event for calls this will always be true.
// We will never jump to the non existing timeline event.
_logger.logger.error("Couldn't find a group call event to jump to");
return;
}
_dispatcher.default.dispatch({
action: _actions.Action.ViewRoom,
room_id: roomId,
metricsTrigger: undefined,
event_id: messageLikeEventId,
scroll_into_view: true,
highlighted: true
});
}, [roomId]);
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomCallBanner",
onClick: onClick
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomCallBanner_text"
}, /*#__PURE__*/_react.default.createElement("span", {
className: "mx_RoomCallBanner_label"
}, (0, _languageHandler._t)("voip|video_call")), /*#__PURE__*/_react.default.createElement(_CallDuration.SessionDuration, {
session: call.session
})), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: connect,
kind: "primary",
element: "button",
disabled: false
}, (0, _languageHandler._t)("action|join")));
};
const RoomCallBanner = ({
roomId
}) => {
const call = (0, _useCall.useCall)(roomId);
// this section is to check if we have a live location share. If so, we dont show the call banner
const isMonitoringLiveLocation = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.MonitoringLivePosition, () => _OwnBeaconStore.OwnBeaconStore.instance.isMonitoringLiveLocation);
const liveBeaconIds = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.LivenessChange, () => _OwnBeaconStore.OwnBeaconStore.instance.getLiveBeaconIds(roomId));
if (isMonitoringLiveLocation && liveBeaconIds.length) {
return null;
}
// Check if the call is already showing. No banner is needed in this case.
if (_SDKContext.SdkContextClass.instance.roomViewStore.isViewingCall()) {
return null;
}
// Split into outer/inner to avoid watching various parts if there is no call
// No banner if the call is connected (or connecting/disconnecting)
if (call !== null && call.connectionState === _Call.ConnectionState.Disconnected) {
return /*#__PURE__*/_react.default.createElement(RoomCallBannerInner, {
call: call,
roomId: roomId
});
}
return null;
};
var _default = exports.default = RoomCallBanner;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kaXNwYXRjaGVyIiwiX2FjdGlvbnMiLCJfQ2FsbCIsIl91c2VDYWxsIiwiX3VzZUV2ZW50RW1pdHRlciIsIl9Pd25CZWFjb25TdG9yZSIsIl9DYWxsRHVyYXRpb24iLCJfU0RLQ29udGV4dCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlJvb21DYWxsQmFubmVySW5uZXIiLCJyb29tSWQiLCJjb25uZWN0IiwidXNlQ2FsbGJhY2siLCJldiIsInByZXZlbnREZWZhdWx0IiwiZGVmYXVsdERpc3BhdGNoZXIiLCJkaXNwYXRjaCIsImFjdGlvbiIsIkFjdGlvbiIsIlZpZXdSb29tIiwicm9vbV9pZCIsInZpZXdfY2FsbCIsInNraXBMb2JieSIsInNoaWZ0S2V5IiwibWV0cmljc1RyaWdnZXIiLCJ1bmRlZmluZWQiLCJvbkNsaWNrIiwibG9nZ2VyIiwibG9nIiwibWVzc2FnZUxpa2VFdmVudElkIiwiZXJyb3IiLCJkaXNwYXRjaGVyIiwiZXZlbnRfaWQiLCJzY3JvbGxfaW50b192aWV3IiwiaGlnaGxpZ2h0ZWQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX3QiLCJTZXNzaW9uRHVyYXRpb24iLCJzZXNzaW9uIiwia2luZCIsImVsZW1lbnQiLCJkaXNhYmxlZCIsIlJvb21DYWxsQmFubmVyIiwidXNlQ2FsbCIsImlzTW9uaXRvcmluZ0xpdmVMb2NhdGlvbiIsInVzZUV2ZW50RW1pdHRlclN0YXRlIiwiT3duQmVhY29uU3RvcmUiLCJpbnN0YW5jZSIsIk93bkJlYWNvblN0b3JlRXZlbnQiLCJNb25pdG9yaW5nTGl2ZVBvc2l0aW9uIiwibGl2ZUJlYWNvbklkcyIsIkxpdmVuZXNzQ2hhbmdlIiwiZ2V0TGl2ZUJlYWNvbklkcyIsImxlbmd0aCIsIlNka0NvbnRleHRDbGFzcyIsInJvb21WaWV3U3RvcmUiLCJpc1ZpZXdpbmdDYWxsIiwiY29ubmVjdGlvblN0YXRlIiwiQ29ubmVjdGlvblN0YXRlIiwiRGlzY29ubmVjdGVkIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvYmVhY29uL1Jvb21DYWxsQmFubmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvb20gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24sIHsgQnV0dG9uRXZlbnQgfSBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IGRpc3BhdGNoZXIsIHsgZGVmYXVsdERpc3BhdGNoZXIgfSBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBWaWV3Um9vbVBheWxvYWQgfSBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9wYXlsb2Fkcy9WaWV3Um9vbVBheWxvYWRcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25TdGF0ZSwgRWxlbWVudENhbGwgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL0NhbGxcIjtcbmltcG9ydCB7IHVzZUNhbGwgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlQ2FsbFwiO1xuaW1wb3J0IHsgdXNlRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgeyBPd25CZWFjb25TdG9yZSwgT3duQmVhY29uU3RvcmVFdmVudCB9IGZyb20gXCIuLi8uLi8uLi9zdG9yZXMvT3duQmVhY29uU3RvcmVcIjtcbmltcG9ydCB7IFNlc3Npb25EdXJhdGlvbiB9IGZyb20gXCIuLi92b2lwL0NhbGxEdXJhdGlvblwiO1xuaW1wb3J0IHsgU2RrQ29udGV4dENsYXNzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL1NES0NvbnRleHRcIjtcblxuaW50ZXJmYWNlIFJvb21DYWxsQmFubmVyUHJvcHMge1xuICAgIHJvb21JZDogUm9vbVtcInJvb21JZFwiXTtcbiAgICBjYWxsOiBFbGVtZW50Q2FsbDtcbn1cblxuY29uc3QgUm9vbUNhbGxCYW5uZXJJbm5lcjogUmVhY3QuRkM8Um9vbUNhbGxCYW5uZXJQcm9wcz4gPSAoeyByb29tSWQsIGNhbGwgfSkgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3QgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGV2OiBCdXR0b25FdmVudCkgPT4ge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoPFZpZXdSb29tUGF5bG9hZD4oe1xuICAgICAgICAgICAgICAgIGFjdGlvbjogQWN0aW9uLlZpZXdSb29tLFxuICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb21JZCxcbiAgICAgICAgICAgICAgICB2aWV3X2NhbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgc2tpcExvYmJ5OiBcInNoaWZ0S2V5XCIgaW4gZXYgPyBldi5zaGlmdEtleSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1ldHJpY3NUcmlnZ2VyOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3Jvb21JZF0sXG4gICAgKTtcblxuICAgIC8vIFRPRE8gbWF0cml4IHJ0Y1xuICAgIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGxvZ2dlci5sb2coXCJjbGlja2luZyBvbiB0aGUgY2FsbCBiYW5uZXIgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlIC0gdGhlcmUgYXJlIG5vIHRpbWVsaW5lIGV2ZW50cyBhbnltb3JlLlwiKTtcbiAgICAgICAgbGV0IG1lc3NhZ2VMaWtlRXZlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIW1lc3NhZ2VMaWtlRXZlbnRJZCkge1xuICAgICAgICAgICAgLy8gVW50aWwgd2UgaGF2ZSBhIHRpbWVsaW5lIGV2ZW50IGZvciBjYWxscyB0aGlzIHdpbGwgYWx3YXlzIGJlIHRydWUuXG4gICAgICAgICAgICAvLyBXZSB3aWxsIG5ldmVyIGp1bXAgdG8gdGhlIG5vbiBleGlzdGluZyB0aW1lbGluZSBldmVudC5cbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkNvdWxkbid0IGZpbmQgYSBncm91cCBjYWxsIGV2ZW50IHRvIGp1bXAgdG9cIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoPFZpZXdSb29tUGF5bG9hZD4oe1xuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICByb29tX2lkOiByb29tSWQsXG4gICAgICAgICAgICBtZXRyaWNzVHJpZ2dlcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXZlbnRfaWQ6IG1lc3NhZ2VMaWtlRXZlbnRJZCxcbiAgICAgICAgICAgIHNjcm9sbF9pbnRvX3ZpZXc6IHRydWUsXG4gICAgICAgICAgICBoaWdobGlnaHRlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW3Jvb21JZF0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tQ2FsbEJhbm5lclwiIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tQ2FsbEJhbm5lcl90ZXh0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfUm9vbUNhbGxCYW5uZXJfbGFiZWxcIj57X3QoXCJ2b2lwfHZpZGVvX2NhbGxcIil9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxTZXNzaW9uRHVyYXRpb24gc2Vzc2lvbj17Y2FsbC5zZXNzaW9ufSAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIG9uQ2xpY2s9e2Nvbm5lY3R9IGtpbmQ9XCJwcmltYXJ5XCIgZWxlbWVudD1cImJ1dHRvblwiIGRpc2FibGVkPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAge190KFwiYWN0aW9ufGpvaW5cIil9XG4gICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAgIHJvb21JZDogUm9vbVtcInJvb21JZFwiXTtcbn1cblxuY29uc3QgUm9vbUNhbGxCYW5uZXI6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHJvb21JZCB9KSA9PiB7XG4gICAgY29uc3QgY2FsbCA9IHVzZUNhbGwocm9vbUlkKTtcblxuICAgIC8vIHRoaXMgc2VjdGlvbiBpcyB0byBjaGVjayBpZiB3ZSBoYXZlIGEgbGl2ZSBsb2NhdGlvbiBzaGFyZS4gSWYgc28sIHdlIGRvbnQgc2hvdyB0aGUgY2FsbCBiYW5uZXJcbiAgICBjb25zdCBpc01vbml0b3JpbmdMaXZlTG9jYXRpb24gPSB1c2VFdmVudEVtaXR0ZXJTdGF0ZShcbiAgICAgICAgT3duQmVhY29uU3RvcmUuaW5zdGFuY2UsXG4gICAgICAgIE93bkJlYWNvblN0b3JlRXZlbnQuTW9uaXRvcmluZ0xpdmVQb3NpdGlvbixcbiAgICAgICAgKCkgPT4gT3duQmVhY29uU3RvcmUuaW5zdGFuY2UuaXNNb25pdG9yaW5nTGl2ZUxvY2F0aW9uLFxuICAgICk7XG5cbiAgICBjb25zdCBsaXZlQmVhY29uSWRzID0gdXNlRXZlbnRFbWl0dGVyU3RhdGUoT3duQmVhY29uU3RvcmUuaW5zdGFuY2UsIE93bkJlYWNvblN0b3JlRXZlbnQuTGl2ZW5lc3NDaGFuZ2UsICgpID0+XG4gICAgICAgIE93bkJlYWNvblN0b3JlLmluc3RhbmNlLmdldExpdmVCZWFjb25JZHMocm9vbUlkKSxcbiAgICApO1xuXG4gICAgaWYgKGlzTW9uaXRvcmluZ0xpdmVMb2NhdGlvbiAmJiBsaXZlQmVhY29uSWRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY2FsbCBpcyBhbHJlYWR5IHNob3dpbmcuIE5vIGJhbm5lciBpcyBuZWVkZWQgaW4gdGhpcyBjYXNlLlxuICAgIGlmIChTZGtDb250ZXh0Q2xhc3MuaW5zdGFuY2Uucm9vbVZpZXdTdG9yZS5pc1ZpZXdpbmdDYWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gU3BsaXQgaW50byBvdXRlci9pbm5lciB0byBhdm9pZCB3YXRjaGluZyB2YXJpb3VzIHBhcnRzIGlmIHRoZXJlIGlzIG5vIGNhbGxcbiAgICAvLyBObyBiYW5uZXIgaWYgdGhlIGNhbGwgaXMgY29ubmVjdGVkIChvciBjb25uZWN0aW5nL2Rpc2Nvbm5lY3RpbmcpXG4gICAgaWYgKGNhbGwgIT09IG51bGwgJiYgY2FsbC5jb25uZWN0aW9uU3RhdGUgPT09IENvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIDxSb29tQ2FsbEJhbm5lcklubmVyIGNhbGw9e2NhbGwgYXMgRWxlbWVudENhbGx9IHJvb21JZD17cm9vbUlkfSAvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvb21DYWxsQmFubmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBSyxXQUFBLEdBQUFOLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxnQkFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsYUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksV0FBQSxHQUFBWixPQUFBO0FBQStELFNBQUFhLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFmLHdCQUFBZSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FB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QUFBLENBQUFxQixPQUFBLENBQUF3QyxhQUFBLENBQUNoRCxhQUFBLENBQUFtRCxlQUFlO0lBQUNDLE9BQU8sRUFBRWpDLElBQUksQ0FBQ2lDO0VBQVEsQ0FBRSxDQUN4QyxDQUFDLGVBRU5qRSxNQUFBLENBQUFxQixPQUFBLENBQUF3QyxhQUFBLENBQUN4RCxpQkFBQSxDQUFBZ0IsT0FBZ0I7SUFBQytCLE9BQU8sRUFBRWYsT0FBUTtJQUFDNkIsSUFBSSxFQUFDLFNBQVM7SUFBQ0MsT0FBTyxFQUFDLFFBQVE7SUFBQ0MsUUFBUSxFQUFFO0VBQU0sR0FDL0UsSUFBQUwsbUJBQUUsRUFBQyxhQUFhLENBQ0gsQ0FDakIsQ0FBQztBQUVkLENBQUM7QUFNRCxNQUFNTSxjQUErQixHQUFHQSxDQUFDO0VBQUVqQztBQUFPLENBQUMsS0FBSztFQUNwRCxNQUFNSixJQUFJLEdBQUcsSUFBQXNDLGdCQUFPLEVBQUNsQyxNQUFNLENBQUM7O0VBRTVCO0VBQ0EsTUFBTW1DLHdCQUF3QixHQUFHLElBQUFDLHFDQUFvQixFQUNqREMsOEJBQWMsQ0FBQ0MsUUFBUSxFQUN2QkMsbUNBQW1CLENBQUNDLHNCQUFzQixFQUMxQyxNQUFNSCw4QkFBYyxDQUFDQyxRQUFRLENBQUNILHdCQUNsQyxDQUFDO0VBRUQsTUFBTU0sYUFBYSxHQUFHLElBQUFMLHFDQUFvQixFQUFDQyw4QkFBYyxDQUFDQyxRQUFRLEVBQUVDLG1DQUFtQixDQUFDRyxjQUFjLEVBQUUsTUFDcEdMLDhCQUFjLENBQUNDLFFBQVEsQ0FBQ0ssZ0JBQWdCLENBQUMzQyxNQUFNLENBQ25ELENBQUM7RUFFRCxJQUFJbUMsd0JBQXdCLElBQUlNLGFBQWEsQ0FBQ0csTUFBTSxFQUFFO0lBQ2xELE9BQU8sSUFBSTtFQUNmOztFQUVBO0VBQ0EsSUFBSUMsMkJBQWUsQ0FBQ1AsUUFBUSxDQUFDUSxhQUFhLENBQUNDLGFBQWEsQ0FBQyxDQUFDLEVBQUU7SUFDeEQsT0FBTyxJQUFJO0VBQ2Y7O0VBRUE7RUFDQTtFQUNBLElBQUluRCxJQUFJLEtBQUssSUFBSSxJQUFJQSxJQUFJLENBQUNvRCxlQUFlLEtBQUtDLHFCQUFlLENBQUNDLFlBQVksRUFBRTtJQUN4RSxvQkFBT3RGLE1BQUEsQ0FBQXFCLE9BQUEsQ0FBQXdDLGFBQUEsQ0FBQzFCLG1CQUFtQjtNQUFDSCxJQUFJLEVBQUVBLElBQW9CO01BQUNJLE1BQU0sRUFBRUE7SUFBTyxDQUFFLENBQUM7RUFDN0U7RUFFQSxPQUFPLElBQUk7QUFDZixDQUFDO0FBQUMsSUFBQW1ELFFBQUEsR0FBQUMsT0FBQSxDQUFBbkUsT0FBQSxHQUVhZ0QsY0FBYyIsImlnbm9yZUxpc3QiOltdfQ==