UNPKG

matrix-react-sdk

Version:
146 lines (140 loc) 26.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.ThreadsActivityCentre = ThreadsActivityCentre; var _react = _interopRequireWildcard(require("react")); var _compoundWeb = require("@vector-im/compound-web"); var _ThreadsActivityCentreButton = require("./ThreadsActivityCentreButton"); var _languageHandler = require("../../../../languageHandler"); var _DecoratedRoomAvatar = _interopRequireDefault(require("../../avatars/DecoratedRoomAvatar")); var _actions = require("../../../../dispatcher/actions"); var _dispatcher = _interopRequireDefault(require("../../../../dispatcher/dispatcher")); var _RightPanelStore = _interopRequireDefault(require("../../../../stores/right-panel/RightPanelStore")); var _RightPanelStorePhases = require("../../../../stores/right-panel/RightPanelStorePhases"); var _useUnreadThreadRooms = require("./useUnreadThreadRooms"); var _StatelessNotificationBadge = require("../../rooms/NotificationBadge/StatelessNotificationBadge"); var _PosthogTrackers = _interopRequireDefault(require("../../../../PosthogTrackers")); var _KeyBindingsManager = require("../../../../KeyBindingsManager"); var _KeyboardShortcuts = require("../../../../accessibility/KeyboardShortcuts"); var _ReleaseAnnouncement = require("../../../structures/ReleaseAnnouncement"); var _useIsReleaseAnnouncementOpen = require("../../../../hooks/useIsReleaseAnnouncementOpen"); var _useSettings = require("../../../../hooks/useSettings"); var _ReleaseAnnouncementStore = require("../../../../stores/ReleaseAnnouncementStore"); 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 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. */ /** * Display in a popup the list of rooms with unread threads. * The popup is displayed when the user clicks on the `Threads` button. */ function ThreadsActivityCentre({ displayButtonLabel }) { const [open, setOpen] = (0, _react.useState)(false); const roomsAndNotifications = (0, _useUnreadThreadRooms.useUnreadThreadRooms)(open); const isReleaseAnnouncementOpen = (0, _useIsReleaseAnnouncementOpen.useIsReleaseAnnouncementOpen)("threadsActivityCentre"); const settingTACOnlyNotifs = (0, _useSettings.useSettingValue)("Notifications.tac_only_notifications"); const emptyCaption = settingTACOnlyNotifs ? (0, _languageHandler._t)("threads_activity_centre|no_rooms_with_threads_notifs") : (0, _languageHandler._t)("threads_activity_centre|no_rooms_with_unread_threads"); return /*#__PURE__*/_react.default.createElement("div", { className: "mx_ThreadsActivityCentre_container", onKeyDown: evt => { // Do nothing if the TAC is closed if (!open) return; const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getNavigationAction(evt); // Block spotlight opening if (action === _KeyboardShortcuts.KeyBindingAction.FilterRooms) { evt.stopPropagation(); } } }, isReleaseAnnouncementOpen ? /*#__PURE__*/_react.default.createElement(_ReleaseAnnouncement.ReleaseAnnouncement, { feature: "threadsActivityCentre", header: (0, _languageHandler._t)("threads_activity_centre|release_announcement_header"), description: (0, _languageHandler._t)("threads_activity_centre|release_announcement_description"), closeLabel: (0, _languageHandler._t)("action|ok") }, /*#__PURE__*/_react.default.createElement(_ThreadsActivityCentreButton.ThreadsActivityCentreButton, { disableTooltip: true, displayLabel: displayButtonLabel, notificationLevel: roomsAndNotifications.greatestNotificationLevel, onClick: async () => { // Open the TAC after the release announcement closing setOpen(true); await _ReleaseAnnouncementStore.ReleaseAnnouncementStore.instance.nextReleaseAnnouncement(); } })) : /*#__PURE__*/_react.default.createElement(_compoundWeb.Menu, { align: "start", side: "top", open: open, onOpenChange: newOpen => { // Track only when the Threads Activity Centre is opened if (newOpen) _PosthogTrackers.default.trackInteraction("WebThreadsActivityCentreButton"); setOpen(newOpen); }, title: (0, _languageHandler._t)("threads_activity_centre|header"), trigger: /*#__PURE__*/_react.default.createElement(_ThreadsActivityCentreButton.ThreadsActivityCentreButton, { displayLabel: displayButtonLabel, notificationLevel: roomsAndNotifications.greatestNotificationLevel }) }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_ThreadsActivityCentre_rows" }, roomsAndNotifications.rooms.map(({ room, notificationLevel }) => /*#__PURE__*/_react.default.createElement(ThreadsActivityCentreRow, { key: room.roomId, room: room, notificationLevel: notificationLevel, onClick: () => setOpen(false) })), roomsAndNotifications.rooms.length === 0 && /*#__PURE__*/_react.default.createElement("div", { className: "mx_ThreadsActivityCentre_emptyCaption" }, emptyCaption)))); } /** * Display a room with unread threads. */ function ThreadsActivityCentreRow({ room, onClick, notificationLevel }) { return /*#__PURE__*/_react.default.createElement(_compoundWeb.MenuItem, { className: "mx_ThreadsActivityCentreRow", onSelect: event => { onClick(); // Set the right panel card for that room so the threads panel is open before we dispatch, // so it will open once the room appears. _RightPanelStore.default.instance.setCard({ phase: _RightPanelStorePhases.RightPanelPhases.ThreadPanel }, true, room.roomId); // Track the click on the room _PosthogTrackers.default.trackInteraction("WebThreadsActivityCentreRoomItem", event); // Display the selected room in the timeline _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, show_room_tile: true, // make sure the room is visible in the list room_id: room.roomId, metricsTrigger: "WebThreadsActivityCentre", focusNext: "threadsPanel" }); }, label: room.name, Icon: /*#__PURE__*/_react.default.createElement(_DecoratedRoomAvatar.default, { room: room, size: "32px" }) }, /*#__PURE__*/_react.default.createElement(_StatelessNotificationBadge.StatelessNotificationBadge, { level: notificationLevel, count: 0, symbol: null, forceDot: true })); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29tcG91bmRXZWIiLCJfVGhyZWFkc0FjdGl2aXR5Q2VudHJlQnV0dG9uIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9EZWNvcmF0ZWRSb29tQXZhdGFyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9hY3Rpb25zIiwiX2Rpc3BhdGNoZXIiLCJfUmlnaHRQYW5lbFN0b3JlIiwiX1JpZ2h0UGFuZWxTdG9yZVBoYXNlcyIsIl91c2VVbnJlYWRUaHJlYWRSb29tcyIsIl9TdGF0ZWxlc3NOb3RpZmljYXRpb25CYWRnZSIsIl9Qb3N0aG9nVHJhY2tlcnMiLCJfS2V5QmluZGluZ3NNYW5hZ2VyIiwiX0tleWJvYXJkU2hvcnRjdXRzIiwiX1JlbGVhc2VBbm5vdW5jZW1lbnQiLCJfdXNlSXNSZWxlYXNlQW5ub3VuY2VtZW50T3BlbiIsIl91c2VTZXR0aW5ncyIsIl9SZWxlYXNlQW5ub3VuY2VtZW50U3RvcmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJUaHJlYWRzQWN0aXZpdHlDZW50cmUiLCJkaXNwbGF5QnV0dG9uTGFiZWwiLCJvcGVuIiwic2V0T3BlbiIsInVzZVN0YXRlIiwicm9vbXNBbmROb3RpZmljYXRpb25zIiwidXNlVW5yZWFkVGhyZWFkUm9vbXMiLCJpc1JlbGVhc2VBbm5vdW5jZW1lbnRPcGVuIiwidXNlSXNSZWxlYXNlQW5ub3VuY2VtZW50T3BlbiIsInNldHRpbmdUQUNPbmx5Tm90aWZzIiwidXNlU2V0dGluZ1ZhbHVlIiwiZW1wdHlDYXB0aW9uIiwiX3QiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwib25LZXlEb3duIiwiZXZ0IiwiYWN0aW9uIiwiZ2V0S2V5QmluZGluZ3NNYW5hZ2VyIiwiZ2V0TmF2aWdhdGlvbkFjdGlvbiIsIktleUJpbmRpbmdBY3Rpb24iLCJGaWx0ZXJSb29tcyIsInN0b3BQcm9wYWdhdGlvbiIsIlJlbGVhc2VBbm5vdW5jZW1lbnQiLCJmZWF0dXJlIiwiaGVhZGVyIiwiZGVzY3JpcHRpb24iLCJjbG9zZUxhYmVsIiwiVGhyZWFkc0FjdGl2aXR5Q2VudHJlQnV0dG9uIiwiZGlzYWJsZVRvb2x0aXAiLCJkaXNwbGF5TGFiZWwiLCJub3RpZmljYXRpb25MZXZlbCIsImdyZWF0ZXN0Tm90aWZpY2F0aW9uTGV2ZWwiLCJvbkNsaWNrIiwiUmVsZWFzZUFubm91bmNlbWVudFN0b3JlIiwiaW5zdGFuY2UiLCJuZXh0UmVsZWFzZUFubm91bmNlbWVudCIsIk1lbnUiLCJhbGlnbiIsInNpZGUiLCJvbk9wZW5DaGFuZ2UiLCJuZXdPcGVuIiwiUG9zdGhvZ1RyYWNrZXJzIiwidHJhY2tJbnRlcmFjdGlvbiIsInRpdGxlIiwidHJpZ2dlciIsInJvb21zIiwibWFwIiwicm9vbSIsIlRocmVhZHNBY3Rpdml0eUNlbnRyZVJvdyIsImtleSIsInJvb21JZCIsImxlbmd0aCIsIk1lbnVJdGVtIiwib25TZWxlY3QiLCJldmVudCIsIlJpZ2h0UGFuZWxTdG9yZSIsInNldENhcmQiLCJwaGFzZSIsIlJpZ2h0UGFuZWxQaGFzZXMiLCJUaHJlYWRQYW5lbCIsImRlZmF1bHREaXNwYXRjaGVyIiwiZGlzcGF0Y2giLCJBY3Rpb24iLCJWaWV3Um9vbSIsInNob3dfcm9vbV90aWxlIiwicm9vbV9pZCIsIm1ldHJpY3NUcmlnZ2VyIiwiZm9jdXNOZXh0IiwibGFiZWwiLCJuYW1lIiwiSWNvbiIsInNpemUiLCJTdGF0ZWxlc3NOb3RpZmljYXRpb25CYWRnZSIsImxldmVsIiwiY291bnQiLCJzeW1ib2wiLCJmb3JjZURvdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NwYWNlcy90aHJlYWRzLWFjdGl2aXR5LWNlbnRyZS9UaHJlYWRzQWN0aXZpdHlDZW50cmUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbiAqIENvcHlyaWdodCAyMDI0IFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG4gKiBQbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyBKU1gsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBNZW51LCBNZW51SXRlbSB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuaW1wb3J0IHsgVGhyZWFkc0FjdGl2aXR5Q2VudHJlQnV0dG9uIH0gZnJvbSBcIi4vVGhyZWFkc0FjdGl2aXR5Q2VudHJlQnV0dG9uXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBEZWNvcmF0ZWRSb29tQXZhdGFyIGZyb20gXCIuLi8uLi9hdmF0YXJzL0RlY29yYXRlZFJvb21BdmF0YXJcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBWaWV3Um9vbVBheWxvYWQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlzcGF0Y2hlci9wYXlsb2Fkcy9WaWV3Um9vbVBheWxvYWRcIjtcbmltcG9ydCBSaWdodFBhbmVsU3RvcmUgZnJvbSBcIi4uLy4uLy4uLy4uL3N0b3Jlcy9yaWdodC1wYW5lbC9SaWdodFBhbmVsU3RvcmVcIjtcbmltcG9ydCB7IFJpZ2h0UGFuZWxQaGFzZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc3RvcmVzL3JpZ2h0LXBhbmVsL1JpZ2h0UGFuZWxTdG9yZVBoYXNlc1wiO1xuaW1wb3J0IHsgdXNlVW5yZWFkVGhyZWFkUm9vbXMgfSBmcm9tIFwiLi91c2VVbnJlYWRUaHJlYWRSb29tc1wiO1xuaW1wb3J0IHsgU3RhdGVsZXNzTm90aWZpY2F0aW9uQmFkZ2UgfSBmcm9tIFwiLi4vLi4vcm9vbXMvTm90aWZpY2F0aW9uQmFkZ2UvU3RhdGVsZXNzTm90aWZpY2F0aW9uQmFkZ2VcIjtcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkxldmVsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3N0b3Jlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkxldmVsXCI7XG5pbXBvcnQgUG9zdGhvZ1RyYWNrZXJzIGZyb20gXCIuLi8uLi8uLi8uLi9Qb3N0aG9nVHJhY2tlcnNcIjtcbmltcG9ydCB7IGdldEtleUJpbmRpbmdzTWFuYWdlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9LZXlCaW5kaW5nc01hbmFnZXJcIjtcbmltcG9ydCB7IEtleUJpbmRpbmdBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vYWNjZXNzaWJpbGl0eS9LZXlib2FyZFNob3J0Y3V0c1wiO1xuaW1wb3J0IHsgUmVsZWFzZUFubm91bmNlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9zdHJ1Y3R1cmVzL1JlbGVhc2VBbm5vdW5jZW1lbnRcIjtcbmltcG9ydCB7IHVzZUlzUmVsZWFzZUFubm91bmNlbWVudE9wZW4gfSBmcm9tIFwiLi4vLi4vLi4vLi4vaG9va3MvdXNlSXNSZWxlYXNlQW5ub3VuY2VtZW50T3BlblwiO1xuaW1wb3J0IHsgdXNlU2V0dGluZ1ZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZVNldHRpbmdzXCI7XG5pbXBvcnQgeyBSZWxlYXNlQW5ub3VuY2VtZW50U3RvcmUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc3RvcmVzL1JlbGVhc2VBbm5vdW5jZW1lbnRTdG9yZVwiO1xuXG5pbnRlcmZhY2UgVGhyZWFkc0FjdGl2aXR5Q2VudHJlUHJvcHMge1xuICAgIC8qKlxuICAgICAqIERpc3BsYXkgdGhlIGBUcmVhZHNgIGxhYmVsIG5leHQgdG8gdGhlIGljb24uXG4gICAgICovXG4gICAgZGlzcGxheUJ1dHRvbkxhYmVsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGluIGEgcG9wdXAgdGhlIGxpc3Qgb2Ygcm9vbXMgd2l0aCB1bnJlYWQgdGhyZWFkcy5cbiAqIFRoZSBwb3B1cCBpcyBkaXNwbGF5ZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIGBUaHJlYWRzYCBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUaHJlYWRzQWN0aXZpdHlDZW50cmUoeyBkaXNwbGF5QnV0dG9uTGFiZWwgfTogVGhyZWFkc0FjdGl2aXR5Q2VudHJlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHJvb21zQW5kTm90aWZpY2F0aW9ucyA9IHVzZVVucmVhZFRocmVhZFJvb21zKG9wZW4pO1xuICAgIGNvbnN0IGlzUmVsZWFzZUFubm91bmNlbWVudE9wZW4gPSB1c2VJc1JlbGVhc2VBbm5vdW5jZW1lbnRPcGVuKFwidGhyZWFkc0FjdGl2aXR5Q2VudHJlXCIpO1xuICAgIGNvbnN0IHNldHRpbmdUQUNPbmx5Tm90aWZzID0gdXNlU2V0dGluZ1ZhbHVlPGJvb2xlYW4+KFwiTm90aWZpY2F0aW9ucy50YWNfb25seV9ub3RpZmljYXRpb25zXCIpO1xuXG4gICAgY29uc3QgZW1wdHlDYXB0aW9uID0gc2V0dGluZ1RBQ09ubHlOb3RpZnNcbiAgICAgICAgPyBfdChcInRocmVhZHNfYWN0aXZpdHlfY2VudHJlfG5vX3Jvb21zX3dpdGhfdGhyZWFkc19ub3RpZnNcIilcbiAgICAgICAgOiBfdChcInRocmVhZHNfYWN0aXZpdHlfY2VudHJlfG5vX3Jvb21zX3dpdGhfdW5yZWFkX3RocmVhZHNcIik7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJteF9UaHJlYWRzQWN0aXZpdHlDZW50cmVfY29udGFpbmVyXCJcbiAgICAgICAgICAgIG9uS2V5RG93bj17KGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIFRBQyBpcyBjbG9zZWRcbiAgICAgICAgICAgICAgICBpZiAoIW9wZW4pIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGdldEtleUJpbmRpbmdzTWFuYWdlcigpLmdldE5hdmlnYXRpb25BY3Rpb24oZXZ0KTtcblxuICAgICAgICAgICAgICAgIC8vIEJsb2NrIHNwb3RsaWdodCBvcGVuaW5nXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gS2V5QmluZGluZ0FjdGlvbi5GaWx0ZXJSb29tcykge1xuICAgICAgICAgICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgICAge2lzUmVsZWFzZUFubm91bmNlbWVudE9wZW4gPyAoXG4gICAgICAgICAgICAgICAgPFJlbGVhc2VBbm5vdW5jZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZT1cInRocmVhZHNBY3Rpdml0eUNlbnRyZVwiXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcj17X3QoXCJ0aHJlYWRzX2FjdGl2aXR5X2NlbnRyZXxyZWxlYXNlX2Fubm91bmNlbWVudF9oZWFkZXJcIil9XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfdChcInRocmVhZHNfYWN0aXZpdHlfY2VudHJlfHJlbGVhc2VfYW5ub3VuY2VtZW50X2Rlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICBjbG9zZUxhYmVsPXtfdChcImFjdGlvbnxva1wiKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxUaHJlYWRzQWN0aXZpdHlDZW50cmVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVUb29sdGlwPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUxhYmVsPXtkaXNwbGF5QnV0dG9uTGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25MZXZlbD17cm9vbXNBbmROb3RpZmljYXRpb25zLmdyZWF0ZXN0Tm90aWZpY2F0aW9uTGV2ZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbiB0aGUgVEFDIGFmdGVyIHRoZSByZWxlYXNlIGFubm91bmNlbWVudCBjbG9zaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBSZWxlYXNlQW5ub3VuY2VtZW50U3RvcmUuaW5zdGFuY2UubmV4dFJlbGVhc2VBbm5vdW5jZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9SZWxlYXNlQW5ub3VuY2VtZW50PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgICAgICAgICBhbGlnbj1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgc2lkZT1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgIG9wZW49e29wZW59XG4gICAgICAgICAgICAgICAgICAgIG9uT3BlbkNoYW5nZT17KG5ld09wZW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYWNrIG9ubHkgd2hlbiB0aGUgVGhyZWFkcyBBY3Rpdml0eSBDZW50cmUgaXMgb3BlbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3T3BlbikgUG9zdGhvZ1RyYWNrZXJzLnRyYWNrSW50ZXJhY3Rpb24oXCJXZWJUaHJlYWRzQWN0aXZpdHlDZW50cmVCdXR0b25cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE9wZW4obmV3T3Blbik7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcInRocmVhZHNfYWN0aXZpdHlfY2VudHJlfGhlYWRlclwiKX1cbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcj17XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGhyZWFkc0FjdGl2aXR5Q2VudHJlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUxhYmVsPXtkaXNwbGF5QnV0dG9uTGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uTGV2ZWw9e3Jvb21zQW5kTm90aWZpY2F0aW9ucy5ncmVhdGVzdE5vdGlmaWNhdGlvbkxldmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgey8qIE1ha2UgdGhlIGNvbnRlbnQgb2YgdGhlIHBvcC11cCBzY3JvbGxhYmxlICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1RocmVhZHNBY3Rpdml0eUNlbnRyZV9yb3dzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm9vbXNBbmROb3RpZmljYXRpb25zLnJvb21zLm1hcCgoeyByb29tLCBub3RpZmljYXRpb25MZXZlbCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRocmVhZHNBY3Rpdml0eUNlbnRyZVJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3Jvb20ucm9vbUlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb29tPXtyb29tfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25MZXZlbD17bm90aWZpY2F0aW9uTGV2ZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE9wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb29tc0FuZE5vdGlmaWNhdGlvbnMucm9vbXMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1RocmVhZHNBY3Rpdml0eUNlbnRyZV9lbXB0eUNhcHRpb25cIj57ZW1wdHlDYXB0aW9ufTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn1cblxuaW50ZXJmYWNlIFRocmVhZHNBY3Rpdml0eVJvdyB7XG4gICAgLyoqXG4gICAgICogVGhlIHJvb20gd2l0aCB1bnJlYWQgdGhyZWFkcy5cbiAgICAgKi9cbiAgICByb29tOiBSb29tO1xuICAgIC8qKlxuICAgICAqIFRoZSBub3RpZmljYXRpb24gbGV2ZWwuXG4gICAgICovXG4gICAgbm90aWZpY2F0aW9uTGV2ZWw6IE5vdGlmaWNhdGlvbkxldmVsO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSByb3cuXG4gICAgICovXG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGEgcm9vbSB3aXRoIHVucmVhZCB0aHJlYWRzLlxuICovXG5mdW5jdGlvbiBUaHJlYWRzQWN0aXZpdHlDZW50cmVSb3coeyByb29tLCBvbkNsaWNrLCBub3RpZmljYXRpb25MZXZlbCB9OiBUaHJlYWRzQWN0aXZpdHlSb3cpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJteF9UaHJlYWRzQWN0aXZpdHlDZW50cmVSb3dcIlxuICAgICAgICAgICAgb25TZWxlY3Q9eyhldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHJpZ2h0IHBhbmVsIGNhcmQgZm9yIHRoYXQgcm9vbSBzbyB0aGUgdGhyZWFkcyBwYW5lbCBpcyBvcGVuIGJlZm9yZSB3ZSBkaXNwYXRjaCxcbiAgICAgICAgICAgICAgICAvLyBzbyBpdCB3aWxsIG9wZW4gb25jZSB0aGUgcm9vbSBhcHBlYXJzLlxuICAgICAgICAgICAgICAgIFJpZ2h0UGFuZWxTdG9yZS5pbnN0YW5jZS5zZXRDYXJkKHsgcGhhc2U6IFJpZ2h0UGFuZWxQaGFzZXMuVGhyZWFkUGFuZWwgfSwgdHJ1ZSwgcm9vbS5yb29tSWQpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJhY2sgdGhlIGNsaWNrIG9uIHRoZSByb29tXG4gICAgICAgICAgICAgICAgUG9zdGhvZ1RyYWNrZXJzLnRyYWNrSW50ZXJhY3Rpb24oXCJXZWJUaHJlYWRzQWN0aXZpdHlDZW50cmVSb29tSXRlbVwiLCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICAvLyBEaXNwbGF5IHRoZSBzZWxlY3RlZCByb29tIGluIHRoZSB0aW1lbGluZVxuICAgICAgICAgICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoPFZpZXdSb29tUGF5bG9hZD4oe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IEFjdGlvbi5WaWV3Um9vbSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd19yb29tX3RpbGU6IHRydWUsIC8vIG1ha2Ugc3VyZSB0aGUgcm9vbSBpcyB2aXNpYmxlIGluIHRoZSBsaXN0XG4gICAgICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNzVHJpZ2dlcjogXCJXZWJUaHJlYWRzQWN0aXZpdHlDZW50cmVcIixcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNOZXh0OiBcInRocmVhZHNQYW5lbFwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGxhYmVsPXtyb29tLm5hbWV9XG4gICAgICAgICAgICBJY29uPXs8RGVjb3JhdGVkUm9vbUF2YXRhciByb29tPXtyb29tfSBzaXplPVwiMzJweFwiIC8+fVxuICAgICAgICA+XG4gICAgICAgICAgICA8U3RhdGVsZXNzTm90aWZpY2F0aW9uQmFkZ2UgbGV2ZWw9e25vdGlmaWNhdGlvbkxldmVsfSBjb3VudD17MH0gc3ltYm9sPXtudWxsfSBmb3JjZURvdD17dHJ1ZX0gLz5cbiAgICAgICAgPC9NZW51SXRlbT5cbiAgICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBR0EsSUFBQUUsNEJBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBRixzQkFBQSxDQUFBTCxPQUFBO0FBRUEsSUFBQVEsZ0JBQUEsR0FBQUgsc0JBQUEsQ0FBQUwsT0FBQTtBQUNB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