UNPKG

matrix-react-sdk

Version:
171 lines (166 loc) 25.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _edit = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/edit")); var _share = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/share")); var _delete = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/delete")); var _compoundWeb = require("@vector-im/compound-web"); var _classnames = _interopRequireDefault(require("classnames")); var _languageHandler = require("../../../languageHandler"); var _Media = require("../../../customisations/Media"); var _BrowserWorkarounds = require("../../../utils/BrowserWorkarounds"); var _useId = require("../../../utils/useId"); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _BaseAvatar = _interopRequireDefault(require("../avatars/BaseAvatar")); 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. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const AvatarSettingContextMenu = ({ trigger, onUploadSelect, onRemoveSelect, menuOpen, onOpenChange }) => { return /*#__PURE__*/_react.default.createElement(_compoundWeb.Menu, { trigger: trigger, title: (0, _languageHandler._t)("action|set_avatar"), showTitle: false, open: menuOpen, onOpenChange: onOpenChange }, /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, { as: "div", Icon: /*#__PURE__*/_react.default.createElement(_share.default, { width: "24px", height: "24px" }), label: (0, _languageHandler._t)("action|upload_file"), onSelect: onUploadSelect }), onRemoveSelect && /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, { as: "div", Icon: /*#__PURE__*/_react.default.createElement(_delete.default, { width: "24px", height: "24px" }), className: "mx_AvatarSetting_removeMenuItem", label: (0, _languageHandler._t)("action|remove"), onSelect: onRemoveSelect })); }; /** * Component for setting or removing an avatar on something (eg. a user or a room) */ const AvatarSetting = ({ avatar, avatarAltText, onChange, removeAvatar, disabled, placeholderId, placeholderName }) => { const fileInputRef = /*#__PURE__*/(0, _react.createRef)(); // Real URL that we can supply to the img element, either a data URL or whatever mediaFromMxc gives // This represents whatever avatar the user has chosen at the time const [avatarURL, setAvatarURL] = (0, _react.useState)(undefined); (0, _react.useEffect)(() => { if (avatar instanceof File) { const reader = new FileReader(); reader.onload = () => { setAvatarURL(reader.result); }; reader.readAsDataURL(avatar); } else if (avatar) { setAvatarURL((0, _Media.mediaFromMxc)(avatar).getSquareThumbnailHttp(96) ?? undefined); } else { setAvatarURL(undefined); } }, [avatar]); // Prevents ID collisions when this component is used more than once on the same page. const a11yId = (0, _useId.useId)(); const onFileChanged = (0, _react.useCallback)(e => { if (e.target.files) onChange?.(e.target.files[0]); }, [onChange]); const uploadAvatar = (0, _react.useCallback)(() => { fileInputRef.current?.click(); }, [fileInputRef]); const [menuOpen, setMenuOpen] = (0, _react.useState)(false); const onOpenChange = (0, _react.useCallback)(newOpen => { setMenuOpen(newOpen); }, []); let avatarElement = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { element: "div", onClick: uploadAvatar, className: "mx_AvatarSetting_avatarPlaceholder mx_AvatarSetting_avatarDisplay", "aria-labelledby": disabled ? undefined : a11yId // Inhibit tab stop as we have explicit upload/remove buttons , tabIndex: -1, disabled: disabled }, /*#__PURE__*/_react.default.createElement(_BaseAvatar.default, { idName: placeholderId, name: placeholderName, size: "90px" })); if (avatarURL) { avatarElement = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { element: "img", className: "mx_AvatarSetting_avatarDisplay", src: avatarURL, alt: avatarAltText, onClick: uploadAvatar // Inhibit tab stop as we have explicit upload/remove buttons , tabIndex: -1, disabled: disabled }); } let uploadAvatarBtn; if (!disabled) { const uploadButtonClasses = (0, _classnames.default)("mx_AvatarSetting_uploadButton", { mx_AvatarSetting_uploadButton_active: menuOpen }); uploadAvatarBtn = /*#__PURE__*/_react.default.createElement("div", { className: uploadButtonClasses }, /*#__PURE__*/_react.default.createElement(_edit.default, { width: "20px", height: "20px" })); } const content = /*#__PURE__*/_react.default.createElement("div", { className: "mx_AvatarSetting_avatar", role: "group", "aria-label": avatarAltText }, avatarElement, uploadAvatarBtn); if (disabled) { return content; } return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(AvatarSettingContextMenu, { trigger: content, onUploadSelect: uploadAvatar, onRemoveSelect: removeAvatar, menuOpen: menuOpen, onOpenChange: onOpenChange }), /*#__PURE__*/_react.default.createElement("input", { type: "file", style: { display: "none" }, ref: fileInputRef, onClick: _BrowserWorkarounds.chromeFileInputFix, onChange: onFileChanged, accept: "image/*", alt: (0, _languageHandler._t)("action|upload") })); }; var _default = exports.default = AvatarSetting; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfZWRpdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc2hhcmUiLCJfZGVsZXRlIiwiX2NvbXBvdW5kV2ViIiwiX2NsYXNzbmFtZXMiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX01lZGlhIiwiX0Jyb3dzZXJXb3JrYXJvdW5kcyIsIl91c2VJZCIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0Jhc2VBdmF0YXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJBdmF0YXJTZXR0aW5nQ29udGV4dE1lbnUiLCJ0cmlnZ2VyIiwib25VcGxvYWRTZWxlY3QiLCJvblJlbW92ZVNlbGVjdCIsIm1lbnVPcGVuIiwib25PcGVuQ2hhbmdlIiwiY3JlYXRlRWxlbWVudCIsIk1lbnUiLCJ0aXRsZSIsIl90Iiwic2hvd1RpdGxlIiwib3BlbiIsIk1lbnVJdGVtIiwiYXMiLCJJY29uIiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbCIsIm9uU2VsZWN0IiwiY2xhc3NOYW1lIiwiQXZhdGFyU2V0dGluZyIsImF2YXRhciIsImF2YXRhckFsdFRleHQiLCJvbkNoYW5nZSIsInJlbW92ZUF2YXRhciIsImRpc2FibGVkIiwicGxhY2Vob2xkZXJJZCIsInBsYWNlaG9sZGVyTmFtZSIsImZpbGVJbnB1dFJlZiIsImNyZWF0ZVJlZiIsImF2YXRhclVSTCIsInNldEF2YXRhclVSTCIsInVzZVN0YXRlIiwidW5kZWZpbmVkIiwidXNlRWZmZWN0IiwiRmlsZSIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwibWVkaWFGcm9tTXhjIiwiZ2V0U3F1YXJlVGh1bWJuYWlsSHR0cCIsImExMXlJZCIsInVzZUlkIiwib25GaWxlQ2hhbmdlZCIsInVzZUNhbGxiYWNrIiwidGFyZ2V0IiwiZmlsZXMiLCJ1cGxvYWRBdmF0YXIiLCJjdXJyZW50IiwiY2xpY2siLCJzZXRNZW51T3BlbiIsIm5ld09wZW4iLCJhdmF0YXJFbGVtZW50IiwiZWxlbWVudCIsIm9uQ2xpY2siLCJ0YWJJbmRleCIsImlkTmFtZSIsIm5hbWUiLCJzaXplIiwic3JjIiwiYWx0IiwidXBsb2FkQXZhdGFyQnRuIiwidXBsb2FkQnV0dG9uQ2xhc3NlcyIsImNsYXNzTmFtZXMiLCJteF9BdmF0YXJTZXR0aW5nX3VwbG9hZEJ1dHRvbl9hY3RpdmUiLCJjb250ZW50Iiwicm9sZSIsIkZyYWdtZW50IiwidHlwZSIsInN0eWxlIiwiZGlzcGxheSIsInJlZiIsImNocm9tZUZpbGVJbnB1dEZpeCIsImFjY2VwdCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NldHRpbmdzL0F2YXRhclNldHRpbmcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE5LTIwMjQgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgY3JlYXRlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IEVkaXRJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9lZGl0XCI7XG5pbXBvcnQgVXBsb2FkSWNvbiBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC1kZXNpZ24tdG9rZW5zL2Fzc2V0cy93ZWIvaWNvbnMvc2hhcmVcIjtcbmltcG9ydCBEZWxldGVJY29uIGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLWRlc2lnbi10b2tlbnMvYXNzZXRzL3dlYi9pY29ucy9kZWxldGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVJdGVtIH0gZnJvbSBcIkB2ZWN0b3ItaW0vY29tcG91bmQtd2ViXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IG1lZGlhRnJvbU14YyB9IGZyb20gXCIuLi8uLi8uLi9jdXN0b21pc2F0aW9ucy9NZWRpYVwiO1xuaW1wb3J0IHsgY2hyb21lRmlsZUlucHV0Rml4IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0Jyb3dzZXJXb3JrYXJvdW5kc1wiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXNlSWRcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgQmFzZUF2YXRhciBmcm9tIFwiLi4vYXZhdGFycy9CYXNlQXZhdGFyXCI7XG5cbmludGVyZmFjZSBNZW51UHJvcHMge1xuICAgIHRyaWdnZXI6IFJlYWN0Tm9kZTtcbiAgICBvblVwbG9hZFNlbGVjdDogKCkgPT4gdm9pZDtcbiAgICBvblJlbW92ZVNlbGVjdD86ICgpID0+IHZvaWQ7XG4gICAgbWVudU9wZW46IGJvb2xlYW47XG4gICAgb25PcGVuQ2hhbmdlOiAobmV3T3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuY29uc3QgQXZhdGFyU2V0dGluZ0NvbnRleHRNZW51OiBSZWFjdC5GQzxNZW51UHJvcHM+ID0gKHtcbiAgICB0cmlnZ2VyLFxuICAgIG9uVXBsb2FkU2VsZWN0LFxuICAgIG9uUmVtb3ZlU2VsZWN0LFxuICAgIG1lbnVPcGVuLFxuICAgIG9uT3BlbkNoYW5nZSxcbn0pID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8TWVudVxuICAgICAgICAgICAgdHJpZ2dlcj17dHJpZ2dlcn1cbiAgICAgICAgICAgIHRpdGxlPXtfdChcImFjdGlvbnxzZXRfYXZhdGFyXCIpfVxuICAgICAgICAgICAgc2hvd1RpdGxlPXtmYWxzZX1cbiAgICAgICAgICAgIG9wZW49e21lbnVPcGVufVxuICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICAgIGFzPVwiZGl2XCJcbiAgICAgICAgICAgICAgICBJY29uPXs8VXBsb2FkSWNvbiB3aWR0aD1cIjI0cHhcIiBoZWlnaHQ9XCIyNHB4XCIgLz59XG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiYWN0aW9ufHVwbG9hZF9maWxlXCIpfVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtvblVwbG9hZFNlbGVjdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7b25SZW1vdmVTZWxlY3QgJiYgKFxuICAgICAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICBhcz1cImRpdlwiXG4gICAgICAgICAgICAgICAgICAgIEljb249ezxEZWxldGVJY29uIHdpZHRoPVwiMjRweFwiIGhlaWdodD1cIjI0cHhcIiAvPn1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfQXZhdGFyU2V0dGluZ19yZW1vdmVNZW51SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcImFjdGlvbnxyZW1vdmVcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtvblJlbW92ZVNlbGVjdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9NZW51PlxuICAgICk7XG59O1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYXZhdGFyIFVSTCwgYXMgYW4gbXhjIFVSTCBvciBhIEZpbGUuXG4gICAgICogR2VuZXJhbGx5LCBhbiBteGMgVVJMIHdvdWxkIGJlIHNwZWNpZmllZCB1bnRpbCB0aGUgdXNlciBzZWxlY3RzIGEgZmlsZSwgdGhlblxuICAgICAqIHRoZSBmaWxlIHN1cHBsaWVkIGJ5IHRoZSBvbkNoYW5nZSBjYWxsYmFjayB3b3VsZCBiZSBzdXBwbGllZCBoZXJlIHVudGlsIGl0J3NcbiAgICAgKiBzYXZlZC5cbiAgICAgKi9cbiAgICBhdmF0YXI/OiBzdHJpbmcgfCBGaWxlO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIHVzZXIgY2Fubm90IGNoYW5nZSB0aGUgYXZhdGFyXG4gICAgICovXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGEgbmV3IGF2YXRhclxuICAgICAqIFRoZSBjYWxsYmFjayBpcyBwYXNzZWQgYSBGaWxlIG9iamVjdCBmb3IgdGhlIG5ldyBhdmF0YXIgZGF0YVxuICAgICAqL1xuICAgIG9uQ2hhbmdlPzogKGY6IEZpbGUpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciB3aXNoZXMgdG8gcmVtb3ZlIHRoZSBhdmF0YXJcbiAgICAgKi9cbiAgICByZW1vdmVBdmF0YXI/OiAoKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFsdCB0ZXh0IGZvciB0aGUgYXZhdGFyXG4gICAgICovXG4gICAgYXZhdGFyQWx0VGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3RyaW5nIHRvIHVzZSBmb3IgY29tcHV0aW5nIHRoZSBjb2xvdXIgb2YgdGhlIHBsYWNlaG9sZGVyIGF2YXRhciBpZiBubyBhdmF0YXIgaXMgc2V0XG4gICAgICovXG4gICAgcGxhY2Vob2xkZXJJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3RyaW5nIHRvIHVzZSBmb3IgdGhlIHBsYWNlaG9sZGVyIGRpc3BsYXkgaWYgbm8gYXZhdGFyIGlzIHNldFxuICAgICAqL1xuICAgIHBsYWNlaG9sZGVyTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXBvbmVudCBmb3Igc2V0dGluZyBvciByZW1vdmluZyBhbiBhdmF0YXIgb24gc29tZXRoaW5nIChlZy4gYSB1c2VyIG9yIGEgcm9vbSlcbiAqL1xuY29uc3QgQXZhdGFyU2V0dGluZzogUmVhY3QuRkM8SVByb3BzPiA9ICh7XG4gICAgYXZhdGFyLFxuICAgIGF2YXRhckFsdFRleHQsXG4gICAgb25DaGFuZ2UsXG4gICAgcmVtb3ZlQXZhdGFyLFxuICAgIGRpc2FibGVkLFxuICAgIHBsYWNlaG9sZGVySWQsXG4gICAgcGxhY2Vob2xkZXJOYW1lLFxufSkgPT4ge1xuICAgIGNvbnN0IGZpbGVJbnB1dFJlZiA9IGNyZWF0ZVJlZjxIVE1MSW5wdXRFbGVtZW50PigpO1xuXG4gICAgLy8gUmVhbCBVUkwgdGhhdCB3ZSBjYW4gc3VwcGx5IHRvIHRoZSBpbWcgZWxlbWVudCwgZWl0aGVyIGEgZGF0YSBVUkwgb3Igd2hhdGV2ZXIgbWVkaWFGcm9tTXhjIGdpdmVzXG4gICAgLy8gVGhpcyByZXByZXNlbnRzIHdoYXRldmVyIGF2YXRhciB0aGUgdXNlciBoYXMgY2hvc2VuIGF0IHRoZSB0aW1lXG4gICAgY29uc3QgW2F2YXRhclVSTCwgc2V0QXZhdGFyVVJMXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXZhdGFyIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0QXZhdGFyVVJMKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChhdmF0YXIpO1xuICAgICAgICB9IGVsc2UgaWYgKGF2YXRhcikge1xuICAgICAgICAgICAgc2V0QXZhdGFyVVJMKG1lZGlhRnJvbU14YyhhdmF0YXIpLmdldFNxdWFyZVRodW1ibmFpbEh0dHAoOTYpID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRBdmF0YXJVUkwodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH0sIFthdmF0YXJdKTtcblxuICAgIC8vIFByZXZlbnRzIElEIGNvbGxpc2lvbnMgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIHBhZ2UuXG4gICAgY29uc3QgYTExeUlkID0gdXNlSWQoKTtcblxuICAgIGNvbnN0IG9uRmlsZUNoYW5nZWQgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMpIG9uQ2hhbmdlPy4oZS50YXJnZXQuZmlsZXNbMF0pO1xuICAgICAgICB9LFxuICAgICAgICBbb25DaGFuZ2VdLFxuICAgICk7XG5cbiAgICBjb25zdCB1cGxvYWRBdmF0YXIgPSB1c2VDYWxsYmFjaygoKTogdm9pZCA9PiB7XG4gICAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpO1xuICAgIH0sIFtmaWxlSW5wdXRSZWZdKTtcblxuICAgIGNvbnN0IFttZW51T3Blbiwgc2V0TWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3Qgb25PcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG5ld09wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgICAgc2V0TWVudU9wZW4obmV3T3Blbik7XG4gICAgfSwgW10pO1xuXG4gICAgbGV0IGF2YXRhckVsZW1lbnQgPSAoXG4gICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICBlbGVtZW50PVwiZGl2XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3VwbG9hZEF2YXRhcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0F2YXRhclNldHRpbmdfYXZhdGFyUGxhY2Vob2xkZXIgbXhfQXZhdGFyU2V0dGluZ19hdmF0YXJEaXNwbGF5XCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17ZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBhMTF5SWR9XG4gICAgICAgICAgICAvLyBJbmhpYml0IHRhYiBzdG9wIGFzIHdlIGhhdmUgZXhwbGljaXQgdXBsb2FkL3JlbW92ZSBidXR0b25zXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxCYXNlQXZhdGFyIGlkTmFtZT17cGxhY2Vob2xkZXJJZH0gbmFtZT17cGxhY2Vob2xkZXJOYW1lfSBzaXplPVwiOTBweFwiIC8+XG4gICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICApO1xuICAgIGlmIChhdmF0YXJVUkwpIHtcbiAgICAgICAgYXZhdGFyRWxlbWVudCA9IChcbiAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgZWxlbWVudD1cImltZ1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfQXZhdGFyU2V0dGluZ19hdmF0YXJEaXNwbGF5XCJcbiAgICAgICAgICAgICAgICBzcmM9e2F2YXRhclVSTH1cbiAgICAgICAgICAgICAgICBhbHQ9e2F2YXRhckFsdFRleHR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dXBsb2FkQXZhdGFyfVxuICAgICAgICAgICAgICAgIC8vIEluaGliaXQgdGFiIHN0b3AgYXMgd2UgaGF2ZSBleHBsaWNpdCB1cGxvYWQvcmVtb3ZlIGJ1dHRvbnNcbiAgICAgICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgdXBsb2FkQXZhdGFyQnRuOiBKU1guRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHVwbG9hZEJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKFwibXhfQXZhdGFyU2V0dGluZ191cGxvYWRCdXR0b25cIiwge1xuICAgICAgICAgICAgbXhfQXZhdGFyU2V0dGluZ191cGxvYWRCdXR0b25fYWN0aXZlOiBtZW51T3BlbixcbiAgICAgICAgfSk7XG4gICAgICAgIHVwbG9hZEF2YXRhckJ0biA9IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt1cGxvYWRCdXR0b25DbGFzc2VzfT5cbiAgICAgICAgICAgICAgICA8RWRpdEljb24gd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0F2YXRhclNldHRpbmdfYXZhdGFyXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD17YXZhdGFyQWx0VGV4dH0+XG4gICAgICAgICAgICB7YXZhdGFyRWxlbWVudH1cbiAgICAgICAgICAgIHt1cGxvYWRBdmF0YXJCdG59XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxBdmF0YXJTZXR0aW5nQ29udGV4dE1lbnVcbiAgICAgICAgICAgICAgICB0cmlnZ2VyPXtjb250ZW50fVxuICAgICAgICAgICAgICAgIG9uVXBsb2FkU2VsZWN0PXt1cGxvYWRBdmF0YXJ9XG4gICAgICAgICAgICAgICAgb25SZW1vdmVTZWxlY3Q9e3JlbW92ZUF2YXRhcn1cbiAgICAgICAgICAgICAgICBtZW51T3Blbj17bWVudU9wZW59XG4gICAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwibm9uZVwiIH19XG4gICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgb25DbGljaz17Y2hyb21lRmlsZUlucHV0Rml4fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkZpbGVDaGFuZ2VkfVxuICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgICAgIGFsdD17X3QoXCJhY3Rpb258dXBsb2FkXCIpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF2YXRhclNldHRpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9B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