botframework-webchat-component
Version:
React component of botframework-webchat
207 lines (173 loc) • 23.4 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _botframeworkWebchatApi = require("botframework-webchat-api");
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireWildcard(require("react"));
var _CollapseIcon = _interopRequireDefault(require("./Toast/CollapseIcon"));
var _ExpandIcon = _interopRequireDefault(require("./Toast/ExpandIcon"));
var _NotificationIcon = _interopRequireDefault(require("./Toast/NotificationIcon"));
var _randomId = _interopRequireDefault(require("./Utils/randomId"));
var _useStyleSet3 = _interopRequireDefault(require("./hooks/useStyleSet"));
var _useStyleToEmotionObject = _interopRequireDefault(require("./hooks/internal/useStyleToEmotionObject"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var useDebouncedNotifications = _botframeworkWebchatApi.hooks.useDebouncedNotifications,
useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer,
useRenderToast = _botframeworkWebchatApi.hooks.useRenderToast;
var ROOT_STYLE = {
display: 'flex',
flexDirection: 'column',
'& .webchat__toaster__header': {
display: 'flex',
flexShrink: 0
},
'& .webchat__toaster__expandText': {
flex: 1
},
'& .webchat__toaster__list': {
display: 'block',
listStyleType: 'none'
}
};
var LEVEL_AS_NUMBER = {
error: 1,
warn: 2,
info: 3,
success: 4
};
function getLevelAsNumber(level) {
return LEVEL_AS_NUMBER[level] || 5;
}
function compareLevel(x, y) {
return getLevelAsNumber(x) - getLevelAsNumber(y);
}
function sortNotifications(map) {
return Object.values(map) // We want the order reversed, most recent on top.
.sort(function (_ref, _ref2) {
var x = _ref.timestamp;
var y = _ref2.timestamp;
return y - x;
});
}
var PASSTHRU_FN = function PASSTHRU_FN(value) {
return value;
};
var TOAST_ACCORDION_IDS = {
two: 'TOAST_ACCORDION_TWO',
few: 'TOAST_ACCORDION_FEW',
many: 'TOAST_ACCORDION_MANY',
other: 'TOAST_ACCORDION_OTHER'
};
var BasicToaster = function BasicToaster() {
var instanceId = (0, _react.useMemo)(_randomId.default, []);
var _useStyleSet = (0, _useStyleSet3.default)(),
_useStyleSet2 = _slicedToArray(_useStyleSet, 1),
toasterStyleSet = _useStyleSet2[0].toaster;
var _useDebouncedNotifica = useDebouncedNotifications(),
_useDebouncedNotifica2 = _slicedToArray(_useDebouncedNotifica, 1),
debouncedNotifications = _useDebouncedNotifica2[0];
var _useState = (0, _react.useState)(false),
_useState2 = _slicedToArray(_useState, 2),
expanded = _useState2[0],
setExpanded = _useState2[1];
var localizeWithPlural = useLocalizer({
plural: true
});
var renderToast = useRenderToast();
var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + '';
var handleToggleExpand = (0, _react.useCallback)(function () {
return setExpanded(!expanded);
}, [expanded, setExpanded]);
var sortedNotifications = (0, _react.useMemo)(function () {
return sortNotifications(debouncedNotifications);
}, [debouncedNotifications]);
var sortedNotificationsWithChildren = (0, _react.useMemo)(function () {
return sortedNotifications.map(function (notification) {
var children = renderToast({
notification: notification
});
return children && {
children: children,
notification: notification
};
}).filter(PASSTHRU_FN);
}, [renderToast, sortedNotifications]);
var expandable = sortedNotificationsWithChildren.length > 1;
var _sortedNotificationsW = sortedNotificationsWithChildren.map(function (_ref3) {
var level = _ref3.notification.level;
return level;
}).sort(compareLevel),
_sortedNotificationsW2 = _slicedToArray(_sortedNotificationsW, 1),
highestLevel = _sortedNotificationsW2[0];
var expandableElementId = (0, _react.useMemo)(function () {
return !expandable || expanded ? "webchat__toaster__list__".concat(instanceId) : undefined;
}, [expandable, expanded, instanceId]);
var headerElementId = (0, _react.useMemo)(function () {
return expandable ? "webchat__toaster__header__".concat(instanceId) : undefined;
}, [expandable, instanceId]);
(0, _react.useEffect)(function () {
!expandable && setExpanded(false);
}, [expandable]);
return /*#__PURE__*/_react.default.createElement("div", {
"aria-labelledby": headerElementId,
"aria-live": "polite",
"aria-relevant": "all",
className: (0, _classnames.default)('webchat__toaster', {
'webchat__toaster--expandable': expandable,
'webchat__toaster--expanded': expanded,
'webchat__toaster--error': highestLevel === 'error',
'webchat__toaster--info': highestLevel === 'info',
'webchat__toaster--success': highestLevel === 'success',
'webchat__toaster--warn': highestLevel === 'warn'
}, rootClassName, toasterStyleSet + ''),
role: "log"
}, expandable && /*#__PURE__*/_react.default.createElement("button", {
"aria-controls": expandableElementId,
"aria-expanded": expanded,
className: "webchat__toaster__header",
id: headerElementId,
onClick: handleToggleExpand,
type: "button"
}, /*#__PURE__*/_react.default.createElement("div", {
"aria-hidden": true,
className: "webchat__toaster__expandLevelIconBox"
}, /*#__PURE__*/_react.default.createElement(_NotificationIcon.default, {
className: "webchat__toaster__expandLevelIcon",
level: highestLevel
})), /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__toaster__expandText"
}, localizeWithPlural(TOAST_ACCORDION_IDS, sortedNotificationsWithChildren.length)), /*#__PURE__*/_react.default.createElement("div", {
"aria-hidden": true,
className: "webchat__toaster__expandIcon"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "webchat__toaster__expandIconFocus"
}, expanded ? /*#__PURE__*/_react.default.createElement(_CollapseIcon.default, null) : /*#__PURE__*/_react.default.createElement(_ExpandIcon.default, null)))), (!expandable || expanded) && /*#__PURE__*/_react.default.createElement("ul", {
"aria-labelledby": headerElementId,
className: "webchat__toaster__list",
id: expandableElementId,
role: "region"
}, sortedNotificationsWithChildren.map(function (_ref4) {
var children = _ref4.children,
id = _ref4.notification.id;
return /*#__PURE__*/_react.default.createElement("li", {
"aria-atomic": true,
className: "webchat__toaster__listItem",
key: id,
role: "none"
}, children);
})));
};
var _default = BasicToaster;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RvYXN0ZXIuanMiXSwibmFtZXMiOlsidXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucyIsImhvb2tzIiwidXNlTG9jYWxpemVyIiwidXNlUmVuZGVyVG9hc3QiLCJST09UX1NUWUxFIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJmbGV4U2hyaW5rIiwiZmxleCIsImxpc3RTdHlsZVR5cGUiLCJMRVZFTF9BU19OVU1CRVIiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwic3VjY2VzcyIsImdldExldmVsQXNOdW1iZXIiLCJsZXZlbCIsImNvbXBhcmVMZXZlbCIsIngiLCJ5Iiwic29ydE5vdGlmaWNhdGlvbnMiLCJtYXAiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwidGltZXN0YW1wIiwiUEFTU1RIUlVfRk4iLCJ2YWx1ZSIsIlRPQVNUX0FDQ09SRElPTl9JRFMiLCJ0d28iLCJmZXciLCJtYW55Iiwib3RoZXIiLCJCYXNpY1RvYXN0ZXIiLCJpbnN0YW5jZUlkIiwicmFuZG9tSWQiLCJ0b2FzdGVyU3R5bGVTZXQiLCJ0b2FzdGVyIiwiZGVib3VuY2VkTm90aWZpY2F0aW9ucyIsImV4cGFuZGVkIiwic2V0RXhwYW5kZWQiLCJsb2NhbGl6ZVdpdGhQbHVyYWwiLCJwbHVyYWwiLCJyZW5kZXJUb2FzdCIsInJvb3RDbGFzc05hbWUiLCJoYW5kbGVUb2dnbGVFeHBhbmQiLCJzb3J0ZWROb3RpZmljYXRpb25zIiwic29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiIsIm5vdGlmaWNhdGlvbiIsImNoaWxkcmVuIiwiZmlsdGVyIiwiZXhwYW5kYWJsZSIsImxlbmd0aCIsImhpZ2hlc3RMZXZlbCIsImV4cGFuZGFibGVFbGVtZW50SWQiLCJ1bmRlZmluZWQiLCJoZWFkZXJFbGVtZW50SWQiLCJpZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7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cEJKLEVBdUNHLENBQUMsQ0FBQ1ksVUFBRCxJQUFlWixRQUFoQixrQkFDQztBQUFJLHVCQUFpQmlCLGVBQXJCO0FBQXNDLElBQUEsU0FBUyxFQUFDLHdCQUFoRDtBQUF5RSxJQUFBLEVBQUUsRUFBRUYsbUJBQTdFO0FBQWtHLElBQUEsSUFBSSxFQUFDO0FBQXZHLEtBQ0dQLCtCQUErQixDQUFDMUIsR0FBaEMsQ0FBb0M7QUFBQSxRQUFHNEIsUUFBSCxTQUFHQSxRQUFIO0FBQUEsUUFBNkJRLEVBQTdCLFNBQWFULFlBQWIsQ0FBNkJTLEVBQTdCO0FBQUEsd0JBQ25DO0FBQUkscUJBQWEsSUFBakI7QUFBdUIsTUFBQSxTQUFTLEVBQUMsNEJBQWpDO0FBQThELE1BQUEsR0FBRyxFQUFFQSxFQUFuRTtBQUF1RSxNQUFBLElBQUksRUFBQztBQUE1RSxPQUNHUixRQURILENBRG1DO0FBQUEsR0FBcEMsQ0FESCxDQXhDSixDQURGO0FBbURELENBMUZEOztlQTRGZWhCLFkiLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1tYWdpYy1udW1iZXJzOiBbXCJlcnJvclwiLCB7IFwiaWdub3JlXCI6IFswLCAxLCAyLCAzLCA0LCA1XSB9XSAqL1xuLyogZXNsaW50IHJlYWN0L2ZvcmJpZC1kb20tcHJvcHM6IFwib2ZmXCIgKi9cblxuaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBDb2xsYXBzZUljb24gZnJvbSAnLi9Ub2FzdC9Db2xsYXBzZUljb24nO1xuaW1wb3J0IEV4cGFuZEljb24gZnJvbSAnLi9Ub2FzdC9FeHBhbmRJY29uJztcbmltcG9ydCBOb3RpZmljYXRpb25JY29uIGZyb20gJy4vVG9hc3QvTm90aWZpY2F0aW9uSWNvbic7XG5pbXBvcnQgcmFuZG9tSWQgZnJvbSAnLi9VdGlscy9yYW5kb21JZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5cbmNvbnN0IHsgdXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucywgdXNlTG9jYWxpemVyLCB1c2VSZW5kZXJUb2FzdCB9ID0gaG9va3M7XG5cbmNvbnN0IFJPT1RfU1RZTEUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG5cbiAgJyYgLndlYmNoYXRfX3RvYXN0ZXJfX2hlYWRlcic6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFNocmluazogMFxuICB9LFxuXG4gICcmIC53ZWJjaGF0X190b2FzdGVyX19leHBhbmRUZXh0Jzoge1xuICAgIGZsZXg6IDFcbiAgfSxcblxuICAnJiAud2ViY2hhdF9fdG9hc3Rlcl9fbGlzdCc6IHtcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIGxpc3RTdHlsZVR5cGU6ICdub25lJ1xuICB9XG59O1xuXG5jb25zdCBMRVZFTF9BU19OVU1CRVIgPSB7XG4gIGVycm9yOiAxLFxuICB3YXJuOiAyLFxuICBpbmZvOiAzLFxuICBzdWNjZXNzOiA0XG59O1xuXG5mdW5jdGlvbiBnZXRMZXZlbEFzTnVtYmVyKGxldmVsKSB7XG4gIHJldHVybiBMRVZFTF9BU19OVU1CRVJbbGV2ZWxdIHx8IDU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVMZXZlbCh4LCB5KSB7XG4gIHJldHVybiBnZXRMZXZlbEFzTnVtYmVyKHgpIC0gZ2V0TGV2ZWxBc051bWJlcih5KTtcbn1cblxuZnVuY3Rpb24gc29ydE5vdGlmaWNhdGlvbnMobWFwKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnZhbHVlcyhtYXApXG4gICAgICAvLyBXZSB3YW50IHRoZSBvcmRlciByZXZlcnNlZCwgbW9zdCByZWNlbnQgb24gdG9wLlxuICAgICAgLnNvcnQoKHsgdGltZXN0YW1wOiB4IH0sIHsgdGltZXN0YW1wOiB5IH0pID0+IHkgLSB4KVxuICApO1xufVxuXG5jb25zdCBQQVNTVEhSVV9GTiA9IHZhbHVlID0+IHZhbHVlO1xuY29uc3QgVE9BU1RfQUNDT1JESU9OX0lEUyA9IHtcbiAgdHdvOiAnVE9BU1RfQUNDT1JESU9OX1RXTycsXG4gIGZldzogJ1RPQVNUX0FDQ09SRElPTl9GRVcnLFxuICBtYW55OiAnVE9BU1RfQUNDT1JESU9OX01BTlknLFxuICBvdGhlcjogJ1RPQVNUX0FDQ09SRElPTl9PVEhFUidcbn07XG5cbmNvbnN0IEJhc2ljVG9hc3RlciA9ICgpID0+IHtcbiAgY29uc3QgaW5zdGFuY2VJZCA9IHVzZU1lbW8ocmFuZG9tSWQsIFtdKTtcbiAgY29uc3QgW3sgdG9hc3RlcjogdG9hc3RlclN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgY29uc3QgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdID0gdXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucygpO1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbG9jYWxpemVXaXRoUGx1cmFsID0gdXNlTG9jYWxpemVyKHsgcGx1cmFsOiB0cnVlIH0pO1xuICBjb25zdCByZW5kZXJUb2FzdCA9IHVzZVJlbmRlclRvYXN0KCk7XG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRXhwYW5kID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0RXhwYW5kZWQoIWV4cGFuZGVkKSwgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0pO1xuICBjb25zdCBzb3J0ZWROb3RpZmljYXRpb25zID0gdXNlTWVtbygoKSA9PiBzb3J0Tm90aWZpY2F0aW9ucyhkZWJvdW5jZWROb3RpZmljYXRpb25zKSwgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdKTtcbiAgY29uc3Qgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNvcnRlZE5vdGlmaWNhdGlvbnNcbiAgICAgICAgLm1hcChub3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVuZGVyVG9hc3QoeyBub3RpZmljYXRpb24gfSk7XG5cbiAgICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgeyBjaGlsZHJlbiwgbm90aWZpY2F0aW9uIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoUEFTU1RIUlVfRk4pLFxuICAgIFtyZW5kZXJUb2FzdCwgc29ydGVkTm90aWZpY2F0aW9uc11cbiAgKTtcblxuICBjb25zdCBleHBhbmRhYmxlID0gc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGggPiAxO1xuICBjb25zdCBbaGlnaGVzdExldmVsXSA9IHNvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IG5vdGlmaWNhdGlvbjogeyBsZXZlbCB9IH0pID0+IGxldmVsKS5zb3J0KGNvbXBhcmVMZXZlbCk7XG5cbiAgY29uc3QgZXhwYW5kYWJsZUVsZW1lbnRJZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkID8gYHdlYmNoYXRfX3RvYXN0ZXJfX2xpc3RfXyR7aW5zdGFuY2VJZH1gIDogdW5kZWZpbmVkKSxcbiAgICBbZXhwYW5kYWJsZSwgZXhwYW5kZWQsIGluc3RhbmNlSWRdXG4gICk7XG4gIGNvbnN0IGhlYWRlckVsZW1lbnRJZCA9IHVzZU1lbW8oKCkgPT4gKGV4cGFuZGFibGUgPyBgd2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyX18ke2luc3RhbmNlSWR9YCA6IHVuZGVmaW5lZCksIFtcbiAgICBleHBhbmRhYmxlLFxuICAgIGluc3RhbmNlSWRcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAhZXhwYW5kYWJsZSAmJiBzZXRFeHBhbmRlZChmYWxzZSk7XG4gIH0sIFtleHBhbmRhYmxlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlckVsZW1lbnRJZH1cbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICBhcmlhLXJlbGV2YW50PVwiYWxsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXInLFxuICAgICAgICB7XG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLWV4cGFuZGFibGUnOiBleHBhbmRhYmxlLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1leHBhbmRlZCc6IGV4cGFuZGVkLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1lcnJvcic6IGhpZ2hlc3RMZXZlbCA9PT0gJ2Vycm9yJyxcbiAgICAgICAgICAnd2ViY2hhdF9fdG9hc3Rlci0taW5mbyc6IGhpZ2hlc3RMZXZlbCA9PT0gJ2luZm8nLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1zdWNjZXNzJzogaGlnaGVzdExldmVsID09PSAnc3VjY2VzcycsXG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLXdhcm4nOiBoaWdoZXN0TGV2ZWwgPT09ICd3YXJuJ1xuICAgICAgICB9LFxuICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICB0b2FzdGVyU3R5bGVTZXQgKyAnJ1xuICAgICAgKX1cbiAgICAgIHJvbGU9XCJsb2dcIlxuICAgID5cbiAgICAgIHtleHBhbmRhYmxlICYmIChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGFibGVFbGVtZW50SWR9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyXCJcbiAgICAgICAgICBpZD17aGVhZGVyRWxlbWVudElkfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUV4cGFuZH1cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZExldmVsSWNvbkJveFwiPlxuICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkljb24gY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kTGV2ZWxJY29uXCIgbGV2ZWw9e2hpZ2hlc3RMZXZlbH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZFRleHRcIj5cbiAgICAgICAgICAgIHtsb2NhbGl6ZVdpdGhQbHVyYWwoVE9BU1RfQUNDT1JESU9OX0lEUywgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZEljb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kSWNvbkZvY3VzXCI+e2V4cGFuZGVkID8gPENvbGxhcHNlSWNvbiAvPiA6IDxFeHBhbmRJY29uIC8+fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICl9XG4gICAgICB7KCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkKSAmJiAoXG4gICAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlckVsZW1lbnRJZH0gY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fbGlzdFwiIGlkPXtleHBhbmRhYmxlRWxlbWVudElkfSByb2xlPVwicmVnaW9uXCI+XG4gICAgICAgICAge3NvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IGNoaWxkcmVuLCBub3RpZmljYXRpb246IHsgaWQgfSB9KSA9PiAoXG4gICAgICAgICAgICA8bGkgYXJpYS1hdG9taWM9e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2xpc3RJdGVtXCIga2V5PXtpZH0gcm9sZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCYXNpY1RvYXN0ZXI7XG4iXX0=