matrix-react-sdk
Version:
SDK for matrix.org using React
146 lines (140 loc) • 26.5 kB
JavaScript
;
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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