matrix-react-sdk
Version:
SDK for matrix.org using React
217 lines (182 loc) • 24.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var sdk = _interopRequireWildcard(require("../../../index"));
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _languageHandler = require("../../../languageHandler");
var _classnames = _interopRequireDefault(require("classnames"));
var _E2EIcon = _interopRequireDefault(require("./E2EIcon"));
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _dec, _class, _class2, _temp;
const PRESENCE_CLASS = {
"offline": "mx_EntityTile_offline",
"online": "mx_EntityTile_online",
"unavailable": "mx_EntityTile_unavailable"
};
function presenceClassForMember(presenceState, lastActiveAgo, showPresence) {
if (showPresence === false) {
return 'mx_EntityTile_online_beenactive';
} // offline is split into two categories depending on whether we have
// a last_active_ago for them.
if (presenceState == 'offline') {
if (lastActiveAgo) {
return PRESENCE_CLASS['offline'] + '_beenactive';
} else {
return PRESENCE_CLASS['offline'] + '_neveractive';
}
} else if (presenceState) {
return PRESENCE_CLASS[presenceState];
} else {
return PRESENCE_CLASS['offline'] + '_neveractive';
}
}
let EntityTile = (_dec = (0, _replaceableComponent.replaceableComponent)("views.rooms.EntityTile"), _dec(_class = (_temp = _class2 = class EntityTile extends _react.default.Component {
constructor(...args) {
super(...args);
(0, _defineProperty2.default)(this, "state", {
hover: false
});
}
shouldComponentUpdate(nextProps, nextState) {
if (this.state.hover !== nextState.hover) return true;
return this.props.shouldComponentUpdate(nextProps, nextState);
}
render() {
const mainClassNames = {
"mx_EntityTile": true,
"mx_EntityTile_noHover": this.props.suppressOnHover
};
if (this.props.className) mainClassNames[this.props.className] = true;
const presenceClass = presenceClassForMember(this.props.presenceState, this.props.presenceLastActiveAgo, this.props.showPresence);
mainClassNames[presenceClass] = true;
let nameEl;
const {
name
} = this.props;
if (!this.props.suppressOnHover) {
const activeAgo = this.props.presenceLastActiveAgo ? Date.now() - (this.props.presenceLastTs - this.props.presenceLastActiveAgo) : -1;
const PresenceLabel = sdk.getComponent("rooms.PresenceLabel");
let presenceLabel = null;
if (this.props.showPresence) {
presenceLabel = /*#__PURE__*/_react.default.createElement(PresenceLabel, {
activeAgo: activeAgo,
currentlyActive: this.props.presenceCurrentlyActive,
presenceState: this.props.presenceState
});
}
if (this.props.subtextLabel) {
presenceLabel = /*#__PURE__*/_react.default.createElement("span", {
className: "mx_EntityTile_subtext"
}, this.props.subtextLabel);
}
nameEl = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_details"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_name",
dir: "auto"
}, name), presenceLabel);
} else if (this.props.subtextLabel) {
nameEl = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_details"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_name",
dir: "auto"
}, name), /*#__PURE__*/_react.default.createElement("span", {
className: "mx_EntityTile_subtext"
}, this.props.subtextLabel));
} else {
nameEl = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_name",
dir: "auto"
}, name);
}
let inviteButton;
if (this.props.showInviteButton) {
inviteButton = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_invite"
}, /*#__PURE__*/_react.default.createElement("img", {
src: require("../../../../res/img/plus.svg"),
width: "16",
height: "16"
}));
}
let powerLabel;
const powerStatus = this.props.powerStatus;
if (powerStatus) {
const powerText = {
[EntityTile.POWER_STATUS_MODERATOR]: (0, _languageHandler._t)("Mod"),
[EntityTile.POWER_STATUS_ADMIN]: (0, _languageHandler._t)("Admin")
}[powerStatus];
powerLabel = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_power"
}, powerText);
}
let e2eIcon;
const {
e2eStatus
} = this.props;
if (e2eStatus) {
e2eIcon = /*#__PURE__*/_react.default.createElement(_E2EIcon.default, {
status: e2eStatus,
isUser: true,
bordered: true
});
}
const BaseAvatar = sdk.getComponent('avatars.BaseAvatar');
const av = this.props.avatarJsx || /*#__PURE__*/_react.default.createElement(BaseAvatar, {
name: this.props.name,
width: 36,
height: 36,
"aria-hidden": "true"
}); // The wrapping div is required to make the magic mouse listener work, for some reason.
return /*#__PURE__*/_react.default.createElement("div", {
ref: c => this.container = c
}, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: (0, _classnames.default)(mainClassNames),
title: this.props.title,
onClick: this.props.onClick
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EntityTile_avatar"
}, av, e2eIcon), nameEl, powerLabel, inviteButton));
}
}, (0, _defineProperty2.default)(_class2, "propTypes", {
name: _propTypes.default.string,
title: _propTypes.default.string,
avatarJsx: _propTypes.default.any,
// <BaseAvatar />
className: _propTypes.default.string,
presenceState: _propTypes.default.string,
presenceLastActiveAgo: _propTypes.default.number,
presenceLastTs: _propTypes.default.number,
presenceCurrentlyActive: _propTypes.default.bool,
showInviteButton: _propTypes.default.bool,
shouldComponentUpdate: _propTypes.default.func,
onClick: _propTypes.default.func,
suppressOnHover: _propTypes.default.bool,
showPresence: _propTypes.default.bool,
subtextLabel: _propTypes.default.string,
e2eStatus: _propTypes.default.string
}), (0, _defineProperty2.default)(_class2, "defaultProps", {
shouldComponentUpdate: function (nextProps, nextState) {
return true;
},
onClick: function () {},
presenceState: "offline",
presenceLastActiveAgo: 0,
presenceLastTs: 0,
showInviteButton: false,
suppressOnHover: false,
showPresence: true
}), _temp)) || _class);
EntityTile.POWER_STATUS_MODERATOR = "moderator";
EntityTile.POWER_STATUS_ADMIN = "admin";
var _default = EntityTile;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL0VudGl0eVRpbGUuanMiXSwibmFtZXMiOlsiUFJFU0VOQ0VfQ0xBU1MiLCJwcmVzZW5jZUNsYXNzRm9yTWVtYmVyIiwicHJlc2VuY2VTdGF0ZSIsImxhc3RBY3RpdmVBZ28iLCJzaG93UHJlc2VuY2UiLCJFbnRpdHlUaWxlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJob3ZlciIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsInN0YXRlIiwicHJvcHMiLCJyZW5kZXIiLCJtYWluQ2xhc3NOYW1lcyIsInN1cHByZXNzT25Ib3ZlciIsImNsYXNzTmFtZSIsInByZXNlbmNlQ2xhc3MiLCJwcmVzZW5jZUxhc3RBY3RpdmVBZ28iLCJuYW1lRWwiLCJuYW1lIiwiYWN0aXZlQWdvIiwiRGF0ZSIsIm5vdyIsInByZXNlbmNlTGFzdFRzIiwiUHJlc2VuY2VMYWJlbCIsInNkayIsImdldENvbXBvbmVudCIsInByZXNlbmNlTGFiZWwiLCJwcmVzZW5jZUN1cnJlbnRseUFjdGl2ZSIsInN1YnRleHRMYWJlbCIsImludml0ZUJ1dHRvbiIsInNob3dJbnZpdGVCdXR0b24iLCJyZXF1aXJlIiwicG93ZXJMYWJlbCIsInBvd2VyU3RhdHVzIiwicG93ZXJUZXh0IiwiUE9XRVJfU1RBVFVTX01PREVSQVRPUiIsIlBPV0VSX1NUQVRVU19BRE1JTiIsImUyZUljb24iLCJlMmVTdGF0dXMiLCJCYXNlQXZhdGFyIiwiYXYiLCJhdmF0YXJKc3giLCJjIiwiY29udGFpbmVyIiwidGl0bGUiLCJvbkNsaWNrIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYW55IiwibnVtYmVyIiwiYm9vbCIsImZ1bmMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFrQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxjQUFjLEdBQUc7QUFDbkIs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LGVBQWUsRUFBRSxLQVBDO0FBUWxCWixFQUFBQSxZQUFZLEVBQUU7QUFSSSxDO0FBMkgxQkMsVUFBVSxDQUFDaUMsc0JBQVgsR0FBb0MsV0FBcEM7QUFDQWpDLFVBQVUsQ0FBQ2tDLGtCQUFYLEdBQWdDLE9BQWhDO2VBRWVsQyxVIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDE1LCAyMDE2IE9wZW5NYXJrZXQgTHRkXG5Db3B5cmlnaHQgMjAxOCBOZXcgVmVjdG9yIEx0ZFxuQ29weXJpZ2h0IDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAqIGFzIHNkayBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tICcuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uJztcbmltcG9ydCB7IF90IH0gZnJvbSAnLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgRTJFSWNvbiBmcm9tICcuL0UyRUljb24nO1xuaW1wb3J0IHtyZXBsYWNlYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3JlcGxhY2VhYmxlQ29tcG9uZW50XCI7XG5cbmNvbnN0IFBSRVNFTkNFX0NMQVNTID0ge1xuICAgIFwib2ZmbGluZVwiOiBcIm14X0VudGl0eVRpbGVfb2ZmbGluZVwiLFxuICAgIFwib25saW5lXCI6IFwibXhfRW50aXR5VGlsZV9vbmxpbmVcIixcbiAgICBcInVuYXZhaWxhYmxlXCI6IFwibXhfRW50aXR5VGlsZV91bmF2YWlsYWJsZVwiLFxufTtcblxuZnVuY3Rpb24gcHJlc2VuY2VDbGFzc0Zvck1lbWJlcihwcmVzZW5jZVN0YXRlLCBsYXN0QWN0aXZlQWdvLCBzaG93UHJlc2VuY2UpIHtcbiAgICBpZiAoc2hvd1ByZXNlbmNlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gJ214X0VudGl0eVRpbGVfb25saW5lX2JlZW5hY3RpdmUnO1xuICAgIH1cblxuICAgIC8vIG9mZmxpbmUgaXMgc3BsaXQgaW50byB0d28gY2F0ZWdvcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBoYXZlXG4gICAgLy8gYSBsYXN0X2FjdGl2ZV9hZ28gZm9yIHRoZW0uXG4gICAgaWYgKHByZXNlbmNlU3RhdGUgPT0gJ29mZmxpbmUnKSB7XG4gICAgICAgIGlmIChsYXN0QWN0aXZlQWdvKSB7XG4gICAgICAgICAgICByZXR1cm4gUFJFU0VOQ0VfQ0xBU1NbJ29mZmxpbmUnXSArICdfYmVlbmFjdGl2ZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUFJFU0VOQ0VfQ0xBU1NbJ29mZmxpbmUnXSArICdfbmV2ZXJhY3RpdmUnO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChwcmVzZW5jZVN0YXRlKSB7XG4gICAgICAgIHJldHVybiBQUkVTRU5DRV9DTEFTU1twcmVzZW5jZVN0YXRlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUFJFU0VOQ0VfQ0xBU1NbJ29mZmxpbmUnXSArICdfbmV2ZXJhY3RpdmUnO1xuICAgIH1cbn1cblxuQHJlcGxhY2VhYmxlQ29tcG9uZW50KFwidmlld3Mucm9vbXMuRW50aXR5VGlsZVwiKVxuY2xhc3MgRW50aXR5VGlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGF2YXRhckpzeDogUHJvcFR5cGVzLmFueSwgLy8gPEJhc2VBdmF0YXIgLz5cbiAgICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBwcmVzZW5jZVN0YXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBwcmVzZW5jZUxhc3RBY3RpdmVBZ286IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHByZXNlbmNlTGFzdFRzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBwcmVzZW5jZUN1cnJlbnRseUFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIHNob3dJbnZpdGVCdXR0b246IFByb3BUeXBlcy5ib29sLFxuICAgICAgICBzaG91bGRDb21wb25lbnRVcGRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgc3VwcHJlc3NPbkhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgc2hvd1ByZXNlbmNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgc3VidGV4dExhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBlMmVTdGF0dXM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfTtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIHByZXNlbmNlU3RhdGU6IFwib2ZmbGluZVwiLFxuICAgICAgICBwcmVzZW5jZUxhc3RBY3RpdmVBZ286IDAsXG4gICAgICAgIHByZXNlbmNlTGFzdFRzOiAwLFxuICAgICAgICBzaG93SW52aXRlQnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc3VwcHJlc3NPbkhvdmVyOiBmYWxzZSxcbiAgICAgICAgc2hvd1ByZXNlbmNlOiB0cnVlLFxuICAgIH07XG5cbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgaG92ZXI6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaG92ZXIgIT09IG5leHRTdGF0ZS5ob3ZlcikgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBtYWluQ2xhc3NOYW1lcyA9IHtcbiAgICAgICAgICAgIFwibXhfRW50aXR5VGlsZVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJteF9FbnRpdHlUaWxlX25vSG92ZXJcIjogdGhpcy5wcm9wcy5zdXBwcmVzc09uSG92ZXIsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNsYXNzTmFtZSkgbWFpbkNsYXNzTmFtZXNbdGhpcy5wcm9wcy5jbGFzc05hbWVdID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwcmVzZW5jZUNsYXNzID0gcHJlc2VuY2VDbGFzc0Zvck1lbWJlcihcbiAgICAgICAgICAgIHRoaXMucHJvcHMucHJlc2VuY2VTdGF0ZSwgdGhpcy5wcm9wcy5wcmVzZW5jZUxhc3RBY3RpdmVBZ28sIHRoaXMucHJvcHMuc2hvd1ByZXNlbmNlLFxuICAgICAgICApO1xuICAgICAgICBtYWluQ2xhc3NOYW1lc1twcmVzZW5jZUNsYXNzXSA9IHRydWU7XG5cbiAgICAgICAgbGV0IG5hbWVFbDtcbiAgICAgICAgY29uc3Qge25hbWV9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc3VwcHJlc3NPbkhvdmVyKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVBZ28gPSB0aGlzLnByb3BzLnByZXNlbmNlTGFzdEFjdGl2ZUFnbyA/XG4gICAgICAgICAgICAgICAgKERhdGUubm93KCkgLSAodGhpcy5wcm9wcy5wcmVzZW5jZUxhc3RUcyAtIHRoaXMucHJvcHMucHJlc2VuY2VMYXN0QWN0aXZlQWdvKSkgOiAtMTtcblxuICAgICAgICAgICAgY29uc3QgUHJlc2VuY2VMYWJlbCA9IHNkay5nZXRDb21wb25lbnQoXCJyb29tcy5QcmVzZW5jZUxhYmVsXCIpO1xuICAgICAgICAgICAgbGV0IHByZXNlbmNlTGFiZWwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuc2hvd1ByZXNlbmNlKSB7XG4gICAgICAgICAgICAgICAgcHJlc2VuY2VMYWJlbCA9IDxQcmVzZW5jZUxhYmVsIGFjdGl2ZUFnbz17YWN0aXZlQWdvfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlBY3RpdmU9e3RoaXMucHJvcHMucHJlc2VuY2VDdXJyZW50bHlBY3RpdmV9XG4gICAgICAgICAgICAgICAgICAgIHByZXNlbmNlU3RhdGU9e3RoaXMucHJvcHMucHJlc2VuY2VTdGF0ZX0gLz47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5zdWJ0ZXh0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICBwcmVzZW5jZUxhYmVsID0gPHNwYW4gY2xhc3NOYW1lPVwibXhfRW50aXR5VGlsZV9zdWJ0ZXh0XCI+e3RoaXMucHJvcHMuc3VidGV4dExhYmVsfTwvc3Bhbj47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuYW1lRWwgPSAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9FbnRpdHlUaWxlX2RldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9FbnRpdHlUaWxlX25hbWVcIiBkaXI9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWUgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3ByZXNlbmNlTGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3VidGV4dExhYmVsKSB7XG4gICAgICAgICAgICBuYW1lRWwgPSAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9FbnRpdHlUaWxlX2RldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9FbnRpdHlUaWxlX25hbWVcIiBkaXI9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14X0VudGl0eVRpbGVfc3VidGV4dFwiPnt0aGlzLnByb3BzLnN1YnRleHRMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmFtZUVsID0gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfRW50aXR5VGlsZV9uYW1lXCIgZGlyPVwiYXV0b1wiPnsgbmFtZSB9PC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGludml0ZUJ1dHRvbjtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2hvd0ludml0ZUJ1dHRvbikge1xuICAgICAgICAgICAgaW52aXRlQnV0dG9uID0gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfRW50aXR5VGlsZV9pbnZpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e3JlcXVpcmUoXCIuLi8uLi8uLi8uLi9yZXMvaW1nL3BsdXMuc3ZnXCIpfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwb3dlckxhYmVsO1xuICAgICAgICBjb25zdCBwb3dlclN0YXR1cyA9IHRoaXMucHJvcHMucG93ZXJTdGF0dXM7XG4gICAgICAgIGlmIChwb3dlclN0YXR1cykge1xuICAgICAgICAgICAgY29uc3QgcG93ZXJUZXh0ID0ge1xuICAgICAgICAgICAgICAgIFtFbnRpdHlUaWxlLlBPV0VSX1NUQVRVU19NT0RFUkFUT1JdOiBfdChcIk1vZFwiKSxcbiAgICAgICAgICAgICAgICBbRW50aXR5VGlsZS5QT1dFUl9TVEFUVVNfQURNSU5dOiBfdChcIkFkbWluXCIpLFxuICAgICAgICAgICAgfVtwb3dlclN0YXR1c107XG4gICAgICAgICAgICBwb3dlckxhYmVsID0gPGRpdiBjbGFzc05hbWU9XCJteF9FbnRpdHlUaWxlX3Bvd2VyXCI+e3Bvd2VyVGV4dH08L2Rpdj47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZTJlSWNvbjtcbiAgICAgICAgY29uc3QgeyBlMmVTdGF0dXMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChlMmVTdGF0dXMpIHtcbiAgICAgICAgICAgIGUyZUljb24gPSA8RTJFSWNvbiBzdGF0dXM9e2UyZVN0YXR1c30gaXNVc2VyPXt0cnVlfSBib3JkZXJlZD17dHJ1ZX0gLz47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBCYXNlQXZhdGFyID0gc2RrLmdldENvbXBvbmVudCgnYXZhdGFycy5CYXNlQXZhdGFyJyk7XG5cbiAgICAgICAgY29uc3QgYXYgPSB0aGlzLnByb3BzLmF2YXRhckpzeCB8fFxuICAgICAgICAgICAgPEJhc2VBdmF0YXIgbmFtZT17dGhpcy5wcm9wcy5uYW1lfSB3aWR0aD17MzZ9IGhlaWdodD17MzZ9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+O1xuXG4gICAgICAgIC8vIFRoZSB3cmFwcGluZyBkaXYgaXMgcmVxdWlyZWQgdG8gbWFrZSB0aGUgbWFnaWMgbW91c2UgbGlzdGVuZXIgd29yaywgZm9yIHNvbWUgcmVhc29uLlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiByZWY9eyhjKSA9PiB0aGlzLmNvbnRhaW5lciA9IGN9ID5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMobWFpbkNsYXNzTmFtZXMpfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9FbnRpdHlUaWxlX2F2YXRhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgeyBhdiB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7IGUyZUljb24gfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lRWwgfVxuICAgICAgICAgICAgICAgICAgICB7IHBvd2VyTGFiZWwgfVxuICAgICAgICAgICAgICAgICAgICB7IGludml0ZUJ1dHRvbiB9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5FbnRpdHlUaWxlLlBPV0VSX1NUQVRVU19NT0RFUkFUT1IgPSBcIm1vZGVyYXRvclwiO1xuRW50aXR5VGlsZS5QT1dFUl9TVEFUVVNfQURNSU4gPSBcImFkbWluXCI7XG5cbmV4cG9ydCBkZWZhdWx0IEVudGl0eVRpbGU7XG4iXX0=