UNPKG

matrix-react-sdk

Version:
269 lines (267 loc) 46.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.createSpace = exports.SpaceCreateForm = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _matrix = require("matrix-js-sdk/src/matrix"); var _logger = require("matrix-js-sdk/src/logger"); var _languageHandler = require("../../../languageHandler"); var _ContextMenu = _interopRequireWildcard(require("../../structures/ContextMenu")); var _createRoom = _interopRequireDefault(require("../../../createRoom")); var _MatrixClientContext = _interopRequireWildcard(require("../../../contexts/MatrixClientContext")); var _SpaceBasicSettings = require("./SpaceBasicSettings"); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _Field = _interopRequireDefault(require("../elements/Field")); var _Validation = _interopRequireDefault(require("../elements/Validation")); var _RoomAliasField = _interopRequireDefault(require("../elements/RoomAliasField")); var _KeyBindingsManager = require("../../../KeyBindingsManager"); var _KeyboardShortcuts = require("../../../accessibility/KeyboardShortcuts"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _actions = require("../../../dispatcher/actions"); var _Filter = require("../dialogs/spotlight/Filter"); 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; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2024 New Vector Ltd. Copyright 2021 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 createSpace = async (client, name, isPublic, alias, topic, avatar, createOpts = {}, otherOpts = {}) => { return (0, _createRoom.default)(client, _objectSpread({ createOpts: _objectSpread({ name, preset: isPublic ? _matrix.Preset.PublicChat : _matrix.Preset.PrivateChat, visibility: isPublic && (await client.doesServerSupportUnstableFeature("org.matrix.msc3827.stable")) ? _matrix.Visibility.Public : _matrix.Visibility.Private, power_level_content_override: { // Only allow Admins to write to the timeline to prevent hidden sync spam events_default: 100, invite: isPublic ? 0 : 50 }, room_alias_name: isPublic && alias ? alias.substring(1, alias.indexOf(":")) : undefined, topic }, createOpts), avatar, roomType: _matrix.RoomType.Space, historyVisibility: isPublic ? _matrix.HistoryVisibility.WorldReadable : _matrix.HistoryVisibility.Invited, spinner: false, encryption: false, andView: true, inlineErrors: true }, otherOpts)); }; exports.createSpace = createSpace; const SpaceCreateMenuType = ({ title, description, className, onClick }) => { return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { className: (0, _classnames.default)("mx_SpaceCreateMenuType", className), onClick: onClick }, title, /*#__PURE__*/_react.default.createElement("div", null, description)); }; const spaceNameValidator = (0, _Validation.default)({ rules: [{ key: "required", test: async ({ value }) => !!value, invalid: () => (0, _languageHandler._t)("create_space|name_required") }] }); const nameToLocalpart = name => { return name.trim().toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9_-]+/gi, ""); }; const SpaceCreateForm = ({ busy, onSubmit, avatarUrl, setAvatar, name, setName, nameFieldRef, alias, aliasFieldRef, setAlias, showAliasField, topic, setTopic, children }) => { const cli = (0, _react.useContext)(_MatrixClientContext.default); const domain = cli.getDomain() ?? undefined; const onKeyDown = ev => { const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(ev); switch (action) { case _KeyboardShortcuts.KeyBindingAction.Enter: onSubmit(ev); break; } }; return /*#__PURE__*/_react.default.createElement("form", { className: "mx_SpaceBasicSettings", onSubmit: onSubmit }, /*#__PURE__*/_react.default.createElement(_SpaceBasicSettings.SpaceAvatar, { avatarUrl: avatarUrl, setAvatar: setAvatar, avatarDisabled: busy }), /*#__PURE__*/_react.default.createElement(_Field.default, { name: "spaceName", label: (0, _languageHandler._t)("common|name"), autoFocus: true, value: name, onChange: ev => { const newName = ev.target.value; if (!alias || alias === `#${nameToLocalpart(name)}:${domain}`) { setAlias(`#${nameToLocalpart(newName)}:${domain}`); aliasFieldRef.current?.validate({ allowEmpty: true }); } setName(newName); }, onKeyDown: onKeyDown, ref: nameFieldRef, onValidate: spaceNameValidator, disabled: busy, autoComplete: "off" }), showAliasField ? /*#__PURE__*/_react.default.createElement(_RoomAliasField.default, { ref: aliasFieldRef, onChange: setAlias, domain: domain, value: alias, placeholder: name ? nameToLocalpart(name) : (0, _languageHandler._t)("create_space|address_placeholder"), label: (0, _languageHandler._t)("create_space|address_label"), disabled: busy, onKeyDown: onKeyDown }) : null, /*#__PURE__*/_react.default.createElement(_Field.default, { name: "spaceTopic", element: "textarea", label: (0, _languageHandler._t)("common|description"), value: topic ?? "", onChange: ev => setTopic(ev.target.value), rows: 3, disabled: busy }), children); }; exports.SpaceCreateForm = SpaceCreateForm; const SpaceCreateMenu = ({ onFinished }) => { const cli = (0, _MatrixClientContext.useMatrixClientContext)(); const [visibility, setVisibility] = (0, _react.useState)(null); const [busy, setBusy] = (0, _react.useState)(false); const [name, setName] = (0, _react.useState)(""); const spaceNameField = (0, _react.useRef)(null); const [alias, setAlias] = (0, _react.useState)(""); const spaceAliasField = (0, _react.useRef)(null); const [avatar, setAvatar] = (0, _react.useState)(undefined); const [topic, setTopic] = (0, _react.useState)(""); const [supportsSpaceFiltering, setSupportsSpaceFiltering] = (0, _react.useState)(true); // assume it does until we find out it doesn't (0, _react.useEffect)(() => { cli.isVersionSupported("v1.4").then(supported => { return supported || cli.doesServerSupportUnstableFeature("org.matrix.msc3827.stable"); }).then(supported => { setSupportsSpaceFiltering(supported); }); }, [cli]); const onSpaceCreateClick = async e => { e.preventDefault(); if (busy) return; setBusy(true); // require & validate the space name field if (spaceNameField.current && !(await spaceNameField.current.validate({ allowEmpty: false }))) { spaceNameField.current.focus(); spaceNameField.current.validate({ allowEmpty: false, focused: true }); setBusy(false); return; } if (spaceAliasField.current && visibility === _matrix.Visibility.Public && !(await spaceAliasField.current.validate({ allowEmpty: false }))) { spaceAliasField.current.focus(); spaceAliasField.current.validate({ allowEmpty: false, focused: true }); setBusy(false); return; } try { await createSpace(cli, name, visibility === _matrix.Visibility.Public, alias, topic, avatar); onFinished(); } catch (e) { _logger.logger.error(e); } }; const onSearchClick = () => { _dispatcher.default.dispatch({ action: _actions.Action.OpenSpotlight, initialFilter: _Filter.Filter.PublicSpaces }); }; let body; if (visibility === null) { body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h2", null, (0, _languageHandler._t)("create_space|label")), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("create_space|explainer")), /*#__PURE__*/_react.default.createElement(SpaceCreateMenuType, { title: (0, _languageHandler._t)("common|public"), description: (0, _languageHandler._t)("create_space|public_description"), className: "mx_SpaceCreateMenuType_public", onClick: () => setVisibility(_matrix.Visibility.Public) }), /*#__PURE__*/_react.default.createElement(SpaceCreateMenuType, { title: (0, _languageHandler._t)("common|private"), description: (0, _languageHandler._t)("create_space|private_description"), className: "mx_SpaceCreateMenuType_private", onClick: () => setVisibility(_matrix.Visibility.Private) }), supportsSpaceFiltering && /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary_outline", onClick: onSearchClick }, (0, _languageHandler._t)("create_space|search_public_button"))); } else { body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { className: "mx_SpaceCreateMenu_back", onClick: () => setVisibility(null), title: (0, _languageHandler._t)("action|go_back") }), /*#__PURE__*/_react.default.createElement("h2", null, visibility === _matrix.Visibility.Public ? (0, _languageHandler._t)("create_space|public_heading") : (0, _languageHandler._t)("create_space|private_heading")), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("create_space|add_details_prompt"), " ", (0, _languageHandler._t)("create_space|add_details_prompt_2")), /*#__PURE__*/_react.default.createElement(SpaceCreateForm, { busy: busy, onSubmit: onSpaceCreateClick, setAvatar: setAvatar, name: name, setName: setName, nameFieldRef: spaceNameField, topic: topic, setTopic: setTopic, alias: alias, setAlias: setAlias, showAliasField: visibility === _matrix.Visibility.Public, aliasFieldRef: spaceAliasField }), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary", onClick: onSpaceCreateClick, disabled: busy }, busy ? (0, _languageHandler._t)("create_space|creating") : (0, _languageHandler._t)("action|create"))); } return /*#__PURE__*/_react.default.createElement(_ContextMenu.default, { left: 72, top: 62, chevronOffset: 0, chevronFace: _ContextMenu.ChevronFace.None, onFinished: onFinished, wrapperClassName: "mx_SpaceCreateMenu_wrapper", managed: false, focusLock: true }, body); }; var _default = exports.default = SpaceCreateMenu; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWF0cml4IiwiX2xvZ2dlciIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfQ29udGV4dE1lbnUiLCJfY3JlYXRlUm9vbSIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX1NwYWNlQmFzaWNTZXR0aW5ncyIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0ZpZWxkIiwiX1ZhbGlkYXRpb24iLCJfUm9vbUFsaWFzRmllbGQiLCJfS2V5QmluZGluZ3NNYW5hZ2VyIiwiX0tleWJvYXJkU2hvcnRjdXRzIiwiX2Rpc3BhdGNoZXIiLCJfYWN0aW9ucyIsIl9GaWx0ZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJjcmVhdGVTcGFjZSIsImNsaWVudCIsIm5hbWUiLCJpc1B1YmxpYyIsImFsaWFzIiwidG9waWMiLCJhdmF0YXIiLCJjcmVhdGVPcHRzIiwib3RoZXJPcHRzIiwiY3JlYXRlUm9vbSIsInByZXNldCIsIlByZXNldCIsIlB1YmxpY0NoYXQiLCJQcml2YXRlQ2hhdCIsInZpc2liaWxpdHkiLCJkb2VzU2VydmVyU3VwcG9ydFVuc3RhYmxlRmVhdHVyZSIsIlZpc2liaWxpdHkiLCJQdWJsaWMiLCJQcml2YXRlIiwicG93ZXJfbGV2ZWxfY29udGVudF9vdmVycmlkZSIsImV2ZW50c19kZWZhdWx0IiwiaW52aXRlIiwicm9vbV9hbGlhc19uYW1lIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsInJvb21UeXBlIiwiUm9vbVR5cGUiLCJTcGFjZSIsImhpc3RvcnlWaXNpYmlsaXR5IiwiSGlzdG9yeVZpc2liaWxpdHkiLCJXb3JsZFJlYWRhYmxlIiwiSW52aXRlZCIsInNwaW5uZXIiLCJlbmNyeXB0aW9uIiwiYW5kVmlldyIsImlubGluZUVycm9ycyIsImV4cG9ydHMiLCJTcGFjZUNyZWF0ZU1lbnVUeXBlIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lcyIsInNwYWNlTmFtZVZhbGlkYXRvciIsIndpdGhWYWxpZGF0aW9uIiwicnVsZXMiLCJrZXkiLCJ0ZXN0IiwidmFsdWUiLCJpbnZhbGlkIiwiX3QiLCJuYW1lVG9Mb2NhbHBhcnQiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwiU3BhY2VDcmVhdGVGb3JtIiwiYnVzeSIsIm9uU3VibWl0IiwiYXZhdGFyVXJsIiwic2V0QXZhdGFyIiwic2V0TmFtZSIsIm5hbWVGaWVsZFJlZiIsImFsaWFzRmllbGRSZWYiLCJzZXRBbGlhcyIsInNob3dBbGlhc0ZpZWxkIiwic2V0VG9waWMiLCJjaGlsZHJlbiIsImNsaSIsInVzZUNvbnRleHQiLCJNYXRyaXhDbGllbnRDb250ZXh0IiwiZG9tYWluIiwiZ2V0RG9tYWluIiwib25LZXlEb3duIiwiZXYiLCJhY3Rpb24iLCJnZXRLZXlCaW5kaW5nc01hbmFnZXIiLCJnZXRBY2Nlc3NpYmlsaXR5QWN0aW9uIiwiS2V5QmluZGluZ0FjdGlvbiIsIkVudGVyIiwiU3BhY2VBdmF0YXIiLCJhdmF0YXJEaXNhYmxlZCIsImxhYmVsIiwiYXV0b0ZvY3VzIiwib25DaGFuZ2UiLCJuZXdOYW1lIiwidGFyZ2V0IiwiY3VycmVudCIsInZhbGlkYXRlIiwiYWxsb3dFbXB0eSIsInJlZiIsIm9uVmFsaWRhdGUiLCJkaXNhYmxlZCIsImF1dG9Db21wbGV0ZSIsInBsYWNlaG9sZGVyIiwiZWxlbWVudCIsInJvd3MiLCJTcGFjZUNyZWF0ZU1lbnUiLCJvbkZpbmlzaGVkIiwidXNlTWF0cml4Q2xpZW50Q29udGV4dCIsInNldFZpc2liaWxpdHkiLCJ1c2VTdGF0ZSIsInNldEJ1c3kiLCJzcGFjZU5hbWVGaWVsZCIsInVzZVJlZiIsInNwYWNlQWxpYXNGaWVsZCIsInN1cHBvcnRzU3BhY2VGaWx0ZXJpbmciLCJzZXRTdXBwb3J0c1NwYWNlRmlsdGVyaW5nIiwidXNlRWZmZWN0IiwiaXNWZXJzaW9uU3VwcG9ydGVkIiwidGhlbiIsInN1cHBvcnRlZCIsIm9uU3BhY2VDcmVhdGVDbGljayIsInByZXZlbnREZWZhdWx0IiwiZm9jdXMiLCJmb2N1c2VkIiwibG9nZ2VyIiwiZXJyb3IiLCJvblNlYXJjaENsaWNrIiwiZGVmYXVsdERpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvbiIsIk9wZW5TcG90bGlnaHQiLCJpbml0aWFsRmlsdGVyIiwiRmlsdGVyIiwiUHVibGljU3BhY2VzIiwiYm9keSIsIkZyYWdtZW50Iiwia2luZCIsImxlZnQiLCJ0b3AiLCJjaGV2cm9uT2Zmc2V0IiwiY2hldnJvbkZhY2UiLCJDaGV2cm9uRmFjZSIsIk5vbmUiLCJ3cmFwcGVyQ2xhc3NOYW1lIiwibWFuYWdlZCIsImZvY3VzTG9jayIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvc3BhY2VzL1NwYWNlQ3JlYXRlTWVudS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7XG4gICAgQ29tcG9uZW50UHJvcHMsXG4gICAgUmVmT2JqZWN0LFxuICAgIFN5bnRoZXRpY0V2ZW50LFxuICAgIEtleWJvYXJkRXZlbnQsXG4gICAgdXNlQ29udGV4dCxcbiAgICB1c2VSZWYsXG4gICAgdXNlU3RhdGUsXG4gICAgQ2hhbmdlRXZlbnQsXG4gICAgUmVhY3ROb2RlLFxuICAgIHVzZUVmZmVjdCxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHtcbiAgICBSb29tVHlwZSxcbiAgICBIaXN0b3J5VmlzaWJpbGl0eSxcbiAgICBQcmVzZXQsXG4gICAgVmlzaWJpbGl0eSxcbiAgICBNYXRyaXhDbGllbnQsXG4gICAgSUNyZWF0ZVJvb21PcHRzLFxufSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IENvbnRleHRNZW51LCB7IENoZXZyb25GYWNlIH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZXMvQ29udGV4dE1lbnVcIjtcbmltcG9ydCBjcmVhdGVSb29tLCB7IElPcHRzIGFzIElDcmVhdGVPcHRzIH0gZnJvbSBcIi4uLy4uLy4uL2NyZWF0ZVJvb21cIjtcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0LCB7IHVzZU1hdHJpeENsaWVudENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IFNwYWNlQmFzaWNTZXR0aW5ncywgeyBTcGFjZUF2YXRhciB9IGZyb20gXCIuL1NwYWNlQmFzaWNTZXR0aW5nc1wiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24sIHsgQnV0dG9uRXZlbnQgfSBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCIuLi9lbGVtZW50cy9GaWVsZFwiO1xuaW1wb3J0IHdpdGhWYWxpZGF0aW9uIGZyb20gXCIuLi9lbGVtZW50cy9WYWxpZGF0aW9uXCI7XG5pbXBvcnQgUm9vbUFsaWFzRmllbGQgZnJvbSBcIi4uL2VsZW1lbnRzL1Jvb21BbGlhc0ZpZWxkXCI7XG5pbXBvcnQgeyBnZXRLZXlCaW5kaW5nc01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vLi4vS2V5QmluZGluZ3NNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlCaW5kaW5nQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvS2V5Ym9hcmRTaG9ydGN1dHNcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9hY3Rpb25zXCI7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vZGlhbG9ncy9zcG90bGlnaHQvRmlsdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTcGFjZSA9IGFzeW5jIChcbiAgICBjbGllbnQ6IE1hdHJpeENsaWVudCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaXNQdWJsaWM6IGJvb2xlYW4sXG4gICAgYWxpYXM/OiBzdHJpbmcsXG4gICAgdG9waWM/OiBzdHJpbmcsXG4gICAgYXZhdGFyPzogc3RyaW5nIHwgRmlsZSxcbiAgICBjcmVhdGVPcHRzOiBQYXJ0aWFsPElDcmVhdGVSb29tT3B0cz4gPSB7fSxcbiAgICBvdGhlck9wdHM6IFBhcnRpYWw8T21pdDxJQ3JlYXRlT3B0cywgXCJjcmVhdGVPcHRzXCI+PiA9IHt9LFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZVJvb20oY2xpZW50LCB7XG4gICAgICAgIGNyZWF0ZU9wdHM6IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwcmVzZXQ6IGlzUHVibGljID8gUHJlc2V0LlB1YmxpY0NoYXQgOiBQcmVzZXQuUHJpdmF0ZUNoYXQsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OlxuICAgICAgICAgICAgICAgIGlzUHVibGljICYmIChhd2FpdCBjbGllbnQuZG9lc1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmUoXCJvcmcubWF0cml4Lm1zYzM4Mjcuc3RhYmxlXCIpKVxuICAgICAgICAgICAgICAgICAgICA/IFZpc2liaWxpdHkuUHVibGljXG4gICAgICAgICAgICAgICAgICAgIDogVmlzaWJpbGl0eS5Qcml2YXRlLFxuICAgICAgICAgICAgcG93ZXJfbGV2ZWxfY29udGVudF9vdmVycmlkZToge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgYWxsb3cgQWRtaW5zIHRvIHdyaXRlIHRvIHRoZSB0aW1lbGluZSB0byBwcmV2ZW50IGhpZGRlbiBzeW5jIHNwYW1cbiAgICAgICAgICAgICAgICBldmVudHNfZGVmYXVsdDogMTAwLFxuICAgICAgICAgICAgICAgIGludml0ZTogaXNQdWJsaWMgPyAwIDogNTAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm9vbV9hbGlhc19uYW1lOiBpc1B1YmxpYyAmJiBhbGlhcyA/IGFsaWFzLnN1YnN0cmluZygxLCBhbGlhcy5pbmRleE9mKFwiOlwiKSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3BpYyxcbiAgICAgICAgICAgIC4uLmNyZWF0ZU9wdHMsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YXRhcixcbiAgICAgICAgcm9vbVR5cGU6IFJvb21UeXBlLlNwYWNlLFxuICAgICAgICBoaXN0b3J5VmlzaWJpbGl0eTogaXNQdWJsaWMgPyBIaXN0b3J5VmlzaWJpbGl0eS5Xb3JsZFJlYWRhYmxlIDogSGlzdG9yeVZpc2liaWxpdHkuSW52aXRlZCxcbiAgICAgICAgc3Bpbm5lcjogZmFsc2UsXG4gICAgICAgIGVuY3J5cHRpb246IGZhbHNlLFxuICAgICAgICBhbmRWaWV3OiB0cnVlLFxuICAgICAgICBpbmxpbmVFcnJvcnM6IHRydWUsXG4gICAgICAgIC4uLm90aGVyT3B0cyxcbiAgICB9KTtcbn07XG5cbmNvbnN0IFNwYWNlQ3JlYXRlTWVudVR5cGU6IFJlYWN0LkZDPHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgb25DbGljaygpOiB2b2lkO1xufT4gPSAoeyB0aXRsZSwgZGVzY3JpcHRpb24sIGNsYXNzTmFtZSwgb25DbGljayB9KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfU3BhY2VDcmVhdGVNZW51VHlwZVwiLCBjbGFzc05hbWUpfSBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgIDxkaXY+e2Rlc2NyaXB0aW9ufTwvZGl2PlxuICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgKTtcbn07XG5cbmNvbnN0IHNwYWNlTmFtZVZhbGlkYXRvciA9IHdpdGhWYWxpZGF0aW9uKHtcbiAgICBydWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicmVxdWlyZWRcIixcbiAgICAgICAgICAgIHRlc3Q6IGFzeW5jICh7IHZhbHVlIH0pID0+ICEhdmFsdWUsXG4gICAgICAgICAgICBpbnZhbGlkOiAoKSA9PiBfdChcImNyZWF0ZV9zcGFjZXxuYW1lX3JlcXVpcmVkXCIpLFxuICAgICAgICB9LFxuICAgIF0sXG59KTtcblxuY29uc3QgbmFtZVRvTG9jYWxwYXJ0ID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIG5hbWVcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIi1cIilcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05Xy1dKy9naSwgXCJcIik7XG59O1xuXG50eXBlIEJQcm9wcyA9IE9taXQ8Q29tcG9uZW50UHJvcHM8dHlwZW9mIFNwYWNlQmFzaWNTZXR0aW5ncz4sIFwibmFtZURpc2FibGVkXCIgfCBcInRvcGljRGlzYWJsZWRcIiB8IFwiYXZhdGFyRGlzYWJsZWRcIj47XG5pbnRlcmZhY2UgSVNwYWNlQ3JlYXRlRm9ybVByb3BzIGV4dGVuZHMgQlByb3BzIHtcbiAgICBidXN5OiBib29sZWFuO1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gICAgbmFtZUZpZWxkUmVmOiBSZWZPYmplY3Q8RmllbGQ+O1xuICAgIGFsaWFzRmllbGRSZWY6IFJlZk9iamVjdDxSb29tQWxpYXNGaWVsZD47XG4gICAgc2hvd0FsaWFzRmllbGQ/OiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAgIG9uU3VibWl0KGU6IFN5bnRoZXRpY0V2ZW50KTogdm9pZDtcbiAgICBzZXRBbGlhcyhhbGlhczogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFNwYWNlQ3JlYXRlRm9ybTogUmVhY3QuRkM8SVNwYWNlQ3JlYXRlRm9ybVByb3BzPiA9ICh7XG4gICAgYnVzeSxcbiAgICBvblN1Ym1pdCxcbiAgICBhdmF0YXJVcmwsXG4gICAgc2V0QXZhdGFyLFxuICAgIG5hbWUsXG4gICAgc2V0TmFtZSxcbiAgICBuYW1lRmllbGRSZWYsXG4gICAgYWxpYXMsXG4gICAgYWxpYXNGaWVsZFJlZixcbiAgICBzZXRBbGlhcyxcbiAgICBzaG93QWxpYXNGaWVsZCxcbiAgICB0b3BpYyxcbiAgICBzZXRUb3BpYyxcbiAgICBjaGlsZHJlbixcbn0pID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VDb250ZXh0KE1hdHJpeENsaWVudENvbnRleHQpO1xuICAgIGNvbnN0IGRvbWFpbiA9IGNsaS5nZXREb21haW4oKSA/PyB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBvbktleURvd24gPSAoZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZ2V0S2V5QmluZGluZ3NNYW5hZ2VyKCkuZ2V0QWNjZXNzaWJpbGl0eUFjdGlvbihldik7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEtleUJpbmRpbmdBY3Rpb24uRW50ZXI6XG4gICAgICAgICAgICAgICAgb25TdWJtaXQoZXYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxmb3JtIGNsYXNzTmFtZT1cIm14X1NwYWNlQmFzaWNTZXR0aW5nc1wiIG9uU3VibWl0PXtvblN1Ym1pdH0+XG4gICAgICAgICAgICA8U3BhY2VBdmF0YXIgYXZhdGFyVXJsPXthdmF0YXJVcmx9IHNldEF2YXRhcj17c2V0QXZhdGFyfSBhdmF0YXJEaXNhYmxlZD17YnVzeX0gLz5cblxuICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgbmFtZT1cInNwYWNlTmFtZVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tbW9ufG5hbWVcIil9XG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXY6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld05hbWUgPSBldi50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxpYXMgfHwgYWxpYXMgPT09IGAjJHtuYW1lVG9Mb2NhbHBhcnQobmFtZSl9OiR7ZG9tYWlufWApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFsaWFzKGAjJHtuYW1lVG9Mb2NhbHBhcnQobmV3TmFtZSl9OiR7ZG9tYWlufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNGaWVsZFJlZi5jdXJyZW50Py52YWxpZGF0ZSh7IGFsbG93RW1wdHk6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0TmFtZShuZXdOYW1lKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICAgIHJlZj17bmFtZUZpZWxkUmVmfVxuICAgICAgICAgICAgICAgIG9uVmFsaWRhdGU9e3NwYWNlTmFtZVZhbGlkYXRvcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAge3Nob3dBbGlhc0ZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxSb29tQWxpYXNGaWVsZFxuICAgICAgICAgICAgICAgICAgICByZWY9e2FsaWFzRmllbGRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRBbGlhc31cbiAgICAgICAgICAgICAgICAgICAgZG9tYWluPXtkb21haW59XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXthbGlhc31cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e25hbWUgPyBuYW1lVG9Mb2NhbHBhcnQobmFtZSkgOiBfdChcImNyZWF0ZV9zcGFjZXxhZGRyZXNzX3BsYWNlaG9sZGVyXCIpfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJjcmVhdGVfc3BhY2V8YWRkcmVzc19sYWJlbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgbmFtZT1cInNwYWNlVG9waWNcIlxuICAgICAgICAgICAgICAgIGVsZW1lbnQ9XCJ0ZXh0YXJlYVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tbW9ufGRlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0b3BpYyA/PyBcIlwifVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+IHNldFRvcGljKGV2LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9mb3JtPlxuICAgICk7XG59O1xuXG5jb25zdCBTcGFjZUNyZWF0ZU1lbnU6IFJlYWN0LkZDPHtcbiAgICBvbkZpbmlzaGVkKCk6IHZvaWQ7XG59PiA9ICh7IG9uRmluaXNoZWQgfSkgPT4ge1xuICAgIGNvbnN0IGNsaSA9IHVzZU1hdHJpeENsaWVudENvbnRleHQoKTtcbiAgICBjb25zdCBbdmlzaWJpbGl0eSwgc2V0VmlzaWJpbGl0eV0gPSB1c2VTdGF0ZTxWaXNpYmlsaXR5IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgY29uc3QgW25hbWUsIHNldE5hbWVdID0gdXNlU3RhdGUoXCJcIik7XG4gICAgY29uc3Qgc3BhY2VOYW1lRmllbGQgPSB1c2VSZWY8RmllbGQ+KG51bGwpO1xuICAgIGNvbnN0IFthbGlhcywgc2V0QWxpYXNdID0gdXNlU3RhdGUoXCJcIik7XG4gICAgY29uc3Qgc3BhY2VBbGlhc0ZpZWxkID0gdXNlUmVmPFJvb21BbGlhc0ZpZWxkPihudWxsKTtcbiAgICBjb25zdCBbYXZhdGFyLCBzZXRBdmF0YXJdID0gdXNlU3RhdGU8RmlsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBjb25zdCBbdG9waWMsIHNldFRvcGljXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgICBjb25zdCBbc3VwcG9ydHNTcGFjZUZpbHRlcmluZywgc2V0U3VwcG9ydHNTcGFjZUZpbHRlcmluZ10gPSB1c2VTdGF0ZSh0cnVlKTsgLy8gYXNzdW1lIGl0IGRvZXMgdW50aWwgd2UgZmluZCBvdXQgaXQgZG9lc24ndFxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNsaS5pc1ZlcnNpb25TdXBwb3J0ZWQoXCJ2MS40XCIpXG4gICAgICAgICAgICAudGhlbigoc3VwcG9ydGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnRlZCB8fCBjbGkuZG9lc1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmUoXCJvcmcubWF0cml4Lm1zYzM4Mjcuc3RhYmxlXCIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChzdXBwb3J0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdXBwb3J0c1NwYWNlRmlsdGVyaW5nKHN1cHBvcnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9LCBbY2xpXSk7XG5cbiAgICBjb25zdCBvblNwYWNlQ3JlYXRlQ2xpY2sgPSBhc3luYyAoZTogQnV0dG9uRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoYnVzeSkgcmV0dXJuO1xuXG4gICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgIC8vIHJlcXVpcmUgJiB2YWxpZGF0ZSB0aGUgc3BhY2UgbmFtZSBmaWVsZFxuICAgICAgICBpZiAoc3BhY2VOYW1lRmllbGQuY3VycmVudCAmJiAhKGF3YWl0IHNwYWNlTmFtZUZpZWxkLmN1cnJlbnQudmFsaWRhdGUoeyBhbGxvd0VtcHR5OiBmYWxzZSB9KSkpIHtcbiAgICAgICAgICAgIHNwYWNlTmFtZUZpZWxkLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHNwYWNlTmFtZUZpZWxkLmN1cnJlbnQudmFsaWRhdGUoeyBhbGxvd0VtcHR5OiBmYWxzZSwgZm9jdXNlZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3BhY2VBbGlhc0ZpZWxkLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHZpc2liaWxpdHkgPT09IFZpc2liaWxpdHkuUHVibGljICYmXG4gICAgICAgICAgICAhKGF3YWl0IHNwYWNlQWxpYXNGaWVsZC5jdXJyZW50LnZhbGlkYXRlKHsgYWxsb3dFbXB0eTogZmFsc2UgfSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3BhY2VBbGlhc0ZpZWxkLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHNwYWNlQWxpYXNGaWVsZC5jdXJyZW50LnZhbGlkYXRlKHsgYWxsb3dFbXB0eTogZmFsc2UsIGZvY3VzZWQ6IHRydWUgfSk7XG4gICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjcmVhdGVTcGFjZShjbGksIG5hbWUsIHZpc2liaWxpdHkgPT09IFZpc2liaWxpdHkuUHVibGljLCBhbGlhcywgdG9waWMsIGF2YXRhcik7XG5cbiAgICAgICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU2VhcmNoQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogQWN0aW9uLk9wZW5TcG90bGlnaHQsXG4gICAgICAgICAgICBpbml0aWFsRmlsdGVyOiBGaWx0ZXIuUHVibGljU3BhY2VzLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbGV0IGJvZHk7XG4gICAgaWYgKHZpc2liaWxpdHkgPT09IG51bGwpIHtcbiAgICAgICAgYm9keSA9IChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8aDI+e190KFwiY3JlYXRlX3NwYWNlfGxhYmVsXCIpfTwvaDI+XG4gICAgICAgICAgICAgICAgPHA+e190KFwiY3JlYXRlX3NwYWNlfGV4cGxhaW5lclwiKX08L3A+XG5cbiAgICAgICAgICAgICAgICA8U3BhY2VDcmVhdGVNZW51VHlwZVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJjb21tb258cHVibGljXCIpfVxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17X3QoXCJjcmVhdGVfc3BhY2V8cHVibGljX2Rlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVUeXBlX3B1YmxpY1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpc2liaWxpdHkoVmlzaWJpbGl0eS5QdWJsaWMpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFNwYWNlQ3JlYXRlTWVudVR5cGVcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e190KFwiY29tbW9ufHByaXZhdGVcIil9XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfdChcImNyZWF0ZV9zcGFjZXxwcml2YXRlX2Rlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVUeXBlX3ByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaXNpYmlsaXR5KFZpc2liaWxpdHkuUHJpdmF0ZSl9XG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIHtzdXBwb3J0c1NwYWNlRmlsdGVyaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24ga2luZD1cInByaW1hcnlfb3V0bGluZVwiIG9uQ2xpY2s9e29uU2VhcmNoQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwiY3JlYXRlX3NwYWNlfHNlYXJjaF9wdWJsaWNfYnV0dG9uXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYm9keSA9IChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVfYmFja1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpc2liaWxpdHkobnVsbCl9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcImFjdGlvbnxnb19iYWNrXCIpfVxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8aDI+XG4gICAgICAgICAgICAgICAgICAgIHt2aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5LlB1YmxpY1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdChcImNyZWF0ZV9zcGFjZXxwdWJsaWNfaGVhZGluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdChcImNyZWF0ZV9zcGFjZXxwcml2YXRlX2hlYWRpbmdcIil9XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAge190KFwiY3JlYXRlX3NwYWNlfGFkZF9kZXRhaWxzX3Byb21wdFwiKX0ge190KFwiY3JlYXRlX3NwYWNlfGFkZF9kZXRhaWxzX3Byb21wdF8yXCIpfVxuICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgIDxTcGFjZUNyZWF0ZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgYnVzeT17YnVzeX1cbiAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3BhY2VDcmVhdGVDbGlja31cbiAgICAgICAgICAgICAgICAgICAgc2V0QXZhdGFyPXtzZXRBdmF0YXJ9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgICAgICAgICAgIHNldE5hbWU9e3NldE5hbWV9XG4gICAgICAgICAgICAgICAgICAgIG5hbWVGaWVsZFJlZj17c3BhY2VOYW1lRmllbGR9XG4gICAgICAgICAgICAgICAgICAgIHRvcGljPXt0b3BpY31cbiAgICAgICAgICAgICAgICAgICAgc2V0VG9waWM9e3NldFRvcGljfVxuICAgICAgICAgICAgICAgICAgICBhbGlhcz17YWxpYXN9XG4gICAgICAgICAgICAgICAgICAgIHNldEFsaWFzPXtzZXRBbGlhc31cbiAgICAgICAgICAgICAgICAgICAgc2hvd0FsaWFzRmllbGQ9e3Zpc2liaWxpdHkgPT09IFZpc2liaWxpdHkuUHVibGljfVxuICAgICAgICAgICAgICAgICAgICBhbGlhc0ZpZWxkUmVmPXtzcGFjZUFsaWFzRmllbGR9XG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIGtpbmQ9XCJwcmltYXJ5XCIgb25DbGljaz17b25TcGFjZUNyZWF0ZUNsaWNrfSBkaXNhYmxlZD17YnVzeX0+XG4gICAgICAgICAgICAgICAgICAgIHtidXN5ID8gX3QoXCJjcmVhdGVfc3BhY2V8Y3JlYXRpbmdcIikgOiBfdChcImFjdGlvbnxjcmVhdGVcIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Q29udGV4dE1lbnVcbiAgICAgICAgICAgIGxlZnQ9ezcyfVxuICAgICAgICAgICAgdG9wPXs2Mn1cbiAgICAgICAgICAgIGNoZXZyb25PZmZzZXQ9ezB9XG4gICAgICAgICAgICBjaGV2cm9uRmFjZT17Q2hldnJvbkZhY2UuTm9uZX1cbiAgICAgICAgICAgIG9uRmluaXNoZWQ9e29uRmluaXNoZWR9XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3NOYW1lPVwibXhfU3BhY2VDcmVhdGVNZW51X3dyYXBwZXJcIlxuICAgICAgICAgICAgbWFuYWdlZD17ZmFsc2V9XG4gICAgICAgICAgICBmb2N1c0xvY2s9e3RydWV9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtib2R5fVxuICAgICAgICA8L0NvbnRleHRNZW51PlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTcGFjZUNyZWF0ZU1lbnU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBWUEsSUFBQUMsV0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBUUEsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssZ0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQVAsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLG9CQUFBLEdBQUFULHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxtQkFBQSxHQUFBVCxPQUFB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