UNPKG

netlify-cms-widget-list

Version:

Widget for editing lists in Netlify CMS.

53 lines (33 loc) 231 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _core = require("@emotion/core"); var _styledBase = _interopRequireDefault(require("@emotion/styled-base")); var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId")); var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty")); var _partial2 = _interopRequireDefault(require("lodash/partial")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes")); var _immutable = require("immutable"); var _v = _interopRequireDefault(require("uuid/v4")); var _reactSortableHoc = require("react-sortable-hoc"); var _netlifyCmsWidgetObject = _interopRequireDefault(require("netlify-cms-widget-object")); var _netlifyCmsUiDefault = require("netlify-cms-ui-default"); var _netlifyCmsLibWidgets = require("netlify-cms-lib-widgets"); var _typedListHelpers = require("./typedListHelpers"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } const ObjectControl = _netlifyCmsWidgetObject.default.controlComponent; const ListItem = (0, _styledBase.default)("div", { target: "e14bfka80", label: "ListItem" })(process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0QmlCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgTmV0bGlmeUNtc1dpZGdldE9iamVjdCBmcm9tICduZXRsaWZ5LWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnbmV0bGlmeS1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICduZXRsaWZ5LWNtcy1saWItd2lkZ2V0cyc7XG5cbmltcG9ydCB7XG4gIFRZUEVTX0tFWSxcbiAgZ2V0VHlwZWRGaWVsZEZvclZhbHVlLFxuICByZXNvbHZlRmllbGRLZXlUeXBlLFxuICBnZXRFcnJvck1lc3NhZ2VGb3JUeXBlZEZpZWxkQW5kVmFsdWUsXG59IGZyb20gJy4vdHlwZWRMaXN0SGVscGVycyc7XG5cbmNvbnN0IE9iamVjdENvbnRyb2wgPSBOZXRsaWZ5Q21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTb3J0YWJsZUxpc3RJdGVtID0gU29ydGFibGVFbGVtZW50KExpc3RJdGVtKTtcblxuY29uc3QgU3R5bGVkTGlzdEl0ZW1Ub3BCYXIgPSBzdHlsZWQoTGlzdEl0ZW1Ub3BCYXIpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuYDtcblxuY29uc3QgTmVzdGVkT2JqZWN0TGFiZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5jb2xsYXBzZWQgPyAnYmxvY2snIDogJ25vbmUnKX07XG4gIGJvcmRlci10b3A6IDA7XG4gIGNvbG9yOiAke3Byb3BzID0+IChwcm9wcy5lcnJvciA/IGNvbG9ycy5lcnJvclRleHQgOiAnaW5oZXJpdCcpfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbiAgcGFkZGluZzogMTNweDtcbiAgYm9yZGVyLXJhZGl1czogMCAwICR7bGVuZ3Rocy5ib3JkZXJSYWRpdXN9ICR7bGVuZ3Rocy5ib3JkZXJSYWRpdXN9O1xuYDtcblxuY29uc3Qgc3R5bGVTdHJpbmdzID0ge1xuICBjb2xsYXBzZWRPYmplY3RDb250cm9sOiBgXG4gICAgZGlzcGxheTogbm9uZTtcbiAgYCxcbiAgb2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyOiBgXG4gICAgcGFkZGluZzogJHtsZW5ndGhzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lclBhZGRpbmd9O1xuICBgLFxufTtcblxuY29uc3Qgc3R5bGVzID0ge1xuICBsaXN0Q29udHJvbEl0ZW06IGNzc2BcbiAgICBtYXJnaW4tdG9wOiAxOHB4O1xuXG4gICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgIG1hcmdpbi10b3A6IDI2cHg7XG4gICAgfVxuICBgLFxuICBsaXN0Q29udHJvbEl0ZW1Db2xsYXBzZWQ6IGNzc2BcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgYCxcbn07XG5cbmNvbnN0IFNvcnRhYmxlTGlzdCA9IFNvcnRhYmxlQ29udGFpbmVyKCh7IGl0ZW1zLCByZW5kZXJJdGVtIH0pID0+IHtcbiAgcmV0dXJuIDxkaXY+e2l0ZW1zLm1hcChyZW5kZXJJdGVtKX08L2Rpdj47XG59KTtcblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */"); const SortableListItem = (0, _reactSortableHoc.SortableElement)(ListItem); const StyledListItemTopBar = ( /*#__PURE__*/0, _styledBase.default)(_netlifyCmsUiDefault.ListItemTopBar, { target: "e14bfka81", label: "StyledListItemTopBar" })("background-color:", _netlifyCmsUiDefault.colors.textFieldBorder, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQ21EIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgTmV0bGlmeUNtc1dpZGdldE9iamVjdCBmcm9tICduZXRsaWZ5LWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnbmV0bGlmeS1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICduZXRsaWZ5LWNtcy1saWItd2lkZ2V0cyc7XG5cbmltcG9ydCB7XG4gIFRZUEVTX0tFWSxcbiAgZ2V0VHlwZWRGaWVsZEZvclZhbHVlLFxuICByZXNvbHZlRmllbGRLZXlUeXBlLFxuICBnZXRFcnJvck1lc3NhZ2VGb3JUeXBlZEZpZWxkQW5kVmFsdWUsXG59IGZyb20gJy4vdHlwZWRMaXN0SGVscGVycyc7XG5cbmNvbnN0IE9iamVjdENvbnRyb2wgPSBOZXRsaWZ5Q21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTb3J0YWJsZUxpc3RJdGVtID0gU29ydGFibGVFbGVtZW50KExpc3RJdGVtKTtcblxuY29uc3QgU3R5bGVkTGlzdEl0ZW1Ub3BCYXIgPSBzdHlsZWQoTGlzdEl0ZW1Ub3BCYXIpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuYDtcblxuY29uc3QgTmVzdGVkT2JqZWN0TGFiZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5jb2xsYXBzZWQgPyAnYmxvY2snIDogJ25vbmUnKX07XG4gIGJvcmRlci10b3A6IDA7XG4gIGNvbG9yOiAke3Byb3BzID0+IChwcm9wcy5lcnJvciA/IGNvbG9ycy5lcnJvclRleHQgOiAnaW5oZXJpdCcpfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbiAgcGFkZGluZzogMTNweDtcbiAgYm9yZGVyLXJhZGl1czogMCAwICR7bGVuZ3Rocy5ib3JkZXJSYWRpdXN9ICR7bGVuZ3Rocy5ib3JkZXJSYWRpdXN9O1xuYDtcblxuY29uc3Qgc3R5bGVTdHJpbmdzID0ge1xuICBjb2xsYXBzZWRPYmplY3RDb250cm9sOiBgXG4gICAgZGlzcGxheTogbm9uZTtcbiAgYCxcbiAgb2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyOiBgXG4gICAgcGFkZGluZzogJHtsZW5ndGhzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lclBhZGRpbmd9O1xuICBgLFxufTtcblxuY29uc3Qgc3R5bGVzID0ge1xuICBsaXN0Q29udHJvbEl0ZW06IGNzc2BcbiAgICBtYXJnaW4tdG9wOiAxOHB4O1xuXG4gICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgIG1hcmdpbi10b3A6IDI2cHg7XG4gICAgfVxuICBgLFxuICBsaXN0Q29udHJvbEl0ZW1Db2xsYXBzZWQ6IGNzc2BcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgYCxcbn07XG5cbmNvbnN0IFNvcnRhYmxlTGlzdCA9IFNvcnRhYmxlQ29udGFpbmVyKCh7IGl0ZW1zLCByZW5kZXJJdGVtIH0pID0+IHtcbiAgcmV0dXJuIDxkaXY+e2l0ZW1zLm1hcChyZW5kZXJJdGVtKX08L2Rpdj47XG59KTtcblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbW