UNPKG

botframework-webchat-component

Version:
90 lines (87 loc) 24.6 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _react = _interopRequireWildcard(require("react")); var _useMemoWithPrevious = _interopRequireDefault(require("../../hooks/internal/useMemoWithPrevious")); var _Context = _interopRequireDefault(require("./private/Context")); var _useActivitiesWithRenderer = _interopRequireDefault(require("./private/useActivitiesWithRenderer")); var _useActivityTreeWithRenderer = _interopRequireDefault(require("./private/useActivityTreeWithRenderer")); var _useContext = _interopRequireDefault(require("./private/useContext")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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 _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } 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) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_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 useActivities = _botframeworkWebchatApi.hooks.useActivities, useCreateActivityRenderer = _botframeworkWebchatApi.hooks.useCreateActivityRenderer, useGetActivitiesByKey = _botframeworkWebchatApi.hooks.useGetActivitiesByKey, useGetKeyByActivity = _botframeworkWebchatApi.hooks.useGetKeyByActivity; var ActivityTreeComposer = function ActivityTreeComposer(_ref) { var children = _ref.children; var existingContext = (0, _useContext.default)(false); if (existingContext) { throw new Error('botframework-webchat internal: <ActivityTreeComposer> should not be nested.'); } var _useActivities = useActivities(), _useActivities2 = _slicedToArray(_useActivities, 1), rawActivities = _useActivities2[0]; var getActivitiesByKey = useGetActivitiesByKey(); var getKeyByActivity = useGetKeyByActivity(); var activities = (0, _react.useMemo)(function () { var activities = []; var _iterator = _createForOfIteratorHelper(rawActivities), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var activity = _step.value; // If an activity has multiple revisions, display the latest revision only at the position of the first revision. // "Activities with same key" means "multiple revisions of same activity." var activitiesWithSameKey = getActivitiesByKey(getKeyByActivity(activity)); // TODO: We may want to send all revisions of activity to the middleware so they can render UI to see previous revisions. activitiesWithSameKey[0] === activity && activities.push(activitiesWithSameKey[activitiesWithSameKey.length - 1]); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return Object.freeze(activities); }, [getActivitiesByKey, getKeyByActivity, rawActivities]); var createActivityRenderer = useCreateActivityRenderer(); var activitiesWithRenderer = (0, _useActivitiesWithRenderer.default)(activities, createActivityRenderer); var activityTreeWithRenderer = (0, _useActivityTreeWithRenderer.default)(activitiesWithRenderer); var flattenedActivityTreeWithRenderer = (0, _useMemoWithPrevious.default)(function (prevFlattenedActivityTree) { var nextFlattenedActivityTree = Object.freeze(activityTreeWithRenderer.reduce(function (intermediate, entriesWithSameSender) { return entriesWithSameSender.reduce(function (intermediate, entriesWithSameSenderAndStatus) { return entriesWithSameSenderAndStatus.reduce(function (intermediate, entry) { intermediate.push(entry); return intermediate; }, intermediate); }, intermediate); }, [])); return nextFlattenedActivityTree.length === (prevFlattenedActivityTree === null || prevFlattenedActivityTree === void 0 ? void 0 : prevFlattenedActivityTree.length) && nextFlattenedActivityTree.every(function (item, index) { return item === prevFlattenedActivityTree[+index]; }) ? prevFlattenedActivityTree : nextFlattenedActivityTree; }, [activityTreeWithRenderer]); var contextValue = (0, _react.useMemo)(function () { return { activityTreeWithRendererState: Object.freeze([activityTreeWithRenderer]), flattenedActivityTreeWithRendererState: Object.freeze([flattenedActivityTreeWithRenderer]) }; }, [activityTreeWithRenderer, flattenedActivityTreeWithRenderer]); return /*#__PURE__*/_react.default.createElement(_Context.default.Provider, { value: contextValue }, children); }; var _default = ActivityTreeComposer; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl91c2VNZW1vV2l0aFByZXZpb3VzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9Db250ZXh0IiwiX3VzZUFjdGl2aXRpZXNXaXRoUmVuZGVyZXIiLCJfdXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyIiwiX3VzZUNvbnRleHQiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIl90eXBlb2YiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibyIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsImkiLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwiX2UyIiwiZiIsIlR5cGVFcnJvciIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJlcnIiLCJzdGVwIiwibmV4dCIsIl9lMyIsInJldHVybiIsIl9zbGljZWRUb0FycmF5IiwiYXJyIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwibGVuIiwiYXJyMiIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwicHVzaCIsInVzZUFjdGl2aXRpZXMiLCJob29rcyIsInVzZUNyZWF0ZUFjdGl2aXR5UmVuZGVyZXIiLCJ1c2VHZXRBY3Rpdml0aWVzQnlLZXkiLCJ1c2VHZXRLZXlCeUFjdGl2aXR5IiwiQWN0aXZpdHlUcmVlQ29tcG9zZXIiLCJfcmVmIiwiY2hpbGRyZW4iLCJleGlzdGluZ0NvbnRleHQiLCJ1c2VBY3Rpdml0eVRyZWVDb250ZXh0IiwiRXJyb3IiLCJfdXNlQWN0aXZpdGllcyIsIl91c2VBY3Rpdml0aWVzMiIsInJhd0FjdGl2aXRpZXMiLCJnZXRBY3Rpdml0aWVzQnlLZXkiLCJnZXRLZXlCeUFjdGl2aXR5IiwiYWN0aXZpdGllcyIsInVzZU1lbW8iLCJfaXRlcmF0b3IiLCJfc3RlcCIsImFjdGl2aXR5IiwiYWN0aXZpdGllc1dpdGhTYW1lS2V5IiwiZnJlZXplIiwiY3JlYXRlQWN0aXZpdHlSZW5kZXJlciIsImFjdGl2aXRpZXNXaXRoUmVuZGVyZXIiLCJ1c2VBY3Rpdml0aWVzV2l0aFJlbmRlcmVyIiwiYWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyIiwidXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyIiwiZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyIiwidXNlTWVtb1dpdGhQcmV2aW91cyIsInByZXZGbGF0dGVuZWRBY3Rpdml0eVRyZWUiLCJuZXh0RmxhdHRlbmVkQWN0aXZpdHlUcmVlIiwicmVkdWNlIiwiaW50ZXJtZWRpYXRlIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzIiwiZW50cnkiLCJldmVyeSIsIml0ZW0iLCJpbmRleCIsImNvbnRleHRWYWx1ZSIsImFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlclN0YXRlIiwiZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyU3RhdGUiLCJjcmVhdGVFbGVtZW50IiwiUHJvdmlkZXIiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL0FjdGl2aXR5VHJlZUNvbXBvc2VyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob29rcywgdHlwZSBBY3Rpdml0eUNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHR5cGUgeyBXZWJDaGF0QWN0aXZpdHkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHVzZU1lbW9XaXRoUHJldmlvdXMgZnJvbSAnLi4vLi4vaG9va3MvaW50ZXJuYWwvdXNlTWVtb1dpdGhQcmV2aW91cyc7XG5pbXBvcnQgQWN0aXZpdHlUcmVlQ29udGV4dCBmcm9tICcuL3ByaXZhdGUvQ29udGV4dCc7XG5pbXBvcnQgeyBBY3Rpdml0eVdpdGhSZW5kZXJlciwgUmVhZG9ubHlBY3Rpdml0eVRyZWUgfSBmcm9tICcuL3ByaXZhdGUvdHlwZXMnO1xuaW1wb3J0IHVzZUFjdGl2aXRpZXNXaXRoUmVuZGVyZXIgZnJvbSAnLi9wcml2YXRlL3VzZUFjdGl2aXRpZXNXaXRoUmVuZGVyZXInO1xuaW1wb3J0IHVzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciBmcm9tICcuL3ByaXZhdGUvdXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyJztcbmltcG9ydCB1c2VBY3Rpdml0eVRyZWVDb250ZXh0IGZyb20gJy4vcHJpdmF0ZS91c2VDb250ZXh0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eVRyZWVDb250ZXh0VHlwZSB9IGZyb20gJy4vcHJpdmF0ZS9Db250ZXh0JztcblxudHlwZSBBY3Rpdml0eVRyZWVDb21wb3NlclByb3BzID0gUmVhZG9ubHk8eyBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZCB9PjtcblxuY29uc3QgeyB1c2VBY3Rpdml0aWVzLCB1c2VDcmVhdGVBY3Rpdml0eVJlbmRlcmVyLCB1c2VHZXRBY3Rpdml0aWVzQnlLZXksIHVzZUdldEtleUJ5QWN0aXZpdHkgfSA9IGhvb2tzO1xuXG5jb25zdCBBY3Rpdml0eVRyZWVDb21wb3NlciA9ICh7IGNoaWxkcmVuIH06IEFjdGl2aXR5VHJlZUNvbXBvc2VyUHJvcHMpID0+IHtcbiAgY29uc3QgZXhpc3RpbmdDb250ZXh0ID0gdXNlQWN0aXZpdHlUcmVlQ29udGV4dChmYWxzZSk7XG5cbiAgaWYgKGV4aXN0aW5nQ29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQgaW50ZXJuYWw6IDxBY3Rpdml0eVRyZWVDb21wb3Nlcj4gc2hvdWxkIG5vdCBiZSBuZXN0ZWQuJyk7XG4gIH1cblxuICBjb25zdCBbcmF3QWN0aXZpdGllc10gPSB1c2VBY3Rpdml0aWVzKCk7XG4gIGNvbnN0IGdldEFjdGl2aXRpZXNCeUtleSA9IHVzZUdldEFjdGl2aXRpZXNCeUtleSgpO1xuICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5ID0gdXNlR2V0S2V5QnlBY3Rpdml0eSgpO1xuXG4gIGNvbnN0IGFjdGl2aXRpZXMgPSB1c2VNZW1vPHJlYWRvbmx5IFdlYkNoYXRBY3Rpdml0eVtdPigoKSA9PiB7XG4gICAgY29uc3QgYWN0aXZpdGllczogV2ViQ2hhdEFjdGl2aXR5W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYWN0aXZpdHkgb2YgcmF3QWN0aXZpdGllcykge1xuICAgICAgLy8gSWYgYW4gYWN0aXZpdHkgaGFzIG11bHRpcGxlIHJldmlzaW9ucywgZGlzcGxheSB0aGUgbGF0ZXN0IHJldmlzaW9uIG9ubHkgYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCByZXZpc2lvbi5cblxuICAgICAgLy8gXCJBY3Rpdml0aWVzIHdpdGggc2FtZSBrZXlcIiBtZWFucyBcIm11bHRpcGxlIHJldmlzaW9ucyBvZiBzYW1lIGFjdGl2aXR5LlwiXG4gICAgICBjb25zdCBhY3Rpdml0aWVzV2l0aFNhbWVLZXkgPSBnZXRBY3Rpdml0aWVzQnlLZXkoZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSkpO1xuXG4gICAgICAvLyBUT0RPOiBXZSBtYXkgd2FudCB0byBzZW5kIGFsbCByZXZpc2lvbnMgb2YgYWN0aXZpdHkgdG8gdGhlIG1pZGRsZXdhcmUgc28gdGhleSBjYW4gcmVuZGVyIFVJIHRvIHNlZSBwcmV2aW91cyByZXZpc2lvbnMuXG4gICAgICBhY3Rpdml0aWVzV2l0aFNhbWVLZXlbMF0gPT09IGFjdGl2aXR5ICYmIGFjdGl2aXRpZXMucHVzaChhY3Rpdml0aWVzV2l0aFNhbWVLZXlbYWN0aXZpdGllc1dpdGhTYW1lS2V5Lmxlbmd0aCAtIDFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShhY3Rpdml0aWVzKTtcbiAgfSwgW2dldEFjdGl2aXRpZXNCeUtleSwgZ2V0S2V5QnlBY3Rpdml0eSwgcmF3QWN0aXZpdGllc10pO1xuXG4gIGNvbnN0IGNyZWF0ZUFjdGl2aXR5UmVuZGVyZXI6IEFjdGl2aXR5Q29tcG9uZW50RmFjdG9yeSA9IHVzZUNyZWF0ZUFjdGl2aXR5UmVuZGVyZXIoKTtcblxuICBjb25zdCBhY3Rpdml0aWVzV2l0aFJlbmRlcmVyID0gdXNlQWN0aXZpdGllc1dpdGhSZW5kZXJlcihhY3Rpdml0aWVzLCBjcmVhdGVBY3Rpdml0eVJlbmRlcmVyKTtcblxuICBjb25zdCBhY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIgPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoYWN0aXZpdGllc1dpdGhSZW5kZXJlcik7XG5cbiAgY29uc3QgZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyID0gdXNlTWVtb1dpdGhQcmV2aW91czxSZWFkb25seTxBY3Rpdml0eVdpdGhSZW5kZXJlcltdPj4oXG4gICAgcHJldkZsYXR0ZW5lZEFjdGl2aXR5VHJlZSA9PiB7XG4gICAgICBjb25zdCBuZXh0RmxhdHRlbmVkQWN0aXZpdHlUcmVlID0gT2JqZWN0LmZyZWV6ZShcbiAgICAgICAgYWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyLnJlZHVjZTxBY3Rpdml0eVdpdGhSZW5kZXJlcltdPihcbiAgICAgICAgICAoaW50ZXJtZWRpYXRlLCBlbnRyaWVzV2l0aFNhbWVTZW5kZXIpID0+XG4gICAgICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXIucmVkdWNlPEFjdGl2aXR5V2l0aFJlbmRlcmVyW10+KFxuICAgICAgICAgICAgICAoaW50ZXJtZWRpYXRlLCBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMpID0+XG4gICAgICAgICAgICAgICAgZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLnJlZHVjZTxBY3Rpdml0eVdpdGhSZW5kZXJlcltdPigoaW50ZXJtZWRpYXRlLCBlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaW50ZXJtZWRpYXRlLnB1c2goZW50cnkpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICAgIH0sIGludGVybWVkaWF0ZSksXG4gICAgICAgICAgICAgIGludGVybWVkaWF0ZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBbXVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gbmV4dEZsYXR0ZW5lZEFjdGl2aXR5VHJlZS5sZW5ndGggPT09IHByZXZGbGF0dGVuZWRBY3Rpdml0eVRyZWU/Lmxlbmd0aCAmJlxuICAgICAgICBuZXh0RmxhdHRlbmVkQWN0aXZpdHlUcmVlLmV2ZXJ5KChpdGVtLCBpbmRleCkgPT4gaXRlbSA9PT0gcHJldkZsYXR0ZW5lZEFjdGl2aXR5VHJlZVsraW5kZXhdKVxuICAgICAgICA/IHByZXZGbGF0dGVuZWRBY3Rpdml0eVRyZWVcbiAgICAgICAgOiBuZXh0RmxhdHRlbmVkQWN0aXZpdHlUcmVlO1xuICAgIH0sXG4gICAgW2FjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcl1cbiAgKTtcblxuICBjb25zdCBjb250ZXh0VmFsdWU6IEFjdGl2aXR5VHJlZUNvbnRleHRUeXBlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgYWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyU3RhdGU6IE9iamVjdC5mcmVlemUoW2FjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcl0pIGFzIHJlYWRvbmx5IFtSZWFkb25seUFjdGl2aXR5VHJlZV0sXG4gICAgICBmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXJTdGF0ZTogT2JqZWN0LmZyZWV6ZShbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyXSkgYXMgcmVhZG9ubHkgW1xuICAgICAgICByZWFkb25seSBBY3Rpdml0eVdpdGhSZW5kZXJlcltdXG4gICAgICBdXG4gICAgfSksXG4gICAgW2FjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciwgZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyXVxuICApO1xuXG4gIHJldHVybiA8QWN0aXZpdHlUcmVlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT57Y2hpbGRyZW59PC9BY3Rpdml0eVRyZWVDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFjdGl2aXR5VHJlZUNvbXBvc2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLG9CQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFELHNCQUFBLENBQUFKLE9BQUE7QUFFQSxJQUFBTSwwQkFBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8sNEJBQUEsR0FBQUgsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElB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