matrix-react-sdk
Version:
SDK for matrix.org using React
117 lines (113 loc) • 21.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _logger = require("matrix-js-sdk/src/logger");
var _matrix = require("matrix-js-sdk/src/matrix");
var _languageHandler = require("../../../languageHandler");
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _actions = require("../../../dispatcher/actions");
var _BaseDialog = _interopRequireDefault(require("../dialogs/BaseDialog"));
var _InfoDialog = _interopRequireDefault(require("../dialogs/InfoDialog"));
var _DialogButtons = _interopRequireDefault(require("../elements/DialogButtons"));
var _StyledCheckbox = _interopRequireDefault(require("../elements/StyledCheckbox"));
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 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 BulkRedactDialog = props => {
const {
matrixClient: cli,
room,
member,
onFinished
} = props;
const [keepStateEvents, setKeepStateEvents] = (0, _react.useState)(true);
let timeline = room.getLiveTimeline();
let eventsToRedact = [];
while (timeline) {
eventsToRedact = [...eventsToRedact, ...timeline.getEvents().filter(event => event.getSender() === member.userId && !event.isRedacted() && !event.isRedaction() && event.getType() !== _matrix.EventType.RoomCreate &&
// Don't redact ACLs because that'll obliterate the room
// See https://github.com/matrix-org/synapse/issues/4042 for details.
event.getType() !== _matrix.EventType.RoomServerAcl &&
// Redacting encryption events is equally bad
event.getType() !== _matrix.EventType.RoomEncryption)];
timeline = timeline.getNeighbouringTimeline(_matrix.EventTimeline.BACKWARDS);
}
if (eventsToRedact.length === 0) {
return /*#__PURE__*/_react.default.createElement(_InfoDialog.default, {
onFinished: onFinished,
title: (0, _languageHandler._t)("user_info|redact|no_recent_messages_title", {
user: member.name
}),
description: /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("user_info|redact|no_recent_messages_description")))
});
} else {
eventsToRedact = eventsToRedact.filter(event => !(keepStateEvents && event.isState()));
const count = eventsToRedact.length;
const user = member.name;
const redact = async () => {
_logger.logger.info(`Started redacting recent ${count} messages for ${member.userId} in ${room.roomId}`);
_dispatcher.default.dispatch({
action: _actions.Action.BulkRedactStart,
room_id: room.roomId
});
// Submitting a large number of redactions freezes the UI,
// so first yield to allow to rerender after closing the dialog.
await Promise.resolve();
await Promise.all(eventsToRedact.reverse().map(async event => {
try {
await cli.redactEvent(room.roomId, event.getId());
} catch (err) {
// log and swallow errors
_logger.logger.error("Could not redact", event.getId());
_logger.logger.error(err);
}
}));
_logger.logger.info(`Finished redacting recent ${count} messages for ${member.userId} in ${room.roomId}`);
_dispatcher.default.dispatch({
action: _actions.Action.BulkRedactEnd,
room_id: room.roomId
});
};
return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, {
className: "mx_BulkRedactDialog",
onFinished: onFinished,
title: (0, _languageHandler._t)("user_info|redact|confirm_title", {
user
}),
contentId: "mx_Dialog_content"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_Dialog_content",
id: "mx_Dialog_content"
}, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("user_info|redact|confirm_description_1", {
count,
user
})), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("user_info|redact|confirm_description_2")), /*#__PURE__*/_react.default.createElement(_StyledCheckbox.default, {
checked: keepStateEvents,
onChange: e => setKeepStateEvents(e.target.checked)
}, (0, _languageHandler._t)("user_info|redact|confirm_keep_state_label")), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_BulkRedactDialog_checkboxMicrocopy"
}, (0, _languageHandler._t)("user_info|redact|confirm_keep_state_explainer"))), /*#__PURE__*/_react.default.createElement(_DialogButtons.default, {
primaryButton: (0, _languageHandler._t)("user_info|redact|confirm_button", {
count
}),
primaryButtonClass: "danger",
primaryDisabled: count === 0,
onPrimaryButtonClick: () => {
setTimeout(redact, 0);
onFinished(true);
},
onCancel: () => onFinished(false)
}));
}
};
var _default = exports.default = BulkRedactDialog;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX21hdHJpeCIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfZGlzcGF0Y2hlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfYWN0aW9ucyIsIl9CYXNlRGlhbG9nIiwiX0luZm9EaWFsb2ciLCJfRGlhbG9nQnV0dG9ucyIsIl9TdHlsZWRDaGVja2JveCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkJ1bGtSZWRhY3REaWFsb2ciLCJwcm9wcyIsIm1hdHJpeENsaWVudCIsImNsaSIsInJvb20iLCJtZW1iZXIiLCJvbkZpbmlzaGVkIiwia2VlcFN0YXRlRXZlbnRzIiwic2V0S2VlcFN0YXRlRXZlbnRzIiwidXNlU3RhdGUiLCJ0aW1lbGluZSIsImdldExpdmVUaW1lbGluZSIsImV2ZW50c1RvUmVkYWN0IiwiZ2V0RXZlbnRzIiwiZmlsdGVyIiwiZXZlbnQiLCJnZXRTZW5kZXIiLCJ1c2VySWQiLCJpc1JlZGFjdGVkIiwiaXNSZWRhY3Rpb24iLCJnZXRUeXBlIiwiRXZlbnRUeXBlIiwiUm9vbUNyZWF0ZSIsIlJvb21TZXJ2ZXJBY2wiLCJSb29tRW5jcnlwdGlvbiIsImdldE5laWdoYm91cmluZ1RpbWVsaW5lIiwiRXZlbnRUaW1lbGluZSIsIkJBQ0tXQVJEUyIsImxlbmd0aCIsImNyZWF0ZUVsZW1lbnQiLCJ0aXRsZSIsIl90IiwidXNlciIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImlzU3RhdGUiLCJjb3VudCIsInJlZGFjdCIsImxvZ2dlciIsImluZm8iLCJyb29tSWQiLCJkaXMiLCJkaXNwYXRjaCIsImFjdGlvbiIsIkFjdGlvbiIsIkJ1bGtSZWRhY3RTdGFydCIsInJvb21faWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFsbCIsInJldmVyc2UiLCJtYXAiLCJyZWRhY3RFdmVudCIsImdldElkIiwiZXJyIiwiZXJyb3IiLCJCdWxrUmVkYWN0RW5kIiwiY2xhc3NOYW1lIiwiY29udGVudElkIiwiaWQiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJwcmltYXJ5QnV0dG9uIiwicHJpbWFyeUJ1dHRvbkNsYXNzIiwicHJpbWFyeURpc2FibGVkIiwib25QcmltYXJ5QnV0dG9uQ2xpY2siLCJzZXRUaW1lb3V0Iiwib25DYW5jZWwiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL0J1bGtSZWRhY3REaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuaW1wb3J0IHsgTWF0cml4Q2xpZW50LCBSb29tTWVtYmVyLCBSb29tLCBNYXRyaXhFdmVudCwgRXZlbnRUaW1lbGluZSwgRXZlbnRUeXBlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBkaXMgZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IEJhc2VEaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvQmFzZURpYWxvZ1wiO1xuaW1wb3J0IEluZm9EaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvSW5mb0RpYWxvZ1wiO1xuaW1wb3J0IERpYWxvZ0J1dHRvbnMgZnJvbSBcIi4uL2VsZW1lbnRzL0RpYWxvZ0J1dHRvbnNcIjtcbmltcG9ydCBTdHlsZWRDaGVja2JveCBmcm9tIFwiLi4vZWxlbWVudHMvU3R5bGVkQ2hlY2tib3hcIjtcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudDtcbiAgICByb29tOiBSb29tO1xuICAgIG1lbWJlcjogUm9vbU1lbWJlcjtcbiAgICBvbkZpbmlzaGVkKHJlZGFjdD86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG5jb25zdCBCdWxrUmVkYWN0RGlhbG9nOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IG1hdHJpeENsaWVudDogY2xpLCByb29tLCBtZW1iZXIsIG9uRmluaXNoZWQgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtrZWVwU3RhdGVFdmVudHMsIHNldEtlZXBTdGF0ZUV2ZW50c10gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICAgIGxldCB0aW1lbGluZTogRXZlbnRUaW1lbGluZSB8IG51bGwgPSByb29tLmdldExpdmVUaW1lbGluZSgpO1xuICAgIGxldCBldmVudHNUb1JlZGFjdDogTWF0cml4RXZlbnRbXSA9IFtdO1xuICAgIHdoaWxlICh0aW1lbGluZSkge1xuICAgICAgICBldmVudHNUb1JlZGFjdCA9IFtcbiAgICAgICAgICAgIC4uLmV2ZW50c1RvUmVkYWN0LFxuICAgICAgICAgICAgLi4udGltZWxpbmUuZ2V0RXZlbnRzKCkuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0U2VuZGVyKCkgPT09IG1lbWJlci51c2VySWQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWV2ZW50LmlzUmVkYWN0ZWQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZXZlbnQuaXNSZWRhY3Rpb24oKSAmJlxuICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5Sb29tQ3JlYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlZGFjdCBBQ0xzIGJlY2F1c2UgdGhhdCdsbCBvYmxpdGVyYXRlIHRoZSByb29tXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF0cml4LW9yZy9zeW5hcHNlL2lzc3Vlcy80MDQyIGZvciBkZXRhaWxzLlxuICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5Sb29tU2VydmVyQWNsICYmXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZGFjdGluZyBlbmNyeXB0aW9uIGV2ZW50cyBpcyBlcXVhbGx5IGJhZFxuICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5Sb29tRW5jcnlwdGlvbixcbiAgICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICAgIHRpbWVsaW5lID0gdGltZWxpbmUuZ2V0TmVpZ2hib3VyaW5nVGltZWxpbmUoRXZlbnRUaW1lbGluZS5CQUNLV0FSRFMpO1xuICAgIH1cblxuICAgIGlmIChldmVudHNUb1JlZGFjdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxJbmZvRGlhbG9nXG4gICAgICAgICAgICAgICAgb25GaW5pc2hlZD17b25GaW5pc2hlZH1cbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJ1c2VyX2luZm98cmVkYWN0fG5vX3JlY2VudF9tZXNzYWdlc190aXRsZVwiLCB7IHVzZXI6IG1lbWJlci5uYW1lIH0pfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPntfdChcInVzZXJfaW5mb3xyZWRhY3R8bm9fcmVjZW50X21lc3NhZ2VzX2Rlc2NyaXB0aW9uXCIpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHNUb1JlZGFjdCA9IGV2ZW50c1RvUmVkYWN0LmZpbHRlcigoZXZlbnQpID0+ICEoa2VlcFN0YXRlRXZlbnRzICYmIGV2ZW50LmlzU3RhdGUoKSkpO1xuICAgICAgICBjb25zdCBjb3VudCA9IGV2ZW50c1RvUmVkYWN0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgdXNlciA9IG1lbWJlci5uYW1lO1xuXG4gICAgICAgIGNvbnN0IHJlZGFjdCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGVkIHJlZGFjdGluZyByZWNlbnQgJHtjb3VudH0gbWVzc2FnZXMgZm9yICR7bWVtYmVyLnVzZXJJZH0gaW4gJHtyb29tLnJvb21JZH1gKTtcbiAgICAgICAgICAgIGRpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uQnVsa1JlZGFjdFN0YXJ0LFxuICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFN1Ym1pdHRpbmcgYSBsYXJnZSBudW1iZXIgb2YgcmVkYWN0aW9ucyBmcmVlemVzIHRoZSBVSSxcbiAgICAgICAgICAgIC8vIHNvIGZpcnN0IHlpZWxkIHRvIGFsbG93IHRvIHJlcmVuZGVyIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZy5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZXZlbnRzVG9SZWRhY3QucmV2ZXJzZSgpLm1hcChhc3luYyAoZXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNsaS5yZWRhY3RFdmVudChyb29tLnJvb21JZCwgZXZlbnQuZ2V0SWQoKSEpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyBhbmQgc3dhbGxvdyBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkNvdWxkIG5vdCByZWRhY3RcIiwgZXZlbnQuZ2V0SWQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYEZpbmlzaGVkIHJlZGFjdGluZyByZWNlbnQgJHtjb3VudH0gbWVzc2FnZXMgZm9yICR7bWVtYmVyLnVzZXJJZH0gaW4gJHtyb29tLnJvb21JZH1gKTtcbiAgICAgICAgICAgIGRpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uQnVsa1JlZGFjdEVuZCxcbiAgICAgICAgICAgICAgICByb29tX2lkOiByb29tLnJvb21JZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QmFzZURpYWxvZ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0J1bGtSZWRhY3REaWFsb2dcIlxuICAgICAgICAgICAgICAgIG9uRmluaXNoZWQ9e29uRmluaXNoZWR9XG4gICAgICAgICAgICAgICAgdGl0bGU9e190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX3RpdGxlXCIsIHsgdXNlciB9KX1cbiAgICAgICAgICAgICAgICBjb250ZW50SWQ9XCJteF9EaWFsb2dfY29udGVudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9EaWFsb2dfY29udGVudFwiIGlkPVwibXhfRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+e190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX2Rlc2NyaXB0aW9uXzFcIiwgeyBjb3VudCwgdXNlciB9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPntfdChcInVzZXJfaW5mb3xyZWRhY3R8Y29uZmlybV9kZXNjcmlwdGlvbl8yXCIpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZENoZWNrYm94IGNoZWNrZWQ9e2tlZXBTdGF0ZUV2ZW50c30gb25DaGFuZ2U9eyhlKSA9PiBzZXRLZWVwU3RhdGVFdmVudHMoZS50YXJnZXQuY2hlY2tlZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX2tlZXBfc3RhdGVfbGFiZWxcIil9XG4gICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfQnVsa1JlZGFjdERpYWxvZ19jaGVja2JveE1pY3JvY29weVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX2tlZXBfc3RhdGVfZXhwbGFpbmVyXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8RGlhbG9nQnV0dG9uc1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5QnV0dG9uPXtfdChcInVzZXJfaW5mb3xyZWRhY3R8Y29uZmlybV9idXR0b25cIiwgeyBjb3VudCB9KX1cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUJ1dHRvbkNsYXNzPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeURpc2FibGVkPXtjb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgb25QcmltYXJ5QnV0dG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVkYWN0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRmluaXNoZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBvbkZpbmlzaGVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICAgICApO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJ1bGtSZWRhY3REaWFsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBRixzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBSCxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVMsY0FBQSxHQUFBSixzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBTCxzQkFB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