UNPKG

matrix-react-sdk

Version:
157 lines (154 loc) 40.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = UserSettingsDialog; var _compoundWeb = require("@vector-im/compound-web"); var _react = _interopRequireWildcard(require("react")); var _userProfile = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/user-profile")); var _devices = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/devices")); var _visibilityOn = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/visibility-on")); var _notifications = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/notifications")); var _preferences = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/preferences")); var _keyboard = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/keyboard")); var _sidebar = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/sidebar")); var _micOn = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/mic-on")); var _lock = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/lock")); var _labs = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/labs")); var _block = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/block")); var _help = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/help")); var _TabbedView = _interopRequireWildcard(require("../../structures/TabbedView")); var _languageHandler = require("../../../languageHandler"); var _AccountUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/AccountUserSettingsTab")); var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore")); var _LabsUserSettingsTab = _interopRequireWildcard(require("../settings/tabs/user/LabsUserSettingsTab")); var _AppearanceUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/AppearanceUserSettingsTab")); var _SecurityUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/SecurityUserSettingsTab")); var _NotificationUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/NotificationUserSettingsTab")); var _PreferencesUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/PreferencesUserSettingsTab")); var _VoiceUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/VoiceUserSettingsTab")); var _HelpUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/HelpUserSettingsTab")); var _MjolnirUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/MjolnirUserSettingsTab")); var _UIFeature = require("../../../settings/UIFeature"); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); var _SidebarUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/SidebarUserSettingsTab")); var _KeyboardUserSettingsTab = _interopRequireDefault(require("../settings/tabs/user/KeyboardUserSettingsTab")); var _SessionManagerTab = _interopRequireDefault(require("../settings/tabs/user/SessionManagerTab")); var _UserTab = require("./UserTab"); var _SDKContext = require("../../../contexts/SDKContext"); var _useSettings = require("../../../hooks/useSettings"); var _ToastContext = require("../../../contexts/ToastContext"); 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 2019-2024 The Matrix.org Foundation C.I.C. Copyright 2019 New Vector Ltd SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ function titleForTabID(tabId) { const subs = { strong: sub => /*#__PURE__*/_react.default.createElement("span", { className: "mx_UserSettingsDialog_title_strong" }, sub) }; switch (tabId) { case _UserTab.UserTab.Account: return (0, _languageHandler._t)("settings|account|dialog_title", undefined, subs); case _UserTab.UserTab.SessionManager: return (0, _languageHandler._t)("settings|sessions|dialog_title", undefined, subs); case _UserTab.UserTab.Appearance: return (0, _languageHandler._t)("settings|appearance|dialog_title", undefined, subs); case _UserTab.UserTab.Notifications: return (0, _languageHandler._t)("settings|notifications|dialog_title", undefined, subs); case _UserTab.UserTab.Preferences: return (0, _languageHandler._t)("settings|preferences|dialog_title", undefined, subs); case _UserTab.UserTab.Keyboard: return (0, _languageHandler._t)("settings|keyboard|dialog_title", undefined, subs); case _UserTab.UserTab.Sidebar: return (0, _languageHandler._t)("settings|sidebar|dialog_title", undefined, subs); case _UserTab.UserTab.Voice: return (0, _languageHandler._t)("settings|voip|dialog_title", undefined, subs); case _UserTab.UserTab.Security: return (0, _languageHandler._t)("settings|security|dialog_title", undefined, subs); case _UserTab.UserTab.Labs: return (0, _languageHandler._t)("settings|labs|dialog_title", undefined, subs); case _UserTab.UserTab.Mjolnir: return (0, _languageHandler._t)("settings|labs_mjolnir|dialog_title", undefined, subs); case _UserTab.UserTab.Help: return (0, _languageHandler._t)("setting|help_about|dialog_title", undefined, subs); } } function UserSettingsDialog(props) { const voipEnabled = (0, _useSettings.useSettingValue)(_UIFeature.UIFeature.Voip); const mjolnirEnabled = (0, _useSettings.useSettingValue)("feature_mjolnir"); // store this prop in state as changing tabs back and forth should clear it const [showMsc4108QrCode, setShowMsc4108QrCode] = (0, _react.useState)(props.showMsc4108QrCode); const getTabs = () => { const tabs = []; tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Account, (0, _languageHandler._td)("settings|account|title"), /*#__PURE__*/_react.default.createElement(_userProfile.default, null), /*#__PURE__*/_react.default.createElement(_AccountUserSettingsTab.default, { closeSettingsFn: props.onFinished }), "UserSettingsGeneral")); tabs.push(new _TabbedView.Tab(_UserTab.UserTab.SessionManager, (0, _languageHandler._td)("settings|sessions|title"), /*#__PURE__*/_react.default.createElement(_devices.default, null), /*#__PURE__*/_react.default.createElement(_SessionManagerTab.default, { showMsc4108QrCode: showMsc4108QrCode }), undefined)); tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Appearance, (0, _languageHandler._td)("common|appearance"), /*#__PURE__*/_react.default.createElement(_visibilityOn.default, null), /*#__PURE__*/_react.default.createElement(_AppearanceUserSettingsTab.default, null), "UserSettingsAppearance")); tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Notifications, (0, _languageHandler._td)("notifications|enable_prompt_toast_title"), /*#__PURE__*/_react.default.createElement(_notifications.default, null), /*#__PURE__*/_react.default.createElement(_NotificationUserSettingsTab.default, null), "UserSettingsNotifications")); tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Preferences, (0, _languageHandler._td)("common|preferences"), /*#__PURE__*/_react.default.createElement(_preferences.default, null), /*#__PURE__*/_react.default.createElement(_PreferencesUserSettingsTab.default, { closeSettingsFn: props.onFinished }), "UserSettingsPreferences")); tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Keyboard, (0, _languageHandler._td)("settings|keyboard|title"), /*#__PURE__*/_react.default.createElement(_keyboard.default, null), /*#__PURE__*/_react.default.createElement(_KeyboardUserSettingsTab.default, null), "UserSettingsKeyboard")); tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Sidebar, (0, _languageHandler._td)("settings|sidebar|title"), /*#__PURE__*/_react.default.createElement(_sidebar.default, null), /*#__PURE__*/_react.default.createElement(_SidebarUserSettingsTab.default, null), "UserSettingsSidebar")); if (voipEnabled) { tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Voice, (0, _languageHandler._td)("settings|voip|title"), /*#__PURE__*/_react.default.createElement(_micOn.default, null), /*#__PURE__*/_react.default.createElement(_VoiceUserSettingsTab.default, null), "UserSettingsVoiceVideo")); } tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Security, (0, _languageHandler._td)("room_settings|security|title"), /*#__PURE__*/_react.default.createElement(_lock.default, null), /*#__PURE__*/_react.default.createElement(_SecurityUserSettingsTab.default, { closeSettingsFn: props.onFinished }), "UserSettingsSecurityPrivacy")); if ((0, _LabsUserSettingsTab.showLabsFlags)() || _SettingsStore.default.getFeatureSettingNames().some(k => _SettingsStore.default.getBetaInfo(k))) { tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Labs, (0, _languageHandler._td)("common|labs"), /*#__PURE__*/_react.default.createElement(_labs.default, null), /*#__PURE__*/_react.default.createElement(_LabsUserSettingsTab.default, null), "UserSettingsLabs")); } if (mjolnirEnabled) { tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Mjolnir, (0, _languageHandler._td)("labs_mjolnir|title"), /*#__PURE__*/_react.default.createElement(_block.default, null), /*#__PURE__*/_react.default.createElement(_MjolnirUserSettingsTab.default, null), "UserSettingMjolnir")); } tabs.push(new _TabbedView.Tab(_UserTab.UserTab.Help, (0, _languageHandler._td)("setting|help_about|title"), /*#__PURE__*/_react.default.createElement(_help.default, null), /*#__PURE__*/_react.default.createElement(_HelpUserSettingsTab.default, null), "UserSettingsHelpAbout")); return tabs; }; const [activeTabId, _setActiveTabId] = (0, _TabbedView.useActiveTabWithDefault)(getTabs(), _UserTab.UserTab.Account, props.initialTabId); const setActiveTabId = tabId => { _setActiveTabId(tabId); // Clear this so switching away from the tab and back to it will not show the QR code again setShowMsc4108QrCode(false); }; const [activeToast, toastRack] = (0, _ToastContext.useActiveToast)(); return ( /*#__PURE__*/ // XXX: SDKContext is provided within the LoggedInView subtree. // Modals function outside the MatrixChat React tree, so sdkContext is reprovided here to simulate that. // The longer term solution is to move our ModalManager into the React tree to inherit contexts properly. _react.default.createElement(_SDKContext.SDKContext.Provider, { value: props.sdkContext }, /*#__PURE__*/_react.default.createElement(_ToastContext.ToastContext.Provider, { value: toastRack }, /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { className: "mx_UserSettingsDialog", hasCancel: true, onFinished: props.onFinished, title: titleForTabID(activeTabId), titleClass: "mx_UserSettingsDialog_title" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsDialog_content" }, /*#__PURE__*/_react.default.createElement(_TabbedView.default, { tabs: getTabs(), activeTabId: activeTabId, screenName: "UserSettings", onChange: setActiveTabId, responsive: true })), /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsDialog_toastContainer" }, activeToast && /*#__PURE__*/_react.default.createElement(_compoundWeb.Toast, null, activeToast))))) ); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tcG91bmRXZWIiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdXNlclByb2ZpbGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2RldmljZXMiLCJfdmlzaWJpbGl0eU9uIiwiX25vdGlmaWNhdGlvbnMiLCJfcHJlZmVyZW5jZXMiLCJfa2V5Ym9hcmQiLCJfc2lkZWJhciIsIl9taWNPbiIsIl9sb2NrIiwiX2xhYnMiLCJfYmxvY2siLCJfaGVscCIsIl9UYWJiZWRWaWV3IiwiX2xhbmd1YWdlSGFuZGxlciIsIl9BY2NvdW50VXNlclNldHRpbmdzVGFiIiwiX1NldHRpbmdzU3RvcmUiLCJfTGFic1VzZXJTZXR0aW5nc1RhYiIsIl9BcHBlYXJhbmNlVXNlclNldHRpbmdzVGFiIiwiX1NlY3VyaXR5VXNlclNldHRpbmdzVGFiIiwiX05vdGlmaWNhdGlvblVzZXJTZXR0aW5nc1RhYiIsIl9QcmVmZXJlbmNlc1VzZXJTZXR0aW5nc1RhYiIsIl9Wb2ljZVVzZXJTZXR0aW5nc1RhYiIsIl9IZWxwVXNlclNldHRpbmdzVGFiIiwiX01qb2xuaXJVc2VyU2V0dGluZ3NUYWIiLCJfVUlGZWF0dXJlIiwiX0Jhc2VEaWFsb2ciLCJfU2lkZWJhclVzZXJTZXR0aW5nc1RhYiIsIl9LZXlib2FyZFVzZXJTZXR0aW5nc1RhYiIsIl9TZXNzaW9uTWFuYWdlclRhYiIsIl9Vc2VyVGFiIiwiX1NES0NvbnRleHQiLCJfdXNlU2V0dGluZ3MiLCJfVG9hc3RDb250ZXh0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwidGl0bGVGb3JUYWJJRCIsInRhYklkIiwic3VicyIsInN0cm9uZyIsInN1YiIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJVc2VyVGFiIiwiQWNjb3VudCIsIl90IiwidW5kZWZpbmVkIiwiU2Vzc2lvbk1hbmFnZXIiLCJBcHBlYXJhbmNlIiwiTm90aWZpY2F0aW9ucyIsIlByZWZlcmVuY2VzIiwiS2V5Ym9hcmQiLCJTaWRlYmFyIiwiVm9pY2UiLCJTZWN1cml0eSIsIkxhYnMiLCJNam9sbmlyIiwiSGVscCIsIlVzZXJTZXR0aW5nc0RpYWxvZyIsInByb3BzIiwidm9pcEVuYWJsZWQiLCJ1c2VTZXR0aW5nVmFsdWUiLCJVSUZlYXR1cmUiLCJWb2lwIiwibWpvbG5pckVuYWJsZWQiLCJzaG93TXNjNDEwOFFyQ29kZSIsInNldFNob3dNc2M0MTA4UXJDb2RlIiwidXNlU3RhdGUiLCJnZXRUYWJzIiwidGFicyIsInB1c2giLCJUYWIiLCJfdGQiLCJjbG9zZVNldHRpbmdzRm4iLCJvbkZpbmlzaGVkIiwic2hvd0xhYnNGbGFncyIsIlNldHRpbmdzU3RvcmUiLCJnZXRGZWF0dXJlU2V0dGluZ05hbWVzIiwic29tZSIsImsiLCJnZXRCZXRhSW5mbyIsImFjdGl2ZVRhYklkIiwiX3NldEFjdGl2ZVRhYklkIiwidXNlQWN0aXZlVGFiV2l0aERlZmF1bHQiLCJpbml0aWFsVGFiSWQiLCJzZXRBY3RpdmVUYWJJZCIsImFjdGl2ZVRvYXN0IiwidG9hc3RSYWNrIiwidXNlQWN0aXZlVG9hc3QiLCJTREtDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsInNka0NvbnRleHQiLCJUb2FzdENvbnRleHQiLCJoYXNDYW5jZWwiLCJ0aXRsZSIsInRpdGxlQ2xhc3MiLCJzY3JlZW5OYW1lIiwib25DaGFuZ2UiLCJyZXNwb25zaXZlIiwiVG9hc3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL1VzZXJTZXR0aW5nc0RpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTktMjAyNCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuQ29weXJpZ2h0IDIwMTkgTmV3IFZlY3RvciBMdGRcblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgVG9hc3QgfSBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC13ZWJcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFVzZXJQcm9maWxlSWNvbiBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC1kZXNpZ24tdG9rZW5zL2Fzc2V0cy93ZWIvaWNvbnMvdXNlci1wcm9maWxlXCI7XG5pbXBvcnQgRGV2aWNlc0ljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL2RldmljZXNcIjtcbmltcG9ydCBWaXNpYmlsaXR5T25JY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy92aXNpYmlsaXR5LW9uXCI7XG5pbXBvcnQgTm90aWZpY2F0aW9uc0ljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL25vdGlmaWNhdGlvbnNcIjtcbmltcG9ydCBQcmVmZXJlbmNlc0ljb24gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtZGVzaWduLXRva2Vucy9hc3NldHMvd2ViL2ljb25zL3ByZWZlcmVuY2VzXCI7XG5pbXBvcnQgS2V5Ym9hcmRJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9rZXlib2FyZFwiO1xuaW1wb3J0IFNpZGViYXJJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9zaWRlYmFyXCI7XG5pbXBvcnQgTWljT25JY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9taWMtb25cIjtcbmltcG9ydCBMb2NrSWNvbiBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC1kZXNpZ24tdG9rZW5zL2Fzc2V0cy93ZWIvaWNvbnMvbG9ja1wiO1xuaW1wb3J0IExhYnNJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9sYWJzXCI7XG5pbXBvcnQgQmxvY2tJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9ibG9ja1wiO1xuaW1wb3J0IEhlbHBJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9oZWxwXCI7XG5cbmltcG9ydCBUYWJiZWRWaWV3LCB7IFRhYiwgdXNlQWN0aXZlVGFiV2l0aERlZmF1bHQgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlcy9UYWJiZWRWaWV3XCI7XG5pbXBvcnQgeyBfdCwgX3RkIH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IEFjY291bnRVc2VyU2V0dGluZ3NUYWIgZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvdXNlci9BY2NvdW50VXNlclNldHRpbmdzVGFiXCI7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3NTdG9yZVwiO1xuaW1wb3J0IExhYnNVc2VyU2V0dGluZ3NUYWIsIHsgc2hvd0xhYnNGbGFncyB9IGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3VzZXIvTGFic1VzZXJTZXR0aW5nc1RhYlwiO1xuaW1wb3J0IEFwcGVhcmFuY2VVc2VyU2V0dGluZ3NUYWIgZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvdXNlci9BcHBlYXJhbmNlVXNlclNldHRpbmdzVGFiXCI7XG5pbXBvcnQgU2VjdXJpdHlVc2VyU2V0dGluZ3NUYWIgZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvdXNlci9TZWN1cml0eVVzZXJTZXR0aW5nc1RhYlwiO1xuaW1wb3J0IE5vdGlmaWNhdGlvblVzZXJTZXR0aW5nc1RhYiBmcm9tIFwiLi4vc2V0dGluZ3MvdGFicy91c2VyL05vdGlmaWNhdGlvblVzZXJTZXR0aW5nc1RhYlwiO1xuaW1wb3J0IFByZWZlcmVuY2VzVXNlclNldHRpbmdzVGFiIGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3VzZXIvUHJlZmVyZW5jZXNVc2VyU2V0dGluZ3NUYWJcIjtcbmltcG9ydCBWb2ljZVVzZXJTZXR0aW5nc1RhYiBmcm9tIFwiLi4vc2V0dGluZ3MvdGFicy91c2VyL1ZvaWNlVXNlclNldHRpbmdzVGFiXCI7XG5pbXBvcnQgSGVscFVzZXJTZXR0aW5nc1RhYiBmcm9tIFwiLi4vc2V0dGluZ3MvdGFicy91c2VyL0hlbHBVc2VyU2V0dGluZ3NUYWJcIjtcbmltcG9ydCBNam9sbmlyVXNlclNldHRpbmdzVGFiIGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3VzZXIvTWpvbG5pclVzZXJTZXR0aW5nc1RhYlwiO1xuaW1wb3J0IHsgVUlGZWF0dXJlIH0gZnJvbSBcIi4uLy4uLy4uL3NldHRpbmdzL1VJRmVhdHVyZVwiO1xuaW1wb3J0IEJhc2VEaWFsb2cgZnJvbSBcIi4vQmFzZURpYWxvZ1wiO1xuaW1wb3J0IFNpZGViYXJVc2VyU2V0dGluZ3NUYWIgZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvdXNlci9TaWRlYmFyVXNlclNldHRpbmdzVGFiXCI7XG5pbXBvcnQgS2V5Ym9hcmRVc2VyU2V0dGluZ3NUYWIgZnJvbSBcIi4uL3NldHRpbmdzL3RhYnMvdXNlci9LZXlib2FyZFVzZXJTZXR0aW5nc1RhYlwiO1xuaW1wb3J0IFNlc3Npb25NYW5hZ2VyVGFiIGZyb20gXCIuLi9zZXR0aW5ncy90YWJzL3VzZXIvU2Vzc2lvbk1hbmFnZXJUYWJcIjtcbmltcG9ydCB7IFVzZXJUYWIgfSBmcm9tIFwiLi9Vc2VyVGFiXCI7XG5pbXBvcnQgeyBOb25FbXB0eUFycmF5IH0gZnJvbSBcIi4uLy4uLy4uL0B0eXBlcy9jb21tb25cIjtcbmltcG9ydCB7IFNES0NvbnRleHQsIFNka0NvbnRleHRDbGFzcyB9IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9TREtDb250ZXh0XCI7XG5pbXBvcnQgeyB1c2VTZXR0aW5nVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlU2V0dGluZ3NcIjtcbmltcG9ydCB7IFRvYXN0Q29udGV4dCwgdXNlQWN0aXZlVG9hc3QgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvVG9hc3RDb250ZXh0XCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIGluaXRpYWxUYWJJZD86IFVzZXJUYWI7XG4gICAgc2hvd01zYzQxMDhRckNvZGU/OiBib29sZWFuO1xuICAgIHNka0NvbnRleHQ6IFNka0NvbnRleHRDbGFzcztcbiAgICBvbkZpbmlzaGVkKCk6IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIHRpdGxlRm9yVGFiSUQodGFiSWQ6IFVzZXJUYWIpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgIGNvbnN0IHN1YnMgPSB7XG4gICAgICAgIHN0cm9uZzogKHN1Yjogc3RyaW5nKSA9PiA8c3BhbiBjbGFzc05hbWU9XCJteF9Vc2VyU2V0dGluZ3NEaWFsb2dfdGl0bGVfc3Ryb25nXCI+e3N1Yn08L3NwYW4+LFxuICAgIH07XG4gICAgc3dpdGNoICh0YWJJZCkge1xuICAgICAgICBjYXNlIFVzZXJUYWIuQWNjb3VudDpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfGFjY291bnR8ZGlhbG9nX3RpdGxlXCIsIHVuZGVmaW5lZCwgc3Vicyk7XG4gICAgICAgIGNhc2UgVXNlclRhYi5TZXNzaW9uTWFuYWdlcjpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfHNlc3Npb25zfGRpYWxvZ190aXRsZVwiLCB1bmRlZmluZWQsIHN1YnMpO1xuICAgICAgICBjYXNlIFVzZXJUYWIuQXBwZWFyYW5jZTpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfGFwcGVhcmFuY2V8ZGlhbG9nX3RpdGxlXCIsIHVuZGVmaW5lZCwgc3Vicyk7XG4gICAgICAgIGNhc2UgVXNlclRhYi5Ob3RpZmljYXRpb25zOlxuICAgICAgICAgICAgcmV0dXJuIF90KFwic2V0dGluZ3N8bm90aWZpY2F0aW9uc3xkaWFsb2dfdGl0bGVcIiwgdW5kZWZpbmVkLCBzdWJzKTtcbiAgICAgICAgY2FzZSBVc2VyVGFiLlByZWZlcmVuY2VzOlxuICAgICAgICAgICAgcmV0dXJuIF90KFwic2V0dGluZ3N8cHJlZmVyZW5jZXN8ZGlhbG9nX3RpdGxlXCIsIHVuZGVmaW5lZCwgc3Vicyk7XG4gICAgICAgIGNhc2UgVXNlclRhYi5LZXlib2FyZDpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfGtleWJvYXJkfGRpYWxvZ190aXRsZVwiLCB1bmRlZmluZWQsIHN1YnMpO1xuICAgICAgICBjYXNlIFVzZXJUYWIuU2lkZWJhcjpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfHNpZGViYXJ8ZGlhbG9nX3RpdGxlXCIsIHVuZGVmaW5lZCwgc3Vicyk7XG4gICAgICAgIGNhc2UgVXNlclRhYi5Wb2ljZTpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfHZvaXB8ZGlhbG9nX3RpdGxlXCIsIHVuZGVmaW5lZCwgc3Vicyk7XG4gICAgICAgIGNhc2UgVXNlclRhYi5TZWN1cml0eTpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfHNlY3VyaXR5fGRpYWxvZ190aXRsZVwiLCB1bmRlZmluZWQsIHN1YnMpO1xuICAgICAgICBjYXNlIFVzZXJUYWIuTGFiczpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmdzfGxhYnN8ZGlhbG9nX3RpdGxlXCIsIHVuZGVmaW5lZCwgc3Vicyk7XG4gICAgICAgIGNhc2UgVXNlclRhYi5Nam9sbmlyOlxuICAgICAgICAgICAgcmV0dXJuIF90KFwic2V0dGluZ3N8bGFic19tam9sbmlyfGRpYWxvZ190aXRsZVwiLCB1bmRlZmluZWQsIHN1YnMpO1xuICAgICAgICBjYXNlIFVzZXJUYWIuSGVscDpcbiAgICAgICAgICAgIHJldHVybiBfdChcInNldHRpbmd8aGVscF9hYm91dHxkaWFsb2dfdGl0bGVcIiwgdW5kZWZpbmVkLCBzdWJzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFVzZXJTZXR0aW5nc0RpYWxvZyhwcm9wczogSVByb3BzKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHZvaXBFbmFibGVkID0gdXNlU2V0dGluZ1ZhbHVlPGJvb2xlYW4+KFVJRmVhdHVyZS5Wb2lwKTtcbiAgICBjb25zdCBtam9sbmlyRW5hYmxlZCA9IHVzZVNldHRpbmdWYWx1ZTxib29sZWFuPihcImZlYXR1cmVfbWpvbG5pclwiKTtcbiAgICAvLyBzdG9yZSB0aGlzIHByb3AgaW4gc3RhdGUgYXMgY2hhbmdpbmcgdGFicyBiYWNrIGFuZCBmb3J0aCBzaG91bGQgY2xlYXIgaXRcbiAgICBjb25zdCBbc2hvd01zYzQxMDhRckNvZGUsIHNldFNob3dNc2M0MTA4UXJDb2RlXSA9IHVzZVN0YXRlKHByb3BzLnNob3dNc2M0MTA4UXJDb2RlKTtcblxuICAgIGNvbnN0IGdldFRhYnMgPSAoKTogTm9uRW1wdHlBcnJheTxUYWI8VXNlclRhYj4+ID0+IHtcbiAgICAgICAgY29uc3QgdGFiczogVGFiPFVzZXJUYWI+W10gPSBbXTtcblxuICAgICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICBuZXcgVGFiKFxuICAgICAgICAgICAgICAgIFVzZXJUYWIuQWNjb3VudCxcbiAgICAgICAgICAgICAgICBfdGQoXCJzZXR0aW5nc3xhY2NvdW50fHRpdGxlXCIpLFxuICAgICAgICAgICAgICAgIDxVc2VyUHJvZmlsZUljb24gLz4sXG4gICAgICAgICAgICAgICAgPEFjY291bnRVc2VyU2V0dGluZ3NUYWIgY2xvc2VTZXR0aW5nc0ZuPXtwcm9wcy5vbkZpbmlzaGVkfSAvPixcbiAgICAgICAgICAgICAgICBcIlVzZXJTZXR0aW5nc0dlbmVyYWxcIixcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgIG5ldyBUYWIoXG4gICAgICAgICAgICAgICAgVXNlclRhYi5TZXNzaW9uTWFuYWdlcixcbiAgICAgICAgICAgICAgICBfdGQoXCJzZXR0aW5nc3xzZXNzaW9uc3x0aXRsZVwiKSxcbiAgICAgICAgICAgICAgICA8RGV2aWNlc0ljb24gLz4sXG4gICAgICAgICAgICAgICAgPFNlc3Npb25NYW5hZ2VyVGFiIHNob3dNc2M0MTA4UXJDb2RlPXtzaG93TXNjNDEwOFFyQ29kZX0gLz4sXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgICAgbmV3IFRhYihcbiAgICAgICAgICAgICAgICBVc2VyVGFiLkFwcGVhcmFuY2UsXG4gICAgICAgICAgICAgICAgX3RkKFwiY29tbW9ufGFwcGVhcmFuY2VcIiksXG4gICAgICAgICAgICAgICAgPFZpc2liaWxpdHlPbkljb24gLz4sXG4gICAgICAgICAgICAgICAgPEFwcGVhcmFuY2VVc2VyU2V0dGluZ3NUYWIgLz4sXG4gICAgICAgICAgICAgICAgXCJVc2VyU2V0dGluZ3NBcHBlYXJhbmNlXCIsXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICBuZXcgVGFiKFxuICAgICAgICAgICAgICAgIFVzZXJUYWIuTm90aWZpY2F0aW9ucyxcbiAgICAgICAgICAgICAgICBfdGQoXCJub3RpZmljYXRpb25zfGVuYWJsZV9wcm9tcHRfdG9hc3RfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvbnNJY29uIC8+LFxuICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25Vc2VyU2V0dGluZ3NUYWIgLz4sXG4gICAgICAgICAgICAgICAgXCJVc2VyU2V0dGluZ3NOb3RpZmljYXRpb25zXCIsXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICBuZXcgVGFiKFxuICAgICAgICAgICAgICAgIFVzZXJUYWIuUHJlZmVyZW5jZXMsXG4gICAgICAgICAgICAgICAgX3RkKFwiY29tbW9ufHByZWZlcmVuY2VzXCIpLFxuICAgICAgICAgICAgICAgIDxQcmVmZXJlbmNlc0ljb24gLz4sXG4gICAgICAgICAgICAgICAgPFByZWZlcmVuY2VzVXNlclNldHRpbmdzVGFiIGNsb3NlU2V0dGluZ3NGbj17cHJvcHMub25GaW5pc2hlZH0gLz4sXG4gICAgICAgICAgICAgICAgXCJVc2VyU2V0dGluZ3NQcmVmZXJlbmNlc1wiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgICAgbmV3IFRhYihcbiAgICAgICAgICAgICAgICBVc2VyVGFiLktleWJvYXJkLFxuICAgICAgICAgICAgICAgIF90ZChcInNldHRpbmdzfGtleWJvYXJkfHRpdGxlXCIpLFxuICAgICAgICAgICAgICAgIDxLZXlib2FyZEljb24gLz4sXG4gICAgICAgICAgICAgICAgPEtleWJvYXJkVXNlclNldHRpbmdzVGFiIC8+LFxuICAgICAgICAgICAgICAgIFwiVXNlclNldHRpbmdzS2V5Ym9hcmRcIixcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgIG5ldyBUYWIoXG4gICAgICAgICAgICAgICAgVXNlclRhYi5TaWRlYmFyLFxuICAgICAgICAgICAgICAgIF90ZChcInNldHRpbmdzfHNpZGViYXJ8dGl0bGVcIiksXG4gICAgICAgICAgICAgICAgPFNpZGViYXJJY29uIC8+LFxuICAgICAgICAgICAgICAgIDxTaWRlYmFyVXNlclNldHRpbmdzVGFiIC8+LFxuICAgICAgICAgICAgICAgIFwiVXNlclNldHRpbmdzU2lkZWJhclwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodm9pcEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgVGFiKFxuICAgICAgICAgICAgICAgICAgICBVc2VyVGFiLlZvaWNlLFxuICAgICAgICAgICAgICAgICAgICBfdGQoXCJzZXR0aW5nc3x2b2lwfHRpdGxlXCIpLFxuICAgICAgICAgICAgICAgICAgICA8TWljT25JY29uIC8+LFxuICAgICAgICAgICAgICAgICAgICA8Vm9pY2VVc2VyU2V0dGluZ3NUYWIgLz4sXG4gICAgICAgICAgICAgICAgICAgIFwiVXNlclNldHRpbmdzVm9pY2VWaWRlb1wiLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgICAgbmV3IFRhYihcbiAgICAgICAgICAgICAgICBVc2VyVGFiLlNlY3VyaXR5LFxuICAgICAgICAgICAgICAgIF90ZChcInJvb21fc2V0dGluZ3N8c2VjdXJpdHl8dGl0bGVcIiksXG4gICAgICAgICAgICAgICAgPExvY2tJY29uIC8+LFxuICAgICAgICAgICAgICAgIDxTZWN1cml0eVVzZXJTZXR0aW5nc1RhYiBjbG9zZVNldHRpbmdzRm49e3Byb3BzLm9uRmluaXNoZWR9IC8+LFxuICAgICAgICAgICAgICAgIFwiVXNlclNldHRpbmdzU2VjdXJpdHlQcml2YWN5XCIsXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChzaG93TGFic0ZsYWdzKCkgfHwgU2V0dGluZ3NTdG9yZS5nZXRGZWF0dXJlU2V0dGluZ05hbWVzKCkuc29tZSgoaykgPT4gU2V0dGluZ3NTdG9yZS5nZXRCZXRhSW5mbyhrKSkpIHtcbiAgICAgICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgVGFiKFVzZXJUYWIuTGFicywgX3RkKFwiY29tbW9ufGxhYnNcIiksIDxMYWJzSWNvbiAvPiwgPExhYnNVc2VyU2V0dGluZ3NUYWIgLz4sIFwiVXNlclNldHRpbmdzTGFic1wiKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1qb2xuaXJFbmFibGVkKSB7XG4gICAgICAgICAgICB0YWJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFRhYihcbiAgICAgICAgICAgICAgICAgICAgVXNlclRhYi5Nam9sbmlyLFxuICAgICAgICAgICAgICAgICAgICBfdGQoXCJsYWJzX21qb2xuaXJ8dGl0bGVcIiksXG4gICAgICAgICAgICAgICAgICAgIDxCbG9ja0ljb24gLz4sXG4gICAgICAgICAgICAgICAgICAgIDxNam9sbmlyVXNlclNldHRpbmdzVGFiIC8+LFxuICAgICAgICAgICAgICAgICAgICBcIlVzZXJTZXR0aW5nTWpvbG5pclwiLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRhYnMucHVzaChcbiAgICAgICAgICAgIG5ldyBUYWIoXG4gICAgICAgICAgICAgICAgVXNlclRhYi5IZWxwLFxuICAgICAgICAgICAgICAgIF90ZChcInNldHRpbmd8aGVscF9hYm91dHx0aXRsZVwiKSxcbiAgICAgICAgICAgICAgICA8SGVscEljb24gLz4sXG4gICAgICAgICAgICAgICAgPEhlbHBVc2VyU2V0dGluZ3NUYWIgLz4sXG4gICAgICAgICAgICAgICAgXCJVc2VyU2V0dGluZ3NIZWxwQWJvdXRcIixcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRhYnMgYXMgTm9uRW1wdHlBcnJheTxUYWI8VXNlclRhYj4+O1xuICAgIH07XG5cbiAgICBjb25zdCBbYWN0aXZlVGFiSWQsIF9zZXRBY3RpdmVUYWJJZF0gPSB1c2VBY3RpdmVUYWJXaXRoRGVmYXVsdChnZXRUYWJzKCksIFVzZXJUYWIuQWNjb3VudCwgcHJvcHMuaW5pdGlhbFRhYklkKTtcbiAgICBjb25zdCBzZXRBY3RpdmVUYWJJZCA9ICh0YWJJZDogVXNlclRhYik6IHZvaWQgPT4ge1xuICAgICAgICBfc2V0QWN0aXZlVGFiSWQodGFiSWQpO1xuICAgICAgICAvLyBDbGVhciB0aGlzIHNvIHN3aXRjaGluZyBhd2F5IGZyb20gdGhlIHRhYiBhbmQgYmFjayB0byBpdCB3aWxsIG5vdCBzaG93IHRoZSBRUiBjb2RlIGFnYWluXG4gICAgICAgIHNldFNob3dNc2M0MTA4UXJDb2RlKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgW2FjdGl2ZVRvYXN0LCB0b2FzdFJhY2tdID0gdXNlQWN0aXZlVG9hc3QoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIC8vIFhYWDogU0RLQ29udGV4dCBpcyBwcm92aWRlZCB3aXRoaW4gdGhlIExvZ2dlZEluVmlldyBzdWJ0cmVlLlxuICAgICAgICAvLyBNb2RhbHMgZnVuY3Rpb24gb3V0c2lkZSB0aGUgTWF0cml4Q2hhdCBSZWFjdCB0cmVlLCBzbyBzZGtDb250ZXh0IGlzIHJlcHJvdmlkZWQgaGVyZSB0byBzaW11bGF0ZSB0aGF0LlxuICAgICAgICAvLyBUaGUgbG9uZ2VyIHRlcm0gc29sdXRpb24gaXMgdG8gbW92ZSBvdXIgTW9kYWxNYW5hZ2VyIGludG8gdGhlIFJlYWN0IHRyZWUgdG8gaW5oZXJpdCBjb250ZXh0cyBwcm9wZXJseS5cbiAgICAgICAgPFNES0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3Byb3BzLnNka0NvbnRleHR9PlxuICAgICAgICAgICAgPFRvYXN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dG9hc3RSYWNrfT5cbiAgICAgICAgICAgICAgICA8QmFzZURpYWxvZ1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9Vc2VyU2V0dGluZ3NEaWFsb2dcIlxuICAgICAgICAgICAgICAgICAgICBoYXNDYW5jZWw9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIG9uRmluaXNoZWQ9e3Byb3BzLm9uRmluaXNoZWR9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZUZvclRhYklEKGFjdGl2ZVRhYklkKX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGVDbGFzcz1cIm14X1VzZXJTZXR0aW5nc0RpYWxvZ190aXRsZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NldHRpbmdzRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJiZWRWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFicz17Z2V0VGFicygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRhYklkPXthY3RpdmVUYWJJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5OYW1lPVwiVXNlclNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0QWN0aXZlVGFiSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2l2ZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NldHRpbmdzRGlhbG9nX3RvYXN0Q29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWN0aXZlVG9hc3QgJiYgPFRvYXN0PnthY3RpdmVUb2FzdH08L1RvYXN0Pn1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICAgICAgICAgPC9Ub2FzdENvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvU0RLQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU0sYUFBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8sY0FBQSxHQUFBSCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBSixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVMsU0FBQSxHQUFBTCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVUsUUFBQSxHQUFBTixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBUCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVksS0FBQSxHQUFBUixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWEsS0FBQSxHQUFBVCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWMsTUFBQSxHQUFBVixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWUsS0FBQSxHQUFBWCxzQkFBQSxDQUFBSixPQUFBO0FBRUEsSUFBQWdCLFdBQUEsR0FBQWQsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFpQixnQkFBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQix1QkFBQSxHQUFBZCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQW1CLGNBQUEsR0FBQWYsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFvQixvQkFBQSxHQUFBbEIsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFxQiwwQkFBQSxHQUFBakIsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFzQix3QkFBQSxH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