matrix-react-sdk
Version:
SDK for matrix.org using React
206 lines (203 loc) • 29 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SdkContextClass = exports.SDKContext = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = require("react");
var _dispatcher = _interopRequireDefault(require("../dispatcher/dispatcher"));
var _LegacyCallHandler = _interopRequireDefault(require("../LegacyCallHandler"));
var _PosthogAnalytics = require("../PosthogAnalytics");
var _SlidingSyncManager = require("../SlidingSyncManager");
var _AccountPasswordStore = require("../stores/AccountPasswordStore");
var _MemberListStore = require("../stores/MemberListStore");
var _RoomNotificationStateStore = require("../stores/notifications/RoomNotificationStateStore");
var _RightPanelStore = _interopRequireDefault(require("../stores/right-panel/RightPanelStore"));
var _RoomViewStore = require("../stores/RoomViewStore");
var _SpaceStore = _interopRequireDefault(require("../stores/spaces/SpaceStore"));
var _TypingStore = _interopRequireDefault(require("../stores/TypingStore"));
var _UserProfilesStore = require("../stores/UserProfilesStore");
var _WidgetLayoutStore = require("../stores/widgets/WidgetLayoutStore");
var _WidgetPermissionStore = require("../stores/widgets/WidgetPermissionStore");
var _OidcClientStore = require("../stores/oidc/OidcClientStore");
var _WidgetStore = _interopRequireDefault(require("../stores/WidgetStore"));
var _voiceBroadcast = require("../voice-broadcast");
var _SdkContextClass;
/*
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.
*/
// This context is available to components under MatrixChat,
// the context must not be used by components outside a SdkContextClass tree.
// This assertion allows us to make the type not nullable.
const SDKContext = exports.SDKContext = /*#__PURE__*/(0, _react.createContext)(null);
SDKContext.displayName = "SDKContext";
/**
* A class which lazily initialises stores as and when they are requested, ensuring they remain
* as singletons scoped to this object.
*/
class SdkContextClass {
constructor() {
// Optional as we don't have a client on initial load if unregistered. This should be set
// when the MatrixClient is first acquired in the dispatcher event Action.OnLoggedIn.
// It is only safe to set this once, as updating this value will NOT notify components using
// this Context.
(0, _defineProperty2.default)(this, "client", void 0);
// All protected fields to make it easier to derive test stores
(0, _defineProperty2.default)(this, "_WidgetPermissionStore", void 0);
(0, _defineProperty2.default)(this, "_MemberListStore", void 0);
(0, _defineProperty2.default)(this, "_RightPanelStore", void 0);
(0, _defineProperty2.default)(this, "_RoomNotificationStateStore", void 0);
(0, _defineProperty2.default)(this, "_RoomViewStore", void 0);
(0, _defineProperty2.default)(this, "_WidgetLayoutStore", void 0);
(0, _defineProperty2.default)(this, "_WidgetStore", void 0);
(0, _defineProperty2.default)(this, "_PosthogAnalytics", void 0);
(0, _defineProperty2.default)(this, "_SlidingSyncManager", void 0);
(0, _defineProperty2.default)(this, "_SpaceStore", void 0);
(0, _defineProperty2.default)(this, "_LegacyCallHandler", void 0);
(0, _defineProperty2.default)(this, "_TypingStore", void 0);
(0, _defineProperty2.default)(this, "_VoiceBroadcastRecordingsStore", void 0);
(0, _defineProperty2.default)(this, "_VoiceBroadcastPreRecordingStore", void 0);
(0, _defineProperty2.default)(this, "_VoiceBroadcastPlaybacksStore", void 0);
(0, _defineProperty2.default)(this, "_AccountPasswordStore", void 0);
(0, _defineProperty2.default)(this, "_UserProfilesStore", void 0);
(0, _defineProperty2.default)(this, "_OidcClientStore", void 0);
}
/**
* Automatically construct stores which need to be created eagerly so they can register with
* the dispatcher.
*/
constructEagerStores() {
this._RoomViewStore = this.roomViewStore;
}
get legacyCallHandler() {
if (!this._LegacyCallHandler) {
this._LegacyCallHandler = _LegacyCallHandler.default.instance;
}
return this._LegacyCallHandler;
}
get rightPanelStore() {
if (!this._RightPanelStore) {
this._RightPanelStore = _RightPanelStore.default.instance;
}
return this._RightPanelStore;
}
get roomNotificationStateStore() {
if (!this._RoomNotificationStateStore) {
this._RoomNotificationStateStore = _RoomNotificationStateStore.RoomNotificationStateStore.instance;
}
return this._RoomNotificationStateStore;
}
get roomViewStore() {
if (!this._RoomViewStore) {
this._RoomViewStore = new _RoomViewStore.RoomViewStore(_dispatcher.default, this);
}
return this._RoomViewStore;
}
get widgetLayoutStore() {
if (!this._WidgetLayoutStore) {
this._WidgetLayoutStore = _WidgetLayoutStore.WidgetLayoutStore.instance;
}
return this._WidgetLayoutStore;
}
get widgetPermissionStore() {
if (!this._WidgetPermissionStore) {
this._WidgetPermissionStore = new _WidgetPermissionStore.WidgetPermissionStore(this);
}
return this._WidgetPermissionStore;
}
get widgetStore() {
if (!this._WidgetStore) {
this._WidgetStore = _WidgetStore.default.instance;
}
return this._WidgetStore;
}
get posthogAnalytics() {
if (!this._PosthogAnalytics) {
this._PosthogAnalytics = _PosthogAnalytics.PosthogAnalytics.instance;
}
return this._PosthogAnalytics;
}
get memberListStore() {
if (!this._MemberListStore) {
this._MemberListStore = new _MemberListStore.MemberListStore(this);
}
return this._MemberListStore;
}
get slidingSyncManager() {
if (!this._SlidingSyncManager) {
this._SlidingSyncManager = _SlidingSyncManager.SlidingSyncManager.instance;
}
return this._SlidingSyncManager;
}
get spaceStore() {
if (!this._SpaceStore) {
this._SpaceStore = _SpaceStore.default.instance;
}
return this._SpaceStore;
}
get typingStore() {
if (!this._TypingStore) {
this._TypingStore = new _TypingStore.default(this);
window.mxTypingStore = this._TypingStore;
}
return this._TypingStore;
}
get voiceBroadcastRecordingsStore() {
if (!this._VoiceBroadcastRecordingsStore) {
this._VoiceBroadcastRecordingsStore = new _voiceBroadcast.VoiceBroadcastRecordingsStore();
}
return this._VoiceBroadcastRecordingsStore;
}
get voiceBroadcastPreRecordingStore() {
if (!this._VoiceBroadcastPreRecordingStore) {
this._VoiceBroadcastPreRecordingStore = new _voiceBroadcast.VoiceBroadcastPreRecordingStore();
}
return this._VoiceBroadcastPreRecordingStore;
}
get voiceBroadcastPlaybacksStore() {
if (!this._VoiceBroadcastPlaybacksStore) {
this._VoiceBroadcastPlaybacksStore = new _voiceBroadcast.VoiceBroadcastPlaybacksStore(this.voiceBroadcastRecordingsStore);
}
return this._VoiceBroadcastPlaybacksStore;
}
get accountPasswordStore() {
if (!this._AccountPasswordStore) {
this._AccountPasswordStore = new _AccountPasswordStore.AccountPasswordStore();
}
return this._AccountPasswordStore;
}
get userProfilesStore() {
if (!this.client) {
throw new Error("Unable to create UserProfilesStore without a client");
}
if (!this._UserProfilesStore) {
this._UserProfilesStore = new _UserProfilesStore.UserProfilesStore(this.client);
}
return this._UserProfilesStore;
}
get oidcClientStore() {
if (!this.client) {
throw new Error("Unable to create OidcClientStore without a client");
}
if (!this._OidcClientStore) {
this._OidcClientStore = new _OidcClientStore.OidcClientStore(this.client);
}
return this._OidcClientStore;
}
onLoggedOut() {
this._UserProfilesStore = undefined;
}
}
exports.SdkContextClass = SdkContextClass;
_SdkContextClass = SdkContextClass;
/**
* The global SdkContextClass instance. This is a temporary measure whilst so many stores remain global
* as well. Over time, these stores should accept a `SdkContextClass` instance in their constructor.
* When all stores do this, this static variable can be deleted.
*/
(0, _defineProperty2.default)(SdkContextClass, "instance", new _SdkContextClass());
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX2Rpc3BhdGNoZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0xlZ2FjeUNhbGxIYW5kbGVyIiwiX1Bvc3Rob2dBbmFseXRpY3MiLCJfU2xpZGluZ1N5bmNNYW5hZ2VyIiwiX0FjY291bnRQYXNzd29yZFN0b3JlIiwiX01lbWJlckxpc3RTdG9yZSIsIl9Sb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSIsIl9SaWdodFBhbmVsU3RvcmUiLCJfUm9vbVZpZXdTdG9yZSIsIl9TcGFjZVN0b3JlIiwiX1R5cGluZ1N0b3JlIiwiX1VzZXJQcm9maWxlc1N0b3JlIiwiX1dpZGdldExheW91dFN0b3JlIiwiX1dpZGdldFBlcm1pc3Npb25TdG9yZSIsIl9PaWRjQ2xpZW50U3RvcmUiLCJfV2lkZ2V0U3RvcmUiLCJfdm9pY2VCcm9hZGNhc3QiLCJfU2RrQ29udGV4dENsYXNzIiwiU0RLQ29udGV4dCIsImV4cG9ydHMiLCJjcmVhdGVDb250ZXh0IiwiZGlzcGxheU5hbWUiLCJTZGtDb250ZXh0Q2xhc3MiLCJjb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiY29uc3RydWN0RWFnZXJTdG9yZXMiLCJyb29tVmlld1N0b3JlIiwibGVnYWN5Q2FsbEhhbmRsZXIiLCJMZWdhY3lDYWxsSGFuZGxlciIsImluc3RhbmNlIiwicmlnaHRQYW5lbFN0b3JlIiwiUmlnaHRQYW5lbFN0b3JlIiwicm9vbU5vdGlmaWNhdGlvblN0YXRlU3RvcmUiLCJSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSIsIlJvb21WaWV3U3RvcmUiLCJkZWZhdWx0RGlzcGF0Y2hlciIsIndpZGdldExheW91dFN0b3JlIiwiV2lkZ2V0TGF5b3V0U3RvcmUiLCJ3aWRnZXRQZXJtaXNzaW9uU3RvcmUiLCJXaWRnZXRQZXJtaXNzaW9uU3RvcmUiLCJ3aWRnZXRTdG9yZSIsIldpZGdldFN0b3JlIiwicG9zdGhvZ0FuYWx5dGljcyIsIlBvc3Rob2dBbmFseXRpY3MiLCJtZW1iZXJMaXN0U3RvcmUiLCJNZW1iZXJMaXN0U3RvcmUiLCJzbGlkaW5nU3luY01hbmFnZXIiLCJTbGlkaW5nU3luY01hbmFnZXIiLCJzcGFjZVN0b3JlIiwiU3BhY2VTdG9yZSIsInR5cGluZ1N0b3JlIiwiVHlwaW5nU3RvcmUiLCJ3aW5kb3ciLCJteFR5cGluZ1N0b3JlIiwidm9pY2VCcm9hZGNhc3RSZWNvcmRpbmdzU3RvcmUiLCJfVm9pY2VCcm9hZGNhc3RSZWNvcmRpbmdzU3RvcmUiLCJWb2ljZUJyb2FkY2FzdFJlY29yZGluZ3NTdG9yZSIsInZvaWNlQnJvYWRjYXN0UHJlUmVjb3JkaW5nU3RvcmUiLCJfVm9pY2VCcm9hZGNhc3RQcmVSZWNvcmRpbmdTdG9yZSIsIlZvaWNlQnJvYWRjYXN0UHJlUmVjb3JkaW5nU3RvcmUiLCJ2b2ljZUJyb2FkY2FzdFBsYXliYWNrc1N0b3JlIiwiX1ZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmUiLCJWb2ljZUJyb2FkY2FzdFBsYXliYWNrc1N0b3JlIiwiYWNjb3VudFBhc3N3b3JkU3RvcmUiLCJBY2NvdW50UGFzc3dvcmRTdG9yZSIsInVzZXJQcm9maWxlc1N0b3JlIiwiY2xpZW50IiwiRXJyb3IiLCJVc2VyUHJvZmlsZXNTdG9yZSIsIm9pZGNDbGllbnRTdG9yZSIsIk9pZGNDbGllbnRTdG9yZSIsIm9uTG9nZ2VkT3V0IiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRleHRzL1NES0NvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgTWF0cml4Q2xpZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgZGVmYXVsdERpc3BhdGNoZXIgZnJvbSBcIi4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IExlZ2FjeUNhbGxIYW5kbGVyIGZyb20gXCIuLi9MZWdhY3lDYWxsSGFuZGxlclwiO1xuaW1wb3J0IHsgUG9zdGhvZ0FuYWx5dGljcyB9IGZyb20gXCIuLi9Qb3N0aG9nQW5hbHl0aWNzXCI7XG5pbXBvcnQgeyBTbGlkaW5nU3luY01hbmFnZXIgfSBmcm9tIFwiLi4vU2xpZGluZ1N5bmNNYW5hZ2VyXCI7XG5pbXBvcnQgeyBBY2NvdW50UGFzc3dvcmRTdG9yZSB9IGZyb20gXCIuLi9zdG9yZXMvQWNjb3VudFBhc3N3b3JkU3RvcmVcIjtcbmltcG9ydCB7IE1lbWJlckxpc3RTdG9yZSB9IGZyb20gXCIuLi9zdG9yZXMvTWVtYmVyTGlzdFN0b3JlXCI7XG5pbXBvcnQgeyBSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSB9IGZyb20gXCIuLi9zdG9yZXMvbm90aWZpY2F0aW9ucy9Sb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZVwiO1xuaW1wb3J0IFJpZ2h0UGFuZWxTdG9yZSBmcm9tIFwiLi4vc3RvcmVzL3JpZ2h0LXBhbmVsL1JpZ2h0UGFuZWxTdG9yZVwiO1xuaW1wb3J0IHsgUm9vbVZpZXdTdG9yZSB9IGZyb20gXCIuLi9zdG9yZXMvUm9vbVZpZXdTdG9yZVwiO1xuaW1wb3J0IFNwYWNlU3RvcmUsIHsgU3BhY2VTdG9yZUNsYXNzIH0gZnJvbSBcIi4uL3N0b3Jlcy9zcGFjZXMvU3BhY2VTdG9yZVwiO1xuaW1wb3J0IFR5cGluZ1N0b3JlIGZyb20gXCIuLi9zdG9yZXMvVHlwaW5nU3RvcmVcIjtcbmltcG9ydCB7IFVzZXJQcm9maWxlc1N0b3JlIH0gZnJvbSBcIi4uL3N0b3Jlcy9Vc2VyUHJvZmlsZXNTdG9yZVwiO1xuaW1wb3J0IHsgV2lkZ2V0TGF5b3V0U3RvcmUgfSBmcm9tIFwiLi4vc3RvcmVzL3dpZGdldHMvV2lkZ2V0TGF5b3V0U3RvcmVcIjtcbmltcG9ydCB7IFdpZGdldFBlcm1pc3Npb25TdG9yZSB9IGZyb20gXCIuLi9zdG9yZXMvd2lkZ2V0cy9XaWRnZXRQZXJtaXNzaW9uU3RvcmVcIjtcbmltcG9ydCB7IE9pZGNDbGllbnRTdG9yZSB9IGZyb20gXCIuLi9zdG9yZXMvb2lkYy9PaWRjQ2xpZW50U3RvcmVcIjtcbmltcG9ydCBXaWRnZXRTdG9yZSBmcm9tIFwiLi4vc3RvcmVzL1dpZGdldFN0b3JlXCI7XG5pbXBvcnQge1xuICAgIFZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmUsXG4gICAgVm9pY2VCcm9hZGNhc3RQcmVSZWNvcmRpbmdTdG9yZSxcbiAgICBWb2ljZUJyb2FkY2FzdFJlY29yZGluZ3NTdG9yZSxcbn0gZnJvbSBcIi4uL3ZvaWNlLWJyb2FkY2FzdFwiO1xuXG4vLyBUaGlzIGNvbnRleHQgaXMgYXZhaWxhYmxlIHRvIGNvbXBvbmVudHMgdW5kZXIgTWF0cml4Q2hhdCxcbi8vIHRoZSBjb250ZXh0IG11c3Qgbm90IGJlIHVzZWQgYnkgY29tcG9uZW50cyBvdXRzaWRlIGEgU2RrQ29udGV4dENsYXNzIHRyZWUuXG4vLyBUaGlzIGFzc2VydGlvbiBhbGxvd3MgdXMgdG8gbWFrZSB0aGUgdHlwZSBub3QgbnVsbGFibGUuXG5leHBvcnQgY29uc3QgU0RLQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2RrQ29udGV4dENsYXNzPihudWxsIGFzIGFueSk7XG5TREtDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJTREtDb250ZXh0XCI7XG5cbi8qKlxuICogQSBjbGFzcyB3aGljaCBsYXppbHkgaW5pdGlhbGlzZXMgc3RvcmVzIGFzIGFuZCB3aGVuIHRoZXkgYXJlIHJlcXVlc3RlZCwgZW5zdXJpbmcgdGhleSByZW1haW5cbiAqIGFzIHNpbmdsZXRvbnMgc2NvcGVkIHRvIHRoaXMgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgU2RrQ29udGV4dENsYXNzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZ2xvYmFsIFNka0NvbnRleHRDbGFzcyBpbnN0YW5jZS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHdoaWxzdCBzbyBtYW55IHN0b3JlcyByZW1haW4gZ2xvYmFsXG4gICAgICogYXMgd2VsbC4gT3ZlciB0aW1lLCB0aGVzZSBzdG9yZXMgc2hvdWxkIGFjY2VwdCBhIGBTZGtDb250ZXh0Q2xhc3NgIGluc3RhbmNlIGluIHRoZWlyIGNvbnN0cnVjdG9yLlxuICAgICAqIFdoZW4gYWxsIHN0b3JlcyBkbyB0aGlzLCB0aGlzIHN0YXRpYyB2YXJpYWJsZSBjYW4gYmUgZGVsZXRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGluc3RhbmNlID0gbmV3IFNka0NvbnRleHRDbGFzcygpO1xuXG4gICAgLy8gT3B0aW9uYWwgYXMgd2UgZG9uJ3QgaGF2ZSBhIGNsaWVudCBvbiBpbml0aWFsIGxvYWQgaWYgdW5yZWdpc3RlcmVkLiBUaGlzIHNob3VsZCBiZSBzZXRcbiAgICAvLyB3aGVuIHRoZSBNYXRyaXhDbGllbnQgaXMgZmlyc3QgYWNxdWlyZWQgaW4gdGhlIGRpc3BhdGNoZXIgZXZlbnQgQWN0aW9uLk9uTG9nZ2VkSW4uXG4gICAgLy8gSXQgaXMgb25seSBzYWZlIHRvIHNldCB0aGlzIG9uY2UsIGFzIHVwZGF0aW5nIHRoaXMgdmFsdWUgd2lsbCBOT1Qgbm90aWZ5IGNvbXBvbmVudHMgdXNpbmdcbiAgICAvLyB0aGlzIENvbnRleHQuXG4gICAgcHVibGljIGNsaWVudD86IE1hdHJpeENsaWVudDtcblxuICAgIC8vIEFsbCBwcm90ZWN0ZWQgZmllbGRzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlcml2ZSB0ZXN0IHN0b3Jlc1xuICAgIHByb3RlY3RlZCBfV2lkZ2V0UGVybWlzc2lvblN0b3JlPzogV2lkZ2V0UGVybWlzc2lvblN0b3JlO1xuICAgIHByb3RlY3RlZCBfTWVtYmVyTGlzdFN0b3JlPzogTWVtYmVyTGlzdFN0b3JlO1xuICAgIHByb3RlY3RlZCBfUmlnaHRQYW5lbFN0b3JlPzogUmlnaHRQYW5lbFN0b3JlO1xuICAgIHByb3RlY3RlZCBfUm9vbU5vdGlmaWNhdGlvblN0YXRlU3RvcmU/OiBSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZTtcbiAgICBwcm90ZWN0ZWQgX1Jvb21WaWV3U3RvcmU/OiBSb29tVmlld1N0b3JlO1xuICAgIHByb3RlY3RlZCBfV2lkZ2V0TGF5b3V0U3RvcmU/OiBXaWRnZXRMYXlvdXRTdG9yZTtcbiAgICBwcm90ZWN0ZWQgX1dpZGdldFN0b3JlPzogV2lkZ2V0U3RvcmU7XG4gICAgcHJvdGVjdGVkIF9Qb3N0aG9nQW5hbHl0aWNzPzogUG9zdGhvZ0FuYWx5dGljcztcbiAgICBwcm90ZWN0ZWQgX1NsaWRpbmdTeW5jTWFuYWdlcj86IFNsaWRpbmdTeW5jTWFuYWdlcjtcbiAgICBwcm90ZWN0ZWQgX1NwYWNlU3RvcmU/OiBTcGFjZVN0b3JlQ2xhc3M7XG4gICAgcHJvdGVjdGVkIF9MZWdhY3lDYWxsSGFuZGxlcj86IExlZ2FjeUNhbGxIYW5kbGVyO1xuICAgIHByb3RlY3RlZCBfVHlwaW5nU3RvcmU/OiBUeXBpbmdTdG9yZTtcbiAgICBwcm90ZWN0ZWQgX1ZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nc1N0b3JlPzogVm9pY2VCcm9hZGNhc3RSZWNvcmRpbmdzU3RvcmU7XG4gICAgcHJvdGVjdGVkIF9Wb2ljZUJyb2FkY2FzdFByZVJlY29yZGluZ1N0b3JlPzogVm9pY2VCcm9hZGNhc3RQcmVSZWNvcmRpbmdTdG9yZTtcbiAgICBwcm90ZWN0ZWQgX1ZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmU/OiBWb2ljZUJyb2FkY2FzdFBsYXliYWNrc1N0b3JlO1xuICAgIHByb3RlY3RlZCBfQWNjb3VudFBhc3N3b3JkU3RvcmU/OiBBY2NvdW50UGFzc3dvcmRTdG9yZTtcbiAgICBwcm90ZWN0ZWQgX1VzZXJQcm9maWxlc1N0b3JlPzogVXNlclByb2ZpbGVzU3RvcmU7XG4gICAgcHJvdGVjdGVkIF9PaWRjQ2xpZW50U3RvcmU/OiBPaWRjQ2xpZW50U3RvcmU7XG5cbiAgICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IGNvbnN0cnVjdCBzdG9yZXMgd2hpY2ggbmVlZCB0byBiZSBjcmVhdGVkIGVhZ2VybHkgc28gdGhleSBjYW4gcmVnaXN0ZXIgd2l0aFxuICAgICAqIHRoZSBkaXNwYXRjaGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RFYWdlclN0b3JlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fUm9vbVZpZXdTdG9yZSA9IHRoaXMucm9vbVZpZXdTdG9yZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxlZ2FjeUNhbGxIYW5kbGVyKCk6IExlZ2FjeUNhbGxIYW5kbGVyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9MZWdhY3lDYWxsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5fTGVnYWN5Q2FsbEhhbmRsZXIgPSBMZWdhY3lDYWxsSGFuZGxlci5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fTGVnYWN5Q2FsbEhhbmRsZXI7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgcmlnaHRQYW5lbFN0b3JlKCk6IFJpZ2h0UGFuZWxTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5fUmlnaHRQYW5lbFN0b3JlKSB7XG4gICAgICAgICAgICB0aGlzLl9SaWdodFBhbmVsU3RvcmUgPSBSaWdodFBhbmVsU3RvcmUuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX1JpZ2h0UGFuZWxTdG9yZTtcbiAgICB9XG4gICAgcHVibGljIGdldCByb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSgpOiBSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5fUm9vbU5vdGlmaWNhdGlvblN0YXRlU3RvcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX1Jvb21Ob3RpZmljYXRpb25TdGF0ZVN0b3JlID0gUm9vbU5vdGlmaWNhdGlvblN0YXRlU3RvcmUuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX1Jvb21Ob3RpZmljYXRpb25TdGF0ZVN0b3JlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHJvb21WaWV3U3RvcmUoKTogUm9vbVZpZXdTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5fUm9vbVZpZXdTdG9yZSkge1xuICAgICAgICAgICAgdGhpcy5fUm9vbVZpZXdTdG9yZSA9IG5ldyBSb29tVmlld1N0b3JlKGRlZmF1bHREaXNwYXRjaGVyLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fUm9vbVZpZXdTdG9yZTtcbiAgICB9XG4gICAgcHVibGljIGdldCB3aWRnZXRMYXlvdXRTdG9yZSgpOiBXaWRnZXRMYXlvdXRTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5fV2lkZ2V0TGF5b3V0U3RvcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX1dpZGdldExheW91dFN0b3JlID0gV2lkZ2V0TGF5b3V0U3RvcmUuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX1dpZGdldExheW91dFN0b3JlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHdpZGdldFBlcm1pc3Npb25TdG9yZSgpOiBXaWRnZXRQZXJtaXNzaW9uU3RvcmUge1xuICAgICAgICBpZiAoIXRoaXMuX1dpZGdldFBlcm1pc3Npb25TdG9yZSkge1xuICAgICAgICAgICAgdGhpcy5fV2lkZ2V0UGVybWlzc2lvblN0b3JlID0gbmV3IFdpZGdldFBlcm1pc3Npb25TdG9yZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fV2lkZ2V0UGVybWlzc2lvblN0b3JlO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHdpZGdldFN0b3JlKCk6IFdpZGdldFN0b3JlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9XaWRnZXRTdG9yZSkge1xuICAgICAgICAgICAgdGhpcy5fV2lkZ2V0U3RvcmUgPSBXaWRnZXRTdG9yZS5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fV2lkZ2V0U3RvcmU7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgcG9zdGhvZ0FuYWx5dGljcygpOiBQb3N0aG9nQW5hbHl0aWNzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9Qb3N0aG9nQW5hbHl0aWNzKSB7XG4gICAgICAgICAgICB0aGlzLl9Qb3N0aG9nQW5hbHl0aWNzID0gUG9zdGhvZ0FuYWx5dGljcy5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fUG9zdGhvZ0FuYWx5dGljcztcbiAgICB9XG4gICAgcHVibGljIGdldCBtZW1iZXJMaXN0U3RvcmUoKTogTWVtYmVyTGlzdFN0b3JlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9NZW1iZXJMaXN0U3RvcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX01lbWJlckxpc3RTdG9yZSA9IG5ldyBNZW1iZXJMaXN0U3RvcmUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX01lbWJlckxpc3RTdG9yZTtcbiAgICB9XG4gICAgcHVibGljIGdldCBzbGlkaW5nU3luY01hbmFnZXIoKTogU2xpZGluZ1N5bmNNYW5hZ2VyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9TbGlkaW5nU3luY01hbmFnZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX1NsaWRpbmdTeW5jTWFuYWdlciA9IFNsaWRpbmdTeW5jTWFuYWdlci5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fU2xpZGluZ1N5bmNNYW5hZ2VyO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHNwYWNlU3RvcmUoKTogU3BhY2VTdG9yZUNsYXNzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9TcGFjZVN0b3JlKSB7XG4gICAgICAgICAgICB0aGlzLl9TcGFjZVN0b3JlID0gU3BhY2VTdG9yZS5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fU3BhY2VTdG9yZTtcbiAgICB9XG4gICAgcHVibGljIGdldCB0eXBpbmdTdG9yZSgpOiBUeXBpbmdTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5fVHlwaW5nU3RvcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX1R5cGluZ1N0b3JlID0gbmV3IFR5cGluZ1N0b3JlKHRoaXMpO1xuICAgICAgICAgICAgd2luZG93Lm14VHlwaW5nU3RvcmUgPSB0aGlzLl9UeXBpbmdTdG9yZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fVHlwaW5nU3RvcmU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2b2ljZUJyb2FkY2FzdFJlY29yZGluZ3NTdG9yZSgpOiBWb2ljZUJyb2FkY2FzdFJlY29yZGluZ3NTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5fVm9pY2VCcm9hZGNhc3RSZWNvcmRpbmdzU3RvcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX1ZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nc1N0b3JlID0gbmV3IFZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nc1N0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX1ZvaWNlQnJvYWRjYXN0UmVjb3JkaW5nc1N0b3JlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdm9pY2VCcm9hZGNhc3RQcmVSZWNvcmRpbmdTdG9yZSgpOiBWb2ljZUJyb2FkY2FzdFByZVJlY29yZGluZ1N0b3JlIHtcbiAgICAgICAgaWYgKCF0aGlzLl9Wb2ljZUJyb2FkY2FzdFByZVJlY29yZGluZ1N0b3JlKSB7XG4gICAgICAgICAgICB0aGlzLl9Wb2ljZUJyb2FkY2FzdFByZVJlY29yZGluZ1N0b3JlID0gbmV3IFZvaWNlQnJvYWRjYXN0UHJlUmVjb3JkaW5nU3RvcmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fVm9pY2VCcm9hZGNhc3RQcmVSZWNvcmRpbmdTdG9yZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZvaWNlQnJvYWRjYXN0UGxheWJhY2tzU3RvcmUoKTogVm9pY2VCcm9hZGNhc3RQbGF5YmFja3NTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5fVm9pY2VCcm9hZGNhc3RQbGF5YmFja3NTdG9yZSkge1xuICAgICAgICAgICAgdGhpcy5fVm9pY2VCcm9hZGNhc3RQbGF5YmFja3NTdG9yZSA9IG5ldyBWb2ljZUJyb2FkY2FzdFBsYXliYWNrc1N0b3JlKHRoaXMudm9pY2VCcm9hZGNhc3RSZWNvcmRpbmdzU3RvcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9Wb2ljZUJyb2FkY2FzdFBsYXliYWNrc1N0b3JlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWNjb3VudFBhc3N3b3JkU3RvcmUoKTogQWNjb3VudFBhc3N3b3JkU3RvcmUge1xuICAgICAgICBpZiAoIXRoaXMuX0FjY291bnRQYXNzd29yZFN0b3JlKSB7XG4gICAgICAgICAgICB0aGlzLl9BY2NvdW50UGFzc3dvcmRTdG9yZSA9IG5ldyBBY2NvdW50UGFzc3dvcmRTdG9yZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9BY2NvdW50UGFzc3dvcmRTdG9yZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVzZXJQcm9maWxlc1N0b3JlKCk6IFVzZXJQcm9maWxlc1N0b3JlIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsaWVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGNyZWF0ZSBVc2VyUHJvZmlsZXNTdG9yZSB3aXRob3V0IGEgY2xpZW50XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9Vc2VyUHJvZmlsZXNTdG9yZSkge1xuICAgICAgICAgICAgdGhpcy5fVXNlclByb2ZpbGVzU3RvcmUgPSBuZXcgVXNlclByb2ZpbGVzU3RvcmUodGhpcy5jbGllbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX1VzZXJQcm9maWxlc1N0b3JlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb2lkY0NsaWVudFN0b3JlKCk6IE9pZGNDbGllbnRTdG9yZSB7XG4gICAgICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBjcmVhdGUgT2lkY0NsaWVudFN0b3JlIHdpdGhvdXQgYSBjbGllbnRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX09pZGNDbGllbnRTdG9yZSkge1xuICAgICAgICAgICAgdGhpcy5fT2lkY0NsaWVudFN0b3JlID0gbmV3IE9pZGNDbGllbnRTdG9yZSh0aGlzLmNsaWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fT2lkY0NsaWVudFN0b3JlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkxvZ2dlZE91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fVXNlclByb2ZpbGVzU3RvcmUgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGtCQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxpQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssbUJBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLHFCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxnQkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsMkJBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGdCQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxXQUFBLEdBQUFULHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBWSxZQUFBLEdBQUFWLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFB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